Cara mengubah izin file untuk direktori dalam satu perintah

11

Bagaimana saya bisa mengubah semua izin file direktori dalam satu perintah di Unix?

Der Hochstapler
sumber
Apakah maksud Anda Anda ingin mengubah izin untuk semua file di direktori? Apakah Anda ingin ini masuk ke direktori bersarang juga? Apakah Anda ingin mengubah izin direktori itu sendiri, atau hanya file di dalamnya? Terakhir, apakah Anda mencoba mencari situs ini terlebih dahulu sebelum memposting pertanyaan Anda?
Eter

Jawaban:

21

Untuk mengubah izin pada entri file atau direktori secara non-rekursif, gunakan chmodperintah (lihat man chmod untuk membaca lebih lanjut tentang opsi spesifiknya):

chmod +x dir  # Set a directory to be listable
chmod +x file # Set a file to be executable

Untuk mengubah pemilik file / direktori secara rekursif (memengaruhi semua keturunan):

chown -R username           dir # Recursively set user
chown -R username:groupname dir # Recursively set user and group

Untuk mengubah bit izin dari semua file dalam direktori, secara rekursif:

find dir -type f -exec chmod 644 {} ';' # make all files       rw-r-r-

Untuk mengubah bit izin dari semua direktori:

find dir -type d -exec chmod 755 {} ';' # make all directories rwxr-xr-x

Akan lebih baik jika Anda bisa melakukan ini:

chmod -R 755 dir

Namun, ini memiliki masalah. Itu memperlakukan file dan direktori yang sama. Perintah di atas membuat direktori dapat didaftar dan dibaca oleh semua pengguna, tetapi juga membuat semua file dapat dieksekusi, yang biasanya tidak ingin Anda lakukan.

Jika kami mengubahnya 644, kami mendapatkan masalah lain:

$ chmod -R 644 x2
chmod: cannot access `x2/authors.html': Permission denied
chmod: cannot access `x2/day_of_week.plot': Permission denied
chmod: cannot access `x2/day_of_week.dat': Permission denied
chmod: cannot access `x2/commits_by_year.png': Permission denied
chmod: cannot access `x2/index.html': Permission denied
chmod: cannot access `x2/commits_by_year.plot': Permission denied
chmod: cannot access `x2/commits_by_year_month.plot': Permission denied
chmod: cannot access `x2/files_by_date.png': Permission denied
chmod: cannot access `x2/files.html': Permission denied
...

Masalahnya adalah bahwa 644mengeluarkan bit daftar direktori, dan efek samping ini mencegah traversal lebih lanjut dari pohon file. Anda dapat mengatasi masalah ini dengan menggunakan sudo, tetapi Anda masih berakhir dengan direktori yang sama sekali tidak berguna bagi pengguna non-root.

Intinya adalah, chmod -Rberfungsi dengan baik dalam beberapa kasus (misalnya chmod -R g-r), tetapi tidak dalam kasus di mana Anda ingin mengacaukan -xbit, karena beroperasi pada file dan direktori tanpa pandang bulu.

Joey Adams
sumber
Mengapa Anda berasumsi bahwa ia ingin mengatur 644atau bahwa ia menetapkan -xpada direktori sama sekali? Pertanyaannya hanya menetapkan bahwa ia ingin mengubah izin, bukan untuk apa yang khusus.
Reese Moore
@Reese Moore: Anda benar. Penanya bahkan tidak mengatakan apa-apa tentang mengubah izin secara rekursif.
Joey Adams 8-10
1
Anda biasanya ingin menggunakan + dan - mode simbolis untuk itu; yaitu,chmod -R go=u,go-w /dir
dannysauer
6

chmodmemiliki -Rbendera yang berarti untuk mengubah izin pada file dan direktori secara rekursif.

Anda dapat menggunakan modal 'X' untuk melakukan hal yang benar untuk folder: 'X' = "jalankan / cari hanya jika file tersebut adalah direktori atau sudah memiliki izin eksekusi untuk beberapa pengguna"

Jadi, misalnya: chmod -R ug = rwX, o-rwx.

Akan membuat seluruh pohon dapat diakses oleh pemilik dan grup setiap file, dan tidak dapat diakses oleh orang lain. Setiap file yang sudah dapat dieksekusi masih dapat dieksekusi setelah itu, dan semua direktori akan memiliki 'x' untuk pengguna dan grup dan bukan untuk yang lain.

Reese Moore
sumber
Coba chmod -R 444 somedirpada direktori dengan file di dalamnya. Anda mendapatkan Permission deniedkarena flag -x dikeluarkan dari direktori, dan itu perlu untuk terus membaca direktori.
Joey Adams 8-10
1
Tambahan yang berguna untuk ini adalah sintaks X = Y. Misalnya Anda dapat mengatur izin grup ke izin pengguna menggunakan chmod -R g = u dir untuk mengatur grup dan pengguna yang setara. Ini berfungsi di sekitar hal-hal seperti dir yang perlu dieksekusi sementara file "biasa" tidak.
Paul Rubel
3
chmod -R <file permission> *

Dari halaman manual dari chmod:

-R, --recursive
              change files and directories recursively

Gunakan chmoddengan -Rsakelar untuk banyak arah yang memiliki struktur sub direktori yang memiliki jutaan file di dalamnya dan Anda ingin mengubah izin file dari file-file ini secara bersamaan dalam satu kesempatan.

Izin file mungkin untuk misalnya. 777, 755, 644 dll.

kushal sp
sumber