<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之旅 廣告
                **環境** [TOC] ## 第12章shell`history ![!] alias unalias` 12.1 查看命令行歷史`history` 12.2 再次運行最近輸入的命令`!!` 12.3 使用數字再次運行之前的命令`![##]` 12.4 使用字符串再次運行之前的命令`![sting]` 12.5 搜索之前輸入的命令并運行`^-r(Ctrl+r)` `^-s(Ctrl+s)` `^-g(Ctrl+g)` 12.6 顯示所有命令的別名`alias` 12.7 查看特定命令的別名`alias [aliasName]` ~~~ $ alias wgetpage alias wgetpage="wget --html-extension --recursive --convert-links --page-requisites --no-parent" ~~~ 12.8 創建新的臨時別名`alias [aliasName]="[command]"` 在命令行中使用`alias`時,應該注意幾點: * 別名中不能包含有其他含義的等號`=`因為在定義別名時,會在名稱后面立即跟上一個等號。 不過,在別名的實際內容中可以使用等號。 * 創建的別名只在當前會話有效時才存在。 退出會話后,別名也就不存在了。 12.9 創建新的永久別名`alias [aliasName]="[command]"` 如果想讓別名能夠在不同的shell會話中使用,就需要把它們添加到shell用來存儲別名的文件中。 大多數情況下,這個文件是`.bashrc` 或`.bash_aliases`。 不管使用哪個文件,編輯它們時都要保持謹慎,因為錯誤的編輯會在以后登錄時造成麻煩。 如果確實非常謹慎,可以在編輯文件之前先創建備份,這樣才可以做到有備無患。 >[warning] 如何找出應該使用哪個文件保存別名? > 1. 輸入`ls -a ~`如果在結果中看到`.bash_aliases`,就使用這個文件;否則,可查看`.bashrc`,確定在其中是否定義了其他別名(然后表明使用`.bash_aliases`)。 > 2. 如果在`.bashrc`文件中沒有看到任何別名,就可看一下`.profile`文件,偶爾也會用到該文件。 要在`.bash_aliases` 中添加新的別名,可使用首選的文本編輯器打開該文件,然后加入如下的一行: `alias lsd="ls -d*/"` 保存文件并關閉,再重新加載該文件 `source ~/.bash_aliases` 新的別名就生效了。 12.10 刪除別名`unalias` `unalias`僅僅刪除命令行中定義的別名。 要刪除`.bash_aliases` 中定義的別名可以: 1. 刪除別名定義的內容; 2. 用`#`注釋定義別名的內容。 12.11 創建新的臨時函數 如果在命令行上創建函數(畢竟這就是創建臨時函數的方式) `function [functionName] {}` `[functionName] () {}` 可在單獨一行中創建簡短的、臨時的函數 ~~~ $ mkcd () { mkdir -p "$l"; cd "$l";} $ mkcd lovecraft $ pwd /home/scott/lovecraft ~~~ 如上述示例所示,首先使用`mkdir -p`創建新的目錄,然后使用`cd`命令進入該目錄。 注意: * 使用單行方法,則必須在每個命令后面加上分號。 * 函數中的`$l`是一個定位參數,該參數會替換為函數名后輸入的第一個實參。 函數也可以延伸到多行。 輸入新函數的第一行并按Enter鍵之后,則會出現形如`>`的二級提示 符。`bash` 使用此提示符表明其需要更多輸入才可以完成命令。例如: ~~~ $ mkcd () { > mkdir -p "$l" > cd "$l" > } ~~~ 在此例中,因為正在創建函數,所以`bash`會等待用戶最終輸入`}`并按下 Enter鍵。 在此之前,每當你輸入函數的代碼行并按Enter 鍵,隨后一行都會從`>`開始,表明`bash`仍然在等待輸入。 通過命令行創建的函數都只在shell會話活動期間才生效。一旦注銷會話,該函數就會消失。 12.12 創建新的永久函數 ?? 12.13 顯示所有函數 ?? 12.14 刪除函數`unset ` ?? 12.15 何時使用別名以及何時使用函數 別名和函數都是隨shell一起載入內存(現代計算機如此健全,函數占用的內存很少,因此你不需要擔心載入內存帶來的負面影響),并且都只能由當前的 shell 使用,因此只會影響目前使用的 shell環境(這一點不同于腳本)。 實際上,官方GNUBash 參考手冊對于別名有如下說明:“從幾乎每種用途來說,shell 中的函數都是比別名更優先的選擇。“原因是: * bash始終先執行函數后執行別名。 * 別名用于將長命令轉變為更短、更容易記住的名稱(例如,`alias wgetpage="wget --html-extension --recursive --convert-links --page-requisites--no-parent"`),或者用于將所需的實參添加到命令上(例如 `alias lsd="ls -d*/"`)。 * 函數面向更長或更復雜的命令序列,通常還帶有邏輯和循環。 別名和函數重要的區別在于處理實參的方式: * 別名基本上會將實參以輸入的相同順序直接傳遞到別名命令的末尾。 * shell函數可捕獲實參,然后重新排列、測試、刪除和操作這些實參。 `bash` 將實參置于別名中命令的末尾。 ~~~ $ alias lstest="ls -l $l | grep tar" $ lstest /bin grep: /bin: Is a directory $ unalias lstest ~~~ 此代碼執行失敗的原因是:因為`bash`自動將實參`/bin`附加到末尾,即`gep tar`的后面。 因此,不是創建`ls -l /bin | grep ta`,而是實際地構造`ls -l |grep tar /bin`。這就是grep報告錯誤的原因:你告訴該命令在目錄名中查找單詞“tar”,這將無法找到;而改為在文件或文件列表中查找時,就可成功找到。 `bash` 將實參置于函數中的對應位置。 ~~~ $ lstest () {ls -l $l | grep tar;} $ lstest /bin -rwxr-xr-x root root tar* -rwxr-xr-x root root unicode start* ~~~ ## 第13章 監視系統資源`uptime` `ps` `top` `lsof` `free` `df` `du` 13.1 顯示計算機的持續運行時間`uptime` 13.2 查看正在運行的所有進程`ps aux` 表13-1 STAT列中字母的含義?? 對于`ps`命令(process status),為了讓操作更為方便統一,對于他的選項不要求用連字符。各選項的意義如下: `a`:所有用戶; `u`:以面向用戶的格式顯示,或顯示擁有每個進程的用戶; `x`:沒有控制終端設備或終端屏幕的進程,“顯示每個進程”的另一種說法。 `-w`:wrap,換行 13.3 查看進程樹`ps axjf` Linux系統中,所有的進程最初都來自`init`,它是所有進程之母,其PID始終為1。 各選項的意義如下: `a`:所有用戶; `x`:沒有控制終端設備或終端屏幕的進程,“顯示每個進程”的另一種說法; `j`:用于BSD作業控制格式,它確定了你所看到的列; `f`:forest,源自`ASII art forest`。 ![](https://box.kancloud.cn/abebacc9db225f0995fd9e7dc09a4a89_1149x1008.jpg) 注意其中的`PPID`列,該列為Parent Process ID(父進程編號)是創建PID進程的進程編號。 有了`PID`和`PPID`,就可以終止任何失控的進程。 查看進程樹的另一種方式:`pstree`。但并不是所有系統都包含該命令,可能需要進行安裝。 ![](https://box.kancloud.cn/c22f899cc3b86f091d95d676568259bf_685x367.jpg) 13.4 查看特定用戶擁有的進程`ps U [userName]` 13.5 終止正在運行的進程`kill` `killall` 表13-2 與kill命令關聯的常用信號?? 13.6 查看運行中進程的動態更新列表`top` ?? 13.7 列出打開的文件`lsof` ?? 13.8 列出某個用戶打開的文件`lsof -u` ?? 13.9 列出使用特定文件的用戶`lsof [file]` ?? 13.10 列出特定程序的進程`lsof -c [program]` ?? 13.11 顯示系統RAM的相關信息`free` ?? 13.12 顯示文件系統的磁盤使用情況`df` ?? 13.13 報告目錄使用的文件空間`du` ?? 13.14 只報告目錄使用的總空間`du -s` ?? ## 第14章 安裝軟件 14.1 安裝軟件包(RPM) 14.2 刪除軟件包(RPM) 14.3 安裝軟件包及其依賴程序(RPM) 14.4 刪除軟件包及其依賴程序(RPM) 14.5 升級軟件包及其依賴程序(RPM) 14.6 查找可供下載的軟件包(RPM) 14.7 安裝軟件包(DEB) 14.8 刪除軟件包(DEB) 14.9 安裝軟件包及其依賴程序(DEB) 14.10 刪除軟件包及其依賴程序(DEB) 14.11 升級軟件包及其依賴程序(DEB) 14.12 查找可供下載的軟件包(DEB) 14.13 清除不再需要的安裝包(DEB) 14.14 處理APT相天的錯誤(DEB)
                  <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>

                              哎呀哎呀视频在线观看