输入输出重定向

在Linux终端下运行命令时有很多方法可以重定向信息。在终端中有一些重定向约定,可以让信息的重定向变得非常简单。

重定向约定有以下几项:

  • Output
  • Append
  • Input
  • Error
  • Unnamed Pipe
  • Tee
  • Named Pipe

1、Output

输出管道用来将标准输出输出到屏幕以外的其他地方,通常是输出到屏幕上,当然我们也可以把信息输出到文件中。

输出管道是”>“符号。

例如,如果我们想为主文件夹创建一个文件列表,并将列表放入一个名为“HOME_folder.txt”的文件中,命令如下:

touch Home_Folder.txt
chmod 777 Home_Folder.txt 
ls  > Home_Folder.txt

ps:chmod为更改文件权限命令,在《文件权限》这篇博客中有详细讲解。

这时打开HOME_folder.txt文件即可看到ls的信息全部打印到该文件中了。或者我们可以运行cat命令将文件内容打印到屏幕上:

cat Home_Folder.txt

如果我们只想在主文件下创建一个名为“empty.txt”的空文,则可以运行以下命令:

> empty.txt

因为没有输入,所以它的内容为空。如果该文件已经存在,则它将被删除并重新生成一个空文件。

输出管道不仅能创建一个文件,它还可以删除并创建一个文件。如果你对文件HOME_folder.txt执行了另一个输出,则这个文件原来的内容将被删除,并使用新的输出重新创建文件。

命令生成的任何文本输出都可以保存到文件中。

2、Append

如果不想删除文件中的现有信息,只想向文件中追加信息,则可以使用“>>”符号。

我们可以使用以下命令向文件HOME_folder.txt中再添加一个ls信息:

ls  >> Home_Folder.txt

这样的话两个信息文本之间没有空行,如果想要添加空行,我们可以执行以下命令:

echo ' ' >> Home_Folder.txt

3、Input

和输出管道相反,输入管道是将文件的内容作为输入,并且符号为"<"。

如果我们使用文件HOME_folder.txt并统计该文件的行数,我们可以使用以下命令:

wc -l < Listing.txt

当然,在这里也可以不需要重定向"<",可以直接运行"wc -l"命令。不过他确实显示了这个命令是如何工作的。

下面我们再举一个例子,用输入和输出定向器复制一个文件。如我们复制Listing.txt到Listing1.txt,命令如下:

cat < Listing.txt > Listing1.txt

文件Listing.txt的内容被读入,而不是显示到屏幕上,标准输出到文件Listing1.txt中。

由此可见,多个管道可以同时使用,并且可以非常简单的实现很多功能。

3、Error

终端中的命令有时可能导致错误。假设有一个图形用户界面(GUI)可执行程序不能正常工作,我们可能没有在屏幕上看到错误,但这并不意味着它们没有发生。假设程序是主文件夹并调用App1。打开终端并确保当前位置在主文件夹中。输入以下命令:

./App1 2> App1-error.txt

数字“2”表示标准错误(stderr)输出。“2”将使错误输出与标准输出区别开,并且只捕获错误输出。

现在可以打开App1-error.txt文件,并复制错误消息,在互联网上搜索可能的解决方案。

4、Unnamed Pipe

未命名的管道由竖条(|)表示。基本上,这个管道的作用是获取第一个命令的输出,并在第二个命令中使用它。例如,我们想要计算桌面图标的数量。我可以执行以下命令:

ls ~/Desktop | wc -l

桌面文件夹中的文件列表通过Word Count (wc)程序发送(“-l”表示计算行数)。桌面上的每一项都是“ls”命令的单行输出。该命令有一个问题在于,它不显示“垃圾站”或挂载驱动器的图标,因为这些图标来自其他地方,没有保存在桌面文件夹中。

5、Tee

有时,我们希望将信息放在文件中或在其他地方使用,但仍然要显示在屏幕上。

使用上面列出主文件夹中的文件的例子,我们还可以用命令将输出显示到屏幕上:

ls ~ | tee ~/Home-Folder.txt

我们可以通过“tee”输出到多个文件。例如,我们可以用以下命令将相同的命令输出到文件File1、File2和File3:

ls ~ | tee File1 File2 File3

可以根据需要列出更多的文件。

6、Named Pipe

命名管道与我们之前看到的不同。命名管道通常称为进程间通信(IPC),命名管道允许我们创建具有特定名称的管道。

首先,让我们创建一个管道。命名管道可以是任何有效的名称。我们将管道命名为“Linux”。的命令是:

mkfifo Linux

创建管道的文件夹将出现在其中。您可以稍后删除它,或者留着以供使用。现在管道已经创建成功,我们来使用它。在终端下输入以下命令:

ls > Linux

光标应该移动到下一行,停止时不提示输入新命令。不要关闭终端,而是打开一个新的终端机。一旦新终端打开,输入以下命令:

cat < Linux

我们可以看到在第二个终端中显示的第一个终端创建的文件列表。现在第一个终端中的提示符应该显示了。可以创建多个命名管道并跨多个终端,从命名管道获取数据后,它是空的,但仍然存在。
要删除命名管道,可以运行以下命令;

rm Linux

经过这篇博客,我们应该对Linux的重定向和管道有了一定的了解,在以后会经常用到它们。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值