# Core utilities (正體中文)

翻譯狀態： 本文章是 Core_Utilities 的翻譯版本。最近一次的翻譯時間：2014-01-20。點擊本連結查看英文頁面之後的變更。

相關文章

- Bash (英)
- Zsh (英)
- 一般建議
- GNU 專案 (英)

本文章涉及 GNU/Linux 系統上所謂的「核心」工具，例如 less ，ls 和 grep ，本文聚焦 (但不限於) 在 GNU coreutils 軟體包的工具集，並提供各種關於這些工具的建議、技巧與資訊。

## cat

cat (catenate；連接) 是一個連接並顯示文件的標準 Unix 工具。

- cat 並非內建於 shell，在多數場合下 (腳本或考慮效能)，使用重新導向會更加方便。事實上 `< file` 的效果如同 `cat file` 。

- 按照以下結構可直接在某檔案添加多行文字：

    $ cat << EOF >> path/file
    第一行
    ...
    最後一行
    EOF

- 若您需要以倒反順序顯示檔案，有個工具叫 tac (cat 倒轉過來)。

## cron

cron 是一個類 Unix 作業系統下按表操課的工作排程程式。

參閱本文。

註記: systemd 也有辦法做到不少 cron 的功能。參閱相關文章。

## grep

grep (來自 ed 的 g/re/p, global/regular expression/print (全域、正規表達式、列出)) 是一個最初為 Unix 所寫的命令列文字搜尋工具。grep 指令在檔案或標準輸入內搜尋符合給定正規表達式的行，並將結果列在標準輸出。

- 記得 grep 可以處理檔案，所以 `cat file | grep pattern` 這種架構可以更換成 `grep pattern file`

- 若要抓取 VCS 原始碼，有個以 Perl 寫成的優化工具叫 ack。參閱官方網站。

### 彩色輸出

grep 的彩色輸出除了美觀以外，也十分有助於學習 regexp (正規表達式) 和 grep 功能。

將以下內容寫入您的 shell 設定檔，使用 grep 的預設顏色。以 Bash 為例：

    ~/.bashrc

    alias grep='grep --color=auto'

或者設定 `GREP_OPTIONS` 環境變數，但請留意，這可能會讓某些使用 grep 的腳本無法運作 [1]：

    export GREP_OPTIONS='--color=auto'

加上 `-n` 在輸出標註檔案行號：

    alias grep='grep -n --color=auto'

環境變數 `GREP_COLORS` 可用來指定預設值以外的不同顏色。

## iconv

`iconv` 可將字元編碼轉換成另一種字元集。

以下指令將檔案 `foo` 從 ISO-8859-15 轉換到 UTF-8，並將結果儲存在 `foo.utf`：

    $ iconv -f ISO-8859-15 -t UTF-8 foo >foo.utf

更多資訊請參閱 `man iconv` 。

## ip

ip 可用來顯示 Linux IP 軟體堆疊內物件的相關資訊，如網路裝置、IP 位址、路由表等。各種附帶指令可以操作、設定這些物件。

物件 | 目的 | man 頁面
--- | --- | ---
ip addr | 連接埠位址管理 | ip-address
ip addrlabel | 連接埠位址標籤管理 | ip-addrlabel
ip l2tp | Tunnel Ethernet over IP (L2TPv3) | ip-l2tp
ip link | 網路裝置設定 | ip-link
ip maddr | 多點傳送位址管理 | ip-maddress
ip monitor | 監看 netlink 訊息 | ip-monitor
ip mroute | 多點傳送路由快取管理 | ip-mroute
ip mrule | 多點傳送路由政策資料庫內的規則
ip neigh | 鄰居/ARP 表管理 | ip-neighbour
ip netns | 程序網路命名空間管理 | ip-netns
ip ntable | 鄰居表設定 | ip-ntable
ip route | 路由表管理 | ip-route
ip rule | 路由政策資料庫管理 | ip-rule
ip tcp_metrics | 管理 TCP Metrics | ip-tcp_metrics
ip tunnel | 隧道設定 | ip-tunnel
ip tuntap | 管理 TUN/TAP 裝置
ip xfrm | 管理 IPSec 政策 | ip-xfrm

