歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Bash功能與使用技巧

Bash功能與使用技巧

日期:2017/3/1 10:00:03   编辑:Linux編程

目錄:
歷史命令
命令別名
管道與重定向
常用快捷鍵
作業控制
花括號擴展
一個完整計算機的體系結構包括:硬件與軟件,而軟件又分為系統軟件與應用軟件,負責對硬件僅需管理與操作的是系統軟件的內核部分,用戶是無法與硬件或內核打交道的,用戶通過應用程序或部分系統軟件發出指令(可能是通過浏覽器發送一封郵件),這些指令會被翻譯並傳給內核,內核在得知用戶的需求後調度硬件資源來完成操作(比如,使用網卡發送數據包)。在Linux環境下,我們一般通過Shell來與內核交流,並最終實現我們想要使用計算機資源的目的。由於Linux的開放性特點,使得在Linux下對Shell的選擇也很多,CentOS 6.3系統中可以使用的Shell有/bin/sh、/bin/bash、/bin/tcsh、/bin/csh這幾種,/etc/shells文件說明了當前系統有哪些可用的Shell。不同的Shell有不同的特點以及操作方式,我們這裡以CentOS默認使用的Shell為講解案例即Bash。
1.2 BASH功能介紹
1.2.1 命令歷史
Bash擁有自動記錄命令歷史的功能,用戶所執行的命令會在注銷時自動記錄到自己家目錄下的.bash_history 這樣一個隱藏文件中。查看這些命令歷史記錄的方法有很多,可以通過直接打開文件來查看,也可以通過鍵盤的上下鍵來上翻或下翻歷史記錄,還可以通過history命令查看歷史記錄,所有的命令歷史都有記錄編號。命令歷史能夠記錄的信息數量由HISTSIZE變量所決定,CentOS 6.3默認通過/etc/profile文件定義了HISTSIZE=1000,也就是最多可以記錄最近所使用的1000條命令,當有第1001條命令執行時第一條命令會被覆蓋,執行history -c命令可以清空所有的歷史記錄。
記錄命令歷史的除了可以查看歷史記錄外,還可以在需要時直接調用歷史記錄再次執行該命令:
1.上下鍵翻閱歷史命令,找到合適的命令後直接回車即可執行。
2. 輸入!string調用命令歷史(string為關鍵字),如!vim將調用最後一次執行的以vim開頭的命令。或者通過!n來准確定位歷史記錄,如!242將直接調用命令歷史的第242條記錄並執行。
3. 通過Ctrl+r快捷鍵打開搜索功能,接著輸入關鍵字即可在命令歷史中搜索相關命令,回車完成執行操作。如果沒有搜索到適合的命令按ESC鍵退出搜索。
1.2.2 命令別名
在CentOS 6.3系統中我們可以直接使用ll命令來顯示文件的詳細信息,其實系統中並沒有ll這樣一個命令,它僅是被提前定義好的一個別名而已,別名的好處是可以把本來很長的指令簡化縮寫,為常用且復雜的命令及選項創建別名可以大大提高日常工作效率。

  1. [root@centos6 ~]# alias #查看系統當前所有別名
  2. alias cp='cp -i'
  3. alias l.='ls -d .* --color=auto'
  4. alias ll='ls -l --color=auto'
  5. alias ls='ls --color=auto'
  6. alias mv='mv -i'
  7. alias rm='rm -i'
  8. [root@centos6 ~]# alias h5=’head -5’ #定義新的別名
  9. [root@centos6 ~]# unalias h5 #取消別名定義

1.2.3 管道與重定向
Bash的標准輸入設備是鍵盤、鼠標、手寫板等設備,標准輸出為顯示器,一般我們通過鍵盤輸入命令並執行,系統將返回信息顯示在屏幕上,默認不管是正確的還是錯誤的信息都將輸出至顯示器。標准輸入的文件描述符為0,標准輸出的文件描述符為1,錯誤輸出的文件描述符為2。但有時我們需要改變這樣的標准輸入與輸出方式,Linux中我們可以使用重定向符(<、>、<<、>>、|)重新定義輸入與輸出。
管道使得我們可以將多條命令連接在一起使用,它的作用是將一個命令的標准輸出重定向給下一個命令並作為該命令的標准輸入。例如,使用ifconfig eth0 | grep ‘inet addr’命令過濾包含IP地址的行,ifconfig本身會輸出大量網絡接口的信息,由於這裡使用了管道符號(|)所以ifconfig命令的所有輸出都將作為grep命令的輸入內容,最終實現過濾包含IP地址的行。
對於標准的輸出信息是輸出至顯示器,而有時你可能並不需要這些輸出信息,又或者是暫時不需要在屏幕上看到這些信息;另外對於輸入一般是通過鍵盤輸入,而有時你或許希望可以從文件中讀取輸入信息。輸出重定向可以使用>或>>符號,使用>可以將輸出導入至文件,如果文件不存在則創建該文件,如果文件已經存在則會覆蓋該文件的內容;而使用>>可以將輸出追加至文件;另外,對應錯誤信息的重定向需要使用2>或2>>符號實現。輸入重定向可以使用<符號,它可以可以幫助我們從文件中提取輸入信息。
以下通過幾個簡單的實例演示重定向的使用方法:

  1. [root@centos6 ~]# rpm -qa |grep gcc #查詢計算機中是否安裝了gcc軟件
  2. [root@centos6 ~]# echo “pass” | passwd --stdin tom #設置tom的密碼為pass
  3. [root@centos6 ~]# ls #查看當前文件列表
  4. anaconda-ks.cfg install.log install.log.syslog
  5. [root@centos6 ~]# ls > list.txt #將輸出保存至list.txt,屏幕無輸出
  6. [root@centos6 ~]# hostname >> list.txt #將主機名追加至list.txt文件末尾
  7. [root@centos6 ~]# mail -s test [email protected] <list.txt #發送郵件,郵件內容來自文件
  8. [root@centos6 ~]# ls -l abc install.log #查看文件詳細信息,abc並不存在
  9. ls: cannot access abc: No such file or directory
  10. -rw-r—r--. 1 root root 9064 Dec 4 09:30 install.log
  11. [root@centos6 ~]# ls -l abc install.log 2> error.txt #僅將錯誤重定向,不影響正確輸出
  12. -rw-r—r--. 1 root root 9064 Dec 4 09:30 install.log
  13. [root@centos6 ~]# ls -l abc install.log > all 2>&1 #標准輸出與錯誤輸出均導入至all
  14. [root@centos6 ~]# ls -l abc install.log >> all 2>&1 #標准輸出與錯誤輸出均追加至all
  15. [root@centos6 ~]# ls -l abc install.log &> all #標准輸出與錯誤輸出均導入至all
Copyright © Linux教程網 All Rights Reserved