首頁 >科技週邊 >IT業界 >理解 *NIX登錄腳本

理解 *NIX登錄腳本

Lisa Kudrow
Lisa Kudrow原創
2025-02-19 12:30:12574瀏覽

Understanding *NIX Login Scripts

理解 *NIX登錄腳本

鑰匙要點

    /etc /profile腳本,登錄過程中所有shells讀取的 /etc /profile腳本用於設置$路徑和$ ps1,以及source /etc/bash.bashrc。
  • >單個bash用戶帳戶可以創建一個文件之一〜/.bash_profile,〜/.bash_login或〜/.profile可以來源,從而允許使用特定於用戶的設置。
  • >
  • bash將同時讀取/etc/bash.bashrc和〜/.bashrc,啟動時是不是登錄外殼的交互式外殼,但是debian從/etc/profile和〜/.profile登錄腳本來源分別。
  • 〜/.xsessionrc是加載環境變量或運行一次僅適用於x sessions的一次性實用程序的理想場所,〜/.bash_logout在從交互式外殼中登錄時會讀取。 對於系統範圍的環境變量,/etc/profile.d/somefile.sh是一個很好的選擇,而對於可能會四處走動的個人目錄位置,可使用。效率和會話靈活性。
  • >您是否曾經面臨過需要設置環境變量或運行程序以更改外殼或桌面環境的方案,但不知道從?
  • 這是一個普遍情況。許多任務都需要環境變量才能正確運行,從運行Debian包裝實用程序到管理IaaS以及兩者之間的所有內容。
>有時,程序通常只需要運行一次,例如Xrandr命令。此外,程序偶爾期望將其註入外殼,例如RBENV,RVM或SITEPONT自己的Envswitch實用程序。

這些設置不應只是從任何地方加載。有時,在對最佳地點做出判斷之前,應該考慮許多因素。

>讓我們看一下Debian GNU/Linux Jessie安裝上存在的一些常見選擇,並嘗試使這一切都有意義。

/etc/profile

默認情況下,debian提供 /etc /profile,它立即用於設置$路徑(用於聲明命令搜索路徑)。

>

>為方便起見,root用戶(用戶ID 0)獲取針對其他所有人定義的不同路徑。這是因為系統二進制(SBIN)位置是理想保留的,用於系統管理或必須作為root運行的程序。 root省略了遊戲路徑,因為除非絕對必要

下一步, /etc /profile處理$ PS1的設置,該設置用於設置主提示字符串。除非外殼是bash,否則定義的默認值為“ $”(或root的'#')。如果外殼是bash,/etc/bash.bashrc將被採購以處理(除其他方面)。我們將很快討論/etc/bash.bashrc。

>因此,在這一點上,我們可以在登錄過程中被所有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 啟動時,Bash將以該順序讀取/etc/bash.bashrc和〜/.bashrc,但前提)。這是Bash Shell的標準行為。但是,debian分別從/etc/profile和〜/.profile登錄腳本來源。這有效地改變了行為,使得 /eTC /bash.bashrc和.bashrc(如果存在)在啟動bash shell時總是調用,無論是否是登錄外殼。不要指望這種行為在不同的分佈中相同。

.bashrc是添加命令別名的好地方。實際上,有些人有很多別名,他們更喜歡將它們保存在單獨的文件中。 Debian的默認.bashrc尋找〜/.bash_aliases並在文件存在的情況下來源,因此請隨時將所有bash別名保留在此處。 .bashrc也是用戶覆蓋外殼變量(例如$ ps1或$ histsize(如果需要保留的命令記錄))的最佳場所。 Debian的默認.bashrc長100行,但很簡單,並且評論得很好。顧名思義,預期不預計Bashrc將通過非式殼殼來提供。

>

〜/.xsession和〜/.xsessionrc

如果您是GNU/Linux桌面用戶,可以通過顯示管理器本地登錄(而不是通過Getty登錄程序),/etc/profile和〜/.profile無法正常工作。一些顯示經理會錯誤地直接源自這些文件(例如GNOME顯示器管理器),但其他DMS(例如LightDM)則沒有。幸運的是,您還有其他選擇。

