Linux Shell 基础知识(二)

落花浮王杯 提交于 2019-12-01 02:21:23

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 命令帮助文档

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!