一些自動安裝的應用程式(例如 Netbean、JDK)經常安裝到/usr/local
我的普通用戶(而不是 root)運行它。
但另一個應用程序,只需提取tar.gz
文件並運行它。在普通使用者下,我無法使用指令從一個目錄cp
複製到另一個目錄,我必須使用 root 使用者(指令)。Download
/usr/local
su
但因為我是用root使用者複製的,所以這個目錄屬於root,所以無法在一般使用者下運作。這讓我很頭痛。我如何在普通用戶下運行它,就像我上面列出的其他應用程式一樣。或者,還有其他安裝方法嗎?
答案1
/usr/local
及其子目錄(bin
、lib
、share
等)應該(並且可能是)擁有 root 並設定為 755,以便任何人都可以在那裡執行內容。
如果您解壓縮某些內容並將其複製進去,那麼它可能是單一二進位檔案的權限,也應該是 755 以允許一般使用。
請記住如何$PATH
運作。在這方面,您的 JDK 範例可能會令人困惑,但是您將在一個普通的 tarball中./configure
放入make install
可執行文件/usr/local/bin
,將庫放入/usr/local/lib
,並將文件等其他內容放入 中/usr/local/share
。這些是適當的路徑,您需要遵循相同的模式。換句話說,僅僅將內容放在/usr/local
bin/ 的任何位置(例如套件的單一目錄)或子目錄中是行不通的。
答案2
您可能會遇到兩個潛在問題。
第一個問題-目錄的執行權限
您複製到 /usr/local 的目錄之一的權限可能沒有正確設定。目錄上的權限需要使得 root 以外的使用者可以從這些目錄執行程式/腳本。
可能需要設定該目錄的權限,以便「其他」使用者能夠在該目錄之外執行應用程式。
例如
# don't have permissions on directory
root$ cd /usr/local
$ ls -ld somedir
drwxr-x--- 2 root root 4096 Apr 25 13:27 somedir
# have permissions on the script
root$ ls -l somedir/testscript.bash
-rwxr-xr-x 1 root root 23 Apr 25 13:27 somedir/testscript.bash
在這種情況下,即使其他使用者對腳本具有讀取和執行腳本的執行權限,他們也不會被允許,因為他們對腳本所在的目錄沒有讀取和執行權限。
更改目錄的權限允許他們存取:
user$ ls -ld somedir/
drwxr-xr-x 2 root root 4096 Apr 25 13:27 somedir/
user$ somedir/testscript.bash
hi
整個問題可以透過更改從 tar.gz 檔案解壓縮的目錄中的權限來解決,方法是尋找所有包含腳本的目錄並對chmod +rx <dir>
這些目錄執行命令。
第二個問題-檔案的執行權限
.tar.gz 檔案中的檔案的權限可能尚未設置,因此存檔中的應用程式或腳本在解包時可能會遺失這些權限。只需chmod +x <script>
解決具有此特定問題的文件即可解決此問題。
### For example
user$ ls -ld somedir
drwxr-xr-x 2 root root 4096 Apr 25 13:27 somedir/
user$ ls -l somedir/testscript.bash
-rw-r--r-- 1 root root 23 Apr 25 13:27 somedir/testscript.bash
user$ somedir/testscript.bash
bash: somedir/testscript.bash: Permission denied