这是我在一次测试中发现的一道题:
从您的主目录运行 tree。
解释并演示它的功能。
使用输出重定向来执行此操作。
我不明白输出重定向部分。你能给我解释一下吗?
答案1
树:tree
以树状格式列出目录内容。这是一个非常简洁实用的程序,您可以在命令行中使用它来查看文件系统的结构。
输出重定向意味着将命令输出存储在其他地方,而不是简单地打印在终端上。如果你想将tree
命令输出存储在文件中,那么使用命令
tree > test
这会将输出重定向到此文件。此命令将创建一个文件test
,如果该文件已经存在,那么它将用tree
命令输出替换其内容。如果你不想替换而只想附加,那么使用命令
tree >> test
这会将tree
命令的输出附加到文件test
。您可以提供要存储输出的文件的完整路径。
答案2
可能在该上下文中输出重定向=将标准输出 ( stdout
) 重定向到常规文件。
tree >tree_output.txt
但是,输出重定向通常意味着将默认输出流(标准输出(stdout
)和标准错误(stderr
),通常都指向终端)之一重定向到可以被视为文件的任何东西(常规文件,stderr
ifstdout
是所讨论的流,stdout
ifstderr
是所讨论的流,管道,命名管道(FIFO),块设备,字符设备...),并且它不仅限于stdout
像示例中那样将标准输出( )重定向到常规文件。
因此有很多可能的输出重定向;
为了简洁起见,假设所讨论的输出是标准输出(stdout
),这些是最常见的重定向:
echo foo >file
:stdout
重定向到常规文件;echo foo >&2
:stdout
被重定向到stderr
;echo foo | cat
:stdout
重定向到管道;mkfifo fifo && echo foo >fifo
:stdout
重定向到命名管道(FIFO);echo foo >/dev/sdX
:stdout
重定向到块设备(不要这样做——它只会弄乱相关块设备的分区表(英文):
更深奥的重定向:
echo foo >/dev/tty
:stdout
重定向到一个字符设备,这个设备恰好是当前的伪终端;- 点击Ctrl++ 、登录、点击++ 、点击++ 、运行Alt和点击++ ;被重定向到字符设备,而这恰好是第一个伪终端;F1CtrlAltF7CtrlAltT
echo foo>/dev/tty1
CtrlAltF1stdout
stdout
因此,输出重定向通常意味着将默认输出流(标准输出( )和标准错误(stderr
),通常都指向终端)之一重定向到可以被视为文件的任何内容;
为了tree
使用输出重定向运行(并且实际在终端上显示某些内容),有多种方法:
tree >tree_output.txt && cat tree_output.txt
:运行tree
重定向stdout
到常规文件;tree >&2
: 运行tree
重定向stdout
到stderr
;tree | cat
:运行tree
重定向stdout
到管道;mkfifo fifo && tree >fifo
:运行tree
重定向stdout
到命名管道;tree >/dev/tty
:运行tree
重定向stdout
到字符设备(当前伪终端);- 点击Ctrl++ 、登录、点击++ 、点击++ 、运行和点击Alt++ :运行重定向到字符设备(第一个伪终端);F1CtrlAltF7CtrlAltT
echo foo>/dev/tty1
CtrlAltF1tree >/dev/tty1
tree
stdout