Linux 中标准的输入设备默认指的是键盘,标准的输出设备默认指的是显示器。
数据流又可分为 标准输入流 、标准输出流和标准标准错误流。 这三种流向对应着相关的文件描述符, 默认描述符范围是:0-2。
[root@zaishu ~]# ls -l //这个就是标准输出,如果需要重定向 则指定其描述符为1
total 4620
-rw-r--r-- 1 root root 0 Oct 22 11:25 1
-rw-r--r-- 1 root root 0 Oct 22 11:21 a
-rw-r--r-- 1 root root 0 Oct 22 11:14 aa
-rw-r--r-- 1 root root 0 Oct 22 11:14 aaa
-rw-r--r-- 1 root root 0 Oct 22 11:14 aabbc
[root@zaishu ~]# ls-l // 这个输出结果就是标准错误 如果需要重定向 则指定其描述符为2
-bash: ls-l: command not found
输入、输出重定向可以理解为:
输入重定向:指的是重新指定设备来代替键盘作为新的输入设备;
输出重定向:指的是重新指定设备来代替显示器作为新的输出设备。
标准数据流重定向
[root@zaishu ~]# ls -l > x //不输出到屏幕,输出到文本,这就是输出重定向;另外当指定没有描述符的时候,默认就是标准数据流。
root@zaishu ~]# ls -l 1> y (这两条命令的效果一样 1就是代表标准输出流)
错误数据流重定向
[root@zaishu ~]# ls-l > x //可看到错误数据流,当不指定描述符的时候,还是会输出到屏幕。
-bash: ls-l: command not found
[root@zaishu ~]# ls-l 2>x //如果对于错误数据流的重定向,需要指定描述符 2
[root@zaishu ~]# cat x
-bash: ls-l: command not found
& 是一个描述符,如果在1和2前面不加&,这个时候1和2表示的是普通文件。加了&表示的是重定向到对应的设备。 举例:
1>&2 意思是把标准输出重定向到标准错误.
如果是 1>2 表示的是将标准输出重定向到2这个文件。
2>&1 意思是把标准错误输出重定向到标准输出。
如果是 2>1 表示的是将标准错误重定向到1这个文件
&>filename 意思是把标准输出和标准错误输出都重定向到文件filename中
例1. 文本作为输入
[root@zaishu ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
...
saslauth:x:998:76:Saslauthd user:/run/saslauthd:/sbin/nologin
oracle:x:1002:1002::/home/oracle:/bin/bash
[root@zaishu ~]# cat
root:x:0:0:root:/root:/bin/bash
...
saslauth:x:998:76:Saslauthd user:/run/saslauthd:/sbin/nologin
oracle:x:1002:1002::/home/oracle:/bin/bash
例2. 分界符
[root@zaishu ~]# cat <<0 //遇到0,表示跳出
> a
> b
> c
> 0
a
b
c
例3. 输入 输出一起用
通过重定向 将/etc/passwd 作为输入设备,并输出重定向到 shu.txt,最终实现将 /etc/passwd 文件中内容复制到 shu.txt 。
[root@prometheus ~]# cat shu.txt
[root@prometheus ~]# cat shu.txt
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
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
prometheus:x:998:996::/home/prometheus:/bin/bash
node_exporter:x:997:995::/home/node_exporter:/bin/bash
输出重定向可以细分为标准输出重定向和错误输出重定。
例1. 标准输出重定向到文本
[root@prometheus ~]# ls -lt > test
[root@prometheus ~]# ls -lt 1> test
例2. 标准错误重定向到文本
[root@prometheus ~]# ls-lt 2>err
例3. 标准错误重定向到标准输出(屏幕)
[root@prometheus ~]# ls-lt 2>&1
-bash: ls-lt: command not found