? čeština∙Deutsch∙ελλην已英語∙埃斯帕尼爾∙
注意:我計劃對此進行修改,並尋找一個新的合著者,以幫助將其擴展為更全面的指南。雖然非常受歡迎,但它可能會更廣泛,更深入。如果您想寫作並接近成為此材料的專家並願意考慮提供幫助,請在Josh(0x40)Holloway.com上給我留言。 - Jlevy,Holloway。謝謝你!

命令線上的流利度通常是一種經常被忽視或被認為是奧術的技能,但它以明顯和微妙的方式提高了您作為工程師的靈活性和生產力。這是使用我們在Linux工作時發現有用的命令行的註釋和技巧的選擇。有些技巧是基本的,有些技巧相當具體,精緻或晦澀。此頁面不長,但是如果您可以在這裡使用並回憶所有項目,那麼您就會知道很多。
這項工作是許多作者和翻譯人員的結果。其中一些最初出現在Quora上,但此後搬到了Github,那裡的人比原始作者更有才華了。如果您有與命令行有關的問題,請提交問題。如果您看到錯誤或可能更好的事情,請做出貢獻!
範圍:
筆記:
apt , yum , dnf , pacman , pip或brew (適當)安裝新程序。學習基本的狂歡。實際上,鍵入man bash ,至少略讀了整個事情;它很容易遵循,而且不長。替代外殼可能很不錯,但是bash是強大的,並且總是可用的(僅學習ZSH,魚類等,在您自己的筆記本電腦上誘惑,在許多情況下限制了您,例如使用現有服務器)。
很好地學習至少一個基於文本的編輯器。 nano編輯器是最簡單的基本編輯之一(開放,編輯,保存,搜索)。但是,對於文本終端中的Power用戶來說,無需替代VIM( vi ),這是難以學習的,但尊貴,快速且功能齊全的編輯器。許多人還使用經典的Emacs,特別是用於更大的編輯任務。 (當然,任何從事廣泛項目的現代軟件開發人員不太可能僅使用基於文本的編輯器,也應該熟悉現代的圖形IDE和工具。)
查找文檔:
man讀取官方文檔(對於好奇的人, man man列出了章節編號,例如1是“常規”命令,5個是文件/約定,而8個用於管理)。查找與apropos人頁。help和help -d情況下為他們提供幫助。您可以通過使用type command來找出命令是可執行的,外殼內置的還是別名。curl cheat.sh/command將提供一個簡短的“備忘單”,並提供有關如何使用shell命令的常見示例。使用>和<和管道使用| 。知道>覆蓋輸出文件和>>附加。了解Stdout和Stderr。
了解使用* (也許是?以及[ ... ] )以及引用的文件範圍擴展以及' "之間的差異。 (請參見下面的可變擴展有關的更多信息。)
熟悉BASH的工作管理: & , Ctrl-Z , Ctrl-C , jobs , fg , bg , kill等。
通過ssh-agent , ssh-add等了解ssh和無密碼身份驗證的基礎知識。
基本文件管理: ls和ls -l (尤其是ls -l表示的每一列), less , head , tail和tail -f (甚至更好, less +F ), ln和ln -s (了解硬鏈接與軟鏈接的差異和優勢), chown ,Chown, chmod ,chmod, du (快速匯總disk Usage usage usage usage: du -hs * )。對於文件系統管理, df , mount , fdisk , mkfs , lsblk 。了解什麼是Inode( ls -i或df -i )。
基本網絡管理: ip或ifconfig , dig , traceroute , route 。
學習和使用版本控制管理系統,例如git 。
很好地了解正則表達式,以及grep / egrep的各種旗幟。 -i , -o , -v , -A , -B和-C選項值得知道。
學習使用apt-get , yum , dnf或pacman (取決於發行版)來查找和安裝包裹。並確保您有pip安裝基於Python的命令行工具(以下最容易通過pip安裝)。
在BASH中,使用選項卡完成參數或列出所有可用命令和CTRL-R以搜索命令歷史記錄(按下鍵入搜索後,按搜索,按CTRL-R反复循環循環瀏覽更多匹配項,按Enter執行找到命令,或擊中右箭頭以將結果放在當前行中以允許編輯)。
在Bash中,使用CTRL-W刪除最後一個單詞,然後Ctrl-U將內容從當前光標刪除到線路的開始。使用Alt-B和Alt-F通過Word移動, CTRL-A將光標移至線路開始, CTRL-E將光標移至線路的結尾, Ctrl-K殺死了線的末端,CTRL-L, CTRL-L以清除屏幕。有關BASH中所有默認的鍵鍵,請參見man readline 。有很多。例如alt-。通過以前的論點進行循環,而Alt- *擴展了一個地球。
另外,如果您喜歡VI風格的鑰匙結合,請使用set -o vi (和set -o emacs將其放回原處)。
對於編輯長命令,設置編輯器(例如export EDITOR=vim )後, CTRL-X CTRL-E將在編輯器中打開當前命令以進行多行編輯。或以vi風格,逃生v 。
要查看最近的命令,請使用history 。按照!n ( n是命令號)再次執行。您還可以使用許多!! ,最有用的可能是!$有關最後一個命令(請參見“人頁”頁面中的“歷史擴展”)。但是,這些通常很容易被CTRL-R和Alt-替換。 。
使用cd訪問您的主目錄。使用~前綴(例如~/.bashrc )相對於主目錄的訪問文件。在sh腳本中,將主目錄稱為$HOME 。
返回到以前的工作目錄: cd - 。
如果您要鍵入命令但改變主意,請點擊alt-#在開始時添加#並將其作為註釋輸入(或使用Ctrl-A , # , Enter )。然後,您可以稍後通過命令歷史記錄返回。
使用xargs (或parallel )。它非常強大。請注意,您可以控制每行( -L )執行多少項以及並行性( -P )。如果您不確定是否會做正確的事情,請先使用xargs echo 。另外, -I{}很方便。示例:
find . -name ' *.py ' | xargs grep some_function
cat hosts | xargs -I{} ssh root@{} hostname pstree -p是過程樹的有用顯示。
使用pgrep和pkill以名稱查找或發信號( -f很有幫助)。
知道您可以發送過程的各種信號。例如,要暫停一個過程,請使用kill -STOP [pid] 。有關完整列表,請參見man 7 signal
如果您想要一個背景過程來保持永遠運行,請使用nohup或disown 。
檢查通過netstat -lntp或ss -plat (用於TCP; add -u for UDP)或lsof -iTCP -sTCP:LISTEN -P -n (也適用於MACOS)的過程。
另請參閱lsof和fuser有關開放式插座和文件。
查看uptime或w知道系統運行多長時間。
使用alias為常用命令創建快捷方式。例如, alias ll='ls -latr'創建一個新的別名ll 。
保存您通常在~/.bashrc中使用的別名,外殼設置和功能,並安排登錄外殼來源。這將使您的所有外殼會議都可以使用。
將環境變量的設置以及登錄~/.bash_profile登錄時應執行的命令。您從圖形環境登錄和cron作業中啟動的外殼需要單獨的配置。
在具有GIT的各種計算機中同步您的配置文件(例如.bashrc和.bash_profile )。
了解變量和文件名包括Whitespace時需要注意。用引號(例如"$FOO"包圍您的狂歡變量。更喜歡-0或-print0選項,啟用null字符以界定文件名,例如locate -0 pattern | xargs -0 ls -al或find / -print0 -type d | xargs -0 ls -al 。要迭代包含whitespace for for循環的文件名,將您的IF設置為僅使用IFS=$'n'的新線。
在bash腳本中,使用set -x (或variant set -v ,將記錄原始輸入(包括未註釋的變量和註釋))進行調試輸出。使用嚴格的模式,除非您有充分的理由不:使用set -e在錯誤(非零退出代碼)上中止。使用set -u檢測未設置的可變用法。也要考慮set -o pipefail ,以在管道中流產(儘管這樣做,但請更多地閱讀,因為此主題有點微妙)。對於更多涉及的腳本,也可以在退出或ERR上使用trap 。一個有用的習慣是啟動這樣的腳本,這將使它在常見錯誤中檢測和中止並打印一條消息:
set -euo pipefail
trap " echo 'error: Script failed: see failed command above' " ERR # do something in current dir
(cd /some/other/dir && other-command)
# continue in original dir在Bash中,請注意有很多可變擴展。檢查一個變量: ${name:?error message} 。例如,如果bash腳本需要一個參數,則只需寫入input_file=${1:?usage: $0 input_file} 。如果變量為空,則使用默認值: ${name:-default} 。如果要在上一個示例中添加一個附加(可選的)參數,則可以使用output_file=${2:-logfile}之類的內容。如果省略$2並因此為空,則將output_file設置為logfile 。算術擴展: i=$(( (i + 1) % 5 )) 。序列: {1..10} 。字符串的修剪: ${var%suffix}和${var#prefix} 。例如,如果var=foo.pdf ,則echo ${var%.pdf}.txt prints foo.txt 。
使用{ ... }的支撐擴展可以減少不需要重新類型的類似文本並自動化項目組合。這對諸如mv foo.{txt,pdf} some-dir (兩個文件移動), cp somefile{,.bak} (將擴展到cp somefile somefile.bak )或mkdir -p test-{a,b,c}/subtest-{1,2,3} offortions,這是有幫助的。在任何其他擴展之前,進行支撐擴展。
擴展的順序是:支架擴展; Tilde擴展,參數和可變擴展,算術擴展和命令替代(以從左到右的方式完成);單詞分裂;和文件名擴展。 (例如,不能使用{$a..$b}的變量來表示類似{1..20}之類的範圍。使用seq或a for循環,例如, seq $a $b或for((i=a; i<=b; i++)); do ... ; done 。
命令的輸出可以通過<(some command) (稱為過程替代)作為文件處理。例如,將local /etc/hosts與遙控器進行比較:
diff /etc/hosts <( ssh somehost cat /etc/hosts ){
# Your code here
} cat <<EOF
input
on multiple lines
EOF
在bash中,通過以下方式重定向標準輸出和標準錯誤: some-command >logfile 2>&1或some-command &>logfile 。通常,為了確保命令不會將打開的文件句柄留給標準輸入,將其綁定到您所在的終端,添加</dev/null也是一個很好的做法。
使用man ascii作為具有十六進制和十進制值的優質ASCII表。對於一般編碼信息, man unicode , man utf-8和man latin1很有幫助。
使用screen或tmux多路復用屏幕,在遠程SSH會話中特別有用,並分離並重新連接到會話。 byobu可以通過提供更多信息和更容易的管理來增強屏幕或TMUX。 dtach僅是會話持久性的最小替代方法。
在SSH中,知道如何使用-L或-D (和偶爾-R )對隧道進行端口很有用,例如,從遠程服務器訪問網站。
對您的SSH配置進行一些優化是有用的。例如,此~/.ssh/config包含設置,以避免在某些網絡環境中刪除連接,使用壓縮(這有助於在低頻帶寬度連接上有助於SCP),並使用本地控製文件與同一服務器進行多路復用通道:
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
Compression=yes
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist yes
與SSH相關的其他一些選項對安全性敏感,應該通過小心或主機或受信任的網絡啟用: StrictHostKeyChecking=no , ForwardAgent=yes
考慮使用使用UDP的mosh的替代方法,避免了連接掉落並在道路上增加便利性(需要服務器端設置)。
要以八進制形式獲取文件的權限,這對於系統配置很有用,但在ls中不可用,易於使用,請使用類似
stat -c ' %A %a %n ' /etc/timezone為了從另一個命令的輸出中進行交互式選擇值,請使用percol或fzf 。
要根據另一個命令的輸出(例如git )與文件互動,請使用fpp (pathpicker)。
對於當前目錄(和subdirs)中所有文件的簡單Web服務器,可供網絡上的任何人使用,請使用: python -m SimpleHTTPServer 7777 (適用於端口7777和Python 2)和python -m http.server 7777 (對於端口7777(端口7777)和Python 3)。
要作為其他用戶運行命令,請使用sudo 。默認為root運行;使用-u指定另一個用戶。使用-i登錄該用戶(將要求您輸入密碼)。
要將外殼切換到另一個用戶,請使用su username或su - username 。後者的“ - ”獲得了一個環境,好像另一個用戶剛剛登錄一樣。省略用戶名默認為root。您將被要求提供您要切換的用戶的密碼。
了解命令行的128K限制。當通配符匹配大量文件時,此“參數列表太長”錯誤是常見的。 (發生這種情況時,例如find和xargs可能會有所幫助。)
對於基本的計算器(當然,通常可以訪問Python),請使用python解釋器。例如,
>>> 2+3
5
要在當前目錄中通過名稱找到文件, find . -iname '*something*' (或類似)。要通過名稱在任何地方找到文件,請使用locate something (但請記住updatedb可能沒有索引最近創建的文件)。
為了通過源或數據文件進行一般搜索,比grep -r更高級或更快地搜索,包括(從較舊到較新的) ack , ag (“ Silver Searcher”)和rg (RIPGREP)。
將html轉換為文本: lynx -dump -stdin
對於Markdown,HTML和各種文檔轉換,請嘗試pandoc 。例如,將降價文檔轉換為單詞格式: pandoc README.md --from markdown --to docx -o temp.docx
如果您必須處理XML,則xmlstarlet是舊的,但是很好。
對於JSON,請使用jq 。供交互式使用,另請參閱jid和jiq 。
對於yaml,請使用shyaml 。
對於Excel或CSV文件,CSVKIT提供in2csv , csvcut , csvjoin , csvgrep等。
對於Amazon S3, s3cmd很方便, s4cmd更快。亞馬遜的aws和改進的saws對於其他與AWS相關的任務至關重要。
了解sort和uniq ,包括uniq的-u和-d選項 - 請參見下面的單線。另請參閱comm 。
了解cut , paste並join以操縱文本文件。許多人使用cut ,但忘記join 。
了解wc以計算Newlines( -l ),字符( -m ),Words( -w )和Bytes( -c )。
知道要從stdin到文件的tee ,也可以將其複製到stdout,如ls -al | tee file.txt 。
對於更複雜的計算,包括分組,反向字段和統計計算,請考慮datamash 。
知道該語言環境以微妙的方式影響許多命令行工具,包括分類順序(整理)和性能。大多數Linux安裝都會將LANG或其他語言環境變量設置為像US English這樣的本地設置。但是請注意,如果您更改語言環境,則分類將會改變。並且知道I18N例程可以使排序或其他命令運行速度較慢。在某些情況下(例如設置操作或下面的唯一性操作),您可以安全地忽略慢速I18N例程,並使用export LC_ALL=C使用傳統的基於字節的排序順序。
您可以通過將其調用與環境變量設置前綴前相結合來設置特定的命令環境,例如TZ=Pacific/Fiji date 。
了解基本的awk和sed以進行簡單的數據爆炸。請參閱單線示例。
要替換一個或多個文件中的所有字符串的出現:
perl -pi.bak -e ' s/old-string/new-string/g ' my-files- * .txtrepren 。 (在某些情況下, rename命令還允許多個重命名,但是要小心,因為其功能在所有Linux發行版中都不相同。) # Full rename of filenames, directories, and contents foo -> bar:
repren --full --preserve-case --from foo --to bar .
# Recover backup files whatever.bak -> whatever:
repren --renames --from ' (.*).bak ' --to ' 1 ' * .bak
# Same as above, using rename, if available:
rename ' s/.bak$// ' * .bakrsync確實是一種快速且非常廣泛的文件複製工具。它以在機器之間同步而聞名,但在本地同樣有用。當安全限制允許時,使用rsync代替scp允許恢復轉移而無需從頭開始重新啟動。它也是刪除大量文件的最快方法之一: mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir為了監視處理文件時的進度,請使用pv , pycp , pmonitor , progress , rsync --progress或,或用於塊級複製, dd status=progress 。
使用shuf進行洗牌或從文件中選擇隨機行。
知道sort的選項。對於數字,請使用-n或-h來處理可讀數字(例如du -h )。知道密鑰的工作原理( -t和-k )。特別是,請注意您需要編寫-k1,1才能按第一個字段進行排序; -k1表示按整行排序。穩定排序( sort -s )可能有用。例如,要先按字段2排序,然後是字段1,您可以使用sort -k1,1 | sort -s -k2,2 。
如果您需要在bash中的命令行中寫下字母(例如,以-t參數進行排序),請按CTRL -V [TAB]或編寫$'t' (後者更好,因為您可以復制/粘貼它)。
用於修補源代碼的標準工具是diff和patch 。另請參見diffstat有關並排差異的差異和sdiff的摘要統計信息。注意diff -r適用於整個目錄。使用diff -r tree1 tree2 | diffstat以摘要變化。使用vimdiff比較和編輯文件。
對於二進製文件,請使用hd , hexdump或xxd進行簡單的HEX轉儲和bvi , hexedit或biew進行二進制編輯。
還用於二進製文件, strings (加上grep等),您可以找到一些文本。
對於二進制差異(Delta壓縮),請使用xdelta3 。
要轉換文本編碼,請嘗試iconv 。或uconv供更高級使用;它支持一些高級的Unicode事物。例如:
# Displays hex codes or actual names of characters (useful for debugging):
uconv -f utf-8 -t utf-8 -x ' ::Any-Hex; ' < input.txt
uconv -f utf-8 -t utf-8 -x ' ::Any-Name; ' < input.txt
# Lowercase and removes all accents (by expanding and dropping them):
uconv -f utf-8 -t utf-8 -x ' ::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt要將文件拆分成零件,請參見split (按大小分開)和csplit (按模式分開)。
日期和時間:要以有用的ISO 8601格式獲取當前日期和時間,請使用date -u +"%Y-%m-%dT%H:%M:%SZ" (其他選項是有問題的)。 dateutils操縱日期和時間表達式,請使用dateadd , datediff , strptime等。
使用zless , zmore , zcat和zgrep在壓縮文件上操作。
文件屬性可通過chattr設置,並提供文件權限的較低級別替代方案。例如,為了防止意外文件刪除不變的標誌: sudo chattr +i /critical/directory/or/file
使用getfacl和setfacl來保存和還原文件權限。例如:
getfacl -R /some/path > permissions.txt
setfacl --restore=permissions.txttruncate (創建稀疏文件), fallocate (Ext4,XFS,BTRFS和OCFS2文件系統), xfs_mkfile (幾乎所有文件系統,都來自XFSProgs軟件包), mkfile (用於諸如Solaris,Mac OS之類的Unix類系統)。 對於網絡調試, curl和curl -I很方便,或者它們的wget等效物,或者更現代的httpie 。
要了解當前的CPU/磁盤狀態,經典工具是top (或更好的htop ), iostat和iotop 。使用iostat -mxz 15進行基本CPU和詳細的每零件磁盤統計數據和績效見解。
有關網絡連接詳細信息,請使用netstat和ss 。
要快速概述系統上發生的事情, dstat特別有用。有關詳細信息的最廣泛概述,請使用glances 。
要了解內存狀態,請運行並了解free和vmstat的輸出。特別是,請注意,“緩存”值是由Linux內核作為文件緩存保存的內存,因此有效地計入“自由”值。
Java系統調試是不同的魚類,但是Oracle和其他一些JVMS的簡單技巧是,您可以運行kill -3 <pid>以及完整的堆棧跟踪和堆摘要(包括具有高度信息的垃圾收集細節,可以非常有用)將其倒入STDERR/LOGS。 JDK的jps , jstat , jstack , jmap很有用。 SJK工具更高級。
使用mtr作為更好的示踪劑,以識別網絡問題。
為了查看磁盤為何已滿, ncdu節省了時間,例如du -sh *等通常的命令。
要查找使用帶寬的插座或過程,請嘗試iftop或nethogs 。
ab工具(帶有Apache)有助於快速檢查Web服務器性能。對於更複雜的負載測試,請嘗試siege 。
有關更嚴重的網絡調試, wireshark , tshark或ngrep 。
了解strace和ltrace 。如果程序失敗,懸掛或崩潰,這些可能會有所幫助,並且您不知道為什麼,或者您想獲得一般性的性能概念。注意分析選項( -c ),以及連接到運行過程( -p )的能力。使用Trace Child選項( -f )避免丟失重要的呼叫。
了解ldd檢查共享庫等,但從未在不受信任的文件上運行它。
知道如何使用gdb連接到運行過程並獲取其堆棧跟踪。
使用/proc 。在調試現場問題時,有時會有所幫助。示例: /proc/cpuinfo , /proc/meminfo , /proc/cmdline , /proc/xxx/cwd , /proc/xxx/exe , /proc/xxx/fd/ , /proc/xxx/smaps (其中xxx是過程ID或PID)。
當調試過去出現問題的原因時, sar可能會非常有幫助。它顯示了有關CPU,內存,網絡等的歷史統計。
有關更深入的系統和性能分析,請查看stap (SystemTap), perf和sysdig 。
檢查您使用uname或uname -a (常規UNIX/內核信息)或lsb_release -a (Linux發行info)的操作系統。
每當某件事的表現真的很有趣時,請使用dmesg (可能是硬件或驅動程序問題)。
如果您刪除文件,並且沒有釋放du報告的預期磁盤空間,請檢查該文件是否通過進程使用: lsof | grep deleted | grep "filename-of-my-big-file"
將命令拼湊在一起的一些示例:
sort / uniq設置交點,聯合和文本文件差異非常有用。假設a和b是已經唯一的文本文件。這是快速的,並且可以在任意大小的文件中起作用,最多可超過許多千兆字節。 (排序不受內存的限制,儘管如果/tmp在一個小的根部分區上,則可能需要使用-T選項。)另請參閱上面關於LC_ALL註釋,然後sort 's -u選項(為了清楚以下)。 sort a b | uniq > c # c is a union b
sort a b | uniq -d > c # c is a intersect b
sort a b b | uniq -u > c # c is set difference a - b diff <(jq --sort-keys . < file1.json) <(jq --sort-keys . < file2.json) | colordiff | less -R
使用grep . *快速檢查目錄中所有文件的內容(因此每行與文件名配對)或head -100 * (因此每個文件都有一個標題)。這對於填充有配置設置(例如/sys , /proc , /etc之類的配置設置的目錄可能很有用。
在文本文件的第三列中總結所有數字(這可能快3倍,而代碼比等效的Python少3倍):
awk ' { x += $3 } END { print x } ' myfilels -l但比ls -lR更容易讀取。 find . -type f -lsacct_id參數。如果您想對每個acct_id的請求進行數量計算: egrep -o ' acct_id=[0-9]+ ' access.log | cut -d= -f2 | sort | uniq -c | sort -rn要連續監視更改,請使用watch ,例如檢查目錄中的文件更改,並使用watch -d -n 2 'ls -rtlh | tail'或網絡設置。
運行此功能以獲取此文檔的隨機提示(解析Markdown並提取項目):
function taocl() {
curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
sed ' /cowsay[.]png/d ' |
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 | iconv -t US
}expr :執行算術或布爾操作或評估正則表達式
m4 :簡單的宏處理器
yes :很多打印字符串
cal :不錯的日曆
env :運行命令(在腳本中有用)
printenv :打印出環境變量(用於調試和腳本)
look :以字符串開頭的英語單詞(或文件中的行)
cut , paste和join :數據操縱
fmt :格式文本段落
pr :格式為頁面/列
fold :文字包裝線
column :將文本字段格式為對齊,固定寬度列或表格
expand和unexpand :在選項卡和空間之間轉換
nl :添加行號
seq :打印數字
bc :計算器
factor :因子整數
gpg :加密和簽名文件
toe :Terminfo條目表
nc :網絡調試和數據傳輸
socat :插座繼電器和TCP端口轉發器(類似於netcat )
slurm :網絡流量可視化
dd :文件或設備之間的數據
file :識別文件的類型
tree :將目錄和子目錄作為嵌套樹顯示;喜歡ls ,但遞歸
stat :文件信息
time :執行和時間命令
timeout :執行指定時間的命令,並在指定的時間完成時停止該過程。
lockfile :創建只能由rm -f刪除的信號量文件
logrotate :旋轉,壓縮和郵件日誌。
watch :反復運行命令,顯示結果和/或突出顯示更改
when-changed :每當更改文件時,運行您指定的任何命令。也請參見inotifywait和entr 。
tac :反向打印文件
comm :按行比較排序的文件
strings :從二進製文件中提取文本
tr :角色翻譯或操縱
iconv或uconv :文本編碼的轉換
split和csplit :分裂文件
sponge :在編寫之前閱讀所有輸入,可用於從然後寫入同一文件,例如, grep -v something some-file | sponge some-file
units :單位轉換和計算;每兩週將Furlongs轉換為每眨眼的twips(另請參見/usr/share/units/definitions.units )
apg :生成隨機密碼
xz :高比率文件壓縮
ldd :動態庫信息
nm :來自對象文件的符號
ab或wrk :基準測試Web服務器
strace :系統呼叫調試
mtr :最好用於網絡調試的示波器
cssh :視覺並發外殼
rsync :SSH或本地文件系統中的文件和文件夾同步文件夾
wireshark和tshark :數據包捕獲和網絡調試
ngrep :網絡層的GREP
host和dig :DNS查找
lsof :過程文件描述符和套接字信息
dstat :有用的系統統計
glances :高水平,多製系統概述
iostat :磁盤用法統計
mpstat :CPU使用統計數據
vmstat :內存使用統計數據
htop :TOP的改進版本
last :登錄歷史記錄
w :誰登錄
id :用戶/組身份信息
sar :歷史系統統計
iftop或nethogs :網絡利用套件或進程
ss :插座統計
dmesg :引導和系統錯誤消息
sysctl :在運行時間查看和配置Linux內核參數
hdparm :SATA/ATA磁盤操縱/性能
lsblk :列表塊設備:磁盤和磁盤分區的樹視圖
lshw , lscpu , lspci , lsusb , dmidecode :硬件信息,包括CPU,BIOS,RAID,RAID,圖形,設備等。
lsmod和modinfo :列表並顯示內核模塊的詳細信息。
fortune , ddate和sl :嗯,嗯,這取決於您是否認為蒸汽機體和Zippy引號為“有用”
這些僅與MacOS相關。
帶有brew (自製)和/或port (MacPorts)的包裝管理。這些可用於在MacOS上安裝以上許多命令。
將任何命令的輸出複製到帶有pbcopy的桌面應用程序,並從一個帶有pbpaste粘貼輸入中輸入。
要啟用MacOS終端中的選項密鑰作為ALT密鑰(例如上述命令中使用的alt -b , Alt -F等),請打開首選項 - >配置文件 - >鍵盤 - >鍵盤,然後選擇“使用選項為meta鍵”。
要使用桌面應用程序打開文件,請使用open或open -a /Applications/Whatever.app 。
Spotlight:帶有mdfind文件,並列出了帶有mdls元數據(例如照片EXIF信息)。
請注意,MacOS基於BSD Unix,許多命令(例如ps , ls , tail , awk , sed )具有與Linux的許多微妙變化,Linux在很大程度上受System V-Style Unix和GNU工具的影響。您通常可以通過注意一個人頁面的標題“ BSD General Commands手冊”來判斷區別。在某些情況下,也可以安裝GNU版本(例如gawk和gsed for GNU AWK和SED)。如果編寫跨平台bash腳本,請避免使用此類命令(例如,考慮Python或perl )或仔細測試。
要獲取MACOS發布信息,請使用sw_vers 。
這些項目僅在Windows上相關。
通過安裝Cygwin,在Microsoft Windows下訪問Unix Shell的功率。本文檔中描述的大多數內容都將開箱即用。
在Windows 10上,您可以將Windows子系統用於Linux(WSL),該系統為UNIX命令行實用程序提供了熟悉的bash環境。
如果您主要想在Windows上使用GNU開發人員工具(例如GCC),請考慮MINGW及其MSYS軟件包,該軟件包提供諸如Bash,Gawk,Make和Grep之類的實用程序。與Cygwin相比,MSYS沒有所有功能。 MingW對於創建UNIX工具的本機Windows端口特別有用。
在Windows下獲得Unix外觀和感覺的另一個選擇是現金。請注意,在此環境中,只有很少的UNIX命令和命令行選項可用。
您可以通過學習和使用wmic從命令行執行和腳本大多數Windows系統管理任務。
本機命令行Windows網絡工具您可能會發現有用,包括ping , ipconfig , tracert和netstat 。
您可以通過調用Rundll32命令來執行許多有用的Windows任務。
使用Cygwin的軟件包管理器安裝其他UNIX程序。
使用mintty作為您的命令行窗口。
通過/dev/clipboard訪問Windows剪貼板。
Run cygstart to open an arbitrary file through its registered application.
Access the Windows registry with regtool .
Note that a C: Windows drive path becomes /cygdrive/c under Cygwin, and that Cygwin's / appears under C:cygwin on Windows. Convert between Cygwin and Windows-style file paths with cygpath . This is most useful in scripts that invoke Windows programs.
With the exception of very small tasks, code is written so others can read it. With power comes responsibility. The fact you can do something in Bash doesn't necessarily mean you should! ;)
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.