Phương pháp số 1 - stat
Bạn có thể sử dụng stat
lệnh để lấy các bit quyền. stat
có sẵn trên hầu hết các Unix (OSX, BSD, không phải AIX từ những gì tôi có thể tìm thấy). Điều này sẽ hoạt động trên hầu hết các Unix, ngoại trừ OSX & BSD từ những gì tôi có thể tìm thấy.
$ stat -c "%a" <file>
Thí dụ
$ ls -l a
-rw-rw-r-- 1 saml saml 155 Oct 6 14:16 afile.txt
Sử dụng lệnh này:
$ stat -c "%a" afile.txt
664
Và sử dụng đơn giản grep
để xem chế độ cấp phép của nhóm là 6 hay 7.
$ stat -c "%a" afile.txt | grep ".[67]."
Đối với OSX và BSD, bạn cần sử dụng hình thức này stat
, stat -f
(hoặc có lẽ stat -x
) và phân tích tương ứng. Vì các tùy chọn stat
khác nhau, bạn có thể gói lệnh này trong một lsb_release -a
lệnh và gọi phiên bản phù hợp dựa trên HĐH. Không lý tưởng nhưng hoàn toàn khả thi. Nhận ra rằng lsb_release
là chỉ có sẵn cho distro Linux để thay thế khác sẽ cần phải được đặt ra để thử nghiệm hệ điều hành Unix khác.
Phương pháp # 2 - tìm
Tôi nghĩ rằng lệnh này có thể phục vụ bạn tốt hơn mặc dù. Tôi sử dụng find
và printf
chuyển đổi.
Thí dụ
$ find a -prune -printf '%m\n'
664
Phương pháp # 3 - Perl
Perl có thể là một cách di động hơn để làm điều này tùy thuộc vào các hệ điều hành bạn đang cố gắng thực hiện.
$ perl -le '@pv=stat("afile.txt"); printf "%04o", $pv[2] & 07777;'
0664
LƯU Ý: Ở trên sử dụng hàm của Perl stat()
để truy vấn các bit của hệ thống tệp.
Bạn có thể làm cho nó nhỏ gọn hơn bằng cách gửi bằng cách sử dụng một mảng @pv
và xử lý stat()
trực tiếp đầu ra của :
$ perl -le 'printf "%04o", (stat("a"))[2] & 07777;'
0664