|
连接多个命令,这被称为管道符。Linux 管道的具体语法格式如下:
command1 | command2
command1 | command2 [ | commandN... ]
|
左边命令的输出就变成了右边命令的输入。只要第一个命令向标准输出写入,而第二个命令是从标准输入读取,那么这两个命令就可以形成一个管道。大部分的 Linux 命令都可以用来形成管道。
这里需要注意,command1 必须有正确输出,而 command2 必须可以处理 command2 的输出结果;而且 command2 只能处理 command1 的正确输出结果,不能处理 command1 的错误信息。
mysqldump -u root -p '123456' wiki > /tmp/wikidb.backup
gzip -9 /tmp/wikidb.backup
scp /tmp/wikidb.backup username@remote_ip:/backup/mysql/
-u
和-p
选项分别指出数据库的用户名和密码。-9
表示最慢的压缩速度最好的压缩效果。username
是登录远程服务器的用户名,命令执行后需要输入密码。mysqldump -u root -p '123456' wiki | gzip -9 | ssh username@remote_ip "cat > /backup/wikidb.gz"
这些使用了管道的命令有如下特点:
command > file
command1 | command1
command1 > command2
答案是,有时尝试的结果将会很糟糕。这是一个实际的例子,一个 Linux 系统管理员以超级用户(root 用户)的身份执行了如下命令:
cd /usr/bin
ls > less
[c.biancheng.net]$ ls | grep log.txt
log.txt
上述命令是查看文件 log.txt 是否存在于当前目录下。-al
选项:
[c.biancheng.net]$ ls -al | grep log.txt
-rw-rw-r--. 1 mozhiyan mozhiyan 0 4月 15 17:26 log.txt
管道符|
与两侧的命令之间也可以不存在空格,例如将上述命令写作ls -al|grep log.txt
;然而我还是推荐在管道符|
和两侧的命令之间使用空格,以增加代码的可读性。[c.biancheng.net]$ ls -al | grep log.txt >output.txt [c.biancheng.net]$ cat output.txt -rw-rw-r--. 1 mozhiyan mozhiyan 0 4月 15 17:26 log.txt
cat /var/log/message | less
[c.biancheng.net]$ ps aux | grep httpd > /tmp/ps.output [c.biancheng.net]$ cat /tem/ps.output mozhiyan 4101 13776 0 10:11 pts/3 00:00:00 grep httpd root 4578 1 0 Dec09 ? 00:00:00 /usr/sbin/httpd apache 19984 4578 0 Dec29 ? 00:00:00 /usr/sbin/httpd apache 19985 4578 0 Dec29 ? 00:00:00 /usr/sbin/httpd apache 19986 4578 0 Dec29 ? 00:00:00 /usr/sbin/httpd apache 19987 4578 0 Dec29 ? 00:00:00 /usr/sbin/httpd apache 19988 4578 0 Dec29 ? 00:00:00 /usr/sbin/httpd apache 19989 4578 0 Dec29 ? 00:00:00 /usr/sbin/httpd apache 19990 4578 0 Dec29 ? 00:00:00 /usr/sbin/httpd apache 19991 4578 0 Dec29 ? 00:00:00 /usr/sbin/httpd
[c.biancheng.net]$ who | sort mozhiyan :0 2019-04-16 12:55 (:0) mozhiyan pts/0 2019-04-16 13:16 (:0)who 命令的输出将作为 sort 命令的输入,所以这两个命令通过管道连接后会显示按照用户名排序的已登录用户的信息。
[c.biancheng.net]$ who | wc -l 5
command1 < input.txt | command2
command1 < input.txt | command2 -option | command3
[c.biancheng.net]$ cat os.txt redhat suse centos ubuntu solaris hp-ux fedora centos redhat hp-ux [c.biancheng.net]$ tr a-z A-Z <os.txt | sort CENTOS CENTOS FEDORA HP-UX HP-UX REDHAT REDHAT SOLARIS SUSE UBUNTU [c.biancheng.net]$ tr a-z A-Z <os.txt | sort | uniq CENTOS FEDORA HP-UX REDHAT SOLARIS SUSE UBUNTU
command1 | command2 | ... | commandN > output.txt
command1 < input.txt | command2 | ... | commandN > output.txt
[c.biancheng.net]$ mount | column -t >mounted.txt [c.biancheng.net]$ cat mounted.txt proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel) devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=496136k,nr_inodes=124034,mode=755) securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000) tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755) tmpfs on /sys/fs/cgroup type tmpfs (rw,nosuid,nodev,noexec,seclabel,mode=755) #####此处省略部分内容#####
[c.biancheng.net]$ cat os.txt redhat suse centos ubuntu solaris hp-ux fedora centos redhat hp-ux [c.biancheng.net]$ tr a-z A-Z <os.txt | sort | uniq >os.txt.new [c.biancheng.net]$ cat os.txt.new CENTOS FEDORA HP-UX REDHAT SOLARIS SUSE UBUNTU
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有