Cara membuat direktori dan memberikan izin dalam satu perintah

107

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?

poorani
sumber
1
mkdir temp; chmod 777 tempadalah satu baris. Anda dapat membuat 'temp' sebagai variabel dan menyimpannya sebagai perintah bash. Apakah ini yang ingin Anda lakukan?
styfle
1
hai @ white-rose, silakan lihat jawaban terbaru, itu harus jawaban yang diterima. bonus, ini menggabungkan mkdir, chmod DAN chown dalam satu peluru!
Costin Gușă

Jawaban:

205

Menurut halaman manual mkdir ...

mkdir -m 777 dirname
alex
sumber
1
Bisakah kamu ceritakan tentang opsi -m?
poorani
@Whiterose -m opsi untuk Mode. Menetapkan bit izin untuk direktori yang baru dibuat ke nilai yang ditentukan oleh variabel Mode. Variabel Mode mengambil nilai yang sama dengan parameter Mode untuk perintah chmod, baik dalam bentuk simbolik maupun numerik.
TMKasun
14
mkdir -p -m rusak, karena mode hanya diterapkan ke direktori terakhir di jalur yang Anda ketikkan. Misalnya, mkdir -p -m 707 one / two / three. Meskipun ketiga direktori tersebut baru dibuat, hanya yang terakhir yang akan memiliki izin yang diminta, dan yang lainnya, default. install -d -m rusak dengan cara yang sama.
Nama Tampilan
Selain masalah seputar -p@DisplayName yang sudah disebutkan di atas, ada juga masalah lainnya. Ini -makan berlaku hanya jika direktori benar-benar dibuat. Jika sudah ada modenya tidak akan diubah. Bergantung pada konteks Anda, ini mungkin baik atau buruk.
Adam Badura
1
mkdir -m777 direktori
Hugo Deiró
19
install -d -m 0777 /your/dir

harus memberikan apa yang kamu inginkan. Sadarilah bahwa setiap pengguna memiliki hak untuk menulis menambah dan menghapus file di direktori itu.

Markus W Mahlberg
sumber
1
bonus, Anda juga dapat menambahkan -g dan / atau -o dan Anda dapat memiliki mkdir, chmod, dan chown dalam satu kesempatan!
Costin Gușă
4
Itu rusak. instal -d -m 070 satu / dua / tiga. Meskipun ketiga direktori di jalur tersebut baru dibuat, hanya yang terakhir yang akan memiliki set izin yang diminta. mkdir -p -m rusak dengan cara yang sama.
Nama Tampilan
@DisplayName: yang menyetel izin yang benar three, dengan izin default yang cukup untuk jalur ke sana.
Markus W Mahlberg
16

Ketika direktori sudah ada:

mkdir -m 777 /path/to/your/dir

Jika direktori tidak ada dan Anda ingin membuat direktori induk:

mkdir -m 777 -p /parent/dirs/to/create/your/dir
Pedro Trujillo
sumber
Ini hanya akan memberikan izin 777 ke subdirektori terakhir. Bagaimana saya bisa melakukan ini dan memberikan izin 777 ke semua direktori induk juga?
Levi Johansen
1
Saya tidak punya jawaban untuk ini tapi saya yakin jawabannya ada di sini: stackoverflow.com/questions/3740152/…
Pedro Trujillo
Perhatikan bahwa perintah ini untuk mengatasi masalah ini "Cara membuat direktori dan memberikan izin dalam satu perintah". Saya yakin solusi untuk pertanyaan Anda akan seperti ini:find /your/dirs -type d -exec chmod 755 {} \;
Pedro Trujillo
10

IMO, lebih baik menggunakan installperintah dalam situasi seperti itu. Saya mencoba untuk systemd-journaldterus melakukan boot ulang.

install -d  -g systemd-journal -m 2755 -v /var/log/journal
Badi
sumber
7

Anda dapat menulis skrip shell sederhana, misalnya:

#!/bin/bash
mkdir "$1"
chmod 777 "$1"

Setelah disimpan, dan flag yang dapat dieksekusi diaktifkan, Anda dapat menjalankannya sebagai ganti mkdir dan chmod:

./scriptname path/foldername

Namun, jawaban alex jauh lebih baik karena memunculkan satu proses, bukan tiga. Saya tidak tahu tentang -mopsi itu.

Delan Azabani
sumber
Terima kasih delan .. Saya juga menulis perintah itu dalam skrip shell .. Tetapi saya ingin melakukannya dalam satu perintah.
poorani
7

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 ):

... atur mode file (seperti dalam chmod), bukan a = rwx - umask

... tidak ada error jika sudah ada, buat direktori induk sesuai kebutuhan

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 umaskuntuk melihat umask 3-digit Anda; bagi saya, itu 022. Ini berarti bahwa ketika saya mengeksekusi mkdir yodirectorydi folder tertentu (katakanlah, mahome) dan statitu, saya akan mendapatkan beberapa keluaran yang menyerupai ini:

               755                   richard:richard         /mahome/yodirectory
 #          permissions                 user:group      what I just made (yodirectory),
 # (owner,group,others--in that order)                 where I made it (i.e. in mahome)
 # 

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:

mkdir -m 777 -p yodirectory/yostuff/mastuffinyostuff
# OR (you can swap 777 for 0777 if you so desire, outcome will be the same)
install -d -m 777 -p yodirectory/yostuff/mastuffinyostuff

Saya akan mendapatkan izin 755untuk keduanya yodirectorydan yostuff, dengan hanya 777izin untuk mastuffinyostuff. Jadi tampaknya umaskhanya itu yang ditampar yodirectorydan yostuff... untuk menyiasatinya kita dapat menggunakan subkulit:

( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )

dan hanya itu. 777 izin untuk yostuff, mastuffinyostuff, dan yodirectory.

YenForYang
sumber
7

Anda dapat menggunakan perintah berikut untuk membuat direktori dan memberikan izin pada saat yang bersamaan

mkdir -m777 path/foldername 
Omer Gafar
sumber
1
tidak ada spasi antara -m dan 777
Omer Gafar
1

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, jalankan mkdir -pdi subkulit tempat Anda mengganti umask:

(umask u=rwx,g=rwx,o=rwx && mkdir -p a/b/c)

Perhatikan bahwa ini tidak akan mengubah izin jika salah satu dari a, b dan c sudah ada.

John Mellor
sumber
Ya, jika Anda mengirimkan umask 4 digit, digit terdepannya harus selalu nol (meskipun Anda dapat menghilangkannya). Mungkin untuk simetri dengan chmod, di mana digit oktal pertama mengatur bit setuid, setgid dan sticky, tetapi jika demikian itu agak tidak berguna karena umask tidak mengizinkan Anda untuk membatasinya.
John Mellor