“-”这个文件是什么,为什么只有 stat 才能看到它?

“-”这个文件是什么,为什么只有 stat 才能看到它?

我正在使用 Ubuntu 12。当我在终端中输入时stat -,我得到以下输出:

  File: ‘-’
  Size: 0           Blocks: 0          IO Block: 1024   character special file
Device: ch/12d  Inode: 3           Links: 1     Device type: 88,0
Access: (0620/crw--w----)  Uid: ( 1000/   anotherguy)   Gid: (    5/     tty)
Access: 2014-12-19 18:04:40.454800919 -0600
Modify: 2014-12-19 18:04:40.454800919 -0600
Change: 2014-12-19 16:55:48.454800919 -0600
 Birth: -

用该函数看不到这样的文件ls,而且无论我在哪个目录中,stat仍然可以看到这个“文件”。但是,用 替换时,-结果./-却是“没有这样的文件或目录”。

这种奇怪的行为类似于cd函数使用“-”选项,本质上将该选项视为参数,使其成为上一个目录。

答案1

-不是文件名——不同的程序会以不同的方式处理它。例如,cd 解释-为 cd $OLDPWD,而许多其他程序则将-其解释为/dev/stdout(此处所选答案提供的信息略多)。

如果您尝试,stat -f -您将收到以下错误:

stat: using ‘-’ to denote standard input does not work in file system mode

那么,这是什么stat -?我在多个 Linux 发行版以及 Mac OS X 上对其进行了测试。stat -相当于stat $(tty),并且似乎是对与您的终端会话关联的字符设备文件的引用。

答案2

虽然它不在其手册页中,但使用文件名表示标准输入(或有时是标准输出)stat的约定,因此您会发现以下两个命令是等效的:-

stat ExistingFile
stat - < ExistingFile

相关内容