/tmp を指す存在するすべてのリンクを検出しますか?

/tmp を指す存在するすべてのリンクを検出しますか?

/tmpUbuntu 上の自分のフォルダーを指すファイル リンクが存在するかどうかを確認したいです。

背景:
何らかの事故によりフォルダー権限が 755 に変更されるという問題が発生しました。root/tmp以外のユーザーではシステムが正しく動作しなくなりました。

どこかにリンクがあり/tmp、コマンド

chmod 755 . -Rf 

そのフォルダー内で呼び出されると、メイン/tmpフォルダーに影響が及びます。

私は次のように修復する必要がありました:

chmod 777 /tmp
chmod +t /tmp
sudo chown root:root /tmp

ファイルシステムは 1 つしかないので、問題はないはずです。

答え1

これを試して:

find / -path /proc -prune -o \( -lname '*/tmp' -o -lname '*/tmp/' \) -exec ls -l {} \;

サンプル出力:

# find / -path /proc -prune -o -lname '*/tmp' -exec ls -l {} \;
lrwxrwxrwx. 1 sergey sergey 4 Sep 22 11:27 /home/sergey/xxx/tmp -> /tmp
lrwxrwxrwx. 1 root root 10 Jun 20 10:28 /usr/tmp -> ../var/tmp
find: `/run/user/sergey/gvfs': Permission denied

答え2

私の知る限り、inodeを指すすべてのシンボリックリンクを一覧表示する簡単な方法はありません。したがって、標準を使用することをお勧めします。探すユーティリティと-Lそして-同じファイルスイッチ:

  • -同じファイル対象ファイルのinodeに基づいて比較します。
  • -L検索にはシンボリック リンクが含まれます。これがあなたが探しているものです。

以下は /bin 内の /bin/dash の例です。

$ find -L  /bin -samefile /bin/dash -exec ls -lhi {} \;
786515 lrwxrwxrwx 1 root root 4 Mar 29  2012 /bin/sh -> dash
786436 -rwxr-xr-x 1 root root 108K Mar 29  2012 /bin/dash

この出力から、inode 番号 (最初の列) と矢印 (最後の列) の両方から、/bin/sh が /bin/dash へのシンボリックリンクになっていることがわかります。これらがハードリンクである場合、inode 番号は異なるファイルで同じになり、最後の列に矢印は表示されません。

最後に、ファイルシステム全体でこれらのリンクを探す必要がある場合は、次のようなディレクトリを除外します。/開発/procそして/システム検索から除外する。これは-パスそして-プルーンスイッチ(好きなだけ追加できます)-oスイッチの意味または)、2>/dev/ヌル潜在的なエラーを隠すためにここにあります:

$ sudo find -L  / \( -path /dev -o -path /proc -o -path /sys \) -prune -samefile /bin/dash -exec ls -lhi {} \; 2>/dev/null

ファイルシステム全体の検索には時間がかかる可能性があるため (主にファイルシステムのサイズによって異なります)、このオプションは最後の手段として検討します。これは干し草の山から針を探すようなものです。不可能ではありませんが、多大な労力がかかります...

答え3

この質問のおかげで答えが見つかりました:Linux: 指定された「元の」ファイルのすべてのシンボリックリンクを検索しますか? (「readlink」の逆)

find / -exec ls -ald {} ';' 2>/dev/null | grep '\-> /tmp' |grep -v /proc/

関連情報