涉及作業中Linux常用命令詳解
一、Linux
1.匯總
lz按照自己實際作業中(類別是從一些教學網站上截取的)
| 檔案/目錄操作 | 磁盤操作 | 網路通訊 | 系統操作 | 備份壓縮 | 其他命令 |
|---|---|---|---|---|---|
| cat | cd | telnet | ps | tar | bc |
| find | pwd | netstat | top | zip | head |
| grep | ls | ifconfig | free | unzip | tail |
| sed | mkdir | ping | crontab | gzip | xargs |
| cut | rmdir | date | ip | ||
| awk | df | kill | nohup | ||
| chmod | passwd | man | |||
| chown | export | curl | |||
| read | set | wget | |||
| mv | unset | ifconfig | |||
| rm | reset | ||||
| touch | setenv | ||||
| cp | sudo | ||||
| scp | clear | ||||
| rcp | uname | ||||
| expr | whoami | ||||
| wc | rpm | ||||
| let | useradd | ||||
| more | userdel | ||||
| usermod | |||||
| groupadd | |||||
| exit | |||||
| sleep | |||||
| reboot | |||||
| shutdown | |||||
| halt | |||||
| id | |||||
| chkconfig |
2.具體使用
cat
1.語法
cat [option] filename
2.作用:查看檔案,也可新建 or 修改檔案
2.option
-b 對非空行輸出行號
-n 輸出所有行號
3.eg
cat filename // 查看檔案
cat >filename // 新建檔案 or 覆寫原有檔案內容
cat >>filename // 追加內容到檔案的末尾
cat f1 f2 > file // 合并f1 f2檔案到file中
cat -b filename
cat -n filename
結合其他命令使用(偽代碼)
cat filename | grep
cat filename | cut
cat filename | sed
回到頂部
find
1.語法
find pathname [option...] [-print/-exec/-ok ...]
2.作用:查找指定檔案,并執行相應的命令
3.option
-name // 根據檔案名稱,可正則匹配
-type // 根據檔案型別 d:目錄 f:檔案
-user // 根據檔案屬組
-group // 根據檔案所屬的組
-size n // 查找指定檔案大小的檔案 +1000c
-mmin n // 查找系統中最后n分鐘被改變檔案資料的檔案
-amin n // 查找系統中最后n分鐘訪問的檔案
-atime n // 查找系統中最后n*24小時訪問的檔案 (用減號-來限定更改時間在距今n日以內的檔案,而用加號+來限定更改時間在距今n日以前的檔案)
-maxdepth n 最大查找目錄深度
-print // 匹配到的檔案輸出到標準輸出中
-exec // 匹配到的檔案執行該引數給出的shell命令,模板:'command' {} \;
-ok // 以安全模式執行shell命令,以詢問的方式
4.eg
find ./ -name '*.log' // 查找當前目錄下以.log為后綴的檔案
find -atime -2 // 查找48h內修改過的檔案
find -mmin -5 // 查找5min內修改過的檔案
find ./ -type f -mmin +1 -name "*.log" // 查找1min前修改過的并且是檔案名以.log為后綴的檔案
find -size +1000c // 查找大于1K的檔案
find /tmp -size +100M // 查找tmp下檔案大小大于100M的檔案
find ./ -type f "*.log" -exec 'rm' {} \; // 查找檔案名以.log為后綴的檔案并且洗掉
find ./ -type f -mmin -10 -name "*.log" -exec 'rm' {} \; // 查找當前目錄下5min內修改過內容的并且檔案名以.log為后綴的檔案然后執行洗掉命令
find ./ -type f "*.log" | xargs rm -f // 通過結合xargs執行rm命令
回到頂部
grep
Global Regular Expression Print(全域正則運算式搜索)
1.語法
grep [option] pattern file|dir
2.作用:對資料進行行提取,不改變源檔案內容-可搭配正則使用
3.option
-v #對內容進行取反提取(列印出不符合條件的內容)
-n #對提取的內容顯示行號
-w #精確匹配
-i #忽略大小寫
^ #匹配開頭行首
-E #正則匹配
-r 遞回查找檔案(當前目錄以及子目錄下所有所有的檔案)
-c --count 計算匹配的列數
-f 從檔案中讀取關鍵詞
4.正則運算式
^ #錨定行的開始 如:'^grep'匹配所有以grep開頭的行,
$ #錨定行的結束 如:'grep$'匹配所有以grep結尾的行,
. #匹配一個非換行符的字符 如:'gr.p'匹配gr后接一個任意字符,然后是p,
* #匹配零個或多個先前字符 如:'*grep'匹配所有一個或多個空格后緊跟grep的行,
.* #一起用代表任意字符,
[] #匹配一個指定范圍內的字符,如'[Gg]rep'匹配Grep和grep,
[^] #匹配一個不在指定范圍內的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一個字母開頭,緊跟rep的行,
\(..\) #標記匹配字符,如'\(love\)',love被標記為1,
\< #錨定單詞的開始,如:'\<grep'匹配包含以grep開頭的單詞的行,
\> #錨定單詞的結束,如'grep\>'匹配包含以grep結尾的單詞的行,
x\{m\} #重復字符x,m次,如:'0\{5\}'匹配包含5個o的行,
x\{m,\} #重復字符x,至少m次,如:'o\{5,\}'匹配至少有5個o的行,
x\{m,n\} #重復字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10個o的行,
\w #匹配文字和數字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零個或多個文字或數字字符,然后是p,
\W #\w的反置形式,匹配一個或多個非單詞字符,如點號句號等,
\b #單詞鎖定符,如: '\bgrep\b'只匹配grep,
5.eg
grep zhuyz *.txt // 查找當前路徑下后綴為.txt的所有檔案中包含zhuyz字串的檔案,并且列印出該檔案的行
grep -r zhuyz ./ // 遞回查找當前目錄下以及子目錄下的所有檔案中包含zhuyz字串的檔案,并且列印出該檔案的行
grep -v zhuyz abc.txt // 查找檔案中不包含有zhuyz字串的行內容,并且列印出這些行
grep -rn zhuyz * // 遞回查找當前路徑下以及子路徑下所有檔案 && 顯示行號
grep '\W' abc.txt // 正則匹配\W:匹配非字母、數字、下劃線
ps -ef | grep zookeeper // 查看zookeeper的行程
ps -ef | grep zookeeper -c // 查看zookeeper行程個數(查看zk集群有幾臺節點)
cat abc.txt | grep -f zhuyz // 從檔案中讀取關鍵字zhuyz的行內容
grep -E 'zhuyz|zyz' abc.txt // 從檔案中讀取含有zhuyz或者zyz的行內容
生產中查看日志:
grep -n '2021-02-28 12:00:00' *.log | grep -n 'ERROR' *.log | grep -n 'Exception' *.log
find ./ -type f -name "*.log" | xargs grep "ERROR|Exception" // 匹配找到當前目錄以及子目錄下以.log后綴的檔案,傳遞給grep命令執行,
回到頂部
sed
Stream Editor(流編輯)
1.語法
sed [選項][動作] 檔案名 | sed [-hnV][-e<script>][-f<script檔案>][文本檔案]
2.對資料行進行處理(選取,新增,替換,洗掉,搜索)-可搭配正則使用
3.常見的選項與引數:
-n #把匹配到的行輸出列印到螢屏
-e #表示可以執行多條動作[以選項中指定的script來處理輸入的文本檔案,]
a :新增, a 的后面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
c :取代, c 的后面可以接字串,這些字串可以取代 n1,n2 之間的行!
d :洗掉,因為是洗掉啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而這些字串會在新的一行出現(目前的上一行);
p :列印,亦即將某個選擇的資料印出,通常 p 會與引數 sed -n 一起運行~
s :取代,可以直接進行取代的作業哩!通常這個 s 的動作可以搭配正規表示法!例如 1,20s/old/new/g 就是啦!
's' 就是替換的命令, 'g' 為本行中全域替換,如果不加 'g' 只換該行中出現的第一個,
eg:'s/a/b/g':把a替換成b
4.正則運算式
^ #錨定行的開始 如:'^sed'匹配所有以sed開頭的行,
$ #錨定行的結束 如:'sed$'匹配所有以sed結尾的行,
. #匹配一個非換行符的字符 如:'s.d'匹配s后接一個任意字符,然后是d,
* #匹配零個或多個先前字符 如:'*sed'匹配所有一個或多個空格后緊跟sed的行,
.* #一起用代表任意字符,
[] #匹配一個指定范圍內的字符,如'[Ss]ed'匹配Sed和sed,
[^] #匹配一個不在指定范圍內的字符,如:'[^A-H]ed'匹配不包含A-H的一個字母開頭,緊跟ed的行,
\(..\) #標記匹配字符,如'\(love\)',love被標記為1,
\< #錨定單詞的開始,如:'\<sed'匹配包含以sed開頭的單詞的行,
\> #錨定單詞的結束,如'sed\>'匹配包含以sed結尾的單詞的行,
x\{m\} #重復字符x,m次,如:'0\{5\}'匹配包含5個o的行,
x\{m,\} #重復字符x,至少m次,如:'o\{5,\}'匹配至少有5個o的行,
x\{m,n\} #重復字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10個o的行,
\w #匹配文字和數字字符,也就是[A-Za-z0-9],如:'S\w*ed'匹配以S后跟零個或多個文字或數字字符,然后是ed,
\W #\w的反置形式,匹配一個或多個非單詞字符,如點號句號等,
\b #單詞鎖定符,如: '\bsedp\b'只匹配sed,
5.eg
p #以行為單位進行查詢,通常與-n一起使用[列印,亦即將某個選擇的資料印出,通常 p 會與引數 sed -n 一起運行~]
eg:df -h | sed -n '2p'
d #洗掉[洗掉,因為是洗掉啊,所以 d 后面通常不接任何咚咚;]
eg: sed '2d' df.txt // 洗掉第2行
eg: sed '2,5d' df.txt // 洗掉第2-5行
eg: sed '2,$d' df.txt // 洗掉第2行到最后1行
a #在行的下面插入新的內容[新增, a 的后面可以接字串,而這些字串會在新的一行出現(目前的下一行)~]
eg: sed '2a 1234567890' df.txt // 在第2行下面新增1行
i #在行的上面插入新的內容[插入, i 的后面可以接字串,而這些字串會在新的一行出現(目前的上一行);]
eg: sed '2i 1234567890' df.txt // 在第2行上面新增1行1234567890的內容
eg: sed '2,5i 1234567890' df.txt // 靈異插入,自己試試
c #替換[取代, c 的后面可以接字串,這些字串可以取代 n1,n2 之間的行!]
eg: sed '2c 1234567890' df.txt // 替換第2行的內容為1234567890
eg: sed '2,5c 1234567890' df.txt // 替換第2-5行的內容為1234567890
s/要被取代的內容/新的字串/g #指定內容進行替換[取代,可以直接進行取代的作業哩!通常這個 s 的動作可以搭配正規表示法!例如 1,20s/old/new/g 就是啦!]-(可使用正則)
eg:sed 's/0%/100%/g' df.txt
eg:cat df.txt | sed 's/[0-9]/\*/g' // 把數字替換成*(*是元字符,所以需要\轉義)
-i #對源檔案進行修改(高危操作,慎用,用之前需要備份源檔案)
eg: sed -i '1i aaa' df.txt // 把aaa寫入到df.txt的第一行
搜索:在檔案中搜索內容或者搜尋并洗掉(可使用正則)
eg:cat -n df.txt | sed -n '/100%/p' // 檢索關鍵字內容行(和p結合使用一定要加—n)
eg:cat -n df.txt | sed '/100%/d' // 檢索并洗掉關鍵字內容行,顯示其他行
eg:cat abc.txt | sed -n '/^e/p' // 檢索并查找以e為開頭的行內容
-e #表示可以執行多條動作
eg:cat -n df.txt | sed -n -e 's/100%/100%-----100%/g' -e '/100%-----100%/p
eg:cat -n /etc/passwd | sed -e '3,$d' -e 's/root/re-root/g' // 洗掉/etc/passwd第3行到末尾的資料,并把root替換為re-root
正則(如果sed命令想要使用正則匹配,一定要加上/)
eg:sed -n '/[a-z]/p' df.txt
回到頂部
cut
1.語法
cut OPTION... [FILE]...
2.作用:對資料進行列的提取
3.option
-d #指定分割符
-f #指定截取區域
-c #以字符為單位進行分割
4.eg
-d和-f
以':'為分隔符,截取出/etc/passwd的第一列跟第三列
cut -d ':' -f 1,3 /etc/passwd
以':'為分隔符,截取出/etc/passwd的第一列到第三列
cut -d ':' -f 1-3 /etc/passwd
以':'為分隔符,截取出/etc/passwd的第二列到最后一列
cut -d ':' -f 2- /etc/passwd
-c
截取/etc/passwd檔案從第二個字符到第九個字符
cut -c 2-9 /etc/passwd
回到頂部
awk
1.語法
awk [option] 'script' var=value file(s)
或awk [option] -f scriptfile var=value file(s)
awk '{[pattern] action}' {filenames}
awk -F "分隔符" 'script' {filenames}
awk -v # 設定變數
awk -f {awk腳本} {檔案名}
awk '條件 {執行動作}'檔案名
awk '條件1 {執行動作} 條件2 {執行動作} ...' 檔案名
或awk [選項] '條件1 {執行動作} 條件2 {執行動作} ...' 檔案名
2.作用:資料檢索(列的操作)
3.option
-F // 指定列的分隔符,默認以空格或者制表符為分隔符
-f // 呼叫腳本
-v // 定義變數
4.運算子
$ // 列欄位參考 $0:一整行 $1:第1列 $2:第2列 ...
= += -= *= /= %= ^= **= // 賦值
+ - * / % // 加,減 乘,除與求余
|| && // 邏輯或 邏輯與
~ !~ // 匹配正則運算式和不匹配正則運算式
< <= > >= != == // 關系運算子
log.txt檔案內容:
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
eg:awk '$1>2' log.txt // 輸出[第1列大于2]的行
eg:awk '$1>2 {print $1,$2}' log.txt // 檢索[第1列大于2]的行,輸出第1列和第2列
eg:awk '$1*2==4' log.txt // 檢索輸出[第1列乘以2等于4]的行
eg:awk '$1*2%==0 && $1<4' log.txt // 檢索輸出[第1列取余等于0并且第1列小于4]的行
5.內建變數
NF // 欄位數量變數
NR // 行號
\t // 制表符
\n // 換行符
FS // BEGIN時定義分隔符
~ // 包含(可結合正則使用,看下面eg)
!~ // 不包含(可結合正則使用,看下面eg)
FS // Field Separator:輸入欄位分隔符, 默認為空白字符
log.txt檔案內容:
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
ha hello
hi hello
a b
# NF
eg:awk 'NF<3' log.txt // 檢索輸出[列欄位數小于3]的行
eg:awk 'NF<3 && $1 ~ /h/' log.txt // 檢索輸出[列欄位數小于3并且第1列包含h]的行
eg:awk 'NF<3 && $1 ~ /^ha/' log.txt // 檢索輸出[列欄位數小于3并且第1列以ha開頭]的行
eg:awk 'NF<3 && $1 ~ /^ha/ {print $1,$2}' // 檢索[列欄位數小于3并且第1列以ha開頭]的行,輸出第1列和第2列
# NR
eg:cat log.txt | awk 'NR==2 {print $3}' // 檢索[行等于2]的行,輸出第3列
eg:awk '(NR>=2 && NR<=5) {print $1}' /etc/passwd // 檢索[行大于等于2并且小于等于5]的行,輸出第1列
# \t \n
eg:awk -F ' ' '{print $1"\t"$2}' log.txt // 以空格為分隔符,輸出第1列、\t、第2列
eg:awk -F ' ' '{print $1"\n"$2}' log.txt // 以空格為分隔符,輸出第1列、\n、第2列
# BEGIN(執行前的陳述句,在讀取所有行內容前就開始執行) END(處理完所有的行后要執行的陳述句)
eg(截取自菜鳥教程,很不錯):
1.cat score.txt
Marry 2143 78 84 77
Jack 2321 66 78 45
Tom 2122 48 77 71
Mike 2537 87 97 95
Bob 2415 40 57 62
2.awk腳本檔案: score.awk
#!/bin/awk -f
#!/bin/awk -f
#運行前
BEGIN {
math = 0
english = 0
computer = 0
printf "NAME NO. MATH ENGLISH COMPUTER TOTAL\n"
printf "---------------------------------------------\n"
}
#運行中
{
math+=$3
english+=$4
computer+=$5
printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5
}
#運行后
END {
printf "---------------------------------------------\n"
printf " TOTAL:%10d %8d %8d \n", math, english, computer
printf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
}
3.執行命令
awk -f score.awk score.txt
4.輸出:
NAME NO. MATH ENGLISH COMPUTER TOTAL
---------------------------------------------
Marry 2143 78 84 77 239
Jack 2321 66 78 45 189
Tom 2122 48 77 71 196
Mike 2537 87 97 95 279
Bob 2415 40 57 62 159
---------------------------------------------
TOTAL: 319 393 350
AVERAGE: 63.80 78.60 70.00
# ~ !~ (可結合正則使用)
eg:awk '$1 ~ /ha/' log.txt // 檢索輸出[第1列包含ha]的行內容
eg:awk '$1 ~ /^h/' log.txt // 檢索輸出[第1列以h開頭]的行內容
eg:awk '$1 !~ /^h/' log.txt // 檢索輸出[第1列不以h開頭]的行內容
6.結合正則使用eg
.....待補充
7.其他的一些eg
printf #格式化輸出,不會自動換行,
(%ns:字串型,n代表有多少個字符; %ni:整型,n代表輸出幾個數字;%.nf:浮點型,n代表的是小數點后有多少個
小數)
print #列印出內容,默認會自動換行
\t #制表符
\n #換行符
eg:printf '%s\t%s\t%s\t%s\t%s\t%s\n' 1 2 3 4 5 6
eg:df -h |grep /dev/vda1 | awk '{printf "/dev/vda1的使用率是:"} {print $5}'
小數:echo "scale=2; 0.13 + 0.1" | bc | awk '{printf "%.2f\n", $0}'
-F #指定分割符
eg:cat /etc/passwd | awk -F":" '{print $1}'
8.更多參考
8個有力的 Awk 內建變數:https://www.runoob.com/w3cnote/8-awesome-awk-built-in-variables.html
回到頂部
持續進階更新…奧利剋
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/266646.html
標籤:其他
