Phương pháp số 1 - stat
Bạn có thể sử dụng statlệnh để lấy các bit quyền. statcó 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 statkhác nhau, bạn có thể gói lệnh này trong một lsb_release -alệ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_releaselà 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 findvà printfchuyể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 @pvvà xử lý stat()trực tiếp đầu ra của :
$ perl -le 'printf "%04o", (stat("a"))[2] & 07777;'
0664