0五、Linux通配符、轉義字符、環境變量

   問題:做爲Linux運維人員,咱們有時候也會遇到明明一個文件的名稱就在嘴邊但就是想不起來的狀況。若是就記得一個文件的開頭幾個字母,想遍歷查找出全部以這個關鍵詞開頭的文件,該怎麼操做呢?html

範例:單個查看硬盤文件linux

[root@linuxprobe ~]# ls -l /dev/sda運維

brw-rw----. 1 root disk 8, 0 Aug 20  2019 /dev/sda編輯器

[root@linuxprobe ~]# ls -l /dev/sda1ide

brw-rw----. 1 root disk 8, 1 Aug 20  2019 /dev/sda1spa

[root@linuxprobe ~]# ls -l /dev/sda2htm

brw-rw----. 1 root disk 8, 2 Aug 20  2019 /dev/sda2blog

[root@linuxprobe ~]# ls -l /dev/sda3ci

ls: cannot access /dev/sda3: No such file or directoryrem

[root@linuxprobe ~]#

範例:使用通配符*查看文件

[root@linuxprobe ~]# ls -l /dev/sda*

brw-rw----. 1 root disk 8, 0 Aug 20  2019 /dev/sda

brw-rw----. 1 root disk 8, 1 Aug 20  2019 /dev/sda1

brw-rw----. 1 root disk 8, 2 Aug 20  2019 /dev/sda2

[root@linuxprobe ~]#

範例:使用?查看文件

[root@linuxprobe ~]# ls -l /dev/sda?

brw-rw----. 1 root disk 8, 1 Aug 20  2019 /dev/sda1

brw-rw----. 1 root disk 8, 2 Aug 20  2019 /dev/sda2

範例:使用匹配[]查看文件

[root@linuxprobe ~]# ls -l /dev/sda[0-9]

brw-rw----. 1 root disk 8, 1 Aug 20  2019 /dev/sda1

brw-rw----. 1 root disk 8, 2 Aug 20  2019 /dev/sda2

[root@linuxprobe ~]# ls -l /dev/sda[135]

brw-rw----. 1 root disk 8, 1 Aug 20  2019 /dev/sda1

[root@linuxprobe ~]#

 

   經常使用的轉義字符以下:

反斜槓(\):使反斜槓後面的一個變量變爲單純的字符串

單引號(''):轉義其中全部的變量爲單純的字符串

雙引號(""):保留其中的變量屬性,不進行轉義處理

反引號(``):把其中的命令執行後返回結果

範例:輸出以雙引號括起來的字符串與變量信息

[root@linuxprobe ~]# PRICE=5

[root@linuxprobe ~]# echo "Price is $PRICE"

Price is 5

範例:輸出「Price is $5」

//這不是咱們預期的

[root@linuxprobe ~]# echo "Price is $$PRICE"

Price is 3767PRICE

//想讓第一個「$」乖乖地做爲美圓符號,那麼就須要使用反斜槓(\)來進行轉義

[root@linuxprobe ~]# echo "Price is \$$PRICE"

Price is $5

範例:只須要某個命令的輸出值時,能夠像`命令`這樣,將命令用反引號括起來

[root@linuxprobe ~]# echo `uname -a`

Linux linuxprobe.com 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux

[root@linuxprobe ~]# echo uname -a

uname -a

 

   變量是計算機系統用於保存可變值的數據類型。在Linux系統中,變量名稱通常都是大寫的,這是一種約定俗成的規範。咱們能夠直接經過變量名稱來提取到對應的變量值。

簡單來講,命令在Linux中的執行分爲4個步驟。

   第1步:判斷用戶是否以絕對路徑或相對路徑的方式輸入命令(如/bin/ls),若是是的話則直接執行。

   第2步:Linux系統檢查用戶輸入的命令是否爲「別名命令」,即用一個自定義的命令名稱來替換本來的命令名稱。能夠用alias命令來建立一個屬於本身的命令別名,格式爲「alias 別名=命令」。若要取消一個命令別名,則是用unalias命令,格式爲「unalias 別名」。咱們以前在使用rm命令刪除文件時,Linux系統都會要求咱們再確認是否執行刪除操做,其實這就是Linux系統爲了防止用戶誤刪除文件而特地設置的rm別名命令,接下來咱們把它取消掉:

[root@linuxprobe ~]# ls

anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Templates

