0. {基础知识}[tap] 自动补全功能,当文件名第一个字符为.时,表示该文件为隐藏文件;
windows系统不识别linux系统文件原因在于windows核心不识别linux文件系统
dos文件回车为\n\r,linux为\n,:%s/\r//g转换.也可以用dos2linux -k filename转换
1. man 关键字 查询在线帮组
2. sync 数据同步写入磁盘
3. shutdown -h now 关掉服务后立即关机
4. chgrp root filename 更改文件所属组
5. chown 更改文件所属用户
6. chmod 更改文件属性:d(表示是目录文件还是一般文件)rwxrwxrwx分别为4+2+1=7,7+7+7; 第一个属性表示该文件类型,d=directory,l=link,b=block,c=character(bc为设备文件devce). ..
7. mkdir [-mp] filename 是建立目录用的命令,make directory的缩写,-m:设置文件权限,直接设置,不要管默认权限.-p:帮组直接建立所需要的目录递归.
例:mkdir -p test1/test2/test3/test4 加了-p参数后,可以建立多层目录.
mkdir -m 711 test2 加了-m参数后可直接设置权限
8. touch [-acdemt] filename 修改文件时间与创建新文件.
status time(ctime,-c),access time(atime,-a)指文件状态
-a:公修改access time
-c:公修改时间,而不建立文件
-d:后面可以接日期,也可以使用 --date="日期或时间"
-m:公修改mtime
-t:后面可以接时间,格式为[YYMMDDhhmm]
9. su 用来"变换身份"
10. cat 将文件内容读出来
11. ls -al 可简单通过文件第一属性来了解这个文件的类型.查看当前目录所有文件,及其属性.
12. cd [path] Change Directory的缩写,用来切换工作目录的命令
13. pwd [-p] Print Working Directory,显示当前所在的目录,-p:显示出实际中径,而非使用link路径
14. rmdir [-p] filename 删除"空"目录,只能删除空目录,加上-p参数后能将一个路径目录一次删除,但必须为空目录
15. rm [-fir] 文件或目录 -f:(force)强制删除, -i:删除前询问, -r:递归删除,常用在目录的删除
rm -rf test 将目录下的东西全都删除
16. ll =ls -l 简略写法
17. cp [-adfilprsu] source destination
18. mv [-fiv] source destination 移动文件与目录,或重命名 -u(update)若文件已存在,且源文件比较新,才会更新.
mv [options] s1 s2 s3. .. directory
mv filename1 filename2 这样就将filename1重命名了.
19. basename path 获取最后的文件名
dirname path 获取目录名
20. cat:由第一行开始显示文件内容
tac:从最后一行开始显示,可以看出tac与cat字母相反
nl:显示的时候输出行号
more:一页一页地显示文件内容
less:与more类似,但它可以向前翻页
tail:只看最后几行
od:以二进制方式读取文件内容
21. head [-n number] filename,-n:表示显示几行的意思,显示前几行
22. tail [-n number] filename,-n:表示显示几行的意思,显示后几行
23. od [-t TYPE] 可以查看执行类文件,-t:后面可以接各种"类型"的输出
a:使用默认的字符来输出
c:使用ASCII字符来输出
d[size]:使用十制进来输出
o[size]:使用浮点数值来输出
x[size]:使用十六进制输出
这个命令对普通用户来说作用不大,但对工程师来说非常有用,他们能读懂二进制内容
24. umask [-S],-S:加上S参数以字符形式显示默认权限,指定的是"该默认值需要减掉的权限",r w x分别是4 ,2, 1,也就是说,当要去掉写权限时,就输入2,要去掉读权限时,就输入4,要去掉读与写的权限时,就输入6,要去掉读与执行的权限就输入5,如:umask 022
25. chattr [+-=] [ASacdistu] filename 设置文件隐藏属性
+:增加某个特殊参数,其它原本存在的参数不动
-:删除某个特殊参数,其他原本存在的参数不动
=:设置一定,且公有后面接的参数
A:当设置了A属性时,这个文件或目录的访问时间aime将不能被修改,例如可避免手提电脑有磁盘I/O错误的情况
发生
S:这个功能有类似sync,就是将数据同步写入磁盘中
a:设置a之后,这个文件将只能增加数据,而不能删除,只有root才能设置这个属性.
c:这个属性设置后,将会自动将此文件"压缩",在读取的时候将会自动解压缩
d:当执行dump(备份)程序的时候,设置d属性将可使该文件或目录具有转储功能
i:i的作用很大,它可以让一个文件"不能被删除.改名,设置连接,也无法写入或新增数据"对于系统安全有很大帮组
j:当使用ext3文件系统格式时,设置j属性会使文件在写入时先记录在journal中,但是,当文件系统设置参数为
data=journalled时,由于已经设置了日志,所以这个属性无效
s:当文件设置了s参数时,它将会从这个硬盘空间完全删除
u:与s相反,当使用u来设置文件时,数据内容其实还存在磁盘中,可以用来还原删除
26.chmod xyz filename, 设置文件或目录的SUID SGID Stichy Bit属性.1为Sticky Bit,2为SGID,4为SUID. 例:chmod 1777 filename.前面1表示设置Sticky Bit属性
27.file filename: 如果想知道某个文件的基本信息,例如属于ASCII,数据文件还是二进制文件且其中是否使用动态函数库等信息.
28. which [-a] command 寻找执行文件.-a:将所有可找到命令均列出而不仅仅列出第一个找到的命令名称.
29. whereis [-hmsu] filename/directory 寻找特定文件
-b:只找二进制文件
-m:只找在帮组文件manual路径下的文件
-s:只找源文件
-u:没有帮组文件的文件
30. locate filename: locate,whereis都是通过数据库来搜索的,所以速度比较快,但有一个缺点就是默认数据库
是每天更新一次的.也可以手动更新.
31. find [PATH] [option] [action]: 功能强大的搜索功能.PS:要指定在哪个目录下搜索,否则默认当前目录.
-atime n:在n天之前的"一天之内"访问过的文件
-ctime n:在n天之前的"一天之内"修改过状态的文件
-mtime n:在n天之前的"一天之内"修改过的文件
-newer file:file为一个存在的文件,意思是"只要文件比file要新就列出来"
例: find / -perm +7000 -exec ls -l {} \
-exec后面的ls -l是额外的命令,{}表示"由find找到的内容","\;"表示-exec命令到此为止.
不知道全名的时候,可能过通配符*,如:find -name '*fly*': 则会查找名字含有'fly'的文件
32. df [-ahikHTm] [directory/filename] 查看当前磁盘最大允许容量,已用的容量,当前所在目录的已用容量.
du :同上
33. ln [-sf] 源文件 目标文件 :建立连接文件,不加-s建立硬连接,加-s建立符号连接.
34. fdisk [-l] 磁盘分区
fdisk /dev/hdb 分驱/dev/hdb,这里进入fdisk画面中.
35. mke2fs [-bioLj] 设备名称
36. fsck [-Atcary] 设备名称
37. badblocks [-svw] 设备名称,和fsck一样,都是用来检查硬盘错误的命令
38. mount 磁盘的载入与卸载 mount -o loop .iso directory:可以将镜像文件挂载
39. mknod 修改磁盘参数
40. gzip [-cdt#] filename : 压缩与解压缩
-c:将压缩的数据输出到屏幕上,可通赤娄据流重导来处理
-d:解压缩的参数
-t:可以用来检验一个压缩文件的一致性,看文件有无错误
-#:压缩等级,-1最快,但压缩比最差,-9最慢.
zcat filename :查看一个压缩文件内容
41. bzip2,bzcat:同上,compress扩展名为.Z,gzip为.gz,bzip2为.bz2.
42. tar [-cxtzjvfpPN] filename\directory
-c:建立压缩文件的参数命令(create的意思)
-x:解压缩文件的参数命令
-t:查看tarfile里的文件,前三个参数只能有一个存在,不能同时存在.
-z:是否需要用gzip压缩
-j:是否同时具有bzip2的属性,是否要用bzip2压缩.
-v:压缩的过程中显示文件
-f:使用文件名,在f后要立即接文件名,不要再加参数
-p:使用原文件的原来属性,很重要
-N:
tar -cvf /tmp/etc.tar /etc 仅打包,不压缩.
tar -zcvf /tmp/etc.tar.gz /etc 打包后,以gzip压缩
tar -ztvf /tmp/etc.tar.gz 查看压缩文件内容,加上前面对应的方式z或j很重要
43. dd if="input_file" of="outptu_file" bs="block_size" count="number"
if:是输入文件,也可以是设备
of:输出
bs:规划的一个块的大小,如果没有设置时,默认是512字节
count:多少个bs的意思
例: dd if=/etc/passwd of=/tmp/passwd.back
一般用来备份文件.
44. dos2unix -k -n hosts.dos hosts.linux将范例一已经变成DOS格工的hosts转换
linux格式到hosts.linux
unix2dos 相反
在不同系统中共用文件时必须经过这两个转换. 不同系统中的换行符不同,windows的DOS是CRLF,linux是LF,windows占用空间大.
45. alias lm='ls -al' 命令别名设置功能
46. type [-tpa] name 不加任何参数时,type会显示出name是外部命令还是bash内置命令.
加入-t参数时,type会将name通过下面这些文字显示出它的意义
file: 表示为外部命令
alias: 表示该命令为命令别名所设置的名称.
builtin:表示该命令为bash内置的命令功能.
-p:如果后面接的name为命令,会显示完整文件名或显示为内置命令
-a:在PATH变量定义的路径中,列出所有含有name的命令,包含alias
47. 变量的使用:
显示变量值, echo $variable 只需在变量名前加上$就能显示变量的值
例: myname=Kenfly && echo $myname 会显示Kenfly
当一个变量名称尚未设置时,默认的内容是"空"的,变量设置是要符合某些规定,否则会失效:
1.变量与变量内容以等号"="来连接
2.等号两边不能直接接空格符
3.变量名称只能是英文字毌与数字,但数字不能是开头字符
4.若有空格符,可以使用双引号""或单引号将变量内容结合起来,但要特别注意,双引号内的特殊字符可以保持变量特性,但单引号内的特殊字符则仅为一般字符
5.必要时需要以转义符"\"将特殊符号(如Enter,$,\,空格符,等)变成一般符号
6.在一串命令中,还需要通过其他命令提供的信息,可以使用这样的方式`command`(特别注意,`是键盘上方的数字键1左边的那个键,非单引号)
7.若变量为扩展变量内容,需要以双引号及$变量名称如"$PATH":/home继续类加内容
8.若该变量需要在其他子程序中执行,则需要用export使变量变成环境变量,如"export PATH"
9.通常大写字毌为系统默认变量,自行设置变量可以使用小写字毌,便于判断
10.取消变量的方法:"unset 变量名称"
48. 在这串命令中,`之内的命令将先执行,而其执行出来的结果将作为外部输入信息
如: ls -l `locate crontab`,它的含义是,先用locate将文件名数据都列出来,再用ls命令来处理
49. 环境变量的使用:
env:列出所有变量的信息:
HOME:代表用户的家目录,我们使用的cd ~到用户的家目录就是用这个功能
SHELL:告诉我们,当前的这个环境使用的shell是哪个程序
HISTSIZE:与"历史命令"有关,即我们曾经执行过的命令可以被记录下来的数目
ENV:这个是用户所遥的个性化环境设置文件的读取文件
MAIL:当使用mail命令收信时,系统会去读取的邮件信箱文件
PATH:就是执行文件搜索的路径,目录之间以冒号:分隔,文件的搜索是按顺序由PATH的变量内的目录来查询
LANG:这个很重要,就是语系文件
RANDOM:这是随机数变量,能产生介于0~32767这间的数,要使用0~9之间的数值时,可以用declare声明数值类型:
declare -i number=$RANDOM*10/32767 ; echo $number
PS1:提示符的设置
\d:代表日期
\H \h:代表主机名称
\t \T \A:显示时间
\u:当前用户的账号名称
\v:bash的版本信息
\w \W:利用basename取得工作目录名称
\#:执行的第几个命令
\$:提示符,如果是root时,提示符为#,否则就是$.
如: PS1='[\u@\h \w \A #\#]\$'
$: 这个表示"当前这个Shell的进程号",即为PID
?: 表示上一个执行命公的回传码,成功一般返回0,否则返回非0值
50. read [-pt] variable(变量)
-p:后面可以接提示符
-t:后面可以接等待的"秒数",这个比较有意思,不会一直等待用户.
read var : 让用户通过键盘输入内容,将内容变成var变量值
60. declare [-aixr] variable
-a:将后面的variable定义为数组(array)
-i:将后面的variable定义为整数数字(integer)
-x:用法与export一样,就是将后面的variable变成环境变量
-r:将一个variable的变量设置成只读,该变量不可更改内容,也不能取消设置(unset)
范例:让变量sum对100+300+50求和
# sum=100+300+50 && echo $sum :这命令将显示100+300+50,而不是我们想要的结果,这是因为sum是文字变量
正确做法是应先声明sum为整型
: declare -i sum=100+300+50 && echo $sum
61. var=${str-newvar} :若str这个变量内容存在,刚var设置为str,否则设置为"newvar"
62. alias rm='rm -i' :命令别名
unalias rm :取消命令别名
63. history:列出当前内存的所有历史记忆
history 3:列出当前最近的3个命令
history -w:在默认的情况下,会将历史记录写入~/.bash_history中
!number: 执行第几条命令的意思.
!command: 由最近的命令向前搜索"命令串开头为command"的命令,并执行.
64. 如果想让用户登录后获取一些消息,可以将消息加入/etc/motd中 例:
vi /etc/motd
hello
用户登录后会显示"hello"消息
65. /etc/profile :这个文件设置了几个重要的变量,例如"PATH,USER,MAIL,HOSTNAME,HISTSIZE,umask"
/etc/inputrc :这个文件设置了键盘热键设置的数据内容.
/etc/bashrc :这个文件确定umask的功能,同时也确定了提示符的内容(就是那个PS1)
~/.bash_profile,~/.bash_login,~/.profile 这3个文件通常只要一个即可
~/.bashrc : 一般将自己的需要输入到这个文件,个性化设置等,命令别名,路径,每次执行shell脚本时都会重新读取这个文件,而~/.bash_profile则只有在登录时才读取一次
~/.bash_logout这个文件记录"当我注销bash后,系统再帮我做完什么操作后才离开"
66. source file:让设置文件立即生效.也可以以小数点.代替source
67. stty [-a]:(setting tty终端的意思) stty也可以帮组设置终端的输入按键代表的意义
例: stty erase ^h :从此之后,删除字符就得要使用[Ctrl]+H键 执行stty erase ^?就可恢复[backspace]
68. 通配符的使用:
cp *[A-Z]* /tmp :只要文件名里含有至少一个大写字母就可以将文件复制出来.
[],仅表示一个字符,而这个字符的定义可以是范围
ls -lda /etc/*[0-9]* :找出/etc下所有含有数字的文件
ls -lda /etc/*[35]* : 只想找出含有3及5的文件名的文件
ls -lda /etc/[!a-z]* :不想要有小写字母开头的文件
` `(非' '),的功能也可以利用$()来替换:
例:cd /lib/modules/$(uname -r)/kernel 在$()里的命令会先执行
69. [数据流重导向]
"1>","1>>" ("1"可省)标准输出,stdin 前者是重建输出,后者是在原文件添加输出,都有创建文件功能.
"2>","2>>" 错误输出,stderr.
例:
find / -neme sbin 1>./Desktop/right.txt 2> ./Desktop/wrong.txt
PS: /dev/null 它的功能有点像"黑洞"的垃圾桶功能,当输入的任何东西导向到这个虚拟的垃圾桶设备时,"它就会凭空消失不见了".
输入同一文件的正确写法: find /home -name testing >list 2>&1
"<":解释是"将原本需要由键盘输入的数据通过文件来读入"
如: cat > catfile :通过键盘输入数据保存在catfile上,按下C+D结束输入.
可以: cat > catfile < somefile :将文件somefile内容输入到catfile
"<<":表示"结束输入字符" 如: cat > catfile << eof : 当键盘输入eof时结束输入,不需要按下C+D.很方便.PS:eof不会写入文件中
70. [管道命令]: 每个管道的前后都是"命令",后一个命令的输入是前一个命令的输出.
"|" : ls -al /etc | less :
cut: [-d] 后面接分隔符,与-f一起使用
[-f]根据-d的分隔符将一段消息分为数段,用-f取出第几段的意思.
[-c] 以字符为单位取出固定的字符范围.
例: echo $PATH | cut -d ':' -f 5
echo $PATH | cut -c 4- 将第4个字符后的全部输出 还可以 4-5 -4...
last | cut -d ' ' -f 1: 用last将这个月登录的信息中,仅留下用户名称.
grep:
grep [-acinv] '搜索字符串' filename
-a: 将二进制文件以文本文件的方式搜索数据
-c: 计算找到'搜索字符串' 的次数
-i: 忽略大小写的不同,所以大小写视为相同.
-n: 顺便输出行号.
-v: 反向选择,即显示出没有'搜索字符串'内容的那一行
例: last | grep 'root' : 将last中出现root的一行取出来.
sort: [重要]
sort [-fbMnrtuk] [file or stdin]
-f: 忽略大小写的差异.
-b: 忽略最前面的空格符部分.
-M: 以月份的名字来排序,
-n: 使用"纯数字"进行排序(默认是以文字类型来排序的).
-r: 反向排序.
-u: 就是uniq,相同的数据中,仅出现一行表示.
-t: 分隔符,默认是tab键.
-k: 按那个字段(field)来进行排序.
例: cat /etc/passwd | sort -t ':' -k 3 :以':'来分隔,以第三栏来排序.
uniq:
-i: 忽略大小写
-c: 进行计数
例: last | cut -d ' ' -f 1 | sort | uniq -c 使用last显示账号,仅取出账号栏,进行排序后令取出一位.
wc:
wc [-lwm] 可以知道文件有多少字,多少行,多少字符
-l: 仅显示多少行.
-w: 仅显示多少字(英文单词)
-m: 多少字符.
cat /etc/man.config | wc 输出的三个数字分别表示"行数,字数,字符数"
[双向重导向]: tee [-a] file :当想将一段数据流保存进文件里又想马上显示在stdout上.
-a: 以累加(append)的方式将数据加入file中.
例: last | tee last.list | cut -d " " -f1 :将last的输出存一份到last.list文件中.
tr:
tr [-ds] SET1 ...
-d: 删除消息中的SET1字符串.
-s: 替换重复的字符.
例: last | tr '[a-z]' 'A-z' :将last输出的消息中,所有小写变成大写字母
cat /home/test/dostxt | tr -d '\r' > dostxt-noM: 将DOS文件的换行符^M符号删除.
col:
-x: 将tab键转换成对等的空格键.
例: cat -A /etc/man.config 此时会看到很多^I的符号,那就是tab.
cat /etc/man.config | col -x | cat -A | more 如此一来,[tab]就会被替换成为空格键,输出美观多了.
join, paste,expand 未看.
[拆分命令][重要]
split [-bl] file PREFIX : 可以将一个大文件,根据文件大小或行数来拆分,将大文件拆分为小文件,快速又有效.
-b: 后接要拆分的文件大小,可加单位,如b,k,m等.
-l: 按行数进行拆分.
例: cd /tmp; split -b 300k /etc/termcap termcap(文件前缀名,将会生成XXXa,XXXb...).
要将上面生成的3个小文件合成一个文件,文件名为termcapback.可以:
cat termcap* >> termcapback
例: ls -al / | split -l 10 - lsroot :使用ls输出的作息中,每10行记录成一个文件.重点在"-", 一般来说如果需要stdout/stdin时,
但偏偏又没有文件,有的只是-,那么-就会被当成stdin或stdout.
71. grep [-acinv] '搜索字符串' filename
-a: 在二进制文件中,以文本文件的方式搜索数据
-c: 计算找到'搜索字符串' 的次数
-i: 忽略大小写的不同,所以大小写视为相同
-n: 输出行号
-v: 反向选择,即显示出没有'搜索字符串'内容的那一行
例: grep 'root' /var/log/secure
last | grep root :用last显示最近登录信息,只显示行里有root的那些行
72. 临时修改语系: LANG=en; export LANG
73. [正则表达式]:
[1]. 利用"[]"来搜过集合字符."[]"中不论有几个字符,都只代表"一个"字符.当要搜索test 或taste这两个单词时: [grep -n 't[ae]st' regular_express.txt]
[2] 如果想搜索到有"oo"字符,则:[grep -n 'oo' regular_express.txt].
[3] 如果不想前面有"g"的话,可以利用集合字符的反向选择"[^]"来实现: [grep -n '[^g]oo' regular_express.txt].
[4] 如果不想前面有小写字母可以 :[grep -n '[^a-z]oo' regular_express.txt].
[5] [a-z],[A-Z],[0-9],[a-zA-Z0-9].
[6]行首与行尾字符^$.
^:查询一行字符串里有the,如果只想让the在行首列出:[grep -n '^the' regular_express.txt]
("^"在[]内和在[]外是不同的,在内表示反选,在外表示字位在行首)
$:如果想查出行尾结束为小数点(.)的一行,处理方法为:[grep -n '\.$' regular_express.txt],注意小数点有特别含义,所以必须使用转义符.
找出哪一行是空白行: [grep -n '^$' regular_express.txt].
[GOOD]: 假设已经知道在一个shell脚本或设置文件中,空白行与开头为#的那一行是注释,如果将数据提供给别人参考时,可以将这些数据略掉,
以节省纸张: [grep -v '^$' ~kenfly/.vimrc | grep -v '^#'] (-v表示反向选择输出)
[7]任意一个字符(.)与重复字符(*): (要与通配符区别开来)
(.):表示"绝对有一个任意字符"
假设要找出g??d字符串: [grep -n 'g..d' regular_express.txt]
(*)表示"重复0个或多个前面的RE字符"
如果:[grep -n 'o*' file]将会把所有数据显示出来
如果要显示到少两个o以上的字符串时: [grep -n 'ooo*' file].
如果要找出"任意数字"的行: [grep -n '[0-9][0-9]*' file].
".*" 表示"零个或多个任意字符"
如要显示两边为g的字符即 "g......g" : [grep -n 'g.*g' file]
[8]限定连续重复字符范围{}
74. sudo apt-get remove --purge XX: 连配置文件一起清除
75. 终止一个进程可以使用[ services 服务名 stop ] 或[ kill 进程标识符 ]\
查看进程可以用ps,pstree,top等.