日常使用

2018-02-24 16:02 更新
  • 在 Bash 中,可以使用?Tab?自動(dòng)補(bǔ)全參數(shù),使用?ctrl-r?搜索命令行歷史。

  • 在 Bash 中,使用?ctrl-w?刪除你鍵入的最后一個(gè)單詞,使用?ctrl-u?刪除整行,使用?alt-b?和?alt-f?按單詞移動(dòng),使用ctrl-k?從光標(biāo)處刪除到行尾,使用?ctrl-l?清屏。鍵入?man readline?查看 Bash 中的默認(rèn)快捷鍵,內(nèi)容很多。例如?alt-.循環(huán)地移向前一個(gè)參數(shù),以及?**alt-*** 展開通配符。

  • 你喜歡的話,可以鍵入?set -o vi?來使用 vi 風(fēng)格的快捷鍵。

  • 鍵入?history?查看命令行歷史記錄。其中有許多縮寫,例如?!$(最后鍵入的參數(shù))和?!!(最后鍵入的命令),盡管通常被?ctrl-r?和?alt-.?取代。

  • 回到上一個(gè)工作路徑:cd -

  • 如果你輸入命令的時(shí)候改變了主意,按下?alt-#?在行首添加?#(將你輸入的命令視為注釋),并回車。這樣做的話,之后你可以很方便的利用命令行歷史回到你剛才輸入到一半的命令。

  • 使用?xargs?( 或?parallel)。他們非常給力。注意到你可以控制每行參數(shù)個(gè)數(shù)(-L)和最大并行數(shù)(-P)。如果你不確定它們是否會(huì)按你想的那樣工作,先使用?xargs echo?查看一下。此外,使用?-I{}?會(huì)很方便。例如:
      find . -name '*.py' | xargs grep some_function
      cat hosts | xargs -I{} ssh root@{} hostname
  • pstree -p?有助于展示進(jìn)程樹。

  • 使用?pgrep?和?pkill?根據(jù)名字查找進(jìn)程或發(fā)送信號(hào)。

  • 了解你可以發(fā)往進(jìn)程的信號(hào)的種類。比如,使用?kill -STOP [pid]?停止一個(gè)進(jìn)程。使用?man 7 signal?查看詳細(xì)列表。

  • 使用?nohup?或?disown?使一個(gè)后臺(tái)進(jìn)程持續(xù)運(yùn)行。

  • 使用?netstat -lntp?或?ss -plat?檢查哪些進(jìn)程在監(jiān)聽端口(默認(rèn)是檢查 TCP 端口; 使用參數(shù)?-u?檢查 UDP 端口)。

  • 有關(guān)打開套接字和文件,請(qǐng)參閱?lsof。

  • 使用?uptime?或?w?來查看系統(tǒng)已經(jīng)運(yùn)行多長(zhǎng)時(shí)間。

  • 使用alias來創(chuàng)建常用命令的快捷形式。例如:alias ll='ls -latr'使你可以方便地執(zhí)行ls -latr命令。

  • 在 Bash 腳本中,使用?set -x?去調(diào)試輸出,盡可能的使用嚴(yán)格模式,使用?set -e?令腳本在發(fā)生錯(cuò)誤時(shí)退出而不是繼續(xù)運(yùn)行,使用?set -o pipefail?嚴(yán)謹(jǐn)?shù)貙?duì)待錯(cuò)誤(盡管問題可能很微妙)。當(dāng)牽扯到很多腳本時(shí),使用?trap。

  • 在 Bash 腳本中,子 shell(使用括號(hào)(...))是一種便捷的方式去組織參數(shù)。一個(gè)常見的例子是臨時(shí)地移動(dòng)工作路徑,代碼如下:
      # do something in current dir
      (cd /some/other/dir && other-command)
      # continue in original dir
  • 在 Bash 中,注意到其中有許多形式的擴(kuò)展。檢查變量是否存在:${name:?error message}。例如,當(dāng) Bash 腳本需要一個(gè)參數(shù)時(shí),可以使用這樣的代碼?input_file=${1:?usage: $0 input_file}。數(shù)學(xué)表達(dá)式:i=$(( (i + 1) % 5 ))。序列:{1..10}。 截?cái)嘧址?code>${var%suffix}?和?${var#prefix}。例如,假設(shè)?var=foo.pdf,那么?echo ${var%.pdf}.txt?將輸出?foo.txt。

  • 通過使用?<(some command)?可以將輸出視為文件。例如,對(duì)比本地文件?/etc/hosts?和一個(gè)遠(yuǎn)程文件:
      diff /etc/hosts <(ssh somehost cat /etc/hosts)
  • 了解 Bash 中的“here documents”,例如?cat <<EOF ...。

  • 在 Bash 中,同時(shí)重定向標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤,some-command >logfile 2>&1。通常,為了保證命令不會(huì)在標(biāo)準(zhǔn)輸入里殘留一個(gè)打開了的文件句柄導(dǎo)致你當(dāng)前所在的終端無法操作,添加?</dev/null?是一個(gè)好習(xí)慣。

  • 使用?man ascii?查看具有十六進(jìn)制和十進(jìn)制值的ASCII表。man unicode,man utf-8,以及?man latin1?有助于你去了解通用的編碼信息。

  • 使用?screen?或?tmux?來使用多個(gè)屏幕,當(dāng)你在使用 ssh 時(shí)(保存 session 信息)將尤為有用。另一個(gè)輕量級(jí)的解決方案是?dtach。

  • ssh 中,了解如何使用?-L?或?-D(偶爾需要用?-R)去開啟隧道是非常有用的,例如當(dāng)你需要從一臺(tái)遠(yuǎn)程服務(wù)器上訪問 web。

  • 對(duì) ssh 設(shè)置做一些小優(yōu)化可能是很有用的,例如這個(gè)?~/.ssh/config?文件包含了防止特定環(huán)境下斷開連接、壓縮數(shù)據(jù)、多通道等選項(xiàng):
      TCPKeepAlive=yes
      ServerAliveInterval=15
      ServerAliveCountMax=6
      Compression=yes
      ControlMaster auto
      ControlPath /tmp/%r@%h:%p
      ControlPersist yes
  • 部分其他的關(guān)于 ssh 的選項(xiàng)是安全敏感且應(yīng)當(dāng)小心啟用的。例如在可信任的網(wǎng)絡(luò)中:StrictHostKeyChecking=no,ForwardAgent=yes

  • 獲取文件的八進(jìn)制格式權(quán)限,使用類似如下的代碼:
      stat -c '%A %a %n' /etc/timezone
  • 使用?percol?或者?fzf?可以交互式地從另一個(gè)命令輸出中選取值。

  • 使用?fppPathPicker)可以與基于另一個(gè)命令(例如?git)輸出的文件交互。

  • 將 web 服務(wù)器上當(dāng)前目錄下所有的文件(以及子目錄)暴露給你所處網(wǎng)絡(luò)的所有用戶,使用:?python -m SimpleHTTPServer 7777?(使用端口 7777 和 Python 2)或python -m http.server 7777?(使用端口 7777 和 Python 3)。

  • 以某種權(quán)限執(zhí)行命令,使用sudo(root 權(quán)限)或sudo -u(其他用戶)。使用su或者sudo bash來啟動(dòng)一個(gè)以對(duì)應(yīng)用戶權(quán)限運(yùn)行的 shell。使用su -模擬其他用戶的登錄。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)