1.本文知识结构
2.文件的查询与检索
2.1. cd 目录切换
- 找到文件/目录位置:cd
- 切换到上一个工作目录: cd -
- 切换到home目录: cd or cd ~
- 显示当前路径: pwd
- 更改当前工作路径为path: $cd path
2.2. locate 查找目录及文件
- find 实时查找
- locate 为文件系统建立索引数据库,如果有文件更新,需要定期执行更新命令来更新索引库,在查找文件之前要先更新数据库
# 搜寻文件或目录: $find ./ -name "core*" | xargs file # 查找目标文件夹中是否有obj文件: $find ./ -name '*.o' # 递归当前目录及子目录删除所有.o文件 $find ./ -name "*.o" -exec rm {} \; # 寻找包含有string的路径 $updatedb $locate string
2.3. chown 文件与目录权限修改
- 改变文件的拥有者 chown
- 改变文件读、写、执行等属性 chmod
- 递归子目录修改: chown -R tuxapp source/
- 增加脚本可执行权限: chmod a+x myscript
2.4. 管道和重定向
- 批处理命令连接执行,使用 |
- 串联: 使用分号 ;
- 前面成功,则执行后面一条,否则,不执行:&&
- 前面失败,则后一条执行: ||
- 重定向: >
3.文本处理
3.1. find 文件查找
find命令用来在指定目录下查找文件。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。
一般来说,其语法格式为:
find path -option [ -print ] [ -exec -ok command ] {} \;
find 后分为两部分: path 和 expression ,以 第一个 - 为分隔线。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
常用的expression选项
选项 | 含义 |
---|---|
-mount, -xdev | 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件 |
-amin n | 在过去 n 分钟内被读取过 |
-anewer file | 比文件 file 更晚被读取过的文件 |
-atime n | 在过去 n 天内被读取过的文件 |
-cmin n | 在过去 n 分钟内被修改过 |
-cnewer file | 比文件 file 更晚被更新过的文件 |
-ctime n | 在过去 n 天内被修改过的文件 |
-empty | 空的文件 |
-gid n , -group name | gid 是 n 或是 group 名称是 name的文件 |
-ipath p , path p | 路径名称符合 p 的文件,ipath 会忽略大小写 |
-name name , -iname name | 文件名称符合 name 的文件。iname 会忽略大小写 |
-size n | 文件大小 是 n 单位。b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组 |
-type c | 文件类型是 c 的文件。d 代表目录,c 代表字型装置文件,b 代表区块装置文件,p 代表具名贮列,f 代表一般文件,l 代表符号连结,s 代表socket |
-pid n | process id 是 n 的文件 |
另外,在find查找文件也是可以使用正则表达式的。
使用正则表达式查询需要的选项有两个:-regextype 和 -regex。----regextype 指定正则匹配的类型,可用的选项有很多,常见的有:'awk' , 'egrep' , 'ed', 'emacs', 'grep', 'sed' 等,不同匹配模式匹配的结果不一样。默认是emacs。
-regex pattern 表示文件名与正则表达式 pattern 匹配。这是对整个路径的匹配,不是搜索文件。即书写正则表达式时要考略前面的路径。
3.2. grep 文本搜索
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。
其一般语法为:
grep [ options ] pattern [file]
常见的 options 选项
短命令 | 长命令 | 含义 |
---|---|---|
-a | --text | 不要忽略二进制的数据 |
-A | --after-context = 行数 | 除了显示符合范本样式的那一行之外,并显示该行之后的内容 |
-b | --byte-offset | 在显示符合样式的那一行之前,标示出该行第一个字符的编号 |
-c | --count | 计算符合样式的列数 |
-C | --context = 行数 | 除了显示符合样式的那一行之外,并显示该行之前后的内容 |
-d | --directories = 动作 | 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作 |
-e | --regexp = 范本样式 | 指定字符串做为查找文件内容的样式 |
-E | --extended-regexp | 将样式为延伸的正则表达式来使用 |
-f | --file = 规则 | 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式 |
-F | --fixed-regexp | 将样式视为固定字符串的列表 |
-G | --basic-regexp | 将样式视为普通的表示法来使用 |
-h | --no-filename | 在显示符合样式的那一行之前,不标示该行所属的文件名称 |
-H | --with-filename | 在显示符合样式的那一行之前,表示该行所属的文件名称 |
-i | --ignore-case | 忽略字符大小写的差别 |
-l | --file-with-match | 列出文件内容符合指定的样式的文件名称 |
-L | --file-without-match | 列出文件内容不符合指定的样式的文件名称 |
-n | --line-number | 在显示符合样式的那一行之前,标示出该行的列数编号 |
-o | --only-matching | 只显示匹配 pattern 部分 |
-q | --quiet , --silent | 不显示任何信息 |
-r | --recursive | 此参数的效果和指定"-d recurse"参数相同 |
-s | --no-messages | 不显示错误信息 |
-v | --revert-match | 显示不包含匹配文本的所有行 |
-V | --version | 显示版本信息 |
-w | --word-regexp | 只显示全字符合的列 |
-x | --line-regexp | 只显示全列符合的列 |
-y | 此参数的效果和指定 -i 参数相同 |
3.3. xargs 命令行参数转换
xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令。xargs 一般是和管道一起使用。
其一般语法为:
somecommand | xargs -item command
常见的item选项
选项 | 含义 |
---|---|
-a file | 从文件中读入作为sdtin |
-e flag | 当xargs分析到含有flag这个标志的时候就停止,默认为'_' |
-p | 当每次执行一个argument的时候询问一次用户 |
-n num | 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的 |
-t | 先打印命令,然后再执行 |
-r | no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了 |
-s num | 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数 |
-L num | 从标准输入一次读取 num 行送给 command 命令 |
-d delim | 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符 |
-x | exit的意思,主要是配合-s使用 |
-P | 修改最大的进程数,默认是1,为0时候为as many as it can |
3.4. uniq 删除重复
uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
# 消除重复行 $ sort unsort.txt | uniq # 统计各行在文件中出现的次数 $ sort unsort.txt | uniq -c # 找出重复行 $ sort unsort.txt | uniq -d
3.5. tr 字符转换
tr 命令用于转换或删除文件中的字符。它从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。
其一般语法为:
tr [options] SET1 [SET2]
常见options选项
短命令 | 长命令 | 含义 |
---|---|---|
-c | --complement | 反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换 |
-d | --delete | 删除指令字符 |
-s | --squeeze-repeats | 缩减连续重复的字符成指定的单个字符 |
-t | --truncate-set1 | 削减 SET1 指定范围,使之与 SET2 设定长度相等 |
常见SET字符含义
字符 | 含义 |
---|---|
\NNN | 八进制值为NNN的字符 |
\\ | 反斜杠 |
\a | 终端鸣响 |
\b | 退格 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
char1-char2 | 从char1到char2的升序递增过程中经历的所有字符 |
[:alnum:] | 所有的字母和数字 |
[:alpha:] | 所有的字母 |
[:blank:] | 所有呈水平排列的空白字符 |
[:cntrl:] | 所有的控制字符 |
[:digit:] | 所有的数字 |
[:graph:] | 所有的可打印字符,不包括空格 |
[:lower:] | 所有的小写字母 |
[:print:] | 所有的可打印字符,包括空格 |
[:punct:] | 所有的标点字符 |
[:space:] | 所有呈水平或垂直排列的空白字符 |
[:upper:] | 所有的大写字母 |
[:xdigit:] | 所有的十六进制数 |
[=char=] | 所有和指定char相等的字符 |
3.6. cut、paste 裁剪与拼接
cut命令用于显示每行从开头算起 num1 到 num2 的文字。
cut 取的范围
N- 第N个字段到结尾
-M 第1个字段为M
N-M N到M个字段
cut 取的单位
-b 以字节为单位
-c 以字符为单位
-f 以字段为单位(使用定界符)
paste 指令会把每个文件以列对列的方式,一列列地加以合并。
其一般语法为:
$ paste [-s] [-d <间隔字符>] [文件...]
参数:
- -d或--delimiters= 用指定的间隔字符取代跳格字符。
- -s或--serial 串列进行而非平行处理。
- --help 在线帮助。
- --version 显示帮助信息。
- [文件…] 指定操作的文件路径
3.7. sed 文本替换
sed 命令可依照脚本的指令来处理、编辑文本文件,它主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。sed 命令是一行一行的处理文件内容的,一般在动作前加数字以确定对应的行。
其一般语法为:
$ sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
- -e script 或--expression=script 以选项中指定的script来处理输入的文本文件。
- -f script文件 或--file=script文件 以选项中指定的script文件来处理输入的文本文件。
- -h或--help 显示帮助。
- -n或--quiet或--silent 仅显示script处理后的结果。
- -V或--version 显示版本信息。
- -r或--regexp-extended 在脚本中使用扩展的正则表达式
动作说明:
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
- d :删除,因为是删除啊,所以 d 后面通常不接任何东西
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
- s :取代,可以直接进行字符级的替换的工作
# sed 命令需要多练习,可参考菜鸟教程实例
3.8. awk 数据流处理
awk 是一种处理文本文件的语言,是一个强大的文本分析工具。
其一般语法为:
awk [选项参数] 'script' var=value file(s) 或 awk [选项参数] -f scriptfile var=value file(s)
选项参数说明:
- -F fs or --field-separator fs
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。 - -v var=value or --asign var=value
赋值一个用户定义变量。 - -f scripfile or --file scriptfile
从脚本文件中读取awk命令。 - -mf nnn and -mr nnn
对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。 - -W compact or --compat, -W traditional or --traditional
在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。 - -W copyleft or --copyleft, -W copyright or --copyright
打印简短的版权信息。 - -W help or --help, -W usage or --usage
打印全部awk选项和每个选项的简短说明。 - -W lint or --lint
打印不能向传统unix平台移植的结构的警告。 - -W lint-old or --lint-old
打印关于不能向传统unix平台移植的结构的警告。 - -W posix
打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符和=不能代替^和^=;fflush无效。 - -W re-interval or --re-inerval
允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。 - -W source program-text or --source program-text
使用program-text作为源代码,可与-f命令混用。 - -W version or --version
打印bug报告信息的版本。
4.进程管理
4.1. lsof 查看进程状态
lsof 命令的全称是 list open files ,它是一个列出当前系统打开文件的工具。在 Linux 环境中,所有的事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。
其一般语法为:
$ lsof [options] filename
常用参数列表:
选项 | 含义 |
---|---|
lsof filename | 显示打开指定文件的所有进程 |
lsof -a | 表示两个参数都必须满足时才显示结果 |
lsof -c string | 显示COMMAND列中包含指定字符的进程所有打开的文件 |
lsof -u username | 显示所属user进程打开的文件 |
lsof -g gid | 显示归属gid的进程情况 |
lsof +d /DIR/ | 显示目录下被进程打开的文件 |
lsof +D /DIR/ | 显示目录下被进程打开的文件,它会搜索目录下的所有目录,时间相对较长 |
lsof -d FD | 显示指定文件描述符的进程 |
lsof -n | 不将IP转换为hostname,缺省是不加上-n参数 |
lsof -i | 用以显示符合条件的进程情况 |
$ lsof -i[46] [protocol][@hostname|hostaddr][:service|port] # 46 –> IPv4 or IPv6 # protocol –> TCP or UDP # hostname –> Internet host name # hostaddr –> IPv4地址 # service –> /etc/service中的 service name (可以不只一个) # port –> 端口号 (可以不只一个)
4.2. pmap 分析线程栈
Pmap 提供了进程的内存映射,pmap命令用于显示一个或多个进程的内存状态。其报告进程的地址空间和内存状态信息
其一般语法为:
$ pmap [options] PID
常见的options选项为:
- -x:显示扩展格式;
- -d:显示设备格式;
- -q:不显示头尾行;
- -V:显示指定版本。
5.性能监控
5.1. sar 性能监控
sar 命令是系统维护的重要工具,主要帮助我们掌握系统资源的使用情况,特别是内存和CPU 的使用情况。
其一般语法为:
$ sar [options] [-A] [-o file] t [n]
其中:t为采样间隔,n为采样次数,默认值是1;-o file表示将命令结果以二进制格式存放在文件中,file 是文件名。
常见的options选项有:
选项 | 含义 |
---|---|
-A | 所有报告的总和 |
-u | 输出CPU使用情况的统计信息 |
-v | 输出inode、文件和其他内核表的统计信息 |
-d | 输出每一个块设备的活动信息 |
-r | 输出内存和交换空间的统计信息 |
-b | 显示I/O和传送速率的统计信息 |
-a | 文件读写情况 |
-c | 输出进程统计信息,每秒创建的进程数 |
-R | 输出内存页面的统计信息 |
-y | 终端设备活动情况 |
-w | 输出系统交换活动信息 |
参考材料:
Linux教程|菜鸟教程
Linux Tools Quick Tutorial
Linux 命令帮助文档