ファイル数が多いファイルシステムを巡回する場合、root
他のユーザーに比べて速度が速いのでしょうか?
たとえば、下に何百万ものファイルがあり、属している場合、/data
再帰的な/data
grepはuser123
forよりも速く完了しますか?root
user123
権限検証をスキップする最適化があるかどうか、またはstat
すべてのファイルに対してaが実行されるので、確認は条件にすぎないかどうか疑問に思います。そしてこれは普遍的に適用されますか、それともファイルシステムを介して適用されますか?
私はスピードを上げるためにこのような非常に大きなタスクを実行する迷信的な習慣を開発しましたが、root
実際に役立つかどうかをテストする良い方法を見つけることができませんでした。
ベストアンサー1
Linuxでは、ルートに特別な処理はありません。ルートはアクセスモードの変更、ACLの変更、SELinuxの適用の無効化などの権限を持つことができますが、ユーザーはまだこれらの制約が適用されます。したがって、実際にはカーネルはどのショートカットも使用できません。 (これはLinux UID名前空間で作業することが何を意味するのかを考えると、状況をさらに複雑にします。普遍的な強力なルート:実行中のプロセスの観点からは存在しない可能性があります。)
または、各ファイルに対して統計を実行するには
stat
これは、ユーザーモードがファイルについてもっと学ぶために行うことです。再帰的なgrepがこれを行う必要さえないことはわかりません。すべてのディレクトリエントリを取得し、各エントリに対して個別に実行する非効率性のために2つgetdents(64)
。結果にはアクセス情報は含まれていませんが、検索したファイルにアクセスする前に現在のユーザーがアクセスできるかどうかを確認するのではなく、試み続けることが賢明です。失敗するとアクセスできません。これにより、ファイルごとに1つのコンテキストスイッチが保存されます。
だから何できる再帰をより速くするために、実際にはラジカル権限を活用していますかgrep
?
答えは、ユーザーゾーンのgrepとカーネルゴールドシステムの機能間のコンテキスト切り替えを最小限に抑えることができます。すべてのファイルとディレクトリを開かないように(可能であれば)、Linuxカーネルを拡張する即時かつきちんとした方法は見えません。 Linuxには、すべての並行性、安全性、シャットダウン、およびメモリ割り当ての動作を明確に定義された(ファイルハンドルを所有するプロセスによって)セマンティクスに変換するために、実際にユーザースペースからファイルにアクセスするモデルがあります。