常用 linux 命令集錦

常用 linux 命令集錦

文章涉及到vim\grep\cat\more\less\echo\sed\awk的入門用法。

vim

vim test -----建立一個(gè)test文件。test文件可以是hello.py、hello.txt等。

touch test -----效果同vim test。

mkdir test -----建立一個(gè)test文件夾

open test -----打開test文件夾

rm test ----- 刪除test文件

rm -r test -----刪除test文件夾

注意:vim test 命令后會(huì)進(jìn)入vim編輯器,按鍵i,進(jìn)入編輯模式,按鍵esc,退出編輯模式,鍵入:x,(注意是':x')保存編輯并退出。

grep:

文本搜索工具,可搭配正則表達(dá)式使用,全稱Global Regular Expression Print,譯為全局正則表達(dá)式版本。

grep的一般使用方法:grep+[options]+pattern+filename? ,其中pattern是要搜索的字符串或正則表達(dá)式。

options可選參數(shù):

-i :忽略大小寫

? ? -c :打印匹配的行數(shù)

? ? -l :從多個(gè)文件中查找包含匹配項(xiàng)

? ? -v :查找不包含匹配項(xiàng)的行

? ? -n:打印包含匹配項(xiàng)的行和行標(biāo)

正則表達(dá)式參數(shù):

\ 忽略正則表達(dá)式中特殊字符的原有含義

? ? ^ 匹配正則表達(dá)式的開始行

? ? $ 匹配正則表達(dá)式的結(jié)束行

? ? \< 從匹配正則表達(dá)式的行開始

? ? \>; 到匹配正則表達(dá)式的行結(jié)束

? ? [ ] 單個(gè)字符;如[A] 即A符合要求

? ? [ - ] 范圍 ;如[A-Z]即A,B,C一直到Z都符合要求

? ? . 所有的單個(gè)字符

? ? * 所有字符,長度可以為0

其他:

明確要求搜索子目錄(-r的意思是遞歸):grep -r

? ? 或忽略子目錄:grep -d skip

注意:grep 是搜索文件內(nèi)容的,不搜索文件名。

如果有很多 輸出時(shí),您可以通過管道將其轉(zhuǎn)到'less'上閱讀:

