'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. Кроме того, странно то, что размер упомянутого выше файла указан как 4096, что аналогично тому, который мы имеем для каталога. Это что-то особенное?

Я предполагаю, что я что-то здесь упускаю, и мне нужно немного информации, чтобы узнать больше о таких файлах или о таком поведении. Пожалуйста, помогите мне понять, почему мне не разрешено просматривать содержимое таких файлов.

2 ответа

Например, в обычной файловой системе ext4если у вас есть только w разрешение в файле, вы не сможете прочитать (cat) это, вам нужно прочитать (r) немного за это. Обратите внимание, что, root Может читать любой файл независимо от разрешения битов.

Сейчас, /sys это точка крепления особого sysfs предоставляется ядром Linux, которое на самом деле является виртуальной файловой системой и работает иначе, чем обычные файловые системы. /sys содержит информацию об устройстве, связанную с устройством.

Изменение чего-либо в /sys будет напрямую изменять внутреннюю структуру данных ядра, так что это зависит от ядра, что он разрешит или запретит.

За /sys/module/nf_conntrack_ipv4/uevent, у вас есть только w бит установлен для владельца (root), даже если вы добавите r немного для root (что является очень плохой идеей), при чтении файла вы получите ошибку ввода-вывода, поскольку ядро ​​не позволяет никому читать события для nf_conntrack_ipv4 модуль.

Чтобы избежать специальных файловых систем, таких как /sys а также /proc, вы должны дать следующую опцию cp:

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

(цитируется со страницы руководства)

Если у вас есть несколько реальных файловых систем, например / а также /home, тогда вам нужно будет дать несколько cp команды.

Будьте осторожны, чтобы не копировать из одного места в одно и то же. Это может привести к бесконечным циклам, когда вы делаете копии копий копий...

Другие вопросы по тегам