︿
Top

Command Line Shortcuts File Globbing

  • *零個多個 字元即符合條件。
  • : 任何 單一 字元即符合條件。 
  • [0-9]: 此指定 數字區段 中即符合條件 (即 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 只要其一符合即可)。
  • [abc]: 此指定 英文字元名單 中即符合條件 (即 a, b, c 只要其一符合即可)。
  • [^abc]排除 此指定英文字元名單中即符合條件 (即不要 a, b, c 其一即可)。

如下範例即為上述符合條件的應用:

利用 * 配合指令 ls 查看 /dev/ram 下檔案,只要零個或多個條件滿足即符合此條件,因此我們可看到結果如下。
  • /dev/ram: 滿足零個字元符合條件。
  • /dev/ram0 ~ 15: 滿足多個字元符合條件。
ls /dev/ram*
 /dev/ram   /dev/ram1   /dev/ram11  /dev/ram13  /dev/ram15  /dev/ram3  /dev/ram5  /dev/ram7  /dev/ram9
 /dev/ram0  /dev/ram10  /dev/ram12  /dev/ram14  /dev/ram2   /dev/ram4  /dev/ram6  /dev/ram8

也可將 * 符號利用於切換路徑上,例如我們常常會切換到網路卡設定檔路徑如下,透過 * 我們可進行目錄的快速切換。
ls /etc/sysconfig/network-scripts/ifcfg-eth0   //透過補位鍵輸入路徑
ls /e*/s*/n*s/ifcfg-eth0                          //透過 * 切換路徑

利用 ? 配合指令 ls 查看 /dev/ram 下檔案,只要單一個字元即滿足符合條件,因此我們可看到結果如下:
  • /dev/ram0 ~ 9: 滿足單一個字元符合條件。
  • /dev/ram: 零個字元 (不符合條件)。
  • /dev/ram 11 ~ 15: 多個字元 (不符合條件)。
ls /dev/ram?
 /dev/ram0  /dev/ram1  /dev/ram2  /dev/ram3  /dev/ram4  /dev/ram5  /dev/ram6  /dev/ram7  /dev/ram8  /dev/ram9

利用 [1-5] 配合指令 ls 查看 /dev/ram 下檔案,只要此指定數字區段內任一個字元即滿足符合條件,因此我們可看到結果如下:
  • /dev/ram1 ~ 5: 滿足單一個字元符合條件。
  • /dev/ram: 零個字元,沒有數字區段 (不符合條件)。
  • /dev/ram6 ~ 15: 不在指定的數字區段內 (不符合條件)。
ls /dev/ram[1-5]
 /dev/ram1  /dev/ram2  /dev/ram3  /dev/ram4  /dev/ram5

我們先利用指令 touch 來建立一連串檔案後利用 [acf] 配合指令 ls 查看指定的英文字元名單符合條件者 (即 a, c, f 只要其一符合即可),因此我們可看到結果如下:
  • filea、filec、filef: 符合此指定英文字元名單中。
  • fileb、filed、filee、fileg、filex、filey、filez: 不在指定的英文字元名單中 (不符合條件)。
touch file{a,b,c,d,e,f,g,x,y,z}
ls
 filea  fileb  filec  filed  filee  filef  fileg  filex  filey  filez
ls -l file[acf]
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filea
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filec
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filef

如果指定的英文字元不在搜尋名單中怎辨? 前面有說過只要其中有符合的條件即列出 (也就是 ),如下列搜尋條件中可看到 fileo 並不在所有檔案中因此未顯示且指令也不會發生錯誤,我們可看到結果如下:
ls -l file[afo]
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filea
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filef

利用 [a-g] 配合指令 ls 查看檔案,只要此指定英文字元區段內任一個字元即滿足符合條件 (即 a, b, c, d, e, f, g 只要其一符合即可),因此我們可看到結果如下:
  • filea ~ g: 滿足英文內單一字元符合條件。
  • filex ~ z: 不在指定的英文字元內 (不符合條件)。
ls -l file[a-g]
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filea
 -rw-r--r-- 1 root root 0 Aug 14 08:14 fileb
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filec
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filed
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filee
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filef
 -rw-r--r-- 1 root root 0 Aug 14 08:14 fileg

利用 [^a-g] 配合指令 ls 查看檔案,排除此指定英文字元區段內任一個字元即滿足符合條件 (即 a, b, c, d, e, f, g 只要其一符合即排除),因此我們可看到結果如下:
  • filex ~ z: 不在指定的排除英文字元名單內 (不符合條件,所以未排除,結果就是顯示檔案名稱)。
  • filea ~ g: 滿足英文內單一字元符合條件 (符合條件,所以排除,結果就是不顯示)。
