Linux命令強基

  Hello,一隻愛學習的魚

  本期帶來linux命令強基,對於ls/pwd/chmod等基礎命令,操作簡單就略過,下面是我在學習linux命令匯總,命令在Ubuntu 20.4 lts虛擬機中可執行。

  概述

  1. grep/awk/sed

  2. ps/top

  1. grep/awk/sed

  grep/awk/sed 可以對應 查找/分段/修改

  在講解命令時,我會以選項+命令+說明形式呈現

  grep使用方法:[options] pattern file

	-An	grep -A2 var abc.txt	顯示var一行及其後兩行
	-Cn	grep -C2 var abc.txt/grep -2 var abc.txt	顯示var一行及其前後兩行
	-Bn	grep -B2 var abc.txt	顯示var一行及其前兩行	 
	-c	grep -c var abc.txt		var在abc.txt中出現的次數
	-o	grep -o var abc.txt		只查找var並單行輸出
	-E 	grep -E 'var|bin' abc.txt	使用擴展正則表達式,在abc.txt文件中匹配var或bin,相當於執行egrep
	-z	grep -o var -z abc.tar	先解包再搜索
	-v	grep -v var abc.txt		反向搜索
	-R	grep var -R --exclude='text.txt'	在當前目錄下遞歸查詢除text.txt的文件,內容含var
	--exclude
	--include	grep var --include='abc.txt'		在當前目錄下查詢abc.txt文件,內容含var
	-L	grep var -R -L	僅列印除含var文件的文件
	-l(小寫l)	grep var -R -l	僅列印含var文件的文件
	-I(大寫i)	grep var -RI 	忽略二進位
	-mn	grep var -R -n -m2	僅顯示前2個結果
	-b	grep -b var abc.txt		顯示var第一個字元在文件中的編號
	-r	grep -r var /home/zhao -l	遞歸查詢/home/zhao下含var的文件
	-i	grep -i "v" abc.txt		忽略大小寫

 

  awk使用方法:[options] ‘pattern{action}’ file

 

	$0(內建變數)	完整的輸入記錄
	$n(內建變數) 	當前記錄的第n個欄位,欄位右FS分隔,第一個FS前是$1
	FS(內建變數)	欄位分隔符,默認是任意空格
	RS(內建變數)	記錄分隔符,默認是一個換行符
	-F	awk -F '/' '{print $1,$2}' abc.txt		文件abc.txt中每行以字元/分隔,輸出第一,第二欄位(若要分隔符為\,則選項為 -F\\)
		awk -F'[/:]' '{print $1,$2}' abc.txt	多分隔符,文件abc.txt中每行以字元/或字元:分隔,輸出第一,第二欄位
	-v	awk -va=1 '{print $1, $(1+a)}' abc.txt		定義一個變數a=1
	==	awk '$1 == "bin" {print $1, $2}' abc.txt		過濾第一列等於bin的行,輸出第一欄位和第二欄位	
	BEGIN		初始化程式碼塊,在對每一行進行處理之前,初始化程式碼,主要是引用全局變數,設置FS分隔符
	FILENAME	當前文件名
	FNR	各文件分別計數的行號
	FS	欄位分隔符(默認是任何空格)
	NF	一條記錄的欄位的數目,最後一個變數
	NR	已經讀出的記錄數,就是行號,從1開始
	OFS	輸出欄位分隔符,默認值與輸入欄位分隔符一致。
	ORS	輸出記錄分隔符(默認值是一個換行符)
	ARGC	命令行參數的數目
		awk 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";\
            >printf "---------------------------------------------\n"}\
            >{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}' abc.txt // awk '$1 ~ /re/ {print $2, $3}' abc.txt    awk精準查詢,空格作為分隔符,第一個變數是re IGNORECASE awk 'BEGIN{IGNORECASE=1} /this/' abc.txt 忽略大小寫 ! awk '$2 !~ /th/ {print $2,$4}' log.txt 模式取反 -f awk -f cal.awk score.txt    執行cal.awk腳本,查找score.txt

 

  sed [options] ‘command’ file(s)

	-e	sed -e 4a\newLine abc.txt 		以選項中指定的script來處理輸入的文本文件。
	d	sed '2,5d'	 abc.txt		將 abc.txt 的內容列出並且列印行號,同時,請將第 2~5 行刪除!
	a	sed '2a hhhhhhh' abc.txt 		在文件abc.txt第二行後,亦即第三行加上hhhhhhh
	i	sed '2i hhhhhhh' abc.txt	在文件abc.txt第二行前,亦即第二行加上hhhhhhh
	c	sed '1,5c adfafsf' abc.txt	將文件1-5行的內容取代為adfafsf
	p	sed '1,5p' abc.txt		列出文件1-5行
	/p	sed '/var/p' abc.txt		搜索文件中關鍵字var的行
	-n	sed -n '/bin/p' abc.txt		僅顯示包含bin的行
	/d	sed '/bin/d' abc.txt		搜索並刪除
	/s	sed -n '/bin/{s/bin/sbin/;p;q}' abc.txt		搜索bin,並將bin替換成sbin
	s///g	sed 's/^.*var://g' abc.txt	搜索var並替換為空
	-e	sed - e '3,/4d' -e 's/bin/blue/g' abc.txt 		多點編輯,刪除第三行,包括第三行後的內容,將剩餘的,bin替換為blue
	-i 	sed -i 's/\.$/\!/g' abc.txt	每一行以.結尾則轉!,直接修改源文件
		sed -i '$a This is a test' abc.txt	$代表最後一行,文件最後新增This is a test
	

  2. ps/top

  ps:report a snapshot of the current processes.將當前進程做一個「快照」並顯示

 

  使用方法:ps目前有三個選項UNIX\BSD\GNU

 

  ps axu【不建議使用ps -aux,因為它混淆了兩個不同的標準,官方文檔里有說明】

 

  ps -ef  可以結合grep選擇性查看某個進程資訊

  top:display Linux processes.顯示linux進程

 

  動態顯示,類似Win下的任務管理器。介面可以輸入交互命令,非常強大

 

  按f鍵,然後可以選擇要顯示的欄位

 

  按c鍵,查看完整的命令欄位COMMAND

  按s鍵,設置介面刷新時間,默認3s

 

  等等欄位意思,文檔也有說明,非常詳細

  ps和top命令,我在分享資料里有解說。其中top文檔雖然基本上全是英文,但是它裡面的交互命令占篇幅53%左右,不用慌

  關注我的公眾號(一隻愛學習的鯉魚)

        

  回復:1226。即可獲取「1226linux命令強基」的分享資料

         

  最後,你的關注是我更新的最大動力,我們下期再見。

 

Tags: