第六章Linux系统管理-重定向与管道技术

第六章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

发布了37 篇原创文章 · 获赞 0 · 访问量 2408

猜你喜欢

转载自blog.csdn.net/syjhct/article/details/100164510