Bir dizin nasıl oluşturulur ve tek komutta izin verilir


108

Linux'ta tek komutta bir dizin nasıl oluşturulur ve izin verilir?

Tam izinle çok sayıda klasör oluşturmam gerekiyor 777.

Komutlar

mkdir path/foldername
chmod 777 path/foldername 

İki komutta oluşturmayı ve izin vermeyi sevmiyorum. Bunu tek komutta yapabilir miyim?


1
mkdir temp; chmod 777 tempbir satırdır. Bir değişken 'temp' yapabilir ve onu bir bash komutu olarak kaydedebilirsiniz. Yapmak istediğin bu mu?
styfle

1
merhaba @ beyaz-gül, lütfen en son cevaba bakın, kabul edilen cevap olmalıdır. bonus, mkdir, chmod VE chown'u tek bir mermide birleştirir!
Costin Gușă

Yanıtlar:


205

Göre Mkdir Erkeğin sayfasında ...

mkdir -m 777 dirname

1
Bana -m seçeneğinden bahseder misiniz?
poorani

@Whiterose -m seçeneği Mod içindir. Yeni oluşturulan dizinler için izin bitlerini Mod değişkeni tarafından belirtilen değere ayarlar. Mod değişkeni, sembolik veya sayısal biçimde chmod komutunun Mode parametresiyle aynı değerleri alır.
TMKasun

15
mkdir -p -m, kip yalnızca yazdığınız yoldaki son dizine uygulandığından bozuktur. Örneğin, mkdir -p -m 707 bir / iki / üç. Her üç dizin de yeni oluşturulmuş olsa bile, yalnızca sonuncusu istenen izinlere sahip olacak ve diğerleri varsayılan olarak olacaktır. install -d -m aynı şekilde bozulur.
Görünen Ad

-pYukarıda bahsedilen @DisplayName ile ilgili sorunun yanı sıra başka bir tane daha var. -mBir dizin gerçekten oluşturulmadan yalnızca geçerli olacaktır. Zaten mevcutsa modu değiştirilmeyecektir. Bağlamınıza bağlı olarak bu iyi veya kötü olabilir.
Adam Badura

1
mkdir -m777 dizini
Hugo Deiró

19
install -d -m 0777 /your/dir

sana ne istiyorsan vermelisin. Her kullanıcının o dizine dosya ekleme ve silme hakkına sahip olduğunu unutmayın.


1
bonus, ayrıca -g ve / veya -o ekleyebilir ve tek seferde mkdir, chmod ve chown'a sahip olabilirsiniz!
Costin Gușă

4
Kırık. install -d -m 070 bir / iki / üç. Yoldaki üç dizin de yeni oluşturulmuş olsa bile, yalnızca sonuncusu istenen izinlere sahip olacaktır. mkdir -p -m aynı şekilde kırılır.
Görünen Ad

@DisplayName: Bununla threebirlikte, varsayılan izinler yol için yeterli olacak şekilde doğru izinleri ayarlar .
Markus W Mahlberg

17

Dizin zaten mevcutsa:

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

Dizin yoksa ve ana dizinleri oluşturmak istediğinizde:

mkdir -m 777 -p /parent/dirs/to/create/your/dir

Bu, yalnızca son alt dizine 777 izni verecektir. Bunu nasıl yapabilirim ve tüm üst dizinlere de 777 izni verebilirim?
Levi Johansen

2
Buna bir cevabım yok ama bunun cevabının burada olduğuna inanıyorum: stackoverflow.com/questions/3740152/…
Pedro Trujillo

Bu komutun "Bir dizin nasıl oluşturulur ve tek komutta izin verilir" sorununu çözmek için olduğunu unutmayın. Sorunuzun çözümünün şöyle olacağına inanıyorum:find /your/dirs -type d -exec chmod 755 {} \;
Pedro Trujillo

10

IMO, bu installtür durumlarda komutu kullanmak daha iyidir . systemd-journaldYeniden başlatmalarda ısrarcı olmaya çalışıyordum .

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

7

Basit bir kabuk komut dosyası yazabilirsiniz, örneğin:

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

Kaydedildikten ve yürütülebilir bayrak etkinleştirildikten sonra, mkdir ve chmod yerine çalıştırabilirsiniz:

./scriptname path/foldername

Ancak, alex'in cevabı çok daha iyidir çünkü üç yerine bir süreç ortaya çıkarır. -mSeçeneği bilmiyordum .


Teşekkürler delan .. Ben de bu komutu kabuk betiğine yazdım .. Ama tek komutta yapmak istiyorum.
poorani

7

Sadece yukarıdaki cevaplardan bazılarını genişletmek ve geliştirmek için:

