開いているファイル記述子を表示するが、lsofコマンドを使用しない方法


48

こんにちは、私はここでlsofは現在開いているファイル記述子の数を取得する正確な方法ではないことを読みました。彼は代わりにこのコマンドを使用することをお勧めしました

 cat /proc/sys/fs/file-nr

このコマンドはFDの数を表示しますが、上記のコマンドでカウントしたオープンファイル記述子のリストをどのように表示しますか?


4
あなたはおそらくあなたのulimitを超えているかどうかを知りたいですか?これについては、linuxintro.org / wiki / Is_my_ulimit_exceededでブログを書きました。最も重要なことは、ulimitはプロセスごとの制限であり、/ proc / PID / limitsの下にあり、lsofの代わりにls / proc / PID / fdを使用してプロセスのファイル記述子をリストすることです。
トールステンスターク

回答:


60

lsof | wc -lファイル記述子をカウントしない2つの理由があります。1つは、ロードされた動的にリンクされたライブラリや現在の作業ディレクトリなど、開いていないファイルを一覧表示することです。それらを除外する必要があります。もう1つは、lsof実行に時間がかかるため、実行中に開いたり閉じたりしたファイルを見逃す可能性があることです。したがって、リストされている開いているファイルの数は概算です。を見ると/proc/sys/fs/file-nr、特定の時点での正確な値がわかります。

cat /proc/sys/fs/file-nr主にリソースの枯渇をチェックするために正確な数値が必要な場合にのみ役立ちます。開いているファイルを一覧表示する場合は、を呼び出すlsofか、/proc/*/fd手動でトロールするなどの同等の方法を使用する必要があります。


1
良い説明をしてくれてありがとう、Gilles。ls / proc / * / fdを試してみたところ、その時点で開いていたすべてのfdが見つかりました。いくつかの色分けで出力を生成するので、マニュアルを見るだけです。
-dimas

@dimas /proc/*/fdディレクトリには、開いているファイルへのシンボリックリンクが含まれています。目視検査には、を使用しますls -l。自動処理の場合readlink、リンクターゲットの抽出に使用します。
ジル「SO-悪であるのをやめる」

ls -lを使用するだけですが、readlinkを試してみます。kernel.org/doc/man-pages/online/pages/man5/proc.5.htmlで指定されている他の/ proc / PID / mapsおよびその他のオプションを試しました。追加情報をありがとうございます。
-dimas

1
/ proc / sys / fs / file-nrは3872(および他の2つの数値)を提供します。ulimit -nで1024が表示された場合、これはどのように開いたファイルの数になりますか?
トールステンスターク

1
@ThorstenStaerk setrlimitulimitシェルコマンドの基になるシステムコール)のすべての設定はプロセスごとです。それらは、呼び出しを行うプロセス(および間接的に、後で分岐するプロセス)にのみ影響します。
ジル「SO-悪であるのをやめる」

25

プロセス情報は、システムによって/ procの下のディレクトリに動的に保持されます。たとえば、PID 1234のプロセスには、/ proc / 1234というディレクトリがあります。

そこにはかなりの情報がありますが、今は/ proc / 1234 / fdサブディレクトリに興味があります。

注:所有していないプロセスやSetUIDプロセスのファイルを表示または開くには、root権限が必要です。

例:

root@johan-HP-ProBook-6560b-LG654EA-ACQ:/proc# ls -l 2443/fd
total 0
lr-x------ 1 johan johan 64 Feb 27 10:26 0 -> pipe:[13637]
l-wx------ 1 johan johan 64 Feb 27 10:26 1 -> /home/johan/.xsession-errors
lrwx------ 1 johan johan 64 Feb 27 10:26 10 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 11 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 12 -> socket:[39495]
lrwx------ 1 johan johan 64 Feb 27 10:26 13 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 14 -> anon_inode:inotify
lrwx------ 1 johan johan 64 Feb 27 10:26 15 -> anon_inode:[eventfd]
l-wx------ 1 johan johan 64 Feb 27 10:26 16 -> pipe:[37885]
lr-x------ 1 johan johan 64 Feb 27 10:26 17 -> pipe:[37886]
l-wx------ 1 johan johan 64 Feb 27 10:26 2 -> /home/johan/.xsession-errors
l-wx------ 1 johan johan 64 Feb 27 10:26 21 -> pipe:[167984]
lr-x------ 1 johan johan 64 Feb 27 10:26 22 -> pipe:[167985]
l-wx------ 1 johan johan 64 Feb 27 10:26 23 -> pipe:[170009]
lr-x------ 1 johan johan 64 Feb 27 10:26 24 -> pipe:[170010]
lrwx------ 1 johan johan 64 Feb 27 10:26 3 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 4 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 5 -> socket:[14721]
l-wx------ 1 johan johan 64 Feb 27 10:26 6 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 7 -> socket:[14730]
lrwx------ 1 johan johan 64 Feb 27 10:26 8 -> socket:[13984]
lrwx------ 1 johan johan 64 Feb 27 10:26 9 -> socket:[14767]

root@johan-HP:/proc# cat 2443/fdinfo/2
pos:    1244446
flags:  0102001

また、/ procの下にある残りのファイルも見てください。システムからの多くの有用な情報がここにあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.