ls -l file[^abcdefg]
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filex
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filey
 -rw-r--r-- 1 root root 0 Aug 14 08:14 filez




Command Line Shortcuts the Tab Key

在指令模式下可以善用 <Tab> 補位鍵,當您鍵入檔案或資料夾前面幾個字元後可試著按下 tab 鍵來進行補位,若有相同開頭字元時則當您按下第二次 tab 鍵欲進行補位時系統會列出相關開頭檔案及資料夾,如下所示:
cd /etc/sys   //按下 2 次 tab 鍵後系統顯示相關檔案及資料夾
 sysconfig/   sysctl.conf  syslog.conf




Command Line Shortcuts History

我們可使用指令 history 來了解執行過的指令,並可配合相關快速捷徑來達成再次執行 history 內的指令。
  • !!: 執行 history 中最後一個指令。
  • !字元 (char): 執行 history 中離目前最接近此字元的指令。
  • !數字 (number): 執行 history 中對應該數字行數的指令。
  • Ctrl + r: 按下此鍵後會顯示 (reverse-i-search) 符號,您可輸入關鍵字而系統會快速尋找相關開頭且執行過的指令。
  • 快速呼叫 最後一次執行的 Argument,例如執行指令 ping 168.95.1.1 所以 168.95.1.1 即為 Argument 您可透過下列三種方式來快速呼叫此 Argument: ESC 後按下 .、Alt + .、!$。

如下範例即為上述說明的應用:
history
    1  history
    2  cat /etc/passwd
    3  touch 111
    4  ls
    5  cat /etc/group
    6  history
!!                //執行最後一行指令
 history
!c                //再次執行離目前最接近 c 字元的指令
 cat /etc/group
!4                //執行 history 中第四行指令
 ls




Command Line Expansion the tilde

在切換路徑的過程中您可透過波浪狀 (~) Tilde 來達到快速切換至使用者家目錄的功能,而若您是 Root 也可利用此符號來快速切換至指定的使用者家目錄。
cd              //使用者 weithenn 切換路徑至家目錄
cd ~            //使用者 weithenn 切換路徑至家目錄
cd ~weithenn   //Root 切換路徑至 weithenn 家目錄




Creating Shell Scripts

以下為建立 Shell Scripts 的基本知識。
  • 開頭為 #! 之後接著要使用的 Shell (例如 #!/bin/bash),而在 Script 中通常使用 # 來表示該行為註解。
  • 建立 Script 完成後記得給予 x 權限 (chmod u+x)。
  • 若您將建立好的 Script 存放於使用者路徑設定中,則可直接使用檔案名稱來執行 Script 而不用輸入絕對路徑或相對路徑來執行該 Script。

以下為 Root 路徑設定資訊。
echo $PATH
 /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

以下為使用者 weithenn 路徑設定資訊,所以若使用者建立好 Script 後存放於家目錄下 bin 資料夾中即可不用輸入絕對路徑或相對路徑來執行該 Script。
echo $PATH
 /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/weithenn/bin




Lab1.  請將資料夾中檔案全部刪除,但請留下附檔名為 .pi、.ps、.perl、.psd 的檔案

Ans:
請鍵入如下指令來建立相關檔案及附檔名。
touch test{0,1}{.pdf,.ps}
touch test2{.perl,.pi,.ppt,.psd}
ls -l
 -rw-r--r-- 1 root root 0 Aug 14 08:48 test0.pdf
 -rw-r--r-- 1 root root 0 Aug 14 08:48 test0.ps
 -rw-r--r-- 1 root root 0 Aug 14 08:48 test1.pdf
 -rw-r--r-- 1 root root 0 Aug 14 08:48 test1.ps
 -rw-r--r-- 1 root root 0 Aug 14 08:48 test2.perl
 -rw-r--r-- 1 root root 0 Aug 14 08:48 test2.pi
 -rw-r--r-- 1 root root 0 Aug 14 08:48 test2.ppt
 -rw-r--r-- 1 root root 0 Aug 14 08:48 test2.psd

若怕直接執行 rm 指令刪錯的話可利用指令 echo 來檢查是不是你要的條件,下列三種方式皆適用於處理此次的問題,當然解法也不只這三種請自行發揮吧,測試完成後只要將 echo 指令換成 rm 即可進行刪除。
echo t*[^.pi.ps.perl.psd]         //排除附檔名為 .pi, .ps, .perl, .psd
 test0.pdf test1.pdf test2.ppt
echo t*[^.pisderl]                //排除附檔名為 .pi, .ps, .perl, .psd
 test0.pdf test1.pdf test2.ppt
echo t*.p?[^d]                    //排除附檔名第三個字元為 d 的檔案
 test0.pdf test1.pdf test2.ppt
文章標籤: