重定向

重定向

几乎所有命令都会将输出产生到屏幕上或从键盘上获取输入,但是在 Linux 中,可以将输出发送到文件或从文件读取输入。每个 shell 命令都有其自己的输入和输出。在执行命令之前,可以使用由 Shell 解释的特殊符号来重定向其输入和输出。例如,将 date 命令的输出发送到文件而不是发送到屏幕。更改输入或输出的默认路径称为重定向。

在 Linux 中,所有内容都是文件。以上三个数字是标准 POSIX 编号,也称为文件描述符(FD)。每个 Linux 命令至少都打开上述流以与用户或其他系统程序对话。

Standard File File Descriptor Number Meaning Example (type at shell prompt)
stdin 0 Read input from a file (the default is keyboard) cat < filename
stdout 1 Send data to a file (the default is screen). date > output.txtcat output.txt
stderr 2 Send all error messages to a file (the default is screen). rm /tmp/4815162342.txt 2>error.txtcat error.txt

标准输入

标准输入是默认输入法,所有命令都使用它来读取其输入。用零数字(0)表示。也称为 stdin。默认的标准输入是键盘。< 是输入重定向符号,语法为:

$ command < filename

$ cat < /etc/passwd

标准输入

标准输出

命令使用标准输出来写入(显示)其输出。默认为屏幕,用一个数字(1)表示。也称为标准输出。默认的标准输出是屏幕。> 是输出重定向符号,语法为:

$ command > output.file.name

$ ls > /tmp/output.txt

标准输出

要简单地重定向输出,请使用以下语法:

command > /path/to/file
/path/to/script.sh > output.txt

例如,将 date 命令的输出发送到名为 now.txt 的文件:

date > now.txt

You can also use the > operator to print file, enter:

cat file.txt > /dev/lp0

OR

sudo bash -c "cat file.txt > /dev/lp0"

To make a usage listing of the directories in the /home partition, enter:

sudo bash -c "cd /home ; du -s *│ sort -rn >/tmp/usage"

You can also use the following syntax:

echo "Today is $(date)" 1>/tmp/now.txt

You can append the output to the same file using » operator, enter:

date >> now.txt
cat now.txt

You can also use the following syntax:

echo "Today is $(date)" 1>>/tmp/now.txt

标准异常

标准错误是默认错误输出设备,用于写入所有系统错误消息。用两个数字(2)表示,也称为 stderr。默认的标准错误设备是屏幕或监视器,2> 是输入重定向符号,语法为:

$ command 2> errors.txt

例如,将查找命令错误发送到名为 fileerrors.txt 的文件,以便以后可以查看错误,输入:

find / -iname "*.conf" 2>fileerrors.txt
cat fileerrors.txt

Error

要将标准错误重定向到名为 error.log 的文件中,请输入:

command-name 2>error.log

在 /home 目录中找到所有 .profile 文件,并将错误记录到 /tmp/error 文件中,输入:

find /home -name .profile 2>/tmp/error

样本输出:

/home/t2/.profile
/home/vivek/ttt/skel/.profile

要查看错误,请输入:

more /tmp/error

样本输出:

find: `/home/vivek/.cpan/build/Acme-POE-Tree-1.01-qqmq77': Permission denied
find: `/home/vivek/.cpan/build/Lchown-1.00-uOM4tb': Permission denied
find: `/home/vivek/.cpan/build/IO-Tty-1.07-F9rDy3': Permission denied
find: `/home/vivek/.cpan/build/POE-Test-Loops-1.002-9AjIro': Permission denied
find: `/home/vivek/.cpan/build/POE-1.003-KwXVB1': Permission denied
find: `/home/vivek/.cpan/build/Curses-1.27-ZLo169': Permission denied

您可以将脚本错误重定向到名为 scripts.err 的日志文件:

./script.sh 2>scripts.err
/path/to/example.pl 2>scripts.err

您可以使用 » 运算符将标准错误附加到 error.log 文件的末尾:

command-name 2>>error.log
./script.sh 2>>error.log
/path/to/example.pl 2>>error.log

您可以使用以下语法将 stdout 和 stderr 都重定向到文件:

command-name &>filename
command-name >cmd.log 2>&1
command-name >/dev/null 2>&1

此语法通常用于 cron 作业:

@hourly /scripts/backup/nas.backup >/dev/null 2>&1
@hourly /scripts/backup/nas.backup &>/dev/null
上一页