Cách lấy số cấp phép theo chuỗi: -rw-r - r--


53

Tôi cần đặt cùng một chmod, làm thế nào để lấy số cho -rw-r - r-- ?


2
Lập trình hay bạn chỉ cần biết cách dịch?
mattdm

Tôi lười dịch :) stat là tốt cho tôi một chút.
cnd

9
Bạn có ý nghĩa gì khi đặt ra cùng một nhóm? Bạn đã có một tệp có quyền -rw-r - r-- và muốn đặt một tệp khác có cùng quyền? Sau đó hãy xem liệu các chmodhỗ 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.
manatwork


Bạn đang sử dụng Unix gì?
Kusalananda

Câu trả lời:


53

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: -

11
stat -c %a /path/to/filelà trò ảo thuật mà bạn cần.
từ

và câu trả lời là trong khối Access ở trên. Các tập tin anh sử dụng trong ví dụ có tập truy cập khác nhau sau đó tập tin trong câu hỏi. một trong câu hỏi sẽ hiển thị Quyền truy cập: (0644 / -rw-r
r--

65
r=4
w=2
x=1

trong mỗi nhóm. Ví dụ của bạn là 6 (r + w = ​​4 + 2) 4 (r = 4) 4 (r = 4).


26

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 xbit 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ì xvị 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 chmodsẽ 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 setfaclgetfaclcác lệnh, cho người mới bắt đầu.


10

Điều này có thể đơn giản

-bash-3.2$ stat --format=%a sample_file
755

3

Quyền chỉ là đại diện chuỗi của một số nhị phân.
Phần 0lớn được đại diện bởi -, phần còn lại là các chữ cái.

căn bản

Đối với quyền cơ bản:

Chuyển đổi tất cả -và mũ Shoặc Tsang 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, 2000hoặ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))"

0

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

-2

Đối với tất cả các tệp đồng thời trong một Dir

-bash-4.1$ chmod -R 640 *

Đối với tất cả các tệp

-bash-4.1$ chmod 640 *
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.