站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

邁向 RHCE 之路 (Day10) - vi 編輯器及常用指令

前言

vi 編輯器 (進階 vim 編輯器),以下為 vi 編輯器簡單介紹,詳細內容可參考 [維基百科 - vi][國立中山大學 - vi 指令說明(完整版)],VI 編輯器有 3 種模式:

Command-Mode: 可下指令

Insert-Mode: 可對檔案內容進行編輯

Extend-Mode: 可執行檔案內容搜尋、取代、存檔、離開

以下為介紹在指令模式下常用到的基本指令及其應用

File Contents (less、cat、tac、paste)

透過指令 less 來查看檔案內容,當內容大於一頁時可利用 PageUp、PageDown 來進行上下頁切換,指令 cat 及 tac 則為一次列出檔案內容,cat 為從頭開始列出檔案內容 tac 為從尾開始列出檔案內容。

 #less /etc/issue
  CentOS Linux release 6.0 (Final)
  Kernel \r on an \m
 #cat /etc/issue                   //從頭開始列出檔案內容
  CentOS Linux release 6.0 (Final)
  Kernel \r on an \m
 #tac /etc/issue                   //從尾開始列出檔案內容
  Kernel \r on an \m
  CentOS Linux release 6.0 (Final)

指令 cat 及 paste 若欲同時列出多個檔案內容時其排列方式不同,cat 為一個檔案內容顯示完畢後緊接另一個檔案內容而 paste 則是平行顯示 (中間隔 tab),這樣說或許很抽象但利用下列範例即可知其功能,如下檔案 f1 內容為小寫 a ~ e 而 f2 內容為大寫 A ~ E。

 #cat f1 f2      //一個檔案內容顯示完畢後緊接另一個檔案內容
  1
  2
  3
  a
  b
  c
 #paste f1 f2    //平行顯示 (中間隔 tab)
  1       a
  2       b
  3       c

File Excerpts (head、tail)

指令 head 及 tail 則可用來快速查看檔案內容並指令顯示行數 (預設為 10 行),head 預設為顯示檔案內容前 10 行 tail 預設為顯示檔案內容後 10 行,若欲指定顯示的行數可配合參數 -n。

 #head -n 3 /etc/passwd     //顯示檔案內容前 5 行
  root:x:0:0:root:/root:/bin/bash
  bin:x:1:1:bin:/bin:/sbin/nologin
  daemon:x:2:2:daemon:/sbin:/sbin/nologin
 #tail -n 1 /etc/passwd     //指定顯示多個檔案內容後 1 行
  gdm:x:42:42::/var/lib/gdm:/sbin/nologin
  weithenn:x:500:500::/home/user/weithenn:/bin/bash
  wei:x:501:501::/home/user/wei:/bin/bash

Extract by Column or Field (cut)

指令 cut 則可用來對字串進行切割的處理,如下範例為利用指令 ifconfig 顯示內容配合 grep 搜尋字串內容後後利用 cut 對標準輸出 Standard Output (1) 字串進行處理,以下為操作範例及常用參數為 -d: 指定切割符號、-f: 指定以切割符號為準取第幾個欄位,如下操作練習利用 grep 搜尋網卡 IP Address 配合使用 cut 指令來取出 IP Address:

 #ifconfig |grep Bc                                //指令執行結果
  inet addr: 192.168.1.10  Bcast:192.168.1.255  Mask:255.255.255.0
 #ifconfig | grep Bc | cut -f2 -d:                 //上述輸出字串結果,指定切割符號為 : 後取第二個欄位
  192.168.1.10  Bcast
 #ifconfig |grep Bc | cut -d: -f2 | cut -d" " -f1  //上述輸出字串結果,指定切割符號為空格後取第一個欄位
  192.168.1.10

Extract by Keyword (grep)

指令 grep 可對檔案內容或標準輸出進行字串過濾的處理,以下為操作範例及常用參數說明:

 #cat test        //查看檔案 test 內容
  abc
  ABC
  xyz
  XYZ
 #grep a test     //搜尋檔案內容中含 a 字元的字串
  abc
 #grep -i a test  //搜尋檔案內容中含 a、A 字元的字串 (忽略大小寫)
  abc
  ABC
 #grep -n a test  //搜尋檔案內容中含 a 字元的字串並印出行數
  1:abc
 #grep -v a test  //排除搜尋檔案內容中含 a 字元的字串
  ABC
  xyz
  XYZ
 #grep -A2 a test //搜尋檔案內容中含 a 字元的字串並印出後 2 行
  abc
  ABC
  xyz
 #grep -B1 x test //搜尋檔案內容中含 x 字元的字串並印出前 1 行
  ABC
  xyz
 #grep -C1 x test //搜尋檔案內容中含 x 字元的字串並印出前後各 1 行
  ABC
  xyz
  XYZ

