Bagaimana cara mengubah izin untuk folder dan semua subfolder dan file dalam satu langkah di Linux? [Tutup]


1806

Saya ingin mengubah izin folder dan semua sub folder dan file dalam satu langkah (perintah) di Linux.

Saya sudah mencoba perintah di bawah ini tetapi hanya berfungsi untuk folder yang disebutkan:

chmod 775 /opt/lampp/htdocs

Apakah ada cara untuk mengatur chmod 755untuk /opt/lampp/htdocsdan semua isinya termasuk subfolder dan file?

Juga, di masa depan, jika saya membuat folder atau file baru di dalam htdocs, bagaimana izin itu secara otomatis diatur 755?

Saya juga melihat tautan ini:

http://stackoverflow.com/questions/3740187/how-to-set-default-chmod-in-linux-terminal


4
Apakah Anda berniat menulis chmod 75 /opt/lampp/htdocsatau haruskah itu benar-benar terjadi chmod 755 /opt/lampp/htdocs?
HelloGoodbye

233
Fakta bahwa pertanyaan dengan suara terbanyak ke-4 tentang Linux adalah "ditutup sebagai di luar topik" adalah lucu. Siapa selain seorang programmer yang peduli dengan chmod? Bagaimana ini di luar topik? Mengapa "izin", "folder", dan "cmod" bahkan diberi tag jika tidak sesuai topik?
Arthur Dent

8
@ArthurDent, karena pertanyaan ini (walaupun sangat valid dan membantu) lebih cocok untuk situs SE yang berfokus pada sistem, seperti SuperUser atau ServerFault. Ini tidak terkait dengan pemrograman.
penentu waktu

26
@timelmer Tentu, tapi saya bertanya lagi, mengapa ada tag "izin", "folder", dan "cmod"? Kapan cmod akan digunakan secara tegas untuk pemrograman?
Arthur Dent

9
Jika Anda ingin benar-benar pilih-pilih, Bash sebenarnya adalah bahasa scripting, tapi begitu juga php, yang sepertinya tidak keberatan.
timelmer

Jawaban:


2957

Jawaban lainnya benar, karena chmod -R 755akan mengatur izin ini untuk semua file dan subfolder di pohon. Tetapi mengapa Anda mau ? Mungkin masuk akal untuk direktori, tetapi mengapa mengatur bit eksekusi pada semua file?

Saya menduga apa yang benar-benar ingin Anda lakukan adalah mengatur direktori ke 755 dan meninggalkan file sendiri atau mengaturnya ke 644. Untuk ini, Anda dapat menggunakan findperintah. Sebagai contoh:

Untuk mengubah semua direktori menjadi 755 ( drwxr-xr-x):

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

Untuk mengubah semua file ke 644 ( -rw-r--r--):

find /opt/lampp/htdocs -type f -exec chmod 644 {} \;

231
Adakah yang mau menjelaskan apa artinya {} \;di ujung telepon?
Nilzor

307
@Nilzor chmod 644 {} \;menentukan perintah yang akan dijalankan oleh finduntuk setiap file. {}diganti oleh path file, dan tanda titik koma menunjukkan akhir perintah (lolos, jika tidak maka akan ditafsirkan oleh shell bukan find).
tobbez

25
"tetapi mengapa mengatur bit eksekusi pada semua file" Mengapa tidak? Saya baru
mengenal

12
@FlavorScape Womble mengatur bit eksekusi secara eksklusif pada direktori yang dikembalikan oleh find. Izin eksekusi pada direktori memungkinkan kelas pengguna untuk membuat daftar isi direktori itu dan untuk memasukkannya. Secara umum Anda ingin r dan x pada direktori agar dapat diakses oleh Anda, meskipun mungkin ada kasus tepi aneh di mana Anda hanya akan menetapkan satu atau yang lain. Lihat panduan ini untuk info lebih lanjut: nixsrv.com/llthw/ex23
Alexandr Kurilin

25
Dengan pengecualian dari sleepynate, setiap respons mengabaikan untuk menjawab aspek pertanyaannya mengenai pengaturan izin untuk file / folder yang dibuat di masa depan .
JGarrido

781

Periksa opsi -R

chmod -R <permissionsettings> <dirname>

Di masa mendatang, Anda dapat menghemat banyak waktu dengan memeriksa halaman manual terlebih dahulu:

man <command name>

Jadi dalam hal ini:

man chmod

147
apa itu man?
Adam

36
itu adalah singkatan dari halaman manual dan merupakan perintah linux yang menunjukkan halaman manual untuk suatu perintah (kebanyakan perintah linux memiliki halaman manual). coba pria atau pria.
Steve Robillard

