bash基本特性
bash基本特性
bash是Linux中最常使用到的shell,它給用戶提供了許多便利的功能和特性,下面就介紹一些bash的基本特性。
1、命令歷史history
bash能為我們提供命令的存儲功能,我們也可以借由history命令來查看我們以往輸入過的命令有哪些。
[[email protected] ~]# history
1 ss -lnt
2 ifconfig
…省略…
767 history
【語法格式】:
history [option]…
【參數選項】:
參數 | 說明 |
-c | clear 清除歷史記錄 |
-d num | 刪除某一條歷史記錄 |
-a | 將現在的歷史命令追加到歷史文件中尾端 |
-w | 將現在的歷史命令寫入到歷史文件中 |
bash會把歷史命令保存在用戶的家目錄的.bash_history文件中即 ~/.bash_history,bash默認用戶在退出本次shell時自動將登陸後輸入過的命令追加至文件中,在用戶還未退出本次shell時,我們的歷史命令記錄在緩存中
HISTSIZE:緩存中能記錄的歷史命令條數,默認為1000條
HISTFILESIZE:歷史文件中能保存的歷史命令條數,默認為1000條
HISTFILE:歷史文件路徑,默認為~/.bash_history
[[email protected] ~]# echo $HISTSIZE
1000
[[email protected] ~]# echo $HISTFILESIZE
1000
[[email protected] ~]# echo $HISTFILE
/root/.bash_history
調用歷史命令:
!!:再一次執行上一條命令
!#:再一次執行第#條命令
!string:再一次執行以string開頭的命令
2、命令和路徑補全
bash很便捷的為用戶提供了,命令以及文件路徑補全的功能。即當用戶輸入命令和路徑的過程中可以使用【Tab】鍵來自動補全命令和路徑。
當我們輸入部分字符串後如果系統能鎖定目標,則按一次【Tab】鍵就可以補全,
若系統不能鎖定,則我們可以按兩次【Tab】鍵,使系統給出命令或文件列表。
3、命令行展開
把命令行的給定的特殊符號自動替換為相應字符串的機制
~: 自動替換為用戶家目錄;
~USERNAME:自動替換為指定用戶的家目錄;
{}:可承載一個以逗號分隔的路徑列表,能夠將其展開為多個獨立路徑;
例:使用一條命令窗創建/tmp/x/y1,/tmp/x/y2,/tmp/x/y1/a,/tmp/x/y1/b這些目錄
[[email protected] tmp]# mkdir -pv /tmp/x/{y1/{a,b},y2}
mkdir: created directory ‘/tmp/x’
mkdir: created directory ‘/tmp/x/y1’
mkdir: created directory‘/tmp/x/y1/a’
mkdir: created directory ‘/tmp/x/y1/b’
mkdir: created directory ‘/tmp/x/y2’
[[email protected] tmp]# tree /tmp/x
/tmp/x
├── y1
│ ├── a
│ └── b
└── y2
4 directories, 0 files
4、命令執行結果返回值
我們在bash中執行的命令都會有一個返回值來決定命令是否正確執行,這個狀態碼的結果保存在環境變量?中
?=0,則命令執行成功
?=1-255,則命令執行失敗
[[email protected] tmp]# echo "hello"
hello
[[email protected] tmp]# echo $? 當上一條命令正確執行時,返回碼為0
0
[[email protected] tmp]# ehco "hello" 這裏輸錯命令
bash: ehco: command not found...
[[email protected] tmp]# echo $?當上一條命令錯誤時,返回碼為非0
127
5、命令別名
在bash中我們可以為已有命令或命令和選項的組合、命令和命令的組合進行別名的定義,這樣更加方便用戶的操作,也可以保護系統的安全,我們使用alias命令進行別名定義
alias
【功能說明】:
設置別名
【語法格式】:
alias[-p] [name[=value] ... ]
【參數選項】:
參數 | 說明 |
-p | 打印所有別名的定義 |
【實踐操作】:
-p參數使用
[[email protected]]# alias -p 其實沒-p 效果一樣
alias cp=‘cp -i‘ 別名的設置格式
aliasl.=‘ls -d .* --color=auto‘
aliasll=‘ls -l --color=auto‘
aliasls=‘ls --color=auto‘
aliasmv=‘mv -i‘
aliasrm=‘rm -i‘
aliaswhich=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘
使用alias使復雜的東西變簡單
[[email protected]]# alias print=‘echohello world‘
[[email protected]]# print
helloworld
防止使用rm危險命令
[[email protected]]# alias rm=‘echo"rm can not be used,pls use mv"‘
[[email protected]]# rm test.txt
rmcan not be used,pls use mv test.txt
註意:在命令行中定義的別名,僅對當前shell進程有效;如果想永久有效,要定義在配置文件中;
僅對當前用戶:~/.bashrc
對所有用戶有效:/etc/bashrc
6、快捷鍵
bash命令行中提供給用戶一些便於操作的快捷鍵,下面列出部分常用的快捷鍵
ctrl + a:跳至命令行行首
ctrl + e:跳至命令行行尾
ctrl + u:刪除光標所在位置到命令行行首的數據
ctrl + k:刪除光標所在位置到命令行行尾的數據
ctrl + l:清空屏幕上的數據
7、通配符
bash使用某些特殊的符號進行對文件名的通用匹配被稱為通配符
? | 匹配任意單個字符 |
* | 匹配任意長度的任意字符 |
[ ] | 匹配[ ]中指定範圍內的任意字符 |
[^ ] | 匹配[^ ]中範圍外的任意字符 |
專用字符集合:
[:digit:]:任意數字,相當於0-9
[:lower:]:任意小寫字母
[:upper:]:任意大寫字母
[:alpha:]:任意大小寫字母
[:alnum:]:任意數字或字母
[:space:]:空白符
[:punct:]:標點符號
例:
顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間出現至少一位數字的文件或目錄;
# ls -d /var/l*[0-9]*[[:lower:]]
顯示/etc目錄下,以任意一位數字開頭,且以非數字結尾的文件或目錄;
# ls -d /etc/[0-9]*[^0-9]
顯示/etc/目錄下,以非字母開頭,後面跟了一個字母及其它任意長度任意字符的文件或目錄;
# ls /etc/[^[:alpha:]][[:alpha:]]*
復制/etc目錄下,所有以m開頭,以非數字結尾的文件或目錄至/tmp/mageedu目錄中;
# cp -a /etc/m*[^0-9] /tmp/mageedu
8、重定向
重定向就是對數據流向的位置引導,重定向分為輸入和輸出重定向
標準輸入重定向:<或<<,代碼為0
標準輸出重定向:>或>>,代碼為1
錯誤輸出重定向:2>或2>>,代碼為2
輸入重定向:
<:標準輸入重定向,command</path/to/file,這裏是由文件提供數據給命令
<<:此處創建文件,cat<<eof 文件內容 eof 這裏eof是文件內容輸入的提示及邊界符號
輸出重定向:
>:標準輸出重定向,覆蓋原有內容
[[email protected] tmp]# echo "hello world">text
[[email protected] tmp]# cat text
hello worldtext
>>:追加輸出重定向,在文件後追加內容
[[email protected] tmp]# echo "hello linux">>text
[[email protected] tmp]# cat text
hello world
hello linux
2>:錯誤輸出重定向,當命令執行錯誤時,將錯誤信息輸出到指定位置,並對指定文件覆蓋
2>>:追加錯誤重定向,同上,但在文件尾部追加而不是覆蓋
[[email protected] tmp]# ehco "hello error"2>text
[[email protected] tmp]# cat text
bash: ehco: command not found...
Similar command is: ‘echo‘
&>:合並正確及錯誤輸出流,並覆蓋
&>>:合並正確及錯誤輸出流,並追加
[[email protected] tmp]# echo "hello world again"&>text 正確輸出
[[email protected] tmp]# ehoc "error again"&>>text 錯誤輸出
[[email protected] tmp]# cat text
hello world again
bash: ehoc: command not found... 錯誤信息被追加到文末
合並正確與錯誤輸出流也可以用下面的表示方法
command >/path/to/file 2>&1 覆蓋
command >>/path/to/file2>&1 追加
9、管道
管道符號 “ | ”可以連接兩個或多個命令,實現將前面一個命令的標準輸出作為後面一個命令的標準輸入
command1 | command2 | command3…
10、hash命令
hash命令可以緩存使用過的命令所在路徑
當用戶在輸入命令時,bash會在PATH環境變量下路徑進行搜索,搜索到命令路徑後方可使用命令,當用戶使用過一次命令後,bash會把命令路徑緩存下來,這樣在下次使用時,就可以不要在去搜索PATH環境變量了,這樣更便捷。
[[email protected] tmp]# hash
hits command
2 /usr/bin/grep 這裏的數值是命令的使用次數
5 /usr/bin/cat
1 /usr/bin/mkdir
7 /usr/bin/ls
1 /usr/bin/tree
2 /usr/bin/vimtutor
bash基本特性