Linux 输入、输出、错误重定向

背景

执行完linux命令之后,希望将标准输出和错误输出分别重定向到不同的文件,否则在同一个文件的话,后期代码中不好处理,所以需要了解下知识背景。

文件文件描述符

系统中实际上有12个文件描述符,但是正如我们在上表中所看到的, 0、1、2是标准输入、输出和错误。可以任意使用文件描述符3到9。

标准输入是文件描述符0。它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。
标准输出是文件描述符1。它是命令的输出,缺省是屏幕,也可以是文件。
标准错误是文件描述符2。这是命令错误的输出,缺省是屏幕,同样也可以是文件。

输入重定向

主要用于改变命令的输入源,让输入不要来自键盘,而来自指定文件。基本用法:

命令 < 文件名

$ ls < ls.out

 
 
  • 1

输出重定向

主要用于改变命令的输出,让标准输出不要显示在屏幕上,而是写入到指定文件中。基本用法:
命令 > 文件名

$ ls > ls.out

 
 
  • 1

以上是对标准输出来讲的,至于标准错误输出的重定向,只需要换一种符号,将 > 改为 2> ,将 >> 改为 2>>。将标准输出和标准错误输出重定向到同一文件,则使用符号 &>。

错误重定向

为了重定向标准错误,可以指定文件描述符2。
grep命令没有找到该文件,缺省地向终端输出了一个错误信息。现在让我们把错误重定向到文件/dev/null中(实际就上是系统的垃圾箱):
$ grep “trident” missiles 2>/dev/null
这样所有的错误输出都输送到了/dev/null,不再出现在屏幕上。

合并标准输出和标准错误

在合并标准输出和标准错误的时候,切记shell是从左至右分析相应的命令的。下面给出一个例子:
$ cleanup >cleanup.out 2>&1
在上面的例子中,我们将cleanup 脚本的输出重定向到>cleanup.out文件中,而且其错误也被重定向到相同的文件中。
$ grep “standard”* > grep.out 2>&1
在上面的例子中,grep命令的标准输出和标准错误都被重定向到grep.out文件中。你在使出前面提到的“此处”文挡时,有可能需要把所有的输出都保存到一个文件中,这样万一出现了错误,就能够被记录下来。通过使用2 > & 1就可以做到这一点

& 表示等同于的意思,2>&1,表示2的输出重定向等同于1,即和1重定向的文件系统上的位置是一样的

规律

重定向的使用有如下规律:
1)标准输入0、输出1、错误2需要分别重定向,一个重定向只能改变它们中的一个。
2)标准输入0和标准输出1可以省略。(当其出现重定向符号左侧时)
3)文件描述符在重定向符号左侧时直接写即可,在右侧时前面加& 【类似于指针前要加*号,来区分这、两种情况】。
4)文件描述符与重定向符号之间不能有空格!

🌰

转自:Linux标准/错误输出重定向

标准输出

$ df -h >file
(base) pc@pc-System-Product-Name:/project/raw_fq$ cat file1
Filesystem      Size  Used Avail Use% Mounted on
udev             32G     0   32G   0% /dev
tmpfs           6.3G  2.4M  6.3G   1% /run
/dev/nvme0n1p2  228G   11G  207G   5% /
tmpfs            32G     0   32G   0% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs            32G     0   32G   0% /sys/fs/cgroup
/dev/loop0       13M   13M     0 100% /snap/gnome-characters/139
/dev/loop2      2.3M  2.3M     0 100% /snap/gnome-calculator/260
/dev/loop1       36M   36M     0 100% /snap/gtk-common-themes/1198
/dev/loop4      152M  152M     0 100% /snap/gnome-3-28-1804/36
/dev/loop3      141M  141M     0 100% /snap/gnome-3-26-1604/82
/dev/loop5      141M  141M     0 100% /snap/gnome-3-26-1604/74
/dev/loop6      3.8M  3.8M     0 100% /snap/gnome-system-monitor/57
/dev/loop7      4.2M  4.2M     0 100% /snap/gnome-calculator/406
/dev/loop8      1.0M  1.0M     0 100% /snap/gnome-logs/61
/dev/loop9       90M   90M     0 100% /snap/core/6673
/dev/loop10      15M   15M     0 100% /snap/gnome-logs/45
/dev/nvme0n1p1  511M  6.1M  505M   2% /boot/efi
/dev/loop11      35M   35M     0 100% /snap/gtk-common-themes/818
/dev/loop12      91M   91M     0 100% /snap/core/6350
/dev/loop13      15M   15M     0 100% /snap/gnome-characters/254
/dev/loop14      54M   54M     0 100% /snap/core18/941
/dev/loop15     3.8M  3.8M     0 100% /snap/gnome-system-monitor/77
/dev/sda1       7.3T  5.3T  1.6T  78% /data
/dev/sdb1       7.3T   93M  6.9T   1% /public
/dev/sdd1       7.3T  572M  6.9T   1% /home
/dev/sdc1       7.3T  173G  6.7T   3% /project
tmpfs           6.3G   16K  6.3G   1% /run/user/121
tmpfs           6.3G   36K  6.3G   1% /run/user/1000
/dev/loop16      90M   90M     0 100% /snap/core/6818
/dev/loop17      15M   15M     0 100% /snap/gnome-characters/258
/dev/loop18     3.8M  3.8M     0 100% /snap/gnome-system-monitor/81
/dev/loop19     152M  152M     0 100% /snap/gnome-3-28-1804/40
$ df -h > file1
$ diff file1 file
28c28
/dev/sdc1       7.3T  173G  6.7T   3% /project
/dev/sdc1       7.3T  163G  6.7T   3% /project

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

