《Linux命令行》學習筆記

linux的內核主要由如下模塊組成:
  • 進程管理
  • 定時器
  • 中斷管理
  • 內存管理
  • 模塊管理
  • 虛擬文件系統接口
  • 文件系統
  • 設備驅動程序
  • 進程間通訊
  • 網絡管理
  • 系統引導
整體的模型如圖所示,Linux內核是計算機硬件和各類應用程序之間的媒介。
    Linux是類Unix系統,因此有一套基於Unix的準則和哲學:
  1. 小便是美
  2. 讓程序只作好一件事
  3. 可移植性比效率更重要
  4. 一切皆文件:使用方便;把硬件當作文件處理是安全的。
  5. 使用shell腳原本提升效率和可移植性。
  6. 避免使用可定型地下的用戶界面
  7. 全部程序都是數據的過濾器
    

                                                                   Linux Shell
Linux shell是用戶和Linux內核之間的接口,爲用戶提供使用操做系統的接口,當Shell向Linux傳遞命令的時候,內核作出相應的反應。
  • shell 是一個用戶程序,或者說是一個爲用戶和系統交互提供的環境
  • 從標準輸入 設備讀取命令的語言解釋程序,擁有本身內建的shell命令集,固然shell能夠被其餘程序調用
  • 打開控制檯,shell就會運行
  • shell不是內核一部分,可是它使用系統內核執行程序,建立文件

那使用方式打開shell呢?
  1. 終端。Linux提供基於GUI的登錄系統。形如XTerm、Gnome、KDE
  2. 安全shell鏈接(SSH),能夠經過SSH遠程登陸服務器或工做站訪問其shell
  3. 控制檯,基於文本的登錄系統


    Shell執行命令的解析方式:
    首先shell執行命令時,shell首先檢查命令是不是 內部命令,若不是檢查是不是一個應用程序(Linux自己程序or商業程序or自由軟件),shell在搜索路徑裏尋找這些程序。若是都沒有找到,shell將會顯示一條錯誤信息。若是找到,該命令將被分解爲系統調用並傳遞給Linux內核。
     shell下的組合命令:(備註:本身不經常使用的)
  • ctrl + w :刪除光標位置前的單詞
  • ctrl + u :清空行
  • ctrl + r :搜索先前使用的命令
  • ctrl + c:停止當前指令
  • ctrl + d:退出登陸shell
  • esc + t:調換光標前的兩個單詞
    Linux Shell 重要特性:其自己就是一個解釋類型的程序設計語言。所以 shell職場絕大多數在高級語言中的元素:函數、變量、數組
程序控制結構等。

                                                     shell種類
    由此看到在Linux裏面支持的shell不少。最經常使用的種類有 Bourne Shell(sh)、C Shell和Korn ShellBourne-Again Shell(bash)是 Linux系統中最經常使用的Shell。它是Bourne Shell的擴展,與Bourne Shell徹底向後兼容,而且在Bourne Shell的基礎上增長、加強了不少特性,具備不少特點,能夠提供如命令補全、命令編輯和命令歷史等功能。
     Korn Shell(ksh)集合了C Shell和Bourne Shell的優勢,並和Bourne Shell徹底兼容。Linux系統提供了ksh的擴展,它支持任務控制,能夠在命令行上掛起、後臺執行、喚醒或終止程序。
     如此衆多的shell,系統如何選擇呢?
    答:用戶登陸到Linux系統時,由/etc/passwd這個文件決定用戶將要使用哪一種Shell。查看當前帳戶shell:echo  $SHELL

                                                                S hell腳本
    shell腳本就是早期dos的.bat文件。讓使用者能夠一個操做執行多條命令。提供了數組、循環、條件以及邏輯判斷等重要功能,讓使用者能夠直接以Shell來寫程序。
     Shell腳本是利用Shell的功能所寫的一個程序,這個程序是 純文本文件格式,將一些Shell的語法與指令寫在裏面,而後用 正則表達式管道命令以數據流重定向等功能,以實現咱們所須要的功能。

     Shell腳本通常由如下幾部分構成:   

  •     Shell關鍵字——例如if…else,for do…done。
  •     Shell命令——例如export,echo,exit,pwd,return。
  •     Linux命令——例如date,rm,mkdir。
  •     文本處理功能——例如awk,cut,sed,grep。
  •     函數——經過函數把一些經常使用的功能放在一塊兒。例如,/etc/init.d目錄中的大部分或所有系統Shell腳本所使用的函數都包含在文件/etc/init.d/functions中。
  •     控制流語句——例如if…then…else或執行重複操做的Shell循環。


                                                     爲何使用Shell腳本
    在Linux機器啓動時,它執行/etc/rc.d目錄中的Shell腳原本加載系統配置和運行服務。
  • 使用簡單;
  • 節省時間。能夠把冗長的重複的一連串命令合併成一條簡單的命令;
  • 能夠建立你本身的自動化工具和應用程序;
  • 使系統管理任務自動化;
  • 由於腳本通過很好的測試,因此使用腳本作相似配置服務或系統管理任務時,發生錯誤的機會將大大減小。

