我使用的是运行 El Capitan v 10.11.6 的 Macbook Pro。我正在学习符号链接,在man ln
页面中,我发现了以下内容:
符号链接上的 stat(2) 将返回链接到的文件;必须执行 lstat(2) 才能获取有关链接的信息。
作为测试,我创建了一个到文件的符号链接(在另一个文件系统中,如果重要的话),如下所示:
ln -s /Volumes/foobardir/foobarfile foobarlink
然后我跑去lstat foobarlink
获取有关符号链接文件本身的信息,但我得到了以下输出:
-bash: lstat: command not found
该命令which lstat
不返回任何内容,这确认我的文件路径中不存在具有该名称的可执行文件。
我能够执行stat foobarlink
,但我不确定返回的统计信息是针对链接文件还是符号链接本身。我确实在该命令的输出中看到了时间戳形式的今天日期,而运行时stat foobarfile
显示了几个月前的日期。所以我猜这就是我正在寻找的输出,但我想要第二个意见。
顺便说一句,跑步which stat
返回/usr/bin/stat
。名称中包含所有可执行文件的目录grep
中的 A返回以下内容:/usr/bin
stat
- 数据库统计
- 差异统计
- httpdstat.d
- 统计数据
- 统计数据
- 锁状态
- 参数统计
- NFS统计
- 时钟统计
- SNMP网络统计
- SNMP状态
- 统计数据
- 乌斯塔特
- 虚拟机状态
正如我上面所说,我的猜测是返回我期望返回stat
的输出。lstat
我的问题是:
- 当被识别为有效命令时,为什么
lstat
显然没有安装在我的系统中?man lstat
lstat
- 为什么要包含未附带的可执行文件的手册信息?
brew search lstat
没有返回结果。是否可以以lstat
某种方式安装到我的本地计算机上,这样做有什么好处吗?
答案1
BSD 手册的第 1 部分是通用命令。第 2 部分用于系统调用,IEC
,如果使用该语言或其派生语言之一为系统进行编程,则可能会进行函数调用。
括号中的数字表示该条目来自手册的哪个部分。在本例中,lstat(2)
表示此页面提供有关系统调用的信息,而不是有关可在命令行执行的独立二进制文件的信息。
如果您输入man lstat
,您将看到系统调用的手册页lstat
。 stat
相比之下,是两个都系统调用和独立实用程序。如果您键入man stat
,默认情况下您将获得命令行实用程序的手册页。要查看系统调用手册页,您需要明确告知man
要搜索手册的哪一部分:
man 2 stat
https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man5/manpages.5.html是一个(过时的)链接,列出了 BSD 手册的所有部分。这些部分在您的系统上是相同的,但我找不到明确列出这些部分的手册页。