Ubah semua izin file dan folder direktori ke 644/755

184

Bagaimana saya mengubah semua file menjadi 644 dan semua folder menjadi 755 menggunakan chmoddari linuxcommand prompt? (Terminal)

hugo der hungrige
sumber
6
Jika seseorang (@animuson) berbaik hati menjelaskan kepada saya, mengapa pertanyaan chmod ini di luar topik dan yang lainnya (14,438 hasil) di sini tidak ...
hugo der hungrige
Agak terlambat, tetapi perintah yang satu ini juga akan melakukan jawaban yang diterima dalam satu kesempatan: chmod -R a = r, a + X, u + w / your / path
MichaelICE
Pertanyaan bagus, tidak pantas ditutup. Ini lebih baik dipindahkan ke sub situs stackoverflow daripada ditutup.
Erik Friesen
1
@hugoderhungrige artinya pergi bertanya di situs Server seperti http://superuser.com:: P tapi pertanyaan ini membantu saya di sini, terima kasih.
emotalitas
3
Jawaban singkat:chmod -R u+rwX,go+rX,go-w /foo
kenorb

Jawaban:

345

Satu pendekatan dapat menggunakan find:

untuk direktori

find /desired_location -type d -print0 | xargs -0 chmod 0755

untuk file

find /desired_location -type f -print0 | xargs -0 chmod 0644
hugo der hungrige
sumber
21
hanya untuk orang lain seperti saya, ini tidak berfungsi sebagai gantinya mencoba sudo find /your/location -type f -exec chmod 644 {} \;untuk file dan sudo find /your/location -type d -exec chmod 755 {} \;untuk direktori
NineCattoRules
Saya menjalankan solusi asli dan itu mengacaukan izin saya pada file dan direktori. Awas! solusi pada komentar itu berhasil, terima kasih!
Mahsa Mortazavi
3
Kenapa (?) Lebih baik tham chmod -R a=r,u+w,a+X /foo?
Peter Krauss
gagal denganunable to execute /bin/chmod: Argument list too long
vladkras
Bagaimana jika saya hanya menginginkan subfolder menjadi chmod 755 ketika menentukan lokasi yang diinginkan? Karena ini juga akan membuat folder induk 755
MaXi32
105

Cara termudah adalah melakukan:

chmod -R u+rwX,go+rX,go-w /path/to/dir

yang pada dasarnya berarti:

untuk chberkas ange modes -Recursively dengan memberikan:

  • user: read, writus dan Xizin ecute,
  • gopengguna roup dan lainnya: izin read dan e Xecute, tetapi bukan -wizin ritus.

Harap dicatat bahwa Xakan membuat direktori dapat dieksekusi, tetapi bukan file, kecuali itu sudah dapat dicari / dieksekusi.

+X - membuat direktori atau file dapat dicari / dieksekusi oleh semua orang jika sudah dapat dicari / dieksekusi oleh siapa pun.

Silakan periksa man chmodrincian lebih lanjut.

Lihat juga: Bagaimana cara chmod semua direktori kecuali file (secara rekursif)? di SU

kenorb
sumber
7
chmod -R a = r, u + w, a + X / foo
John Allsup
9
Jawaban ini, meskipun rapi, memang memiliki masalah: file yang dapat dieksekusi sebelum menjalankan perintah akan dapat dieksekusi setelahnya. Lihat jawaban @JohnAllsup untuk perintah yang tidak memiliki cacat ini.
mzuther
4
@mzuther kecuali masalah ini sebenarnya fitur untuk Anda
RiaD
37

Yang terpendek yang bisa saya pikirkan adalah:

chmod -R a=r,u+w,a+X /foo

yang bekerja pada GNU / Linux, dan saya percaya pada Posix secara umum (dari bacaan saya: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html ).

Apa yang dilakukan adalah:

  1. Setel file / direktori ke r__r__r__ (0444)
  2. Tambahkan w untuk pemilik, untuk mendapatkan rw_r__r__ (0644)
  3. Atur eksekusi untuk semua jika direktori (0755 untuk dir, 0644 untuk file).

Yang penting, izin langkah 1 menghapus semua bit eksekusi, jadi langkah 3 hanya menambahkan bit eksekusi kembali untuk direktori (tidak pernah file). Selain itu, ketiga langkah terjadi sebelum direktori diulang (jadi ini tidak setara dengan misalnya

chmod -R a=r /foo
chmod -R u+w /foo
chmod -R a+X /foo

karena a = r menghapus x dari direktori, maka chmod tidak dapat mengulanginya.)

John Allsup
sumber
cemerlang! banyak membantu saya
Jannie Theunissen
13

Yang paling mudah saya ingat adalah dua operasi:

chmod -R 644 dirName
chmod -R +X dirName

+ X hanya memengaruhi direktori.

Markus D
sumber
1
Sederhana dan aman
Marco Marsala
12

Pada https://help.directadmin.com/item.php?id=589 mereka menulis:

Jika Anda memerlukan cara cepat untuk mereset data public_html Anda ke 755 untuk direktori dan 644 untuk file, maka Anda dapat menggunakan sesuatu seperti ini:

cd /home/user/domains/domain.com/public_html
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

Saya menguji dan ... berhasil!

Christian Michael
sumber
Penolong! Terima kasih atas solusi bersih untuk masalah ini! Bekerja untuk saya ketika perlu memperbaiki masalah izin untuk pemasangan WordPress!
twknab
Berfungsi dengan baik untuk membuat penyesuaian dalam direktori.
Christian Berendt
8

Ini bekerja untuk saya:

find /A -type d -exec chmod 0755 {} \;
find /A -type f -exec chmod 0644 {} \;
Jair Reina
sumber
3
Hati-hati: Perintah ini tidak akan menangani file atau direktori dengan spasi di namanya. Perintah dalam jawaban yang diterima akan.
Chad Nouis
1
Peringatan ini hanya berlaku, jika {} tidak dikelilingi oleh tanda kutip ... dengan demikian, tidak ada alasan untuk bermain-main dengan print0 dan xargs -0, berikut sudah cukup:find /A -type X -exec chmod Y '{}' \;
Michael Stumpfl
6

Lakukan keduanya dalam sekali jalan dengan:

find -type f ... -o -type d ...

Seperti pada, cari tipe f ATAU ketik d, dan lakukan yang pertama ... untuk file dan yang kedua ... untuk dir. Secara khusus:

find -type f -exec chmod --changes 644 {} + -o -type d -exec chmod --changes 755 {} +

Tinggalkan --changesjika Anda ingin itu bekerja secara diam-diam.

mza
sumber
2

Jika Anda memerlukan cara cepat untuk mereset data public_html Anda ke 755 untuk direktori dan 644 untuk file, maka Anda dapat menggunakan sesuatu seperti ini:

cd /home/user/domains/domain.com/public_html
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

selain itu, jika Anda tahu PHP berjalan sebagai pengguna dan bukan sebagai "apache", maka Anda dapat mengatur file PHP ke 600, untuk tingkat keamanan tambahan, misalnya:

find . -type f -name '*.php' -exec chmod 600 {} \;

Anda dapat menemukan sumber ini di sini: https://help.directadmin.com/item.php?id=589

Hemant Kumar
sumber
-9

Ini juga bisa bekerja:

chmod -R 755 *  // All files and folders to 755.

chmod -R 644 *.*  // All files will be 644.
Puneet Tiwari
sumber
1
JANGAN SIAPA PUN SIAPA PUN! itu mempengaruhi server lengkap!
T.Todua