<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 第?14?章?命令系統 **目錄** [](ch14.html#id3062639) [Shell、Console、Terminal](ch14s02.html) [rxvt-unicode](ch14s03.html) [幫助系統](ch14s04.html) [bash](ch14s05.html) [中止正在運行的程序](ch14s05.html#id3063134) [Ctrl+s](ch14s05.html#id3063154) [鍵綁定](ch14s05.html#id3063175) [自定義鍵綁定](ch14s05.html#id3063672) [](ch14s06.html) [通配符](ch14s06.html#glob) [任務管理](ch14s06.html#id3063827) [管道、重定向](ch14s06.html#id3063966) [脫字符](ch14s06.html#id3064064) [設定您的默認 Shell](ch14s07.html) [設定命令的搜索路徑](ch14s08.html) ## Shell、Console、Terminal 在前面的章節中,我們曾提到,電視機的遙控器,也是一種人機交互的界面,算是一種 Shell。 但是這個概念并不準確,遙控器只是向 Shell 發送指令的工具,Shell 接收到遙控器發出指令后,將指令轉換為系統命令,由系統來執行。 例如我們按的遙控器上的 數字鍵1 ,遙控器將 切換為1頻道 的指令發送到 Shell,Shell 將指令轉換為系統可以識別的 頻道1 ,系統執行它,您就可以觀看 1頻道 的電視節目了。 通常每臺電視機只有一種 Shell,比如有的電視機系統具有“畫中畫”的功能,那么 Shell 中便有相應的功能定義,您可以通過遙控器上的“畫中畫 ”功能鍵來開啟它。假設您的電視機沒有此功能,Shell 中也就沒有相應的功能定義。擁有一個帶“畫中畫”功能控制鍵的遙控器,即便信號兼容,您還是不能夠使用這一功能 不用遙控器也可以控制電視機,假設您的遙控器丟了,您還可以走到電視機前,使用機身上的控制面板來控制它(相當于使用 Linux 的控制臺)。但是您一定不喜歡這種方式,除非您想鍛煉身體 在 Linux 系統中,由于圖形界面和控制臺的分辨率通常不一致,所以切換時要有一個延時。對于我們中文用戶來講,控制臺下中文的顯示也比較麻煩。而且控制臺顯示內容通常不如終端顯示的全面。 所以我們推薦您使用終端來執行命令,它使用起來感覺很像遙控器 ## rxvt-unicode 通常情況下,您買一臺電視機,只能獲得一個遙控器。雖然它為您的電視機量身定作,能夠最大限度發揮電視機的能力,但您卻不一定喜歡它。說不定這個遙控器體形太大,持握不方便;或者它體形太小,容易失蹤;又或者它的按鍵要么太硬,要么太軟;它的鍵盤要么太大,要么太小…… 您一般也可以容忍,畢竟遙控器使用頻率并不算高 如果您的終端有些地方不討您喜歡,比如說響應太慢,或者不能正常顯示中文……那就難以忍受了,您應該換一個其它的試試。 您所接觸的第一個終端極有可能是 Gnome-Termianl,它是系統默認使用的終端,顯示中文不錯,不過響應比較慢。。。 我們推薦您使用 urxvt(mlterm 也是不錯的選擇) 您可以使用 **sudo apt-get install rxvt-unicode** 命令來安裝它。 `urxvt` 啟動它 (urxvt 不支持控制臺,您得在圖形界面下啟動它。使用終端,或者按下 Alt+F2,建議您在啟動欄里新建一個啟動圖標) rxvt-unicode 還支持“服務器/客戶端”的運行模式: * `urxvtd` 啟動一個守護進程 daemon(支持控制臺) * `urxvtc` 啟動客戶端 client。多個客戶端可以同時連接到一個 urxvtd,以達到節省系統資源的目的。 或許您對 rxvt 的默認設置不滿意,您可以修改用戶配置文件 `~/.Xresources` 來設定它。修改全局配置文件 `/etc/X11/Xresources/Xresources` ,則對所有用戶生效,只有 root 才可以修改此文件。 這里有一些簡單的選項:(以 ! 起始的行是注釋,您可以直接拷貝此文件的內容) **例?14.1.?urxvt 配置 `~/.Xresources`** ``` !!============================================================================= !! RXVT-unicode setting !!============================================================================= !設置字體分辨率 Xft.dpi:96 !設置字體 URxvt.font:-misc-fixed-medium-r-normal--14-*-*-*-*-*-iso10646-1,xft:WenQuanYi Bitmap Song:size=10 !顏色 Rxvt.background:black Rxvt.foreground:white Rxvt.colorBD:yellow Rxvt.colorUL:green !滾動條 Rxvt.scrollBar:True Rxvt.scrollBar_right:True Rxvt.scrollBar_floating: False Rxvt.scrollstyle:plain !屏幕緩沖 Rxvt.saveLines:10000 Rxvt.color12:DodgerBlue Rxvt.menu:/etc/X11/rxvt.menu Rxvt.preeditType:Root !輸入法設置 !inputMethod:xim ``` ## 幫助系統 您可以使用命令 man 或者 info 來閱讀 Linux 命令的在線文檔。命令的格式非常簡單: ``` man xxx ``` > 提示:在使用 man 瀏覽器的時候,一些快捷鍵您可能會用到: | | | | --- | --- | | Ctrl+f(orward) | 向下翻一頁 | Ctrl+d(own) | 向下翻半頁 | | Ctrl+b(ackward) | 向上翻一頁 | Ctrl+u(p) | 向上翻半頁 | | / | 查找 | q(uit) | 退出 | 以上為 VI風格 的鍵綁定。您也可以使用 Emacs風格 的[鍵綁定](ch14s05.html#keybind "表?14.1.?Emacs風格 鍵綁定") ## bash 好了,現在我們換了一個遙控器,感覺順手多了。現在來操練一下,下載一首 mp3: 我們使用 wget 這個程序,它非常可靠,完全值得您信賴。 首先找到一個可以下載的地址,復制鏈接,在終端窗口內點擊鼠標中鍵,把它粘貼進去。 現在終端中大概是這種情形: ``` http://linuxtoy.org/xxx.mp3 ``` 按下 `Ctrl+a` 組合鍵,我們發現光標移動到了行首。輸入 `wget` 和 `空格` ``` wget http://linuxtoy.org/xxx.mp3 ``` 回車后,終端中出現一些信息,不一會兒工夫,mp3 便下載完成。 使用 `Ctrl+a` 組合鍵,我們就不需要使用方向鍵來移動光標,方向鍵每次只能移動一個字符,沒有效率 您還可以使用 `Ctrl+f` 向前移動光標, `Ctrl+b` 向后移動光標, `Ctrl+e` 將光標移動到行末……([鍵綁定](ch14s05.html#keybind "表?14.1.?Emacs風格 鍵綁定")) > 注意:Linux 的圖形界面中,鼠標中鍵通常執行“粘貼”的操作,如果您的鼠標沒有中鍵,您可以左右鍵同時按下。 ### 中止正在運行的程序 如果一個命令持續時間很長,以致于不能夠進行其它操作,可以使用 `Ctrl+c` 來強行中止它。 ### Ctrl+s 有時您會不小心按下 `Ctrl+s` 這個組合鍵,Shell 便被凍結。嘗試使用 `Ctrl+q` 組合鍵,看能否恢復正常。 ### 鍵綁定 等等,有必要記這么多快捷鍵么?都這么復雜! 我們強烈建議您記住,以大幅度的提高操作效率。而且這是 readline 控件的鍵綁定,在任何使用 readline 控件的程序中,您都可以使用它們。例如 bash、lftp、gdb 等程序;同時,Linux 下倍受追捧的 Emacs 編輯器,也是這種風格的鍵綁定(其實是 readline 使用了 Emacs風格 的鍵綁定才對),甚至 FireFox 中,也可以使用類似風格的快捷鍵!(Linux 下主要有兩種風格的鍵綁定,一種是 Emacs風格,另一種是 Vi風格,我們會在 [第?24?章 _Vim 編輯器_](ch24.html "第?24?章?Vim 編輯器") 中介紹) 現在列舉一些 ReadLine 的鍵綁定,您可以自行嘗試。(運行 `man readline` 命令,來查看 ReadLine 手冊) 先來了解一些約定: * \C-a 表示 `Ctrl+a` * \M-a 表示 `Meta+a` Meta鍵 在 PC 中通常為 ALT鍵 **表?14.1.?Emacs風格 鍵綁定** | | | | --- | --- | | | 向前 | 向后 | | 移動 | | 行 | \C-a | Ahead | \C-e | End | | 字符 | \C-f | Forward | \C-b | Backward | | 單詞 | \M-f | \M-b | | 命令 | \C-n | Next | \C-p | Previous | | 刪除 | | 行 | \C-u | \C-k | | 字符 | \C-h | \C-d | | 單詞 | \C-w | \M-d | | 搜索 | | 搜索 | \C-r (連續使用 C-r 可以查找下一個) | | 瀏覽搜索結果 | \M-n | \M-p | | 其它 | | 粘貼 | C-y | | 撤銷 | C-- | | 清空屏幕 | C-l | _自動補全_ | | | | --- | --- | | Tab | 使用頻率最高的功能! | | \C-o | 遍歷補全 | (未定義) | | \M-? | 列出所有可能選項,相當于按兩次 Tab鍵 | Alt+Shift+/ | | \M-# | 注釋掉當前命令,用于將當前命令暫存于歷史紀錄列表 | Alt+Shift+3 | | \M-! | 補全命令,通常用來補全子命令,例如 ``sudo`` 的子命令 | Alt+Shift+1 | | \M-~ | 補全用戶名 | Alt+Shift+` | | \M-@ | 補全主機名 | Alt+Shift+2 | | \M-$ | 補全變量 | Alt+Shift+4 | | \M-_ | 補全歷史紀錄中的紀錄 | Alt+Shift+- | | \M-* | 將所有可能選項放到命令行中 | Alt+Shift+8 | ### 自定義鍵綁定 通過修改 `/etc/inputrc` 文件,可以更改鍵綁定。建議您使用默認的鍵綁定,以避免不必要的煩惱。當然了,Emacs風格 的鍵綁定是通用的,隨時都有可能用到。 在文件中添加該行,可以將 ReadLine 的鍵綁定設為 VI風格。(Bash、Lftp 等使用 ReadLine 的軟件同時生效) ``` set editing-mode vi ``` 找到這一行: ``` $if mode=emacs ``` 在它的下面添加如下內容 ``` "\C-o": menu-complete ###這兩行不是必須的,視情況而定### "\C-p": non-incremental-reverse-search-history "\C-n": non-incremental-forward-search-history ``` 重新登錄 Shell,您就可以使用 `\C-o` (Ctrl+o)來遍歷補全。假如您的文件名為中文,或者出現亂碼時,您可以使用 `\M-*` 將所有文件名放入命令行,再刪除多余的,這真是麻煩極了!簡單一點的方法是使用 `\C-o` 遍歷補全,將所有可能的選項輪流放入命令行。 > 提示:使用 Vim編輯器, **vi /etc/inputrc** ,在插入模式下使用 `Ctrl+v` 組合鍵。按下 `Ctrl+o` ,這時編輯區新增一個 ^O 字符,等價于 `\C-o` ### 通配符 使用 _?_ 代表任意單個字符。例如 ???lo ,表示 lo 前有三個字符,它可以匹配 Hello 使用 _*_ 代表隨意幾個任意字符。例如 *.iso ,代表所有 iso 格式的文件。 您可以將遍歷補全和通配符結合使用,以提高效率。例如: ``` cd */ 則遍歷補全只補全文件夾 chmview *.chm 則遍歷補全只補全 chm 文件 ``` ### 任務管理 & 在命令的末尾加上一個 & 符號,表示背景任務,例如: ``` wget http://www.download.net/xxx/mp3 & ``` ; 使用 ; 將多個命令連結起來,則表示任務按順序執行 && 使用 && 將多個命令連結起來,則表示只有前面的命令執行成功,后面的命令才能得以執行 `` `(命令)` ,如果一個命令中包含以 `` (Esc鍵 下方的按鍵)括起來的子命令,那么子命令將被優先執行,執行結果被代入上一級命令繼續執行,例如創建一個以當前時間命名的文件: ``` touch `date +%m.%d_%H:%M:%S` ``` touch 命令能夠創建一個文件,它的操作對象,為 date +%m%d%H%M%S 命令的輸出 06.06_06:06:60 這樣,我們創建了一個名為 06.06_06:06:60 的文件(六月六日六時六分剛過六十秒-_-!) Ctrl+z 將當前 Shell 中的任務掛起,這個時候任務的狀態為 ``` [1]+ Stopped xxx ``` bg 將掛起的任務背景運行。這時它的狀態為 ``` [1]+ xxx & ``` fg 將背景任務調到前臺執行 jobs 查看背景任務,方括號中的數字為命令的任務編號 如果后臺運行多個任務,您可以在 bg 或者 fg 后跟任務編號,作為操作對象,例如: ``` bg 2 ``` ### 管道、重定向 &gt; 重定向符號,它的作用是將命令的輸出重定向到一個文件中。比如我們想把命令 **ls** 的結果保存為 `FileList` 文件,作一個清單,我們可以使用重定向符號來完成它: ``` ls -l &gt; FileList ``` &gt;&gt; 作用與 &gt; 基本相同,不同點在于, &gt;&gt; 以追加的方式,將命令的輸出寫入文件的末尾。 &lt; 是從文件到命令的重定向,將文件的內容作為命令的輸入。 | 為管道符號,它的作用是將前一個命令的輸出,作為下一個命令的輸入。假設一個目錄下的文件太多,使用 ls 命令不能夠在屏幕中完全顯示,這個時候您可以將 ls 命令的輸出,通過管道符號,作為瀏覽器 less 的輸入。就可以使用瀏覽器的功能翻頁、查找: ``` ls -al | less ``` > 提示:less 瀏覽器的鍵綁定幾乎與 man 相同,請參閱[“幫助系統”一節](ch14s04.html "幫助系統") ### 脫字符 Shell 中的一些功能是通過特殊符號作為控制字符來實現的,上面已經介紹了很多了。這產生一個問題,如果一個文件名中,剛好包含了這些字符,比如 ; ,就很難對它進行操作。使用 less 瀏覽這個文件 ``` less ;xxx ``` less 會很快返回一個錯誤信息,因為并沒有一個文件名作為操作對象。接著,Shell 會報告,系統中沒有 xxx 這個命令。 這是因為 Shell 將文件名中的 ; 解析為按順序執行命令。 或者您的文件名以空白起始,而在 Shell 中,無論多少個空格,都將被解析為一個分隔符。您甚至不能使用命令重命名此文件。 這個時候就要用到脫字符 _\_ 了,它能夠將一個具有特殊涵義的字符轉換普通字符。上面的兩個任務,可以在文件名中每個特殊字符前加一個 \ ,像這樣 ``` less \;xxx less \ \xxx less \;\ \&\xxx ``` > 提示:也可以使用 " 將文件名括起來,例如 **less "; &xxx"** ,在很多情況下,這樣甚至更方便。 脫字符在 Shell 中也可以作為換行符,在一個命令的末尾添加一個 \ ,然后回車,在下一行繼續輸入命令剩余的部分,將一個命令拆分為多行且不影響它的執行(如果執行一個很長的命令,請將它拆分為多行以便于閱讀) 事實上換行符也符合脫字符的定義。回車鍵有兩個涵義,一個是 執行 (Enter),另一個 換行 (折線箭頭)。在 Shell 中它作為控制字符 執行 ,使用脫字符后,它便代表排版字符 換行 了。 ## 設定您的默認 Shell 如果能夠擁有 root權限,可以直接修改 `/etc/passwd` 文件。找到您 用戶ID 起始的行 ``` user:x:1000:112:user,,,:/home/user:/bin/bash ``` > [![1](https://box.kancloud.cn/2015-10-12_561bcb76795ae.png)](ch14s07.html#command11) 用戶登錄名 > [![2](https://box.kancloud.cn/2015-10-12_561bcb768596e.png)](ch14s07.html#command12) 用戶口令(通常轉儲在`/etc/shadow`文件中) > [![3](https://box.kancloud.cn/2015-10-12_561bcb94ee26f.png)](ch14s07.html#command13) 用戶UID > [![4](https://box.kancloud.cn/2015-10-12_561bcb9508b82.png)](ch14s07.html#command14) 用戶GID > [![5](https://box.kancloud.cn/2015-10-12_561bcb95133e7.png)](ch14s07.html#command15) 用戶信息 > [![6](https://box.kancloud.cn/2016-01-06_568cdb4f32753.png)](ch14s07.html#command16) 用戶`$HOME`目錄位置 > [![7](https://box.kancloud.cn/2016-01-06_568cdb4f41fcc.png)](ch14s07.html#command17) 最后一個字段為登錄后的默認 Shell, `/bin/bash` 是程序 bash 的主程序路徑。 Zsh 主程序的路徑通常為 `/bin/zsh` `/etc/shells` 中列出系統中所有可用 Shell( `/bin/false` 代表禁用 Shell) 也可以使用如下命令更改您的默認 Shell ``` chsh -s /bin/zsh (需要輸入您的密碼) ``` ## 設定命令的搜索路徑 使用 **echo $PATH** ,可以顯示 `$PATH` 變量,輸出如下: ``` /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/bin/X11 /usr/games /usr/X11R6/bin ``` 它是一個環境變量,代表執行命令時,Shell 的搜索路徑。 執行一個命令時,Shell 會到 `$PATH` 變量定義的路徑去搜索,并運行與命令同名的可執行文件。如果程序、腳本等可執行文件并不在上面的路徑中,就必須使用絕對路徑或者相對路徑定位可執行文件。 例如: ``` /usr/local/mplayer -menu xxx.rmvb cd /usr/local/ && ./mplayer -menu xxx.rmvb ``` 可以修改 `/etc/environment` 文件來設定您的命令搜索路徑,找到 PATH 起始的行 ``` PATH="$PATH:/user/" ``` 在雙引號中添加您的自定義路徑,并以 _:_ 分隔。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看