Niedawno opracowałem problem na niektórych osadzonych urządzeniach z Linuksem, w których nie mogę już tworzyć plików bezpośrednio w katalogu / etc /. Najpierw zobaczyłem problem, gdy dpkg nie utworzył pliku tymczasowego, a następnie „sed -i” miał ten sam problem. Od tamtej pory próbowałem dotykać, cp i przekierowywać echa, ale wszystkie zawodzą przy nieprawidłowym argumencie.
Uruchomienie strace na „cp / etc / hostname /etc/hostname.bak” daje następujące dane wyjściowe:
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
podczas działania strace na „cp / etc / hostname /hostname.bak” daje wynik
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
Gdy plik / nazwa_hosta.bak istnieje, mogę go przenieść do / etc / bez incydentów.
Uprawnienia do / etc / również wydają mi się odpowiednie
drwxr-xr-x 75 root root 36864 Mar 29 00:08 etc
Czy jakieś ustawienie lub konfiguracja może powodować takie zachowanie? Jeśli nie, jak mogę przejść do debugowania