bindbn, miałem zamiar opublikować ten sam link :-), ale czytałem siebie, ponieważ jestem nowy w sprawach unix / linux !!!
rihatum
2
W 64-bitowej dystrybucji może być konieczne użycie /lib64/ld-linux-x86-64.so.2zamiast tego. ldd /bin/chmodpowinien wypisać dokładnie, który linker ma zostać uruchomiony.
goldPseudo
Napisałbym
1
@Stefan: From man ld-linux.so: „ld.so [i ld-linux.so] ładuje biblioteki współdzielone potrzebne programowi, przygotowuje program do uruchomienia, a następnie uruchamia.” ( ld.sodotyczy a.outplików wykonywalnych formatu i ld-linux.soformatu ELF.)
Wstrzymano do odwołania.
1
@Stefan: Jądro tak naprawdę nie wie, jak ładować i wykonywać dynamicznie połączone pliki wykonywalne, ponieważ jest bardzo złożone i postępuje zgodnie z glibc, a nie jądrem. ld-linux.sojest swego rodzaju hybrydą plików wykonywalnych / bibliotek, sortowaną statycznie połączoną, działa w przestrzeni użytkownika i jest odpowiedzialny za ładowanie dynamicznie powiązanych plików wykonywalnych i wszystkich ich zależności, a następnie ich uruchamianie.
Juliano,
18
Użyj python:
# python
Python> import os
Python> os.chmod("/bin/chmod",0755)
Ustawienie umask na 000 nie spowoduje przyznania pliku uprawnień do wykonania po jego utworzeniu. W najlepszym wypadku uzyska uprawnienia rw-rw-rw-.
Barry Brown,
2
@ Barry: To zależy od trybu przekazanego do creat (2) / open (2) / mkdir (2) / etc. Jeśli umask == 0 i syscall, który tworzy plik, otrzyma 0777 dla trybu, to plik będzie miał włączone bity wykonania. Na przykład linkery / kompilatory przekazują 0777 podczas zapisywania „pliku wykonywalnego” (np. (umask 000;gcc -o foo foo.c)Utworzą footryb z 777). Jednak wiele (większość?) Powłok przechodzi 0666 podczas otwierania / tworzenia plików do przekierowania, co oznacza, że ta odpowiedź nie zadziała w wielu powłokach.
chmod
!Odpowiedzi:
W systemie Linux:
http://www.slideshare.net/cog/chmod-x-chmod
źródło
/lib64/ld-linux-x86-64.so.2
zamiast tego.ldd /bin/chmod
powinien wypisać dokładnie, który linker ma zostać uruchomiony.man ld-linux.so
: „ld.so [i ld-linux.so] ładuje biblioteki współdzielone potrzebne programowi, przygotowuje program do uruchomienia, a następnie uruchamia.” (ld.so
dotyczya.out
plików wykonywalnych formatu ild-linux.so
formatu ELF.)ld-linux.so
jest swego rodzaju hybrydą plików wykonywalnych / bibliotek, sortowaną statycznie połączoną, działa w przestrzeni użytkownika i jest odpowiedzialny za ładowanie dynamicznie powiązanych plików wykonywalnych i wszystkich ich zależności, a następnie ich uruchamianie.Użyj python:
źródło
python -c "import os; os.chmod('/bin/chmod', 0755)"
Opiera się to na tym, że uprawnienia do pliku docelowego są zachowywane, a nie pliku źródłowego podczas kopiowania. „Pożyczamy” uprawnienia
ls
:źródło
cp
musi miećcp
uruchomieniu pliku wykonywalnego po prostucat
włączyłem zawartośćchmod
pliku tymczasowego.Za pomocą Perla:
źródło
setfacl -m u::rx /bin/chmod
... przyzna właścicielowi uprawnienia do wykonywania.
Ale
/lib/ld-linux.so.2
sztuczka jest zgrabna. :)źródło
To dziwne ... Kilka dni temu widziałem coś takiego przez czyjś tweet ...
http://www.slideshare.net/cog/chmod-x-chmod
źródło
Jeśli korzystasz z systemu, w którym
/bin/chmod
dynamiczny linker nie może go załadować:Działa to na moim systemie MacOS X.
źródło
/ rescue / chmod 555 / bin / chmod
Myślę, że możesz także użyć mtree.
źródło
Podejrzewam, że to nie jest prawdziwe pytanie: http://www.slideshare.net/cog/chmod-x-chmod
źródło
utwórz nowy chmod i użyj go do oryginału
źródło
(umask 000;gcc -o foo foo.c)
Utworząfoo
tryb z 777). Jednak wiele (większość?) Powłok przechodzi 0666 podczas otwierania / tworzenia plików do przekierowania, co oznacza, że ta odpowiedź nie zadziała w wielu powłokach.