【Linux】【專項突破】Linux重定向與管道
【專項突破】Linux重定向與管道
This article is written by Xrilang(Chinese Name:萌狼藍天)
If you want find me ,You can contact me in BiliBili . My Bilibili name is 萌狼藍天
Of course, you can also add my QQ(My QQ number is: 3447902411)
(Please note that your sole purpose of adding me is limited to technical exchange. I won't help you with your homework!)
萌狼藍天 - 部落格園 | 萌狼工作室 - 萌狼藍天 (mllt.cc) | 萌狼藍天の技術棧 | Welcome !
輸入輸出重定向
標準輸入重定向(STDIN,檔案描述符為0):預設從鍵盤輸入,也可以從其他檔案或命令中輸入
標準輸出重定向(STDOUT,檔案描述符為1):預設輸出到螢幕
錯誤輸出重定向(STDERR,檔案描述符2):預設輸出到螢幕
檔案描述符是一個非負整數,用於指代被開啟的檔案,所有與檔案讀寫相關的系統呼叫都是通過檔案描述符呼叫起來的。
符號 | 作用 | 備註 |
---|---|---|
命令 > 檔案 | 標準輸出重定向到一個檔案中(會清空原有檔案資料) | 命令 1> 檔案 |
命令 2> 檔案 | 錯誤輸入重定向到一個檔案中(會清空原有檔案資料) | |
命令 >> 檔案 | 標準輸出重定向到一個檔案中(會追加到原有檔案資料後) | 命令 1>> 檔案 |
命令 2>> 檔案 | 錯誤輸出重定向到一個檔案中(會追加到原有檔案資料後) | |
命令 >> 檔案 2>&1 | ||
命令 &>> 檔案 |
標準輸入錯誤重定向到回收站:命令 2>/dev/null
簡單過濾命令
檢視 head、more、tail
命令:head、more、tail
head -行數 檔名(順序) more 檔名 tail -行數 檔名(倒序)
例子:使用翻頁形式檢視 /etc目錄中的檔案列表及屬性資訊
ls /etc -l | more
替換 tr
命令:tr
tr 原始字元 目標字元
提取 cut
命令:cut
cut 引數 文字
用“列”提取文字字元
按列搜尋,要用-f 引數設定需要檢視的列數,-d設定間隔符號
cut -f(列) -d(分隔文字或符號)(檔名)
排序 sort
命令:sort
sort 檔名
sort [-bcdfimMnr][-o<輸出檔案>][-t<分隔字元>][+<起始欄位>-<結束欄位>][--help][--verison][檔案][-k field1[,field2]]
- -b 忽略每行前面開始出的空格字元。
- -c 檢查檔案是否已經按照順序排序。
- -d 排序時,處理英文字母、數字及空格字元外,忽略其他的字元。
- -f 排序時,將小寫字母視為大寫字母。
- -i 排序時,除了040至176之間的ASCII字元外,忽略其他的字元。
- -m 將幾個排序好的檔案進行合併。
- -M 將前面3個字母依照月份的縮寫進行排序。
- -n 依照數值的大小排序。
- -u 意味著是唯一的(unique),輸出的結果是去完重了的。
- -o<輸出檔案> 將排序後的結果存入指定的檔案。
- -r 以相反的順序來排序。
- -t<分隔字元> 指定排序時所用的欄位分隔字元。
- +<起始欄位>-<結束欄位> 以指定的欄位來排序,範圍由起始欄位到結束欄位的前一欄位。
- --help 顯示幫助。
- --version 顯示版本資訊。
- [-k field1[,field2]] 按指定的列進行排序。
去重 uniq
命令:uniq
作用:檢查文字檔案中重複出現的行列。一般和sort搭配使用,消除連續重複的行。
sort 檔名 | unqi
# 顯示重複次數:-c或--count 在每列旁邊顯示該行重複出現的次數。
sort 檔名 | unqi -c
# -u或--unique 僅顯示出一次的行列。
sort 檔名 | unqi -u
# 在檔案中找出重複的行:-d或--repeated 僅顯示重複出現的行列。
sort 檔名 | unqi -d
計數 wc
在預設的情況下,wc將計算指定檔案的行數、字數,以及位元組數。
$ wc testfile # testfile檔案的統計資訊
3 92 598 testfile # testfile檔案的行數為3、單詞數92、位元組數598
如果想同時統計多個檔案的資訊,例如同時統計testfile、testfile_1、testfile_2
$ wc testfile testfile_1 testfile_2 #統計三個檔案的資訊
3 92 598 testfile #第一個檔案行數為3、單詞數92、位元組數598
9 18 78 testfile_1 #第二個檔案的行數為9、單詞數18、位元組數78
3 6 32 testfile_2 #第三個檔案的行數為3、單詞數6、位元組數32
15 116 708 總用量 #三個檔案總共的行數為15、單詞數116、位元組數708
含參例項
# 檢視有多少個使用者
cat /etc/passwd | wc -l
wc -l < /etc/passwd
引數 :
- -c或--bytes或--chars 只顯示Bytes數。
- -l或--lines 顯示行數。
- -w或--words 只顯示字數。
- --help 線上幫助。
- --version 顯示版本資訊。
例項
管道命令符
查詢 grep
命令:grep
作用:在文字內容中查找出指定文字行並標紅
例子:查詢當前系統不允許登陸系統的使用者資訊
grep -n /sbin/nologin /etc/passwd
例子:查詢檔案中包含關鍵字詞的內容
grep -n 關鍵字詞 檔名
例子:查詢檔案中不包含關鍵字詞的內容
grep -v 關鍵字詞 檔名
例子:檢視當前被限制登陸系統的使用者數
grep /sbin/nologin /etc/passwd | wc -l
補充內容
access.log
序號 | 欄位 |
---|---|
1 | 遠端主機IP |
2 | 遠端使用者標識(已廢棄) |
3 | 遠端使用者名稱 |
4 | 請求時間 |
5 | 請求第一行(典型格式:請求方法/訪問資源協議) |
6 | 狀態程式碼(顯示客戶端的請求是否成功) |
7 | 傳送位元組數(伺服器傳送給客戶端的總位元組數) |
8 | 請求來源 |
9 | 客戶端瀏覽器識別資訊 |
例子:統計出所有來訪客戶端的數目
(1)查詢遠端主機IP(cat
access.log
|
cut
-f1
-d ' '
)
(2)並排序去重(sort
|
uniq
)
(3)統計出所有來訪客戶端的數目(wc
-l
)
cat access.log | cut -f1 -d ' ' | sort | uniq | wc -l
# 檢視檔案 | 提取出第一列,分隔符為‘ ’| 排序 | 去重 | 顯示輸出 數目
例子:檢視日誌中出現次數排名前五的客戶端IP,並將IP儲存到名為clients.txt中
cat access.log | cut -f1 -d ' ' | sort | uniq -c | sort -nr | head -5 > clients.txt
例子:檢視指定檔案(FileName)再指定日期(VisitDate)訪問的次數
cat access.log | grep 'VisitDate' | grep 'FileName' | wc -l
# grep 'FileName' access.log | grep 'VisitDate'
練習
練習題:grep
1.查詢 /etc/passwd 中允許登陸的使用者資訊
# 查詢檔案中不包含關鍵字詞的內容:grep -v 關鍵字詞 檔名
grep -v /sbin/nologin /etc/passwd
2.查詢 /etc/group中wheel組的使用者資訊
grep wheel /etc/group
3.統計 /etc/passwd 中允許登陸的使用者數
grep -v /sbin/nologin /etc/passwd | wc -l
4.檢視 /dev 檔案中的詳細資訊,並使用翻頁功能
ls /dev -l | more
ls -l /dev | more
ll /dev | more
5.利用管道和passwd --stdin 修改使用者密碼
echo '密碼' | passwd --sdtin 使用者名稱
【 If you want to reprint this article, please quote the link instead of copying my content and republishing it. 】
作者:萌狼藍天,轉載請註明原文連結:https://www.cnblogs.com/mllt/p/inux20200307.html | 萌狼藍天@嗶哩嗶哩 | QQ:3447902411(僅限技術交流,新增請說明方向)| 歡迎關注我的嗶哩嗶哩