1. 程式人生 > 其它 >【Linux】【專項突破】Linux重定向與管道

【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(僅限技術交流,新增請說明方向)| 歡迎關注我的嗶哩嗶哩