基礎(chǔ)
? ? 1. 學(xué)習(xí)基礎(chǔ)的bash用法私植,具體地說褂萧,閱讀bash的man手冊(man bash 并通讀一遍)森逮;很簡單而且不長。其他的shell也同樣可以拆挥,不過bash 是最通用的。
? ? ? 2. 至少學(xué)習(xí)一種文本編輯器脯厨。最好是 vim (vi)驱负, 在終端隨機(jī)編輯文檔方面通用性最強(qiáng)。
? ? ? 3.知道怎樣通過 man 來閱讀文檔(列出不同章節(jié)號片橡,如:1表示普通的shell命令妈经, 5表示文件格式和規(guī)范, 8 代表系統(tǒng)管理命令等)。有些bash 內(nèi)置命令呢吹泡,可以使用 help 或者 help -d 來獲取幫助(例如 cd)骤星。
? ? ? 4.學(xué)會使用 > 和 < 來重定向輸入輸出,學(xué)會使用 | 來建立管道爆哑。了解 > 用于覆蓋輸出文件洞难, >> 用戶追加到輸出文件。 學(xué)習(xí)標(biāo)準(zhǔn)輸出 stdout 和 標(biāo)準(zhǔn)錯(cuò)誤 stderr揭朝。
? ? ? 5.學(xué)習(xí)文件通配符 * (可能還有 ? 和 {…})和引用队贱,明白雙引號和單引號的區(qū)別。
? ? 6.熟練掌握 bash 的任務(wù)管理器: &潭袱、ctrl-z柱嫌、ctrl-c、jobs敌卓、fg慎式、bg、kill 等等趟径。
? ? 7.熟悉 ssh, 并且知道如何通過 ssh-agent瘪吏, ssh-add等實(shí)現(xiàn)無密碼認(rèn)證。
? ? 8.基本的文件管理命令: ls 和 ls -l (特別地蜗巧, 你得知道ls -l 結(jié)果中的每一列是什么意思)掌眠,less, head, tail 和 tail -f(最好也弄清楚 less +F 是嘛意思), ln 和 ln -s (了解硬鏈接和軟連接的區(qū)別和優(yōu)缺點(diǎn)), chown, chmod, du (磁盤使用情況: du -hk *)幕屹。對文件系統(tǒng)來說蓝丙, df, mount, fdisk, mkfs,lsblk。
? ? ? 9.基本的網(wǎng)絡(luò)管理命令: ip 或ifconfig望拖, dig渺尘。
? ? ? ? 10.熟練掌握正則表達(dá)式,以及grep/egrep 工具的多種標(biāo)志说敏。有必要知道 -i, -o, -A 以及 -B 選項(xiàng)的意思鸥跟。
? ? ? 11.學(xué)會使用 apt-get, dnf 或者 pacman(根據(jù)不同的發(fā)行版選擇)來查找或者安裝軟件包。確保你安裝了 pip 來安裝 python 相關(guān)的命令行工具盔沫。
日常使用
? ? ? 1.在 Bash中医咨,使用 Tab 鍵來補(bǔ)全命令,使用 ctrl-r 來查詢歷史命令架诞。
? ? ? 2.在 Bash 中拟淮,使用 ctrl-w 來刪除上一個(gè)單詞,ctrl-u 刪除整行命令谴忧。使用 alt-b 和 alt-f 來逐單詞向前向后跳轉(zhuǎn)很泊,ctrl-k 將鼠標(biāo)位置到行末的所有字符刪除角虫,ctrl-l清屏。查看 man readline 中的”Key Bindings”這一節(jié)了解 Bash 中默認(rèn)的組合鍵撑蚌。還有其他的很多上遥,比如說 alt-. 可以用來上翻之前的命令搏屑。如果你偏好 vi風(fēng)格的組合鍵争涌,可以 set -o vi。
? ? ? 3.使用history命令查看近期的命令辣恋。還有其他許多簡寫命令亮垫,比如 !$表示上一個(gè)參數(shù),!!執(zhí)行上一條命令等伟骨。不過通常我們更常用的是 ctrl-r和alt-. 饮潦。
? ? ? 4.回到上一個(gè)工作目錄: cd -
? ? ? 5.如果你命令敲到一半發(fā)現(xiàn)還有其他事沒做,想要稍后執(zhí)行携狭,怎么辦呢继蜡?使用 alt-# 給這條命令行首加上#,再回車當(dāng)做一條注釋(或者使用 ctrl-a,#,回車)逛腿。之后通過歷史命令找它回來繼續(xù)往下敲稀并。
? ? ? 6.Xargs 或者 parallel 命令也很管用。我們還可以使用 -L 或者 -P 選項(xiàng)限制每行參數(shù)個(gè)數(shù)单默。如果對執(zhí)行結(jié)果不確定的話碘举,可以先用 xargs echo 查看。同樣搁廓, -I{} 選項(xiàng)用起來也很順手引颈。例如:
find . -name '*.py' | xargs grep some_func
cat hosts | xargs -I{} ssh root@{} hostname
【補(bǔ)充 : find . -name “.dsc” | xargs -L 2 echo 可以將當(dāng)前目錄下所有 .dsc 文件列出,并且限制每行顯示兩項(xiàng)境蜕。
find . -name “.dsc” | xargs -I{} mv {} {}.bak 可以將當(dāng)前目錄下所有后綴為 .dsc 的文件更名為 .dsc.bak
-I 選項(xiàng)告知 xargs 用每項(xiàng)的名稱替換 {}
? ? ? 7.Pstree -p 可以很清晰的展示進(jìn)程樹蝙场。使用 pgrep 和 pkill 來根據(jù)名稱找出進(jìn)程或者向進(jìn)程發(fā)送信號 (注意 -f 的用法)了解一些發(fā)送給進(jìn)程的信號。比如粱年,可以使用 kill -STOP [pid] 來停止進(jìn)程售滤。 Man 7 signal 查看全部列表。
? ? ? ? 8.使用 nohup 或者 disown 命令讓程序在后臺一直運(yùn)行逼泣。
? ? ? ? 9.通過 netstat -lntp 或者 ss -plat 命令來檢查哪些進(jìn)程正在監(jiān)聽端口(默認(rèn)情況下監(jiān)聽 TCP 端口趴泌, 使用 -u 監(jiān)聽 UDP)。
? ? ? ? 10.使用 lsof 查看所有打開的套接字和文件拉庶。詳情自 man
? ? ? ? 11.使用 alias 給常用命令創(chuàng)建別名嗜憔。例如 alias ll=’ls -latr’ 為我們創(chuàng)建新的別名 ll。
? ? ? ? 12.在 Bash 腳本中氏仗,使用 set -x 來調(diào)試輸出吉捶。盡可能的使用嚴(yán)格模式夺鲜。如果希望阻止我們的程序發(fā)生錯(cuò)誤的情況下還繼續(xù)運(yùn)行,可以通過設(shè)置 set -e 來限制呐舔。還可以使用 set -o pipefail 來嚴(yán)格限制錯(cuò)誤(話說這種問題比較微妙币励,需要多領(lǐng)悟)。對于比較復(fù)雜而牽扯甚多的腳本珊拼,可以使用 trap 食呻。
? ? ? ? 13.在 Bash 腳本中,子 shell (用括號包含)可以用來很方便的組織命令澎现。一個(gè)常見用法是臨時(shí)切換到不同的工作目錄仅胞,例如:
# 在當(dāng)前目錄工作
(cd /some/other/dir && other-command)
# 繼續(xù)在原目錄工作
? ? ? ? 14.在 Bash 中有多種變量展開的方式。
@檢查某變量是否存在: ${name:?error message}剑辫。例如:如果某個(gè) Bash 腳本需要一個(gè)參數(shù)干旧, input_file=${1:?usage: $0 input_file} 就可以。
@數(shù)學(xué)展開式: i=$(((i+1)%5))
@序列: {1..10}
@截?cái)嘧址?{var%suffix} 和 ${var#prefix}例如 :
#var=foo.pdf
# echo ${var%.pdf}.txt
# foo.txt妹蔽。
? ? ? ? 15.通過 <(some command) 這種方式可以將命令的輸出視為文件椎眯。例如,比較本地和遠(yuǎn)程的 /etc/hosts 文件:
diff /etc/hosts <(ssh somehost cat /etc/hosts)
? ? ? ? 16.要知道 Bash 中 “here documents” 的用法胳岂,比如 cat <<EOF …【man bash,搜索 Here Documents】
? ? ? ? 17.在 Bash 中编整,通過 : some-command > logfile 2>&1 的方式來重定向標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤。通常的旦万,為了保證你執(zhí)行的命令不會在標(biāo)準(zhǔn)輸入中殘留一個(gè)打開的文件句柄闹击,導(dǎo)致無法操作終端,最佳實(shí)踐是加上 </dev/null.
? ? ? ? 18使用 man ascii 查看十六進(jìn)制和十進(jìn)制值的ASCII表成艘。man unicode赏半,man utf-8,以及 man latin1 有助于你去了解通用的編碼信息淆两。
? ? ? ? 19.使用 screen 或者 tmux 命令來操作多屏断箫,尤其是在連接遠(yuǎn)程 session 、斷開或者重連 session 等情況下非常實(shí)用秋冰。另一個(gè)輕量級的保存會話的工具是 dtach仲义。
? ? ? ? 21.ssh 中,了解如何使用 -L 或 -D(偶爾需要用 -R)去開啟隧道是非常有用的剑勾,例如當(dāng)你需要從一臺遠(yuǎn)程服務(wù)器上訪問 web埃撵。優(yōu)化 ssh 配置有時(shí)候可能很管用,例如下面這個(gè) ~/.ssh/config 修改了一些配置虽另,相對于使用默認(rèn)配置的其他服務(wù)器來說暂刘,它可以有效避免特定網(wǎng)絡(luò)環(huán)境下連接被丟棄,使用壓縮數(shù)據(jù)(有效用于低帶寬連接中的 scp 操作)捂刺,以及多通道等:
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
Compression=yes
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist yes
SSH 還有其他一些安全相關(guān)的選項(xiàng)谣拣,須小心使用募寨,例如在單個(gè)子網(wǎng)、主機(jī)或者可信任的網(wǎng)絡(luò)中:
StrictHostKeyChecking=no森缠,F(xiàn)orwardAgent=yes
? ? ? ? 22.獲取文件的八進(jìn)制格式的權(quán)限拔鹰,這種權(quán)限在系統(tǒng)配置中很管用,但是 ls 并不顯示贵涵,并且很容易搞砸列肢。可以使用這條命令:
stat -c '%A %a %n' /etc/timezone
? ? ? ? 23.從另外一條命令中独悴,以交互的方式選擇值例书,可以使用 percol 或者 fzf锣尉。
? ? ? ? 24.使用 fpp 來與其他命令輸出的文件交互(如git)【facebook PathPicker, github 上的項(xiàng)目刻炒,例如 git status | fpp, find . -name “*.vala” | fpp】
? ? ? ? 25.對一個(gè)簡單的 web 服務(wù)器來說,將當(dāng)前目錄下所有的目錄(包括子目錄)展示給所處網(wǎng)絡(luò)的所有用戶自沧,使用: python -m SimpleHTTPServer 7777 (使用端口 7777 和 Python 2)或python -m http.server 7777 (使用端口 7777 和 Python 3)坟奥。
? ? ? ? 26.以某種權(quán)限來執(zhí)行命令,使用sudo(root 權(quán)限)或sudo -u(其他用戶)拇厢。使用su或者sudo bash來啟動一個(gè)指定用戶權(quán)限運(yùn)行的 shell爱谁。使用su -模擬其他用戶的登錄。
文件和數(shù)據(jù)處理
? ? ? ? 1.在當(dāng)前目錄下找到某名稱的文件
# find . -name ‘something’
? ? ? ? 2.找到其他任意位置的某個(gè)文件孝偎,使用
# locate something
但請注意: updatedb 可能無法索引到新增的文件
? ? ? ? 3.在源代碼或數(shù)據(jù)文件中搜索访敌,使用 ag(比 grep -r 更好)。
? ? ? ? 4.將 HTML 文件轉(zhuǎn)化為文本格式:
lynx -dump -stdin
? ? ? ? 5. pandoc 來對 Markdown衣盾、HTML 以及其他各種文件進(jìn)行格式轉(zhuǎn)換寺旺。
? ? ? ? 6.如果某些情況下你需要處理 XML 數(shù)據(jù),那么試試 xmlstarlet 吧势决,雖然它有點(diǎn)歷史滄桑感但的確挺好用的阻塑。
? ? ? ? 7.對 JSON 數(shù)據(jù)來說, 用 jq果复。
? ? ? ? 8.對于 Excel 或者 CSV 文件陈莽, csvkit 提供諸如 in2csv, csvcut, csvjoin, csvgrep 等實(shí)用小工具。
? ? ? ? 9.關(guān)于 Amazon S3虽抄, s3cmd 很方便而 s4cmd 更快走搁。 Amazon 官方的 aws 工具是其他 AWS 相關(guān)工作的基石。
? ? ? ? 10.了解如何使用 sort 和 uniq迈窟,包括 uniq 的 -u 參數(shù)和 -d 參數(shù)私植。另外可以了解一下 comm。
? ? ? ? 11.了解如何使用 cut菠隆,paste 和 join 來更改文件兵琳。很多人都會使用 cut狂秘,但幾乎都不會使用 join。
? ? ? ? 12.了解如何運(yùn)用 wc 去計(jì)算行數(shù)(-l)躯肌,字符數(shù)(-m)者春,單詞數(shù)(-w)以及字節(jié)數(shù)(-c)。
? ? ? ? 13.知道用 tee 來將標(biāo)準(zhǔn)輸入的內(nèi)容復(fù)制到文件或者標(biāo)準(zhǔn)輸出清女,就像 ls -al | tee file.txt
? ? ? ? 14.要知道語言環(huán)境可能對許多命令行工具產(chǎn)生微妙地影響钱烟,包括排序的順序和性能。大多數(shù) Linux 的安裝過程會將 LANG 或其他有關(guān)的變量設(shè)置本地化嫡丙。但是請注意當(dāng)你改變語言環(huán)境后拴袭,排序的結(jié)果可能會隨之變化。而且國際化可能會大大降低 sort 或其他命令的運(yùn)行效率曙博。某些情況下(例如集合運(yùn)算拥刻、去重操作等)你可以放心的使用 export LC_ALL=C 來忽略掉國際化并使用基于字節(jié)的順序。
? ? ? ? 15.了解 awk 和 sed 關(guān)于數(shù)據(jù)的簡單處理的用法父泳。例如般哼,將文本文件中第三列的所有數(shù)字求和:
awk '{ x += $3 } END { print x }'
這可比 Python 實(shí)現(xiàn)的代碼量少三倍也快三倍。
? ? ? ? 16.替換一個(gè)或多個(gè)文件中出現(xiàn)的字符串:
perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt
? ? ? ? 17.使用 rename 完成批量文件的重命名惠窄。對于更復(fù)雜的情況蒸眠,可以使用 repren[https://github.com/jlevy/repren]
# 將備份文件 foo.bak 還原至 foo
rename ‘s/.bak$//’ *.bak
# 將所有的文件名、目錄杆融、內(nèi)容等全部重命名
repren --full --preserve-case --from foo --to bar .
? ? ? 18.使用 shuf 從一個(gè)文件中隨機(jī)選取行楞卡。
? ? ? ? 19.了解 sort 的參數(shù)。處理數(shù)字方面脾歇,使用 -n 或者 -h 來處理可讀性數(shù)字(例如 du -h 的輸出)蒋腮。明白關(guān)鍵字的工作原理(-t 和 -k)。請注意介劫!如果你想要僅按第一個(gè)域來排序需要 -k1,1 徽惋; -k1 意味著按整行排序。穩(wěn)定排序(sort -s)在某些情況下很有用座韵。例如险绘,以第二個(gè)域?yàn)橹麝P(guān)鍵字,第一個(gè)域?yàn)榇侮P(guān)鍵字進(jìn)行排序誉碴,你可以使用 sort -k1宦棺,1 | sort -s -k2,2黔帕。
? ? ? ? 20.如果你想在 Bash 命令行中寫 tab 制表符(舉個(gè)栗子: sort 的 -t 參數(shù)指定分隔符:sort -t”tab ” -k2 sortfile)代咸,按下 ctrl-v [Tab] 或鍵入 $’t' (后者可能更好,因?yàn)槟憧梢詮?fù)制粘貼它)成黄。
? ? ? ? 21.標(biāo)準(zhǔn)的源代碼對比及合并工具是 diff 和 patch呐芥。使用 diffstat 查看變更總覽數(shù)據(jù)逻杖。注意到 diff -r 對整個(gè)文件夾有效。使用 diff -r tree1 tree2 | diffstat 查看變更總覽數(shù)據(jù)思瘟。
? ? ? ? 22.對于二進(jìn)制文件荸百,使用 hd 使其以十六進(jìn)制顯示以及使用 bvi 來編輯二進(jìn)制,使用 strings(加上 grep 等等)允許你查找一些文本滨攻。使用 xdelta3來對比二進(jìn)制文件(Delta 壓縮)够话。
? ? ? ? 23.使用 iconv 更改文本編碼。而更高級的用法光绕,可以使用 uconv女嘲,它支持一些高級的 Unicode 功能。例如诞帐,這條命令將所有元音字母轉(zhuǎn)為小寫并移除了:
uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt
? ? ? ? 24.拆分文件欣尼,查看 split(按大小拆分)和 csplit(按模式拆分)。
? ? ? ? 25.使用 zless景埃,zmore媒至,zcat 和 zgrep對壓縮過的文件進(jìn)行操作。
系統(tǒng)調(diào)試
? ? ? ? 1.對于 web 調(diào)試來說谷徙,curl 和 curl -I 都是很趁手的工具,它們的好基友 wget 也不錯(cuò)驯绎,或者是更時(shí)尚一點(diǎn)的 httpie完慧。
? ? ? ? 2.使用 iostat、netstat剩失、top (htop 更佳)和 dstat 去獲取硬盤屈尼、cpu 和網(wǎng)絡(luò)的狀態(tài)。熟練掌握這些工具可以使你快速的對系統(tǒng)的當(dāng)前狀態(tài)有一個(gè)大概了解拴孤。
? ? ? ? 3.若要對系統(tǒng)有一個(gè)深度的總體認(rèn)識脾歧,使用 glances。它在一個(gè)終端窗口中向你提供一些系統(tǒng)級的數(shù)據(jù)演熟。這對于快速的檢查各個(gè)子系統(tǒng)非常有幫助鞭执。
? ? ? ? 4.若要了解內(nèi)存狀態(tài),運(yùn)行并理解 free 和 vmstat 的輸出芒粹。尤其注意“cached”的值兄纺,它指的是 Linux 內(nèi)核用來作為文件緩存的內(nèi)存大小,因此它與空閑內(nèi)存無關(guān)化漆。
? ? ? ? 5.Java 系統(tǒng)調(diào)試則是另一碼事了估脆,不過有一個(gè)簡單的小技巧可以用于 Oracle 的 JVM 或其他 JVM ,運(yùn)行 kill -3 <pid> 會將一個(gè)完整的棧軌跡和堆概述(包括 GC 的細(xì)節(jié))保存到標(biāo)準(zhǔn)輸出/日志文件座云。
? ? ? ? 6.使用 mtr 去跟蹤路由疙赠,用于確定網(wǎng)絡(luò)問題付材。
? ? ? ? 7.用 ncdu 來查看磁盤使用情況,它比常用的命令圃阳,如 du -sh *伞租,更節(jié)省時(shí)間。
? ? ? ? 8.查找正在使用帶寬的套接字連接或進(jìn)程限佩,使用 iftop 或 nethogs葵诈。
? ? ? ? 9.ab 工具(捆綁于 Apache)可以簡單粗暴地檢查 web 服務(wù)器的性能。對于更復(fù)雜的負(fù)載測試祟同,使用 siege作喘。
? ? ? ? 10.wireshark,tshark 和 ngrep 可用于復(fù)雜的網(wǎng)絡(luò)調(diào)試晕城。
? ? ? ? 11.了解 strace 和 ltrace泞坦。當(dāng)你想知道程序運(yùn)行失敗、掛起甚至崩潰的原因砖顷,或者你想對性能有個(gè)總體了解的話贰锁,這兩個(gè)工具十分管用。注意 profile 參數(shù)(-c)和附加到一個(gè)運(yùn)行的進(jìn)程參數(shù) (-p)滤蝠。
? ? ? ? 12.了解 ldd 命令來檢查共享庫等等豌熄。
知道如何用 gdb 來調(diào)試運(yùn)行程序并獲取堆棧軌跡。
? ? ? ? 13.學(xué)會使用 /proc物咳。它在調(diào)試正在出現(xiàn)的問題的時(shí)候有時(shí)會效果驚人锣险。比如:/proc/cpuinfo,/proc/meminfo览闰,/proc/cmdline芯肤,/proc/xxx/cwd,/proc/xxx/exe压鉴,/proc/xxx/fd/崖咨,/proc/xxx/smaps。
如果想調(diào)試已經(jīng)發(fā)生的問題油吭,sar 顯得很管用击蹲。它會列出CPU、內(nèi)存上鞠、網(wǎng)絡(luò)等歷史統(tǒng)計(jì)數(shù)據(jù)际邻。
關(guān)于更深層次的系統(tǒng)分析以及性能分析,看看 stap(SystemTap)芍阎,perf世曾,以及sysdig。
? ? ? 14.查看你當(dāng)前使用的系統(tǒng),使用 uname 或者 uname -a (Unix/kernel 信息) or lsb_release -a (Linux 發(fā)行版信息)轮听。
? ? ? ? 15.如果某些問題看起來稍顯搞笑骗露,試試查看 dmesg 信息(可能是硬件或驅(qū)動問題)。
一行命令
? ? ? 1.一些組合命令:當(dāng)你需要對文本文件做集合交血巍、并萧锉、差運(yùn)算時(shí), sort/uniq 聯(lián)合出擊顯得非常管用述寡。假設(shè) a 與 b 是兩個(gè)內(nèi)容不同且去重的文件柿隙。這種方式效率很高,并且對各種大小的文件都適用鲫凶,不管是在小文件還是上G的大文件禀崖。(sort 不受內(nèi)存約束,不過如果 /tmp 所處的根分區(qū)容量有限螟炫,你可能需要 -T 參數(shù))波附,參閱前文中關(guān)于 LC_ALL 和 sort 的 -u 參數(shù)的部分。
cat a b | sort | uniq > c
# c is a union b
cat a b | sort | uniq -d > c
# c is a intersect b
cat a b b | sort | uniq -u > c
# c is set difference a - b
? ? ? 2.使用 grep . * 命令來檢查目錄下所有文件的內(nèi)容昼钻,例如那些包含許多配置設(shè)置的目錄: /sys/, /proc/, /etc掸屡。
? ? ? 3.對文本文件中第三列數(shù)據(jù)計(jì)算總和(相比python 快三倍,代碼量卻只有 python 的1/3):
awk '{ x += $3 } END { print x }' myfile
? ? ? 4. 如果想查看目錄樹中文件的大小或者日期然评,下面這條命令類似遞歸的 ls -l,但是輸出結(jié)果更易讀:
find . -type f -ls
? ? ? 5.假設(shè)你有一個(gè)類似于 web 服務(wù)器日志文件的文本文件仅财,并且某個(gè)特定值只會出現(xiàn)在某些行上,比如會在 URL 中出現(xiàn)的 acct_id 參數(shù)沾瓦。如果你想計(jì)算出每個(gè) acct_id 值有多少次請求满着,使用如下代碼:
運(yùn)行這個(gè)函數(shù)從這篇文檔中隨機(jī)獲取一條小技巧(解析 Markdown 文件并抽取項(xiàng)目):
function taocl() {
curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
pandoc -f markdown -t html |
xmlstarlet fo --html --dropdtd |
xmlstarlet sel -t -v "(html/body/ul/li[count(p)>0])[$RANDOM mod last()+1]" |
xmlstarlet unesc | fmt -80
}
管用的小冷門
expr:計(jì)算表達(dá)式酷麦、布爾操作或正則匹配
m4:簡單地宏處理器
yes:多次打印字符串
cal:日歷
env:執(zhí)行一個(gè)命令(腳本文件中很有用)
printenv: 打印環(huán)境變量(在調(diào)試時(shí)或者腳本中很管用)
look: 找出以某字符串開頭的英文單詞(或者文件中的某一行)
cut, paste 和 join :數(shù)據(jù)處理
fmt: 格式化文本段落
pr : 將文本格式化為頁數(shù)據(jù)或者列數(shù)據(jù)
fold : 封裝文本中的行【比如 -w 指定寬度刚梭,不使用默認(rèn)的80】
Column: 將文本格式化為列或者表數(shù)據(jù)
expand 和 unexpand:制表符與空格之間轉(zhuǎn)換
nl:添加行號
seq:打印序列數(shù)字
bc:計(jì)算器
factor:分解因數(shù) 【例如 factor 100孙咪,輸出 2 2 5 5】
gpg:加密并簽名文件
toe:終端類型列表
nc:網(wǎng)絡(luò)調(diào)試及數(shù)據(jù)傳輸
socat:套接字代理,與 netcat 類似
slurm:網(wǎng)絡(luò)負(fù)載監(jiān)視器
dd:在文件或設(shè)備間傳輸數(shù)據(jù)
file:確定文件類型
tree:以樹的形式顯示路徑和文件缕探,類似于 ls,不過這條命令會遞歸顯示
stat:文件信息
time:執(zhí)行命令还蹲,并計(jì)算執(zhí)行時(shí)間
tac:反向輸出文件
Shuf :將文件中的數(shù)據(jù)隨機(jī)選擇排列
comm: 逐行比較已排序的文件
pv: 監(jiān)控通過管道的數(shù)據(jù)
hd 和 bvi:保存或者編輯二進(jìn)制文件
strings: 提取二進(jìn)制文件的文本內(nèi)容
Tr: 字符轉(zhuǎn)換與處理
Iconv 或 uconv: 文本編碼的轉(zhuǎn)換
Spit 和scplit : 分割文件
Sponge: 在寫之前讀取所有輸入爹耗,在對同一個(gè)文件讀寫很管用,例如: grep -v something some-file | sponge some-file 【將文件中所有匹配 something 的行都刪除】
units:單位轉(zhuǎn)化與計(jì)算谜喊;將一種計(jì)量單位轉(zhuǎn)換為另一種等效的計(jì)量單位(參閱 /usr/share/units/definitions.units)
7z: 一種高效的壓縮工具
Ldd: 查看動態(tài)庫的信息
Nm: 提取可執(zhí)行文件或者 obj 文件的符號
Ab:web 服務(wù)器性能分析工具
Strace: 調(diào)試系統(tǒng)調(diào)用
Mtr:網(wǎng)絡(luò)調(diào)試跟蹤工具
Cssh: 可視化的并發(fā) shell
Rsync :可用于遠(yuǎn)程文件目錄同步
Wireshark 和 tshark : 抓取包與網(wǎng)絡(luò)調(diào)試
Ngrep: 網(wǎng)絡(luò)層的 grep 工具
Host 和 dig: DNS 查找
Lsof : 處理文件描述符和 socket 信息【列出所有打開的文件】
dstat : 通用的系統(tǒng)統(tǒng)計(jì)工具
glances:高層次的多子系統(tǒng)概覽
iostat:CPU 和硬盤使用狀態(tài)
htop:top 的加強(qiáng)版
last:登入歷史記錄
w:當(dāng)前登陸用戶
id:用戶/組 ID 信息
sar: 系統(tǒng)歷史數(shù)據(jù)統(tǒng)計(jì)
iftop 或 nethogs:套接字及進(jìn)程的網(wǎng)絡(luò)利用率
ss:套接字?jǐn)?shù)據(jù)統(tǒng)計(jì)
dmesg:引導(dǎo)及系統(tǒng)錯(cuò)誤信息
hdparm:SATA/ATA 磁盤操作及性能分析
lsb_release:Linux 發(fā)行版信息
lsblk:列出塊設(shè)備信息:樹狀圖展示你的磁盤以及磁盤分區(qū)信息
lshw潭兽,lscpu,lspci斗遏,lsusb 和 dmidecode:查看硬件信息山卦,包括 CPU、BIOS诵次、RAID账蓉、顯卡枚碗、其他設(shè)備等
fortune,ddate 和 sl:開個(gè)玩笑…… 如果對心靈雞湯或者奔跑的小火車感興趣的話铸本,可以自己試試
僅限 MacOS
以下是僅限于 MacOS 系統(tǒng)的技巧
? ? ? 1.用 brew (Homebrew)或者 port (MacPorts)進(jìn)行包管理肮雨。這些可以用來在 Mac 系統(tǒng)上安裝以上的大多數(shù)命令。
? ? ? 2.用 pbcopy 復(fù)制任何命令的輸出到桌面應(yīng)用箱玷,用 pbpaste 粘貼輸入怨规。
? ? ? 3.用 open 或者 open -a /Applications/Whatever.app 使用桌面應(yīng)用打開文件。
? ? ? 4.Spotlight: 用 mdfind 搜索文件锡足,用 mdls 列出元數(shù)據(jù)(例如照片的 EXIF 信息)波丰。
注意 MacOS 系統(tǒng)是基于 BSD UNIX 的,許多命令(例如 ps舱污,ls呀舔,tail,awk扩灯,sed)都和 Linux 中有些微的不同媚赖,受 System V-style Unix 和 GNU 工具影響很大。你可以通過標(biāo)題為 ”BSD General Commands Manual” 的 man 頁面發(fā)現(xiàn)這些不同珠插。在有些情況下 GNU 版本的命令也可能被安裝(例如 gawk 和 gsed 對應(yīng) GNU 中的 awk 和 sed )惧磺。如果要寫跨平臺的 Bash 腳本,避免使用這些命令(例如捻撑,考慮 Python 或者 perl )或者經(jīng)過仔細(xì)的測試磨隘。