'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
команды.
Будьте осторожны, чтобы не копировать из одного места в одно и то же. Это может привести к бесконечным циклам, когда вы делаете копии копий копий...