Linux常見的Shell命令


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:清屏


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM