shell: 是系統的用戶界面,提供了用戶與內核進行交互操作的一種接口,分以下兩大類。
GUI:Gnome, KDE, Xfce
CLI: sh, csh, ksh, bash, tcsh, zsh
程序和進程
進程:在每個進程看來,當前主機上只存在內核和當前進程||進程是程序的副本,進程是程序執行實例
用戶工作環境:
bash:
# 超級管理員 root
$ 普通用戶 tom, jerry….
shell,子shell
bash--bash
bash特性:
1、命令歷史、命令補全
2、管道、重定向
3、命令別名
4、命令行編輯
5、命令行展開
6、文件名通配
7、變量
8、編程
命令行編輯:
光標跳轉:
Ctrl+a:跳到命令行首
Ctrl+e:跳到命令行尾
Ctrl+u: 刪除光標至命令行首的內容
Ctrl+k: 刪除光標至命令行尾的內容
Ctrl+l: 清屏
命令歷史:
查看命令歷史:history
-c:清空命令歷史
-d OFFSET [n]: 刪除指定位置的命令
-w:保存命令歷史至歷史文件中 默認保存在/root/.bash_history中
環境變量
PATH:命令搜索路徑
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
HISTSIZE: 命令歷史緩衝區大小
echo $HISTSIZE 默認爲緩衝1000條命令歷史
命令歷史的使用技巧:
!n:執行命令歷史中的第n條命令;
!-n:執行命令歷史中的倒數第n條命令;
!!: 執行上一條命令;
!string:執行命令歷史中最近一個以指定字符串開頭的命令
!$:引用前一個命令的最後一個參數;
Esc 鬆開然後按 .
Alt+.
命令補全,路徑補全:
PATH:
搜索PATH環境變量所指定的每個路徑下以我們給出的字符串開頭的可執行文件,如果多於一個,兩次tab,可以給出列表;否則將直接補全;
路徑補全:
打頭路徑下:搜索我們給出的起始路徑下的每個文件名,並試圖補全;
文本相關的命令
查看:cat, tac, more, less, head, tail
統計:wc
處理:tr, cut, join
排序:sort uniq
命令別名:
alias CMDALIAS='COMMAND [options] [arguments]'
在shell中定義的別名僅在當前shell生命週期中有效;別名的有效範圍僅爲當前shell進程;
ualias CMDALIAS 取消命令別名
\CMD 可以使用命令本身的意義。轉義字符 \
命令替換:
$(COMMAND), 反引號:`COMMAND`
把命令中某個子命令替換爲其執行結果的過程
file-2013-02-28-14-53-31.txt date "+%F-%H-%M-%S"
bash支持的引號:
反引號``: 命令替換
雙引號"": 弱引用,可以實現變量替換
單引號'': 強引用,不完成變量替換
文件名通配, globbing
*: 任意長度的任意字符
?:任意單個字符
[]:匹配指定範圍內的任意單個字符
[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
[^]: 匹配指定範圍之外的任意單個字符
eg1:創建a123, cd6, c78m, c1 my, m.z, k 67, 8yu,注意,以上文件是以逗號隔開的,其它符號都是文件名的組成部分
1、顯示所有以a或m開頭的文件;
[root@JustinWang test]# ls [am]*
a123 m.z
2、顯示所有文件名中包含了數字的文件;
ls *[0-9]* 或 ls *[[:digit:]]*
8yu a123 c1 my c78m cd6 k 67
3、顯示所有以數字結尾且文件名中不包含空白的文件;
ls *[^[:space:]]*[0-9] ?????????
4、顯示文件名中包含了非字母或數字的特殊符號的文件;
ls *[^[:alnum:]]*
c1 my k 67 m.z