Saya perlu mengatur chmod yang sama, bagaimana cara mendapatkan nomor untuk -rw-r - r-- ?
chmod
dukungan Anda --reference
: "--referensi = RFILE gunakan mode RFILE alih-alih nilai MODE" - man chmod.
Saya perlu mengatur chmod yang sama, bagaimana cara mendapatkan nomor untuk -rw-r - r-- ?
chmod
dukungan Anda --reference
: "--referensi = RFILE gunakan mode RFILE alih-alih nilai MODE" - man chmod.
Jawaban:
Silakan periksa stat
output:
# 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
adalah trik sulap yang Anda butuhkan.
Nomor mode izin penuh adalah angka oktal 4 digit, meskipun sebagian besar waktu, Anda hanya menggunakan 3 digit paling tidak signifikan. Jumlahkan setiap grup dalam string izin, dengan mengambil r = 4, w = 2, x = 1. Sebagai contoh:
421421421
-rwxr-xr--
\_/ -- r+w+x = 4+2+1 = 7
\_/ -- r+_+x = 4+0+1 = 5
\_/ -- r+_+_ = 4+0+0 = 4 => 0754
Sekarang, kadang-kadang Anda akan melihat kesederhanaan aneh seperti ini:
-rwsr-xr-T
Digit keempat kelebihan beban ke x
bit dalam modestring. Jika Anda melihat huruf selain dari x
sana, maka itu berarti salah satu dari bit keempat digit "khusus" ini diatur, dan jika hurufnya lebih kecil, maka x
untuk posisi itu juga ditetapkan. Jadi terjemahan untuk yang ini adalah:
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
Cara UNIX standar untuk menunjukkan bahwa angka adalah oktal adalah memulainya dengan nol. GNU chmod
akan menganggap mode yang Anda berikan itu oktal, tetapi paling aman untuk menambahkan nol.
Akhirnya, jika Anda melihat a +
di akhir yang sederhana:
-rwxr-xr-x+
maka itu berarti file tersebut telah memperpanjang izin, dan Anda akan membutuhkan lebih dari chmod
. Lihatlah ke dalam setfacl
dan getfacl
perintah, untuk pemula.
Izin hanyalah representasi string dari angka biner.
Sebagian 0
besar diwakili oleh -
, sisanya adalah surat.
Untuk izin dasar:
Konversikan semua -
dan tutup S
atau T
menjadi 0
, sisanya harus mewakili 1
.
Angka biner yang dihasilkan yang dibangun harus dicetak sebagai oktal:
$ a=-rw-r--r--
$ b=${a//[ST-]/0}
$ b=${b//[!0]/1}
$ printf '%04o\n' $((2#$b))
0644
Dalam satu baris:
$ b=${a//[ST-]/0}; b=${b//[!0]/1}; printf '%04o\n' $((2#$b))
0644
Galat koreksi dan mendeteksi 3 bit lainnya 1000
, 2000
atau 4000
memerlukan beberapa kode lagi:
#!/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))"
Dapatkan daftar file dengan nilai izin string dan hex mereka. Menempatkan% N di bagian akhir agar hasilnya dapat dimasukkan ke dalam Excel dengan lebih mudah.
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'
Ini akan menemukan semua file dengan izin heks tertentu.
find /tmp1 -user root -perm 644