如果經(jīng)常接觸“使用Linux的大神們”俩垃,聽他們的討論励幼,就應(yīng)該不會對“shell”陌生,它是我們下達命令的一種方式口柳。想要像大神們一樣面對高級的黑屏幕輕松通過shell腳本批量得完成一連串的工作嗎苹粟?那就來試著學(xué)習(xí)寫shell吧。今天跃闹,對于我們初出茅廬的小白嵌削,先從bash開始來認識shell毛好。然后過些時日再學(xué)習(xí)寫shell腳本~激動嗎?無論如何苛秕,貓毛是激動的~
前面我們都有提到肌访,管理計算機硬件的其實是操作系統(tǒng)的核心(kernel),由于它太重要了艇劫,倘若被用戶輕易修改便會造成系統(tǒng)崩潰吼驶,因此核心通常都是被保護的。雖然我們不能隨意使用kernel港准,但總是要讓我們操作系統(tǒng)嘛旨剥,于是就有了操作系統(tǒng)層面之上發(fā)展的 - 應(yīng)用程序。下面這張圖片不知道用了多少次了浅缸,還是再放一次吧轨帜,有利于理解:
從圖可以看出,應(yīng)用程序其實是在最外層衩椒,就如同雞蛋的外殼蚌父,用戶可以通過應(yīng)用程序來指揮核心,讓核心達成我們所需要的硬件任務(wù)毛萌,如下圖苟弛,Shell,KDE,application都是應(yīng)用程序。補充一個附加知識點 -(KDE:K桌面環(huán)境的縮寫阁将,一種著名的運行于Linux膏秫、Unix以及FreeBSD等操作系統(tǒng)上的自由圖形桌面環(huán)境,整個系統(tǒng)采用的都是 TrollTech公司所開發(fā)的Qt程序庫)
扯了那么多缤削,到底什么是shell(殼程序)?
shell就是一種具有特定功能的應(yīng)用程序!它有什么特定功能吹榴?它的功能就是給用戶提供操作系統(tǒng)的接口亭敢,同時,可以操作其他各種應(yīng)用程序來呼叫核心工作图筹。因而帅刀,廣義上講,只要能夠操作應(yīng)用程序的接口都能夠稱為殼程序(shell)远剩,其中也包括圖形接口的軟件(只要該圖形接口也能夠操作各種應(yīng)用程序來呼叫核心工作就可以)扣溺。
狹義的殼程序是指令列方面的軟件(即文字接口的shell),而我們提到更多的也就是這種狹義上的殼程序(殼程序=shell)瓜晤。還記得Linux基礎(chǔ)操作里面學(xué)到的一些指令嘛娇妓?例如,man,vi等等指令活鹰,這些指令其實都是獨立的應(yīng)用程序哈恰,而我們可以通過shell來操作這些應(yīng)用程序,讓這些應(yīng)用程序呼叫核心來運作所需要的工作志群。
終于要切入正題了着绷,今天要學(xué)習(xí)的Bash,就是一種文字接口的shell锌云。由于shell依據(jù)發(fā)展的不同有很多的版本荠医,例如 Bourne SHell(sh)、在Sun里頭預(yù)設(shè)的C Shell等等桑涎。
1.系統(tǒng)合法的shell 與 /etc/shells功能
就像前面提到的彬向,shell的版本有很多,雖然各家shell的功能都差不多攻冷,但是在某些語法的下達方面則有所不同娃胆,還是要根據(jù)自己的需求一種選擇適合自己系統(tǒng)的shell來學(xué)習(xí)為好,而Linux預(yù)設(shè)就是使用bash等曼。所以我們這里就要好好認識bash了里烦。
不過,什么是系統(tǒng)合法的shell?
系統(tǒng)合法的shell都是要寫入/etc/shells文件的禁谦,系統(tǒng)某些服務(wù)在運作過程中胁黑,會通過讀取這份文件來檢查使用者能夠使用的shells。
設(shè)置系統(tǒng)合法的shell干什么用州泊?(附加知識)
舉例來說,某些FTP網(wǎng)站會去檢查使用者的可用shell丧蘸,如果不想讓某些用戶使用FTP以外的主機資源時,可能會給予該使用者一些怪怪的shell遥皂,讓使用者無法以其他服務(wù)登入主機力喷。然后你就要將那些怪怪的shell寫到/etc/shells文件當(dāng)中了。(這里看不懂沒關(guān)系渴肉,不影響后面理解的)
2.Bash shell的功能
2.1 命令編修能力(history)
它能記憶使用過的命令冗懦,因此只要在$
提示的指令列按“上”“下”鍵就可以找到前/后一個輸入的指令。而且仇祭,這么多的指令記錄在你的home目錄內(nèi)的.bash_history文件里披蕉。如果你有接觸Linux的渠道,可以按照下面的指令操作來看一下上一次登陸自己執(zhí)行的指令:
$ cd # 回到home目錄 $指代命令行
$ vi ~/.bash_history # 查看home目錄下的 .bash_history 文件 $指代命令行
值得注意的是:
- .bash_history :記錄前一次登陸以前所執(zhí)行過的指令
- 這一次登陸所執(zhí)行的指令都暫存在內(nèi)存中
2.2 命令與文件補全功能(巧用 tab)
- tab 接在一串指令的 第一個字母 的后面乌奇,則為 命令補全
- tab 接在一串指令的 第二個字母 的后面没讲,則為 文件補齊
- tab 接在某些指令后面,可以進行 選項/參數(shù)的補齊功能(前提:需要安裝 bash-completion軟件)
2.3 命令別名設(shè)定功能(alias)
我們都知道 ls -al
可以知道當(dāng)前目錄底下的所有文件(包含隱藏檔)及所有的文件屬性礁苗,由于這個指令串太長了爬凑,每次輸入都好麻煩,我們可以使用ll
代替嘛试伙?
可以直接在命令行中輸入
$ alias ll='ls -al'
以后你就可以直接通過指令“l(fā)l”查看當(dāng)前目錄下所有文件及他們的屬性了
2.4 工作控制嘁信、前景背景控制
這個后面再提于样,使用工作控制和前、背景的控制可以讓工作進行的更為順利潘靖。
2.5 程序化腳本 (shell scripts)
shell scripts可以將你平時管理系統(tǒng)常需要下達的連續(xù)指令寫成一個文件穿剖,該文件并且可以透過對談交互式的方式來進行主機的偵測工作,同時可以借由shell提供的環(huán)境變量及相關(guān)指令來進行設(shè)計卦溢『啵總之功能強大,后面緊接著就要學(xué)習(xí)了单寂。
2.6 通配符(Wildcard)
bash支持許多的通配符來幫助用戶查詢與指令下達贬芥,舉例:
ls -l /user/bin/X* # 知道/user/bin底下有多少X開頭的文件
ls -l /user/bin/ *txt #知道/user/bin底下有多少 txt結(jié)尾的文件
3.查詢指令是否為 Bash shell 的內(nèi)建命令:type
$ type [-tpa] name
4.指令的下達與快速編輯按鈕
4.1 指令跳脫
\
有“指令跳脫”的作用,例如\[Enter]
讓[Enter]按鍵不再具有“開始執(zhí)行”的功能宣决。注意:\
僅跳脫“緊接著的下一個字符”而已
4.2 指令快速編輯按鈕
當(dāng)我們順利的在終端機上面登入后蘸劈,Linux就會依據(jù)/etc/passwd文件的設(shè)定給我們一個shell(預(yù)設(shè)是bash),然后我們就可以依據(jù)上面的指令下達方式來操作shell疲扎。