标准输入和输出
几乎所有的命令都将输出显示到屏幕上,或者从键盘上获取输入,但是在Linux中,可以将输出发送到文件中,或者从文件中读取输入。每个shell命令都有自己的输入和输出。在执行命令之前,可以使用shell的特殊符号重定向命令的输入和输出。
例如,将date命令的输出发送到文件而不是屏幕。更改输入或输出的默认路径称为重定向。
在Linux中,一切都是文件。
你的硬件也是一个文件:
0 -输入-键盘(stdin)
1 -输出-屏幕(标准输出)
2 -错误-屏幕(stderr)
以上三个数字是标准的POSIX数字,也称为文件描述符(FD)。每个Linux命令至少打开一个上面的流,以便与用户或其他系统程序进行对话。
标准文件 | 描述符数字 | 含义 | 示例 |
---|---|---|---|
stdin | 0 | 从文件中读取输入(默认是从键盘) | |
stdout | 1 | 将数据发送到一个文件(默认是screen)。 | |
stderr | 2 | 将所有错误消息发送到一个文件(默认是screen)。 |
Linux标准输入 stdin
- 标准输入是默认的输入方法,所有命令都使用它来读取输入。
- 用0表示。
- 也被称为stdin。
- 默认的标准输入是键盘。
<
是输入重定向符号,语法为:command < filename
例如,你可以运行下面的cat命令来在屏幕上显示/etc/passwd的内容:
cat < /etc/passwd
对/etc/resolv.conf文件进行排序:
sort < /etc/resolv.conf
Linux标准输出 stdout
一个命令使用标准输出来写(显示)它的输出。
默认是屏幕。
用1表示。
也被称为stdout。
默认的标准输出是屏幕。>
为输出重定向符号,语法为: command > output.file.name
例如,ls命令默认将输出写到屏幕上:
ls
但是,我们可以将输出保存到output.txt文件中:
如果/tmp/output.txt文件不存在,则会创建该文件。如果文件/tmp/output.txt存在,则会被覆盖。
ls > / tmp / output.txt
也可以将脚本输出保存到文件中:
./script.sh > myoutput cat myoutput
标准输出的重定向
要重定向输出,只简单使用以下语法:
command > /path/to/file /path/to/script.sh > output.txt
例如,将date命令的输出发送到now.txt文件中:
date > now.txt
你也可以用 >操作符来打印文件:
cat file.txt > /dev/lp0
或者
sudo bash -c "cat file.txt > /dev/lp0"
附加到重定向的输出中
可以使用 >>操作符将输出附加到相同的文件中
date >> now.txt cat now.txt
也可以使用这样的语法
echo "今天是 $(date)" 1>>/tmp/now.txt
Linux标准错误 stderr
标准错误是默认的错误输出设备,用于写入所有系统错误消息。
它用数字2表示。
也被称为stderr。
默认的标准错误设备是显示器。2>
为输入重定向符号,语法为: command 2> errors.txt
例如,将find命令错误发送到fileerrors.txt文件。
find / -iname "*.conf" 2>fileerrors.txt cat fileerrors.txt
标准错误的重定向
将标准错误重定向到文件error.log
command-name 2>error.log
在/home目录中查找所有的.profile文件,并将错误记录到/tmp/error文件中
find /home -name .profile 2>/tmp/error
重定向脚本错误
将脚本错误重定向到日志文件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
cron计划任务中的 >/dev/null 2>&1是什么意思
将标准输出和标准错误都重定向到 /de/null 。 即丢弃。