>啟動X窗口系統會話(無論使用虛擬終端中使用顯示管理器或StartX)時,將執行/etc/x11/xsession shell腳本。這基本上是登錄外殼使用的 /etc /profile的等效詞,僅用於x,而不是來源而不是直接執行。它也更加複雜。類似於/etc/profile.d,/etc/etc/x11/xsession sources腳本下的腳本中的/etc/profile的方式類似。此目錄中的所有腳本都以一個數字開始,因此腳本將按編號順序加載。 > debian Jessie在其中包含一個名為40x11-Common_xsessionrc的文件。它所做的只是檢查〜/.xsessionrc是否可讀,並(如果是)來源。這使得〜/.xsessionRC成為加載環境變量或僅適用於X會話的啟動時(例如Xrandr或Xmodmap)的一次性實用程序的理想場所。您也可以將其用於源/etc/profile和〜/.。如果您願意的話,因此您的會話管理器也會繼承所指定的任何環境變量(如果還沒有)。請注意,默認情況下不存在.xsessionrc,因此您必須創建它。

>

如果我們繼續瀏覽/etc/x11/xsession中的文件,我們會找到50x11-common_determine-startup,將會話管理器確定為 載入.如果存在〜/.xsession文件並且是可執行文件,則將作為99x11-Common_start的一部分保存和執行。由於〜/.xsession是為了運行會話管理器,因此X會話將註銷,此腳本終止時,您將返回顯示器登錄屏幕。

fike〜/.xsessionrc,〜/.xsession默認不存在,因此,如果需要,您必須創建一個。您可能會創建一個簡單的.xsession腳本,該腳本如下:

>

> X-Session-Manager默認為通過Update-Alternatives命令配置的任何內容。這樣,您可以通過SAIS,/usr/bin/startxfce4(切換到XFCE)來替換X-Session-Manager,可以輕鬆地將Sessair Manager從系統範圍的默認設置中移開,而其他用戶帳戶將完全不受影響。

當然,許多顯示經理提供了直接從登錄屏幕中選擇通用會話經理的能力,因此通常不需要此文件。但是,Xsessess提供了很大的靈活性,您可以在此處調用任何程序,而不僅僅是會話經理。例如,您可以在此處循環中調用Chromium或IceWeasel,而是在此處實現基本的售貨亭模式設置。 >

〜/.bash_logout

>我們以前介紹了用戶運行交互式bash登錄外殼時讀取的文件,但是如果您要在登錄時要運行程序怎麼辦?對於那個用例,〜/.bash_logout是您的朋友。 Debian中包含的默認值僅用於清除屏幕(我認為從安全角度來看很重要),但是可以將一些想像力用於其他目的,例如,在您之前顯示提醒幾秒鐘之前遠離機器。

>主要限制因素是.bash_logout僅在從交互式外殼中登錄時讀取。

其他選項

涵蓋了您可用的最常見選項。可能存在其他選項,具體取決於您的安裝(例如 /etc /環境),但我不認為它們可能存在於其他平台上,並且很少需要觸摸這些。

>示例

那麼,您應該在哪裡放置整個系統的環境變量?如果您希望一個環境變量影響每個用戶,/etc/profile.d/somefile.sh是一個很好的選擇。但是,這假設您使用的是登錄管理器,該管理器來源 /etc /profile。如果沒有,您可以(作為管理員)將腳本添加到/etc/x11/xsession.d/ inocer/etc/profile。

>如果您希望腳本找到個人目錄位置並將其添加到您的路徑中,則需要考慮該目錄是否會四處移動。如果將代碼添加到.profile中,則用戶將需要註銷並再次進入路徑以反映用戶會話期間目錄更改的路徑。相反,如果您將代碼添加到.bashrc,則意味著每次用戶打開XTERM時執行代碼 - 如果執行超過半秒鐘左右,則可能不是理想的。因此,這是權衡權衡取捨的問題。

>

>如果您只想為您的個人登錄會話變量一個環境變量怎麼辦?如果僅涉及X會話,則可以將其添加到〜/.xsessionrc。這具有一個優勢,通常將用於通過X Session Manager啟動的所有程序,因為它是在啟動X Session Manager之前設置的,因此已繼承。例如,某些圖形驅動程序可以通過運行

來禁用Vsync

因此,將.xsessionrc放置在所有程序中。

