2017-10-27Linux基礎知識(9)bash基礎特性
在上一章當中我們講述了FHS、以及一些命令和bash命令歷史的特性,FHS是標準的文件系統層級結構,它規定的文件系統的分類存儲,使得讓各個Linux的發行版本得到的參考和統一,之後我們介紹了一些基本命令,例如:添加別名等,最後我們介紹了Linux文件系統的類型等,那我們接下來繼續介紹bash的基礎特性,還有一些其它命令。
一、命令補全
用戶在shell界面中(或者叫CLI界面中)輸入某個字符,解析為是否是內部命令還是外部命令,如果是外部命令,shell程序就會在指定的文件路徑下去查找用戶所鍵入字符相對應,如果字符與該目錄文件唯一,則可以用tab鍵補全,如果不唯一,按一下tab不會顯示什麽,不過第二下就會顯示相應的命令列表來給你進行參考,如果按兩下tab沒有用的話,即使你回車,shell就會提示你沒有這個命令。
當你輸入某個命令是,如果是唯一的,按住一次tab就會進行補全,這是因為給定的打頭字符如果能唯一標識某命令的程序文件,則直接補全,不能唯一標識某命令的程序文件,則在擊tab鍵一次,給出相應的列表供你選擇。
所以命令補全是在給定的起始路徑下,以對應路徑下的打頭字符串逐一匹配起始路徑下的每個文件;如果能唯一標識,則直接補全,否則,再一次tab,給出列表。
1.1 目錄管理類的命令
首當其沖我們首先要講的是mkdir和rmdir這兩個命令,那麽顧名思義,就是創建和刪除目錄,在Windows中我們創建目錄的話,直接右鍵->新建->文件夾,在Linux中我們則使用mkdir命令在創建目錄,其命令格式為:
# mkdir [OPTION]... DIRECTORY...
常用的選項有以下幾種:
-p:自動按需創建父目錄; -v:verbose, 顯示詳細過程; -m MODE:直接給定權限;
需要註意的是:路徑的基名方為命令的作用對象;基名之前的路徑必須得存在;起始基名就是最後一個名稱。
接下來說的是刪除目錄命令,刪除目錄命令為rmdir,如果前提是該目錄是一個空目錄才能刪除,裏面要是有文件或目錄的話,我們可以批量刪除,命令的用法也是與創建目錄的用法相同:
# rmdir [OPTION]... DIRECTORY...
選項如下:
-p:刪除某個目錄後,如果其父目錄為空,並一並刪除之; -v:顯示過程;
現在有以下兩個問題:
1、如何創建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b?
2、如何創建a_c, a_d, b_c, b_d?
二、命令行展開
命令行展開無非有一下幾類:一類是家目錄的,一類是{},之前我們也講過在命令提示符當中~
代表著當前的家目錄或自動展開為用戶的家目錄,而{}是可承載一個以逗號的路徑列表,並能夠將其展開為多個路徑,以下可示例:
例如:/tmp/{a,b},相當於:/tmp/a, /tmp/b
好的以上就是命令行的展開,那麽前兩題的答案如下:
# mkdir -pv x/{y1/{a,b},y2} # mkdir -pv {a,b}_{c,d}
現在有個問題3:創建如下結構:
/tmp/mysysroot/ bin sbin etc sysconfig network-scripts usr bin sbin local bin sbin etc lib lib lib64 var cache log run
答案:
# mkdir -pv /tmp/sysroot/{bin,sbin,etc/sysconfig/network-scripts,usr/{bin,sbin,local/{bin,sbin,etc,lib}},lib/lib64,var/{cache,log,run}}
我們可以用tree命令查看一下,需要註意的是,在Linux系統當中,可能是沒有這條命令,我們可以使用yum命令安裝,至於yum命令的用法,我們隨後講系統管理時再次說明。
# yum -y install tree
命令用法:
# tree [options] [directory] -L level:指定要顯示的層級;
# tree /tmp/sysroot/ /tmp/sysroot/ |-- bin |-- etc | `-- sysconfig | `-- network-scripts |-- lib | `-- lib64 |-- sbin |-- usr | |-- bin | |-- local | | |-- bin | | |-- etc | | |-- lib | | `-- sbin | `-- sbin `-- var |-- cache |-- log `-- run 19 directories, 0 files
三、命令的執行狀態結果
我們在shell當中輸入某個命令時,如果執行對了就會顯示其相應的結果,命令輸錯也有相應的提示,而每個命令的結果其實都有它的返回值的,其結果也無非是正確和錯誤,那麽bash就是通過執行狀態的返回值來輸出此結果,成功就是0,失敗的範圍數很大,從1到255,當你的命令執行完成之後,其狀態返回值保存於bash的特殊變量$?
中。
# ls anaconda-ks.cfg fstab functions lover.txt shell_scripts # echo "$?" 0 # lss -bash: lss: command not found # $? -bash: 127: command not found
還有,當命令正常執行時,有的還回命令結果的返回值;根據命令及其功能的不同,結果也各不相同。
我們還可以引用命令的執行結果,有以下兩種方式:
$(COMMAND)或`COMMAND` # mkdir `date +"%F_%T"` # ll drwxr-xr-x. 2 root root 6 Oct 29 11:13 2017-10-29_11:13:15
四、引用
我們可使用單引號和雙引號來引用變量和語句等,差別就是一個是強引用,後者為弱引用,強引用是無論你是不是變量,都給你原樣顯示,不顯示變量結果,只顯示變量名稱,弱引用與強引用不同的是,弱引用是能顯示變量結果的,示例如下:
# echo ‘$PATH‘ $PATH # echo "$PATH" /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
還有一種是命令引用,這個在上面我們講過,此處略。
五、快捷鍵
我們在Windows中會知道各種各樣的快捷鍵,最簡單的也無非就是復制(Ctrl+c)和粘貼(Ctrl+v)了,在Linux也有其相應的快捷鍵,我們使用快捷鍵可以更好的處理Linux上的命令:
Ctrl+a:跳轉至命令行行首; Ctrl+e:跳轉至命令行行尾; Ctrl+u:刪除行首光標所在處之間的所有字符; Ctrl+k:刪除光標所在處至行尾的所有字符; Ctrl+l:清屏,相當於clear;
5.1 文件查看類命令
我們之前講過文件查看類的命令,cat和tac前者是正序,後者是倒序查看,這是兩個基本的命令,但是這兩個命令直接就顯示到底部,並沒有一個查看過程,所以more命令和less命令就是將這個查看過程給顯示出來,這兩個的命令格式也是很簡單的:
# more FILE
more命令有個特點:翻屏至文件尾部之後會自動退出;
# less FILE
另一個文件查看類命令為head和tail,不一樣的是前者的命令查看前n行,而後者的命令查看倒數n行,格式如下:
# head [options] FILE
選項:
-n # -#
head默認不加選項的話,只是顯示前10行默認,tail命令也是,顯示為後10行;
# tail [options] FILE
選項:
-n # -# -f:查看文件尾部內容結束後不退出,跟隨顯示新增的行;
接下來說一下stat命令,stat命令無疑是顯示文件或文件系統狀態,命令格式為
# stat FILE...
如果查看某個文件狀態,就會看到一下結果,我們舉例來演示一下:
# stat anaconda-ks.cfg File: ‘anaconda-ks.cfg’ Size: 1612 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 50824939 Links: 1 Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root) Context: system_u:object_r:admin_home_t:s0 Access: 2017-10-03 22:18:51.777786103 +0800 Modify: 2017-10-03 22:18:51.794786340 +0800 Change: 2017-10-03 22:18:51.794786340 +0800
我們主要講的是倒數後三行,前幾行我們很容易理解。如上所示,會出現三個類型的時間,分別是訪問時間、修改時間和更改時間。
Access time:表示最後一次訪問(僅僅是訪問,沒有改動)文件的時間; Modify time:最後一次修改文件的時間; Change time:最後一次文件屬性修改的時間,包括權限、大小、屬性等;
5.2 文件管理工具
有文件查看工具就有它的管理工具,例如我們復制、移動和刪除都是用來管理文件的命令,首先我們說一下復制命令,復制命令的過程很簡單,將文件的數據流通過管道傳送到一個新的文件中去,原文件保留,移動也就將源文件刪除,而數據流則保留到了新的文件中,刪除就是將數據從磁盤上移除,但是並不代表磁盤塊中沒有數據,當新的數據寫入時,則那些磁盤塊就會自動替換,而塊中的源數據則不會在保留;現在我們說一下cp命令。
cp命令無非就是復制命令,從源文件產生目標文件的一個過程,有單源復制和多源復制這兩大選項,命令格式為:
單源復制:# cp [OPTIONS]... [-T] SOURCE REST 多源復制:# cp [OPTIONS]... SOURCE... DIRECTORY # cp [OPTIONS]... -t DIRECTORY SOURCE...
我們先來說一下單源復制,單源復制:如果DEST不存在:則事先創建此文件,並復制源文件的數據流至DEST中,但如果DEST存在,那就得往兩方面考慮,一種是如果DEST是非目錄文件:則覆蓋其目標文件;另一種是如果DEST是目錄文件:則現在DEST目錄下先創建一個與源文件同名的文件,並復制其數據流。
單源復制:# cp [OPTIONS]... [-T] SOURCE REST
另一種是多源復制,就是將多個文件復制到一個地方去,如果說DEST不存在有兩個選項,第一個就是如果DEST是非目錄文件:則直接錯誤;但如果DEST是目錄文件:則分別復制每個文件至目標目錄中,並保持原名。
cp的常用選項如下:
-i:交互式復制,即覆蓋之前提醒用戶確認; -f:強制覆蓋目標文件; -r:遞歸復制目錄; -d:復制符號鏈接本身,而非指向其源文件; -a: ---preserve=all, archive, 用於實現歸檔; --preserv= mode:權限 ownership:屬主和屬組 timestamps:時間戳 context:安全標簽 xattr:擴展屬性 links:符號鏈接 all:上述所有屬性
那麽關於移動的命令為mv命令,使用命令的格式也是和cp命令差不多,大致格式為:
mv [OPTION]... [-T] SOURCE DEST mv [OPTION]... SOURCE... DIRECTORY mv [OPTION]... -t DIRECTORY SOURCE...
常用選項:
-i:交互式; -f:force
接下來就是刪除命令了,rm命令就是清除命令,這個命令是非常危險的,弄不好的話可以將系統刪除,簡直就是灰飛煙滅,而且這個刪除命令,是不可逆操作的,請慎用這個命令,其命令格式如下:
# rm [OPTIONS]... FILE...
常用選項:
-i:interactive -f:force -r:recursive
如果你想強制刪除某個目錄,就用以下格式:
# rm -rf /PATH/TO/DIR
其中最危險的操作:
# rm -rf /*
危險的命令推薦使用一下,體驗它的嚴重性,這樣保證在生產環境中就會謹慎。需要註意的是:所有不用的文件建議不要直接刪除,而是移動某個專用目錄。(模擬回收站)
六、變量
變量其實是一個很大的話題,這裏就簡單說一下,變量就是在內存當中申請一塊空間用來存放數據,用變量名稱來標識其該變量的內存地址,命名的內存空間;變量類型有很多,大致分為字符型、數值型等,我們以字符型為例,分為精確數值和近似數值。使用變量我們一定要考慮它的存儲格式、數據範圍和參與運算的性質,那麽變量的復制操作為:name=var。
本文出自 “天蠍座” 博客,轉載請與作者聯系!
2017-10-27Linux基礎知識(9)bash基礎特性