第六章Linux系统管理
重定向与管道技术
概述
在 shell 程式中,最常使用的 FD (file descriptor) 大概有三个, 分别是:
0 是一个文件描述符,表示标准输入(stdin)
1 是一个文件描述符,表示标准输出(stdout)
2 是一个文件描述符,表示标准错误(stderr)
在日常工作中是把多个 Linux 命令适当地组合到一起,使其协同工作,以便我们更加高效地处理数据。要做到这一点,就必须搞明白命令的输入重定向和输出重定向的原理。
简而言之,输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到屏幕的数据信息写入到指定文件中。在日常的学习和工作中,相较于输入重定向,我们使用输出重定向的频率更高,所以又将输出重定向分为了标准输出重定向和错误输出重定向两种不同的技术,以及清空写入与追加写入两种模式。
何时使用重定向
1.当屏幕输出的信息很重要,⽽且我们需要将他存下来的时候
2.后台执⾏中的程序,不希望他⼲扰屏幕正常的输出结果时;
3.系统的例⾏命令, 例如定时任务的执⾏结果,希望他可以存下来时;
4.⼀些执⾏命令,我们已经知道他可能出现错误信息, 想将他直接丢弃时;
5.错误信息与正确信息需要分别输出时;
[root@RHCE7 ~]# find >/root/syj.txt 2>/root/syjerror.txt
6.1 重定向实例
6.1.1 标准输出重定向
[root@Redhat7 ~]# ifconfig >/root/syjjjj.txt
清空原有文件
6.1.2 标准输出重定向(追加)
[root@Redhat7 ~]# ifconfig >/root/syjjjj.txt
在原有文件追加
6.1.3 错误和正确输出重定向分别写到不同文件
[root@Redhat7 etc]# find /etc 1>/root/syj.txt 2>/root/jjj.txt
6.1.4 重定向到空设备
[root@Redhat7 etc]# ls /root >ab 2>/dev/null
6.2 输入重定向
重定向的输入是<.
[root@Redhat7 ~]# grep root </etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
MySQL 表结构输入
[root@Redhat7 ~]# mysql -uroot -p123 <bbs.sql
6.3 脚本中使用重定向
[root@Redhat7 ~]# cat ping.sh
ping -c1 192.168.27.140 &>/dev/null
if [ $? -eq 0 ]; then
echo "192.168.27.140 is up"
else
echo "192.168.69.113 is down"
fi
[root@Redhat7 ~]# sh ping.sh
192.168.27.140 is up
6.4 重定向总结
6.5 进程管道技术
管道操作符号 "|" 连接左右两个命令, 将左侧的命令的标准输出, 交给右侧命令的标准输⼊。
6.5.1 管道技术实例-排序
[root@Redhat7 ~]# sort -t ":" -k3 -n /etc/passwd|head
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
6.5.2 管道技术实例-统计CPU前5
[root@Redhat7 ~]# ps aux --sort=-%cpu | head -6
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
gdm 2443 0.3 4.1 1543032 77708 ? Sl 21:45 0:02 gnome-shell --mode=gdm
root 1 0.1 0.2 123312 3880 ? Ss 21:45 0:00 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 4 0.1 0.0 0 0 ? S 21:45 0:00 [kworker/0:0]
root 281 0.1 0.0 0 0 ? S 21:45 0:01 [kworker/1:1]
root 2 0.0 0.0 0 0 ? S 21:45 0:00 [kthreadd]
6.5.3 管道技术实践tee
tee命令用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin。简单的说就是把数据重定向到给定文件和屏幕上。
tee 命令的输出内容直接作为另一个命令的输入内容
[root@Redhat7 ~]# ls /iso7.2 | tee /output.txt | wc -l
15
[root@Redhat7 ~]# cat /output.txt
addons
EFI
EULA
GPL
images
isolinux
LiveOS
media.repo
Packages
release-notes
repodata
RPM-GPG-KEY-redhat-beta
RPM-GPG-KEY-redhat-release
syjhct
TRANS.TBL
Tee和> 效果一样,但是tee会 输出到屏幕
[root@Redhat7 ~]# date >syj.txt
[root@Redhat7 ~]# date | tee syj.txt
2019年 08月 20日 星期二 21:34:16 CST