Tôi vừa làm một chmod -x chmod


Câu trả lời:


43

Trong Linux:

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

http://www.sl slideshoware.net/cog/chmod-x-chmod


bindbn, tôi đã định đăng cùng một liên kết :-) nhưng tôi đã tự đọc vì tôi chưa quen với công cụ unix / linux !!!
rihatum

2
Trên bản phân phối 64 bit, bạn có thể phải sử dụng /lib64/ld-linux-x86-64.so.2thay thế. ldd /bin/chmodnên liệt kê chính xác liên kết nào để chạy.
goldPseudo

Tôi sẽ viết một chương trình tối thiểu sử dụng chmod (2), nhưng chương trình này hay hơn
adamo

1
@Stefan: Từ man ld-linux.so: "ld.so [và ld-linux.so] tải các thư viện chia sẻ cần thiết cho một chương trình, chuẩn bị chương trình để chạy và sau đó chạy nó." ( ld.sodành cho a.outđịnh dạng thực thi và ld-linux.sodành cho định dạng ELF.)
Tạm dừng cho đến khi có thông báo mới.

1
@Stefan: kernel không thực sự biết cách tải và thực thi các thực thi được liên kết động, bởi vì nó rất phức tạp và tuân theo glibc, không phải kernel. ld-linux.solà loại hỗn hợp thực thi / thư viện, sắp xếp liên kết tĩnh, chạy trong không gian người dùng và chịu trách nhiệm tải các tệp thực thi được liên kết động và tất cả các phụ thuộc của chúng, sau đó chạy chúng.
Juliano

18

Sử dụng trăn:

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

4
Và, như một lớp lót:python -c "import os; os.chmod('/bin/chmod', 0755)"
Thanatos

18

Điều này phụ thuộc vào thực tế là các quyền của tệp đích được bảo toàn hơn là tệp nguồn khi nó được sao chép. Chúng tôi đang "mượn" các quyền của ls:

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

Tôi nghĩ rằng lần đầu tiên bạn cpcần có cờ -p trên
Đi xe đạp

@ Đi xe đạp: Không cần thiết cho mục đích này.
Tạm dừng cho đến khi có thông báo mới.

Điều này tương tự như giải pháp tôi đã đưa ra, nhưng sau khi cpthực thi, tôi chỉ tìm catthấy nội dung trong chmodtệp tạm thời.
Chính tả

9

Sử dụng Perl:

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

7

setfacl -m u::rx /bin/chmod

... sẽ cấp cho chủ sở hữu quyền thực thi.

Nhưng, /lib/ld-linux.so.2mẹo là gọn gàng. :)


5

Điều này thật kỳ lạ ... Tôi đã thấy một cái gì đó như thế này vài ngày trước thông qua tweet của ai đó ...

http://www.sl slideshoware.net/cog/chmod-x-chmod


Liên kết đến các trang web khác không hữu ích vì liên kết sẽ bị hỏng tại một số điểm. Điều này giống như nói với ai đó để google câu trả lời.
Phil Hannent

@Phil Hannent: Tôi cũng đã xem slideshow đó, chỉ ba ngày trước, vì vậy đó là suy nghĩ đầu tiên của tôi, nếu OP là một trong những ứng viên ở đó.
Boldewyn

Tương tự, chỉ cần nhìn thấy điều này trên Reddit một vài ngày trước ...
Dentrasi

4

Nếu bạn đang ở trên một hệ thống mà /bin/chmodtrình liên kết động không thể tải:

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

Điều này hoạt động trên hệ thống MacOS X của tôi.


2

/ cứu / chmod 555 / bin / chmod

Tôi nghĩ bạn cũng có thể sử dụng mtree.


Đây sẽ là giải pháp yêu thích của tôi. Thật không may, nó không hoạt động với linux.


1

tạo một chmod mới và sử dụng nó cho bản gốc

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

Đặt một ô số 000 sẽ không cấp quyền thực thi tệp khi được tạo. Nó sẽ, tốt nhất, sẽ có được quyền rw-rw-rw-.
Barry Brown

2
@Barry: Nó thực sự phụ thuộc vào chế độ được truyền cho creat (2) / open (2) / mkdir (2) / etc. Nếu umask == 0 và tòa nhà tạo ra tệp được cung cấp 0777 cho chế độ, thì tệp sẽ có các bit thực thi được bật. Ví dụ, các trình liên kết / trình biên dịch vượt qua 0777 khi viết ra một tệp thực thi của Cameron (ví dụ: (umask 000;gcc -o foo foo.c)sẽ tạo ra một foochế độ 777). Tuy nhiên, nhiều shell (hầu hết?) Vượt qua 0666 khi chúng mở / tạo tệp để chuyển hướng, điều đó có nghĩa là câu trả lời này sẽ không hoạt động dưới nhiều shell.
Chris Johnsen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.