Bagaimana cara membuat direktori dan memberikan izin dalam satu perintah di Linux?
Saya harus membuat banyak folder dengan izin penuh 777
.
Perintah
mkdir path/foldername
chmod 777 path/foldername
Saya tidak suka membuat dan memberikan izin dalam dua perintah. Bisakah saya melakukan ini dalam satu perintah?
mkdir temp; chmod 777 temp
adalah satu baris. Anda dapat membuat 'temp' sebagai variabel dan menyimpannya sebagai perintah bash. Apakah ini yang ingin Anda lakukan?Jawaban:
Menurut halaman manual mkdir ...
sumber
-p
@DisplayName yang sudah disebutkan di atas, ada juga masalah lainnya. Ini-m
akan berlaku hanya jika direktori benar-benar dibuat. Jika sudah ada modenya tidak akan diubah. Bergantung pada konteks Anda, ini mungkin baik atau buruk.harus memberikan apa yang kamu inginkan. Sadarilah bahwa setiap pengguna memiliki hak untuk menulis menambah dan menghapus file di direktori itu.
sumber
three
, dengan izin default yang cukup untuk jalur ke sana.Ketika direktori sudah ada:
Jika direktori tidak ada dan Anda ingin membuat direktori induk:
sumber
find /your/dirs -type d -exec chmod 755 {} \;
IMO, lebih baik menggunakan
install
perintah dalam situasi seperti itu. Saya mencoba untuksystemd-journald
terus melakukan boot ulang.sumber
Anda dapat menulis skrip shell sederhana, misalnya:
Setelah disimpan, dan flag yang dapat dieksekusi diaktifkan, Anda dapat menjalankannya sebagai ganti mkdir dan chmod:
Namun, jawaban alex jauh lebih baik karena memunculkan satu proses, bukan tiga. Saya tidak tahu tentang
-m
opsi itu.sumber
Sekadar untuk memperluas dan meningkatkan beberapa jawaban di atas:
Pertama, saya akan memeriksa halaman manual mkdir untuk GNU Coreutils 8.26 - ini memberi kita informasi ini tentang opsi '-m' dan '-p' (juga dapat diberikan sebagai --mode = MODE dan --parents, masing-masing ):
Pernyataan tersebut tidak jelas dan tidak jelas menurut saya. Tetapi pada dasarnya, ia mengatakan bahwa Anda dapat membuat direktori dengan izin yang ditentukan oleh "notasi numerik chmod" (oktal) atau Anda dapat menggunakan "cara lain" dan menggunakan / umask Anda.
Catatan tambahan: Saya mengatakan "dengan cara lain" karena nilai umask sebenarnya persis seperti namanya - topeng , menyembunyikan / menghapus izin daripada "memberikan" mereka seperti dengan notasi oktal numerik chmod.
Anda dapat menjalankan perintah shell-builtin
umask
untuk melihat umask 3-digit Anda; bagi saya, itu022
. Ini berarti bahwa ketika saya mengeksekusimkdir yodirectory
di folder tertentu (katakanlah, mahome) danstat
itu, saya akan mendapatkan beberapa keluaran yang menyerupai ini:Sekarang, untuk menambahkan sedikit lagi tentang izin oktal tersebut. Ketika Anda membuat sebuah direktori, "sistem Anda" mengambil perms direktori default Anda '[yang berlaku untuk direktori baru (nilainya harus 777)] dan menampar di topeng yo (u), secara efektif menyembunyikan beberapa perms'. Umask saya adalah 022 - sekarang jika kita "mengurangi" 022 dari 777 (secara teknis menguranginya merupakan penyederhanaan yang berlebihan dan tidak selalu benar - kita sebenarnya mematikan perm atau mask mereka) ... kita mendapatkan 755 seperti yang dinyatakan (atau "statted" ) sebelumnya.
Kita dapat menghilangkan '0' di depan 3-digit oktal (jadi tidak harus 4 digit) karena dalam kasus kita, kita tidak ingin (atau lebih tepatnya tidak menyebutkan) stickybits, setuids atau setgids (Anda mungkin ingin memeriksanya, btw, mungkin berguna karena Anda akan 777). Jadi dengan kata lain, 0777 menyiratkan (atau setara dengan) 777 (tetapi 777 belum tentu setara dengan 0777 - karena 777 hanya menentukan izin, bukan setuids, setgids, dll.)
Sekarang, untuk menerapkan ini pada pertanyaan Anda dalam arti yang lebih luas - Anda (sudah) memiliki beberapa opsi. Semua jawaban di atas berfungsi (setidaknya menurut coreutils saya). Tetapi Anda mungkin (atau kemungkinan besar) mengalami masalah dengan solusi di atas saat Anda ingin membuat sub direktori (direktori bersarang) dengan 777 izin sekaligus. Secara khusus, jika saya melakukan hal berikut di mahome dengan umask 022:
Saya akan mendapatkan izin
755
untuk keduanyayodirectory
danyostuff
, dengan hanya777
izin untukmastuffinyostuff
. Jadi tampaknyaumask
hanya itu yang ditamparyodirectory
danyostuff
... untuk menyiasatinya kita dapat menggunakan subkulit:( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
dan hanya itu. 777 izin untuk yostuff, mastuffinyostuff, dan yodirectory.
sumber
Anda dapat menggunakan perintah berikut untuk membuat direktori dan memberikan izin pada saat yang bersamaan
sumber
Jangan lakukan:
mkdir -m 777 -p a/b/c
karena itu hanya akan mengatur izin777
pada direktori terakhir, c; a dan b akan dibuat dengan izin default dari umask Anda.Alih-alih membuat direktori baru dengan izin
777
, jalankanmkdir -p
di subkulit tempat Anda mengganti umask:Perhatikan bahwa ini tidak akan mengubah izin jika salah satu dari a, b dan c sudah ada.
sumber