web-dev-qa-db-ja.com

-bash:lstat:コマンドが見つかりません

El Capitan v 10.11.6を実行しているMacbook Proを使用しています。私はシンボリックリンクについて学習しており、man lnページで次のことがわかりました。

シンボリックリンクのstat(2)は、リンク先のファイルを返します。リンクに関する情報を取得するには、lstat(2)を実行する必要があります。

テストとして、次のように、ファイルへのシンボリックリンクを作成しました(重要な場合は別のファイルシステムにあります)。

ln -s /Volumes/foobardir/foobarfile foobarlink

次に、lstat foobarlinkを実行してsymlinkファイル自体に関する情報を取得しましたが、次の出力が得られました。

-bash: lstat: command not found

コマンドwhich lstatは何も返しません。これは、ファイルパスにこの名前の実行可能ファイルがないことを確認します。

stat foobarlinkを実行することはできますが、返された統計がリンクされたファイルのものかシンボリックリンク自体のものかはわかりません。そのコマンドの出力には、今日の日付がタイムスタンプ形式で表示されますが、stat foobarfileを実行すると、数か月前の日付が表示されます。だから私はこれが私が探している出力だと思いますが、セカンドオピニオンが欲しいです。

ちなみに、which statを実行すると/usr/bin/statが返されます。名前にgrepが含まれるすべての実行可能ファイルの/usr/binディレクトリにあるstatは、次を返します。

  • db_stat
  • diffstat
  • httpdstat.d
  • jstat
  • jstatd
  • lockstat
  • lpstat
  • nfsstat
  • plockstat
  • snmpnetstat
  • snmpstatus
  • stat
  • uustat
  • vm_stat

上で述べたように、私の推測では、statlstatが返すと期待していた出力を返します。私の質問は:

  • man lstatlstatを有効なコマンドとして認識するのに、なぜlstatがシステムにインストールされていないのですか?
  • 付属していない実行可能ファイルの手動情報を含めるのはなぜですか?
  • brew search lstatは結果を返しません。 lstatをローカルマシンに何らかの方法でインストールすることは可能ですか、そうすることにはどんな利点もありますか?
6
Richie Thomas

BSDマニュアルのセクション1は、一般的なコマンド用です。セクション2はシステムコール、ieC言語でシステムをプログラミングする場合に行う可能性のある関数呼び出し、またはその派生物。

括弧内の数字は、マニュアルのどのセクションからのエントリかを示します。この場合、lstat(2)は、このページがコマンドラインで実行できるスタンドアロンバイナリではなく、システムコールに関する情報を提供することを示します。


man lstatと入力すると、lstatシステムコールのマニュアルページが表示されます。対照的にstatは、システムコールとスタンドアロンユーティリティのbothの名前です。 man statと入力すると、デフォルトでコマンドラインユーティリティのマニュアルページが表示されます。システムコールのマニュアルページを表示するには、マニュアルのどのセクションを検索するかを明示的にmanに指示する必要があります。

man 2 stat

https://developer.Apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man5/manpages.5.html は、BSDマニュアルのすべてのセクションをリストする(古い)リンクです。セクションはシステム上で同じになりますが、セクションを明示的にリストしているmanページがあることはわかりません。

14
user4556274