Linux與命令列基礎

$ cat ips.txt
10.0.0.5
10.0.0.9
10.0.0.9
10.0.0.5
10.0.0.2
10.0.0.5
$ sort ips.txt | uniq -c | sort -nr | head -n 1

選項中省略行首的空白。在上面的操作中,最後的管線輸出的行是下列何者?

  1. A1 10.0.0.2
  2. B2 10.0.0.9
  3. C3 10.0.0.5
查看答案與解析

正確答案:C. 3 10.0.0.5

先用 sort 排序讓相同的行相鄰,再用 uniq -c 把相鄰的相同行合併成一行並加上次數,得到 3 10.0.0.5、2 10.0.0.9、1 10.0.0.2 三行。sort -nr 依開頭的數字由大到小排序,head -n 1 取出第一行,所以輸出為 3 10.0.0.5。uniq 只會合併「相鄰」的相同行,因此事先 sort 是不可或缺的。這種管線是從日誌中統計存取次數最多的 IP 位址或最常出現的錯誤的經典寫法。

  • A. 最後的 sort 若沒有 -r,就會由小到大排序,第一行成為 1 10.0.0.2。-r 是由大到小排序的選項。
  • B. 這是省略第一個 sort、只用 uniq -c 計數時的結果。uniq 只合併相鄰的行,所以只有連續兩行的 10.0.0.9 被算成2。
  • C. 正確。10.0.0.5 出現3次,最多。
練習這個領域 前往領域頁面

Linux與命令列基礎的其他題目

  1. 想讓之後附加到伺服器日誌檔 /var/log/app.log 的行,在每次附加時持續顯示在畫面上。適當的指令是下列何者?
  2. 上面這個從逗號分隔的行取出欄位的指令,其輸出是下列何者?
  3. 上面這個取代字元的 sed 指令,其輸出是下列何者?
  4. 在上面的操作中,最後的 awk 輸出的內容是下列何者?
  5. 以 GNU 的 find 執行 find /data -name "*.log" -mtime +7 -size +100M 時,找到的檔案是下列何者?