在Debian的類Unix工作環(huán)境中,用戶可以享受到許多特性和功能。首先,Debian提供了一個完整的命令行界面,使用戶能夠通過終端交互與系統(tǒng)進(jìn)行互動。這使得用戶能夠方便地執(zhí)行各種任務(wù),包括文件管理、進(jìn)程控制、網(wǎng)絡(luò)配置等。
盡管Minecraft(MC)幾乎可以做任何事情,但學(xué)會在shell提示符下使用命令行工具同樣非常重要。這樣可以更加熟悉類Unix工作環(huán)境,并提供更多的靈活性和控制力。無論是在服務(wù)器管理、軟件開發(fā)還是系統(tǒng)維護(hù)方面,掌握命令行工具都是一個寶貴的技能。通過使用命令行,可以執(zhí)行各種任務(wù),如文件管理、進(jìn)程控制和網(wǎng)絡(luò)配置等。
一、登錄 shell
因登錄 shell 可以被一些系統(tǒng)初始化程序使用,請謹(jǐn)慎的把登錄 shell 保持為 bash(1) ,并避免把它轉(zhuǎn)換為 chsh(1)。
如果想使用不同的 shell 交互提示符,從 GUI(圖形用戶界面)的終端模擬器來設(shè)置;或者從 ~/.bashrc 啟動,比如說,在里面放置”exec /usr/bin/zsh -i -l” 或 “exec /usr/bin/fish -i -l”。
shell程序列表:
軟件包 | 流行度 | 大小 | POSIX shell | 說明 |
bash | V:836, I:999 | 7175 | 是 | Bash: GNU Bourne Again SHell (事實(shí)上的標(biāo)準(zhǔn)) |
bash-completion | V:33, I:932 | 1454 | N/A | bash shell 編程補(bǔ)全 |
dash | V:886, I:996 | 191 | 是 | Debian Almquist Shell, 擅長 shell 腳本 |
zsh | V:40, I:73 | 2462 | 是 | Z shell:有許多增強(qiáng)的標(biāo)準(zhǔn) shell |
tcsh | V:6, I:21 | 1355 | No | TENEX C Shell: 一個 Berkeley csh?的增強(qiáng)版本 |
mksh | V:4, I:12 | 1566 | 是 | Korn shell 的一個版本 |
csh | V:1, I:6 | 339 | No | OpenBSD?C Shell, Berkeley csh?的一個版本 |
sash | V:0, I:5 | 1157 | 是 | 有內(nèi)置命令的 Stand-alone shell (并不意味著標(biāo)準(zhǔn)的 “/usr/bin/sh”) |
ksh | V:1, I:11 | 61 | 是 | Korn shell的真正的 AT&T 版本 |
rc | V:0, I:1 | 178 | No | AT&T Plan 9?rc shell?的一個實(shí)現(xiàn) |
posh | V:0, I:0 | 190 | 是 | Policy-compliant Ordinary SHell 策略兼容的普通 shell(pdksh?派生) |
雖然類 POSIX 共享基本語法,但他們在 shell 變量和全局?jǐn)U展等基本事情上,行為可以不同。細(xì)節(jié)請查閱他們的文檔。
注意:在本教程中,交互式的 shell 總是指 bash.
二、定制bash
可以通過“~/.bashrc”來定制bash(1)的行為。
嘗試下列例子。
# enable bash-completion if ! shopt -oq posix; then if [ -f /usr/share/bash-completion/bash_completion ]; then . /usr/share/bash-completion/bash_completion elif [ -f /etc/bash_completion ]; then . /etc/bash_completion fi fi # CD upon exiting MC . /usr/lib/mc/mc.sh # set CDPATH to a good one CDPATH=.:/usr/share/doc:~:~/Desktop:~ export CDPATH PATH="${PATH+$PATH:}/usr/sbin:/sbin" # set PATH so it includes user's private bin if it exists if [ -d ~/bin ] ; then PATH="~/bin${PATH+:$PATH}" fi export PATH EDITOR=vim export EDITOR
bash-completion 軟件包能夠讓 bash 進(jìn)行命令補(bǔ)全.
三、特殊按鍵
在 類Unix 環(huán)境,有一些具有特殊含義的按鍵。請注意,普通的Linux字符控制臺,只有左手邊的 Ctrl 和 Alt 鍵可以正常工作。其中有幾個值得記住的按鍵。
bash的按鍵綁定列表
快捷鍵 | 描述 |
Ctrl-U | 刪除光標(biāo)前到行首的字符 |
Ctrl-H | 刪除光標(biāo)前的一個字符 |
Ctrl-D | 終止輸入(如果你在使用 shell,則退出 shell) |
Ctrl-C | 終止一個正在運(yùn)行的程序 |
Ctrl-Z | 通過將程序移動到后臺來暫停程序 |
Ctrl-S | 停止屏幕輸出 |
Ctrl-Q | 激活屏幕輸出 |
Ctrl-Alt-Del | 重啟/關(guān)閉系統(tǒng),參見 inittab(5) |
左 Alt 鍵(可選擇同時按下 Windows-key) | Emacs 和相似 UI 的元鍵(meta-key) |
Up-arrow 向上方向鍵 | 開始在bash?中查看命令歷史 |
Ctrl-R | 開始在 bash?的增量命令歷史中搜索 |
Tab | 在 bash?命令行中補(bǔ)全文件名 |
Ctrl-V?Tab | 在 bash?命令行中輸入 Tab?而不是進(jìn)行補(bǔ)全 |
注意:Ctrl-S 的終端功能可能被 stty(1) 禁用。
四、鼠標(biāo)操作
Debian 系統(tǒng)針對文本的鼠標(biāo)操作混合 2 種風(fēng)格,外加一些新的方法:
1、傳統(tǒng)的 Unix 鼠標(biāo)操作方式:
- 使用 3 個按鈕(單擊);
- 使用主要鍵;
- 由 X 應(yīng)用,如 xterm,以及文本應(yīng)用在控制臺中使用。
2、現(xiàn)代 GUI(圖形用戶界面)鼠標(biāo)操作方式:
- 使用 2 個按鈕(拖動 + 單擊);
- 使用主要鍵和剪貼板;
- 用于現(xiàn)代的 GUI(圖形用戶界面)應(yīng)用,比如 gnome-terminal。
Debian上的鼠標(biāo)操作和相關(guān)按鍵操作列表
操作 | 響應(yīng) |
左擊并拖動鼠標(biāo) | 主要鍵的選擇作為選擇范圍 |
單擊左鍵 | 主要鍵的位置作為選擇范圍的開頭 |
單擊右鍵(傳統(tǒng)方式) | 主要鍵的位置作為選擇范圍的結(jié)尾 |
單擊右鍵(現(xiàn)代方式) | 依賴上下文的菜單(剪切、拷貝、粘貼) |
點(diǎn)擊中鍵或者 Shift-Ins | 在光標(biāo)處插入主要鍵的選擇 |
Ctrl-X | 剪切主要鍵的選擇到剪貼板 |
Ctrl-C?(在終端是?Shift-Ctrl-C?) | 拷貝主要鍵的選擇到剪貼板 |
Ctrl-V | 粘貼剪切板的內(nèi)容到光標(biāo)處 |
這里,主要鍵的選擇會高亮文本范圍。在終端程序內(nèi),使用 Shift-Ctrl-C 來代替,這樣可以避免終止一個運(yùn)行的程序。
在現(xiàn)代滾輪鼠標(biāo)上的中央滾輪,被認(rèn)為是中間鍵,并可以被當(dāng)做中間鍵使用。在 2 鍵鼠標(biāo)系統(tǒng)的情況下,同時按左鍵和右鍵就相當(dāng)于按中間鍵。
為了在 Linux 字符控制臺中使用鼠標(biāo),您需要讓 gpm(8) 作為后臺守護(hù)進(jìn)程(daemon)運(yùn)行。
五、分頁程序
less(1) 命令是一個增強(qiáng)版的分頁程序(文件內(nèi)容查看器)。它按照指定的命令參數(shù)或標(biāo)準(zhǔn)輸出來讀取文件。在用 less 命令查看的時候如果需要幫助可以按 “h”。它的功能比 more(1) 命令更豐富,通過在腳本的開頭執(zhí)行 “eval $(lesspipe)” 或 “eval $(lessfile)” 它的功能還能變得更加強(qiáng)大。詳細(xì)請參考 “/usr/share/doc/less/LESSOPEN”, “-R” 選項(xiàng)可以實(shí)現(xiàn)原始的字符輸出還可以啟用 ANSI 顏色轉(zhuǎn)義序列。
注意:在 less 命令中,鍵入 “h “可查看幫助屏幕,鍵入”/”或”? “可搜索字符串,鍵入”-i “可改變大小寫敏感性。
六、文本編輯器
在使用類 Unix 系統(tǒng)過程中,各種類似于Vim 或 Emacs的工具。
我認(rèn)為習(xí)慣于使用 Vim 命令是一個明智的選擇,因?yàn)?Linux/Unix 系統(tǒng)里一般都附帶了 Vi 編輯器。 (實(shí)際上最初的 vi 以及后來的 nvi 這類工具程序很常見。因?yàn)樵?Vim 里提供了F1幫助鍵,在同類工具中它的功能更強(qiáng)大,所以我選擇 Vim 而不是其它新出的一些工具。)
假設(shè)不是用 Emacs 就是用 XEmacs 作為你的編輯器,其實(shí)還有更好的選擇,尤其是在編程的時候。 Emacs 還有很多其他的特點(diǎn),包括新手導(dǎo)讀,目錄編輯器,郵件客戶端等等。當(dāng)編寫腳本或程序的時候,它能自動識別當(dāng)前工作模式所對應(yīng)的格式,讓使用更加便利。一些人甚至堅持認(rèn)為 Linux 系統(tǒng)里最需要配備的就是 Emacs?;ㄊ昼妬韺W(xué)習(xí) Emacs 可以為后面的工作剩下更多時間。
在實(shí)踐應(yīng)用中所有這些程序都會有一個教程,輸入 “vim” 和F1鍵就可以啟動Vim。
注意:Vim 和 Emacs編輯器可以處理 UTF-8 及其它不常用編碼格式的文本。建議在在 GUI(圖形用戶界面) 環(huán)境下使用 UTF-8 編碼,并安裝要求的程序和字體。編輯器里可以選擇獨(dú)立于 GUI(圖形用戶界面)環(huán)境的編碼格式。
七、默認(rèn)文本編輯器
Debian 有許多不同的編輯器。建議安裝上面提到的 vim 軟件包。
Debian 通過命令“/usr/bin/editor”提供了對系統(tǒng)默認(rèn)編輯器的統(tǒng)一訪問,因此其它程序(例如 reportbug(1))可以調(diào)用它。你可以通過下列命令改變它。
$ sudo update-alternatives --config editor
對于新手,我建議使用“/usr/bin/vim.basic”代替“/usr/bin/vim.tiny”,因?yàn)樗С指袷礁吡痢?/p>
許多程序使用環(huán)境變量“$EDITOR”或“$VISUAL”來決定使用那個編輯器。出于 Debian 系統(tǒng)的一致性考慮,它們被設(shè)置到“/usr/bin/editor”。(在歷史上,“$EDITOR”是“ed”,“$VISUAL”是“vi”。)
八、使用vim
最近的 vim(1) 用完全的 “nocompatible” 選項(xiàng)啟動自己,進(jìn)入到 普通 模式。[2]
基本的 Vim 按鍵列表:
模式 | 按鍵 | 操作 |
普通 | :help|only | 顯示幫助文件 |
普通 | :e filename.ext | 打開新的緩沖區(qū)來編輯?filename.ext |
普通 | :w | 把目前的緩沖區(qū)改寫到原始文件 |
普通 | :w filename.ext | 寫入當(dāng)前緩沖區(qū)到?filename.ext |
普通 | :q | 退出?vim |
普通 | :q! | 強(qiáng)制退出?vim |
普通 | :only | 關(guān)閉所有其它分割打開的窗口 |
普通 | :set nocompatible? | 檢查?vim?是否在完全的?nocompatible?模式 |
普通 | :set nocompatible | 設(shè)置?vim?到完全的?nocompatible?模式 |
普通 | i | 進(jìn)入?插入?模式 |
普通 | R | 進(jìn)入?替代?模式 |
普通 | v | 進(jìn)入?可視?模式 |
普通 | V | 進(jìn)入?可視?行 模式 |
普通 | Ctrl-V | 進(jìn)入?可視?塊 模式 |
除了?TERMINAL-JOB?外 | ESC-鍵 | 進(jìn)入?普通?模式 |
普通 | :term | 進(jìn)入?TERMINAL-JOB?模式 |
TERMINAL-NORMAL | i | 進(jìn)入?TERMINAL-JOB?模式 |
TERMINAL-JOB | Ctrl-W?N?(或者 Ctrl-\?Ctrl-N) | 進(jìn)入?TERMINAL-NORMAL?模式 |
TERMINAL-JOB | Ctrl-W?: | 在TERMINAL-NORMAL?模式里進(jìn)入Ex-模式 |
請使用 “vimtutor” 程序來學(xué)習(xí) vim,通過一個交互式的指導(dǎo)課程。
vim 程序基于 模式 輸入的按鍵來改變它的行為。在 插入-模式和 替代-模式下,輸入的按鍵大部分進(jìn)入了緩沖區(qū)。移動光標(biāo)大部分在 普通-模式下完成。交互選擇在 可視-模式下完成。在普通-模式下輸入 “:” ,改變它的 模式 進(jìn)入到 Ex-模式。 Ex-接受命令。
Vim 和 Netrw 軟件包可以一起使用。Netrw 同時支持在本地和網(wǎng)絡(luò)讀寫文件,瀏覽目錄。用 “vim .” (一個點(diǎn)作為參數(shù))來嘗試 Netrw,在”:help netrw”讀取它的文檔。
九、記錄shell活動
shell 命令的輸出有可能滾動出了屏幕,并可能導(dǎo)致你無法再查看到它。將shell活動記錄到文件中再來回顧它是個不錯的主意。當(dāng)你執(zhí)行任何系統(tǒng)管理任務(wù)時,這種記錄是必不可少的。
新版本的 Vim (version>=8.2)能夠被用來清晰的記錄 shell 活動,使用TERMINAL-JOB-模式。
記錄 shell 活動的基本方法是在script(1)下運(yùn)行 shell。
嘗試下列例子
$ script Script started, file is typescript
在script下使用任何 shell 命令。
按Ctrl-D來退出script。
$ vim typescript
十、基本的Unix命令
在這里,所說的“Unix”是指一類操作系統(tǒng),包括原始的Unix系統(tǒng)和基于Unix的其他操作系統(tǒng)。通常情況下,任何一個Unix克隆系統(tǒng)都會提供等效的命令。Debian系統(tǒng)也不例外。如果有一些命令的輸出與你所期望的不同,請不要擔(dān)心??赡苁且?yàn)樵趕hell中使用了別名,導(dǎo)致其對應(yīng)的命令輸出會不同。這些示例并不意味著必須按照這個順序執(zhí)行。
嘗試使用非特權(quán)用戶賬號來使用下列的命令。基本的 Unix 命令列表:
命令 | 說明 |
pwd | 顯示當(dāng)前/工作目錄的名稱 |
whoami | 顯示當(dāng)前的用戶名 |
id | 顯示當(dāng)前用戶的身份(名稱、uid、gid和相關(guān)組) |
file?foo | 顯示“foo”文件的文件類型 |
type -p?commandname | 顯示命令的文件所處位置“commandname” |
which?commandname | 同上 |
type?commandname | 顯示“commandname”命令的相關(guān)信息 |
apropos?key-word | 查找與“key-word”有關(guān)的命令 |
man -k?key-word | 同上 |
whatis?commandname | 用一行解釋 “commandname” 命令 |
man -a?commandname | 顯示“commandname”命令的解釋(Unix 風(fēng)格) |
info?commandname | 顯示“commandname”命令相當(dāng)長的解釋(GNU風(fēng)格) |
ls | 顯示目錄內(nèi)容(不包含以 . 點(diǎn)號開頭的文件和目錄) |
ls -a | 顯示目錄內(nèi)容(包含所有文件和目錄) |
ls -A | 顯示目錄內(nèi)容(包含幾乎所有文件和目錄,除了“..”和“.”) |
ls -la | 顯示所有的目錄內(nèi)容,并包含詳細(xì)的信息 |
ls -lai | 顯示所有的目錄內(nèi)容,并包含inode和詳細(xì)的信息 |
ls -d | 顯示當(dāng)前目錄下的所有目錄 |
tree | 使用樹狀圖顯示目錄內(nèi)容 |
lsof?foo | 列出處于打開狀態(tài)的文件 “foo“ |
lsof -p?pid | 列出被某進(jìn)程打開的文件: “pid“ |
mkdir?foo | 在當(dāng)前目錄中建立新目錄“foo” |
rmdir?foo | 刪除當(dāng)前目錄中的“foo”目錄 |
cd?foo | 切換到當(dāng)前目錄下或變量“$CDPATH”中的“foo”目錄 |
cd / | 切換到根目錄 |
cd | 切換到當(dāng)前用戶的家目錄 |
cd /foo | 切換到絕對路徑為“/foo”的目錄 |
cd .. | 切換到上一級目錄 |
cd ~foo | 切換到用戶“foo”的家目錄 |
cd – | 切換到之前的目錄 |
</etc/motd pager | 使用默認(rèn)的分頁程序來顯示“/etc/motd”的內(nèi)容 |
touch?junkfile | 建立一個空文件“junkfile” |
cp?foo?bar | 將一個現(xiàn)有文件“foo”復(fù)制到一個新文件“bar” |
rm?junkfile | 刪除文件“junkfile” |
mv?foo?bar | 將一個現(xiàn)有文件“foo”重命名成“bar”(“bar”必須不存在) |
mv?foo?bar | 將一個現(xiàn)有文件“foo”移動到新的位置“bar/foo”(必須存在“bar”目錄) |
mv?foo?bar/baz | 移動一個現(xiàn)有文件“foo”到新位置并重命名為“bar/baz”(必須存在“bar”目錄,且不存在“bar/baz文件”) |
chmod 600?foo | 使其他人無法讀寫現(xiàn)有文件“foo”(并且所有人都無法執(zhí)行該文件) |
chmod 644?foo | 使其他人對現(xiàn)有文件“foo”可讀但不可寫(并且所有人都無法執(zhí)行該文件) |
chmod 755?foo | 使其他人對“foo”可讀而不可寫(并且所有人都能執(zhí)行該文件) |
find . -name?pattern | 使用 shell “pattern” 查找匹配的文件名(速度較慢) |
locate -d .?pattern | 使用 shell “pattern” 查找匹配的文件名(速度較快,使用定期生成的數(shù)據(jù)庫) |
grep -e “pattern” *.html | 在當(dāng)前目錄下以“.html”結(jié)尾的所有文件中,查找匹配“pattern”的文件并顯示 |
top | 全屏顯示進(jìn)程信息,輸入“q”退出 |
ps aux | pager | 顯示所有正在運(yùn)行的進(jìn)程的信息(BSD風(fēng)格) |
ps -ef | pager | 顯示所有正在運(yùn)行的進(jìn)程的信息(Unix system-V風(fēng)格) |
ps aux | grep -e “[e]xim4*” | 顯示所有正在運(yùn)行“exim”和“exim4”的進(jìn)程 |
ps axf | pager | 顯示所有正在運(yùn)行的進(jìn)程的信息(ASCII風(fēng)格) |
kill?1234 | 殺死ID為“1234”的進(jìn)程 |
gzip?foo | 使用 Lempel-Ziv 編碼(LZ77)將“foo”壓縮為“foo.gz” |
gunzip?foo.gz | 將“foo.gz”解壓為“foo” |
bzip2?foo | 使用 Burrows-Wheeter 塊排序壓縮算法和 Huffman 編碼將“foo”壓縮為“foo.bz2”(壓縮效果比gzip更好) |
bunzip2?foo.bz2 | 將“foo.bz2”解壓為“foo” |
xz?foo | 使用 Lempel-Ziv-Markov 鏈算法將“foo”壓縮為“foo.xz”(壓縮效果比bzip2更好) |
unxz?foo.xz | 將“foo.xz”解壓為“foo” |
tar -xvf?foo.tar | 從“foo.tar”檔案中提取文件 |
tar -xvzf?foo.tar.gz | 從被gzip壓縮過的“foo.tar.gz”檔案中提取文件 |
tar -xvjf?foo.tar.bz2 | 從“foo.tar.bz2”檔案中提取文件 |
tar -xvJf?foo.tar.xz | 從“foo.tar.xz”檔案中提取文件 |
tar -cvf?foo.tar?bar/ | 將目錄“bar/”中的內(nèi)容打包到“foo.tar”檔案中 |
tar -cvzf?foo.tar.gz?bar/ | 將目錄 “bar/” 中的內(nèi)容打包并壓縮成 “foo.tar.gz” 文件 |
tar -cvjf?foo.tar.bz2?bar/ | 將目錄“bar/”中的內(nèi)容打包到“foo.tar.bz2”檔案中 |
tar -cvJf?foo.tar.xz?bar/ | 將目錄”bar/“中的內(nèi)容打包到”foo.tar.xz“檔案中 |
zcat README.gz | pager | 使用默認(rèn)的分頁程序來顯示 “README.gz” 壓縮包中的內(nèi)容 |
zcat README.gz > foo | 將“README.gz”解壓后的內(nèi)容輸出到文件“foo”中 |
zcat README.gz >> foo | 將“README.gz”解壓后的內(nèi)容添加到文件“foo”的末尾(如果文件不存在,則會先建立該文件) |
注意:
- Unix 有一個慣例,以“.”開頭的文件將被隱藏。它們一般為包含了配置信息和用戶首選項(xiàng)的文件;
- 基本的 Debian 系統(tǒng)的默認(rèn)分頁程序是 more(1),它無法往回滾動。通過命令 “apt-get install less” 安裝 less 軟件包后,less(1) 會成為默認(rèn)的分頁程序,它可以通過方向鍵往回滾動;
- “[” 和”]” 在正則表達(dá)式 “ps aux | grep -e “[e]xim4*”” 命令中,可以避免grep在結(jié)果中排除它自己, 正則表達(dá)式中的 “4*” 意思是空或字符”4″ ,這樣可以讓 grep 既找到 “exim” 也找到 “exim4″。 雖然 “*” 可以用于命令名稱匹配和正則表達(dá)式中,但是它們的含義是不一樣的。
嘗試下列例子:
$ man man $ man bash $ man builtins $ man grep $ man ls
手冊的風(fēng)格可能讓人有點(diǎn)難以習(xí)慣,因?yàn)樗鼈兌枷喈?dāng)簡潔,尤其是比較老舊、非常傳統(tǒng)的那些手冊。對于喜歡簡約風(fēng)格的用戶來說比較友好。
請注意,許多 類 Unix 命令(包含來自 GNU 和 BSD 的)都可以顯示簡短的幫助信息,你可以使用下列的其中一種方式來查看它(有時不帶任何參數(shù)也可以)。
$ commandname --help $ commandname -h