Tôi cần đặt cùng một chmod, làm thế nào để lấy số cho -rw-r - r-- ?
chmod
hỗ trợ của bạn --reference
: Hồi --reference = RFILE sử dụng chế độ của RFILE thay vì các giá trị MODE, - chmod.
Tôi cần đặt cùng một chmod, làm thế nào để lấy số cho -rw-r - r-- ?
chmod
hỗ trợ của bạn --reference
: Hồi --reference = RFILE sử dụng chế độ của RFILE thay vì các giá trị MODE, - chmod.
Câu trả lời:
Vui lòng kiểm tra stat
đầu ra:
# stat .xsession-errors
File: ‘.xsession-errors’
Size: 839123 Blocks: 1648 IO Block: 4096 regular file
Device: 816h/2070d Inode: 3539028 Links: 1
Access: (0600/-rw-------) Uid: ( 1000/ lik) Gid: ( 1000/ lik)
Access: 2012-05-30 23:11:48.053999289 +0300
Modify: 2012-05-31 07:53:26.912690288 +0300
Change: 2012-05-31 07:53:26.912690288 +0300
Birth: -
stat -c %a /path/to/file
là trò ảo thuật mà bạn cần.
Số chế độ cấp phép đầy đủ là số bát phân 4 chữ số, mặc dù hầu hết thời gian, bạn chỉ sử dụng 3 chữ số có ý nghĩa nhỏ nhất. Thêm từng nhóm trong chuỗi quyền, lấy r = 4, w = 2, x = 1. Ví dụ:
421421421
-rwxr-xr--
\_/ -- r+w+x = 4+2+1 = 7
\_/ -- r+_+x = 4+0+1 = 5
\_/ -- r+_+_ = 4+0+0 = 4 => 0754
Bây giờ, đôi khi bạn sẽ thấy một sự khiêm tốn kỳ lạ như thế này:
-rwsr-xr-T
Chữ số thứ tư bị quá tải lên các x
bit trong phần khiêm tốn. Nếu bạn thấy một chữ cái khác ngoài x
đó, thì nó có nghĩa là một trong những bit chữ số thứ tư "đặc biệt" này được đặt và nếu chữ cái viết thường, thì x
vị trí đó cũng được đặt. Vì vậy, bản dịch cho cái này là:
4 2 1
421421421
-rwsr-xr-T
+ + + -- s+_+T = 4+0+1 = 5
\_/ -- r+w+s = 4+2+1 = 7 (s is lowercase, so 1)
\_/ -- r+_+x = 4+0+1 = 5
\_/ -- r+_+T = 4+0+0 = 4 (T is uppercase, so 0) => 05754
Cách UNIX tiêu chuẩn để chỉ ra rằng một số là số bát phân là bắt đầu bằng số không. GNU chmod
sẽ cho rằng chế độ bạn đưa ra là bát phân dù sao, nhưng an toàn nhất là trả trước số không.
Cuối cùng, nếu bạn thấy một +
phần cuối của sự khiêm tốn:
-rwxr-xr-x+
thì điều đó có nghĩa là tệp có quyền mở rộng và bạn sẽ cần nhiều hơn thế chmod
. Nhìn vào setfacl
và getfacl
các lệnh, cho người mới bắt đầu.
Quyền chỉ là đại diện chuỗi của một số nhị phân.
Phần 0
lớn được đại diện bởi -
, phần còn lại là các chữ cái.
Đối với quyền cơ bản:
Chuyển đổi tất cả -
và mũ S
hoặc T
sang 0
, phần còn lại nên đại diện 1
.
Số nhị phân kết quả được xây dựng nên được in dưới dạng bát phân:
$ a=-rw-r--r--
$ b=${a//[ST-]/0}
$ b=${b//[!0]/1}
$ printf '%04o\n' $((2#$b))
0644
Trong một dòng:
$ b=${a//[ST-]/0}; b=${b//[!0]/1}; printf '%04o\n' $((2#$b))
0644
Sửa lỗi và phát hiện 3 bit khác 1000
, 2000
hoặc 4000
đòi hỏi một số mã khác:
#!/bin/bash
Say (){ printf '%s\n' "$@"; }
SayError(){ a=$1; shift; printf '%s\n' "$@" >&2; exit "$a"; }
e1="Permission strings should have 10 characters or less"
e2="Assuming first character is the file type"
e3="Permission strings must have at least 9 characters"
e4="Permission strings could only contain 'rwxsStT-'"
a=$1
((${#a}>10)) && SayError 1 "$e1"
((${#a}==10)) && { Say "$e2"; a=${a#?}; }
((${#a}<9)) && SayError 2 "$e3"
a=${a//[^rwxsStT-]}
((${#a}<9)) && SayError 3 "e4"
b=${a//[ST-]/0}; b=${b//[!0]/1}; c=0
[[ $a =~ [sS]......$ ]] && c=$((c|4))
[[ $a =~ [sS]...$ ]] && c=$((c|2))
[[ $a =~ [tT]$ ]] && c=$((c|1))
printf '%04o\n' "$((2#$b|c<<9))"
Lấy danh sách các tệp có giá trị quyền chuỗi và hex. Đặt% N ở cuối để đầu ra có thể được đưa vào Excel dễ dàng hơn.
stat -c "%A %a %N" *
-rw-r--r-- 644 `file2.txt'
-rw-r--r-- 644 `file3.txt'
-rw-r--r-- 644 `file4.txt'
-rw-r--r-- 644 `file.txt'
drwxr-xr-x 755 `hsperfdata_root'
-rw-r--r-- 644 `junk.txt'
drwx------ 700 `vmware-root'
Điều này sẽ tìm thấy tất cả các tập tin với một quyền hex cụ thể.
find /tmp1 -user root -perm 644