help 指令對所有物件有效。舉例來說，輸入 `ip addr help` 將顯示針對位址物件使用的指令語法。

網路設定文章顯示在各種常見情境下如何在實際使用 ip 指令。

註記: 您或許比較熟知的是 ifconfig 指令，在舊版本的 Linux 上它被用來做介面設定。現在該指令不宜在 Arch Linux 上使用，您應該改使用 ip 。

## less

less 是個終端機分頁程式，可一次一頁的檢視文字檔內容。比起其他的分頁程式如 more、pg，less 提供更完善的介面與功能集。

### 透過環境變數幫輸出上色

將以下內容加入您的 shell 設定檔：

    ~/.bashrc

    export LESS=-R
    export LESS_TERMCAP_me=$(printf '\e[0m')
    export LESS_TERMCAP_se=$(printf '\e[0m')
    export LESS_TERMCAP_ue=$(printf '\e[0m')
    export LESS_TERMCAP_mb=$(printf '\e[1;32m')
    export LESS_TERMCAP_md=$(printf '\e[1;34m')
    export LESS_TERMCAP_us=$(printf '\e[1;32m')
    export LESS_TERMCAP_so=$(printf '\e[1;44;1m')

依照喜好更改上面的數值。請參考：ANSI 控制碼。

### 透過程式幫輸出上色

您可以在 less 啟用語法上色。首先安裝 source-highlight，接著在您的 shell 設定檔加入以下內容：

    ~/.bashrc

    export LESSOPEN="| /usr/bin/source-highlight-esc.sh %s"
    export LESS='-R '

經常在命令列介面工作的使用者可以安裝 lesspipe。

使用者可以使用分頁程式列舉壓縮檔內的檔案：

    $ less compressed_file.tar.gz

    ==> use tar_file:contained_file to view a file in the archive
    -rw------- username/group  695 2008-01-04 19:24 compressed_file/content1
    -rw------- username/group   43 2007-11-07 11:17 compressed_file/content2
    compressed_file.tar.gz (END)

lesspipe 也提供 less 與檔案互動的能力，讓它不僅可以作文檔檢視，還能夠當作該檔案類型的替代關聯指令使用 (比如說取代 html2text[broken link: replaced by python-html2text] 以檢視 HTML)。

安裝 lesspipe 之後，需重新登入才能啟用，或是執行

    source /etc/profile.d/lesspipe.sh

### 用 Vim 代替

Vim (visual editor improved) 有個腳本可以檢視文字檔、壓縮檔、二進位檔、目錄的內容。將以下內容加入您的 shell 設定檔，將它設定為分頁程式：

    ~/.bashrc

    alias less='/usr/share/vim/vim74/macros/less.sh'

除了 less.sh 巨集以外還有一種作法，它依靠 `PAGER` 環境變數。安裝 vimpager-gitAUR 並將以下內容加入您的 shell 設定檔：

    ~/.bashrc

    export PAGER='vimpager'
    alias less=$PAGER

所有使用 `PAGER` 環境變數的程式 (如 git ) 將以 vim 作為它們的分頁程式。

## locate

locate 可用來搜尋檔案系統上的檔案。它會從預先建立的檔案資料庫搜尋，該資料庫由 updatedb 或 daemon 產生，並使用遞增編碼 (incremental encoding) 壓縮。它的操作速度遠快於 find，但平常需要更新維護資料庫。

請參閱本文。

## ls

ls (list；列舉) 是 Unix、類 Unix 作業系統上列舉檔案的指令。

- ls 可以列舉檔案權限。

- 用簡單的別名來啟用彩色輸出。從 `/etc/skel/.bashrc` 複製過來的 `~/.bashrc` 應已出現以下的內容：

  `alias ls='ls --color=auto'`
  下一步是讓 ls 的彩色輸出更加完整；例如，不正確的 (孤兒) 軟連結將以紅色表示。將以下內容加入您的 shell 設定檔：
  `eval $(dircolors -b)`

## man

man (manual page；手冊頁) 是線上軟體文件的一種格式，常見於 Unix 或類 Unix 作業系統。涵蓋的主題包括電腦程式 (包含函式庫和系統呼叫)，正規標準和慣例，甚至還有抽象概念。請參閱手冊頁。

