bala@hp:~$ echo "Hello World" > stdout
bala@hp:~$ cat stdout
Hello World
bala@hp:~$ echo "Hello World" > /dev/stdout
Hello World
请澄清stdout
和/dev/stdout
之间的区别
注:
bala@hp:~$ file stdout
stdout: ASCII text
bala@hp:~$ file /dev/stdout
/dev/stdout: symbolic link to `/proc/self/fd/1'
请帮助了解其中的区别。
3条答案
按热度按时间rkkpypqq1#
就你而言
stdout
是一个普通文件,创建于运行命令的同一目录中。因此,当您将
echo
的输出重定向到stdout
时,它将写入 file。您需要执行cat
(例如,您在这里执行了此操作)才能在此处 * 在屏幕上 * 看到内容。/dev/stdout
是一个device file,它是到/proc/self/fd/1
的链接,这意味着它引用的是当前进程持有的文件描述符1。因此,当您将
echo
的输出重定向到/dev/stdout
时,它会直接发送到标准输出(屏幕)。camsedfj2#
stdout
本身只是当前目录中的一个文件,与finances.txt
没有什么不同,它与进程的标准输出无关,只是将标准输出重定向到它。另一方面,
/dev/stdout
是指向procfs
文件系统上的特殊文件的链接,它表示使用it1的进程的文件描述符1。因此,它与过程标准输出有着非常真实的联系。
1
procfs
文件系统保存了关于系统及其所有进程的各种奇妙信息(假设一个进程有权访问这些信息,对于/proc/self
,它应该有权访问这些信息)。s3fp2yjn3#
一个是普通文件,与其他普通文件没有区别,例如
~/foobar.txt
。另一个是指向特殊虚拟文件的符号链接(类似于可以使用
ln -s
创建的链接),该虚拟文件表示当前进程中的文件描述符1。