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