《鳥哥的Linux私房菜:基礎版》筆記

本文主要是關於《鳥哥的Linux私房菜:基礎篇》中第四章到第十二章的筆記,有些自己已經理解或感覺很少會使用到的東西沒有再做記錄,筆記暫未整理,此外還加入了一些在別的地方學到的Linux的常用知識。

在命令行中[]表示可選,<>表示必選,{}表示任選一個。

第四章 首次登錄與在線求助

在桌面按下 Ctrl+Alt+[F1~F6]進入編號爲1~6的文本模式(又稱終端接口、terminal、console),再按下相同的按鍵返回圖形化窗口。

~符號是一個變量,它表示家目錄,root 用戶的家目錄是 /root,普通用戶的家目錄是 /home/user_name。-表示前一個訪問的目錄。

在命令行裏輸入exit可以實現當前用戶的註銷(非關機)。

一般的指令格式爲command [-options] parameter1 parameter2 ...,其中command是指令名,[]表示可選,-號表示是縮寫,如-h--表示全稱,如--helpparameter是命令的參數。在某些特殊情況下選項和參數前面也有可能帶有正號+。在指令中無論空幾格都視爲一格。

在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指令的作用差不多,它把文件數據拆成一個個獨立頁面(節點),並用超鏈接來跳轉到不同的頁面。按UN鍵分別可以跳到上一個和下一個節點處。每個節點前有*,可以用上下鍵移動到某個節點上,然後按回車鍵進入。也可以按Tab鍵在節點之間快速移動。按q退出info page。

who命令查看當前有哪些用戶在線。

shutdownpoweroffhalt可以關機,常用第一個,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取最後的文件名,即networkdirname /etc/sysconfig/network取目錄名,即/etc/sysconfig

cat由第一行開始顯示文件內容,tac從最後一行開始顯示(是cat倒着寫),nl顯示的時候輸出行號,more一頁一頁的顯示文件內容,lessmore類似,但它可以往前翻頁,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個字符,0home移動到這一行的最前面字符,$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這個指令設定一個別名lmalias可以查看所有有別名的命令,unalias lm則可以取消命令的別名。

Ctrl+a讓光標移動到整個指令串的最前面,Ctrl+e讓光標移動到整個指令串的最後面。

linux中的變量的設定name="my name is $NAME",如果變量內容有空格符,需要用單引號或雙引號將其括起來,在雙引號中$符後面的被當做是變量名,單引號中的特殊字符被當作純文本。

若爲變量擴增內容時,可使用:PATH="$PATH":/home/binPATH=${PATH}:/home/binPATH=$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 fieldscut -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動作,-rsed的動作支持的是延伸型正則表達式語法,-i直接修改讀取的文件內容,而不是由屏幕輸出。

[n1[,n2]]functionn1,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.shsh 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兩數值不等,-gtn1大於n2,-ltn1小於n2,-gen1大於等於n2,-len1小於等於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將使用到的腳本內容輸出的屏幕上。

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