Desktop Downloads Music Public Videos

[root@linuxprobe ~]# rm anaconda-ks.cfg

rm: remove regular file ‘anaconda-ks.cfg’? y

[root@linuxprobe~]# alias rm

alias rm='rm -i'

[root@linuxprobe ~]# unalias rm

[root@linuxprobe ~]# rm initial-setup-ks.cfg

[root@linuxprobe ~]#

   第3步:Bash解釋器判斷用戶輸入的是內部命令仍是外部命令。內部命令是解釋器內部的指令,會被直接執行;而用戶在絕大部分時間輸入的是外部命令,這些命令交由步驟4繼續處理。能夠使用「type命令名稱」來判斷用戶輸入的命令是內部命令仍是外部命令。

   第4步:系統在多個路徑中查找用戶輸入的命令文件,而定義這些路徑的變量叫做PATH,能夠簡單地把它理解成是「解釋器的小助手」,做用是告訴Bash解釋器待執行的命令可能存放的位置,而後Bash解釋器就會乖乖地在這些位置中逐個查找。PATH是由多個路徑值組成的變量,每一個路徑值之間用冒號間隔,對這些路徑的增長和刪除操做將影響到Bash解釋器對Linux命令的查找。

[root@linuxprobe ~]# echo $PATH

/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin

[root@linuxprobe ~]# PATH=$PATH:/root/bin

[root@linuxprobe ~]# echo $PATH

/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin

   這裏有比較經典的問題:「爲何不能將當前目錄(.)添加到PATH中呢? 」 緣由是,儘管能夠將當前目錄(.)添加到PATH變量中,從而在某些狀況下可讓用戶免去輸入命令所在路徑的麻煩。可是,若是黑客在比較經常使用的公共目錄/tmp中存放了一個與ls或cd命令同名的木馬文件,而用戶又恰巧在公共目錄中執行了這些命令,那麼就極有可能中招了。

   因此,做爲一名態度謹慎、有經驗的運維人員,在接手了一臺Linux系統後必定會在執行命令前先檢查PATH變量中是否有可疑的目錄,另外讀者從前面的PATH變量示例中是否也感受到環境變量特別有用呢。

Linux系統中最重要的10個環境變量

變量名稱

做用

HOME

用戶的主目錄(即家目錄)

SHELL

用戶在使用的Shell解釋器名稱

HISTSIZE

輸出的歷史命令記錄條數

HISTFILESIZE

保存的歷史命令記錄條數

MAIL

郵件保存路徑

LANG

系統語言、語系名稱

RANDOM

生成一個隨機數字

PS1

Bash解釋器的提示符

PATH

定義解釋器搜索用戶執行命令的路徑

EDITOR

用戶默認的文本編輯器

範例:查看HOME變量在不一樣用戶身份下都有哪些值(su是用於切換用戶身份的命令)

[root@linuxprobe ~]# echo $HOME

/root

[root@linuxprobe ~]# su - linuxprobe

Last login: Mon Aug 19 18:20:10 CST 2019 on pts/0

[linuxprobe@linuxprobe ~]$ echo $HOME

/home/linuxprobe

   其實變量是由固定的變量名與用戶或系統設置的變量值兩部分組成的,咱們徹底能夠自行建立變量,來知足工做需求。

範例:設置一個名稱爲WORKDIR的變量,方便用戶更輕鬆地進入一個層次較深的目錄

[root@linuxprobe ~]# mkdir /home/workdir

[root@linuxprobe ~]# WORKDIR=/home/workdir

[root@linuxprobe ~]# cd $WORKDIR

[root@linuxprobe workdir]# pwd

/home/workdir

[root@linuxprobe workdir]#

範例:使用export命令將其提高爲全局變量

[root@linuxprobe workdir]# su linuxprobe

[linuxprobe@linuxprobe ~]$ cd $WORKDIR

[linuxprobe@linuxprobe ~]$ echo $WORKDIR

 

[linuxprobe@linuxprobe ~]$ exit

exit

[root@linuxprobe ~]# export WORKDIR

[root@linuxprobe ~]# su linuxprobe

[linuxprobe@linuxprobe workdir]$ cd $WORKDIR

[linuxprobe@linuxprobe workdir]$ pwd

/home/workdir

 

原文出處:https://www.cnblogs.com/CSAH/p/11610539.html

相關文章
相關標籤/搜索