FreeBSD shell設定(轉)

gugu99發表於2007-08-11
FreeBSD shell設定(轉)[@more@]

  命令解釋程式shell是與使用者關係最密切的應用程式,使用者主要透過shell使用系統。在每次登入系統之後,就啟動了一個與使用者互動的shell,這個shell將給出一個提示符等待使用者輸入,(sh為 “$” ,csh為 “%” ,如果是使用root使用者,登入提示符將是 “#” ),然後對使用者的輸入進行解釋執行。

  FreeBSD的基本系統中可以使用的shell有兩個:sh和csh。這兩個基本shell的風格不太相同,不同的使用者常常會根據喜好來在兩者之間進行選擇。當然當前有更好的shell程式可供使用者選擇,這些後續的 shell均是根據sh或csh的風格進一步發展出的,因此可以說在shell中,也有兩種風格,需要使用者根據自己的使用習慣進行選擇。

  對於管理員來將,要為使用不同shell的使用者都設定好基本的環境,就必須瞭解這兩種風格的shell設定方式。系統登入時,sh將首先執行/etc/profile檔案,為每個使用者設定最基本的環境,而csh將使用 /etc/csh.cshrc,csh.login和csh.logout作為系統csh資原始檔。執行了系統級別的登入檔案之後,每個使用者的shell就在該使用者的主目錄下尋找該使用者個人的資原始檔:sh使用.profile檔案,csh使用.login和.cshrc檔案。這些資原始檔均使用相應的shell語言,/etc/profile和個人目錄下的.profile使用sh風格的控制語言,/etc/cshrc和個人目錄下的.login、.cshrc使用csh 風格的控制語言。系統管理員可以改動這些資原始檔,為使用者提供一個最方便的使用環境。當然,系統管理員沒有必要直接去修改個人主目錄下的資原始檔,這些檔案應該由使用者自己管理,但是系統管理員可以在生成帳號時為使用者產生預設的資原始檔,以減輕使用者設定資原始檔的麻煩。adduser命令預設使用/usr/share/skel下的檔案為使用者提供各種資原始檔的預設設定,這個目錄下除了可以放入shell的資原始檔之外,還可以放入其他應用程式的資原始檔。由於這些資原始檔都是以點開頭的隱藏檔案,為了表示清楚,在skel目錄下使用了一種轉換方式,如使用dot.profile 作為.profile的模板。

  # ls /usr/share/skel

  dot.cshrc dot.mail_aliases dot.rhosts

  dot.login dot.mailrc dot.shrc

  dot.login_conf dot.profile

  在/usr/share/skel中為使用者設定的預設配置檔案,在使用者生成之後,就不會對使用者產生影響了。因此對系統登入檔案進行修改更有效和直接。對於sh風格的使用者,可以更改/etc/profile檔案,對csh應更改 /etc/csh.cshrc檔案。在這些檔案中可以改動shell使用的環境變數,這樣來改變shell的行為方式,或者執行一系列自動操作,完成一些使用者登入時需要自動執行的任務。

  常用的環境變數:

EDITOR 設定使用者常用的編輯器,很多程式檢視這個變數來啟動具體的編輯器,可以 根據系統的情況更改
HOME 使用者的主目錄的名字,這個變數由login程式設定,一般不需要更改
DISPLAYX 使用這個環境變數來標識具體的顯示位置,格式為“計算機名字:X服務 器序號.螢幕序號” ,例如:xt1:0.0,它不需要在資原始檔中進行定義
LANG 系統使用的語言,用於系統的本地化,預設為 “C” ,具體的設定可以檢視 /usr/share/locale 目錄,那裡定義了不同的語言,可以將其設定為zh_CN.EUC來使得一些軟體使用中文字元。
MAIL 使用者mail檔案的位置,也不需要改動
PATH 使用冒號分隔的一系列路徑,系統用它來查詢具體可執行程式,因此這個變數非常重要,可以根據具體的情況改動其值。為了安全的原因,不要將當前目錄作為執行程式的搜尋路徑,尤其對於root使用者。這樣在當前目錄下啟動程式,需要加上路徑,例如啟動當前目錄下的a.out 程式,輸入 “./a.out” 。
MANPATH 使用冒號分隔的一系列路徑,系統用它來查詢具體命令的線上手冊,設定方法與PATH相同。
PS1sh 風格的shell使用這個變數的值作為提示符,預設值為 “$”(root為 “#” )。更現代的sh就增強了提示符的靈活性,可以在提示符中加入當前目錄、使用者名稱、機器名,命令的序號等。
PS2sh 風格的shell使用這個變數的值作為後續提示符,提示命令還沒有完全輸入,預設為 “>“
TERM 終端的型別,對於需要全屏操作的程式,非常重要。有時要根據情況對設定進行調整。
TZ 時區設定,具體的時區資訊位於/usr/share/zoneinfo目錄下,需要設定為適合本地時區的標準值

  可以將使用者的shell設定為特殊的應用程式,來達到對特殊使用者進行限制的目的。例如,僅僅給予使用者一個電子郵件信箱,但不想給他終端使用權,可以將使用者的shell更改為/bin/true或者其他立即退出的程式。為了安全起見,使用者shell應該是一個不存在漏洞的二進位制程式,最好不要使用解釋性語言指令碼作為登入shell。由於系統認可的shell程式是在/etc/shells檔案中列出的程式,將特殊使用者的shell設定為特殊的應用程式,但這些應用程式沒有列入shells檔案,那麼這個使用者就會被一些應用程式區分出與普通使用者的差異,從而拒絕提供服務。例如ftp伺服器程式ftpd,透過檢查使用者的shell是不是標準shell,來區分這個使用者是普通使用者還是用於特定目的的使用者。

  注意,不能輕易更改root使用者的shell,因為這可能會造成root無法正常登入,而使得無法正常執行系統維護。即使是將root的shell更改為其他更新、更強功能的標準shell,例如bash或tcsh,也是不應該。雖然這些shell也是非常成熟的shell程式,仍然不應該使用它們作為root的shell。主要原因是這些 shell一般沒有被安裝到根分割槽中,那麼當系統進入單使用者狀態時就會發生問題。另外這些shell可能會由於進行版本升級等原因,而偶然形成故障,造成root無法正確登入。此外,由於這些非標準shell不一定來自於系統的安裝盤,因此也存在對shell來源的安全信任問題,必須保證這些shell不是經攻擊者更改過的版本。如果要使用它們 shell提供的方便特性,可以在系統登入之後再使用全路徑執行它們。

  • 配置使用者shell

  事實上sh與csh,並不是普通使用者的最佳選擇,因為這兩個shell在易用性方面做的不夠好,例如命令列編輯功能不強、不能利用熱鍵重複執行命令等。較新的shell,如bash和tcsh都具有這些方便使用者使用的功能,但必須安裝了這些shell程式之後,才能更改普通使用者的shell設定以使用這些shell程式。更改使用者的shell 可以使用pw、vipw或chsh。

  這兩個shell分別遵照sh和csh的風格,因此喜好csh風格的可以選擇tcsh,而喜歡sh風格的選擇 bash。除了這兩種shell之外,還有ksh、zsh等shell可供選擇。如果對兩種shell沒有偏好,可以選擇bash,它是一個GNU軟體,比標準sh功能強大的多。

  使用了這兩些增強型shell之後,使用者就可以使用shell提供的命令列編輯功能。按照習慣的不同,可以選擇vi風格的編輯方式或emacs風格的方式,預設為emacs方式,這種方式使用方向鍵來回溯執行過的命令,並進行修改,而vi風格使用字母命令作編輯鍵,例如使用h、j、k、l四個鍵來移動游標,vi風格的好處是不使用基本鍵盤之外的控制鍵,因而可以適用於任何終端裝置,並且進行編輯時手不需離開基本鍵盤,熟練操作之後最為快捷。emacs風格比起vi風格更適合從個人計算機轉向Unix的使用者的習慣。bash, ksh ,zsh下使用下面的命令在emacs 風格和vi風格切換:

  bash$ set -o emacs

  bash$ set -o vi

  tcsh中使用不同的命令:

  % bind emacs

  % bind vi

  還可以為常用的命令設定別名,簡化使用者輸入,例如:

  bash$ alias ec=”echo This is a alias”

  bash$ ec

  This is a alias

  shell用於方便使用者操作的另一項能力是自動補全命令或檔名的功能,因為FreeBSD下的檔名可能很長,將它們全部輸入比較麻煩。事實上可以輸入部分名字,然後按Tab鍵(在vi風格下是連續兩次按Esc鍵),shell 將自動補全檔名的剩餘部分。如果已經輸入的這部分名字不能確定具體的命令或檔案,那麼shell只將能確定的部分補上,然後響鈴通知使用者繼續輸入以明確具體的檔案。

  事實上即使在基本的sh或csh下,也可以使用 “*” 等特殊字元,用模式匹配的方式來簡化輸入。

  bash$ cd /usr/loca*

  bash$ pwd

  /usr/local

  Unix中的多數程式都具備模式匹配的處理能力,而shell的模式匹配功能最為常用。shell可以使用這些特殊模式來配置多個檔案,達到簡化操作的目的。如果要熟練掌握Unix,必須掌握模式匹配。

  當試圖在bash下輸入漢字的時候,除了必須設定終端屬效能接受8位字元之外(執行stty pass8命令),還需要設定bash的輸入輸出轉換,可以在登入指令碼.profile檔案中包括以下設定:

  bind 'set convert-meta off'

  bind 'set meta-flag on'

  bind 'set output-meta on'

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-944776/,如需轉載,請註明出處,否則將追究法律責任。

相關文章