Недавно я разработал проблему на некоторых встроенных устройствах Linux, где я больше не могу создавать файлы непосредственно в каталоге /etc /. Сначала я увидел проблему, когда dpkg не смог создать временный файл, а затем у «sed -i» возникла та же проблема. С тех пор я пробовал touch, cp и перенаправленные эхо, но все они терпят неудачу с неверным аргументом.
При запуске strace на "cp /etc /hostname /etc/hostname.bak" выдается следующий вывод:
stat64("/etc/hostname.bak", 0xbede4560) = -1 ENOENT (No such file or directory)
stat64("/etc/hostname", {st_mode=S_IFREG|0644, st_size=12, ...}) = 0
stat64("/etc/hostname.bak", 0xbede4398) = -1 ENOENT (No such file or directory)
open("/etc/hostname", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=12, ...}) = 0
open("/etc/hostname.bak", O_WRONLY|O_CREAT|O_EXCL|O_LARGEFILE, 0644) = -1 EINVAL (Invalid argument)
write(2, "cp: ", 4cp: ) = 4
write(2, "cannot create regular file `/etc"..., 46cannot create regular file `/etc/hostname.bak') = 46
write(2, ": Invalid argument", 18: Invalid argument) = 18
во время работы strace на "cp /etc /hostname /hostname.bak" выдает
stat64("/hostname.bak", 0xbec75570) = -1 ENOENT (No such file or directory)
stat64("/etc/hostname", {st_mode=S_IFREG|0644, st_size=12, ...}) = 0
stat64("/hostname.bak", 0xbec753a8) = -1 ENOENT (No such file or directory)
open("/etc/hostname", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=12, ...}) = 0
open("/hostname.bak", O_WRONLY|O_CREAT|O_EXCL|O_LARGEFILE, 0644) = 4
fstat64(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
Как только файл /hostname.bak существует, я могу переместить его в /etc / без происшествий.
Разрешения на /etc / мне тоже кажутся правильными
drwxr-xr-x 75 root root 36864 Mar 29 00:08 etc
Есть ли какая-либо настройка или конфигурация может вызвать такое поведение? Если нет, то как я могу пойти на отладку