Bagaimana saya bisa mengubah semua izin file direktori dalam satu perintah di Unix?
Bagaimana saya bisa mengubah semua izin file direktori dalam satu perintah di Unix?
Jawaban:
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.
644atau bahwa ia menetapkan -xpada direktori sama sekali? Pertanyaannya hanya menetapkan bahwa ia ingin mengubah izin, bukan untuk apa yang khusus.
chmod -R go=u,go-w /dir
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.
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.
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.