目录
第三天
3.1 管道
管道操作符- -“|”
管道是由符号“|”隔开的若干条命令组成的序列。
管道符“|”的作用: 将前一个命令的输出通过一个无形的“管道”作为下一个命令的输入,即实现将前一个命令的输出的数据结 果作为后一条命令所需要的数据源参数
进程管道
用法:command1 | command2 |command3 |...
管道符的使用场合:
当输出内容较多时,为便于浏览,可将输出内容,通过管道操作符,传递给more命令来分页查看,也可传递给grep命令实现对指定对象的查看。
注意:
1、管道命令只处理前一个命令正确输出,不处理错误输出。
2、管道命令右边命令,必须能够接收标准输入流命令才行。
[root@localhost ~]# rpm -qa |grep 'httpd' //查询所有安装的软件 包,过滤包含httpd的包
案例1:将/etc/passwd中的用户按UID大小排序
[root@localhost ~]# sort -t":" -k3 -n /etc/passwd //以: 分隔,将第三 列按字数升序
[root@localhost ~]# sort -t":" -k3 -n /etc/passwd -r //逆序
[root@localhost ~]# sort -t":" -k3 -n /etc/passwd |head
-t 指定字段分隔符--field-separator
-k 指定列
-n 按数值
案例2:统计出最占CPU的5个进程
[root@localhost ~]# ps aux --sort=-%cpu |head -6
案例3:统计当前/etc/passwd中用户使用的shell类型
思路:取出第七列(shell) | 排序(把相同归类)| 去重
[root@localhost ~]# awk -F: '{print $7}' /etc/passwd
[root@localhost ~]# awk -F: '{print $7}' /etc/passwd |sort
[root@localhost ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq
[root@localhost ~]# awk -F: '{print $7}' /etc/passwd |sort |uniq -c
案例4: 统计网站的访问情况 top 20
思路: 打印所有访问的连接 | 过滤访问网站的连接 | 打印用户的IP | 排序 | 去重
[root@localhost ~]# ss -an |grep :80 |awk -F":" '{print $8}' |sort |uniq -c
案例5: 打印当前所有IP
[root@localhost ~]# ip addr |grep 'inet ' |awk '{print $2}' |awk -F"/" '{print $1}'
案例6:打印根分区已用空间的百分比(仅打印数字)
[root@localhost ~]# df -P |grep '/$' |awk '{print $5}' |awk -F"%" '{print $1}'
3.2 tee
Linux tee命令用于读取标准输入的数据,并将其内容输出成文件。
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
语法:
tee [-ai][--help][--version][文件...]
参数:
-a或--append 附加到既有文件的后面,而非覆盖它.
-i或--ignore-interrupts 忽略中断信号。
--help 在线帮助。
--version 显示版本信息
了解内容:
1、了解匿名管道和命名管道的区别?
匿名管道由pipe函数创建并打开。
命名管道由mkfifo函数创建,打开用open
FIFO(命名管道)与pipe(匿名管道)之间唯一的区别在它们创建与打开的方式不同,一量这些工作 完成之后,它们具有相同的语义。
2、如何创建命名管道?
在Linux系统下,命名管道可由两种方式创建(假设创建一个名为“fifoexample”的有名管道): (1)mkfifo("fifoexample","rw");
(2)mknod fifoexample p
mkfifo是一个函数,mknod是一个系统调用
3.3 输入/输出重定向
1.重定向操作符——“>”、“>>”、“、“
在Linux系统中
默认的输入设备(标准输入)是键盘
默认的输出设备(标准输出)是屏幕
利用重定向操作符可以重新定义命令涉及的默认的输入和输出设备对象,即重定向操作符可以将命令输入和输出数据流从默认设备重定向到其他位置。
重定向操作符本身不是一条命令,而是命令中附加的可改变命令的输入和输出对象的特殊符号,
“>”、“>>”称为输出重定向操作符
"<"、"<<"称为输入重定向操作符
案例1:输出重定向(覆盖)
[root@localhost ~]# date 1> date.txt
案例2:输出重定向(追加)
[root@localhost ~]# date >> date.txt
3.4 文件内容浏览命令
1.查看文本文件的内 容 — — c a t 命 令
命令格式: c a t[ 选 项 ] 文 件 名 列 表
说 明:文件名可使用通配符
常用选项:
-n——对 输 出 内 容 中 的 所 有 行 标 注 行 号 。
- b — — 对 输 出 内 容 中 的 非 空 行 标 注 行 号 。
2.分页查看文件内容 — — m o r e 和le s s 命 令
命 令 格 式:m o r e | le s s [选项] 文件名
常 用 选 项:
-数字— — 仅 适 用 于 m o r e 命 令 , 用 来 指 定 分 页 显 示 时 每 页 的 行 数 。
+ n u m — — 指 定 从 文 件 的 第 n u m 行 开 始 显 示 。
- c — — 从 顶 部 清 屏 然 后 显 示 文 件 内 容 。
-N——仅适用于less命令,其作用是在每行前添加输出行号。
交互操作方法:
按Enter键向下逐行滚动
按空格键向下翻一屏、按b键向上翻一屏
文件末尾时more会自动退出,less 按q键退出
⒊.查看文件开头或末尾的部分内容——head和tail命令
命令:head | tail [选项] 文件名
常用选项有:
-num——指定需要显示文件多少行的内容,若不指定,默认只显示十行。
-f——使tail不停去读取和显示文件最新的内容, 以监视文件内容的变化。这样有实时监视的效果。
tail命令更多的用于查看系统日志文件,以便于观察重要的系统消息,特别是结合使用-f选项,tail会自动实时地把打开文件中的新消息显示到屏幕上,从而跟踪日志文件末尾的内容变化,直至按【Ctrl+C】键终止显示和跟踪。
4.检索、过滤文件内容——grep命令
功能:在指定的文件中查找并显示含有指定字符串的行。
格式:grep [选项] 要查找的字符串或条件表达式 被查找的文件名 选项:
-i——查找时忽略大小写
-v——反转查找,输出与查找条件不相符的行
在grep命令中,可以直接指定关键字串作为查找条件,也可以使用复杂的条件表达式,例如:字符“^”表示行的 开始;字符“$”表示行的结尾;如果查找的字符串中带有空格,可以用单引号或双引号括起来。又如: "^read"表示以read开始;"read$"表示以read结束;"^$"表示空行。
3.5 命令搜索
1. whereis 命令
whereis 是搜索系统命令的命令(像绕口令一样),也就是说, whereis 命令不能搜索普通文件, 而只能搜索系统命令。 whereis 命令的基本信息如下:
命令名称: whereis。
英文原意: locate the binary, source, and manual page files for a command。
所在路径: /usr/bin/whereis。
执行权限:所有用户。
功能描述:查找二进制命令、源文件和帮助文档的命令。
分别查找出ls和pwd命令所在位置:
[root@kongd ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz [root@kongd ~]# whereis pwd
pwd: /usr/bin/pwd /usr/share/man/man1/pwd.1.gz /usr/share/man/man1p/pwd.1p.gz
2. which 命令
which 也是搜索系统命令的命令。和 whereis 命令的区别在于:
whereis 命令可以在查找到二进制命令的同时,查找到帮助文档的位置;
而 which 命令在查找到二进制命令的同时,如果这个命令有别名, 则还可以找到别名命令。
which 命令的基本信息如下。
命令名称: which。
英文原意: shows the full path of (shell) commands。
所在路径: /usr/bin/which。
执行权限:所有用户。
功能描述:列出命令的所在路径。
[root@kongd ~]# which locate
/usr/bin/locate [root@kongd ~]# which whereis
/usr/bin/whereis
3. locate 命令
3.1 基本用法
locate 命令才是可以按照文件名搜索普通文件的命令。
优点: 按照数据库搜索,搜索速度快,消耗资源小。数据库位置/var/lib/mlocate/mlocate.db,可以使用 updatedb 命令强制更新数据库。 缺点: 只能按照文件名来搜索文件, 而不能执行更复杂的搜索,比如按照权限、大小、修改时间等搜索文件。
locate 命令的基本信息如下。
命令名称: locate。
英文原意: find files by name。
所在路径: /usr/bin/locate。
执行权限:所有用户。
功能描述:按照文件名搜索文件。
使用find命令进行全盘搜索虽然更准确,但是效率有点低,如果我们仅仅是想找一些常见的、又知道大 概名称的文件,不如试试locate命令的功能。locate命令是将一些常用的目录做成一个索引库文件,一般 是叫做“/var/lib/mlocate/mlocate.db”,后续再搜索文件的时候就是根据这个数据库中所包含的路径进行查找,速度会快很多
第一次使用前,记得先执行下updatedb命令来生成出索引数据库,然后再进行查找: 搜索出所有包含有“whereis”名称的文件所在位置:
[root@kongd ~]# locate whereis
/usr/bin/whereis
/usr/share/bash-completion/completions/whereis
/usr/share/man/man1/whereis.1.gz
3.6 find查找
find命令用于按照指定条件来查找文件,格式为“find [查找路径] 寻找条件 操作”。 本书中曾经多次提到“Linux系统中的一切都是文件”,接下来就要见证这句话的分量了。在Linux系统 中,搜索工作一般都是通过find命令来完成的,它可以使用不同的文件特性作为寻找条件(如文件名、 大小、修改时间、权限等信息),一旦匹配成功则默认将信息显示到屏幕上。find命令的参数以及作用 如表所示。
find命令中的参数以及作用
1.按照文件名搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-name: 按照文件名搜索
-iname: 按照文件名搜索,不区分文件名大小写
-inum: 按照 inode 号搜索
2.按照文件大小搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-size [+|-]大小: 按照指定大小搜索文件
这里的“+”的意思是搜索比指定大小还要大的文件, “-”的意思是搜索比指定大小还要小的文件
3.按照修改时间搜索
Linux 中的文件有访问时间(atime)、数据修改时间(mtime)、状态修改时间(ctime)这三个 时间,我们也可以按照时间来搜索文件。
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-atime [+|-]时间: 按照文件访问时间搜索
-mtime [+|-]时间: 按照文件数据修改时间搜索
-ctime [+|-]时间: 按照文件状态修改时间搜索
4.按照权限搜索
命令格式:
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-perm 权限模式: 查找文件权限刚好等于“权限模式”的文件
-perm -权限模式: 查找文件权限全部包含“权限模式”的文件
-perm +权限模式: 查找文件权限包含“权限模式”的任意一个权限的文件
5.按照所有者和所属组搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-uid 用户 ID: 按照用户 ID 查找所有者是指定 ID 的文件
-gid 组 ID: 按照用户组 ID 查找所属组是指定 ID 的文件
-user 用户名: 按照用户名查找所有者是指定用户的文件
-group 组名: 按照组名查找所属组是指定用户组的文件
-nouser: 查找没有所有者的文件
6.按照文件类型搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-type d: 查找目录
-type f: 查找普通文件
-type l: 查找软链接文件
7.逻辑运算符
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-a: and 逻辑与
-o: or 逻辑或
-not: not 逻辑非
3.7 grep命令
grep命令用于按行提取文本内容,语法格式为:“grep [参数] 文件名称”。
grep命令是用途最广泛的文本搜索匹配工具,虽然有很多参数,但是大多数基本上都用不到。老师在总 结了近10年的运维工作和培训教学的经验后,提出的本书的写作理念“去掉不实用”绝对不是信口开河。 如果一名IT培训讲师的水平只能停留在“技术的搬运工”层面,而不能对优质技术知识进行提炼总结,那对 他的学生来讲绝非好事。我们在这里只讲两个最最常用的参数:-n参数用来显示搜索到信息的行号;-v
参数用于反选信息(即没有包含关键词的所有信息行)。这两个参数几乎能完成您日后80%的工作需 要,至于其他上百个参数,即使以后在工作期间遇到了,再使用man grep命令查询也来得及。grep命 令的参数及其作用如表2-15所示。
表2-15 grep命令中的参数及其作用
在Linux系统中,/etc/passwd文件是保存着所有的用户信息,而一旦用户的登录终端被设置 成/sbin/nologin,则不再允许登录系统,因此可以使用grep命令来查找出当前系统中不允许登录系统的 所有用户信息。
3.8 文本排序统计
cut命令
cut命令用于按列提取文本内容,语法格式为:“cut [参数] 文件名称”。
系统文件在保存用户数据信息时,每一项值之间是采用冒号来间隔的,先查看一下:
[root@kongd ~]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
一般而言,按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是如果 按列搜索,不仅要使用-f参数来设置需要看的列数,还需要使用-d参数来设置间隔符号。
接下来使用下述命令尝试提取出passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:
[root@kongd ~]# cut -d: -f1 /etc/passwd
uniq命令
uniq命令用于去除文本中连续的重复行,英文全称为:“unique”,语法格式为:“uniq [参数] 文件名 称”。
uniq命令全称是“unique”,中文释义是“独特的,唯一的”。该命令的作用是用来去除文本文件中连续的 重复行,中间不能夹杂其他文本行,去除了重复的,保留的都是唯一的。
[root@kongd ~]# cat uniq.txt
Welcome to kongd.com
Welcome to kongd.com
Welcome to kongd.com
Welcome to kongd.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
[root@kongd ~]# uniq uniq.txt
Welcome to kongd.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
sort命令
sort命令用于对文本内容进行再排序,语法格式为:“sort [参数] 文件名称”。
有时文本里的内容顺序不正确,手动一行行的修改实在太麻烦了,那么使用sort命令就再合适不过了, 它能够对文本内容进行再次排序。这个命令千万不能只讲理论,一定要上实战,一看就懂。sort命令的 参数及其作用如表2-16所示。
表2-16 sort命令中的参数及其作用
首先,sort命令执行后默认会按照字母顺序进行排序,非常方便:
[root@kongd ~]# cat fruit.txt
banana
pear
apple
orange
raspaberry
[root@kongd ~]# sort fruit.txt
apple
banana
orange
pear
raspaberry
此外,与uniq命令不同,sort命令可以不论内容之间是否夹杂有其它内容,只要有两个一摸一样的内容 行,立马就可以使用-u参数进行去重操作:
[root@kongd ~]# cat sort.txt
Welcome to kongd.com
Red Hat certified
Welcome to kongd.com
Free Linux Lessons
Linux Course
[root@kongd ~]# sort -u sort.txt
Free Linux Lessons
Red Hat certified
Welcome to kongd.com
想对数字进行排序?也是一点问题都没有的,而且完全不用担心出现1小于20这种问题(有些命令只比较第一位):
[root@kongd ~]# cat number.txt
45
12
3
98
82
67
24
56
9
[root@kongd ~]# sort -n number.txt
3
9
12
24
45
56
67
82
98
tr命令
Linux tr 命令用于转换或删除文件中的字符。
tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。
语法
tr [-cdst][--help][--version][第一字符集][第二字符集]
tr [OPTION]…SET1[SET2]
参数说明:
-c, --complement:反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行 转换
-d, --delete:删除指令字符
-s, --squeeze-repeats:缩减连续重复的字符成指定的单个字符
-t, --truncate-set1:削减 SET1 指定范围,使之与 SET2 设定长度相等
--help:显示程序用法信息
--version:显示程序本身的版本信息
将文件testfile中的小写字母全部转换成大写字母,
此时,可使用如下命令:
cat testfile |tr a-z A-Z
wc命令
wc命令用于统计指定文本文件的行数、字数或字节数,英文全称为:“word counts”,语法格式为:“wc [参数] 文件名称”。
每次我在课堂上讲到这个命令时,总有同学会联想到一种公共设施,其实这两者毫无关联。wc命令用于 统计文本的行数、字数、字节数等。如果为了方便自己记住这个命令的作用,也可以联想到上厕所时好 无聊,无聊到数完了手中的如厕读物上有多少行字。wc的参数以及相应的作用如表2-14所示。
表2-14 wc命令中的参数以及作用
在Linux系统中,/etc/passwd是用于保存系统账户信息的文件,要统计当前系统中有多少个用户,可以 使用下面的命令来进行查询:
[root@kongd ~]# wc -l /etc/passwd
45 /etc/passwd