bash基本特性

bash基本特性linux

bash是Linux中最常使用到的shell,它給用戶提供了許多便利的功能和特性,下面就介紹一些bash的基本特性。git

 

一、命令歷史historyshell

bash能爲咱們提供命令的存儲功能,咱們也能夠藉由history命令來查看咱們以往輸入過的命令有哪些。vim

 

[root@localhost ~]# history緩存

   1  ss -lnt安全

   2  ifconfigbash

   …省略…ide

   767  historyspa

 

【語法格式】:命令行

history [option]…

【參數選項】:

參數

說明

-c

clear 清除歷史記錄

-d num

刪除某一條歷史記錄

-a

將如今的歷史命令追加到歷史文件中尾端

-w

將如今的歷史命令寫入到歷史文件中

 

bash會把歷史命令保存在用戶的家目錄的.bash_history文件中即 ~/.bash_history,bash默認用戶在退出本次shell時自動將登錄後輸入過的命令追加至文件中,在用戶還未退出本次shell時,咱們的歷史命令記錄在緩存中

 

HISTSIZE:緩存中能記錄的歷史命令條數,默認爲1000條

HISTFILESIZE:歷史文件中能保存的歷史命令條數,默認爲1000條

HISTFILE:歷史文件路徑,默認爲~/.bash_history

 

[root@localhost ~]# echo $HISTSIZE

1000

[root@localhost ~]# echo $HISTFILESIZE

1000

[root@localhost ~]# echo $HISTFILE

/root/.bash_history

 

調用歷史命令:

!!:再一次執行上一條命令

!#:再一次執行第#條命令

!string:再一次執行以string開頭的命令

 

 

二、命令和路徑補全

bash很便捷的爲用戶提供了,命令以及文件路徑補全的功能。即當用戶輸入命令和路徑的過程當中可使用【Tab】鍵來自動補全命令和路徑。

當咱們輸入部分字符串後若是系統能鎖定目標,則按一次【Tab】鍵就能夠補全,

若系統不能鎖定,則咱們能夠按兩次【Tab】鍵,使系統給出命令或文件列表。

 


三、命令行展開

把命令行的給定的特殊符號自動替換爲相應字符串的機制

  • ~: 自動替換爲用戶家目錄;

  • ~USERNAME:自動替換爲指定用戶的家目錄;

  • {}:可承載一個以逗號分隔的路徑列表,可以將其展開爲多個獨立路徑;

 

例:使用一條命令窗建立/tmp/x/y1,/tmp/x/y2,/tmp/x/y1/a,/tmp/x/y1/b這些目錄

[root@localhost 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’

[root@localhost tmp]# tree /tmp/x

/tmp/x

├── y1

│   ├── a

│   └── b

└── y2

 

4 directories, 0 files

 

 

四、命令執行結果返回值

咱們在bash中執行的命令都會有一個返回值來決定命令是否正確執行,這個狀態碼的結果保存在環境變量?中

?=0,則命令執行成功

?=1-255,則命令執行失敗

 

[root@localhost tmp]# echo "hello"  

hello

[root@localhost tmp]# echo $?  當上一條命令正確執行時,返回碼爲0

0

[root@localhost tmp]# ehco "hello" 這裏輸錯命令

bash: ehco: command not found...

 [root@localhost tmp]# echo $?當上一條命令錯誤時,返回碼爲非0

127

 


五、命令別名

在bash中咱們能夠爲已有命令或命令和選項的組合、命令和命令的組合進行別名的定義,這樣更加方便用戶的操做,也能夠保護系統的安全,咱們使用alias命令進行別名定義

alias

【功能說明】:

設置別名

【語法格式】:

alias[-p] [name[=value] ... ]

【參數選項】:

參數

說明

-p

打印全部別名的定義

【實踐操做】:

-p參數使用

[root@jojohyjmnt]# 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使複雜的東西變簡單

[root@jojohyjtmp]# alias print='echohello world'

[root@jojohyjtmp]# print

helloworld

 

防止使用rm危險命令

[root@jojohyjtmp]# alias rm='echo"rm can not be used,pls use mv"'

[root@jojohyjtmp]# rm test.txt

rmcan not be used,pls use mv test.txt

 

注意:在命令行中定義的別名,僅對當前shell進程有效;若是想永久有效,要定義在配置文件中;

              僅對當前用戶:~/.bashrc

              對全部用戶有效:/etc/bashrc

 


六、快捷鍵

bash命令行中提供給用戶一些便於操做的快捷鍵,下面列出部分經常使用的快捷鍵

ctrl + a:跳至命令行行首

ctrl + e:跳至命令行行尾

ctrl + u:刪除光標所在位置到命令行行首的數據

ctrl + k:刪除光標所在位置到命令行行尾的數據

ctrl + l:清空屏幕上的數據



七、通配符

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

 


八、重定向

重定向就是對數據流向的位置引導,重定向分爲輸入和輸出重定向

 

標準輸入重定向:<或<<,代碼爲0

標準輸出重定向:>或>>,代碼爲1

錯誤輸出重定向:2>或2>>,代碼爲2

 

輸入重定向:

<:標準輸入重定向,command</path/to/file,這裏是由文件提供數據給命令

<<:此處建立文件,cat<<eof 文件內容 eof 這裏eof是文件內容輸入的提示及邊界符號

 

輸出重定向:

>:標準輸出重定向,覆蓋原有內容

[root@localhost tmp]# echo "hello world">text

[root@localhost tmp]# cat text

hello worldtext

 

>>:追加輸出重定向,在文件後追加內容

[root@localhost tmp]# echo "hello linux">>text

[root@localhost tmp]# cat text                 

hello world

hello linux

 

2>:錯誤輸出重定向,當命令執行錯誤時,將錯誤信息輸出到指定位置,並對指定文件覆蓋

2>>:追加錯誤重定向,同上,但在文件尾部追加而不是覆蓋

 

[root@localhost tmp]# ehco "hello error"2>text

[root@localhost tmp]# cat text                 

bash: ehco: command not found...

Similar command is: 'echo'

 

&>:合併正確及錯誤輸出流,並覆蓋

&>>:合併正確及錯誤輸出流,並追加

[root@localhost tmp]# echo "hello world again"&>text  正確輸出

[root@localhost tmp]# ehoc "error again"&>>text       錯誤輸出

[root@localhost tmp]# cat text

hello world again

bash: ehoc: command not found... 錯誤信息被追加到文末

 

合併正確與錯誤輸出流也能夠用下面的表示方法

command >/path/to/file 2>&1   覆蓋

command >>/path/to/file2>&1  追加

 


九、管道

管道符號 「 | 」能夠鏈接兩個或多個命令,實現將前面一個命令的標準輸出做爲後面一個命令的標準輸入

command1 | command2 | command3…

 


   十、hash命令

hash命令能夠緩存使用過的命令所在路徑

當用戶在輸入命令時,bash會在PATH環境變量下路徑進行搜索,搜索到命令路徑後方可以使用命令,當用戶使用過一次命令後,bash會把命令路徑緩存下來,這樣在下次使用時,就能夠不要在去搜索PATH環境變量了,這樣更便捷。

[root@localhost 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

相關文章
相關標籤/搜索