如何在Linux/Unix下将终端输出保存到文件
时间:2020-01-09 10:39:40 来源:igfitidea点击:
在Linux,macOS,* BSD或类似Unix的操作系统上使用BASH/KSH/CSH/TCSH时,如何将终端输出保存到文件中?
是的,我们可以通过将命令输出重定向到文件来保存命令输出。
输入,输出和错误的标准流如下(也称为文件描述符):
- stdin标准输入(数值0)键盘
- stdout标准输出(数值1)屏幕/显示
- stderr标准错误(数值2)屏幕/显示
所以1代表stdout,2代表stderr。
根据这些信息,我们可以:
- 将stdout/stderr重定向到文件
- 将stdout重定向到stderr或将stderr重定向到stdout
- 将stderr和stdout重定向到文件
- 我们也可以将stderr和stdout重定向到stdout
- 最后,您可以将stderr和stdout重定向到stderr
如何将终端输出保存到文件
默认情况下,该命令将输出发送到stdout,并且可以使用以下语法将其重定向到文件:
command > filename.txt
例如,将date命令输出保存到名为mydate.txt的文件中,运行:
date > mydate.txt
要查看包含的文件,请使用cat命令:
cat mydate.txt
向我们的命令提供数据(输入重定向)
我们可以使用以下简单语法从文件中读取输入,并且该文件必须已经存在:
command < input.txt cat < /etc/passwd wc -l < /etc/passwd
将输出追加到文件
如果filename.txt/mydate.txt(文件)已经存在,它将被覆盖。
要追加输出,请运行:
command >> filename.txt echo "------------------" >> mydate.txt ls -l /etc/resolv.conf >> mydate.txt
验证一下:
cat mydate.txt
请注意,除非使用set命令设置bash noclobber选项,否则将覆盖mydate.txt之类的文件。
例如,关闭noclobber选项:
set -o noclobber echo "some data" > mydata.txt
输出示例:
bash: mydata.txt: cannot overwrite existing file
我们可以如下所示打开noclobber选项:
set +o noclobber echo "foo bar" > mydata.txt
如何将stderr重定向到文件
语法如下:
command &> file.txt command &>> file.txt
或者
command 2> file.txt command 2>> file.txt
以上与bash和其他现代shell一起使用。
对于POSIX版本,请尝试:
command >output.txt 2>&1 command >>output.txt 2>&1
在此示例中,将find命令错误发送到名为err.log的文件:
find / -iname "*.conf" &>err.log ## 或者 find / -iname "*.conf" 2>err.log ## POSIX version ## find . -iname "*.conf" >err.log 2>&1
验证一下:
cat err.log
输出示例:
find: ?./snap.chromium?: Permission denied find: ?./systemd-private-timesyncd.service-KOh0jg?: Permission denied find: ?./snap.demo?: Permission denied find: ?./snap.lxd?: Permission denied find: ?./.vbox-root-ipc?: Permission denied
如何抑制错误消息
使用以下语法:
command 2>& find . -iname "*.txt" 2>&
我们还可以将错误消息(stderr)重定向到标准输出(stdout),运行:
command 2>&1 echo "foo" 2>&1 kill $target_pid 2>&1 > /dev/null
如何将stdout和stderr都重定向到文件
语法如下,将stdout和stderr都重定向到文件:
command 2>&1 | tee output.txt
例如:
find . -iname "*.txt" 2>&1 | tee cmd.log cat cmd.log
要将文本追加到文件末尾,请使用以下语法:
find . -iname "*.conf" 2>&1 | tee -a cmd.log cat cmd.log
如何合并重定向
以下命令示例仅将输入和输出重定向合并在一起。
检查文件resume.txt中是否存在拼写错误,并将输出重定向到名为err.log的错误日志文件:
spell < resume.txt > error.log
如何将屏幕输出(stdout)和错误(stderr)重定向到/dev/null
尝试以下语法
command > /dev/null 2>&1 /path/to/script.py > /dev/null 2>&1
将标准错误和标准输出消息都重定向到日志文件
command > log.txt 2>&1 /path/to/my-appname.py > my-appname.log 2>&1