萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> Linux命令行的日常使用技術

Linux命令行的日常使用技術

  有人說Linux的命令行就是一種藝術,由命令行形成的Linux系統的架構呈現豐富多變的樣貌,這就才是Linux的魅力所在。本文就來介紹一下Linux命令行的日常使用技術。

Linux命令行的日常使用技術

  curl -s ‘https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md’ | egrep -o ‘`\w+`’ | tr -d ‘`’ | cowsay -W50

  流暢地使用命令行是一個常被忽略的技能,或被認為是神秘的奧義。但是,它會以明顯而微妙的方式改善你作為工程師的靈活度和生產力。這是我在 Linux 上工作時發現的有用的命令行使用小竅門和筆記的精粹。有些小竅門是很基礎的,而有些是相當地特別、復雜、或者晦澀難懂。這篇文章不長,但是如果你可以使用並記得這裡的所有內容,那麼你就懂得很多了。

  其中大部分最初出現在Quora上,但是考慮到興趣所在,似乎更應該放到 Github 上,這裡的人比我更能提出改進建議。如果你看到一個錯誤,或者更好的某種東西,請提交問題或 PR!(當然,提交前請看看必讀小節和已有的 PR/Issue。)

  必讀

  范圍:

  本文是針對初學者和專業人員的,選題目標是覆蓋面廣(全都很重要)、有針對性(大多數情況下都給出具體實例)而簡潔(避免不必要內容以及你能在其它地方輕松找到的離題的內容)。每個小竅門在某種情形下都很必需的,或者能比替代品大大節省時間。

  這是為 Linux 寫的。絕大部分條目都可以同樣應用到 MacOS(或者甚至 Cygwin)。

  主要針對交互式 Bash,盡管大多數小竅門也可以應用到其它 shell,以及常規 Bash 腳本。

  包括了“標准的”UNIX 命令以及那些需要安裝的軟件包(它們很重要,值得安裝)。

  注意:

  為了能在一篇文章內展示盡量多的東西,一些具體的信息會被放到引用頁裡。你可以使用 Google 來獲得進一步的內容。(如果需要的話,)你可以使用 apt-get/yum/dnf/pacman/pip/brew 來安裝這些新的程序。

  使用 Explainshell 來獲取命令、參數、管道等內容的解釋。

  基礎

  學習基本 Bash 技能。實際上,鍵入man bash,然後至少浏覽一遍所有內容;它很容易理解,沒那麼長。其它 shell 也不錯,但是 Bash 很強大,而且到處都可以找到(如果在你自己的筆記本上只學習 zsh、fish 之類,會在很多情形下受到限制,比如使用現存的服務器時)。

  至少學好一種基於文本的編輯器。理想的一個是 Vim(vi),因為在終端中編輯時隨時都能找到它(即使大多數時候你在使用 Emacs、一個大型的 IDE、或一個現代的時髦編輯器)。

  學習怎樣使用 man 來閱讀文檔(好奇的話,用 man man 來列出分區號,比如 1 是常規命令,5 是文件描述,8 用於管理員)。用 apropos 找到幫助頁。了解哪些命令不是可執行程序,而是 Bash 內置的,你可以用 help 和 help -d 得到幫助。

  學習使用 》 和 《 來進行輸出和輸入重定向,以及使用 | 來管道重定向,學習關於 stdout 和 stderr 的東西。

  學習 *(也許還有 ? 和 {。..} )文件通配擴展和應用,以及雙引號 “ 和單引號 ‘ 之間的區別。(更多內容請參看下面關於變量擴展部分)。

  熟悉 Bash 作業管理:&, ctrl-z, ctrl-c, jobs, fg, bg, kill 等等。

  掌握ssh,以及通過 ssh-agent,ssh-add 等進行無密碼驗證的基礎技能。

  基本的文件管理:ls 和 ls -l(特別是,知道ls -l各個列的意義),less, head, tail 和 tail -f(或者更好的less +F),ln 和 ln -s(知道硬鏈接和軟鏈接的區別,以及硬鏈接相對於軟鏈接的優勢),chown,chmod,du(用於查看磁盤使用率的快速摘要:du -sk *)。文件系統管理:df, mount,fdisk,mkfs,lsblk。

  基本的網絡管理: ip 或 ifconfig,dig。

  熟知正則表達式,以及各種使用grep/egrep的選項。-i,-o,-A 和 -B 選項值得掌握。

  學會使用 apt-get,yum ,dnf 或 pacman(這取決於你的發行版)來查找並安裝軟件包。確保你可以用 pip 來安裝基於 Python 的命令行工具(下面的一些東西可以很容易地通過 pip 安裝)。 上一頁123456下一頁共6頁

  日常使用

  在Bash中,使用 tab 補完參數,使用 ctrl-r 來搜索命令歷史。

  在Bash中,使用 ctrl-w 來刪除最後的單詞,使用 ctrl-u 來刪除整行,返回行首。使用 alt-b 和alt-f 來逐詞移動,使用 ctrl-k 來清除到行尾的內容,以及使用 ctrl-l 清屏。參見 man readline來查看 Bash 中所有默認的鍵盤綁定,有很多。例如,alt-。 可以循環顯示先前的參數,而alt- 擴展通配。(LCTT 譯注:關於 Bash 下的快捷鍵,可以參閱: https://linux.cn/article-5660-1.html)

  另外,如果你喜歡 vi 風格的鍵盤綁定,可以使用 set -o vi。

  要查看最近用過的命令,請使用 history 。 有許多縮寫形式,比如 !$(上次的參數)和!!(上次的命令),雖然使用 ctrl-r 和 alt-。 更容易些。(LCTT 譯注:關於歷史擴展功能,可以參閱: https://linux.cn/article-5658-1.html )

  返回先前的工作目錄: 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,對 UDP 使用 -u 替代 -t)。

  lsof來查看打開的套接字和文件。

  在 Bash 腳本中,使用 set -x 調試腳本輸出。盡可能使用嚴格模式。使用 set -e 在遇到錯誤時退出。也可以使用 set -o pipefail,對錯誤進行嚴格處理(雖然該話題有點微妙)。對於更復雜的腳本,也可以使用 trap。

  在 Bash 腳本中,子 shell(寫在括號中的)是組合命令的便利的方式。一個常見的例子是臨時移動到一個不同的工作目錄,如:

  # 在當前目錄做些事

  (cd /some/other/dir; other-command)

  # 繼續回到原目錄

  注意,在 Bash 中有大量的各種各樣的變量擴展。檢查一個變量是否存在:${name:?error message}。例如,如果一個Bash腳本要求一個單一參數,只需寫 input_file=${1:?usage: $0 input_file}。算術擴展:i=$(( (i + 1) % 5 ))。序列: {1..10}。修剪字符串:${var%suffix} 和${var#prefix}。例如,if var=foo.pdf ,那麼 echo ${var%.pdf}.txt 會輸出 foo.txt。

  命令的輸出可以通過 《(some command) 作為一個文件��處理。例如,將本地的 /etc/hosts 和遠程的比較:

  diff /etc/hosts 《(ssh somehost cat /etc/hosts)

  了解 Bash 中的“嵌入文檔”,就像在 cat 《《EOF 。.. 中。

  在 Bash 中,通過:some-command 》logfile 2》&1 同時重定向標准輸出和標准錯誤。通常,要確保某個命令不再為標准輸入打開文件句柄,而是將它捆綁到你所在的終端,添加 《/dev/null 是個不錯的做法。

  man ascii 可以得到一個不錯的ASCII表,帶有十六進制和十進制值兩種格式。對於常規編碼信息,man unicode,man utf-8 和 man latin1 將很有幫助。

  使用 screen 或 tmux 來復用屏幕,這對於遠程 ssh 會話尤為有用,使用它們來分離並重連到會話。另一個只用於保持會話的最小可選方案是 dtach。

  在 ssh 中,知道如何使用 -L 或 -D(偶爾也用-R)來打開端口通道是很有用的,如從一台遠程服務器訪問網站時。

  為你的 ssh 配置進行優化很有用;例如,這個 ~/.ssh/config 包含了可以避免在特定網絡環境中連接被斷掉的情況的設置、使用壓縮(這對於通過低帶寬連接使用 scp 很有用),以及使用一個本地控制文件來開啟到同一台服務器的多通道:

  TCPKeepAlive=yes

  ServerAliveInterval=15

  ServerAliveCountMax=6

  Compression=yes

  ControlMasterauto

  ControlPath/tmp/%r@%h:%p

  ControlPersist yes

copyright © 萬盛學電腦網 all rights reserved