下列操作為切換至系統放置文字目錄 /usr/share/doc 使用參數 -n 來列出行數,-r 連子目錄都尋找,--color=auto 顏色顯示擊中條件,搜尋條件為 127.0.0.1

 #cd /usr/share/doc
 #grep -nr --color=auto '127.0.0.1' *
  curl-7.19.7/FAQ:1081:  pure numbers, such as 127.0.0.1 or ::1.
  dhclient-4.1.1/dhclient.conf.sample:5:prepend domain-name-servers 127.0.0.1;
  ...略...

Text Stats (wc)

指令 wc 計算檔案的列數 (Line)、字數 (Word)、位元組 (Bytes),以下為操作範例及常用參數說明:

 #paste f1 f2   //顯示 f1 及 f2 內容
  1       a
  2       b
  3       c
 #wc -l f1      //統計 f1 檔案內容列數
  3 f1
 #wc -l f2      //統計 f2 檔案內容列數
  3 f2
 #wc -l f1 f2   //統計 f1 及 f2 檔案內容列數
  3 f1
  3 f2
  6 total       //統計多個檔案時會有加總值

Sorting Text (sort)

指令 sort 可對檔案內容進行排序並將結果顯示於標準輸出 (STDOUT),但請注意其指令功能並不會改變檔案內容而是僅僅顯示而以,以下為操作範例及常用參數說明:

 #cat f1      //查看 f1 檔案內容 
  Z
  b
  g
  A
  y 
  A
 #sort f1     //排序 f1 內容 (僅顯示於 STDOUT 並未改變檔案內容本身)
  A
  A
  b
  g
  y
  Z
 #sort -r f1  //反向排序 f1 內容 (僅顯示於 STDOUT 並未改變檔案內容本身)
  Z
  y
  g
  b
  A
  A
 #sort -u f1  //排序後去掉重覆字 (僅顯示於 STDOUT 並未改變檔案內容本身)
  A
  b
  g
  y
  Z
 #sort -t : -k 3 -n /etc/passwd   //對 UID 進行排序
  ...略...
  weithenn:x:500:500::/home/user/weithenn:/bin/bash
  wei:x:501:501::/home/user/wei:/bin/bash
  nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

雖然 sort 有參數 -u 可來顯示唯一字元,但有時我們會想知道到底重覆了幾次,此時就可使用指令 uniq 配合參數 -c 來達成。

 #cut -d: -f7 /etc/passwd  | sort | uniq     //取使用者帳號檔案第 7 個欄位排序後取唯一字元
  /bin/bash
  /bin/sync
  /sbin/halt
  /sbin/nologin
  /sbin/shutdown
 #cut -d: -f7 /etc/passwd  | sort | uniq -c  //加上 -c 參數來統計重覆了幾次
   3 /bin/bash
   1 /bin/sync
   1 /sbin/halt
  30 /sbin/nologin
   1 /sbin/shutdown

Comparing Files (diff)

指令 diff 可對指定的檔案內容進行內容比對並將不同的地方顯示出來。

 #cp -a /etc/issue /etc/issue.orig    //複製檔案
 #vi /etc/issue                       //修改內容將 \m 刪除
 #diff -ruN /etc/issue /etc/issue.orig  //使用 diff 對 2 個檔案進行比對
  --- /etc/issue  2011-10-11 12:14:09.029819705 +0800
  +++ /etc/issue.orig     2011-07-03 10:15:46.000000000 +0800
  @@ -1,3 +1,3 @@
   CentOS Linux release 6.0 (Final)
  -Kernel \r on an
  +Kernel \r on an \m

Tools for Manipulating Text (sed)

sed 指令可快速搜尋檔案內容某個關鍵字並進行取代的動作,但請注意其指令功能並不會改變檔案內容而是僅僅顯示而以: (若要取代則加上 -i 參數即可)

 #cat f1                      //查看檔案內容
  1,iphone,ipad
  2,iPhone,ipad
  3,Iphone,IPAD
 #sed '1s/ipad/ipod/' f1      //將第 1 個關鍵字 ipad 取代為 ipod
  1,iphone,ipod
  2,iPhone,ipad
  3,Iphone,IPAD
 #sed 's/ipad/ipod/g' f1      //將所有關鍵字 ipad 取代為 ipod
  1,iphone,ipod
  2,iPhone,ipod
  3,Iphone,IPAD
 #sed 's/[iI]phone/ipod/g' f1 //將所有關鍵字 iphone, Iphone 取代為 ipod
  1,ipod,ipad
  2,iPhone,ipad
  3,ipod,IPAD
Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com