**環境**
[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`。

注意其中的`PPID`列,該列為Parent Process ID(父進程編號)是創建PID進程的進程編號。
有了`PID`和`PPID`,就可以終止任何失控的進程。
查看進程樹的另一種方式:`pstree`。但并不是所有系統都包含該命令,可能需要進行安裝。

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)
- WebAPP
- Linux Command
- 入門
- 處理文件
- 查找文件單詞
- 環境
- 聯網
- Linux
- Linux目錄配置標準:FHS
- Linux文件與目錄管理
- Linux賬號管理與ACL權限設置
- Linux系統資源查看
- 軟件包管理
- Bash
- Daemon/Systemd
- ftp
- Apache
- MySQL
- Command
- Replication
- mysqld
- remote access
- remark
- 限制
- PHP
- String
- Array
- Function
- Class
- File
- JAVA
- Protocals
- http
- mqtt
- IDE
- phpDesigner
- eclipse
- vscode
- Notepad++
- WebAPI
- Javasript
- DOM
- BOM
- Event
- Class
- Module
- Ajax
- Fetch
- Promise
- async/await
- Statements and declarations
- Function
- Framwork
- jQurey
- Types
- Promise
- BootStrap
- v4
- ThinkPHP5
- install
- 定時任務
- CodeIgniter
- React.js
- node.js
- npm
- npm-commands
- npm-folder
- package.json
- Docker and private modules
- module
- webpack.js
- install
- configuration
- package.json
- entry
- modules
- plugins
- Code Splitting
- loaders
- libs
- API
- webpack-cli
- Vue.js
- install
- Compile
- VueAPI
- vuex
- vue-router
- vue-devtools
- vue-cli
- vue-loader
- VDOM
- vue-instance
- components
- template
- Single-File Components
- props
- data
- methods
- computed
- watch
- Event-handling
- Render Func
- remark
- 案例學習
- bootstrap-vue
- modal
- fontAwesome
- Hosting Font Awesome Yourself
- using with jquery
- using with Vue.js
- HTML
- CSS
- plugins
- Chart.js
- D3.js
- phpSpreadSheet
- Guzzle
- Cmder
- Git
- git命令
- git流程
- Postman
- Markdown
- Regular Expressions
- PowerDesigner
- 附錄1-學習資源