8
Ini tidak bekerja untuk saya di Terminal di Mac OS X. Di sana saya melakukan "chmod -R <permissionsettings> <dirname> *" dan berhasil.
Einar afslafsson

127
Saya pikir sekarang, sebenarnya lebih cepat memposting di sini atau menggunakan Google daripada menggunakan man. Khusus untuk sesuatu seperti di grepmana jika Anda baru manmengenalnya, akan sangat memakan waktu untuk menemukan contoh dalam dokumen, namun Google atau SO memberikan contoh dalam hitungan detik.
ely

17
Sebagai catatan, mereka yang tidak terbiasa dengan Linux mungkin tidak terbiasa dengan pria. Saya hanya tahu keberadaannya, tetapi mencoba mencari cara untuk menggunakannya akan membutuhkan petualangan google. Mungkin usaha yang bermanfaat, tetapi Anda harus menyadari bahwa saya menemukan posting SANGAT INI melalui google dan menjawab pertanyaan PERSIS yang saya tanyakan. Sumber daya, teman saya. Sumber daya tidak ternilai. Dan Anda mungkin berpikir ini tidak ada gunanya dan bahwa ia seharusnya memeriksa orang itu, tetapi ini telah membantu saya dan ratusan orang lainnya (bahkan ribuan). Jadi tolong pertimbangkan itu.
Soundfx4

391

Jika Anda ingin mengatur izin untuk semua file a+r, dan semua direktori a+x, dan melakukannya secara rekursif melalui pohon subdirektori lengkap, gunakan:

chmod -R a+rX *

The X(yaitu modal X, tidak kecil x!) Diabaikan untuk file (kecuali mereka yang dieksekusi untuk seseorang yang sudah) tapi digunakan untuk direktori.


27
Jawaban yang bagus Perhatikan bahwa * tidak akan cocok dengan file tersembunyi (nama dimulai dengan titik). Mungkin lebih masuk akal untuk digunakan. (untuk direktori saat ini).
Aaron Adams

21
Ini jawaban yang benar. Untuk kasus saya, saya ingin mengatur semua direktori menjadi 775 dan semua file menjadi 664 . @ Pete menjawab dengan luar biasa, membawa saya ke chmoddokumen, di mana saya tahu saya bisa menggunakannya chmod -R g+wX .. Bravo!
chadoh

8
Ini tidak akan menghapus xfile jika sudah memilikinya.
Benoit Duffez

5
Jika tidak sepenuhnya jelas, huruf besar X berarti "membuat semua direktori dapat dieksekusi" (tetapi bukan file).
Matt Browne

4
@BenoitDuffez jika tujuan Anda adalah juga menghapus bit yang dapat dieksekusi dari file, Anda dapat menggabungkan arahan, seperti "a-x + rX" untuk menghapus "x" dari segalanya dan kemudian mengatur "r" untuk semuanya dan "x" untuk direktori saja .
biarawati

144

Anda dapat menggunakan -Rdengan chmoduntuk traversal rekursif dari semua file dan subfolder.

Anda mungkin perlu sudo karena tergantung pada LAMP yang diinstal oleh pengguna saat ini atau yang lain:

sudo chmod -R 755 /opt/lampp/htdocs

17
Entah bagaimana, sudo chmod 755 -R /directorytidak berhasil tetapi sudo chmod -R 755 /directoryberhasil. Aneh. Omong-omong, saya menggunakan Mac os x.
lomse

8
Ini benar menurut pengalaman saya. Bendera harus muncul langsung setelah chmod, bukan di mana pun di string.
orionrush

1
Perintah tertulis di atas salah. Perintah rekursif yang benar adalah: sudo chmod -R 755 / opt / lampp / htdocs Catatan: -R harus sebelum 755
Sandip Patel - SM

Solusi ini berfungsi baik untuk Redhat. Terima kasih!
Lavande

Bekerja dengan baik pada RHEL dan sudo chmod 755 -Rbekerja
AnBisw

79

Perintah rekursif yang benar adalah:

sudo chmod -R 755 /opt/lampp/htdocs

-R: ubah setiap sub folder termasuk folder saat ini


1
hai Anda yakin tentang folder saat ini Anda satu meskipun jalan?
shareef

OSX MENGGUNAKAN: sudo chmod 777 log / -R MENDAPATKAN: chmod: -R: Tidak ada file atau direktori tersebut HARUS MENJADI: sudo chmod -R 777 log /
elad silver

76

Untuk mengatur ke semua subfolder (rekursif) gunakan -R

chmod 755 /folder -R

Dan gunakan umask untuk mengatur default ke folder baru / file cd / folder umask 755


