cờ-tinh trùng được tìm thấy
Tôi đang cố gắng xoay sở với lệnh này:
find /home/ -type d \( -perm -0002 -a ! -perm -1000 \) 2>/dev/null
Tôi hiểu rằng nó sẽ tìm trong thư mục 'home' cho tất cả các thư mục và chuyển hướng tất cả các thư stderr đến một tệp (để loại bỏ chúng), tuy nhiên, tôi bối rối với phần ở giữa, cụ thể là:
\( -perm -0002 -a ! -perm -1000 \)
Các dấu gạch chéo nghĩa là gì? Tôi giả định ! -perm -1000có nghĩa là tìm kiếm các thư mục không có các quyền đó và -perm -0002có nghĩa là tìm kiếm các thư mục có các quyền đó, nhưng tôi chỉ quen với việc xem các quyền trong biểu mẫu 644 (ví dụ). Tại sao có bốn chữ số? Ngoài ra, -alá cờ để làm gì?
Trả lời
Trong sách hướng dẫn, bạn có thể tìm thấy:
Operators
Operators join together the other items within the expression.
They include for example -o (meaning logical OR) and -a
(meaning logical AND). Where an operator is missing, -a is
assumed.
Vì vậy, nghĩa đen \( -perm -0002 -a ! -perm -1000 \)là: perm = 0002 và không phải là perm = 1000
perm = 0002 có nghĩa là có thể ghi cho Người khác.
perm = 1000 có nghĩa là bit dính được thiết lập.
Vì vậy, biểu thức này tìm kiếm tệp có thể ghi cho Khác và không có bộ bit dính.
Tìm kiếm thư mục được thực hiện với -type d dthư mục phương tiện vì vậy hãy tìm thư mục look after object of type
Từ hướng dẫn tìm kiếm, -permcó một số hình thức:
-perm 0002sẽ khớp với tất cả các tệp có cài đặt quyền chính xác này-perm -0002sẽ khớp với tất cả các tệp nơi bit bên phải này được thiết lập, (có nghĩa là0772,1752... bất kỳ kết hợp nào nếu tệp có thể ghi cho người khác)
Trong -type d \( -perm -0002 -a ! -perm -1000 \), trước hết, các dấu gạch chéo thoát khỏi ngoặc cho vỏ, để họ có thể được thông qua như là một cuộc tranh cãi, thay vì được hiểu là các nhà khai thác đặc biệt bằng vỏ. (Bạn cũng cần như vậy >, ví dụ , vì những lý do rõ ràng.) Chúng cũng có thể được viết là '('hoặc "(", nhưng cuối cùng findchỉ thấy (và ).
Dấu ngoặc đơn nhóm các điều kiện, và -alà một và kết hợp. Đó cũng là mặc định ngầm định cho các điều kiện quay lại, như được sử dụng ở đây với -type dvà biểu thức trong ngoặc đơn, không có -akết nối rõ ràng nào với chúng. Biểu thức chính xác tương đương với -type d -perm -0002 ! -perm -1000. Dấu ngoặc đơn thực sự chỉ cần thiết với hoặc kết hợp -o.
-type dlà hiển nhiên, và có nghĩa là tìm kiếm một tệp có tất cả các bit quyền được thiết lập. Hoặc, trong trường hợp này, các thư mục có quyền ghi cho người khác ( ) được đặt và bit dính ( ) không được đặt (vì phủ định). Tôi nghĩ rằng sự kết hợp ở đây cũng có thể được viết là . Lưu ý dấu gạch ngang phía trước chuỗi quyền, nếu không có nó, ý nghĩa sẽ khác. Xem ví dụ: trang Linux man để tìm , tìm "(expr)" và "-perm mode".-perm -NNNNNNNN00021000-perm -o+w ! -perm -o+t
Quyền truy cập ghi vào một thư mục cho phép tạo, xóa và đổi tên các tệp bên trong nó và bit dính ngăn chặn việc xóa và đổi tên các tệp do người dùng khác sở hữu. Toàn bộ biểu thức tìm kiếm các thư mục mà mọi người có thể xóa hoặc đổi tên bất kỳ tệp nào.
-a: là logic AND (-ocó thể được sử dụng cho OR)\(,\): bởi vì dấu ngoặc đơn có ý nghĩa đặc biệt trong shell, dấu gạch chéo được sử dụng để thoát khỏi chúng- quyền có bốn chữ số có liên quan đến
sticky bit,setuid,setgid