1.具體的shell命令用法可以通過help或man命令進入手冊來查詢其具體的用法。
2.終端本質上對應着linux上的/dev/tty設備,linux的多用戶登錄就是通過不同的/dev/tty設備完成的,linux默認提供了6個純命令行界面的’‘terminal’’(准確的說這里應該是6個虛擬控制台)來讓用戶登錄,在物理機系統上你可以通過ctrl+alt+F1~F6進行切換。當切換到其中一個終端后,想要切換回圖形界面,可以按下ctrl+alt+F7來完成。
3.命令行提示符$表示普通用戶,#表示root用戶。
4.幾個技巧:
- Tab鍵:補全命令、參數
- Ctrl+C:強制退出當前程序
- Ctrl+Z:將當前程序放到后台,拖回前台輸入命令fg
- Ctrl+A:將光標輸入行開始,相當於home鍵
- Ctrl+E:將光標輸入行結束,相當於End鍵
- 在終端切換以root賬戶登錄: sudo su 退出輸入: exit
5.linux中常用的通配符
- * 匹配0或多個字符
- ? 匹配任意1個字符
- [list] 匹配list中的任意單一字符
- [!list] 匹配除list中的任意單一字符以外的字符
- [c1-c2] 匹配c1-c2中的任意單一字符,如:[0-9][a-z]
- {strin1,string2,…} 匹配string1或string2(或更多)其1字符串
- {c1…c2} 匹配c1-c2中全部字符串,如{1…10},如利用通配符批量創建5個文件 touch file{1…5}.txt
6.常用的shell命令總結
(1) pwd(printing working directory):顯示當前目錄
- 格式:pwd [參數]
- 可選參數:
- -P 顯示物理地址,為默認值
- -L 目錄為連接路徑時,顯示連接路徑
(2) wc(word count):用來計算數字,利用wc指令可以計算文件的byte數、字數或行數,若不指定文件名稱,或是所給予的文件名為"-",則wc指令會從標准輸入設備讀取數據。
- 格式:wc [選項] [文件]
- 可選參數:
- -c 只顯示bytes數
- -l 只顯示行數
- -w 只顯示字數
- -m 只統計字符數
- -L 打印最長行行數
- 如,統計/bin目錄下的命令個數:ls /bin | wc -l
(3) cd(change directory):切換當前目錄到指定目錄
- 格式: cd [目錄名]
- 幾個特殊參數:
- /:系統根目錄
- .:當前系統目錄
- …:當前目錄的父目錄
- ~:當前用戶主目錄,即/home/cdl目錄
- -:上次所在目錄
(4) ls(list):列出對應目錄清單
- 格式為:ls [選項] [目錄名]
- 可選參數為:
- -a:列出目錄下所有文件
- -l:除文件名外,打印包括文件權限,大小等詳細信息
- -d:directory,顯示文件夾即可,不顯示其下具體的文件
- -h:以容易理解的方式列出文件大小,1k=1048
- -t:按時間順序排列
- 目錄名缺省為當前目錄,如,列出/home文件夾下的所有文件和目錄的詳細信息
- ls -al /home
- 以容易理解的格式列出/home目錄中所有以"m"開頭的文件目錄的大小
- cd /home ls -lh m*
(5) mkdir(make directory):創建目錄名
- 格式:mkdir [選項] [目錄名]
- 可選參數:
- -m:mode,設置權限
- -p:parents,創建多個目錄
- -v:verbose,每次創建新目錄都顯示信息
- 如,一次創建多個目錄,並且顯示具體的創建信息 mkdir -vp temp/text
- 創建權限為777的目錄 mkdir -m 777 temp
(6) touch:用於把已存在文件的時間標簽更新為系統的當前時間(默認方式),它們的數據將原封不動的保留下來;用於創建新的空文件
- 格式:touch [選項] [文件]
- 可選參數:
- -a:只更改存取時間
- -c:不創建文件
- -d<時間日期>/-t<時間日期>:使用指定的時間
- -m:只更改變動時間
- 如,創建文件text1 touch text1
(7) rm(remove):刪除目錄中的文件或目錄,對於鏈接文件,只刪除鏈接
- 格式:rm [選項] [文件或目錄名]
- 可選參數:
- -f:force,忽略不存在的文件,不給提示
- -i:interactive,交互式刪除
- -v:verbose,詳細顯示步驟
- -r:遞歸刪除
- 如,刪除后綴名為.log的所有文件,刪除前逐一詢問 rm -i *.log
- 刪除/var/log/httpd/access目錄以及其下所以文件、文件夾:rm -rf /var/log/httpd/access
(8) mv(move):移動或更改文件名,常用來備份文件或目錄
- 格式: mv [選項] [源文件或目錄] [目標文件或目錄]
- 可選參數:
- -b:back,覆蓋前先備份
- -f:force,強行覆蓋
- -i:interactive,詢問是否覆蓋
- -u:update,目標文件已經存在,源文件較新時更新
- -t:target,移動多個源文件到一個目錄下,此時目標目錄在前,源文件在后
- 如,將文件a.txt移動到test1目錄下,如果文件存在,覆蓋前詢問是否覆蓋 mv -i a.txt test1(test1目錄已經存在,否則會執行重命名)
- sudo mv opencv-3.3.1/ opencv-3.3.1-dev
(9) cp(copy):復制文件或目錄
- 格式: cp [選項] [源文件] [目錄]
- 可選參數:
- -t:target,指定目標目錄,此時目標目錄在前,源文件在后
- -f:force,強行復制
- -i:interactive,詢問是否復制
- -u:update,目標文件已經存在,源文件較新時更新
- -n:no-clobber,不要覆蓋已經存在的文件
- -s:symbolic-link,建立源文件的符號鏈接,而非復制文件
- -r:復制文件夾
- 如,將test1目錄下的所有文件復制到test2目錄下,覆蓋前詢問 cp -i test1/* test2
(10) cat(concatenate):將文件或標准輸入組合輸出到標准輸出,常用來顯示文件內容或連接文件,反向顯示文件內容命令為tac
- 格式:cat [選項] [文件]
- 可選參數:
- -A:show all
- -b:對非空輸出行 編號
- -n:對所有輸出行進行行編號
- -s:多個空白行轉換為一個空白符
- 例如將a.log文件的內容加上行號后輸入到b.log這個文件中,多個空行轉換成一個行輸出 cat -ns a.log > b.log
(11) nl(number of lines):計算文件中的行數
- 格式:nl [選項] [文件]
- 可選參數:
- -b a:空行也列出行號,類似於cat -n
- -b t:空行不列出行號,默認值
- -w:行號欄位的位數
- -n ln:行號在自己欄位的最左方顯示
- -n rn:行號在自己欄位的最右方顯示,不加0
- -n rz:行號在自己欄位的最右方顯示,加0
- 如,把a.log的文件內容加上行號后顯示,行號在屏幕右方加0顯示,行號欄占位數為3
- nl -n rz -w 3 a.log
(12) more:功能類似於cat,cat將文件內容從上到下顯示,more命令一頁頁顯示,方便閱讀,按空格鍵往下翻,按b(back)鍵顯示上一頁,=鍵輸出當前行號,q鍵退出more。此外還可以搜索字符串
- 格式:more [選項] [文件]
- 可選參數:
- +n:從第n行開始顯示
- -n:定義屏幕大小為n行
- +/pattern:在文件顯示前搜索字符串pattern,從該字符串前兩行開始顯示
- 如,從a.log文件中查找第一個出現"g"字符串的行,並從該處前兩行開始顯示輸出,規定每屏的行數為5
- more -5 +/g a.log
(13) less:對文件及輸出的顯示工具,功能非常強大
- 格式:less [選項] [文件]
- 可選參數:
- -f:強迫打開
- -i:忽略大小寫
- -N:顯示每列行號
- -s:顯示連續空行為一行
- 常用操作:
- /字符串:向下搜索字符串
- ?字符串:向上搜索字符串
- 如,顯示文件a.log中的內容,搜索字符串"hello",可以使用如下命令 less a.log /hello
- less與cat和more的區別:
- cat命令用於顯示整個文件的內容,單獨使用沒有翻頁功能。因此經常和more命令搭配使用,cat命令還有就是可以將多個文件合並成一個文件的功能。
- more命令功能:讓畫面在顯示滿一頁時暫停,此時可按空格鍵繼續顯示下一個頁面,或按q鍵退出顯示
- less命令功能:less命令與more命令類似,也可以用了瀏覽超過一頁的文件。所不同的是less命令除了可以按空格鍵向下顯示文件外,還可以利用上下鍵來卷動文件。當要結束瀏覽時,只要在less命令的提示符:下按q鍵即可。其實這三個命令除了cat命令有合並文件的功能外,其余功能上相似,只是從瀏覽習慣和顯示方式上有所不同。
(14) head:顯示文件的開頭,默認為前10行,對應於tail命令,顯示文件末尾內容
- 格式:head [選項] [文件]
- 可選參數:
- -q:隱藏文件名
- -v:顯示文件名
- -c <字節數>:顯示字節數
- -n <行數>:顯示行數,參數為負時顯示文件末尾行
- 如,顯示a.log和b.log文件的前5行內容 head -n 5 a.log b.log
(15) which:在PATH變量指定的路徑中搜索可執行文件的所在位置,一般用來確認系統中是否安裝了指定軟件
- 如,確認是否正確安裝了gcc,使用which gcc
(16) whereis:定位文件,還可以搜索源代碼,指定備用搜索路徑和搜索不尋常項的能力。whereis命令查找速度非常快,因為它根本不是在磁盤中漫無目的亂找,而是在一個數據庫(/var/lib/mlocate/)查詢。這個數據庫是linux系統自動創建的,包含本地所有文件的信息,並且每天通過自動執行updatedb命令更新一次。也正因為這個數據庫要每天才更新一次,就會使得whereis命令的搜索結果有時候不准確,比如剛剛添加的文件可能搜索不到。
- 格式:whereis [選項] [文件]
- 可選參數:
- -b:定位可執行文件
- -m:定位幫助文件
- -s:定位源代碼文件
- 如,搜索gcc幫助文件的路徑 whereis -m gcc
(17) locate:與whereis命令類似,且使用相同的數據庫。但whereis命令只能搜索可執行文件、聯機幫助文件和源代碼文件,如果要獲得更全面的搜索結果,可以使用locate命令。
- 格式:locat [選項] [搜索字符串]
- 可選參數:
- -q:quiet,不顯示出錯信息
- -n:至多顯示n個輸出
- -r:使用正則表達式作搜索條件
- 如,搜索etc目錄下所有以sh開頭的文件,可以使用這樣的命令 locate /etc/sh
(18) find:沿文件層次結構向下遍歷,匹配符合條件的文件,並執行相應操作
- 格式:find [搜索路徑] [表達式]
- 默認路徑是當前目錄,默認表達式為 -print
- 可選參數:
- -print:輸出到標准輸出
- -delete:刪除搜索到的文件
- -exec:對匹配的文件執行參數給出的shell命令
- -name:按文件名查找文件
- -type:按類型查找文件,常用文件類型有b(塊設備文件)、c(字符設備文件)、d(目錄)、f(普通文件)、l(符號鏈接)
- -perm:根據文件權限查找文件
- -user:所有者選項
- -mtime -n +n:按照文件更改時間查找文件,-n表示更改時間小於n天,+n表示更改時間大於n天
- -size +10k/-10k/10k:搜索大於/小於/等於10k的文件
- 邏輯操作符:-add -or -not ():圓括號字符在shell中有特殊含義,所以在命令中使用它們的時候需要引起來,通常使用\轉義字符
- 如,打印當前目錄下所有以.txt結尾的符號鏈接
- find . -type l -name “.txt” -print
- 打印當前目錄下所有權限是777的php文件
- find . -type f -name “.php” -perm 777
- 打印當前目錄下root用戶擁有的所有文件
- find . -type f -user root
- 打印當前目錄下權限不是777和664的所有文件
- find . -type f (! -perm 777 -and ! -perm 664 )
- 現在想要把所有c語言代碼文件下載下來,如果一個一個下載很麻煩,可以先查找到所有的c語言代碼文件,然后將這些文件內容寫到一個文件中,下載該文件
- find . -name “*.c” -exec cat {} ; > all.c
- 解釋:{}其實是一個占位符,在find命令的執行過程中會不斷地替換成當前找到的文件;\是exec命令結束的標記,因為規定-exec后面的命令必須以;結束,但;在shell中有特殊含義,所以這里進行轉義。
(19) xargs:可以從標准輸入接收輸入,並把輸入轉換為一個特定的參數列表
- 格式:command | xargs [選項] [command]
- 可選參數:
- -n:指定每行最大的參數數量
- -d:指定分隔符
- 如,echo “nameXnameXnameXname” | xargs -dX -n2
- 查找當前目錄下所有c代碼文件,統計總行數
- find . -type f -name “*.c” | xargs wc -l
- 將find產生的輸出(test2目錄下的所有py文件)作為rm的參數,從而完全刪除
- find test2/ -name “.py” | xargs rm -rf
(20) grep:一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來
- 格式:grep [選項] pattern [文件]
- 可選參數:
- -c:計算搜索到字符串即pattern的次數
- -i:忽略大小寫
- -n:輸出行號
- -v:反向選擇,打印不匹配的行
- -r:遞歸搜索
- -E:將范本樣式為延伸的普通表示法來使用,意味着使用擴展正則表達式
- -color=auto:找到的關鍵字加顏色顯示
- -o:只打印匹配項,一個個按列顯示
- 如,將/etc/passwd文件中出現root的行取出來,關鍵字部分加顏色顯示
- grep “root” /etc/passwd --color=auto
- 將/etc/passwd文件中沒有出現root和nologin的行取出來
- grep -v “root” /etc/passwd | grep -v “nologin”
- 在當前目錄下遞歸搜索文件中包含main()的文件,經常用於查找某些函數位於哪些源碼文件中
- grep -r “main()”
- 正則表達式
- 正則表達式是一種符號表示法,被用來識別文本模式。在某種程度上,它們與匹配文件和路徑名的shell通配符比較相似,但其規模更大。形式和功能上正則表達式和通配符很像,不過它們之間又有很大區別,特別在於一些特殊的匹配字符的含義上,比如*在通配符中表示0或多個字符,而在正則表達式中為匹配之前字符串的0次或多次。
- 如,利用linux系統自帶的字典查找一個5個字母的單詞,第3個字母是j,最后一個字母為r
- grep “^…j.r$” /usr/share/dict/words
(21) cut:一個將文本按列進行切分的小工具,可以指定分隔每列的定界符。如果一行數據包含多個字段(多列),現在想要提取其中的一列或多列,這時候cut命令將可以使用了。
- 格式:cut [選項 ] [文件名]
- 可選參數:
- -b:以字節為單位進行分割
- -c:以字符為單位進行分割,-c -5 前5個,-c 5- 前5個之后,-c 5 第5個, -c 2-5 第2個到第5個
- -d:自定義分隔符,默認是制表符
- -f:自定義字段,如一列和三列-f 1,3, 第一列 -f 1,前三列 -f 1-3
- -complement:抽取除-c,-f指定的文本外的整個文本行
- 如,提取student.txt文件中除第一列的其他列 cut -f 1 -d ’ ’ student.txt -complement
(22) sed:屬於流編輯器,即在編輯文件的時候不用把整個文件都讀入內存,可以一行行的讀入,操作完成后再讀入下一行,可以占用較小的內存資源。
- 格式:sed [選項] [操作] [文件名]
- 如將/etc/passwd的內容列出並且打印行號,同時,請將第2-5行刪除
- nl /etc/passwd | sed ‘2,5d’
- 與grep一樣,sed也支持特殊元字符,來進行模式查找與替換。不同的是,sed使用的正則表達式是括在/之間的模式。如果要把正則表達式分隔符/改為另一個字符,比如o,只要在這個字符前加入一個\,在字符后跟上正則表達式,再跟上這個字符即可。
(23) paste:與cut指令相反,它會添加一個或多個文本列到文件中,而不是從文件中抽取文本列
- 格式:paste [選項] [文件名]
- 可選參數:
- -s:將每個文件合並成行,而不是單獨的黏貼
- -d:自定義分隔符,默認是制表符
- 如,將student.txt和telephone.txt文件中的內容按列拼接,指定分隔符是: paste student.txt telephone.txt -d ‘:’
(24) tr(translate):常被用來更改字符,可以看作是一種基於字符的查找與替換操作。換字是一種把字符從一個字母轉換成另一個字母的過程。tr 從標准輸入中替換、縮減、刪除字符,並將結果寫到標准輸出。
- 格式:tr [選項] SET1 SET2
- 可選參數:
- -d:刪除匹配SET1的內容,不作替換
- 如,將輸入的字符大寫轉換為小寫
- echo ‘THIS IS CDL’ | tr ‘A-Z’ ‘a-z’
- 如,將輸入的字符中的數字刪除
- echo ‘THIS 123 IS CDL!’ | tr -d ‘0-9’
(25) sort:對於文件及標准輸入的文本進行從小到大的排序
- 格式:sort [選項] [文件名]
- 可選參數:
- -n:基於字符串的長短進行排序
- -k:指定排序關鍵詞
- -b:排序時忽略每行開頭空格
- -r:以相反的順序即降序排列
- -t:自定義分隔符,默認是制表符
- 如,列出/usr/bin/目錄下使用空間最多的前10個目錄文件
- ls -l /usr/bin | sort -nr -k 5 | head -n 10
(26) uniq(unique):用於報告或忽略文件真的重復行,只能用於排過序的數據,常和sort命令結合使用
- 格式:uniqu [選項] [文件名]
- 可選參數:
- -c:在每行前加上出現次數的標號
- -d:只輸出重復出現的行
- -u:只顯示唯一的行
- 如,找出/bin目錄和/usr/bin目錄下所有相同的命令
- ls /bin /usr/bin | sort | unqiu -d
(27) join:用來將兩個文件中制定欄位內容相同的行連接起來。找出兩個文件中,指定欄位內容相同的行,並加以合並,再輸出到標准輸出設備。與uniqu命令相同,常用於已經排序后的數據。
- 格式:join [選項] 文件1 文件2
- 可選參數:
- -j FIFLD(等同於-1 FIFLD -2 FIFLD):兩個文件匹配字段相同
- 如,指定兩個文件的第三個字段為匹配字段,連接兩個文件 join -1 3 -2 3 c.txt d.txt
(28) common:逐行比較文本文件,顯示結果包括3列:第一列是只在第一個文件中找到的行;第二列是只在第二個文件中找到的行;第三列是兩個文件的共同行,與uniqu、join相同,只能用在已經排好序的數據
- 格式:common [選項] [文件1] [文件2]
- 可選參數:
- -1:不能輸出文件1特有的行
- -2:不能輸出文件2特有的行
- -3:不能輸出兩個文件共有的行
- 如,比較file1.txt和file2.txt兩個文件的內容,只顯示兩個文件共有的內容 common -12 file1.txt file2.txt
(29) diff(differential):在最簡單的情況下,比較兩個文件的不同,如果使用-代替文件參數,則要比較的內容將來自標准輸入。diff命令是以逐行的方式,比較文本文件的異同處。如果該命令指定進行目錄的比較,則將會比較該目錄中具有相同文件名的文件,而不會對其子目錄文件進行任何比較操作。
- 格式: diff [選項] 文件
- 可選參數:
- -c:上下文模式
- -u:統一模式
- -a:逐行比較
- -r:遞歸比較目錄下的文件
(30) patch:被用來把更改的地方應用到文件中。它接收從diff程序的輸出,並且通常被用來將較老的文件版本轉變為較新的文件版本。
- 使用diff/patch組合有兩個優點:
- 一個diff文件非常小,與整個源碼樹的大小相比較而言
- 一個diff文件簡潔地顯示了所做的修改地方,從而允許程序補丁的審閱者能快速地評估它。
- 當然,diff/patch命令能工作在任何文本文件,不僅僅是源碼文件
- 准備一個diff文件供patch命令使用,diff -Naur old_file new_file > diff_file
- 格式:patch [選項] 補丁文件
- 可選參數:
- -p num:忽略幾層文件夾
- -E:發現空文件時刪除
- -R:取消打過的補丁
- 如,生成file1.txt和file2.txt的diff文件,然后應用patch命令更新file1.txt文件
- diff -Naur file1.txt file2.txt > patchdiff.txt
- patch < patchdiff.txt
- 取消打過的補丁
- patch -R < patchdiff.txt
(31) df(disk free):檢查linux服務器的文件系統的磁盤占用情況
- 格式:df [選項] 文件
- 可選參數:
- -a:全部文件系統列表
- -h:方便閱讀顯示
- -i:顯示inode信息
- -T:文件系統類型
- -t <文件系統類型>:只顯示選定文件系統的磁盤信息
- -X <文件系統類型>:不顯示選定文件系統的磁盤信息
- 如,指定類型磁盤 df -t ext4
(32) du(disk usage):對文件和目錄使用空間的查看
- 格式:du [選項] 文件
- 可選參數:
- -a:顯示目錄中個別文件的大小
- -b:顯示大小時以byte為單位
- -k:顯示大小時以KB為單位
- -m:顯示大小時以MB為單位
- -s:僅顯示總計,列出最后加總的值
- -h:以K,M,G為單位,提供可讀性
- -c:除顯示單獨目錄大小外,顯示所有目錄和文件總和
- 如,顯示幾個文件或目錄各自占用磁盤空間的大小,並統計總和
- du -ch file1.txt file2.txt
- 按照空間大小逆序排列顯示
- du -h | sort -nr | head -n 10
(33) time:測量一個命令的運行時間
- 格式:time 命令
- 如,將命令date的運行時間保持到本地文件中
- {time date;} > 1.txt
(34) clear:清屏