Linux系统运行时参数命令--Linux基础命令和工具
目錄
1 Linux基礎(chǔ)命令和工具
1.1 grep搜索字符
1.2 find查找文件
1.3 ls顯示文件
1.4 wc命令
1.5 ulimit用戶資源
1.6?scp遠(yuǎn)程拷貝
1.7?dos2unix和unix2dos
1.8?sed 行處理
簡單模式?
替換模式
1.9?awk 列處理
C/C++Linux服務(wù)器開發(fā)/后臺架構(gòu)師【零聲教育】-學(xué)習(xí)視頻教程-騰訊課堂
1 Linux基礎(chǔ)命令和工具
1.1 grep搜索字符
grep 命令用于在文件中執(zhí)行關(guān)鍵詞搜索,并顯示匹配的效果。部分常用選項
| 參數(shù) | 作用 |
| -c | 僅顯示找到的行數(shù) |
| -i | 忽略大小寫 |
| -n | 顯示行號 |
| -v | 反向選擇 – 僅列出沒有關(guān)鍵詞的行。v 是 invert 的縮寫。 |
| -r | 遞歸搜索文件目錄 |
| -C n | 打印匹配行的前后n行 |
1.2 find查找文件
通過文件名查找文件的所在位置,文件名查找支持模糊匹配
find [指定查找目錄] [查找規(guī)則] [查找完后執(zhí)行的action]
常用的操作:
find . -name FILE_NAMEfind . -iname FILE_NAME 忽略文件名稱大小寫find /etc -maxdepth 1 -name passwd ##查找/etc/下名稱中帶有passwd的文件,查找一層find /mnt -size 20K ##查找/mnt文件大小近似20k的文件find /mnt -size +20K ##查找/mnt文件大小大于20k的文件find /mnt -size -20K ##查找/mnt文件大小小于20k的文件find /etc -maxdepth 2 -mindepth 2 -name .conf ##查找/etc/下名稱中帶有.conf的文件,且只查找第二層find /mnt -type d ##按type查找/mnt中目錄find /mnt -type f ##按type查找/mnt中文件find /mnt -cmin 10 ##查找/mnt中十分鐘左右修改的find /mnt -cmin +10 ##查找/mnt中十分鐘以上修改的find /mnt -cmin -10 ##查找/mnt中十分鐘以內(nèi)修改的find /mnt -ctime 10 ##查找/mnt中十天左右修改的find /mnt -ctime +10 ##查找/mnt中十天以上修改的find /mnt -ctime -10 ##查找/mnt中十天以內(nèi)修改的1.3 ls顯示文件
-t 可以查看最新修改的時間
-l 每行顯示一個條目
-h 可以結(jié)合顯示文件的GB,MB等(human);
-R 遞歸顯示
-n 顯示組id和gid練習(xí):
ls -lt 按最新修改的時間排序,新修改的在前面顯示。
ls -ltR 按最新修改的時間排序,新修改的在前面顯示,并顯示子目錄的文件信息
ls -lh 以單位顯示文件大小
1.4 wc命令
wc命令用于計算字?jǐn)?shù)。利用wc指令我們可以計算文件的Byte數(shù)、字?jǐn)?shù)、或是列數(shù),若不指定文件名稱、或是所給予的文件名為"-",則wc指令會從標(biāo)準(zhǔn)輸入設(shè)備讀取數(shù)據(jù)。
語法
wc [-clw][--help][--version][文件...]
參數(shù):
-c或--bytes或--chars 只顯示Bytes數(shù)。
-l或--lines 只顯示行數(shù)。
-w或--words 只顯示字?jǐn)?shù)。
--help 在線幫助。
--version 顯示版本信息。
練習(xí):
wc testfile # testfile文件的統(tǒng)計信息
7 92 607 testfile # testfile文件的行數(shù)為7、單詞數(shù)92、字節(jié)數(shù)607
wc -l testfile
1.5 ulimit用戶資源
Linux系統(tǒng)對每個登錄的用戶都限制其最大進(jìn)程數(shù)和打開的最大文件句柄數(shù)。為了提高性能,可以根據(jù)硬件資源的具體情況設(shè)置各個用戶的最大進(jìn)程數(shù)和打開的最大文件句柄數(shù)。可以用ulimit -a來顯示當(dāng)前的各種系統(tǒng)對用戶使用資源的限制:
[root@ubuntu~]# ulimit -a core file size ??????????(blocks, -c) 0 data seg size ??????????(kbytes, -d) unlimited scheduling priority ????????????(-e) 0 file size ??????????????(blocks, -f) unlimited pending signals ????????????????(-i) 31558 max locked memory ??????(kbytes, -l) 64 max memory size ????????(kbytes, -m) unlimited open files ?????????????????????(-n) 1024 pipe size ???????????(512 bytes, -p) 8 POSIX message queues ????(bytes, -q) 819200 real-time priority ?????????????(-r) 0 stack size ?????????????(kbytes, -s) 8192 cpu time ??????????????(seconds, -t) unlimited max user processes ?????????????(-u) 31558 virtual memory ?????????(kbytes, -v) unlimited file locks ?????????????????????(-x) unlimited設(shè)置用戶的最大進(jìn)程數(shù): ulimit -u 1024設(shè)置用戶可以打開的最大文件句柄數(shù): ulimit -n 655301.6?scp遠(yuǎn)程拷貝
secure copy的縮寫, scp是linux系統(tǒng)下基于ssh登陸進(jìn)行安全的遠(yuǎn)程文件拷貝命令。
scp命令是Linux系統(tǒng)中功能強(qiáng)大的文件傳輸命令,可以實現(xiàn)從本地到遠(yuǎn)程,以及從遠(yuǎn)程到本地的雙向文件傳輸,用起來非常方便,常用來在線上定位問題時將線卜的一些文件下載到本地進(jìn)行詳查,或者將本地的修改上傳到服務(wù)器上。
使用方式:sudo apt-get install openssh-serverscp liaoqingfu@122.152.222.180:/home/liaoqingfu/test.txt ?./??//下載122.152.222.180的文件scp mi9.aac liaoqingfu@122.152.222.180:/home/liaoqingfu/ ???//上傳文件到122.152.222.180scp -r liaoqingfu@122.152.222.180:/home/liaoqingfu/test ?./ ??//下載test整個目錄到本地scp -r test liaoqingfu@122.152.222.180:/home/liaoqingfu/?????//上傳本地test整個目錄到122.152.222.1801.7?dos2unix和unix2dos
用于轉(zhuǎn)換Windows和UNIX的換行符,通常在Windows系統(tǒng)h開發(fā)的腳本和配置,UNIX系統(tǒng)下都需要轉(zhuǎn)換。
使用方式:
dos2unix test.txt
unix2dos test.txt
轉(zhuǎn)換整個目錄
find . -type f -exec dos2unix {} \;
find ./ -type f 此命令是顯示當(dāng)前目錄下所有的文件
1.8?sed 行處理
命令格式1:sed 's/原字符串/新字符串/' 文件
命令格式2:sed 's/原字符串/新字符串/g' 文件
這兩種命令格式的區(qū)別在于是否有個“g”。沒有“g”表示只替換第一個匹配到的字符串,有“g”表示替換所有能匹配到的字符串,“g”可以認(rèn)為是“global”(全局的)的縮寫,沒有“全局的”結(jié)尾就不要替換全部。
sed命令是用來批量修改文本內(nèi)容的,比如批量替換配置中的某個ip。
sed命令在處理時,會先讀取一行,把當(dāng)前處理的行存儲在臨時緩沖區(qū)中,處理完緩沖區(qū)中的內(nèi)容后,打印到屏幕上。然后再讀入下一行,執(zhí)行下一個循環(huán)。不斷的重復(fù),直到文件末尾。
簡單模式?
?一個簡單的sed命令包含三個主要部分:?參數(shù) 、 范圍 、 操作。要操作的文件,可以直接掛在命令行的最后。
參數(shù)
????????-n 這個參數(shù)是 --quiet 或者 --silent 的意思。表明忽略執(zhí)行過程的輸出,只輸出我們的結(jié)果即可。還有另外一個參數(shù) :
????????-i 。使用此參數(shù)后,所有改動將在原文件上執(zhí)行。你的輸出將覆蓋原文件。非常危險,一定要注意。
范圍
2,5 表示找到文件中,2,3,4,5行的內(nèi)容。
這個范圍的指定很有靈性,請看以下示例(請自行替換圖中的范圍部分)。
5 選擇第5行。2,5 選擇2到5行,共4行。1~2 選擇奇數(shù)行。2,5 選擇2到5行,共4行。1~2 選擇奇數(shù)行。2~2 選擇偶數(shù)行。
范圍的選擇還可以使用正則匹配。請看下面示例。
/void/,+3 選擇出現(xiàn)void字樣的行,以及后面的三行。
2\^void/,/mem/ 選擇以void開頭的行,和出現(xiàn)mem字樣行之間的數(shù)據(jù)。
為了直觀,下面的命令一一對應(yīng)上面的介紹,范圍和操作之間是可以有空格的。
sed -n '5p' sed1.cpp
sed -n '2,5 p' sed1.cpp
sed -n '1~2 p' sed1.cpp
sed -n '2~2 p' sed1.cpp
sed -n '2,+3p' sed1.cpp
sed -n '2,$ p' sed1.cpp操作
sed -n '/void/,+3 p' sed1.cpp
sed -n '/^void/,/CLIENT_TYPE_FLAG_BOTH/p' sed1.cpp
sed -n '/^BroadcastPdu/,/CLIENT_TYPE_FLAG_BOTH/p' sed1.cpp
sed -n '/^void CImUserManager::BroadcastPdu/,/CLIENT_TYPE_FLAG_BOTH/p' sed1.cpp
操作
最常用的操作就是 p ,意思就是打印。比如,以下兩個命令就是等同的:
cat file
sed -n 'p' file
除了打印,還有以下操作,我們來說常用的。
p 對匹配內(nèi)容進(jìn)行打印。
d 對匹配內(nèi)容進(jìn)行刪除。這個時候就要去掉 -n
w 將匹配內(nèi)容寫入到其他地方。
sed -n '2,5 p' sed2.cpp
sed '2,5 d' sed2.cpp
sed -n '2,5 w output.txt' sed2.cpp
替換模式
以上是 sed 命令的常用匹配模式,但它還有一個強(qiáng)大的替換模式,意思就是查找替換其中的某些值,并輸出結(jié)果。使用替換模式很少使用 -n 參數(shù)。
?替換模式的參數(shù)有點多,但第一部分和第五部分都是可以省略的。替換后會將整個文本輸出出來。前半部分用來匹配一些范圍,而后半部分執(zhí)行替換的動作。
范圍
這個范圍和上面的范圍語法類似。看下面的例子。
/sys/,+3 選擇出現(xiàn)sys字樣的行,以及后面的三行。/\^sys/,/mem/ 選擇以sys開頭的行,和出現(xiàn)mem字樣行之間的數(shù)據(jù)。
具體命令為:
sed -n '/void/,+3 s/void/int/g' sed2.cpp
sed '/^void/,/CLIENT_TYPE_FLAG_BOTH/s/ImUser/User/g' sed2.cpp
命令
這里的命令是指s。也就是substitute的意思。
查找匹配
查找部分會找到要被替換的字符串。這部分可以接受純粹的字符串,也可以接受正則表達(dá)式。看下面的例子。
a 查找范圍行中的字符串 a
[a,b,c] 從范圍行里查找字符串a(chǎn)或者b或者c。
命令類似:?
sed 's/a/b/g' file
sed 's/[a,b,c]/<&>/g' file
替換
是時候把找出的字符串給替換掉了。本部分的內(nèi)容將替換查找匹配部分找到的內(nèi)容。
可惜的是,這部分不能使用正則。常用的就是精確替換。比如把a(bǔ)替換成b。
但也有高級功能。和java或者python的正則api類似,sed的替換同樣有 Matched Pattern 的含義,同樣可以得到Group,不深究。常用的替位符,就是 & 。
&號,再重復(fù)一遍。當(dāng)它用在替換字符串中的時候,代表的是原始的查找匹配數(shù)據(jù)。
[&] 表明將查找到的數(shù)據(jù)使用[]包圍起來。“&” 表明將查找的數(shù)據(jù)使用””包圍起來。
下面這條命令,將會把文件中的每一行,使用引號包圍起來
sed 's/.*/"&"/' file
flag 參數(shù)
這些參數(shù)可以單個使用,也可以使用多個,僅介紹最常用的。
g 默認(rèn)只匹配行中第一次出現(xiàn)的內(nèi)容,加上g,就可以全文替換了。常用。p 當(dāng)使用了 -n參數(shù), p
將僅輸出匹配行內(nèi)容。w 和上面的w模式類似,但是它僅僅輸出有變換的行。i 這個參數(shù)比較重要,表示忽略大小寫。e 表示將輸出的每一行,執(zhí)行一個命令。不建議使用,可以使用xargs配合完成這種功能。
看兩個命令的語法:
sed -n 's/a/b/gipw output.txt' file
sed 's/^/ls -la/e' file
更進(jìn)一步學(xué)習(xí):
https://github.com/BlackGold/Learn/blob/1ee76ca2a9bbbbfe04850a1ccc9b9658e1eb39de/Linux_man_cn/sed.md
1.9?awk 列處理
awk 同 sed 命令類似,只不過 sed 擅長取行, awk 命令擅長取列。
原理:一般是遍歷一個文件中的每一行,然后分別對文件的每一行進(jìn)行處理
用法:
awk [可選的命令行選項] 'BEGIN{命令 } pattern{ 命令 } END{ 命令 }' 文件名
?打印某幾列
$ echo 'I love you' | awk '{print $3 $2 $1}'
youloveI
我們將字符串 I love you 通過管道傳遞給awk命令,相當(dāng)于awk處理一個文件,該文件的內(nèi)容就是 I?love you ,默認(rèn)通過空格作為分隔符(不管列之間有多少個空格都將當(dāng)作一個空格處理) I love you 就分割成三列了。
假如分割符號為 . ,可以這樣用
$ echo '192.168.1.1' | awk -F "." '{print $2}'
168
條件過濾
我們知道awk的用法是這樣的,那么pattern部分怎么用呢?
awk [可選的命令行選項] 'BEGIN{命令 } pattern{ 命令 } END{ 命令 }' 文件名
$ cat score.txt
tom 60 60 60
kitty 90 95 87
jack 72 84 99
$ awk '$2>=90{print $0}' score.txt
kitty 90 95 87
????????$2>=90 表示如果當(dāng)前行的第2列的值大于90則處理當(dāng)前行,否則不處理。說白了pattern部分是用來從文件中篩選出需要處理的行進(jìn)行處理的,這部分是空的代表全部處理。
????????pattern部分可以是任何條件表達(dá)式的判斷結(jié)果,例如 >,<,==,>=,<=,!= 同時還可以使用 +,-,*,/ 運算與條件表達(dá)式相結(jié)合的復(fù)合表達(dá)式,邏輯 &&,||,! 同樣也可以使用進(jìn)來。另外pattern部分還可以使用 /正則/ 選擇需要處理的行。
判斷語句
判斷語句是寫在 pattern{ 命令 } 命令中的,他具備條件過濾一樣的作用,同時他也可以讓輸出更豐富
$ awk '{if($2>=90 )print $0}' score.txt
kitty 90 95 87
$ awk '{if($2>=90 )print $1,"優(yōu)秀"; else print $1,"良好"}' score.txt
tom 良好
kitty 優(yōu)秀
jack 良好
$ awk '{if($2>=90 )print $0,"優(yōu)秀"; else print $1,"良好"}' score.txt
tom 良好
kitty 90 95 87 優(yōu)秀
jack 良好
BEGIN 定義表頭
awk [可選的命令行選項] 'BEGIN{命令 } pattern{ 命令 } END{ 命令 }' 文件名
使用方法如下:
$ awk 'BEGIN{print "姓名 語文 數(shù)學(xué) 英語"}{printf "%-8s%-5d%-5d%-5d\n",$1,$2,$3,$4}'
score.txt
姓名 語文數(shù)學(xué)英語
tom 60 60 60
kitty 90 95 87
jack 72 84 99
END 添加結(jié)尾符
和BEGIN用法類似
$ echo ok | awk '{print $1}END{print "end"}'
ok
End
數(shù)據(jù)計算
$ awk 'BEGIN{print "姓名 語文 數(shù)學(xué) 英語 總成績"; \
sum1=0;sum2=0;sum3=0;sumall=0} \
{printf "%5s%5d%5d%5d%5d\n",$1,$2,$3,$4,$2+$3+$4;\
sum1+=$2;sum2+=$3;sum3+=$4;sumall+=$2+$3+$4}\
END{printf "%5s%5d%5d%5d%5d\n","總成績",sum1,sum2,sum3,sumall}'\
score.txt
姓名 語文 數(shù)學(xué) 英語 總成績
tom 60 60 60 180
kitty 90 95 87 272
jack 72 84 99 255
總成績 222 239 246 707
因為命令太長,末尾用 \ 符號換行。
BEGIN體里輸出表頭,并給四個變量初始化0
pattern體里輸出每一行,并累加運算
END體里輸出總統(tǒng)計結(jié)果
當(dāng)然了,一個正常人在用linux命令的時候是不會輸入那么多格式化符號來對齊的,所以新命令又來了 column -t (鬼知道我為什么會記得這么多亂七八糟的命令。)
范例:網(wǎng)絡(luò)狀態(tài)統(tǒng)計
????????本小節(jié),采用awk統(tǒng)計netstat命令的一些網(wǎng)絡(luò)狀態(tài),來看一下awk語言的基本要素。netstat的輸出類似于:
?其中,第6列,標(biāo)明了網(wǎng)絡(luò)連接所處于的網(wǎng)絡(luò)狀態(tài)。我們先給出awk命令,看一下統(tǒng)計結(jié)果。
netstat -ant | awk ' \ BEGIN{print "State","Count" } \ /^tcp/ \ { rt[$6]++ } \ END{ for(i in rt){print i,rt[i]} }'netstat -ant | awk ' \ BEGIN{print "State","Count" } \ /^tcp/ \ { if($4=="0.0.0.0:3306" ) rt[$6]++ } \ END{ for(i in rt){print i,rt[i]} }'輸出結(jié)果為:
State Count
LAST_ACK 1
LISTEN 64
CLOSE_WAIT 43
ESTABLISHED 719
SYN_SENT 5
TIME_WAIT 146
下面這張圖會配合以上命令詳細(xì)說明,希望你能了解awk的精髓。
awk和我們通常的程序不太一樣,它分為四個部分。
1、BEGIN 開頭部分,可選的。用來設(shè)置一些參數(shù),輸出一些表頭,定義一些變量等。上面的命令僅打
印了一行信息而已。
2、END 結(jié)尾部分,可選的。用來計算一些匯總邏輯,或者輸出這些內(nèi)容。上面的命令,使用簡單的for
循環(huán),輸出了數(shù)組rt中的內(nèi)容。
3、Pattern 匹配部分,依然可選。用來匹配一些需要處理的行。上面的命令,只匹配tcp開頭的行,其
他的不進(jìn)入處理。
4、Action 模塊。主要邏輯體,按行處理,統(tǒng)計打印,都可以。
注意點
1、awk的主程序部分使用單引號‘包圍,而不能是雙引號
2、awk的列開始的index是0,而不是1
更進(jìn)一步學(xué)習(xí):
https://github.com/BlackGold/Learn/blob/1ee76ca2a9bbbbfe04850a1ccc9b9658e1eb39de/Linux_man_cn/awk.md
總結(jié)
以上是生活随笔為你收集整理的Linux系统运行时参数命令--Linux基础命令和工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 河北科技大学电子商务L122班级介绍
- 下一篇: linux hd4000显卡驱动,lin