24
JANGAN atur umask755! Anda tidak akan dapat membuat daftar, membaca atau menggunakan file atau direktori yang Anda buat!
nyenyak

14
Apakah maksud Anda umask 022?
Xkeeper

4
ini mengatur semua ke 755, termasuk file.!
Patrick Mutwiri

@syncynate Apa yang kamu bicarakan? 755 berarti pemilik dapat membaca, menulis, dan mengeksekusi, dan semua pengguna lain dapat membaca dan mengeksekusi, tetapi tidak menulis ke objek
svin83

2
@NicHartley @ svin83 umask adalah bit yang akan ditutup dari izin, jadi ini secara efektif kebalikan dari chmod. λ ~ → umask 022 λ ~ → umask -S u=rwx,g=rx,o=rx λ ~ → umask 755 λ ~ → umask -S u=,g=w,o=w
nyenyak

51

chmod 755 -R /opt/lampp/htdocsakan mengatur izin secara rekursif. Tidak ada cara untuk mengatur izin untuk file secara otomatis hanya dalam direktori ini yang dibuat setelah Anda mengatur izin, tetapi Anda dapat mengubah izin file default seluruh sistem Anda dengan dengan pengaturan umask 022.


9
Jawaban sleepynate adalah HANYA yang benar. Poster itu mengajukan dua pertanyaan: 1) Bagaimana cara memperbaiki izin pada file dan folder, dan 2) bagaimana cara mengubah default (yang berarti file "masa depan"). Seperti yang dikatakan nate, yang pertama dengan "chmod", dan yang kedua dengan "umask". Saya juga menambahkan bahwa TIDAK ADA CARA untuk mengubah umask hanya pada 1 direktori ... umask adalah "semua atau tidak sama sekali" per pengguna. Namun tidak ada yang menghentikan Anda dari membuat pengguna baru, yang berbagi grup dengan Anda, sehingga Anda bisa 'sudo -u someuser [buat file] ". Itu sedikit berpikir di luar kotak, tapi ini solusi yang baik.
Scott Prive

Saya pikir Anda benar, tetapi tidak inheritbisa menjadi solusi untuk banyak kasus atau akankah ini bekerja dengan NTFS-3G secara eksklusif?
Sebastian Schlicht

tanpa memberikan izin kepada folder dapat dibuat di masa depan, orang mungkin tidak dapat menyalin folder, katakanlah myforlderdari tempat lain (seperti PC) ke direktori target ini (di server) karena ia akan mencoba membuat folder baru di direktori target dengan nama myfolder yang Anda tidak memiliki izin untuk melakukannya. Seperti yang saya miliki root, saya hanya menggunakan chown -R username:usergroup /directory.
Jason Goal

27

Anda mungkin ingin mempertimbangkan jawaban yang diberikan oleh nik di superuser ini dan menggunakan "satu chmod" untuk semua file / folder seperti ini:

chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)

9
Peringatan, mudah untuk lari ke batas baris perintah.
Lothar

1
Saya memiliki kesalahan ini: -bash: / bin / chmod: Daftar argumen terlalu panjang
Oleg Abrazhaev

Akan lebih baik menggunakan -execopsi finduntuk mengatasi Argument list too longkesalahan.
Miravall


20

Menggunakan:

sudo chmod 755 -R /whatever/your/directory/is

Namun, berhati-hatilah dengan itu. Ini benar-benar dapat melukai Anda jika Anda mengubah izin file / folder yang salah.


20

Berikut cara lain untuk mengatur direktori ke 775 dan file ke 664.

find /opt/lampp/htdocs \
\( -type f -exec chmod ug+rw,o+r {} \; \) , \
\( -type d -exec chmod ug+rwxs,o+rx {} \; \)

Mungkin terlihat panjang, tapi cukup keren karena tiga alasan:

  1. Memindai melalui sistem file hanya sekali, bukan dua kali.
  2. Memberikan kontrol yang lebih baik atas bagaimana file ditangani vs. bagaimana direktori ditangani. Ini berguna ketika bekerja dengan mode khusus seperti bit sticky , yang mungkin ingin Anda terapkan ke direktori tetapi bukan file.
  3. Gunakan teknik langsung dari manhalaman (lihat di bawah).

Perhatikan bahwa saya belum mengkonfirmasi perbedaan kinerja (jika ada) antara solusi ini dan hanya menggunakan dua perintah find (seperti dalam solusi Peter Mortensen). Namun, melihat contoh serupa dalam manual ini menggembirakan.

Contoh dari man findhalaman:

find / \
\( -perm -4000 -fprintf /root/suid.txt %#m %u %p\n \) , \
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)

