Ada perintah chmod untuk mengatur izin file, tetapi bisakah saya mendapatkan izin file dalam mode oktal (seperti 755) dari baris perintah?
command-line
permissions
Anwar
sumber
sumber
stat --format "%A" $FILE
memberi Andadrwxr-x---
format yang dapat dibaca manusia . yang mungkin bermanfaat atau tidak.Jawaban:
Anda dapat mencoba
Ganti
*
dengan direktori yang relevan atau nama file yang tepat yang ingin Anda periksa.Dari halaman manual stat ,
Pemakaian:
Dengan file:
Dengan folder:
(Referensi)
sumber
stat -f '%A %a %N' *
(kredit: geeklog.adamwilson.info/article/58/… )ls
:for f in $(ls -a); do stat -c "%a %n" $f; done;
ls
adalah ide yang buruk. Jika Anda benar-benar ingin menggunakan loop yang dapat Anda lakukanfor f in *; do stat "%a %n" "$f"; done
Izin file di Linux dapat ditampilkan dalam format oktal menggunakan perintah stat Linux.
Cukup tekan Ctrl+ Alt+ Tdi keyboard Anda untuk membuka Terminal. Saat terbuka, Arahkan ke direktori tempat Anda ingin menemukan izin file dalam mode oktal.
% A Hak akses dalam bentuk yang dapat dibaca manusia
% a Hak akses di oktal
% n Nama file
Sumber: http://kmaiti.blogspot.com/2011/09/umask-concept.html
sumber
Sebagaimana dirinci dalam izin gaya "755" dengan 'ls' oleh Adam Courtemanche di AgileAdam.com , Anda dapat membuat alias
lso
yang bertindak sepertils -l
tetapi sedikit memproses output 1 untuk menampilkan izin juga di oktal. Ini menambahkan kolom terkemuka yang menunjukkan izin oktal tiga digit dua digit . Seperti yang ditulis, ini berfungsi untuk sebagian besar file dan direktori, tetapi tidak berfungsi dengan baik jika bit sticky atau setuid / setgid diatur. 3Namun, ini memiliki kelemahan serius, seperti yang ditunjukkan oleh techtonik . Anda tidak dapat meneruskan argumen ke alias ini seperti yang Anda lakukan pada perintah , karena argumen tersebut diambil sebagai argumen tambahan . Dengan demikian Anda tidak dapat berjalan pada file atau direktori tertentu, Anda juga tidak bisa meneruskan opsi apa pun (seperti , atau ) ke .
lso
ls
awk
lso
-F
--color
lso
Cara mengatasinya adalah untuk mendefinisikan
lso
sebagai fungsi daripada alias.Jika Anda mencoba ini secara interaktif di shell Anda, jalankan
unalias lso
untuk menghapus alias - Anda dapat melakukannya sebelum atau setelah Anda mendefinisikan fungsi. Jika Anda memasukkannya ke file yang bersumber, seperti~/.bashrc
, ambil sajaalias
baris dan tambahkan definisi fungsi.Mengapa ini bekerja? Tidak seperti alias, fungsi bash shell dapat mengambil parameter posisi , yaitu argumen baris perintah .
"$@"
meluas ke daftar argumen lengkap , menyebabkan argumen untuklso
fungsi diteruskanls
. (Tidak seperti definisi alias, badan fungsi tidak dikutip; karena itu perlu untuk menghapus\
karakter sebelum$
dan"
.)Karena Anda dapat meneruskan opsi
lso
ketika didefinisikan sebagai fungsi, Anda mungkin ingin menghapus-a
dan-G
opsi dari definisi - Anda dapat meneruskannya secara manual jika Anda menginginkannya. ( The-l
opsi diperlukan untuk rincian seperti hak akses file yang akan ditampilkan sama sekali , sehingga tidak ada manfaat untuk menghapus itu.)Terima kasih kepada techtonik untuk menunjukkan batasan dalam mendefinisikan
lso
sebagai alias, sehingga memotivasi saya untuk memperluas posting ini dengan materi tentang menjadikannya fungsi.1 Orang mungkin memperhatikan bahwa ini tampaknya melanggar aturan umum tentang tidak mem-parsing output dari
ls
.ls
menghasilkan keluaran yang sangat bisa dibaca manusia; ini memperkenalkan kekhasan dan keterbatasan sehingga secara umum tidak cocok sebagai input untuk perintah lain. Dalam hal ini kami menguraikanls
karena kami ingin mempertahankan perilaku yang tepatls
kecuali satu perubahan kami yang ditambahkan.2 Satu batasan alias ini, yang juga berlaku untuk versi fungsi yang ditunjukkan di bawahnya, dan yang dapat dianggap bug, adalah bahwa ia hanya menampilkan tiga digit oktal bahkan ketika digit oktal keempat adalah nol. Sebagai jfmercer telah benar menunjukkan , angka oktal yang ditampilkan di sini tidak mencerminkan sedikit lengket jika sekarang, maupun setuid atau setgid bit.
3 Lebih serius dari sekedar tidak menunjukkan digit oktal keempat adalah bahwa metode ini mengasumsikan mereka tidak diatur, dan jika mereka - jika Anda melihat
t
,s
atauS
dalam izin string yang - maka Anda harus mengabaikan digit oktal . Ini karena bit disimpulkan dari string izin dengan cara yang tidak memperhitungkan bit setuid / setgid yang lengket.sumber
awk: read error (Is a directory)
--color
parameter untuk warna acaralso() { ls -alG "$@" --color | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(" %0o ",k);print}'; }
Cukup rentangkan \ penyederhanaan jawaban terkait 'stat' sebelumnya:
Anda cukup menjalankan:
Output akan berisi izin oktal bersama dengan info lainnya.
Detail (versi dan contoh stat):
Perhatikan: ( 0644 / -rw-r - r--)
sumber
Untuk portabilitas, Anda dapat menggunakan
perl
:Jika Anda ingin melihat ketika kesalahan terjadi, coba:
sumber
Anda bisa menggunakannya
find
dengan-printf
aksi.ls
tidak menampilkan izin oktal, tetapi Anda dapat menggunakanfind
solusi berbasis- ini :Misalnya, untuk memeriksa direktori Video saya:
The
%m
Format specifier menceritakan-printf
tindakan untuk mencetak izin oktal, sedangkan%f
format specifier menyebabkan ia mencetak nama file.Anda dapat meneruskan beberapa nama file ke
find
. Anda bahkan dapat menggunakan gumpalan (misalnya,find * -printf "%m:%f\n"
).Anda tidak harus menggunakan tes seperti
-name
atau-iname
; cukup untuk meneruskan nama file atau direktori yang Anda minati sebagai titik awalfind
. Artinya, berikan nama mereka sebagai argumen segera setelah katafind
, seperti yang ditunjukkan di atas.find
memberi Anda kontrol besar atas bagaimana ia menunjukkan output. Ada dua modifikasi khususnya yang mungkin berguna bagi Anda:Secara default,
find
subdirektori berulang, mirip denganls -R
. Jika Anda tidak inginfind
mengunjungi subdirektori dari titik awal yang Anda lewati, Anda dapat menambahkan-maxdepth 0
(atau menggunakan-maxdepth
dengan nilai lain untuk menunjukkan seberapa dalam Anda menginginkannya).%f
hanya menampilkan nama file, jadi jikafind
harus berulang untuk sampai ke file, Anda mungkin tidak tahu di mana ia berada. Untuk menunjukkan jalur, dimulai dengan titik awal mana saja file ditemukan di bawah, gunakan%p
saja.Lihat
man find
untuk informasi lebih lanjut tentang menggunakanfind
perintah.Metode Lain (
ls
danawk
)Ini dapat digunakan untuk membuat daftar semua file direktori dengan izinnya:
Ini pada dasarnya adalah perintah yang sama seperti pada alias Adam Courtemanche
lso
, yang dikutip oleh jawabannya , jalankan sebagai satu perintah. Jika Anda hanya menggunakan ini sekali, atau pada kesempatan langka, maka Anda mungkin tidak ingin repot menulisnya sebagai fungsi alias atau shell.sumber