Linux的使用者接口
作業系統為使用者提供了兩種接口:
第1種是指令接口,使用者利用這些指令來組織和控制作業的執行,或者對計算機系統進行管理。
第2種是程式接口,程式設計人員使用他們來請求作業系統服務。
指令接口為:CLI(指令行界面)和GUI(圖形使用者界面),TUI(文本使用者界面)。
什麼是Shell?
想要聽音樂需要什麼?
首先需要聲霸卡
作業系統的核心可以支援這個聲霸卡(有相應的聲霸卡驅動程式)
使用者發出播放音樂的指令
必須發出指令,硬體才會工作。如果可以直接同硬體溝通,那麼不需要核心。否則,使用者的指令必須先發送給核心,然後核心再去控制硬體。shell正是使用者與核心溝通的平台:
使用者可以通過shell給核心發送指令
核心也可以把指令執行的過程或者結果資訊發送到shell給使用者看。
Shell為使用者提供了輸入指令和參數,并且可得到指令執行結果的環境。
Shell作為作業系統的外殼,為使用者提供使用作業系統的接口,是指令語言、指令解釋程式及程式設計語言的統稱。
BASH Shell
早年的Unix年代,Unix發展者衆多,是以shell有很多不同版本,例如常聽到的 Bourne Shell (sh) 、在Sun中預設的C Shell、 商業上常用的K SHell以及TCSH 等,每一種Shell都各有其特點。
Linux 使用的是Bourne Again Shell(簡稱 bash),這個 Shell是Bourne Shell的增強版本,也是基于GNU的架構下發展出來的。
BASH Shell的特點:
指令記憶能力
Linux可以記憶以前輸入過的指令,隻要使用上下鍵就可以找到以前執行的指令來執行。
這些指令按照先後順序記錄在使用者Home目錄下的隐藏檔案.bash_history中
.bash_history裡面記錄了上一次登入以前執行過的指令,本次登入執行的指令都儲存在記憶體中,隻有成功登出之後,記憶體資料才會重新整理到.bash_history檔案中
bash執行指令時,不會立刻将指令寫入曆史指令檔案,而是先存放在記憶體的緩沖區中,該緩沖區被稱為曆史指令清單,等bash退出再将曆史指令清單寫入曆史指令檔案,
可以使用 bash 的内部指令 history ,來顯示和編輯曆史指令。
文法1:history [n]
功能:當 history 指令沒有參數,将顯示整個曆史指令清單的内容。如果使用 n 參數,将顯示最後 n 個曆史指令。
文法2:history [-a|n|r|w] [filename]
history 指令各選項及其功能說明見表。
選項 功能
-a 把目前的曆史指令記錄追加到曆史指令檔案中
-c 清空曆史指令清單
-n 将曆史指令檔案中的内容加入到目前曆史指令清單中
-r 将曆史指令檔案中的内容更新(替換)目前曆史指令清單
-w 把目前曆史指令清單的内容寫入曆史指令檔案,并且覆寫曆史指令檔案的原來内容
filename 如果 filename 選項沒有被指定,history 指令将使用環境變量HISTFILE指定的檔案名
指令别名與曆史:
執行曆史指令的方法
方法1:!number
執行曆史指令中編号為number的那個指令
方法2:!command
執行曆史指令中最近一次以command開頭的指令
方法3:!!
執行上一條指令
指令補全補全功能
如果在執行指令的時候不想按下太多的按鍵(例如指令pcprofiledump),在輸入了 pcprofile 之後,再按下 [Tab] 鍵的話,那麼 bash 馬上會自動的将後面的dump接上來。
如果有重複的指令,那麼按下兩次 [Tab] 将會把所有重複的指令列出來。
直接在提示字元後面連按兩次 <tab> 鍵,則系統會将所有可以使用的指令都列出來。
例如,如果想要知道目前系統裡面,所有以b開頭的指令呢?就是按下 b 之後,連按兩次<tab>就ok。
檔案名稱補全功能
如果用 vi 來讀取某個檔案,例如 /etc/man.config 這個檔案,那麼可以輸入 vi /etc/man之後,直接按下 <tab> 鍵,該檔案名稱就會被自動的補上。
同樣,出現檔案多個比對項時,可以按下兩個TAB鍵來顯示所有比對項。
這樣大大增加了指令輸入的正确率。
指令别名設定功能
假如我需要知道某個目錄底下的所有檔案資訊(包含隐藏檔案)及所有的檔案屬性,那麼我就必須要輸入ls -al 這樣的指令。
每次都輸入多麻煩!
可以通過為自己經常使用的指令(包括參數)定義别名來避免過多輸入。
例如:alias lm='ls -al' (注意=兩邊不要有空格)
那麼以後lm就等于執行ls -al
直接輸入alias,可以顯示目前以及定義好的所有别名
文法:alias [别名]=[指令名稱]
功能:設定指令的别名,如果不加任何參數,僅輸入alias指令,将列出目前所有的别名設定。alias指令僅對該次登入系統有效,如果希望每次登入系統都能夠使用該指令别名,可以編輯~/.bashrc檔案(root使用者是/root/.bashrc,普通使用者是/home/*/.bashrc),按照如下格式添加一行指令:
alias 别名="要替換的終端指令"
儲存.bashrc檔案,登出,再次登入系統,就可以使用指令别名了。
執行個體: 設定指令别名
執行不加任何參數的alias指令,将列出目前所有的别名設定,如下所示。
[root@localhost ~]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
#alias showhome=‘ls -l /home’,為“ls -l /home”指令設定别名showhome,
使用showhome指令,再執行unalias showhome指令,取消别名設定,此時showhome已經不是指令了。