cat sth 与 cat < sth 的区别

App*_*les 4 linux command-line cat

我意识到这一点cat sth并且cat < sth两者碰巧都给出了相同的输出。他们是一样的吗?

sou*_*edi 6

它们并不完全相同。在重要的情况下,重定向方法通常会给出更烦人和模糊的结果(当然,这可能是您想要的)。

$ cat < /proc/self/maps
$ cat /proc/self/maps
55c61257e000-55c61258a000 r-xp 00000000 fd:00 1180143                    /usr/bin/cat
...
Run Code Online (Sandbox Code Playgroud)

或者试试grep,搜索程序

$ grep "grep" /proc/self/exe
Binary file /proc/self/exe matches
$ grep "grep" < /proc/self/exe
$
Run Code Online (Sandbox Code Playgroud)

有点作弊,但在使用sudo, 运行具有root访问权限的命令时,您最有可能遇到这种情况:

$ sudo cat < /etc/shadow
bash: /etc/shadow: Permission denied
$ sudo cat /etc/shadow
root:!::0:99999:7:::
....
Run Code Online (Sandbox Code Playgroud)

  • 您的 sudo 示例很好地说明了这一点;值得一提的是,第二种方法有效,因为它是超级用户,如`sudo cat`,打开文件,而在第一种情况下,尝试打开文件但失败的是非超级用户的shell . (4认同)

UTF*_*F-8 5

cat的工作是骗子enate一切它获取,然后又打印出来stdout上经常被用来打印出一个文件的内容(当然这仅仅是连接所有的内容,赋予它的一个文件然后将其写入标准输出)。stdout(标准输出)只是程序通常写入的输出数据。(有些程序(如dd)将其输出数据写入标准输出,除非参数另有说明,并且还有标准错误通道 stderr,程序在发生错误时写入该通道。)

cat 可以获取通过 stdin(标准输入)提供给它的数据或作为参数传递给它的文件中的数据。

您正在做的cat sthcat使用单个参数进行调用,sth告诉cat将文件中的所有内容写入sth标准输出。您可以添加更多文件名,并看到文件的内容被连接起来,然后写入标准输出。

cat < sth在调用之前将标准输入更改为cat文件的内容。然后只需从其标准输入读取所有内容并将其写入标准输出。sthcatcat

在这两种情况下,cat将文件内容写入sth标准输出。您可以在此处阅读有关此内容的更多信息,也可以在man cat终端中输入内容以阅读cat描述其功能的手册页。

请注意, 的内容sth由您登录的用户读取(您在终端中登录的用户不一定是您在图形会话中登录的用户(如果有)),而程序可以用通过sudo在它们之前写入然后使用执行它们的用户的权限读取不同的权限。这可能会导致不同的结果,因为您登录的用户和您切换到的用户sudo(不一定root,您可以另行指定)可能对您尝试读取的文件具有不同的访问权限。