Traverse the filesystem just once, listing setuid files and  direc‐
tories into /root/suid.txt and large files into /root/big.txt.

Bersulang


Sekarang, bagaimana mengubahnya dalam skrip shell sehingga kita dapat menjalankan folder $ openmod?
StR

Teman-teman, silakan gunakan xargs. Ini menghemat ribuan proses pemanggilan.
seanahern

13

chmod -R 755 directory_nameberfungsi, tetapi bagaimana Anda akan menyimpan file baru ke 755 juga? Izin file menjadi izin default.


Saya melakukannya tetapi tidak dapat membuka terminal dari sana. Saya tidak bisa memperbaikinya.
Kavindu Gayantha

9

Untuk Mac OS X 10.7 (Lion), itu adalah:

chmod -R 755 /directory

Dan ya, seperti yang dikatakan semua orang lain, berhati-hatilah saat melakukan ini.


9

Anda ingin memastikan bahwa file dan direktori yang sesuai adalah chmod-ed / izin untuk mereka yang sesuai. Untuk semua direktori yang Anda inginkan

find /opt/lampp/htdocs -type d -exec chmod 711 {} \;

Dan untuk semua gambar, JavaScript, CSS, HTML ... yah, Anda seharusnya tidak mengeksekusinya. Jadi gunakan

chmod 644 img/* js/* html/*

Tetapi untuk semua kode logika (misalnya kode PHP), Anda harus mengatur izin agar pengguna tidak dapat melihat kode itu:

chmod 600 file

6

Saya pikir Adam bertanya bagaimana cara mengubah nilai umask untuk semua proses yang ingin beroperasi pada /opt/lampp/htdocsdirektori.

Mask mode pembuatan file pengguna (umask) digunakan untuk menentukan izin file untuk file yang baru dibuat. Ini dapat digunakan untuk mengontrol izin file default untuk file baru.

jadi jika Anda akan menggunakan beberapa jenis program ftp untuk mengunggah file ke /opt/lampp/htdocsAnda perlu mengkonfigurasi server ftp Anda untuk menggunakan umask yang Anda inginkan.

Jika file / direktori dibuat misalnya dengan php, Anda perlu memodifikasi kode php

<?php
umask(0022);
// other code
?>

jika Anda akan membuat file / folder baru dari sesi bash Anda, Anda dapat menetapkan nilai umask di profil shell Anda ~ / .bashrc Atau Anda dapat mengatur umask di /etc/bashrcatau /etc/profilefile untuk semua pengguna. tambahkan yang berikut ke file: umask 022

Sample umask Values and File Creation Permissions
If umask value set to   User permission     Group permission     Others permission
000                         all              all                   all
007                         all              all                   none
027                         all          read / execute            none

Dan untuk mengubah izin untuk file yang sudah dibuat, Anda dapat menggunakan find. Semoga ini membantu.


4

Ada dua jawaban untuk menemukan file dan menerapkannya chmod. Yang pertama adalah findfile dan berlaku chmodseperti yang ditemukan (seperti yang disarankan oleh @WombleGoneBad).

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

Solusi kedua adalah membuat daftar semua file dengan findperintah dan menyediakan daftar ini ke chmodperintah (seperti yang disarankan oleh @lamgesh).

chmod 755 $(find /path/to/base/dir -type d)

Kedua versi ini berfungsi dengan baik selama jumlah file yang dikembalikan oleh findperintah kecil. Solusi kedua terlihat bagus untuk mata dan lebih mudah dibaca daripada yang pertama. Jika ada banyak file, solusi kedua menghasilkan kesalahan:Argument list too long.

Jadi saran saya adalah

  1. Gunakan chmod -R 755 /opt/lampp/htdocsjika Anda ingin mengubah izin semua file dan direktori sekaligus.
  2. Gunakan find /opt/lampp/htdocs -type d -exec chmod 755 {} \;jika jumlah file yang Anda gunakan sangat besar. The -type xpilihan pencarian untuk jenis tertentu dari file saja, di mana d digunakan untuk menemukan direktori, f file dan l untuk link.
  3. Gunakan chmod 755 $(find /path/to/base/dir -type d)sebaliknya
  4. Lebih baik menggunakan yang pertama dalam situasi apa pun

2

Ini sangat sederhana.

Di Terminal buka file manager. Contoh: sudo nemo. Pergi /opt/kemudian klik Properti → Izin . dan kemudian lainnya . Akhirnya, ubah untuk membuat dan menghapus dan mengajukan akses untuk membaca dan menulis dan mengklik tombol berlaku ... Dan bekerja.


apa itu sudo nemo?
Vikranth Inti
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.