linux管线命令


一、什么是管线命令?

" | " 是一个界定符号。它被bash解析为将上一个命令的标准输出定向为下一个命令的标准输入。可见," | "的下一个命令是要能够接收标准输入的。所以,我们将能够读取标准输入的命令称为管线命令,常见的管线命令有cut、grep、tee、xargs等。而ls、cd等命令由于不能读取标准输入,所以它们不是管线命令!

管线命令不必像非管线命令一样在使用时指定读取的文件。

二、撷取命令(cut、grep)

撷取命令通常是针对 一行一行 来分析,而不是整篇文件分析!

2.1 cut

这个指令可以将一段信息的某一段给切出来,处理的信息是以 行 为单位的!常见用法如下:

# 范例一
root@ubuntu:~# echo ${PATH}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
root@ubuntu:~# echo ${PATH} | cut -d ':' -f 1
/usr/local/sbin
root@ubuntu:~# echo ${PATH} | cut -d ':' -f 2
/usr/local/bin
root@ubuntu:~# echo ${PATH} | cut -d ':' -f 3
/usr/sbin
root@ubuntu:~# echo ${PATH} | cut -d ':' -f 1,3
/usr/local/sbin:/usr/sbin
root@ubuntu:~# echo ${PATH} | cut -d ':' -f 1-3
/usr/local/sbin:/usr/local/bin:/usr/sbin
# 范例二
root@ubuntu:~# export
declare -x HOME="/root"
declare -x LANG="en_US.UTF-8"
declare -x LC_ADDRESS="zh_CN.UTF-8"
declare -x LC_IDENTIFICATION="zh_CN.UTF-8"
declare -x LC_MEASUREMENT="zh_CN.UTF-8"
declare -x LC_MONETARY="zh_CN.UTF-8"
root@ubuntu:~# export | cut -c 12-  		# 截取第12个字符到最后
HOME="/root"
LANG="en_US.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"

2.2 grep

cut 是在一行信息中取出某部分我们想要的。而grep是在分析一行信息时,若其中有我们想要的信息,则整行拿出来!常见用法如下:

root@ubuntu:~# last | grep 'root'		# 将含有root的行输出来
root     pts/12       192.168.63.1     Thu Nov 17 12:55   still logged in
root     pts/20       192.168.63.1     Wed Nov 16 15:33 - 09:33  (18:00)
root     pts/12       192.168.63.1     Tue Nov 15 19:41 - 17:18  (21:37)
......
root@ubuntu:~# last | grep -v 'root'	# 将不含有root的行输出来
study    tty6                          Mon Nov 14 15:35 - 20:18  (04:43)
study    tty6                          Mon Nov 14 15:32 - 15:32  (00:00)
study    tty5                          Mon Nov 14 15:02 - 15:34  (00:31)
study    tty8         :1               Mon Nov 14 14:58 - 16:21  (01:22)
......

三、双向重导向(tee)

tee这个命令,既可以读取标准输入,还能向指定文件输出的同时向标准输出设备输出!而前面讲到的cut等命令与tee的显著区别是它们默认向标准输出设备输出,只能采用>这个符号重定向输出到文件,而如果重定向,管线后面的命令则无法获取到输入了!
在这里插入图片描述

# tee : ls的输出保存到1.txt的同时输出到终端
root@ubuntu:~# ls -l /home | tee 1.txt | cat
total 12
drwxr-xr-x  5 root   root   4096 38  2022 sqlite3
drwxr-xr-x 16 study  study  4096 1115 23:54 study
drwxr-xr-x  2 test   test   4096 119 20:57 test
root@ubuntu:~# cat 1.txt
total 12
drwxr-xr-x  5 root   root   4096 38  2022 sqlite3
drwxr-xr-x 16 study  study  4096 1115 23:54 study
drwxr-xr-x  2 test   test   4096 119 20:57 test

# grep : ls的输出保存到4.txt但没有向终端输出,可能cat都没运行过
root@ubuntu:~# ls -l /home | grep 'study' > 4.txt | cat
root@ubuntu:~# cat 4.txt
drwxr-xr-x 16 study  study  4096 1115 23:54 study

# tee : 以追加的方式保存到1.txt的同时向终端输出
root@ubuntu:~# ls -l /home | tee -a 1.txt | cat	
total 12
drwxr-xr-x  5 root   root   4096 38  2022 sqlite3
drwxr-xr-x 16 study  study  4096 1115 23:54 study
drwxr-xr-x  2 test   test   4096 119 20:57 test
root@ubuntu:~# cat 1.txt
total 12
drwxr-xr-x  5 root   root   4096 38  2022 sqlite3
drwxr-xr-x 16 study  study  4096 1115 23:54 study
drwxr-xr-x  2 test   test   4096 119 20:57 test
total 12
drwxr-xr-x  5 root   root   4096 38  2022 sqlite3
drwxr-xr-x 16 study  study  4096 1115 23:54 study
drwxr-xr-x  2 test   test   4096 119 20:57 test

四、参数代换(xargs)

# id 只能接收一个参数,而前面一下子给了三个,错误
root@ubuntu:~# cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs id			
id: extra operand ‘daemon’
Try 'id --help' for more information.

# -n 1 表明每次给id一个参数
root@ubuntu:~# cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs -n 1 id		
uid=0(root) gid=0(root) groups=0(root)
uid=1(daemon) gid=1(daemon) groups=1(daemon)
uid=2(bin) gid=2(bin) groups=2(bin)

# 遇到bin就结束查找
root@ubuntu:~# cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs -e'bin' -n 1 id  
uid=0(root) gid=0(root) groups=0(root)
uid=1(daemon) gid=1(daemon) groups=1(daemon)
root@ubuntu:~#

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值