本文主要是關於《鳥哥的Linux私房菜:基礎篇》中第四章到第十二章的筆記,有些自己已經理解或感覺很少會使用到的東西沒有再做記錄,筆記暫未整理,此外還加入了一些在別的地方學到的Linux的常用知識。
在命令行中[]表示可選,<>表示必選,{}表示任選一個。
第四章 首次登錄與在線求助
在桌面按下 Ctrl+Alt+[F1~F6]
進入編號爲1~6的文本模式(又稱終端接口、terminal、console),再按下相同的按鍵返回圖形化窗口。
~
符號是一個變量,它表示家目錄,root 用戶的家目錄是 /root,普通用戶的家目錄是 /home/user_name。-
表示前一個訪問的目錄。
在命令行裏輸入exit
可以實現當前用戶的註銷(非關機)。
一般的指令格式爲command [-options] parameter1 parameter2 ...
,其中command
是指令名,[]
表示可選,-
號表示是縮寫,如-h
;--
表示全稱,如--help
。parameter
是命令的參數。在某些特殊情況下選項和參數前面也有可能帶有正號+
。在指令中無論空幾格都視爲一格。
在Linux中大小寫字母是不一樣的。
顯示日期和時間:date
顯示日曆:cal [month] [year]
簡單好用的計算器:bc,支持+ - * / ^ %
即加、減、乘、除、指數、取餘等,默認輸出只支持整數,輸入quit
退出。
Tab
鍵具有命令補全和文件補全的功能,在一個沒打完的命令名後按兩次Tab
就可以顯示所有以該字符串爲前綴的命令名,在一個沒打完的文件名後按兩次Tab
就可以顯示所有以該字符串爲前綴的文件名,在-
或--
後面按兩次Tab
就可以顯示改命令所有的可選項。
Ctrl+c
可以終止當前進程的運行,Ctrl+z
是掛起當前進程,Ctrl+d
代表鍵盤輸入結束,即EOF,並且該組合鍵還可以當作exit
命令來使用。
可以通過command --help
來查看指令的幫助信息,即怎樣使用。或者用man command
指令查看如何使用,進入man
指令的功能後,按下空格鍵往下翻頁,按下q
退出,按下/
再輸入字符串,就可以向下搜索該字符串了,類似的?
是向上搜索,按下n
是搜索下一個。以上按鍵都是在man
界面才能使用的。
info
指令和man
指令的作用差不多,它把文件數據拆成一個個獨立頁面(節點),並用超鏈接來跳轉到不同的頁面。按U
和N
鍵分別可以跳到上一個和下一個節點處。每個節點前有*
,可以用上下鍵移動到某個節點上,然後按回車鍵進入。也可以按Tab
鍵在節點之間快速移動。按q
退出info page。
who
命令查看當前有哪些用戶在線。
shutdown
、poweroff
和halt
可以關機,常用第一個,reboot
可以重啓。
shutdown [-krhc] [時間] [警告信息]
,-k
是隻發出警告信息不關機,-r
是重新啓動,-h
立即關機,-c
取消正在進行的shutdown指令,時間是系統關機的時間,單位是分鐘,默認爲1分鐘。例子:shutdown -h now
立即關機,shutdown -h 20:25
下一個20點25分關機。
sync
可以讓內存中尚未更新保存的數據寫入到磁盤中。
su -
可以讓用戶身份變爲root,輸入exit
返回普通用戶身份
第五章 文件權限和目錄配置
文件有好多種,在輸入ls -al
顯示文件的屬性時,第一個字符爲-
則是一般文件,爲d
則是目錄文件,爲l
則爲快捷方式(連結檔)
Linux 中的文件實際上沒有擴展名,不過仍常根據文件的拓展名來區分文件的類型,如.sh
是shell的腳本文件,.tar, .tar.gz, .zip, .tgz
等爲壓縮文件,
文件名的第一個字符爲.
時表示爲一個隱藏文件。
根據約定好的標準,linux下不同的目錄所存儲的文件類型是一樣的,如:/bin
用來存儲可執行文件,/boot
用來存儲開機會用到的文件,/dev
用來存儲裝置和接口設備,/ect
用來存儲配置文件,/lib
用來存儲函式庫文件,/media
用來存儲可移除的裝置,如軟盤、光盤、DVD等,/mnt
用來存儲暫時掛載的其他裝置,/opt
用來存儲第三方協力軟件,/run
用來存儲開機後產生的各項信息,/sbin
用來存儲開機、修復、還原系統所需要的指令,/tmp
用來存儲一般用戶或正在執行的程序所產生的文件,/usr
用來存儲各種軟件,/var
用來存儲變動性的數據,/home
是默認的用戶家目錄,/root
是root用戶的家目錄。比較重要的有/etc, /bin, /dev, /lib, /sbin等。
第六章 文件與目錄管理
.
表示本層目錄,..
表示上層目錄,-
表示前一個目錄,~
表示當前用戶的家目錄,~用戶名
表示該用戶的家目錄。
cd
變換目錄(change directory),pwd
顯示當前目錄(print working directory),mkdir
創建一個新的目錄,rmdir
刪除一個空的目錄。
cd
後不加任何目錄表示回到家目錄。
pwd [-P]
中-P
表示顯示確實的路徑,而不是用鏈接路徑
mkdir [-mp] 目錄名稱
,-m
表示配置文件的權限,-p
可以直接將所需的目錄(包括上層目錄)遞歸的建立起來。
rmdir [-p] 目錄名稱
,-p
表示連同上層的空目錄一起刪除,若目錄中有內容則無法刪除。
echo $PATH
用來查看環境變量,echo有顯示、印出的意思,$表示後面接的是變量。
ls [-aAdfFhilnrRSt] 文件名或目錄名稱
,-a
表示顯示所有文件(包括以.
開頭的隱藏文件),-d
僅顯示目錄,-h
將文件的容量以人類易讀的方式顯示,-l
長數據串行出,包含文件的屬性與權限等數據。
cp [-adfilprsu] 源文件 目標文件
,複製文件或目錄,-a
相當於-dr --preserve=all
,-d
若源文件爲鏈接文件的屬性,則複製鏈接文件屬性而非文件本身,-f
強制的意思,-i
若目標文件已經存在,則在覆蓋時會先進行詢問,-r
遞歸持續複製,用於目錄的複製行爲,-s
複製爲符號鏈接文件,即快捷方式文件,-u
當源文件比目標文件新或目標文件不存在時才進行更新或複製,--preserve=all
,連同文件的各種屬性也複製過去。
rm [-fir] 文件或目錄
用來移除文件或目錄,-f
是強制的意思,可以忽略不存在的文件,不出現警告信息,-i
互動模式,刪除前會先詢問,-r
遞歸刪除。例子:rm -i bashrc*
其中*表示0到無窮任意多個字符。例子:rm ./-aaa
在刪除開頭是-
的文件時,不能直接運行rm -aaa
,因爲-
會被當作選項。
mv [-fiu]
移動文件或目錄,或更名。-f
強制覆蓋目標文件,-i
覆蓋前先詢問,-u
若源文件比目標文件新時才更新。例子:mv file file1
實際是更名的效果,mv file1 file2 dir
當有多個文件或目錄名是,最後一個一定是目錄,其作用是將所有文件都移動到目錄dir
中。
basename /etc/sysconfig/network
取最後的文件名,即network
,dirname /etc/sysconfig/network
取目錄名,即/etc/sysconfig
cat
由第一行開始顯示文件內容,tac
從最後一行開始顯示(是cat倒着寫),nl
顯示的時候輸出行號,more
一頁一頁的顯示文件內容,less
與more
類似,但它可以往前翻頁,head
只看頭幾行,tail
只看末尾幾行,od
以二進制的方式讀取文件內容。
cat [-AbEnTv] 文件
,cat是concatenate(連續)的縮寫,-n
打印出行號,空白行也有行號,-v
列出一些看不出來的特殊字符
nl [-bnw] 文件
,-b a
無論是否爲空行,都顯示行號,-n ln
在屏幕的最左方顯示行號。
以上兩個指令都不可以進行翻頁。
more 文件名
,可在最後輸入各種指令進行操作:空格鍵
往下翻頁,b
往上翻頁,回車鍵
往下翻一行,/字符串
在當前顯示內容中往下搜索字符串,:f
顯示文件名和當前顯示的行數,q
退出。
less 文件名
,除了more
有的操作,還有:[pagedown]
往下翻頁,[pageup]
往上翻頁,?字符串
向上搜索字符串,n
重複前一個搜索,g
跑到文件的第一行,G
跑到文件的最後一行
head [-n number] 文件名
,從頭開始顯示指定行數的文件內容,tail [-n number] 文件名
,從末尾開始顯示指定行數的文件內容,-f
持續偵測文件內容,當文件正在寫入時使用。例子:tail -n +100 /etc/man_db.conf
顯示第100行往後的內容。
od [-t TYPE] 文件名
,-t
後面跟a
表示是用默認字符來輸出,c
表示用ASCII字符來輸出,d
表示利用十進制來輸出,f
表示利用浮點數來輸出,o
表示用八進制來輸出,x
表示用十六進制來輸出。
touch [-acdmt] 文件名
,-a
僅修改access time,-m
僅修改modification time。
umask [-S]
用來查看或指定當前用戶在建立文件或目錄時的權限默認值。直接輸入umask
會顯示四個數字,分別表示root用戶、當前用戶、用戶組和其他用戶的權限,其中讀權限r爲4分,寫權限w爲2分,執行權限x爲1分。-S
是以人能讀懂的方式顯示當前用戶、用戶組和其他用戶的權限,如drwxr-xr-x
中的第一個d
表示爲目錄,若爲-
表示爲普通文件,當沒有相應的權限時用-
佔位。例子:umask 022
指定三種用戶的權限。
chattr [+-=][ASacdistu] 文件名或目錄名
配置文件隱藏屬性,+
增加一個特殊參數,-
刪除一個特殊參數,=
設定一定,且僅有後面的參數。-a
設定文件只能增加數據,不能刪除和修改,-i
設定文件不能刪除、改名或增加數據等。這兩個只有root用戶才能設定。
lsattr [-adR] 文件名或目錄名
顯示文件隱藏屬性,-a
將隱藏文件的屬性也顯示出來,-d
如果是目錄則只列出目錄本身的屬性而非目錄內文件的屬性,-R
連同子目錄的數據也一併列出來。
which [-a] command
尋找可執行文件,-a
將所有PATH目錄中可以找到的指令均列出,默認是隻列出第一個。
whereis [-bmsu] 文件或目錄名
在一些特定的目錄中尋找文件
locate [-ir] keyword
利用數據庫來尋找文件,-i
忽略大小寫。數據庫一般是一天更新一次,可以用updatedb
來更新數據庫。
find [PATH] [option] [action]
在硬盤上尋找文件,選項有:-name filename
指定文件名,-size [+-]SIZE
搜索比SIZE大還是小的文件,c表示byte,k表示KB,m表示MB,-type TYPE
指定文件類型,f
是一般文件,d
是目錄,l
是連接檔。文件名默認是全名,也可以帶有*等。動作有執行和打印等,如find / -size +1M -exec ls -l {} \;
中{}表示由find找到的內容,;是結束的標誌。不常用。
第七章 磁盤與文件系統管理
df [-ahikHTm] [文件或目錄名]
列出文件系統的磁盤使用量,-a
列出所有的文件系統,-h
自動以KB、MB、GB等合適的格式顯示。
du [-ahskm] 文件或目錄名
評估文件系統的使用量,-ah
和上面的一樣,默認以KB爲單位顯示。
ln [-sf] 源文件 目標文件
製作連接檔,-s
表示是軟連接,即快捷方式,默認是硬連接,-f
強制進行,若目標文件存在則將其刪除後再建立。
第八章 壓縮
壓縮文件的拓展名大多是*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2, *.xz
,其中tar的文件只是打包過,沒有經過壓縮。
gzip [-cdtv#] 文件名
壓縮命令可以對擴展名爲 .Z, .zip, .gz 的文件進行解壓縮,壓縮時生成的拓展名爲 .gz。-d
進行解壓縮,解壓縮完畢後會刪除源文件,-t
檢驗壓縮文件的一致性,檢驗文件是否出錯,-v
顯示壓縮比等信息,#
爲數字的意思,代表壓縮等級,-1最快但壓縮比大,-9最慢但壓縮比小。在壓縮完畢後會刪除源文件。
zcat/zmore/zless
用來讀取純文本文檔被壓縮後的壓縮文件。
bzip2 [-cdkzv#] 文件名
,-k
保留源文件而不刪除,-dv#
和gzip
相同,該命令的壓縮率比gzip
高,但速度慢些。
xz [-dtlkc#] 文件名
,-l
列出壓縮文件的相關信息,如壓縮前後的大小和壓縮率等,-dtkc#
和bzip2
相同,壓縮率更高。
以上指令只能對單一的文件進行壓縮,如果是多個文件則需要先進行打包,在進行壓縮。
tar [-z|-j|-J] [cv] [-f 待建立的新文件名] 文件名...
打包與壓縮
tar [-z|-j|-J] [tv] [-f 已有的文件名]
查看文件名,
tar [-z|-j|-J] [xv] [-f 已有的文件名] [-C 目錄名]
解壓縮,
-c
建立打包文件或壓縮,-t
查看打包文件包括哪些文件,-x
解打包或解壓縮,-c, -t, -x
不可同時出現在同一指令中,-z
利用gzip進行壓縮/解壓縮,-j
利用bzip2進行壓縮/解壓縮,-J
利用xz進行壓縮/解壓縮,-z, -j, -J
不可不同時出現在同一指令中。-v
在壓縮/解壓縮過程中將正在處理的文件名顯示出來,-f 文件名
指定要處理的文件,-C 目錄
指定要解壓到的目錄。例子:tar -jxv -f filename.tar.bz2 -C 目錄名
就是利用bzip2將該壓縮文件解壓到指定目錄中。如果不加[-z|-j|-J]
進行打包時文件名要指定爲*.tar,若添加[-z|-j|-J]
進行壓縮時文件名要指定爲*.tar.gz|*.tar.bz2|*.tar.xz。如果不想打包目錄中的某幾個文件,則可以使用tar -jcv -f /root/system.tar.bz2 --exclude=file1 --exclude=file2
通過tar
命令打包的文件被稱爲tarfile,通過tar
命令壓縮的文件被稱爲tarball
在輸入命令時,如果想輸入多行,可以先輸入\
,然後立刻輸入回車鍵,就可以在下一行繼續寫了。
數據的備份和還原,略。
第九章 vi和vim
vim是進階版的vi,可以用不同顏色顯示文字內容,並且具有程序編寫的功能,可以根據程序的類型來進行顯示。
vi有三種模式:一般指令模式、編輯模式和指令行命令模式。一般指令模式:用vi打開文件後默認進入一般指令模式;編輯模式:按下i,I,o,O,a,A,r,R中
的任意一個字母后進入編輯模式,按下ESC
鍵退出;指令行命令模式:輸入:,?
後進入指令行命令模式。
vi 文件名
當文件名存在時直接打開,不存在時新建。一般輸入i
進入編輯模式,輸入ESC
鍵退出編輯模式,輸入:
進入指令行命令模式,:wq!
中w
是寫入保存,q
是退出,!
是強制執行。
在一般指令模式下:
輸入30↓
則是往下移動30列,Ctrl+f
或<page up>
前一頁,Ctrl+b
或<page down>
後一頁,n<space>
n表示數字,光標右移n個字符,0
或home
移動到這一行的最前面字符,$
或end
移動到這一行的最後一個字符,G
移動到文件的最後一行,gg
移動到文件的第一行,n<Enter>
光標往下移動n行,/word
從光標處開始往下尋找字符word,?word
從光標處開始往上尋找字符word,n
向下重複前一個搜尋操作,:n1,n2s/word1/word2/g
在第n1行和n2行之間搜尋word1並將其替換爲word2,:1,$s/word1/word2/g
從第一行到最後一行尋找word1,並將其地換爲word2,dd
刪除光標所在的一整行,yy
複製遊標所在的那一行,p
是在光標的下一行粘貼,u
復原上一個動作,Ctrl+r
或.
重做上一個動作。
在指令行命令模式下:
:set nu
顯示行號,:set nonu
取消行號。
如果輸入alias
顯示 vi=‘vim’,則說明在執行vi指令時,默認使用的是vim。
可以用vim 後面接多個文件來同時對多個文件進行編輯,在指令行模式下,:n
是編輯下一個文件,:N
是編輯上一個文件,:files
是列出目前這個vim所開啓的所有文件。
在指令行模式下輸入:sq [文件名]
可以同時瀏覽多個文件,當加文件名時則在一個新窗口打開該文件,當不加文件名時,在同一個窗口內打開。Ctrl+w+↑
切換到上面的窗口,Ctrl+w+↓
切換到下面的窗口,Ctrl+w+q
退出當前窗口。
第十章 BASH
linux下默認的shell是bash
alias lm=ls -al
命令別名設定功能,可以將ls -al
這個指令設定一個別名lm
,alias
可以查看所有有別名的命令,unalias lm
則可以取消命令的別名。
Ctrl+a
讓光標移動到整個指令串的最前面,Ctrl+e
讓光標移動到整個指令串的最後面。
linux中的變量的設定name="my name is $NAME"
,如果變量內容有空格符,需要用單引號或雙引號將其括起來,在雙引號中$
符後面的被當做是變量名,單引號中的特殊字符被當作純文本。
若爲變量擴增內容時,可使用:PATH="$PATH":/home/bin
或PATH=${PATH}:/home/bin
或PATH=$PATH:/home/bin
unset 變量名
用來取消變量的設定
env
用來查看所有的環境變量
export 變量名
將自定義變量轉成環境變量,
read [-pt] variable
從鍵盤輸入變量,-p
後面接提示字符,-t
後面接等待的秒數。
declare [-aixr] variable
宣告變量的類型,-a
將後面的變量定義爲數組類型,-i
將後面的變量定義爲整數類型,-x
將後面的變量變成環境變量,-r
將後面的變量設定爲只讀類型。
一個變量有多個不同的內容時,內容之間由:
隔開。
${variable#/*local/bin:}
可以刪除結尾是local/bin的變量內容,並且從左往右開始刪除第一個。#
表示從最前面開始刪除且只刪除第一個,##
表示把匹配到的全刪除,%
和%%
與#
和##
類似,只不過是從後面開始刪除。
${variable/old/new}
用新的值取代舊的值,若爲//old/new
則所有符合的內容都要取代,
new_var=${old_var-content}
如果舊變量存在則將其值賦給新變量,否則新變量的值爲爲content。new_var=${old_var:content}
和前者類似,只是當舊變量爲空時,新變量的值也取content。
history [n]
n是數字的意思,列出最近的n條命令,history [-c]
將所有歷史命令全部清除,history [-raw] histfiles
查看歷史命令,-a
將歷史命令額外保存在histfiles文件中,-r
將histfiles文件中的內容讀入到history記憶中,-w
將目前的history記憶內容寫入到histfiles中。
!number
執行history記憶中的第number個命令,!command
向前搜索以command爲開頭的指令並執行,!!
執行上一個命令。
/etc/profile:
是系統整體的設定,~/.bash_profile
或~/.bash_login
或~/.profile
是當前用戶的設定,在用戶登錄系統時,會自動調用/etc/profile:
然後該文件又會自動調用其他配置文件,
source 配置文件名
不需註銷即可把配置文件裏的內容加載進來,source
的作用同.
stty [-a]
設定終端機的輸入按鍵代表的含義,stty 是 setting tty 的縮寫,-a
是將目前所有的syyt參數列出來。列出的內容中intr=^C
中intr表示終止當前運行的程序,^表示Ctrl鍵,類似的kill表示刪除當前指令行的所有內容,?
表示退格鍵。
stty erase ^h
設置向後刪除字符的快捷鍵爲Ctrl+h
set [-uvCHhmBx]
設定指令輸入/輸出環境,-u
默認不啓用,啓用後當使用未設定變量時會顯示錯誤信息。
通配符:*
表示0到無窮多個任意字符,?
表示一個任意字符,[abcd]
表示取[]中的任意一個字符,-
表示在編碼順序內的所有字符,如[0-9]
表示0-9共10個數字,^
表示反向選擇,如[^abc]
表示除了abc之外的其他一個字符。
特殊字符:#
註釋符號,\
轉義字符,|
管線,分割兩個管線命令的界定,;
連續性命令的節點,$
取用變數的前導符,&
工作控制,將指令變爲背景下工作,!
邏輯非,()
中間爲子shell的起始和終止,{}
中間爲命令區塊的組合。
>
和>>
是輸出重定向,即將本來要輸出到屏幕的內容輸出到其他位置,如某個文件中,前者是覆蓋寫入,後者是追加寫入,如ls -a / >~/rootfile
將目錄/
下的所有文件名以覆蓋的形式寫入到~/rootfile
中,文件不存在時會自動建立。1>
和1>>
是標準輸出的重定向,即將指令正常運行時的信息重定向輸出,2>
和2>>
是標準錯誤輸出的重定向,即將指令運行錯誤時的信息重定向輸出。&>
可以將正確和錯誤信息輸出到同一個文件中,並且順序不會亂。
<
和<<
是輸入重定向,即將本來要從鍵盤輸入的內容改爲由其他方式(如文件)輸入,後者由文件輸入之後必須通過鍵盤輸入EOF之後才結束。
cmd;cmd
不考慮指令相關性的連續指令下達
cmd1 && cmd2
若cmd1正確執行完畢,則繼續執行cmd2,反之不執行cmd2.
cmd1 || cmd2
若cmd1正確執行完畢,則不執行cmd2,反之執行cmd2.
管線命令|
和連續下達命令;
是不同的,它可以讓第一個命令的正確輸出信息作爲第二個命令的輸入,有多個命令時以此類推。不是所有的指令都可以當作後面的指令,它必須要有接收標準輸入的能力。
cut -d '分隔字符' -f fields
或cut -c 字符區間
,分析某一行訊息,取出某部分我們想要的。-d
後面跟分隔字符,與-f
一同使用,-f
依據-d
後面的分隔字符將一段訊息分爲數段,用-f
取出第幾段。-c
以字符的單位取出固定字符區間,後面跟數字範圍,如12-
或12-20
。如echo ${PATH} | cut -d ':' -f 3,5
將PATH信息以字符:分隔後去除第3,5段。
grep [-acinv] [--color=auto] '搜索字符串' filename
分析一行訊息,若有所需信息則取出來。-a
將二進制文件以文本文件的方式搜索,-c
計算找到‘搜索字符串’的次數,-i
忽略大小寫,-n
順便輸出行號,-v
反向選擇,即顯示沒有出現’搜索字符串’的那一行。
sort [-fbMnrtuk] [file or stdin]
排序,-f
忽略大小寫,-b
忽略最前面的空格,-n
以純數字的方式排序,-r
反向排序,-u
對於相同的數據只顯示一行。
uniq [-ic]
去重,-i
忽略大小寫,-c
進行計數。
wc [-lwm]
統計信息,-l
僅列出行,-w
僅列出多少字,-m
多少字符
tee [-a] file
將數據流分別送到文件和屏幕輸出,-a
以追加的方式寫入到文件中。
tr [-ds] SET1
刪除一段訊息中的文字或對其進行替換,-d
刪除SET1這個字符串,-s
取代這個字符串。
col [-xb]
,-x
將tab見轉換爲對等的空格鍵。
join [-ti12] file1 file2
對比兩個文件,將具有相同數據的行合併。-t
分隔符,默認是空格,-i
忽略大小寫,-12
分別表示第1、2個文件要用哪個字段來分析。如第一個文件中有"name:root",第二文件中有"name:zuzhiang",則以“:”爲分隔符,合併後的結果是"name:root:zuzhiang"
paste [-d] file1 file2
將兩行粘在一起,中間以Tab鍵隔開,-d
分割字符,默認是Tab鍵,-
如果file部分寫成 -,表示來自標準輸入的意思。
expand [-t] file
將Tab鍵轉成空格鍵,-t
後面可以接數字,表示一個Tab鍵由幾個空格代替。
split [-bl] file PREFIX
將大文件分區成爲小文件,-b
後面接想要分區後的文件大小,可加單位b,k,m等,-l
以行數來進行分區,PREFIX
代表前導符的意思,可作爲分區文件的前導文字。
xargs [-0epn] command
讀入標準輸入的數據,並以分隔符爲界,將其分隔成爲不同的參數,-0
可將",\space"等字符還原成一般字符,-n
接參數的個數,xargs
後面沒有接任何指令時,默認以echo
來進行輸出。
在管線中當某些指令需要用到文件名來進行處理時,該標準輸入和標準輸出可以利用-
來代替。
第十一章 正則表達式
正則表達式和通配符是完全不一樣的東西
[:alnum:]
表示英文大小寫字符和數字,[:alpha:]
表示任何英文大小寫字符,[:blank:]
表示空格鍵和Tab鍵,[:cntrl:]
表示控制鍵,包括CR/LF/Tab/Del等,[:digit:]
表示數字,[:graph:]
除了空格鍵和Tab鍵之外的所有按鍵,[:lower:]
表示小寫字符,[:print:]
表示任意可以被打印出來的字符,[:punct:]
表示標點符號#$也是,[:upper:]
表示大寫字符,[:space:]
表示任何會產生空白的字符,如空格鍵、Tab鍵、CR鍵等,[:xdigit:]
表示十六進制的數字,包括0-9,a-f,A-F。
grep [-A] [-B] [--color=auto] '搜索字符串' filename
,-A
後面可加數組,爲after的意思,除了列出該行外,後續的n行也列出來,-B
後面可加數字,爲befor的意思,除了列出該行外,前面的n行也列出來。
[]
表示搜索字符的集合,只表示一個字符,[^]
表示反向選擇,^
表示定位在行首,$
表示定位在行尾,.
任意一個字符,*
任意0到無窮多個字符,{number[,number]}
表示重複字符數,如o\{2\}
表示兩個o,o\{2,5\}
表示2到5個o,o\{2,\}
表示2到 無窮個o。
^word
待搜索字符串在行首,word$
待搜索字符串在行尾,.
任意一個字符,*
任意0到無窮多個字符,[list]
字符集合,從中任取一個,[n1-n2]
字符範圍,[^list]
不是該字符結合的任意一個字符,\{n,m\}
。
sed [-nefr] [動作]
分析標準輸入,-n
使用安靜模式,標準輸入只有在經過sed處理的那一行纔會被顯示在屏幕上,-e
直接在指令行模式上進行sed的動作編輯,-f
直接將sed的動作卸載一個文件內,-f filename可以執行filename中的sed動作,-r
sed的動作支持的是延伸型正則表達式語法,-i
直接修改讀取的文件內容,而不是由屏幕輸出。
[n1[,n2]]function
n1,n2表示進行動作的行數,function可以是a
新增,c
取代,d
刪除,i
插入,p
打印,s
取代,通常搭配正則表達式。如sed 's/old_str/new_str/g'
取代
+
一個或多個字符,?
0個或1個字符,|
用or的方式找出數個字符串,()
找出羣組字符串,其中的字符串是有順序的一個整體,()+
多個重複的羣組。
diff [-bBi] from-file to-file
對比兩個文件的差異,-b
忽略一行當中僅有多個空白的差異,-B
忽略空白行的差異,-i
忽略大小寫的不同。
cmp [-l] file1 file2
以字節爲單位對比兩個文件,-l
將所有的不同點的字節都列出來,預設是隻會輸出第一個不同的點。
patch -pN < path_file
更新文件,-p
表示取消幾層目錄的意思,patch -R -pN < patch_file
還原文件,-R
表示還原。
第十二章 Shell腳本
如果讀取到一個回車符(CR)就嘗試執行該行命令;如果一行的內容太多,可以用\Enter
來延伸至下一行;#
可作爲註釋符號。
腳本文件的擴展名爲.sh
,可以通過bash shell.sh
或sh shell.sh
來執行
用exit 0
表示退出腳本程序,var=$((運算內容))
,
read -p "Please input your name:" name
echo -e "\nYour name is: ${name}"
total=$((${a}*${b})) #a*b
exit 0
test -efd filename
測試,-e
該文件名是否存在,-f
文件名是否存在並且爲文件,-d
文件名是否存在且爲目錄。
test -rwxs filename
,-rwx
該文件名是否存在且具有可讀、可寫、可執行權限,-s
該文件名是否存在且爲非空白文件。
test file1 -nt|ot|ef file2
,-nt
判斷file1是否比file2新,-ot
判斷file1是否比file2舊,-ef
判斷file1和file2是否指向同一文件。
test n1 -eq n2
關於兩個整數之間的判定,-eq
兩數值相等,-ne
兩數值不等,-gt
n1大於n2,-lt
n1小於n2,-ge
n1大於等於n2,-le
n1小於等於n2
test -z string
判斷字符串是否爲空串,若是則返回True,test -n string
判斷字符串是否爲非空串,若是則返回True,test str1==str2
判斷str1是否等於str2,若相等則返回True,test str1!=str2
判斷str1是否不等於str2,若不相等則返回True
test -r filename -a|o -x filename
多重條件判定,-a
表示and,-o
表示or,test ! -x file
中!
表示取反。
[]
也可以起到判斷的作用,但是其中的每個部分之間必須有空格來分割,如[ "${home}" == "${mail}" ]
判斷home與mail變量是否相等,變量最好用雙引號括起來,不然可能會出錯。
$#
代表後面接的參數個數,$@
代表"$1"、"$2"等,每個變量是獨立的,需要用雙引號括起來,$*
代表"$1c$2c$3",其中c爲分割字符,一般爲空格。從0開始。shift [number]
可以拿掉最前面的幾個參數,默認是1個。
比如在test.sh文件中寫
echo "Total parameter number is: $#" #參數個數
echo "Your whole parameter is: $@" #所有的參數
echo "The 1st parameter is:${1}" #第一個參數
shift 2
echo "Your whole parameter is: $@" #只輸出第三個參數以後的參數
# 當在命令行運行sh test.sh command one two three時command就是第0個命令,依此類推
if [條件判斷式1]; then #在條件判斷時,$$表示and,||表示or
指令
elif [條件判斷式2]; then
指令
else
指令
fi #結束if之意
case $變量名 in
第一個變量內容)
程序段
;;
第二個變量內容)
程序段
;;
*)
變量內容爲其他時執行的程序段
exit 1
;;
esac
function fname(){
程序段
}
while [條件]
do
程序段
done
until [條件]
do
程序段
done
for var in con1 con2 con3 #在每次循環中var分別爲con1,con2,con3
do
程序段
done
for ((初始值;終止值;步長))
do
程序段
done
sh [-nvx] scripts.sh
執行或debug腳本文件,-n
不執行腳本,僅查詢語法問題,-v
在執行腳本之前先將其內容輸出到屏幕上,-x
將使用到的腳本內容輸出的屏幕上。