bash及其特性
shell: 外殼
GUI: Gnome,KDE,Xfce
CLI: sh, csh, ksb, bash, tcsh, ksh, zch
程序: 進程
允許同一個用戶登陸多次,互不相干,進程獨立
進程: 在每個進程看來,當前主機上只存在內核和當前進程
進程是程序的副本,進程是程序執行的實例
用戶工作環境:
#
$
shell, 子shell
bash:
1. 命令歷史
2. 管道、重定向
3. 命令別名
4. 命令行編輯
5. 命令行展開
6. 文件名通配
7. 變量
8. 編程
命令行編輯:
ctrl+a: 跳到命令行收
ctrl+e: 跳到命令行尾
ctrl+u: 刪除光標至命令行首的內容
ctrl+k: 刪除光標至命令行尾的內容
ctrl+l: 清屏
命令歷史:
查看命令歷史: history
-c: 清空命令歷史
-d: OFFSET【n】清除指定行號的命令條數
eg: history 500 刪除1-500條記錄
eg: history 500 10 刪除從第500條到510條記錄
-w: 保存命令歷史至歷史文件中 ~/.bash_history
環境變量
PATH: 命令搜索路徑
HISTSIZE: 命令歷史緩衝區大小 eg: echo $HISTSIZE
命令歷史的使用技巧:
!n : 執行history中的第n條命令
!-n: 執行history中倒數第n條命令
!!: 執行上一條命令
!string: 執行命令歷史中最近一個以指定字符串開頭的命令
!$: 引用前一個命令的最後一個參數
ESC, . (按ESC鬆開,點按.) 就可以出現上一個命令的最後一個參數
eg: nano !$
命令補全
路徑補全
命令別名
alias CMEALIAS='COMMAND [options] [arguments]'
在shell中定義的別名僅在當前shell生命週期中有效,別名的有效範圍僅爲當前shell進程:
unalias
命令替換 $(COMMAND), 反引號: `COMMAND`
把命令中某個子命令替換爲其執行結果的過程
eg: echo "the current directory is $(pwd)"
創建一個 file-$(date +%F-%H-%M-%S).txt
bash支持的引號:
``: 命令替換
"": 弱引用,可以實現變量替換
'': 強引用,不完成變量替換
文件名通配, globbing
* 任意長度的任意字符
? 任意單個字符
[] 匹配指定範圍內的任意單個字符
eg: [abc], [a-m],[a-z], [A-Z],[0-9][a-zA-Z],[0-9a-zA-z]
[:space:] 空白字符
[:punct:] 標點符號
[:lower:] 小寫字母
[:upper:] 大寫字母
[:alpha:] 大小寫字母
[:digit:] 數字
[:alnum:] 數字和大小寫字母
#man 7 glob 可以查到上述的列表
調用[[:space:]] 所有的空格字符
檢測中間有空格的:
[[:alpha:]]*[[:space:]]*[[:alpha:]]
[^] 匹配指定範圍之外的任意單個字符
eg: 以爲非數字開頭的文件 [^0-9]
練習:
1. 創建a123,cd6,c78m,c1 my, m.z, k 67, 8yu, 789等文件: 注意, 以上文件是以逗號隔開的, 其他符號都是文件名的組成部分
2. 顯示所有以a或m開頭的文件
ls [am]*
3. 顯示所有文件名中包含了數字的文件
*[[:digit:]]* 或者 *[0-9]*
4. 顯示所有以數字結尾且文件名中不包含空白的文件
*[^[:space:]]*[[:digit:]] 或者 *[[:space:]]*[^0-9]
5. 顯示文件名中包含了非字母或數字的特殊符號文件
*[^[:alnum:]]*