簡體   English   中英

如何在單個命令中創建目錄並授予權限

[英]How to create a directory and give permission in single command

如何在 Linux 中創建目錄並在單個命令中授予權限?

我必須創建大量具有完全權限777的文件夾。

命令

mkdir path/foldername
chmod 777 path/foldername 

我不喜歡在兩個命令中創建和授予權限。 我可以在單個命令中執行此操作嗎?

根據mkdir的手冊頁...

mkdir -m 777 dirname
install -d -m 0777 /your/dir

應該給你你想要的。 請注意,每個用戶都有權在該目錄中寫入添加和刪除文件。

當目錄已經存在時:

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

當目錄不存在並且您要創建父目錄時:

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

IMO,在這種情況下最好使用install命令。 我試圖使systemd-journald在重新啟動后持久化。

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

只是為了擴展和改進上述一些答案:

首先,我將檢查 GNU Coreutils 8.26 的 mkdir 手冊頁——它為我們提供了有關選項“-m”和“-p”的信息(也可以分別作為 --mode=MODE 和 --parents 給出):

...設置[s] 文件模式(如在 chmod 中),而不是 a=rwx - umask

...如果存在沒有錯誤,根據需要創建父目錄

在我看來,這些陳述含糊不清。 但基本上,它說您可以使用由“chmod 數字表示法”(八進制)指定的權限創建目錄,或者您可以“另一種方式”並使用您的 umask。

旁注:我說“另一種方式”,因為 umask 值實際上就是它聽起來的樣子——一個掩碼,隱藏/刪除權限,而不是像 chmod 的數字八進制符號那樣“授予”它們。

你可以執行shell-builtin命令umask來查看你的3位umask是什么; 對我來說,它是022 這意味着當我在給定的文件夾(比如 mahome)中執行mkdir yodirectorystat它時,我會得到一些類似這樣的輸出:

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

現在,再添加一點關於這些八進制權限的信息。 當你創建一個目錄時,“你的系統”采用你的默認目錄 perms' [適用於目錄(它的值應該是 777)] 並在 yo(u) 掩碼上拍打,有效地隱藏了其中一些 perms'。 我的 umask 是 022——現在,如果我們從 777 中“減去”022(從技術上講,減去是一種過度簡化,並不總是正確的——我們實際上是關閉燙發或屏蔽它們)……我們得到 755,如所述(或“統計”) ) 之前。

我們可以省略 3 位八進制前面的“0”(因此它們不必是 4 位),因為在我們的例子中我們不想要(或者更確切地說沒有提到)任何粘滯位、setuids 或setgids(你可能想看看那些,順便說一句,它們可能有用,因為你要去 777)。 所以換句話說,0777 暗示(或等價於)777(但 777 不一定等價於 0777——因為 777 只指定權限,而不是 setuids、setgids 等)

現在,在更廣泛的意義上將此應用於您的問題 - 您(已經)有一些選擇。 以上所有答案都有效(至少根據我的 coreutils)。 但你可能(或相當可能)碰到上述問題的解決,當你想一下子就創建子目錄(嵌套目錄)與777個權限。 具體來說,如果我在 mahome 中使用 022 的 umask 執行以下操作:

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

我會得到燙發755兩個yodirectoryyostuff ,只有777燙發的mastuffinyostuff 所以看起來umask就是yodirectoryyostuff上的yodirectory yostuff ……為了解決這個問題,我們可以使用一個子shell:

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

就是這樣。 yostuff、mastuffinyostuff 和 yodirectory 的 777 個燙發。

您可以使用以下命令創建目錄並同時授予權限

mkdir -m777 path/foldername 

您可以編寫一個簡單的 shell 腳本,例如:

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

保存並啟用可執行標志后,您可以運行它而不是 mkdir 和 chmod:

./scriptname path/foldername

但是, alex 的答案要好得多,因為它生成了一個進程而不是三個進程。 我不知道-m選項。

不要這樣做: mkdir -m 777 -pa/b/c因為這只會在最后一個目錄 c 上設置權限777 a 和 b 將使用您的 umask 的默認權限創建。

要創建具有權限777任何新目錄,請在覆蓋 umask 的子shell中運行mkdir -p

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

請注意,如果 a、b 和 c 中的任何一個已經存在,這不會更改權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM