私のDebianサーバーで奇妙な動作が発生しました。
コンテキスト:Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u5 (2015-10-09) x86_64 GNU/Linux
ユーザー:root
コマンドls
、ls -a
または完全に実行されls -1
ますdir
。しかし、これらのコマンドはls -l
、dir -l
/
これら2つのコマンドは、端末をディレクトリにのみ停止させます。
答え1
ls
/...ls -a
現在のディレクトリの内容のみを読み取るだけで、ファイルには何もしません。
ls -l
または、リストされているファイル自体からメタデータ情報(権限、タイプ、所有権、変更時間...)をls -F
取得ls --color
する必要があります。したがって、getdents()
ディレクトリの内容を読み取るシステムコールに加えて、作業を実行するlstat()
必要があります。readlink()
stat()
ls
-F
--color
または+
その他@
オプションの代替アクセス方式フラグ場合によっては、権限を取得した後にいくつかの追加のシステムコールを実行する必要があります(たとえば、getxattr()
LinuxでACLを検索するなど)。
これを使用するときは、ls -l
ユーザーデータベースを照会し、uidとgidをユーザー名とグループ名に変換する必要があります。
したがって、簡単にはファイル(現在の作業ディレクトリ)を開いてその内容を読むだけですが、//...ls
はるかに大きい規模では失敗することが簡単にわかります。-l
-F
--color
lstat()
ファイルシステムのマウントポイントでファイルが利用できない場合は、失敗または中断される可能性があります。stat()
ターゲットが利用できないファイルシステムにある場合、シンボリックリンクは失敗する可能性があります。- ユーザーデータベースへのクエリが失敗または中断される可能性があります(たとえば、ネットワーク(LDAP / NIS +)ユーザーデータベースを使用する展開の場合)。
答え2
私のディレクトリのフォルダの1つは、シャットダウンされ/
た別のコンピュータからマウントされたボリュームフォルダです。マウントされたディレクトリにアクセスできません。