2. 输入输出重定向
标准输入重定向 是指用一个文件的内容代替键盘输入。
输出重定向 是指将 标准输出 、标准错误输出 输出到文件来代替打印到屏幕上。
标准输入重定向
语法格式
命令 ... < 文件路径
... 代表选项和参数。
示例:
head -2 命令默认是将键盘输入的内容的前两行打印到屏幕上,当输入文件结束符(Control + d)时表示输入完成。如:
weimingze@mzstudio:~$ tail -2
this is first line. # 这一行是键盘输入
this is second line. # 这一行是键盘输入
this is third line. # 这一行是键盘输入,回车后输人 `Control + d`
this is second line. # 这两行是打印输如的内容
this is third line.
使用文件 /etc/passwd 作为键盘输入。
weimingze@mzstudio:~$ tail -2 < /etc/passwd
weimingze:x:1000:1000:weimingze:/home/weimingze:/bin/bash
sshd:x:122:65534::/run/sshd:/usr/sbin/nologin
用法:当有程序需要复杂的输入时,可以将这些输入内容按格式写入文件中,然后再使用输入重定向来代替键盘输入以节省时间。
标准输出重定向
语法格式
命令 ... > 文件路径
# 或
命令 ... >> 文件路径
标准错误输出重定向
语法格式
命令 ... 2> 文件路径
# 或
命令 ... 2>> 文件路径
重定向操作符
操作符
说明
< 文件路径标准输入重定向,用指定文件内容代替输入。
> 文件路径标准输出重定向,将输出重定向到指定文件(清空原有内容)。
>> 文件路径标准输出重定向,将输出重定向到指定文件(追加新内容)。
2> 文件路径标准错误输出重定向,将输出重定向到指定文件(清空原有内容)。
2>> 文件路径标准错误输出重定向,将输出重定向到指定文件(追加新内容)。
&> 文件路径将标准输出与错误输出的内容全部重定向到指定文件。
示例
将 grep 和 tail -2 命令的输出重定向到文件 result.txt
weimingze@mzstudio:~$ grep "root" /etc/passwd > result.txt
weimingze@mzstudio:~$ cat result.txt
root:x:0:0:root:/root:/bin/bash
nm-openvpn:x:121:122:NetworkManager OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin
weimingze@mzstudio:~$ grep "root" /etc/passwd > result.txt
weimingze@mzstudio:~$ cat result.txt
root:x:0:0:root:/root:/bin/bash
nm-openvpn:x:121:122:NetworkManager OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin
weimingze@mzstudio:~$ tail -2 /etc/group >> result.txt
weimingze@mzstudio:~$ cat result.txt
root:x:0:0:root:/root:/bin/bash
nm-openvpn:x:121:122:NetworkManager OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin
gnome-initial-setup:x:985:
weimingze:x:1000:
将 find /etc/ -name "passwd" 命令的标准输出重定向到文件 find.txt, 将标准错误输出重定向到文件 error.txt。
weimingze@mzstudio:~$ find /etc/ -name "passwd"
/etc/pam.d/passwd
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/credstore’: Permission denied
find: ‘/etc/vmware-tools/GuestProxyData/trusted’: Permission denied
/etc/passwd
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/ssl/private’: Permission denied
find: ‘/etc/credstore.encrypted’: Permission denied
weimingze@mzstudio:~$ find /etc/ -name "passwd" > find.txt 2> error.txt
weimingze@mzstudio:~$ cat find.txt
/etc/pam.d/passwd
/etc/passwd
weimingze@mzstudio:~$ cat error.txt
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/credstore’: Permission denied
find: ‘/etc/vmware-tools/GuestProxyData/trusted’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/ssl/private’: Permission denied
find: ‘/etc/credstore.encrypted’: Permission denied
可见标准输出只有如下两行(即正确结果):
/etc/pam.d/passwd
/etc/passwd
将 find /etc/ -name "passwd" 命令的标准输出和标准错误输入重定向到一个文件 all.txt。
weimingze@mzstudio:~$ find /etc/ -name "passwd" &> all.txt
weimingze@mzstudio:~$ cat all.txt
/etc/pam.d/passwd
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/credstore’: Permission denied
find: ‘/etc/vmware-tools/GuestProxyData/trusted’: Permission denied
/etc/passwd
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/ssl/private’: Permission denied
find: ‘/etc/credstore.encrypted’: Permission denied
weimingze@mzstudio:~$
/dev/null 文件
/dev/null 文件是一个特殊的字符设备文件。通常被称为 空设备或黑洞 文件。向此文件写入的所有数据会被丢弃(不会占用存储空间),从此文件读取数据会立即提示文件结束并返回。
如:
创建 1.txt 或清空 文件的内容:
weimingze@mzstudio:~$ cat /dev/null > null.txt
weimingze@mzstudio:~$ cat null.txt
weimingze@mzstudio:~$
将 find /etc/ -name "passwd" 命令的标准输出重定向到文件 find.txt, 将标准错误输出丢弃。
weimingze@mzstudio:~$ find /etc/ -name "passwd" > find.txt 2> /dev/null
weimingze@mzstudio:~$ cat find.txt
/etc/pam.d/passwd
/etc/passwd
特殊的字符设备文件
设备文件
说明
/dev/null丢弃所有数据,读取返回空。
/dev/zero读取时返回无限的零字节(
\x00)。/dev/random读取时返回随机数的字节(阻塞式)。
特殊输出重定向
操作符
说明
>&2标准输出 重定向为 标准错误输出,如:
echo "error!" >&2。2>&1标准错误输出 重定向到 标准输出,如:
mkdir /weimingze 2>&1。练习:
- 查找
/etc文件夹下名为group开头的文件有几个,都在什么位置(路径)。将错误信息重定向到/dev/null。