İlk olarak, GNU Coreutils 8.26 için mkdir man sayfasını kontrol edeceğim - bize '-m' ve '-p' seçenekleri hakkında bu bilgiyi verir (sırasıyla --mode = MODE ve --parents olarak da verilebilir. ):

... [s] dosya modunu ayarla (chmod'daki gibi), a = rwx - umask değil

... varsa hata yok, gerektiği gibi üst dizinleri yapın

Bence ifadeler belirsiz ve net değil. Ama temelde, dizini "chmod sayısal gösterimi" (sekizli) ile belirtilen izinlerle yapabileceğinizi veya "diğer yöne" gidip a / your umask kullanabileceğinizi söylüyor.

Yan not: "Diğer yol" diyorum çünkü umask değeri aslında tam olarak göründüğü gibi - chmod'un sayısal sekizlik gösteriminde olduğu gibi izinleri "vermek" yerine gizlemek / kaldırmak bir maske .

umask3 basamaklı umask'inizin ne olduğunu görmek için kabuk yerleşik komutunu çalıştırabilirsiniz ; benim için bu 022. Bu, mkdir yodirectorybelirli bir klasörde çalıştırdığımda (mesela mahome) ve statbunu, buna benzer bir çıktı alacağım anlamına gelir :

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

Şimdi, bu sekizlik izinler hakkında biraz daha ekleyelim. Bir dizin oluşturduğunuzda, "sisteminiz" varsayılan dizin izinlerinizi alır '[ yeni dizinler için geçerlidir (değeri 777 olmalıdır)] ve yo (u) maskesine tokat atarak bu izinlerin bazılarını etkili bir şekilde gizler'. Benim Umask 022 - biz 777 den 022 "çıkarma" Şimdi eğer (teknik olarak çıkarılmasıyla bir oversimplication ve her zaman doğrudur - biz aslında perma kapatarak veya maske bunları ing) "statted" belirtilen (ya ettikçe ... 755 olsun ) daha erken.

Bizim durumumuzda herhangi bir yapışkan bit, setuid veya setgid istemediğimizden (veya daha doğrusu bahsetmediğimizden) 3 basamaklı oktalların önündeki '0'ı atlayabiliriz (bu nedenle 4 basamaklı olmaları gerekmez) (bunlara bakmak isteyebilirsiniz, btw, 777'ye gittiğiniz için faydalı olabilirler). Diğer bir deyişle, 0777, 777'yi ima eder (veya ona eşdeğerdir) (ancak 777 mutlaka 0777'ye eşdeğer değildir - çünkü 777 sadece izinleri belirtir, setuids, setgids, vb.)

Şimdi, bunu sorunuza daha geniş anlamda uygulamak için - birkaç seçeneğiniz var (zaten) var. Yukarıdaki tüm cevaplar işe yarar (en azından benim temel bilgilerime göre). Ancak aynı anda 777 izne sahip alt dizinler (iç içe dizinler) oluşturmak istediğinizde yukarıdaki çözümlerle ilgili sorunlarla karşılaşabilirsiniz (veya büyük olasılıkla) . Özellikle, mahome'de 022 umask ile aşağıdakileri yaparsam:

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

Her 755ikisi için de izin alacağım yodirectoryve yostuffsadece 777izinlerle mastuffinyostuff. Görünüşe göre umasküzerine tokat atılan tek şey bu yodirectoryve yostuff... bunun üstesinden gelmek için bir alt kabuk kullanabiliriz:

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

ve bu kadar. Yostuff, mastuffinyostuff ve yodirectory için 777 perm.


7

Aynı anda dizin oluşturmak ve izin vermek için aşağıdaki komutu kullanabilirsiniz

mkdir -m777 path/foldername 

1
-m ile 777 arasında boşluk yok
Omer Gafar

1

Yapmayın: mkdir -m 777 -p a/b/c bu sadece 777son dizinde izin ayarlayacağından , c; a ve b, umask'inizin varsayılan izni ile oluşturulacaktır.

İzne sahip herhangi bir yeni dizin oluşturmak yerine 777, mkdir -pumask'i geçersiz kıldığınız bir alt kabukta çalıştırın :

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

Ancak a, b ve c'den herhangi biri zaten mevcutsa, bunun izinleri değiştirmeyeceğini unutmayın.


Evet, 4 basamaklı bir umask geçerseniz, baştaki basamak her zaman sıfır olmalıdır (yine de atlayabilirsiniz). İlk sekizlik rakamın setuid, setgid ve yapışkan bitleri ayarladığı chmod ile simetri için olabilir, ancak öyleyse, umask bunları kısıtlamanıza izin vermediği için oldukça anlamsızdır.
John Mellor
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.