Saya baru saja melakukan chmod -x chmod


Jawaban:


43

Di Linux:

/lib/ld-linux.so.2 /bin/chmod +x /bin/chmod

http://www.slideshare.net/cog/chmod-x-chmod


bindbn, saya akan memposting tautan yang sama :-) tapi saya membaca sendiri karena saya baru di unix / linux !!!
rihatum

2
Pada distro 64-bit, Anda mungkin harus menggunakannya /lib64/ld-linux-x86-64.so.2. ldd /bin/chmodharus mencantumkan linker mana yang harus dijalankan.
goldPseudo

Saya akan menulis program minimal yang menggunakan chmod (2), tapi ini lebih keren
adamo

1
@Stefan: Dari man ld-linux.so: "ld.so [dan ld-linux.so] memuat pustaka bersama yang diperlukan oleh suatu program, menyiapkan program untuk dijalankan, dan kemudian menjalankannya." ( ld.sountuk a.outformat yang dapat dieksekusi dan ld-linux.sountuk format ELF.)
Dijeda sampai pemberitahuan lebih lanjut.

1
@Stefan: Kernel tidak benar-benar tahu cara memuat dan mengeksekusi executable yang terkait secara dinamis, karena sangat kompleks dan mengikuti glibc, bukan kernel. ld-linux.soadalah semacam-executable / library hybrid, semacam-terkait secara statis, berjalan di userspace, dan bertanggung jawab untuk memuat executable yang terkait secara dinamis dan semua dependensinya, kemudian menjalankannya.
Juliano

18

Gunakan python:

# python
Python> import os
Python> os.chmod("/bin/chmod",0755)

4
Dan, sebagai satu-liner:python -c "import os; os.chmod('/bin/chmod', 0755)"
Thanatos

18

Ini bergantung pada kenyataan bahwa izin file tujuan dipertahankan daripada file sumber saat itu sedang disalin. Kami "meminjam" izin dari ls:

cp /bin/ls /tmp/chmod.tmp
cp /bin/chmod /tmp/chmod.tmp
mv /tmp/chmod.tmp /bin/chmod

Saya pikir cpkebutuhan pertama Anda untuk memiliki -p flag on
Riking

@Riking: Tidak perlu untuk tujuan ini.
Dijeda sampai pemberitahuan lebih lanjut.

Ini mirip dengan solusi yang saya buat, tapi setelah cpdieksekusi, saya hanya catisi chmodke dalam file temp.
SpellingD

9

Menggunakan Perl:

% perl -e 'chmod 0755, qw[/bin/chmod]'

7

setfacl -m u::rx /bin/chmod

... akan memberikan izin kepada pemilik untuk mengeksekusi.

Tapi, /lib/ld-linux.so.2triknya rapi. :)


5

Ini aneh ... Saya melihat sesuatu seperti ini beberapa hari yang lalu melalui tweet seseorang ...

http://www.slideshare.net/cog/chmod-x-chmod


Tautan ke situs lain tidak membantu karena tautan akan rusak di beberapa titik. Ini seperti memberi tahu seseorang kepada google jawabannya.
Phil Hannent

@ Philip Hannent: Saya sudah melihat slideshow itu juga, hanya tiga hari yang lalu, jadi itu adalah pikiran pertama saya, jika OP adalah salah satu pelamar di sana.
Boldewyn

Sama, baru melihat ini di Reddit beberapa hari yang lalu ...
Dentrasi

4

Jika Anda berada di sistem yang /bin/chmodtidak dapat dimuat oleh tautan dinamis:

# /bin/mv /bin/chmod /bin/chmod.tmp
# install -p -m 755 /bin/chmod.tmp /bin/chmod

Ini berfungsi pada sistem MacOS X saya.


2

/ rescue / chmod 555 / bin / chmod

Saya pikir Anda juga bisa menggunakan mtree.


Ini akan menjadi solusi favorit saya. Sayangnya, itu tidak bekerja dengan linux.


1

buat chmod baru dan gunakan itu untuk yang asli

umask 000
cat chmod > ~/my-chmod
~/my-chmod a+x chmod

Mengatur umask dari 000 tidak akan memberikan izin eksekusi file ketika itu dibuat. Ini akan, paling-paling, mendapatkan izin rw-rw-rw-.
Barry Brown

2
@ Larry: Ini sebenarnya tergantung pada mode yang dilewatkan ke creat (2) / open (2) / mkdir (2) / etc. Jika umask == 0 dan syscall yang membuat file diberikan 0777 untuk mode, maka file tersebut akan mengeksekusi bit eksekusi. Sebagai contoh, penghubung / kompiler lulus 0777 ketika menulis "file yang dapat dieksekusi" (misalnya (umask 000;gcc -o foo foo.c)akan menghasilkan foodengan mode 777). Namun, banyak (kebanyakan?) Shell melewati 0666 ketika mereka membuka / membuat file untuk pengalihan, yang berarti bahwa jawaban ini tidak akan berfungsi di bawah banyak shell.
Chris Johnsen
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.