/
ディレクトリ全体を他の場所にコピーしようとしています。 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であると記載されていることで、これはディレクトリのサイズと似ています。これは特別なファイルですか?
私はここで何かが欠けていると思うし、そのようなファイルやそのような振る舞いについてもっと知るには入力が必要だと思う。そのようなファイルのコンテンツを猫に飼うことを許可されない理由を理解するのを助けてください。
通常のファイルシステムでext4
、ファイルにw
権限しかない場合、それを読み取ることができません(cat
)、そのためには読み取り(r
)ビットが必要です。 root
は、許可ビットに関係なく、任意のファイルを読み取ることができることに注意してください。
現在、/sys
は、実際には仮想ファイルシステムであり、通常のファイルシステムとは異なる動作をするLinuxカーネルが提供する特別なsysfs
のマウントポイントです。 /sys
には、システムのデバイス関連情報が含まれています。
/sys
で何かを変更すると、カーネルの内部データ構造が直接変更されるため、カーネルが許可または拒否する内容に依存します。
/sys/module/nf_conntrack_ipv4/uevent
の場合、w
にroot
ビットを追加しても、所有者(r
)にはroot
ビットのみが設定されます(-非常に悪い考えです)、ファイルの読み取り中に、カーネルがnf_conntrack_ipv4
モジュールのueventを読み取ることを設計上許可しないため、I/Oエラーが発生します。
/sys
や/proc
などの特殊なファイルシステムを回避するには、cp
に次のオプションを指定する必要があります。
-x, --one-file-system
stay on this file system
( マニュアルページ から引用)
実際のファイルシステムが複数ある場合、例えば/
および/home
の場合、いくつかのcp
コマンドを指定する必要があります。
fromとtoを同じ場所にコピーしないように注意してください。それは、あなたがのコピーのコピーのコピーを作成する無限ループにつながる可能性があります...