linux重定向后面有空格吗(Linux中什么是重定向)
linux重定向后面有空格吗(Linux中什么是重定向)Hello用户的每一行输入会立即显示在屏幕上,直到使用组合键ctrl D提供给cat命令一个文件结束符。什么是输入的重定向?和标准输出类似,程序默认情况下接收输入的地方被称为标准输入(stdin)。通常来说,标准输入总是指向键盘。例如,如果使用不带任何参数的Cat命令,那么cat会停在那里,等待从标准输入(也就是键盘)获取数据。#cat
在Linux中什么是文件的重定向?重定向和管道是shell的一种高级特性,这种特性允许用户人为地改变程序获取输入和产生输出的位置。
什么是重定向?
重定向就是将数据传到其他地方。具体地说:将应该出现到屏幕上的数据,传送到其他设备,例如,文件或者打印机。
Linux 中的I/O重定向简单来说就是一个过程,这个过程捕捉一个文件或者命令、程序、脚本,甚至脚本中的代码块(code block)的输出,然后把捕捉到的输出,作为输入发送给另外一个文件、命令、程序或者脚本。I/O重定向中的文件标识符(File Descriptor)的概念,系统为每一个打开的文件指定一个文件标识符以便对文件进行跟踪,这有些和C语言编程里的文件句柄相似,文件标识符是一个数字,不同数字代表不同的含义,默认情况下,系统占用了3个,分别是0标准输入(stdin)、1标准输出(stdout)、2标准错误(stderr) 另外3~9是保留的标识符,可以把这些标识符指定成标准输入、输出或者错误作为临时连接。通常这样可以解决很多复杂的重定向请求。
什么是输入的重定向?
和标准输出类似,程序默认情况下接收输入的地方被称为标准输入(stdin)。通常来说,标准输入总是指向键盘。例如,如果使用不带任何参数的Cat命令,那么cat会停在那里,等待从标准输入(也就是键盘)获取数据。
#cat
用户的每一行输入会立即显示在屏幕上,直到使用组合键ctrl D提供给cat命令一个文件结束符。
Hello
Bye
<ctrl D> //这里按下<Ctrl D>组合键
通过使用输入重定向符号“<”可以让程序从一个文件中获取输入。
#cat< cxw
Hello
Hi
How are you
上面这条命令将文件cxw作为输入传递给cat命令,cat读取cxw中的每一行,然后输出读到的内容。最后当cat遇到文件结束符时,就停止读取操作。整个过程同先前完全一致。
正如读者已经想到的,cat命令可以通过接受一个参数来显示文件内容,因此“cat<cxw”完全可以用cat cxw来替代。事实上,大部分命令都能够以参数的形式在命令行上指定输入档的文件名,因此输入重定向并不经常使用。
另一种输入重定向的例子被称为立即文档(here document),这种重定向方式使用操作符“<<”。立即文档明确告诉shell从键盘接受输入,并传递给程序。如:
#cat << eof
>Hello
>Bye
>EOF
Hello
Bye
Cat命令从键盘接受两行输入,并将其送往标准输出。立即文档指定了一个代表输入结束的分隔符(EOF),当shell遇到这个单词的时候,即认为输入结束,并把刚才的键盘输入一起传递给命令。所以这次cat命令会将用户的输入一块显示,而不是每收到一行就迫不及待地把它打印出来。
用户可以选择任意一个单词作为立即文档的分隔符,像EOF、END、eof等都是不错的选择,只要可以确保它不是正文的一部分。
那输入重定向和输出重定向结合在一起会是怎样的呢?
#cat <<END>hello
>Hello World!
>Bye
>END
这条命令首先让cat命令以立即文档的方式获取输入,然后再把cat的输出重定向到hello文件。查看hello文件,应该可以看到下面这些内容。
Hello World!
Bye
什么是输出重定向?
程序在默认情况下输出结果的地方被称为标准输出(stdout)。通常来说,标准输出总是指向显示器。例如下面的ls命令获取当前目录下的文件列表,并将其输出到标准输出,于是用户在屏幕上看到了这些文件名。
#ls
Bin cdrom etc initrd initrd img old lib32 lost dound mnt proc
输出重定向用于把程序的输出转移到另一个地方去。下面这条命令将ls的输出重定向到ls_out文件中。
#ls > ~/ls_out
这样,ls的输出就不会在显示器上显示出来,而是出现在用户主目录的ls_out文件中,每一行显示一个文件名。
#cat ~/ls_out
bin
boot
cdrom
……
如果ls out文件不_存在,那么输出重定向符号“>”会试图建立这个文件。如果ls_out文件已经存在了,那么“>”会删除文件中原有的内容,然后用新内容替代。
#uname -r > ls_out
#cat ls_out
2.6.24 -21-generic
可以看到,“>”并不会礼貌地在原来那堆文件名的后面添上版本信息,而是直接覆盖了。如果要保留原来文件中的内容,应该使用输出重定向符号“>>”。
#date > date_out //将date命令的输出重定向到date_out文件
#cat date_out //查看date_out文件的内容
2022年06月01日 星期三 8:00:00 CST
#uname -r >> data_out //将uname命令产生的版本信息追加到date_out文件的末尾
#cat date_out
2022年06月01日 星期三 8:00:00 CST 2.6.24 -21-generic