這些設置不應只是從任何地方加載。有時,在對最佳地點做出判斷之前,應該考慮許多因素。
>讓我們看一下Debian GNU/Linux Jessie安裝上存在的一些常見選擇,並嘗試使這一切都有意義。
/etc/profile
默認情況下,debian提供 /etc /profile,它立即用於設置$路徑(用於聲明命令搜索路徑)。
>>為方便起見,root用戶(用戶ID 0)獲取針對其他所有人定義的不同路徑。這是因為系統二進制(SBIN)位置是理想保留的,用於系統管理或必須作為root運行的程序。 root省略了遊戲路徑,因為除非絕對必要
>因此,在這一點上,我們可以在登錄過程中被所有shell讀取 /etc /profile(即通過登錄命令)讀取。而不是使用更高效的bash內置變量$ {uid}來確定用戶ID, /etc /profile調用ID命令。除了定義精美的外殼提示,而不是定義特定於BASH的配置,因為Bash支持BackSlash escaped的特殊字符,例如U(username)和H(主機名),許多其他外殼都不會。 /etc/profile應該嘗試符合posix,以便與用戶可能為自己安裝的任何外殼兼容。
>> debian gnu/linux通常是用Dash預裝的,Dash是一個基本的外殼,僅旨在實現POSIX(和某些伯克利)擴展。如果我們修改 /etc /profile(先製作備份!)以使PS1 ='$'行設置不同的值並模擬dash登錄(通過dash -l命令),我們可以看到dash使用我們定義的提示。但是,如果我們不讀取沒有-l參數的dash命令,則未讀取 /etc /profile,dash降回默認值(順便說一句,這是原始ps1值在我們修改之前的內容)。
關於 /etc /profile的最後一個有趣的事情是以下片段:換句話說,匹配/Etc/profile.d/j.sh glob的任何可讀的內容都是可匹配的。這很重要,因為它表明直接需要直接需要編輯 /etc /profile(因此還原您之前做出的備份!)。上面定義的任何變量都可以在單獨的文件中覆蓋。這樣做的一個好處是,它允許系統升級可以自動添加 /etc /profile的更改,因為Debian的APT軟件包管理系統通常不會觸及修改的配置文件。
<span>if [ "<span><span>`id -u`</span>"</span> -eq 0 ]; then </span> <span><span>PATH</span>="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" </span><span>else </span> <span><span>PATH</span>="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" </span><span>fi </span><span>export PATH</span>>
〜/.bash_profile,〜/.bash_login和〜/.profile
> /etc /profile的一個潛在問題是它位於系統範圍的路徑中。這意味著那裡的變化會影響系統上的所有用戶。在個人計算機上,這似乎不是一個問題,但是改變它需要根特權。由於這些原因,每個bash用戶帳戶都可以創建一個文件〜/.bash_profile,〜/.bash_login或〜/.profile要採購 - 並且在任何時都使用第一個文件(以列出的順序搜索)。剩下的文件被忽略。其他外殼(例如破折號)支持類似的東西,但僅查看〜/.profile。這允許用戶為BASH特定情況創建.bash_profile,如果她有時會切換到dash或其他某些外殼作為登錄外殼(例如通過CHSH -S dash命令),則可以保留〜/.profile用於那用例。>需要牢記這一點的重要性。默認的Debian Skeleton目錄(/etc/Skel,用於容納要復製到新用戶帳戶的文件和目錄Home Directories)包含一個.profile文件,但不包括.bash_profile或.bash_login文件。另外,Debian使用Bash作為默認用戶外殼。因此,許多用戶習慣於將其bash登錄外殼設置放在.profile中。
>>我已經看到了諸如RVM之類的項目的安裝說明,請指示用戶創建.bash_profile文件,但這很危險,因為它可能會破壞用戶的外殼環境!即使用戶沒有修改。這將不再起作用。一個可能提高安全性的選項是在創建用戶帳戶之前,將.bash_profile作為符號鏈接添加到.bashrc in /etc /skel。
如果我們查看Debian Jessie的默認腳本。這與我們在 /etc /profile中看到的內容相似,其中 /etc /bash.bashrc(如果發現,殼)為bash。下一節將討論這一點的意義。
<span>if [ "<span><span>`id -u`</span>"</span> -eq 0 ]; then </span> <span><span>PATH</span>="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" </span><span>else </span> <span><span>PATH</span>="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" </span><span>fi </span><span>export PATH</span>>
/etc/bash.bashrc和〜/.bashrc >
>啟動X窗口系統會話(無論使用虛擬終端中使用顯示管理器或StartX)時,將執行/etc/x11/xsession shell腳本。這基本上是登錄外殼使用的 /etc /profile的等效詞,僅用於x,而不是來源而不是直接執行。它也更加複雜。類似於/etc/profile.d,/etc/etc/x11/xsession sources腳本下的腳本中的/etc/profile的方式類似。此目錄中的所有腳本都以一個數字開始,因此腳本將按編號順序加載。 如果我們繼續瀏覽/etc/x11/xsession中的文件,我們會找到50x11-common_determine-startup,將會話管理器確定為
載入.如果存在〜/.xsession文件並且是可執行文件,則將作為99x11-Common_start的一部分保存和執行。由於〜/.xsession是為了運行會話管理器,因此X會話將註銷,此腳本終止時,您將返回顯示器登錄屏幕。
>
> X-Session-Manager默認為通過Update-Alternatives命令配置的任何內容。這樣,您可以通過SAIS,/usr/bin/startxfce4(切換到XFCE)來替換X-Session-Manager,可以輕鬆地將Sessair Manager從系統範圍的默認設置中移開,而其他用戶帳戶將完全不受影響。 >我們以前介紹了用戶運行交互式bash登錄外殼時讀取的文件,但是如果您要在登錄時要運行程序怎麼辦?對於那個用例,〜/.bash_logout是您的朋友。 Debian中包含的默認值僅用於清除屏幕(我認為從安全角度來看很重要),但是可以將一些想像力用於其他目的,例如,在您之前顯示提醒幾秒鐘之前遠離機器。 >主要限制因素是.bash_logout僅在從交互式外殼中登錄時讀取。
>示例 >
來禁用Vsync
因此,將.xsessionrc放置在所有程序中。 希望您現在可以更好地了解登錄和註銷腳本如何在Debian GNU/Linux系統上使用。如果您為這些登錄和註銷腳本創建或遇到了任何特別有趣或創意的用途,以及您如何處理它,請讓我們知道。 在本系列中,我將討論dotfile管理選項。 >在nix登錄腳本中設置環境變量與添加諸如export varname = value的行一樣簡單。這將把環境變量變量設置為登錄會話持續時間的值值。您還可以使用“導出命令”使子過程可用。例如,導出路徑= $ path/path/to/dir會添加/路徑/dir到路徑環境變量,在該目錄中可執行可執行文件,而無需指定完整的路徑。 我可以使用nix登錄腳本來自定義我的shell提示嗎? > 通過NIX登錄腳本管理路徑
.bashrc是添加命令別名的好地方。實際上,有些人有很多別名,他們更喜歡將它們保存在單獨的文件中。 Debian的默認.bashrc尋找〜/.bash_aliases並在文件存在的情況下來源,因此請隨時將所有bash別名保留在此處。 .bashrc也是用戶覆蓋外殼變量(例如$ ps1或$ histsize(如果需要保留的命令記錄))的最佳場所。 Debian的默認.bashrc長100行,但很簡單,並且評論得很好。顧名思義,預期不預計Bashrc將通過非式殼殼來提供。 〜/.bash_logout
涵蓋了您可用的最常見選項。可能存在其他選項,具體取決於您的安裝(例如 /etc /環境),但我不認為它們可能存在於其他平台上,並且很少需要觸摸這些。
那麼,您應該在哪裡放置整個系統的環境變量?如果您希望一個環境變量影響每個用戶,/etc/profile.d/somefile.sh是一個很好的選擇。但是,這假設您使用的是登錄管理器,該管理器來源 /etc /profile。如果沒有,您可以(作為管理員)將腳本添加到/etc/x11/xsession.d/ inocer/etc/profile。
>如果您希望腳本找到個人目錄位置並將其添加到您的路徑中,則需要考慮該目錄是否會四處移動。如果將代碼添加到.profile中,則用戶將需要註銷並再次進入路徑以反映用戶會話期間目錄更改的路徑。相反,如果您將代碼添加到.bashrc,則意味著每次用戶打開XTERM時執行代碼 - 如果執行超過半秒鐘左右,則可能不是理想的。因此,這是權衡權衡取捨的問題。 <span>if [ "<span><span>`id -u`</span>"</span> -eq 0 ]; then
</span> <span><span>PATH</span>="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
</span><span>else
</span> <span><span>PATH</span>="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
</span><span>fi
</span><span>export PATH</span>
>經常詢問有關NIX登錄腳本的問題(常見問題解答)
> NIX登錄腳本在系統配置中的重要性是什麼?它們是當用戶登錄到NIX系統時會自動運行的腳本。這些腳本用於設置用戶的環境,包括設置環境變量,定義函數和運行其他腳本。這允許在不同的會話甚至不同的機器上建立一致且可重現的環境。它還提供了一種方法來自動化需要在登錄時執行的任務,節省時間並降低了錯誤的可能性。
>如何創建NIX登錄腳本?腳本涉及編寫一個用戶登錄時執行的shell腳本。此腳本通常放置在用戶的主目錄中,並命名為.nix-profile。該腳本可以包含您要在登錄時運行的任何命令,例如設置環境變量或啟動服務。創建腳本後,您可以通過運行命令CHMOD x .nix-profile。通過在腳本開頭添加SET -X完成。這將導致外殼在執行每個命令之前打印它,這可以幫助您確定任何錯誤或意外行為。如果腳本在沒有錯誤但沒有產生預期結果的情況下運行,則可以在整個腳本中添加Echo語句,以打印變量或其他信息的值,以幫助您了解正在發生的事情。 NIX登錄腳本要管理軟件包? 是的,NIX登錄腳本可用於管理軟件包。 NIX具有功能強大的軟件包管理系統,可讓您以一致且可重複的方式安裝,升級和刪除軟件包。您可以在登錄時使用NIX登錄腳本自動安裝或更新軟件包,以確保您的環境始終具有您需要的軟件的最新版本。>如何使用nix登錄腳本設置環境變量?
>我使用NIX登錄腳本運行服務?這可以通過將命令添加到啟動所需服務的腳本中來完成。例如,您可以添加諸如SystemCtl啟動ServiceName之類的行以啟動SystemD服務。請注意,您將需要適當的權限來啟動服務,因此這可能需要使用sudo或root。要使NIX登錄腳本在登錄時自動運行,您需要將其添加到Shell的啟動文件中的適當位置。對於bash,這通常是主目錄中的.bash_profile或.bashrc文件。您可以在開始新的bash session時在此文件中添加諸如源〜/.nix-profile之類的行以運行nix登錄腳本。
如何使用nix login腳本來管理我的路徑? >我可以使用NIX登錄腳本來自動化任務嗎?需要在登錄時執行的任務自動化。這可以包括從設置環境變量和啟動服務到安裝軟件包和更新軟件的任何內容。通過自動執行這些任務,您可以節省時間,並確保每次登錄時都會始終執行它們。
以上是理解 *NIX登錄腳本的詳細內容。更多資訊請關注PHP中文網其他相關文章!