App*_*les 4 linux command-line cat
我意识到这一点cat sth并且cat < sth两者碰巧都给出了相同的输出。他们是一样的吗?
它们并不完全相同。在重要的情况下,重定向方法通常会给出更烦人和模糊的结果(当然,这可能是您想要的)。
$ 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)
cat的工作是骗子猫enate一切它获取,然后又打印出来stdout上经常被用来打印出一个文件的内容(当然这仅仅是连接所有的内容,赋予它的一个文件然后将其写入标准输出)。stdout(标准输出)只是程序通常写入的输出数据。(有些程序(如dd)将其输出数据写入标准输出,除非参数另有说明,并且还有标准错误通道 stderr,程序在发生错误时写入该通道。)
cat 可以获取通过 stdin(标准输入)提供给它的数据或作为参数传递给它的文件中的数据。
您正在做的cat sth是cat使用单个参数进行调用,sth告诉cat将文件中的所有内容写入sth标准输出。您可以添加更多文件名,并看到文件的内容被连接起来,然后写入标准输出。
cat < sth在调用之前将标准输入更改为cat文件的内容。然后只需从其标准输入读取所有内容并将其写入标准输出。sthcatcat
在这两种情况下,cat将文件内容写入sth标准输出。您可以在此处阅读有关此内容的更多信息,也可以在man cat终端中输入内容以阅读cat描述其功能的手册页。
请注意, 的内容sth由您登录的用户读取(您在终端中登录的用户不一定是您在图形会话中登录的用户(如果有)),而程序可以用通过sudo在它们之前写入然后使用执行它们的用户的权限读取不同的权限。这可能会导致不同的结果,因为您登录的用户和您切换到的用户sudo(不一定root,您可以另行指定)可能对您尝试读取的文件具有不同的访问权限。