## mkdir

mkdir (make directory；建立目錄) 是建立目錄的指令。

- 要建立一個目錄與其樹狀架構，需要加上 `-p`，若否則出現錯誤。通常使用者都知道自己在做什麼，`-p` 可以設為預設值。

      alias mkdir='mkdir -p -v'

  `-v` 可以顯示詳盡資訊。

- 不需要先建立目錄再使用 chmod 更改權限模式，用 `-m` 選項可直接定義新建目錄的存取權限。

提示: 若您要建立一個暫存目錄，比較好的替代指令為 mktemp (make termporary；建立暫存): `mktemp -p`。

## mv

mv (move；移動) 是移動、重新命名檔案與目錄的指令。這個指令有潛在危險，謹慎的作法是限縮它的作用：

    alias mv=' timeout 8 mv -iv'

這個別名在 mv 運行超過 8 秒後停止、當刪除三個以上檔案時要求確認、列舉操作過程，且若 shell 的歷史記錄設定為忽略以空格開頭的指令時，不記錄該指令到 shell 的歷史記錄檔案。

## rm

rm (remove；移除) 是刪除檔案與目錄的指令。

- 這個指令有潛在危險，謹慎的作法是限縮它的作用：

      alias rm=' timeout 3 rm -Iv --one-file-system'

  這個別名在 rm 運行超過 3 秒後停止、當刪除三個以上檔案時要求確認、列舉操作過程、不涉及超過一個檔案系統，且若 shell 的歷史記錄設定為忽略以空格開頭的指令時，不記錄該指令到 shell 的歷史記錄檔案。若您希望一次確認一個檔案，將 `-I` 替換為 `-i`。
  Zsh 的使用者可在 `timeout` 前加上 `noglob`，避免隱性的語法擴大解釋。

- 若要移除空目錄，使用 rmdir；若目標內含有檔案，該指令會失敗。

## sed

sed (stream editor；串流編輯器) 是解析並轉換文字的 Unix 工具。

這裡有份 sed 一行範例的清單。

提示: 功能更為強大的替代品有 AWK 和 Perl 語言。

## seq

seq (sequence；數字序列) 是用來產生連續數字序列的工具。Shell 有內建的替代品，可以像維基百科所解釋的方法來使用它們。

## shred

shred 是安全刪除檔案與目錄的指令。這個指令有潛在危險，謹慎的作法是限縮它的作用：

    alias shred=' timeout 3 shred -v'

這個別名在 shred 運行超過 3 秒後停止、列舉操作過程，且若 shell 的歷史記錄設定為忽略以空格開頭的指令時，不記錄該指令到 shell 的歷史記錄檔案。

Zsh 的使用者可在 `timeout` 前加上 `noglob`，避免隱性的語法擴大解釋。

## sudo

Sudo (as superuser do；以超級使用者身分做...) 在類 Unix 作業系統下，用來允許使用者以其他使用者 (通常為超級使用者或 root) 的安全性權限執行程式。參閱 Sudo。

## 權限相關工具

- chmod (change mode；更改模式) 是一個 Unix shell 指令和一個系統呼叫 (system call) 的名稱。這兩者都用來更改檔案系統物件 (包含檔案與目錄) 的存取權限，以及特定的特殊標籤。

- chown (change owner；更改使用者) 在類 Unix 系統下用來更改檔案的擁有者。

- chattr (change attributes；更改屬性) 是 Linux 作業系統下的指令，讓使用者為多種 Linux 檔案系統下的檔案設定特定屬性。

- lsattr (list attributes；列舉屬性) 是命令列程式，用來列舉 Linux 延伸檔案系統的屬性。

- `ls -l` 列舉檔案屬性。

這些工具的說明請參閱檔案權限與屬性一文。更進階的權限操作可參考 capabilities 和 ACL。

## 另請參閱

- A sampling of coreutils , part 2 , part 3 - coreutils 的指令簡介

Categories:

- 正體中文
- System administration (正體中文)
- Command shells (正體中文)

Hidden category:

- Pages with broken package links