第7章:重定向
- 重定向
- 概念:Linux中任何的一个东西都是文件,输入和输出的基础也都是文件。而重定向指的是从输入和输出的标准文件切换到一般文件
- 标准化的输入和输出
- 标准的输入:stdin:通常指的是键盘
- 标准的输出:stdout:通常指的是屏幕
- 标准的错误:stderr:通常指的是屏幕
第7章:重定向/7.1 重定向标准输出
- 重定向标准输出
- 语法: > 具体的文件名
- 举例:
[root@zabbix ~]# ls -l > ls-output.txt
[root@zabbix ~]# vi ls-output.txt
total 409916
-rw-r--r--. 1 root root 10 Aug 21 03:42 ln_123
-rw-r--r--. 1 root root 0 Aug 27 01:42 ls-output.txt
drwxr-xr-x. 2 root root 21 Aug 21 03:52 me
-rw-r--r--. 1 root root 7166 Jun 7 18:33 mylog
-rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz
lrwxrwxrwx. 1 root root 15 Aug 21 03:36 s_ln_123 -> wys_bak/123.txt
lrwxrwxrwx. 1 root root 8 Aug 21 03:37 s_ln_dir -> wys_bak/
drwxr-xr-x. 7 root root 4096 Aug 21 04:50 wys_bak
追加式重定向:
- 语法: >> 文件名
- 举例:
[root@zabbix /]# ll -l >> /root/ls-output.txt
[root@zabbix ~]# vi ls-output.txt
total 409916
-rw-r--r--. 1 root root 10 Aug 21 03:42 ln_123
-rw-r--r--. 1 root root 0 Aug 27 01:46 ls-output.txt
drwxr-xr-x. 2 root root 21 Aug 21 03:52 me
-rw-r--r--. 1 root root 7166 Jun 7 18:33 mylog
-rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz
lrwxrwxrwx. 1 root root 15 Aug 21 03:36 s_ln_123 -> wys_bak/123.txt
lrwxrwxrwx. 1 root root 8 Aug 21 03:37 s_ln_dir -> wys_bak/
drwxr-xr-x. 7 root root 4096 Aug 21 04:50 wys_bak
total 36 新增的内容
drwxr-xr-x. 8 root root 4096 Apr 24 16:10 app
lrwxrwxrwx. 1 root root 7 May 21 11:03 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 May 31 12:20 boot
drwx--x--x. 3 root root 19 May 3 17:00 cutome-path
drw-------. 9 root root 4096 May 31 16:04 data
drwxr-xr-x. 19 root root 3220 Aug 16 01:10 dev
drwxr-xr-x. 2 root root 90 Apr 16 10:03 dockercmd
drwxr-xr-x. 4 root root 32 Apr 13 11:21 docker-hub
drwxr-xr-x. 101 root root 8192 Aug 14 17:40 etc
drwxr-xr-x. 8 root root 88 Aug 14 17:40 home
lrwxrwxrwx. 1 root root 7 May 21 11:03 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 May 21 11:03 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Apr 11 12:59 media
drwxr-xr-x. 2 root root 6 Apr 11 12:59 mnt
drwxr-xr-x. 6 root root 56 Jun 8 11:16 opt
第7章:重定向/7.2 重定向标准错误
- 重定向标准错误
- 没有专用的重定向错误操作符,需要配合文件描述符使用,文件描述符说明:
- 0:标准输入
- 1:标准输出
- 2:标准错误
- 覆盖式:
- 语法: 2>
- 举例:
[root@zabbix ~]# xxx 2> /root/ls-output.txt
[root@zabbix ~]# vi ls-output.txt
-bash: xxx: command not found
- 追加式:
- 语法:2>>
- 举例:
[root@zabbix ~]# aaa 2>> /root/ls-output.txt
[root@zabbix ~]# vi ls-output.txt
-bash: xxx: command not found
-bash: aaa: command not found
第7章:重定向/7.3 重定向标准输出和标准错误
- 重定向标准输出和标准错误
- 覆盖式:
- 旧版:
- 语法:> 文件名 2>&1
- 举例:
[root@zabbix ~]# ls -l /aa /bin/usr /bin/temp/ . /root/mylog > ls-output.txt 2>&1
[root@zabbix ~]# vi ls-output.txt
ls: cannot access /aa: No such file or directory
ls: cannot access /bin/usr: No such file or directory
ls: cannot access /bin/temp/: No such file or directory 先输出错误
-rw-r--r--. 1 root root 7166 Jun 7 18:33 /root/mylog 再输出正确的
.:
total 409920
-rw-r--r--. 1 root root 10 Aug 21 03:42 ln_123
-rw-r--r--. 1 root root 159 Aug 27 02:08 ls-output.txt
drwxr-xr-x. 2 root root 21 Aug 21 03:52 me
-rw-r--r--. 1 root root 7166 Jun 7 18:33 mylog
-rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz
lrwxrwxrwx. 1 root root 15 Aug 21 03:36 s_ln_123 -> wys_bak/123.txt
lrwxrwxrwx. 1 root root 8 Aug 21 03:37 s_ln_dir -> wys_bak/
drwxr-xr-x. 7 root root 4096 Aug 21 04:50 wys_bak
- 新版:
- 语法:&> 文件名
- 举例:
[root@zabbix ~]# ls -l /aa /bin/usr . &> ls-output.txt
[root@zabbix ~]# vi ls-output.txt
ls: cannot access /aa: No such file or directory
ls: cannot access /bin/usr: No such file or directory 先输出错误
.: 再输出正确的
total 409920
-rw-r--r--. 1 root root 10 Aug 21 03:42 ln_123
-rw-r--r--. 1 root root 103 Aug 27 02:10 ls-output.txt
drwxr-xr-x. 2 root root 21 Aug 21 03:52 me
-rw-r--r--. 1 root root 7166 Jun 7 18:33 mylog
-rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz
lrwxrwxrwx. 1 root root 15 Aug 21 03:36 s_ln_123 -> wys_bak/123.txt
lrwxrwxrwx. 1 root root 8 Aug 21 03:37 s_ln_dir -> wys_bak/
drwxr-xr-x. 7 root root 4096 Aug 21 04:50 wys_bak
- 旧版:
- 追加式:
- 旧版:>> 文件名 2>&1
- 新版:&>> 文件名
第7章:重定向/7.4 不产生输出:/dev/null
- 不产生输出:/dev/null
-
- 概念:/dev/null 是一个特殊的系统文件,称为位存储桶
- 比如:不需要错误输出
-
- 命令: 2> /dev/null
- 举例:
[root@zabbix ~]# ls -l /aa /bin/usr . 2> /dev/null
.:
total 409920
-rw-r--r--. 1 root root 10 Aug 21 03:42 ln_123
-rw-r--r--. 1 root root 492 Aug 27 02:25 ls-output.txt
drwxr-xr-x. 2 root root 21 Aug 21 03:52 me
-rw-r--r--. 1 root root 7166 Jun 7 18:33 mylog
-rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz
lrwxrwxrwx. 1 root root 15 Aug 21 03:36 s_ln_123 -> wys_bak/123.txt
lrwxrwxrwx. 1 root root 8 Aug 21 03:37 s_ln_dir -> wys_bak/
drwxr-xr-x. 7 root root 4096 Aug 21 04:50 wys_bak
第7章:重定向/7.5 拼接多个输出
- 拼接多个输出
- 举例1:错误输出到文件1 标准错误到文件2
- 语法: 1>文件2 2> 文件1
- 举例:
[root@zabbix ~]# ls -l /aa /bin/usr . 2> err-output.txt 1> ls-output.txt
[root@zabbix ~]# vi err-output.txt
ls: cannot access /aa: No such file or directory
ls: cannot access /bin/usr: No such file or directory
[root@zabbix ~]# vi ls-output.txt
.:
total 409920
-rw-r--r--. 1 root root 103 Aug 27 02:32 err-output.txt
-rw-r--r--. 1 root root 10 Aug 21 03:42 ln_123
-rw-r--r--. 1 root root 0 Aug 27 02:32 ls-output.txt
drwxr-xr-x. 2 root root 21 Aug 21 03:52 me
-rw-r--r--. 1 root root 7166 Jun 7 18:33 mylog
-rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz
lrwxrwxrwx. 1 root root 15 Aug 21 03:36 s_ln_123 -> wys_bak/123.txt
lrwxrwxrwx. 1 root root 8 Aug 21 03:37 s_ln_dir -> wys_bak/
drwxr-xr-x. 7 root root 4096 Aug 21 04:50 wys_bak
- 举例2:不需要错误输出 标准错误到文件2
- 语法: 1>文件2 2> /dev/null
- 举例:
[root@zabbix ~]# ls -l /aa /bin/usr . 2> /dev/null 1> ls-output.txt
[root@zabbix ~]# vi ls-output.txt
.:
total 409916
-rw-r--r--. 1 root root 10 Aug 21 03:42 ln_123
-rw-r--r--. 1 root root 0 Aug 27 02:31 ls-output.txt
drwxr-xr-x. 2 root root 21 Aug 21 03:52 me
-rw-r--r--. 1 root root 7166 Jun 7 18:33 mylog
-rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz
lrwxrwxrwx. 1 root root 15 Aug 21 03:36 s_ln_123 -> wys_bak/123.txt
lrwxrwxrwx. 1 root root 8 Aug 21 03:37 s_ln_dir -> wys_bak/
drwxr-xr-x. 7 root root 4096 Aug 21 04:50 wys_bak
第7章:重定向/7.6 cat 命令
- cat 命令
- 作用:读取一个或者多个文件,然后复制它们到标准输出
- 用cat 命令实现多个文件标准输出
- 格式:cat file1 file2
- 举例:
[root@zabbix ~]# cat ln_123 test.txt
112
11222 ln_123文件内容
idadada 2dfada dada
dada 1122
womd
[root@zabbix ~]# test.txt文件内容
- 用cat 命令实现多个文件重定向
- 格式: cat file1 file2 > 文件名
- 举例:
[root@zabbix ~]# cat ln_123 test.txt > mycat
[root@zabbix ~]# cat mycat
112
11222
idadada 2dfada dada
dada 1122
womd
[root@zabbix ~]#
- cat命令把标准输入的内容重定向到文件
- 覆盖式输入:
[root@zabbix ~]# cat > test.txt
accfc
ddd
ddd
www
^C
[root@zabbix ~]# cat test.txt
accfc
ddd
ddd
www
- 追加式输入
[root@zabbix ~]# cat >> test.txt
dadada
dadad
dadad
[root@zabbix ~]# cat test.txt
accfc
ddd
ddd
www
dadada
dadad
dadad
- 覆盖式输入:
第7章:重定向/7.7 管道
- 管道
- 作用:将一个命令的标准输出作为另外一个命令的标准输入
- 格式:command1|command2
- command1:产生标准输出
- command2:需要一个标准输入
- 举例:
- command1:产生标准输出
[root@zabbix ~]# ls -l /usr/bin
-rwxr-xr-x. 2 root root 185488 Apr 11 13:24 zipinfo
-rwxr-xr-x. 1 root root 12040 Jun 10 2014 zipmerge
-rwxr-xr-x. 1 root root 95984 Nov 6 2016 zipnote
-rwxr-xr-x. 1 root root 100096 Nov 6 2016 zipsplit
-rwxr-xr-x. 1 root root 11880 Jun 10 2014 ziptorrent
-rwxr-xr-x. 1 root root 2041 Apr 11 08:01 zless
-rwxr-xr-x. 1 root root 2859 Apr 11 08:01 zmore
-rwxr-xr-x. 1 root root 5343 Apr 11 08:01 znew
lrwxrwxrwx. 1 root root 6 Aug 31 2017 zsoelim -> soelim
- command2:需要一个标准输入
[root@zabbix ~]# less mycat
11222
idadada 2dfada dada
dada 1122
womd
mycat (END
- command1|command2
[root@zabbix ~]# ls -l /usr/bin|less
total 286160
-rwxr-xr-x. 1 root root 41480 Apr 11 12:35 [
-rwxr-xr-x. 1 root root 107856 Aug 3 2017 a2p
-rwxr-xr-x. 1 root root 52720 Apr 21 02:11 ab
-rwxr-xr-x. 1 root root 11336 Apr 27 22:53 abrt-action-analyze-backtrace
-rwxr-xr-x. 1 root root 11320 Apr 27 22:53 abrt-action-analyze-c
-rwxr-xr-x. 1 root root 1345 Apr 27 22:53 abrt-action-analyze-ccpp-local
-rwxr-xr-x. 1 root root 6821 Apr 27 22:53 abrt-action-analyze-core
- command1:产生标准输出
第7章:重定向/7.8 过滤器/7.8.1 sort:可能重复排序
- 可能重复排序
- 作用:在管理( 第7章:重定向/7.7 管道)的基础上,将一个命令标准输出(可能多个)经过处理后(比如排序)再作为另外一个命令的输入
- 格式:commond1|sort|commond2
- 举例:
[root@zabbix ~]# ls /bin /usr/bin |sort|less
abrt-action-analyze-xorg
abrt-action-check-oops-for-hw-error
abrt-action-check-oops-for-hw-error
abrt-action-generate-backtrace
abrt-action-generate-backtrace
abrt-action-generate-core-backtrace
abrt-action-generate-core-backtrace
abrt-action-install-debuginfo
abrt-action-install-debuginfo
abrt-action-list-dsos
:
第7章:重定向/7.8 过滤器/7.8.2 uniq:去除重复的排序
- 去除重复的排序
- 格式:commond1|sort|uniq|commond1
- 举例:
[root@zabbix ~]# ls /bin /usr/bin |sort|uniq|less
abrt-cli
abrt-dump-oops
abrt-dump-xorg
abrt-handle-upload
abrt-merge-pstoreoops
abrt-retrace-client
abrt-watch-log
abs2rel
ac
acyclic
addr2line
:
第7章:重定向/7.8 过滤器/7.8.3 wc:统计行数、字数、字节数
- 统计行数、字数、字节数
- 格式:commond1|过滤器1|过滤器2|wc
- 关于wc 命令
- 命令: wc 操作 文件名1 文件名2
- 操作
- -l :显示行数
- -c : 显示字节数
- -m:显示字符数
- 举例:
[root@zabbix ~]# wc ln_123 mycat
2 2 10 ln_123 第1列:行数 第2列:字符 第3列:字节数
5 8 47 mycat
7 10 57 total
- 举例:
[root@zabbix ~]# ls /bin /usr/bin |sort|uniq|wc
1150 1149 10835 第1列:行数 第2列:字符 第3列:字节数
[root@zabbix ~]#
第7章:重定向/7.8 过滤器/7.8.4 grep 过滤
- grep 过滤
- grep命令:后面章节会详细讲解grep
- 格式:grep pattern 文件1 文件2 。。。
- 举例:
[root@zabbix ~]# grep 12 ln_123
112
11222
- 过滤器中使用grep
- 举例
[root@zabbix ~]# ls /bin /usr/bin |sort|uniq|grep zip
bunzip2
bzip2
bzip2recover
funzip
gpg-zip
gunzip
gzip
unzip
unzipsfx
zip
zipcloak
zipcmp
zipgrep
zipinfo
zipmerge
zipnote
zipsplit
ziptorrent
- 举例
第7章:重定向/7.8 过滤器/7.8.5 head/tail 过滤
- head/tail 过滤
- head命令
- 格式:head 操作符 文件1 文件2
- 操作符:
- -n:文件开始几行
- -c:文件开始的多个字节
- 操作符:
- 举例:
[root@zabbix ~]# head -n 5 mylog mycat
==> mylog <==
.
.
JAVA Memory arguments: -Xms256m -Xmx512m -XX:MaxPermSize=256m
.
server/common/derby/lib/derby.jar:/u01/oracle/weblogic/wlserver/server/lib/xqrl.jar
==> mycat <==
112
11222
idadada 2dfada dada
dada 1122
womd
[root@zabbix ~]#
- 格式:head 操作符 文件1 文件2
- tail命令
- 格式:tail 操作符 文件1 文件2
- 操作符:
- -n:文件结尾几行
- -c:文件开始的多个字节
- 操作符:
- 举例:
[root@zabbix ~]# tail-n 5 mylog mycat
==> mylog <==
.
.
JAVA Memory arguments: -Xms256m -Xmx512m -XX:MaxPermSize=256m
.
server/common/derby/lib/derby.jar:/u01/oracle/weblogic/wlserver/server/lib/xqrl.jar
==> mycat <==
112
11222
idadada 2dfada dada
dada 1122
womd
[root@zabbix ~]#
- 实时查看文件内容: tail -f find
- 格式:tail 操作符 文件1 文件2
- 在管道中使用head/tail
[root@zabbix ~]# ls /bin /usr/bin |head -n 5 输出前面5个文件
/bin:
[
a2p
ab
abrt-action-analyze-backtrace
[root@zabbix ~]# ls /bin /usr/bin |tail -n 5 输出后面5个文件
ziptorrent
zless
zmore
znew
zsoelim
[root@zabbix ~]#
第7章:重定向/7.8 过滤器/7.8.6 tee:重定向管道输出结果到文件
- tee:重定向管道输出结果到文件
- 格式:commond1|....|tee 文件名1|tee 文件名2|commond...|
- 说明:tee 可以插入到管道的任意一个过程,捕捉管道最近的一次输出,插入的位置不一样捕捉输出的结果也不一样
- 举例:
- 举例1:捕捉ls 输出结果
[root@zabbix ~]# ls /usr/bin |tee ls.txt|grep zip
bunzip2
bzip2
bzip2recover
funzip
gpg-zip
gunzip
gzip
unzip
unzipsfx
zip
zipcloak
zipcmp
zipgrep
zipinfo
zipmerge
zipnote
zipsplit
ziptorrent
[root@zabbix ~]# cat ls.txt
yumdownloader
yum-groups-manager
zcat
zcmp
zdiff
zegrep
zfgrep
zforce
zgrep
zip
zipcloak
zipcmp
zipgrep
zipinfo
zipmerge
- 举例2:捕捉grep 输出结果
[root@zabbix ~]# ls /usr/bin |grep zip|tee ls.txt
bunzip2
bzip2
bzip2recover
funzip
gpg-zip
gunzip
gzip
unzip
unzipsfx
zip
zipcloak
zipcmp
zipgrep
zipinfo
zipmerge
zipnote
zipsplit
ziptorrent
[root@zabbix ~]# cat ls.txt
bunzip2
bzip2
bzip2recover
funzip
gpg-zip
gunzip
gzip
unzip
unzipsfx
zip
zipcloak
zipcmp
zipgrep
zipinfo
zipmerge
zipnote
zipsplit
ziptorrent
[root@zabbix ~]#
- 举例1:捕捉ls 输出结果