标准输出和错误输出分别放两个文件

$ ls /error test >right_file 2>wrong_file
$ cat right_file
test:
hangshu.tex
result.txt
text.txt
$ cat wrong_file
ls: cannot access '/error': No such file or directory

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

错误和正确的放一个文件

$ ls /error test >all.log 2>&1
$ cat all.log
ls: cannot access '/error': No such file or directory
test:
hangshu.tex
result.txt
text.txt

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

或者简单写为

ls /error test &>all2.log
$ cat all2.log
ls: cannot access '/error': No such file or directory
test:
hangshu.tex
result.txt
text.txt

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

参考的文档:
Linux标准/错误输出重定向

Linux命令行使用之命令行输入与输出
Linux标准输入、输出和错误和文件重定向 专题

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux输入输出重定向是指将命令的输入输出从默认的终端改为其他文件或设备。输入重定向使用符号“<”,将文件作为命令的输入输出重定向使用符号“>”或“>>”,将命令的输出写入文件或设备。例如,将一个文件作为命令的输入:cat < file.txt,将命令的输出写入文件:ls > file.txt,将命令的输出追加到文件末尾:echo "hello" >> file.txt。这些重定向操作可以方便地处理大量数据或自动化脚本的输出。 ### 回答2: 在Linux系统下,输入输出可以通过重定向来操作。输入重定向是将输入从键盘(默认的标准输入)改为来自文件或命令。输出重定向是将输出从终端(默认的标准输出)改为写入文件或向命令管道传送。 输入重定向可以使用符号<来进行操作。比如,如果想从文本文件中读取输入,可以使用命令cat < file.txt,其中<符号告诉Linux将文本文件作为标准输入。如果要将多个文件输入到同一个命令中,可以使用符号<来分隔文件,例如,cat < file1.txt < file2.txt。 输出重定向可以使用符号>或>>来进行操作,>符号会将输出写入到一个新文件中,如果该文件不存在,则创建一个新文件。例如,echo "hello world" > file.txt会将字符串输出到file.txt文件中。>>符号则会将输出追加到现有文件末尾。如果文件不存在,则创建一个新文件,例如,echo "hello world" >> file.txt会将字符串输出到file.txt文件末尾。 除了>和>>符号,还有一些其他的输出重定向符号,包括>&、<&和&>。&>符号标准输出标准错误输出都写入到同一个文件中。<&符号重定向标准输入和命令之间的通信。>&符号标准输出重定向错误输出,将错误输出重定向标准输出。 总之,输入输出重定向Linux系统中非常重要的概念,可以帮助用户更高效地处理输入输出。熟练地使用输入输出重定向符号可以极大地提高代码的可读性和效率。 ### 回答3: Linux输入输出重定向是一种非常重要的命令行技巧,主要用于在命令行上通过不同的方式重定向程序的输入输出输入重定向指的是将已有的文件内容作为命令或程序的输入,让其执行相应的操作。通常情况下,我们可以使用<符号来进行输入重定向,比如: ``` $ cat <file.txt ``` 这条命令将会把file.txt这个文件中的内容输出到命令行上。 输出重定向则是将命令或程序的输出结果输出到指定的文件中,而不是输出到屏幕上。在Linux系统中,我们可以使用>符号来进行输出重定向,比如: ``` $ ls -l > file.txt ``` 这条命令将会把ls -l命令的执行结果输出到file.txt这个文件中。 除了>符号外,我们还可以使用>>符号来进行追加输出重定向,比如: ``` $ echo "hello" >> file.txt ``` 这条命令将会把字符串"hello"附加到file.txt这个文件的末尾处。 除了上述的输入输出重定向方式外,还有一种被称为管道符的方式,它的作用是把一个命令或程序的输出结果作为另一个命令或程序的输入,来处理数据。比如: ``` $ cat file.txt | grep "hello" ``` 这条命令将会输出file.txt文件中所有包含"hello"这个关键字的行。 总的来说,输入输出重定向Linux系统中一种非常重要的命令行操作技巧,它可以帮我们更加高效和方便地处理大量的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值