[英]How to give permission for my Laravel application create subfolders in a directory (Ubuntu)
[英]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 yodirectory
並stat
它時,我會得到一些類似這樣的輸出:
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
兩個yodirectory
和yostuff
,只有777
燙發的mastuffinyostuff
。 所以看起來umask
就是yodirectory
和yostuff
上的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.