嘗試寫一個腳本:
    
#!/bin/bash
#My first script
ls -l .*
腳本的第一行:告訴shell使用什麼程序解釋腳本。 本例中是 /bin/bash。其餘腳本語言中(perl,Python)也使用該機制。
腳本第二行:註釋。每行出現「#」符號都被bash忽視。
腳本最後一行:ls命令。
注意:默認狀況下,Linux不容許文件執行。所以須要chmod命令增長「x」屬性。2個方式 數字和字符模式。(755  a+x)

                                        Shell在Linux環境的角色
Linux環境的構成部分
內核——Linux操做系統的核心。 Shell ——爲用戶和內核提供一個交互的接口。 終端模擬器 ——它容許用戶輸入命令並在屏幕上回顯命令的運行結果。 Linux桌面和窗口管理器 ——Linux桌面是各類軟件應用程序的集合。它包括文件管理器、窗口管理器、終端模擬器等等

當Linux系統的運行級別爲3時,用戶能夠從本地登陸到系統控制檯,或在系統運行級別爲5時,直接以圖形界面方式登陸。
用戶登陸時Bash將會使用如下初始化文件和啓動腳本:
  • /etc/profile——系統級的初始化文件,定義了一些環境變量,由登陸Shell調用執行。
  • /etc/bash.bashrc或/etc/bashrc——其文件名根據不一樣的Linux發行版而異,每一個交互式Shell的系統級的啓動腳本,定義了一些函數和別名。
  • /etc/bash.logout——系統級的登陸Shell清理腳本,當登陸Shell退出時執行。部分Linux發行版默認是沒有此文件。
  • $HOME/.bash_profile、$HOME/.bash_login、$HOME/.profile——用戶我的初始化腳本,由登陸Shell調用執行。這三個腳本只有一個會被執行,按照此順序查找,第一個存在的將被執行。
  • $HOME/.bashrc——用戶我的的每一個交互式Shell的啓動腳本。
  • $HOME/.bash_logout——用戶我的的登陸Shell清理腳本,當登陸Shell退出時執行。
  • $HOME/.inputrc——用戶我的的由readline使用的啓動腳本,定義了處理某些狀況下的鍵盤映射
具體細分的話,有兩種狀況:
  1. 當用戶登陸時,登陸Shell會調用以下腳本:
    • /etc/profile——當用戶在運行級別3登陸系統時首先運行。
    • /etc/profile.d——當/etc/profile運行時,會調用該目錄下的一些腳本。
    • $HOME/.bash_profile、$HOME/.bash_login和$HOME/.profile——在/etc/profile運行後,第一個存在的被運行。
    • $HOME/.bashrc——上述腳本的中一個運行後即調用此腳本。
    • /etc/bashrc或/etc/bash.bashrc——由$HOME/.bashrc調用運行
  2. 當一個交互式的非登陸Shell啓動時,Bash將讀取並運行以下腳本:
    • $HOME/.bashrc——若是此文件存在即被運行。 
    • /etc/bashrc——將被$HOME/.bashrc調用運行。 
    • /etc/profile.d——此目錄下的腳本將被/etc/bashrc或/etc/bash.bashrc調用運行。

Bash啓動腳本主要設置的環境有:
  •     設置環境變量PATH和PS1(咱們將在2.3.1小節中介紹這兩個變量); 
  •     經過變量EDITOR設置默認的文本編輯器; 
  •     設置默認的umask(文件或目錄的權限屬性); 
  •     覆蓋或移除不想要的變量或別名; 
  •     設置別名; 
  •     加載函數。
------------------------------------------------------
<未完>