歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux用戶都應了解的命令行省時技巧

Linux用戶都應了解的命令行省時技巧

日期:2017/2/25 11:49:57   编辑:關於Linux

  有網友在問答網站Quora上提問:“有哪些省時小技巧,是每個Linux用戶都應該知道的?” Joshua Levy 平常就在 Linux 平台工作,並且他積累了不少實用命令行技巧,他在回復中精選出一部分。對技術用戶來說,這些技巧挺重要或實用,但知道的人並不多。下文略有點長,一般來說,用戶也不需要對全部內容都了解,但為了達到省時方便的目的,Joshua Levy 仍不遺余力做了校對,以保證列出的每一條都值得一讀,前提是你是一位Linux重度用戶。

  為了獲取文中提到的一個命令的更多信息,先試下“man <命令名稱>”,在一些情況下,為了讓這條命令可以正常執行,你必須安裝相應的包,可以用aptitude 或者 yum。如果失敗了,求助Google。

  基礎篇

  學習基礎的Bash。事實上,讀整個的bash的幫助手冊;很容易理解而且篇幅也不算長。其他一些可選的shell外觀可能更漂亮,但是bash功能很強大而且總是能用(主要學習zsh或者tcsh在很多情況下你會受到限制)。

  學習vim,對於Linux下的隨機編輯,幾乎沒有工具能出其右(即使你大部分的時間裡都在使用Emacs或者Eclipse)。

  通過ssh-agent,ssh-add等命令,了解ssh,以及跳過每次登陸時密碼驗證的基礎辦法,。

  熟悉bash下的工作管理: &,Ctrl-Z,Ctrl-C,jobs,fg,bg,kill, 等等。

  基礎的文件管理:ls 以及 ls -l (特別的,學習”ls -l”中列出的每一列字段的含義),less,head,tail,tail -f,ln,ln -s (學習軟鏈接和硬鏈接的區別),chown,chmod,du(快速了解磁盤總體占用情況),df,mount。

  基礎的網絡管理命令:ip 或者 ifconfig,dig。

  了解正則表達式,以及grep、egrep的不同命令選項,-0,-A,-B 都值得了解一下。

  學習使用apt-get 或者 yum(取決於你的發行包)來找到並安裝你需要的包.

  日常使用篇

  使用bash時,用Ctrl-R來搜索命令的歷史記錄。

  使用bash時,用Ctrl-W來清除最後一個單詞,使用Ctrl-U來清除整行。可以查看man readline來獲取bash裡面默認鍵的綁定設置。內容很多。比如Alt-.(注:點)遍歷之前命令中使用過的參數,Alt-* 擴展了參數的匹配模式。

  回到上次的工作目錄:cd -。

  如果你的命令敲到一半時改變了主意,可以用Alt-#來在命令前面增加一個#,使之成為一行注釋(或者使用Ctrl-A回到命令開頭,然後再鍵入#)。你可以之後再通過搜索歷史記錄回來。

  使用xargs(或者parallel)。它非常強大。注意你能控制每一行(-L)執行多少項,也能控制如何並發(- P)。如果你不太確定它會如你所願的工作,先使用xargs。 再者,-l{} 很有用。例如:

  find . -name \*.py | xargs grep some_function
  cat hosts | xargs -l{} ssh root@{} hostname
  pstree -p 可以很方便的顯示整個進程樹。

  使用pgrep 和pkill 來通過名字來發現進程或者給進程發信號(-f選項會有用)。

  了解你能向進程發送的信號種類。比如,要掛起一個進程,使用kill -STOP [進程ID]。要了解整個列表,請參考man 7 signal。

  如果你想讓一個後台進程一直運行,使用nohup or disown 。

  通過netstat -lntp 來檢測哪些進程在監聽。同樣可以用lsof。

  bash腳本中,使用set -x 來調試輸出。使用set -e在有錯誤時終止時終止執行。要想嚴格輸出錯誤,可以考慮使用set -o pipefail(雖然這個主題說起來有些復雜)。對於更復雜的腳本,也可以使用trap。

  bash腳本中,子shell(通過寫在括號裡)是一種組織命令的方便的方法。一個很常見的例子是暫時移動到另外一個工作目錄,例如:

  #在當前目錄下做一些事情
  (cd /一些/另外的/目錄;執行別的操作)
  #繼續在原來的目錄下執行

  要注意bash中有很多種變量表達式。檢查一個變量是否存在:${name:?錯誤信息}。例如:如果一個bash腳本需要一個單變量,只需要寫input_file=${1:?usage: $0 inpute_file}。數值擴展:i=$({(i+1)%5})。序列:{1..10}。字符串的整理:${var%suffix} 和${var#prefix}。例如:

  if var==foo.pdf, then echo ${var%.pdf}.txt #會打印"foo.txt"。

  通過 <(其他指令),一條命令的輸出可以被當作是一個文件的內容來對待。 例如,比較本地和遠程的 /etc/hosts 文件,可以用diff /etc/hosts <(ssh [遠程主機] cat /etc/hosts)。

  了解bash中的“here documents”,比如 cat <<EOF …

  bash中,通過 其他指令 > 日志文件 2>&1 把標准輸出以及標准錯誤重定向。常見的情況是,為了保證一條指令沒有為標准輸入留下一個打開的文件描述符,從而輸出至你當前所在的終端,增加“</dev/null” 也是好的習慣。

  用man ascii可以得到一個完整的ASCII表,有對應的16進制和10進制的值。

  通過ssh連接遠程終端時,使用screen或者dtach 來保持你的session,防止被打斷。在ssh中,了解如何使用-L或者-D選項(有時也會用到-R)會很有用處,比如,如果通過從一個遠程的服務器訪問一個網頁。

  優化你的SSH選項也可能管用。比如,下面的.ssh/config 內容在一些網絡環境下可以防止連接掉線,當連接到新主機時不需要再次確認,跳轉驗證,並且還使用了壓縮(對在一些低寬帶的連接環境下使用scp時會有幫助)。

  TCPKeepAlive=yes
  ServerAliveInterval=15
  ServerAliveCountMax=6
  StrictHostKeyChecking=no
  Compression=yes
  ForwardAgent=yes
上一頁123下一頁查看全文 內容導航
  • 第1頁:命令行省時技巧之基礎篇
  • 第2頁:命令行省時技巧之數據處理篇
  • 第3頁:命令行省時技巧之系統調試篇
Copyright © Linux教程網 All Rights Reserved