# Core utilities (正體中文)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
翻譯狀態：本文章是 Core_Utilities 的翻譯版本。最近一次的翻譯時間：2014-01-20。點擊本連結查看英文頁面之後的變更。

The translation of this article or section does not reflect the original text.

Reason: Last updated in 2014 (294107), out of sync with English page (Discuss in Talk:Core utilities (正體中文)#)

相關文章

- 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

更多資訊請參閱 iconv(1) 。

## 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 與檔案互動的能力，讓它不僅可以作文檔檢視，還能夠當作該檔案類型的替代關聯指令使用 (比如說取代 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-line shells (正體中文)

Hidden category:

- Pages or sections flagged with Template:Bad translation