1. 程式人生 > >linux下非root用戶安裝軟件

linux下非root用戶安裝軟件

出現問題 減少 操作 開始 RM -c str AD 難題

轉自:tlanyan

從windows轉移到Linux的用戶最開始有各種不適,因使用習慣水土不服而放棄Linux的不在少數。還沒有領略到Linux的美好就退卻,對於這類人只能說可惜。還有部分人在個人電腦上用Linux,總體感覺還不錯;工作時只能使用無特權的普通賬戶,會遇到“沒root權限 -> 出現問題 -> 找答案 -> 提示用root”的死循環,不免感到沮喪和抓狂。本文主要面向對象第二類人,簡要介紹沒有root權限時,如何安裝所需軟件推動正常工作。

推薦閱讀:程序的運行流程

===============分割線======================

許多人都非常熟悉Windows,毫無疑問是目前桌面操作系統的王者。隨著高富帥和土豪種群的增長,Mac OS的份額也逐步提升。無論是windows還是Mac OS,用戶接觸的都是圖形界面(Graphical User Interface,GUI)。轉向Linux之後,大部分人會優先使用帶圖形界面的系統作為過渡。比如本人最開始使用Ubuntu,熟悉後才慢慢轉向CentOS和Fedora。許多優秀的Linux桌面圖形發行版,如Debian/Ubuntu/Mint,Fedora,OpenSUSE等,圖形界面華美,桌面體驗良好,可以給Windows用戶很好的過渡。這些Linux系統基本都開源且可免費使用(支持服務可能要付費),是Linux入門級操作系統的首選。

Windows上安裝軟件相當傻瓜化,下載exe後雙擊運行,點擊鼠標一直next就完事。安裝過程中,小白用戶一般不會看引導頁面種的內容(估計字都認識,連在一塊不知道什麽意思),附帶安裝其他軟件或者對系統做了額外改動也毫不知情。當有人(一般是女生)說電腦開機後反應很慢/失去響應,過去一看電腦上瑞星、360、金山毒霸、騰訊安全管家等各種軟件都在右下角托盤刷著存在感。對於這種情形,只能表示理解,進入安全模式把不用的軟件都卸載掉,電腦基本上就正常了。

回到Linux安裝軟件,情況稍有不同。首先是軟件一般從軟件倉庫中獲取,即現在熟悉的應用市場;再次基本上用命令行安裝軟件,不是雙擊安裝包(Mac OS可以這樣做)。熟悉命令行安裝軟件,是邁向Linux世界基礎的一步。apt/yum/dnf等軟件包管理工具,會自動解決依賴問題,讓用戶一行命令就獲取到所需軟件。例如安裝g++,執行sudo apt-get install g++/sudo yum install -y gcc-c++

即可。

有些軟件是別人自行寫的,給的源代碼,也沒有提交到倉庫,apt-get/yum/dnf的安裝方式就行不通。這時需要先下載源代碼,解壓(不能點右鍵解壓,對不少人是個難題),然後按照說明文檔make && make install。不管是從軟件倉庫,還是手工編譯源代碼的方式,對有root權限的用戶問題都不大(問題常出現在依賴)。倒黴的是沒有root權限,還不得不安裝軟件才能正常工作的普通賬號。對這些普通賬號,需要額外的軟件或依賴庫時,該如何自救解脫?

問題在權限,有必要先了解一下Linux中文件和用戶的權限。對任意一個文件(Linux下一切皆文件,包括目錄、CPU內存等設備),可以使用ls -l查看其權限。命令的每行首列輸出類似(d|-)rwxrwxrwx

,這就是文件的權限標誌。第一個字母是文件類型,d表示目錄,-表示普通文件,s套接字,l鏈接文件,等等;接下來有9列,每3列一組,總共3組,對應文件屬主(owner)、屬主組員(group)和其他用戶(other)對該文件的權限。每組的標誌類似rwx。rwx是讀(read),寫(write)和執行(execute)三種權限的縮寫。如果沒有某種權限,對應標誌位是-。例如某個文件foo.txt,只有屬主可讀寫,其權限標誌就是:-rw——-。註意,非root用戶下,文件夾必須要有執行(x)權限才能進入。

再看用戶的權限。root用戶是bug,電腦上所有的文件都是它的,權限位設置對其無效。非root用戶默認 只對家目錄有完全的控制權限,對/tmp目錄有讀寫的權限。/tmp目錄如其名,應該只在其中存放臨時性文件,該目錄在系統重啟時會被清空。/var、/usr、/bin、/opt等常見文件夾及子目錄,幾乎所有用戶都能訪問其中的文件和內容,執行可執行程序,但只有root用戶和屬主有寫入的權限。

了解完權限,再看普通賬戶安裝軟件困難的原因。大部分軟件默認安裝路徑是 /usr/bin 或 /usr/local/bin,安裝時需要將可執行文件復制到這些目錄下。普通用戶沒有目錄的寫權限,於是提示無權限導致安裝失敗。切換到root模式後,一切又都好使了。根據普通賬號的權限,可以得出結論:非root用戶,(幾乎)只能安裝軟件到家目錄下。

下面是Linux下非root用戶安裝軟件的一般流程:

  1. 獲取源代碼,常用wget方式直接從url下載,ubuntu可以用apt-get source來獲取倉庫中軟件源代碼;

  2. 解壓源代碼安裝包,多為gzip過的tar包,一般使用tar -zxvf xxx.tar.gz即可;

  3. 切換到解壓後的目錄,運行 ./configure。./configure –help可以列出配置項,非root用戶最重要的配置項是安裝目錄prefix,例如 ./configure –prefix=/path/to/bin。在無法自動找到依賴庫位置的情況下,用 –with-xx-dir=xxx 的形式配置依賴庫位置;

  4. 編譯源代碼並復制可執行文件到指定的安裝目錄: make && make install。這兩條命令可以分開執行,make時指定 -j 參數並行編譯,能顯著減少編譯耗時(單進程編譯GCC需要幾個小時,開啟並行編譯後可縮短到十幾分鐘);

  5. 使用export PATH=/path/to/bin:$PATH更新PATH變量。命令行窗口運行此命令只對本次會話中有效,可將其寫到.bashrc或者.bash_profile中;

  6. 如果安裝的是動態鏈接庫,則需要更新動態鏈接庫路徑: export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH。最好將此命令寫在.bashrc文件中,用戶下次打開會話時自動執行。

示例可參考: Linux下非root用戶安裝Apache、PHP和MySQL

後記

Nodejs的出現改變了JavaScript寫程序的方式,為前後端開發註入了新鮮的血液。Node開發人員可以使用npm(Node默認的包管理器)方便的安裝依賴包和可執行程序。確實,非root人員可以用npm安裝軟件,但並不影響上文內容的正確性。非root用戶,安裝依賴包或程序時,不能使用-g選項,默認安裝到家目錄或項目的node_modules目錄下,依然受權限控制。brew、composer等包管理器同理。

linux下非root用戶安裝軟件