Linux 之 Bash -- 認識Bash這個shell

如果經常接觸“使用Linux的大神們”,聽他們的討論,就應該不會對“shell”陌生,它是我們下達命令的一種方式。想要像大神們一樣面對高級的黑屏幕輕鬆通過shell腳本批量得完成一連串的工作嗎?那就來試着學習寫shell吧。今天,對於我們初出茅廬的小白,先從bash開始來認識shell。過兩天,就要學習寫shell腳本了~激動嗎?無論如何,Panda是激動的~

前面我們都有提到,管理計算機硬件的其實是操作系統的核心(kernel),由於它太重要了,倘若被用戶輕易修改便會造成系統崩潰,因此核心通常都是被保護的。雖然我們不能隨意使用kernel,但總是要讓我們操作系統嘛,於是就有了操作系統層面之上發展的 - 應用程序。下面這張圖片不知道用了多少次了,還是再放一次吧,有利於理解:


從圖可以看出,應用程序其實是在最外層,就如同雞蛋的外殼,用戶可以通過應用程序來指揮核心,讓核心達成我們所需要的硬件任務,如下圖,Shell,KDE,application都是應用程序。補充一個附加知識點 -(KDE:K桌面環境的縮寫,一種著名的運行於Linux、Unix以及FreeBSD等操作系統上的自由圖形桌面環境,整個系統採用的都是 TrollTech公司所開發的Qt程序庫)

扯了那麼多,到底什麼是shell(殼程序)?

shell就是一種具有特定功能的應用程序!它有什麼特定功能?它的功能就是給用戶提供操作系統的接口,同時,可以操作其他各種應用程序來呼叫核心工作。因而,廣義上講,只要能夠操作應用程序的接口都能夠稱爲殼程序(shell),其中也包括圖形接口的軟件(只要該圖形接口也能夠操作各種應用程序來呼叫核心工作就可以)。
狹義的殼程序是指令列方面的軟件(即文字接口的shell),而我們提到更多的也就是這種狹義上的殼程序(殼程序=shell)。還記得Linux基礎操作裏面學到的一些指令嘛?例如,man,vi等等指令,這些指令其實都是獨立的應用程序,而我們可以通過shell來操作這些應用程序,讓這些應用程序呼叫核心來運作所需要的工作。
終於要切入正題了,今天要學習的Bash,就是一種文字接口的shell。由於shell依據發展的不同有很多的版本,例如 Bourne SHell(sh)、在Sun裏頭預設的C Shell等等。

1.系統合法的shell 與 /etc/shells功能

就像前面提到的,shell的版本有很多,雖然各家shell的功能都差不多,但是在某些語法的下達方面則有所不同,還是要根據自己的需求一種選擇適合自己系統的shell來學習爲好,而Linux預設就是使用bash。所以我們這裏就要好好認識bash了。
不過,什麼是系統合法的shell?
系統合法的shell都是要寫入/etc/shells文件的,系統某些服務在運作過程中,會通過讀取這份文件來檢查使用者能夠使用的shells。

設置系統合法的shell幹什麼用?(附加知識)
舉例來說,某些FTP網站會去檢查使用者的可用shell,如果不想讓某些用戶使用FTP以外的主機資源時,可能會給予該使用者一些怪怪的shell,讓使用者無法以其他服務登入主機。然後你就要將那些怪怪的shell寫到/etc/shells文件當中了。(這裏看不懂沒關係,不影響後面理解的)

2.Bash shell的功能

2.1 命令編修能力(history)

它能記憶使用過的命令,因此只要在$提示的指令列按“上”“下”鍵就可以找到前/後一個輸入的指令。而且,這麼多的指令記錄在你的home目錄內的.bash_history文件裏。如果你有接觸Linux的渠道,可以按照下面的指令操作來看一下上一次登陸自己執行的指令:

$ cd   # 回到home目錄 $指代命令行
$ vi ~/.bash_history  # 查看home目錄下的 .bash_history 文件 $指代命令行

值得注意的是:

  • .bash_history :記錄前一次登陸以前所執行過的指令
  • 這一次登陸所執行的指令都暫存在內存中

2.2 命令與文件補全功能(巧用 tab)

  • tab 接在一串指令的 第一個字母 的後面,則爲 命令補全
  • tab 接在一串指令的 第二個字母 的後面,則爲 文件補齊
  • tab 接在某些指令後面,可以進行 選項/參數的補齊功能(前提:需要安裝 bash-completion軟件)

2.3 命令別名設定功能(alias)

我們都知道 ls -al 可以知道當前目錄底下的所有文件(包含隱藏檔)及所有的文件屬性,由於這個指令串太長了,每次輸入都好麻煩,我們可以使用ll代替嘛?
可以直接在命令行中輸入
$ alias ll='ls -al'
以後你就可以直接通過指令“ll”查看當前目錄下所有文件及他們的屬性了

2.4 工作控制、前景背景控制

這個後面再提,使用工作控制和前、背景的控制可以讓工作進行的更爲順利。

2.5 程序化腳本 (shell scripts)

shell scripts可以將你平時管理系統常需要下達的連續指令寫成一個文件,該文件並且可以透過對談交互式的方式來進行主機的偵測工作,同時可以藉由shell提供的環境變量及相關指令來進行設計。總之功能強大,後面緊接着就要學習了。

2.6 通配符(Wildcard)

bash支持許多的通配符來幫助用戶查詢與指令下達,舉例:

ls -l /user/bin/X* # 知道/user/bin底下有多少X開頭的文件
ls -l /user/bin/ *txt #知道/user/bin底下有多少 txt結尾的文件

3.查詢指令是否爲 Bash shell 的內建命令:type

$ type [-tpa] name

4.指令的下達與快速編輯按鈕

4.1 指令跳脫

\有“指令跳脫”的作用,例如\[Enter]讓[Enter]按鍵不再具有“開始執行”的功能。注意:\僅跳脫“緊接着的下一個字符”而已

4.2 指令快速編輯按鈕

當我們順利的在終端機上面登入後,Linux就會依據/etc/passwd文件的設定給我們一個shell(預設是bash),然後我們就可以依據上面的指令下達方式來操作shell。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章