【专项突破】Linux重定向与管道
This article is written by Xrilang(Chinese Name:萌狼蓝天)
If you want find me ,You can contact me in BiliBili . My Bilibili name is 萌狼蓝天
Of course, you can also add my QQ(My QQ number is: 3447902411)
(Please note that your sole purpose of adding me is limited to technical exchange. I won't help you with your homework!)
萌狼蓝天 - 博客园 | 萌狼工作室 - 萌狼蓝天 (mllt.cc) | 萌狼蓝天の技术栈 | Welcome !
输入输出重定向
标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可以从其他文件或命令中输入
标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕
错误输出重定向(STDERR,文件描述符2):默认输出到屏幕
文件描述符是一个非负整数,用于指代被打开的文件,所有与文件读写相关的系统调用都是通过文件描述符调用起来的。
符号 | 作用 | 备注 |
命令 > 文件 | 标准输出重定向到一个文件中(会清空原有文件数据) | 命令 1> 文件 |
命令 2> 文件 | 错误输入重定向到一个文件中(会清空原有文件数据) | |
命令 >> 文件 | 标准输出重定向到一个文件中(会追加到原有文件数据后) | 命令 1>> 文件 |
命令 2>> 文件 | 错误输出重定向到一个文件中(会追加到原有文件数据后) | |
命令 >> 文件 2>&1 | ||
命令 &>> 文件 |
标准输入错误重定向到回收站:命令 2>/dev/null
简单过滤命令
查看 head、more、tail
命令:head、more、tail
head -行数 文件名(顺序) more 文件名 tail -行数 文件名(倒序)
例子:使用翻页形式查看 /etc目录中的文件列表及属性信息
ls /etc -l | more
替换 tr
命令:tr
tr 原始字符 目标字符
提取 cut
命令:cut
cut 参数 文本
用“列”提取文本字符
按列搜索,要用-f 参数设置需要查看的列数,-d设置间隔符号
cut -f(列) -d(分隔文本或符号)(文件名)
排序 sort
命令:sort
sort 文件名
sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件][-k field1[,field2]]
- -b 忽略每行前面开始出的空格字符。
- -c 检查文件是否已经按照顺序排序。
- -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
- -f 排序时,将小写字母视为大写字母。
- -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
- -m 将几个排序好的文件进行合并。
- -M 将前面3个字母依照月份的缩写进行排序。
- -n 依照数值的大小排序。
- -u 意味着是唯一的(unique),输出的结果是去完重了的。
- -o<输出文件> 将排序后的结果存入指定的文件。
- -r 以相反的顺序来排序。
- -t<分隔字符> 指定排序时所用的栏位分隔字符。
- +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
- --help 显示帮助。
- --version 显示版本信息。
- [-k field1[,field2]] 按指定的列进行排序。
去重 uniq
命令:uniq
作用:检查文本文件中重复出现的行列。一般和sort搭配使用,消除连续重复的行。
sort 文件名 | unqi # 显示重复次数:-c或--count 在每列旁边显示该行重复出现的次数。 sort 文件名 | unqi -c # -u或--unique 仅显示出一次的行列。 sort 文件名 | unqi -u # 在文件中找出重复的行:-d或--repeated 仅显示重复出现的行列。 sort 文件名 | unqi -d
计数 wc
在默认的情况下,wc将计算指定文件的行数、字数,以及字节数。
$ wc testfile # testfile文件的统计信息 3 92 598 testfile # testfile文件的行数为3、单词数92、字节数598
如果想同时统计多个文件的信息,例如同时统计testfile、testfile_1、testfile_2
$ wc testfile testfile_1 testfile_2 #统计三个文件的信息 3 92 598 testfile #第一个文件行数为3、单词数92、字节数598 9 18 78 testfile_1 #第二个文件的行数为9、单词数18、字节数78 3 6 32 testfile_2 #第三个文件的行数为3、单词数6、字节数32 15 116 708 总用量 #三个文件总共的行数为15、单词数116、字节数708
含参实例
# 查看有多少个用户 cat /etc/passwd | wc -l wc -l < /etc/passwd
参数 :
- -c或--bytes或--chars 只显示Bytes数。
- -l或--lines 显示行数。
- -w或--words 只显示字数。
- --help 在线帮助。
- --version 显示版本信息。
实例
管道命令符
查找 grep
命令:grep
作用:在文本内容中查找出指定文本行并标红
例子:查找当前系统不允许登陆系统的用户信息
grep -n /sbin/nologin /etc/passwd
例子:查找文件中包含关键字词的内容
grep -n 关键字词 文件名
例子:查找文件中不包含关键字词的内容
grep -v 关键字词 文件名
例子:查看当前被限制登陆系统的用户数
grep /sbin/nologin /etc/passwd | wc -l
补充内容
access.log
序号 | 字段 |
1 | 远程主机IP |
2 | 远端用户标识(已废弃) |
3 | 远程用户名 |
4 | 请求时间 |
5 | 请求第一行(典型格式:请求方法/访问资源协议) |
6 | 状态代码(显示客户端的请求是否成功) |
7 | 发送字节数(服务器发送给客户端的总字节数) |
8 | 请求来源 |
9 | 客户端浏览器识别信息 |
例子:统计出所有来访客户端的数目
(1)查找远程主机IP(cat
access.log
|
cut
-f1
-d ' '
)
(2)并排序去重(sort
|
uniq
)
(3)统计出所有来访客户端的数目(wc
-l
)
cat access.log | cut -f1 -d ' ' | sort | uniq | wc -l # 查看文件 | 提取出第一列,分隔符为‘ ’| 排序 | 去重 | 显示输出 数目
例子:查看日志中出现次数排名前五的客户端IP,并将IP保存到名为clients.txt中
cat access.log | cut -f1 -d ' ' | sort | uniq -c | sort -nr | head -5 > clients.txt
例子:查看指定文件(FileName)再指定日期(VisitDate)访问的次数
cat access.log | grep 'VisitDate' | grep 'FileName' | wc -l # grep 'FileName' access.log | grep 'VisitDate'
练习
练习题:grep
1.查找 /etc/passwd 中允许登陆的用户信息
# 查找文件中不包含关键字词的内容:grep -v 关键字词 文件名 grep -v /sbin/nologin /etc/passwd
2.查找 /etc/group中wheel组的用户信息
grep wheel /etc/group
3.统计 /etc/passwd 中允许登陆的用户数
grep -v /sbin/nologin /etc/passwd | wc -l
4.查看 /dev 文件中的详细信息,并使用翻页功能
ls /dev -l | more ls -l /dev | more ll /dev | more
5.利用管道和passwd --stdin 修改用户密码
echo '密码' | passwd --sdtin 用户名
【 If you want to reprint this article, please quote the link instead of copying my content and republishing it. 】