我在 Unix 中有兩個使用者和群組:user1:user1
和user2:user2
。
myDirectory
我有一個包含以下詳細資訊的目錄( ls -ltr
)
drwxr-xr-x. 4 user2 user2 35 Apr 27 10:16 myDirectory
現在,我正在運行一個腳本,myScript.sh
如下所示user1
:
#!/bin/sh
whoami
if [ -f /myDirectory/*.tar.gz ]
then
rm -f /myDirectory/*.tar.gz
fi
cp -f someDirectory/*.tar.gz /myDirectory/
但是,我收到以下錯誤:
cp: cannot create regular file ‘/myDirectory/myTar.tar.gz’: Permission denied
我究竟做錯了什麼?我怎樣才能解決這個問題?
答案1
您可以使用群組權限來執行此操作。您需要建立一個用戶群組,新增兩個用戶,並變更目標目錄的群組所有權。首先,建立一個群組:
groupadd newusergroup
然後將用戶添加到其中:
usermod -G newusergroup user1
usermod -G newusergroup user2
然後更改目標目錄的權限:
chgrp newusergroup /myDirectory
這一切都假設您希望兩個使用者都有權存取該目錄。如果您只想讓 user1 具有存取權限,只需變更權限,如下所示:
chown user1.user1 /myDirectory
答案2
的權限group
會mydirectory
影響您在該目錄中刪除或建立檔案的方式。
首先user1
執行以下命令:
chmod g+w mydirectory
答案3
如果是需要寫入的用戶,也就是您要複製的用戶,那就更好了到,運行腳本。這樣,您就不必授予目標目錄特殊的寫入權限。
另外,測試
if [ -f /myDirectory/*.tar.gz ]
有故障。此-f
測試採用一個參數,但如果模式與多個文件匹配,則需要傳遞多個參數。既然你想清空myDirectory
壓縮tar
檔案的目錄,那就夠了
rm -f /myDirectory/*.tar.gz
如果沒有要刪除的文件,標記 to 將導致它不會出錯-f
。rm
答案4
好吧,我看到很多錯誤:
- 不允許您寫入
myDirectory
。只user2
允許在那裡寫入。 - 您將絕對路徑與相對路徑混淆了。
/myDirectory
是與 不同的目錄myDirectory
。這也可能導致權限被拒絕錯誤,因為您的腳本正在嘗試將其複製到檔案系統根資料夾中myDirectory
。如果myDirectory
是相對於當前命令列路徑(在其中呼叫腳本的上下文)的路徑,那麼./myDirectory
就是正確的。否則請考慮向我們提供更詳細的信息,以了解其myDirectory
真正所在的位置。這很重要,因為相對路徑的範圍myDirectory
可以在幾個方面有所不同。在不了解您的具體情況的情況下,與此相關的答案只能是一般性答案,可能不適用於您的特定情況。 [
and條件式]
僅適用於Bash
,不適用於Shell
。的定義Shell
也取決於您目前工作的 UNIX 系統。通常,在 Linux 中它指向Bash
,因為 Linux 沒有直接Shell
實現,BSD 也沒有。只有Mac有自己的直接Shell
實作。因此,Shell
它只是一個理論上的 UNIX 標準,如今該理論文件有許多不同的方言和解釋,這實際上取決於您目前正在運行的 UNIX 系統。所以,直接使用更好Bash
。這在大多數 UNIX 平台上 100% 有效。我不知道有哪個 UNIX 系統中 Bash 是不可用的。
其他一些需要考慮的有趣點:您可能想要添加多個組,它們是user1
和user2
。然後您可以將主資料夾群組變更myDirectory
為該群組。據我所知,這是常見的方法。
您也可以透過 shebang 命令使用 Bash /usr/bin/env
,這可確保您真正進入任何 Bash:
#!/usr/bin/env bash
對於其他腳本語言(如 perl、php 等)來說,這也是一個很好的方法。