Jak utworzyć katalog i nadać uprawnienia w jednym poleceniu w systemie Linux?
Muszę utworzyć wiele folderów z pełnymi uprawnieniami 777
.
Polecenia
mkdir path/foldername
chmod 777 path/foldername
Nie lubię tworzyć i nadawać uprawnień w dwóch poleceniach. Czy mogę to zrobić jednym poleceniem?
mkdir temp; chmod 777 temp
to jedna linia. Możesz uczynić „temp” zmienną i zapisać ją jako polecenie bash. Czy to jest to, czego szukasz?Odpowiedzi:
Według strony podręcznika man mkdir ...
źródło
-p
tym @DisplayName, o którym już wspomniano, istnieje jeszcze jeden.-m
Będzie miała zastosowanie tylko wtedy, gdy katalog jest faktycznie utworzony. Jeśli już istnieje, jego tryb nie zostanie zmieniony. W zależności od kontekstu może to być dobre lub złe.powinien dać ci to, czego chcesz. Należy pamiętać, że każdy użytkownik ma prawo do dodawania i usuwania plików w tym katalogu.
źródło
three
, przy czym domyślne uprawnienia są wystarczające dla ścieżki do niego.Gdy katalog już istnieje:
Jeśli katalog nie istnieje, a chcesz utworzyć katalogi nadrzędne:
źródło
find /your/dirs -type d -exec chmod 755 {} \;
IMO,
install
w takich sytuacjach lepiej jest użyć polecenia. Próbowałem utrzymaćsystemd-journald
się przy ponownym uruchomieniu.źródło
Możesz napisać prosty skrypt powłoki, na przykład:
Po zapisaniu i włączeniu flagi pliku wykonywalnego można go uruchomić zamiast mkdir i chmod:
Jednak odpowiedź Alexa jest znacznie lepsza, ponieważ generuje jeden proces zamiast trzech. Nie wiedziałem o tej
-m
opcji.źródło
Aby rozwinąć i poprawić niektóre z powyższych odpowiedzi:
Najpierw sprawdzę stronę podręcznika mkdir dla GNU Coreutils 8.26 - zawiera ona informacje o opcji '-m' i '-p' (można też podać odpowiednio --mode = TRYB i --parents ):
Moim zdaniem stwierdzenia są niejasne i niejasne. Ale zasadniczo mówi, że możesz utworzyć katalog z uprawnieniami określonymi przez „chmod notację numeryczną” (ósemki) lub możesz przejść „w drugą stronę” i użyć / your umask.
Uwaga dodatkowa: mówię „w drugą stronę”, ponieważ wartość umask jest dokładnie tym, na co wygląda - maską , ukrywaniem / usuwaniem uprawnień, a nie ich „przyznawaniem”, jak w przypadku numerycznej notacji ósemkowej chmod.
Możesz wykonać polecenie wbudowane w powłokę,
umask
aby zobaczyć, jaka jest twoja 3-cyfrowa umask; dla mnie to jest022
. Oznacza to, że kiedy wykonammkdir yodirectory
w danym folderze (powiedzmy, mahome) istat
to, otrzymam wyjście podobne do tego:Teraz, aby dodać trochę więcej o tych ósemkowych uprawnieniach. Kiedy tworzysz katalog, "twój system" bierze domyślne uprawnienia katalogu "[co ma zastosowanie do nowych katalogów (jego wartość powinna 777)] i uderza w maskę yo (u), skutecznie ukrywając niektóre z tych uprawnień". Moja jest umask 022 - teraz jeśli my „odjąć” 022 z 777 (technicznie odjęcie jest oversimplication i nie zawsze poprawne - jesteśmy rzeczywiście wyłączenie trwałej ondulacji lub maskować je ing) ... mamy 755 jak stwierdzono (lub „stat” ) wcześniej.
Możemy pominąć `` 0 '' przed trzycyfrowymi ósemkami (więc nie muszą być czterocyfrowe), ponieważ w naszym przypadku nie chcieliśmy (a raczej nie wspomnieliśmy) o żadnych bitach stickybit, setuidach lub setgidach (możesz zajrzeć do tych, przy okazji, mogą być przydatne, ponieważ zamierzasz 777). Innymi słowy, 0777 implikuje (lub jest równoważne) 777 (ale 777 niekoniecznie jest równoważne 0777 - ponieważ 777 określa tylko uprawnienia, a nie setuids, setgids itp.)
Teraz, aby zastosować to do twojego pytania w szerszym znaczeniu - masz (już) kilka opcji. Wszystkie powyższe odpowiedzi działają (przynajmniej według moich coreutils). Ale możesz (lub prawdopodobnie napotkasz) problemy z powyższymi rozwiązaniami, gdy chcesz stworzyć podkatalogi (katalogi zagnieżdżone) z 777 uprawnieniami naraz. W szczególności, jeśli wykonam następujące czynności w mahome z umaską 022:
Otrzymam trwałą
755
na obayodirectory
iyostuff
tylko777
namastuffinyostuff
. Wygląda więc na to, żeumask
to wszystko, co zostało uderzoneyodirectory
iyostuff
... aby to obejść, możemy użyć podpowłoki:( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
i to wszystko. 777 perms dla yostuff, mastuffinyostuff i yodirectory.
źródło
możesz użyć następującego polecenia, aby utworzyć katalog i nadać uprawnienia w tym samym czasie
źródło
Nie rób:
mkdir -m 777 -p a/b/c
ponieważ to ustawi uprawnienia tylko777
do ostatniego katalogu, c; a i b zostaną utworzone z domyślnymi uprawnieniami z Twojej umaski.Zamiast tworzyć nowe katalogi z uprawnieniami
777
, uruchom jemkdir -p
w podpowłoce, w której nadpisujesz umask:Zauważ, że nie zmieni to uprawnień, jeśli którekolwiek z a, b i c już istnieją.
źródło