iT邦幫忙

2022 iThome 鐵人賽

DAY 18
2

除了昨天我們提到的 >>>&> 等導向方式之外,還有一個導向的方式: |

簡單的說,| 會將前面指令的標準輸出,導向到後面一個指令的標準輸入裡面。

說到這邊,有些讀者可能會很好奇:這個指令看起來跟其他的導向方式差不多,為什麼要將 | 這個指令單獨的提出來討論呢?

這邊先賣個關子,我們來實際體會看看。

ls -al | less

我們可以發現,畫面看起來不再像是一般的 ls -al 所產生的畫面,更像是用 less 看到的文件內容。

這在檔案非常多時,會很實用

ls -al /usr/bin | less

搭配這個方式,如果我想要對輸入排序,可以用 sort

NAME
       sort - sort lines of text files

用法如下

ls -al /usr/bin | sort

如果我想要搜尋某個字串,可以用 grep

NAME
       grep, egrep, fgrep - print lines matching a pattern

用法如下

ls -al /usr/bin | grep base
-rwxr-xr-x  1 root root       37248 Jan 23  2020 base64
-rwxr-xr-x  1 root root       28920 Jan 23  2020 basename
-rwxr-xr-x  1 root root       54088 Jul 27  2018 update-mime-database

如果我想要計算行數,可以用 wc

NAME
       wc - print newline, word, and byte counts for each file

用法如下

ls -al /usr/bin | wc -l
946

如果我想看搜尋後結果的行數,可以這樣用

ls -al /usr/bin| grep base | wc -l
3

說了這麼多用法之後,這邊可以提到一個 linux 設計的觀念。

在前面的範例中,相信各位可以感覺到,其實 linux 這個作業系統,提供的東西是解決問題的工具。像是 wcgrep⋯⋯功能都非常的單純。

但是,透過指令之間的串連,我們可以自由的解決我們遇到的問題。

比方說:

  • 今天網站出現問題,我想快速地找出在網站 access log 內,有包含了代表連線失敗的 404 這個字串的紀錄筆數。
  • 今天用戶回報問題,我想快速的在 access log 內找出這個用戶進入網站的時間,以及這個時間前後網站發生的問題紀錄。
  • 網站疑似被駭客入侵,我想快速的搜尋某個 ip 存取網站的紀錄,並且輸出到另一個文字檔案內,以便後續分析。

這類需求千變萬化,雖然有一些視窗化的工具可以協助你做到這些事情,但是遇到某些工具不支援的狀況,你還是可以透過指令,組合出你想到的解法。

今天有關 | 的用法就先介紹到這邊,各位明天見!


上一篇
Day 17:談資料的輸入輸出:>、>>、&>
下一篇
Day 19:指令列的各種快捷鍵
系列文
林姓商人與指令操作的秘密—談 Linux command line interface30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言