Core utilities (正體中文)

From ArchWiki
Jump to: navigation, search
翻譯狀態: 本文章是 Core_Utilities 的翻譯版本。最近一次的翻譯時間:2014-01-20。點擊本連結查看英文頁面之後的變更。

本文章涉及 GNU/Linux 系統上所謂的「核心」工具,例如 lesslsgrep ,本文聚焦 (但不限於) 在 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 (來自 edg/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 是個終端機分頁程式,可一次一頁的檢視文字檔內容。比起其他的分頁程式如 morepgless 提供更完善的介面與功能集

透過環境變數幫輸出上色

將以下內容加入您的 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 作業系統上列舉檔案的指令。

  • 用簡單的別名來啟用彩色輸出。從 /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 一行範例的清單

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

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 列舉檔案屬性。

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

另請參閱