【Linux】【专项突破】Linux重定向与管道

【专项突破】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.

posted @ 2022-03-07 09:32  萌狼蓝天  阅读(38)  评论(0编辑  收藏  举报