但是,如果將該行添加到.bashrc中,則只有通過XTERM啟動的程序會受到影響;通過窗口管理器啟動器啟動的程序將正常運行。您可以將其添加到.xsessionrc中的.profile和source .profile,但是即使您的X服務器不運行,您也不必要導出環境變量。
<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>
>

希望您現在可以更好地了解登錄和註銷腳本如何在Debian GNU/Linux系統上使用。如果您為這些登錄和註銷腳本創建或遇到了任何特別有趣或創意的用途,以及您如何處理它,請讓我們知道。

>。

在本系列中,我將討論dotfile管理選項。

>

經常詢問有關NIX登錄腳本的問題(常見問題解答)

> NIX登錄腳本在系統配置中的重要性是什麼?它們是當用戶登錄到NIX系統時會自動運行的腳本。這些腳本用於設置用戶的環境,包括設置環境變量,定義函數和運行其他腳本。這允許在不同的會話甚至不同的機器上建立一致且可重現的環境。它還提供了一種方法來自動化需要在登錄時執行的任務,節省時間並降低了錯誤的可能性。

>如何創建NIX登錄腳本?腳本涉及編寫一個用戶登錄時執行的shell腳本。此腳本通常放置在用戶的主目錄中,並命名為.nix-profile。該腳本可以包含您要在登錄時運行的任何命令,例如設置環境變量或啟動服務。創建腳本後,您可以通過運行命令CHMOD x .nix-profile。通過在腳本開頭添加SET -X完成。這將導致外殼在執行每個命令之前打印它,這可以幫助您確定任何錯誤或意外行為。如果腳本在沒有錯誤但沒有產生預期結果的情況下運行,則可以在整個腳本中添加Echo語句,以打印變量或其他信息的值,以幫助您了解正在發生的事情。 NIX登錄腳本要管理軟件包?

是的,NIX登錄腳本可用於管理軟件包。 NIX具有功能強大的軟件包管理系統,可讓您以一致且可重複的方式安裝,升級和刪除軟件包。您可以在登錄時使用NIX登錄腳本自動安裝或更新軟件包,以確保您的環境始終具有您需要的軟件的最新版本。

>如何使用nix登錄腳本設置環境變量?

>在nix登錄腳本中設置環境變量與添加諸如export varname = value的行一樣簡單。這將把環境變量變量設置為登錄會話持續時間的值值。您還可以使用“導出命令”使子過程可用。例如,導出路徑= $ path/path/to/dir會添加/路徑/dir到路徑環境變量,在該目錄中可執行可執行文件,而無需指定完整的路徑。

>我使用NIX登錄腳本運行服務?這可以通過將命令添加到啟動所需服務的腳本中來完成。例如,您可以添加諸如SystemCtl啟動ServiceName之類的行以啟動SystemD服務。請注意,您將需要適當的權限來啟動服務,因此這可能需要使用sudo或root。要使NIX登錄腳本在登錄時自動運行,您需要將其添加到Shell的啟動文件中的適當位置。對於bash,這通常是主目錄中的.bash_profile或.bashrc文件。您可以在開始新的bash session時在此文件中添加諸如源〜/.nix-profile之類的行以運行nix登錄腳本。

我可以使用nix登錄腳本來自定義我的shell提示嗎? >

是的,您可以使用NIX登錄腳本來自定義Shell提示。這可以通過在腳本中設置PS1環境變量來完成。例如,導出ps1 =“ u@h:w $”將設置提示以顯示用戶名,主機名和當前目錄。

如何使用nix login腳本來管理我的路徑?

通過NIX登錄腳本管理路徑

涉及將目錄添加到路徑環境變量。這可以通過諸如導出路徑= $ path/path/to/dir之類的行完成,該行將/路徑/to/dir添加到路徑中。這使該目錄中的可執行文件無需指定完整路徑。您可以根據自己的意願將盡可能多的目錄添加到路徑中,用結腸分開它們。

>我可以使用NIX登錄腳本來自動化任務嗎?需要在登錄時執行的任務自動化。這可以包括從設置環境變量和啟動服務到安裝軟件包和更新軟件的任何內容。通過自動執行這些任務,您可以節省時間,並確保每次登錄時都會始終執行它們。

以上是理解 *NIX登錄腳本的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:CRAFT CMS簡介下一篇:CRAFT CMS簡介