web-dev-qa-db-ja.com

'cat':ファイルを開けません:許可が拒否されました

/ディレクトリ全体を他の場所にコピーしようとしています。 cpを再帰的に実行すると、次のような一部のファイルで失敗します。

/ # ls -lrt /sys/module/nf_conntrack_ipv4/uevent
--w-------    1 root     root          4096 Mar  7 06:29 /sys/module/nf_conntrack_ipv4/uevent
/ #
/ # cat /sys/module/nf_conntrack_ipv4/uevent
cat: can't open '/sys/module/nf_conntrack_ipv4/uevent': Permission denied
/ # cp /sys/module/nf_conntrack_ipv4/uevent /tmp
cp: can't open '/sys/module/nf_conntrack_ipv4/uevent': Permission denied

wパーミッションのみでファイルを作成し、それをコピー/カタログ化しようとしても、問題はありません。ただし、上記のような一部のファイルでは、rootユーザーとして実行しようとしても、コピーしたりcatしたりすることができません。また、奇妙なことは、上記のファイルのサイズが4096であると記載されていることで、これはディレクトリのサイズと似ています。これは特別なファイルですか?

私はここで何かが欠けていると思うし、そのようなファイルやそのような振る舞いについてもっと知るには入力が必要だと思う。そのようなファイルのコンテンツを猫に飼うことを許可されない理由を理解するのを助けてください。

2
Rahul

通常のファイルシステムでext4、ファイルにw権限しかない場合、それを読み取ることができません(cat)、そのためには読み取り(r)ビットが必要です。 rootは、許可ビットに関係なく、任意のファイルを読み取ることができることに注意してください。

現在、/sysは、実際には仮想ファイルシステムであり、通常のファイルシステムとは異なる動作をするLinuxカーネルが提供する特別なsysfsのマウントポイントです。 /sysには、システムのデバイス関連情報が含まれています。

/sysで何かを変更すると、カーネルの内部データ構造が直接変更されるため、カーネルが許可または拒否する内容に依存します。

/sys/module/nf_conntrack_ipv4/ueventの場合、wrootビットを追加しても、所有者(r)にはrootビットのみが設定されます(-非常に悪い考えです)、ファイルの読み取り中に、カーネルがnf_conntrack_ipv4モジュールのueventを読み取ることを設計上許可しないため、I/Oエラーが発生します。

10
heemayl

/sys/procなどの特殊なファイルシステムを回避するには、cpに次のオプションを指定する必要があります。

-x, --one-file-system
    stay on this file system

マニュアルページ から引用)

実際のファイルシステムが複数ある場合、例えば/および/homeの場合、いくつかのcpコマンドを指定する必要があります。

fromtoを同じ場所にコピーしないように注意してください。それは、あなたがのコピーのコピーのコピーを作成する無限ループにつながる可能性があります...

4
Stig Hemmer