? ? $ grep magic /usr/src/Linux/Documentation/* | less


常見的示例有:

grep Aug /var/log/messages 在文件 '/var/log/messages'中查找關(guān)鍵詞"Aug"

? ? grep ^Aug /var/log/messages 在文件 '/var/log/messages'中查找以"Aug"開始的詞匯

? ? grep [0-9] /var/log/messages 選擇 '/var/log/messages' 文件中所有包含數(shù)字的行

? ? grep Aug -R /var/log/* 在目錄 '/var/log' 及隨后的目錄中搜索字符串"Aug"



在Linux系統(tǒng)中有三種命令可以用來查閱全部的文件,分別是cat、more和less命令。它們查閱文件的使用方法也比較簡(jiǎn)單都是 命令 文件名 ,但是三者又有著區(qū)別。

1.cat命令可以一次顯示整個(gè)文件,如果文件比較大,使用不是很方便;

2.more命令可以讓屏幕在顯示滿一屏幕時(shí)暫停,此時(shí)可按空格健繼續(xù)顯示下一個(gè)畫面,或按Q鍵停止顯示。

3.less命令也可以分頁顯示文件,和more命令的區(qū)別就在于它支持上下鍵卷動(dòng)屏幕,當(dāng)結(jié)束瀏覽時(shí),只要在less命令的提示符": "下按Q鍵即可。

另外,多數(shù)情況下more和less命令會(huì)配合管道符來分頁輸出需要在屏幕上顯示的內(nèi)容。

cat:

cat命令是linux下的一個(gè)文本輸出命令,通常是用于觀看某個(gè)文件的內(nèi)容的;

? ? cat主要有三大功能:

? ? 1.一次顯示整個(gè)文件。

? ? cat? filename

? ? 2.從鍵盤創(chuàng)建一個(gè)文件。

? ? cat? >? filename

? ? 只能創(chuàng)建新文件,不能編輯已有文件。編輯好后Ctrl+C退出編輯模式。

? ? 3.將幾個(gè)文件合并為一個(gè)文件。

? ? cat? file1? file2? > file

? ? cat具體命令格式為 : cat [-AbeEnstTuv] [--help] [--version] fileName


? ? 參數(shù):

? ? -n 或 -number 由 1 開始對(duì)所有輸出的行數(shù)編號(hào)

? ? -b 或 -number-nonblank 和 -n 相似,只不過對(duì)于空白行不編號(hào)

? ? -s 或 -squeeze-blank 當(dāng)遇到有連續(xù)兩行以上的空白行,就代換為一行的空白行

? ? ...

范例:

? ? cat -n linuxfile1 > linuxfile2 把 linuxfile1 的檔案內(nèi)容加上行號(hào)后輸入 linuxfile2 這個(gè)檔案里

? ? cat -b linuxfile1 linuxfile2 >> linuxfile3 把 linuxfile1 和 linuxfile2 的檔案內(nèi)容加上行號(hào)(空白行不加)之后將內(nèi)容附加到linuxfile3 里。

? ? 范例:

? ? 把 linuxfile1 的檔案內(nèi)容加上行號(hào)后輸入 linuxfile2 這個(gè)檔案里

? ? cat -n linuxfile1 > linuxfile2

? ? 把 linuxfile1 和 linuxfile2 的檔案內(nèi)容加上行號(hào)(空白行不加)之后將內(nèi)容附加到 linuxfile3 里。

? ? cat -b linuxfile1 linuxfile2 >> linuxfile3

補(bǔ)充說明:


cat? file1? file2? > file表示將file1和file2的內(nèi)容串接后輸入到file文件中,如果已經(jīng)存在,file文件被重寫。

? ? cat? file1? file2? >>file表示將file1和file2的內(nèi)容串接后輸入到file文件中,如果已經(jīng)存在,新內(nèi)容追加在file文件原內(nèi)容的后面。


more:

more test.log -----將test.log文件內(nèi)容顯示滿一屏幕時(shí)暫停,此時(shí)可按空格健繼續(xù)顯示下一個(gè)畫面,或按Q鍵停止顯示。

cat test.log | grep aug | more? -----將test.log文件篩選出含字符串a(chǎn)ug的行以more的方式顯示輸出


less:

less test.log -----將test.log文件分頁顯示,支持上下鍵卷動(dòng)屏幕,當(dāng)結(jié)束瀏覽時(shí),只要在less命令的提示符": "下按Q鍵即可。

cat test.log | grep aug | less? -----將test.log文件篩選出含字符串a(chǎn)ug的行以less的方式顯示輸出

echo:

echo命令的功能是在顯示器上顯示一段文字,一般起到一個(gè)提示的作用。

? ? 該命令的一般格式為: echo [-n ][-e] 字符串

其中選項(xiàng)n表示輸出文字后不換行;字符串能加引號(hào),也能不加引號(hào)。

? ? -e 若字符串中出現(xiàn)以下字符,則特別加以處理,而不會(huì)將它當(dāng)成一般文字輸出:

?? ? ? \a 發(fā)出警告聲;

?? ? ? \b 刪除前一個(gè)字符;

?? ? ? \c 最后不加上換行符號(hào);

?? ? ? \f 換行但光標(biāo)仍舊停留在原來的位置;

?? ? ? \n 換行且光標(biāo)移至行首;

?? ? ? \r 光標(biāo)移至行首,但不換行;

?? ? ? \t 插入tab;

?? ? ? \v 與\f相同;

?? ? ? \\ 插入\字符;

?? ? ? \nnn 插入nnn(八進(jìn)制)所代表的ASCII字符;



echo示例:

? ? 示例一 打印當(dāng)前的PATH設(shè)置

? ? [root@jfht ~]# echo $PATH?

? ? /usr/kerberos/sbin:/usr/kerberos/bin:/usr/apache/apache-ant-1.7.1/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin


? ? 示例二 打印當(dāng)前的LANG設(shè)置

? ? [root@jfht ~]# echo $LANG?

? ? zh_CN.GB18030


? ? 示例三 對(duì)輸出信息進(jìn)行轉(zhuǎn)義,比如輸出換行

? ? echo "hello\nworld"?

? ? hello\nworld

? ? echo -e "hello\nworld"?

? ? hello

? ? world


? ? echo hello; echo world?

? ? hello

? ? world



sed

1. sed替換的基本語法為:? ? ? ? sed 's/原字符串/替換字符串/'? ? ------------單引號(hào)里面,s表示替換,三根斜線中間是替換的樣式,特殊字符需要使用反斜線"\"進(jìn)行轉(zhuǎn)義。

2. 單引號(hào)是沒有辦法用反斜線"\"轉(zhuǎn)義的,這時(shí)候只要把命令中的單引號(hào)改為雙引號(hào)就行了,格式如下:

# 要處理的字符包含單引號(hào)

sed "s/原字符串包含'/替換字符串包含'/"?

3. 命令中的三根斜線分隔符可以換成別的符號(hào),有時(shí)候替換目錄字符串的時(shí)候有較多斜線,這個(gè)時(shí)候換成其它的分割符是較為方便,只需要緊跟s定義即可。

# 將分隔符換成問號(hào)"?":

sed 's?原字符串?替換字符串?'

4. 可以在末尾加g替換每一個(gè)匹配的關(guān)鍵字,否則只替換每行的第一個(gè),例如:

# 替換所有匹配關(guān)鍵字

sed 's/原字符串/替換字符串/g'

5. 一些特殊字符的使用

  "^"表示行首

  "$"符號(hào)如果在引號(hào)中表示行尾,但是在引號(hào)外卻表示末行(最后一行)

# 注意這里的 " & " 符號(hào),如果沒有 "&",就會(huì)直接將匹配到的字符串替換掉

?? ? ? sed 's/^/添加的頭部&/g'      #在所有行首添加

?? ? ? sed 's/$/&添加的尾部/g'      #在所有行末添加

?? ? ? sed '2s/原字符串/替換字符串/g'  #替換第2行

?? ? ? sed '$s/原字符串/替換字符串/g'? #替換最后一行

?? ? ? sed '2,5s/原字符串/替換字符串/g' #替換2到5行

?? ? ? sed '2,$s/原字符串/替換字符串/g' #替換2到最后一行

6.批量替換字符串(mac如下)

sed -i '' "s/查找字段/替換字段/g" `grep 查找字段 -rl 路徑`

sed -i '' "s/oldstring/newstring/g" `grep oldstring -rl yourdir`

7. sed處理過的輸出是直接輸出到屏幕上的,使用參數(shù)"i"直接在文件中替換。

# 替換文件中的所有匹配項(xiàng)

sed -i 's/原字符串/替換字符串/g' filename

8. 多個(gè)替換可以在同一條命令中執(zhí)行,用分號(hào)";"分隔,其格式為:

# 同時(shí)執(zhí)行兩個(gè)替換規(guī)則

sed 's/^/添加的頭部&/g;s/$/&添加的尾部/g'


awk:

awk語言的最基本功能是在文件或者字符串中基于指定規(guī)則瀏覽和抽取信息。

通常,awk是以文件的一行為處理單位的。awk每接收文件的一行,然后執(zhí)行相應(yīng)的命令,來處理文本。

相對(duì)于grep的查找,awk強(qiáng)在對(duì)文本的分析處理。

使用方法

awk '{pattern + action}' {filenames}

pattern 表示 AWK 在數(shù)據(jù)中查找的內(nèi)容,而 action 是在找到匹配內(nèi)容時(shí)所執(zhí)行的一系列命令?;ɡㄌ?hào)({})不需要在程序中始終出現(xiàn),但它們用于根據(jù)特定的模式對(duì)一系列指令進(jìn)行分組。?

調(diào)用awk

命令行方式調(diào)用awk

awk [-F? field-separator]? 'commands'? input-file(s)

其中,commands 是真正awk命令,[-F域分隔符]是可選的。 input-file(s) 是待處理的文件。

在awk中,文件的每一行中,由域分隔符分開的每一項(xiàng)稱為一個(gè)域。通常,在不指名-F域分隔符的情況下,默認(rèn)的域分隔符是空格。

?入門實(shí)例

假設(shè)last -n 5的輸出如下

[root@www ~]# last -n 5

root? ? pts/1? 192.168.1.100? Tue Feb 10 11:21? still logged in

root? ? pts/1? 192.168.1.100? Tue Feb 10 00:46 - 02:28? (01:41)

root? ? pts/1? 192.168.1.100? Mon Feb? 9 11:41 - 18:30? (06:48)

dmtsai? pts/1? 192.168.1.100? Mon Feb? 9 11:41 - 11:41? (00:00)

root? ? tty1? ? ? ? ? ? ? ? ? Fri Sep? 5 14:09 - 14:10? (00:01)

如果只是顯示最近登錄的5個(gè)帳號(hào)

#last -n 5 | awk? '{print $1}'

root

root

root

dmtsai

root

awk工作流程是這樣的:讀入有'\n'換行符分割的一條記錄,然后將記錄按指定的域分隔符劃分域,填充域,$0則表示所有域,$1表示第一個(gè)域,$n表示第n個(gè)域。默認(rèn)域分隔符是"空白鍵" 或 "[tab]鍵",所以$1表示登錄用戶,$3表示登錄用戶ip,以此類推。

如果只是顯示/etc/passwd的賬戶

#cat /etc/passwd |awk? -F ':'? '{print $1}'?

root

daemon

bin

sys

這種是awk+action的示例,每行都會(huì)執(zhí)行action{print $1}。

-F指定域分隔符為':'。

如果只是顯示/etc/passwd的賬戶和賬戶對(duì)應(yīng)的shell,而賬戶與shell之間以tab鍵分割

#cat /etc/passwd |awk? -F ':'? '{print $1"\t"$7}'

root? ? /bin/bash

daemon? /bin/sh

bin? ? /bin/sh

sys? ? /bin/sh

如果只是顯示/etc/passwd的賬戶和賬戶對(duì)應(yīng)的shell,而賬戶與shell之間以逗號(hào)分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"。

cat /etc/passwd |awk? -F ':'? 'BEGIN {print "name,shell"}? {print $1","$7} END {print "blue,/bin/nosh"}'

name,shell

root,/bin/bash

daemon,/bin/sh

bin,/bin/sh

sys,/bin/sh

....

blue,/bin/nosh

awk工作流程是這樣的:先執(zhí)行BEGIN,然后讀取文件,讀入有/n換行符分割的一條記錄,然后將記錄按指定的域分隔符劃分域,填充域,$0則表示所有域,$1表示第一個(gè)域,$n表示第n個(gè)域,隨后開始執(zhí)行模式所對(duì)應(yīng)的動(dòng)作action。接著開始讀入第二條記錄······直到所有的記錄都讀完,最后執(zhí)行END操作。

搜索/etc/passwd有root關(guān)鍵字的所有行

#awk -F: '/root/' /etc/passwd

root:x:0:0:root:/root:/bin/bash

這種是pattern的使用示例,匹配了pattern(這里是root)的行才會(huì)執(zhí)行action(沒有指定action,默認(rèn)輸出每行的內(nèi)容)。

搜索支持正則,例如找root開頭的: awk -F: '/^root/' /etc/passwd

搜索/etc/passwd有root關(guān)鍵字的所有行,并顯示對(duì)應(yīng)的shell

# awk -F: '/root/{print $7}' /etc/passwd? ? ? ? ? ? ?

/bin/bash

這里指定了action{print $7}


模式可以是以下任意一個(gè):

/正則表達(dá)式/:使用通配符的擴(kuò)展集。

關(guān)系表達(dá)式:可以用下面運(yùn)算符表中的關(guān)系運(yùn)算符進(jìn)行操作,可以是字符串或數(shù)字的比較,如$2>%1選擇第二個(gè)字段比第一個(gè)字段長的行。

模式匹配表達(dá)式:用運(yùn)算符~(匹配)和~!(不匹配)。

模式,模式:指定一個(gè)行的范圍。該語法不能包括BEGIN和END模式。

BEGIN:讓用戶指定在第一條輸入記錄被處理之前所發(fā)生的動(dòng)作,通??稍谶@里設(shè)置全局變量。

END:讓用戶在最后一條輸入記錄被讀取之后發(fā)生的動(dòng)作。

幾個(gè)實(shí)例:

$ awk '/^(no|so)/' test-----打印所有以模式no或so開頭的行。

$ awk '/^[ns]/{print $1}' test-----如果記錄以n或s開頭,就打印這個(gè)記錄。

$ awk '$1 ~/[0-9][0-9]$/(print $1}' test-----如果第一個(gè)域以兩個(gè)數(shù)字結(jié)束就打印這個(gè)記錄。

$ awk '$1 == 100 || $2 < 50' test-----如果第一個(gè)或等于100或者第二個(gè)域小于50,則打印該行。

$ awk '$1 != 10' test-----如果第一個(gè)域不等于10就打印該行。

$ awk '/test/{print $1 + 10}' test-----如果記錄包含正則表達(dá)式test,則第一個(gè)域加10并打印出來。

$ awk '{print ($1 > 5 ? "ok "$1: "error"$1)}' test-----如果第一個(gè)域大于5則打印問號(hào)后面的表達(dá)式值,否則打印冒號(hào)后面的表達(dá)式值。

$ awk '/^root/,/^mysql/' test----打印以正則表達(dá)式root開頭的記錄到以正則表達(dá)式mysql開頭的記錄范圍內(nèi)的所有記錄。如果找到一個(gè)新的正則表達(dá)式root開頭的記錄,則繼續(xù)打印直到下一個(gè)以正則表達(dá)式mysql開頭的記錄為止,或到文件末尾。


awk內(nèi)置變量

awk有許多內(nèi)置變量用來設(shè)置環(huán)境信息,這些變量可以被改變,下面給出了最常用的一些變量。

ARGC? ? ? ? ? ? ? 命令行參數(shù)個(gè)數(shù)

ARGV? ? ? ? ? ? ? 命令行參數(shù)排列

ENVIRON? ? ? ? ? ? 支持隊(duì)列中系統(tǒng)環(huán)境變量的使用

FILENAME? ? ? ? ? awk瀏覽的文件名

FNR? ? ? ? ? ? ? ? 瀏覽文件的記錄數(shù)

FS? ? ? ? ? ? ? ? 設(shè)置輸入域分隔符,等價(jià)于命令行 -F選項(xiàng)

NF? ? ? ? ? ? ? ? 瀏覽記錄的域的個(gè)數(shù)

NR? ? ? ? ? ? ? ? 已讀的記錄數(shù)

OFS? ? ? ? ? ? ? ? 輸出域分隔符

ORS? ? ? ? ? ? ? ? 輸出記錄分隔符

RS? ? ? ? ? ? ? ? 控制記錄分隔符

此外,$0變量是指整條記錄。$1表示當(dāng)前行的第一個(gè)域,$2表示當(dāng)前行的第二個(gè)域,......以此類推。

統(tǒng)計(jì)/etc/passwd:文件名,每行的行號(hào),每行的列數(shù),對(duì)應(yīng)的完整行內(nèi)容:

#awk? -F ':'? '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd

filename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bash

filename:/etc/passwd,linenumber:2,columns:7,linecontent:daemon:x:1:1:daemon:/usr/sbin:/bin/sh

filename:/etc/passwd,linenumber:3,columns:7,linecontent:bin:x:2:2:bin:/bin:/bin/sh

filename:/etc/passwd,linenumber:4,columns:7,linecontent:sys:x:3:3:sys:/dev:/bin/sh


記錄、域、域分隔符

記錄

awk把每一個(gè)以換行符結(jié)束的行稱為一個(gè)記錄。

記錄分隔符:默認(rèn)的輸入和輸出的分隔符都是回車,保存在內(nèi)建變量ORS和RS中。

$0變量:它指的是整條記錄。如$ awk '{print $0}' test將輸出test文件中的所有記錄。

變量NR:一個(gè)計(jì)數(shù)器,每處理完一條記錄,NR的值就增加1。如$ awk '{print NR,$0}' test將輸出test文件中所有記錄,并在記錄前顯示記錄號(hào)。

記錄中每個(gè)單詞稱做"域",默認(rèn)情況下以空格或tab分隔。awk可跟蹤域的個(gè)數(shù),并在內(nèi)建變量NF中保存該值。如$ awk '{print $1,$3}' test將打印test文件中第一和第三個(gè)以空格分開的列(域)。

域分隔符

內(nèi)建變量FS保存輸入域分隔符的值,默認(rèn)是空格或tab。我們可以通過-F命令行選項(xiàng)修改FS的值。如$ awk -F: '{print $1,$5}' test將打印以冒號(hào)為分隔符的第一,第五列的內(nèi)容。

可以同時(shí)使用多個(gè)域分隔符,這時(shí)應(yīng)該把分隔符寫成放到方括號(hào)中,如$awk -F'[:\t]' '{print $1,$3}' test,表示以空格、冒號(hào)和tab作為分隔符。

輸出域的分隔符默認(rèn)是一個(gè)空格,保存在OFS中。如$ awk -F: '{print $1,$5}' test,$1和$5間的逗號(hào)就是OFS的值。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容