Linux terminal 或許是Linux 上最頻繁用到的工具之一。有個用的順手的命令列,大大提高工作生活效率。
下面來看看:
1. 命令列提示符號
通過定義一組預先定義好的一組值,以及控制PS1 和PS2 環境變數來控制提示符號.
echo $PS1
通過修改直接生效。比如讓命令列來顯示命令的行號。
export PS1="\#" 來顯示命令列號
可以通過man bash 開查看,搜key world: PS1
2. tab 補全
補全文集名,補全命令,補全環境變數都支援。 double press Tab key.
3. 命令列的中位置跳轉和編輯
比如從當前位置(游標)返回到行頭或者行尾,向前跳轉一個單詞或者向後,如果vim 裡面的快速鍵。
有很多功能支援,可以通過bind -p 來查看。 同時也可以修改到.bash.rc 檔案中儲存。
常用的: 獲得上次啟動並執行參數,比如C-1, M-.(也就是上一次運行命令的第一個參數)
M-. 預設獲得上次啟動並執行最後一個參數。
M-#( Alt-Shift-3) 可以將該命令給注釋掉。
C-a / C-e 移動到行頭或者行尾。
C-w 刪掉之前一個單詞。 當然這些都可以設定成適合自己的鍵。
還有命令列擴充 : M-*'(insert-completions)
可以將 ls t* 擴充為 ls test.txt test.cpp.(假設目前的目錄有連個以test開頭的我檔案名稱)
'C-x*'(先按ctrl-x,然後按*) 也可以補全(glob-expand-word)
ls *.txt 將擴充為 ls test.txt log.txt (假設目前的目錄只有連個以txt為尾碼的檔案名稱)
"\C-g": abort"\C-x\C-g": abort"\e\C-g": abort"\C-j": accept-line"\C-m": accept-line# alias-expand-line (not bound)# arrow-key-prefix (not bound)# backward-byte (not bound)"\C-b": backward-char"\eOD": backward-char"\e[D": backward-char"\C-h": backward-delete-char"\C-?": backward-delete-char"\C-x\C-?": backward-kill-line"\e\C-h": backward-kill-word"\e\C-?": backward-kill-word"\eb": backward-word"\e<": beginning-of-history"\C-a": beginning-of-line"\eOH": beginning-of-line"\e[H": beginning-of-line"\C-xe": call-last-kbd-macro"\ec": capitalize-word"\C-]": character-search"\e\C-]": character-search-backward"\C-l": clear-screen"\C-i": complete"\e\e": complete"\e!": complete-command"\e/": complete-filename"\e@": complete-hostname"\e{": complete-into-braces"\e~": complete-username"\e$": complete-variable# copy-backward-word (not bound)# copy-forward-word (not bound)# copy-region-as-kill (not bound)# dabbrev-expand (not bound)"\C-d": delete-char"\e[3~": delete-char# delete-char-or-list (not bound)"\e\\": delete-horizontal-space"\e-": digit-argument"\e0": digit-argument"\e1": digit-argument"\e2": digit-argument"\e3": digit-argument"\e4": digit-argument"\e5": digit-argument"\e6": digit-argument"\e7": digit-argument"\e8": digit-argument"\e9": digit-argument"\C-x\C-v": display-shell-version"\C-xA": do-lowercase-version"\C-xB": do-lowercase-version"\C-xC": do-lowercase-version"\C-xD": do-lowercase-version"\C-xE": do-lowercase-version"\C-xF": do-lowercase-version"\C-xG": do-lowercase-version"\C-xH": do-lowercase-version"\C-xI": do-lowercase-version"\C-xJ": do-lowercase-version"\C-xK": do-lowercase-version"\C-xL": do-lowercase-version"\C-xM": do-lowercase-version"\C-xN": do-lowercase-version"\C-xO": do-lowercase-version"\C-xP": do-lowercase-version"\C-xQ": do-lowercase-version"\C-xR": do-lowercase-version"\C-xS": do-lowercase-version"\C-xT": do-lowercase-version"\C-xU": do-lowercase-version"\C-xV": do-lowercase-version"\C-xW": do-lowercase-version"\C-xX": do-lowercase-version"\C-xY": do-lowercase-version"\C-xZ": do-lowercase-version"\eA": do-lowercase-version"\eB": do-lowercase-version"\eC": do-lowercase-version"\eD": do-lowercase-version"\eE": do-lowercase-version"\eF": do-lowercase-version"\eG": do-lowercase-version"\eH": do-lowercase-version"\eI": do-lowercase-version"\eJ": do-lowercase-version"\eK": do-lowercase-version"\eL": do-lowercase-version"\eM": do-lowercase-version"\eN": do-lowercase-version"\eP": do-lowercase-version"\eQ": do-lowercase-version"\eR": do-lowercase-version"\eS": do-lowercase-version"\eT": do-lowercase-version"\eU": do-lowercase-version"\eV": do-lowercase-version"\eW": do-lowercase-version"\eX": do-lowercase-version"\eY": do-lowercase-version"\eZ": do-lowercase-version"\el": downcase-word# dump-functions (not bound)# dump-macros (not bound)# dump-variables (not bound)"\e\C-i": dynamic-complete-history"\C-x\C-e": edit-and-execute-command# emacs-editing-mode (not bound)"\C-x)": end-kbd-macro"\e>": end-of-history"\C-e": end-of-line"\eOF": end-of-line"\e[F": end-of-line"\C-x\C-x": exchange-point-and-mark# forward-backward-delete-char (not bound)# forward-byte (not bound)"\C-f": forward-char"\eOC": forward-char"\e[C": forward-char"\C-s": forward-search-history"\ef": forward-word"\eg": glob-complete-word"\C-x*": glob-expand-word"\C-xg": glob-list-expansions# history-and-alias-expand-line (not bound)"\e^": history-expand-line# history-search-backward (not bound)# history-search-forward (not bound)"\e#": insert-comment"\e*": insert-completions"\e.": insert-last-argument"\e_": insert-last-argument# kill-line (not bound)"\C-k": kill-region# kill-whole-line (not bound)"\ed": kill-word# magic-space (not bound)# menu-complete (not bound)# menu-complete-backward (not bound)"\C-n": next-history"\eOB": next-history"\e[B": next-history"\en": non-incremental-forward-search-history# non-incremental-forward-search-history-again (not bound)"\ep": non-incremental-reverse-search-history# non-incremental-reverse-search-history-again (not bound)# old-menu-complete (not bound)"\C-o": operate-and-get-next# overwrite-mode (not bound)"\C-x!": possible-command-completions"\e=": possible-completions"\e?": possible-completions"\C-x/": possible-filename-completions"\C-x@": possible-hostname-completions"\C-x~": possible-username-completions"\C-x$": possible-variable-completions"\C-p": previous-history"\eOA": previous-history"\e[A": previous-history"\C-q": quoted-insert"\C-v": quoted-insert# redraw-current-line (not bound)"\C-x\C-r": re-read-init-file"\C-r": reverse-search-history"\e\C-r": revert-line"\er": revert-line" ": self-insert"!": self-insert"\"": self-insert"#": self-insert"$": self-insert"%": self-insert"&": self-insert"'": self-insert"(": self-insert")": self-insert"*": self-insert"+": self-insert",": self-insert"-": self-insert".": self-insert"/": self-insert"0": self-insert"1": self-insert"2": self-insert"3": self-insert"4": self-insert"5": self-insert"6": self-insert"7": self-insert"8": self-insert"9": self-insert":": self-insert";": self-insert"<": self-insert"=": self-insert">": self-insert"?": self-insert"@": self-insert"A": self-insert"B": self-insert"C": self-insert"D": self-insert"E": self-insert"F": self-insert"G": self-insert"H": self-insert"I": self-insert"J": self-insert"K": self-insert"L": self-insert"M": self-insert"N": self-insert"O": self-insert"P": self-insert"Q": self-insert"R": self-insert"S": self-insert"T": self-insert"U": self-insert"V": self-insert"W": self-insert"X": self-insert"Y": self-insert"Z": self-insert"[": self-insert"\\": self-insert"]": self-insert"^": self-insert"_": self-insert"`": self-insert"a": self-insert"b": self-insert"c": self-insert"d": self-insert"e": self-insert"f": self-insert"g": self-insert"h": self-insert"i": self-insert"j": self-insert"k": self-insert"l": self-insert"m": self-insert"n": self-insert"o": self-insert"p": self-insert"q": self-insert"r": self-insert"s": self-insert"t": self-insert"u": self-insert"v": self-insert"w": self-insert"x": self-insert"y": self-insert"z": self-insert"{": self-insert"|": self-insert"}": self-insert"~": self-insert"\200": self-insert"\201": self-insert"\202": self-insert"\203": self-insert"\204": self-insert"\205": self-insert"\206": self-insert"\207": self-insert"\210": self-insert"\211": self-insert"\212": self-insert"\213": self-insert"\214": self-insert"\215": self-insert"\216": self-insert"\217": self-insert"\220": self-insert"\221": self-insert"\222": self-insert"\223": self-insert"\224": self-insert"\225": self-insert"\226": self-insert"\227": self-insert"\230": self-insert"\231": self-insert"\232": self-insert"\233": self-insert"\234": self-insert"\235": self-insert"\236": self-insert"\237": self-insert" ": self-insert"¡": self-insert"¢": self-insert"£": self-insert"€": self-insert"¥": self-insert"Š": self-insert"§": self-insert"š": self-insert"": self-insert"ª": self-insert"«": self-insert"¬": self-insert"": self-insert"": self-insert"¯": self-insert"°": self-insert"±": self-insert"²": self-insert"³": self-insert"Ž": self-insert"µ": self-insert"¶": self-insert"·": self-insert"ž": self-insert"¹": self-insert"º": self-insert"»": self-insert"Œ": self-insert"œ": self-insert"Ÿ": self-insert"¿": self-insert"À": self-insert"Á": self-insert"Â": self-insert"Ã": self-insert"Ä": self-insert"Å": self-insert"Æ": self-insert"Ç": self-insert"È": self-insert"É": self-insert"Ê": self-insert"Ë": self-insert"Ì": self-insert"Í": self-insert"Î": self-insert"Ï": self-insert"Ð": self-insert"Ñ": self-insert"Ò": self-insert"Ó": self-insert"Ô": self-insert"Õ": self-insert"Ö": self-insert"×": self-insert"Ø": self-insert"Ù": self-insert"Ú": self-insert"Û": self-insert"Ü": self-insert"Ý": self-insert"Þ": self-insert"ß": self-insert"à": self-insert"á": self-insert"â": self-insert"ã": self-insert"ä": self-insert"å": self-insert"æ": self-insert"ç": self-insert"è": self-insert"é": self-insert"ê": self-insert"ë": self-insert"ì": self-insert"í": self-insert"î": self-insert"ï": self-insert"ð": self-insert"ñ": self-insert"ò": self-insert"ó": self-insert"ô": self-insert"õ": self-insert"ö": self-insert"÷": self-insert"ø": self-insert"ù": self-insert"ú": self-insert"û": self-insert"ü": self-insert"ý": self-insert"þ": self-insert"ÿ": self-insert"\C-@": set-mark"\e ": set-mark# shell-backward-kill-word (not bound)# shell-backward-word (not bound)"\e\C-e": shell-expand-line# shell-forward-word (not bound)# shell-kill-word (not bound)# skip-csi-sequence (not bound)"\C-x(": start-kbd-macro# tab-insert (not bound)"\e&": tilde-expand"\C-t": transpose-chars"\et": transpose-words# tty-status (not bound)"\C-x\C-u": undo"\C-_": undo# universal-argument (not bound)# unix-filename-rubout (not bound)"\C-u": unix-line-discard"\C-w": unix-word-rubout"\eu": upcase-word# vi-append-eol (not bound)# vi-append-mode (not bound)# vi-arg-digit (not bound)# vi-back-to-indent (not bound)# vi-bword (not bound)# vi-bWord (not bound)# vi-change-case (not bound)# vi-change-char (not bound)# vi-change-to (not bound)# vi-char-search (not bound)# vi-column (not bound)# vi-complete (not bound)# vi-delete (not bound)# vi-delete-to (not bound)# vi-editing-mode (not bound)# vi-end-word (not bound)# vi-eof-maybe (not bound)# vi-eword (not bound)# vi-eWord (not bound)# vi-fetch-history (not bound)# vi-first-print (not bound)# vi-fword (not bound)# vi-fWord (not bound)# vi-goto-mark (not bound)# vi-insert-beg (not bound)# vi-insertion-mode (not bound)# vi-match (not bound)# vi-movement-mode (not bound)# vi-next-word (not bound)# vi-overstrike (not bound)# vi-overstrike-delete (not bound)# vi-prev-word (not bound)# vi-put (not bound)# vi-redo (not bound)# vi-replace (not bound)# vi-rubout (not bound)# vi-search (not bound)# vi-search-again (not bound)# vi-set-mark (not bound)# vi-subst (not bound)# vi-tilde-expand (not bound)# vi-yank-arg (not bound)# vi-yank-to (not bound)"\C-y": yank"\e.": yank-last-arg"\e_": yank-last-arg"\e\C-y": yank-nth-arg"\ey": yank-pop
4. alias
別名,對於經常用到的自訂命令可以用shellout方式封裝一下,或者最簡單的就是別名。
5. 設定檔
上面這些都個放到設定檔裡,避免一次有一次的修改. 放在.bashrc 中,同時在.profile 檔案裡面調用bashrc.
進一步可以把這個檔案放到雲上面去,通過One Ubuntu 來同步不同電腦之間被的設定檔。 這樣所有的機器,即使從新裝機,也不用怕配額之檔案丟失,也不用再去修改。
強烈建議做這麼一次,公欲利其事必先利其器:)
reference:
http://www.kerneltravel.net/newbie/bash_readline.htm