第四周作業(alias、grep、正則表示式、find命令的基本用法)
1.命令別名 alias的用法
通過alias命令實現:
(1)alias不帶任何選項將顯示當前shell下所有的可用的命令別名的資訊,其中,等號之前表示新的命令名稱,等號右邊表示的是要替代的命令及其引數。
(2)定義別名:
alias new_name='old_name options'
注:通過命令列定義的命令別名只對當前shell有效,如果想永久有效,需要定義在配置檔案中
僅對當前使用者有效,其配置檔案為:~/.bashrc
對所有使用者都有效的配置檔案為/etc/bashrc
2. grep
grep基本介紹:
grep是一款文字過濾工具
作用:文字搜尋工具,根據使用者指定的“模式”對目標文字逐行進行匹配檢查,列印匹配到的行
模式:由正則表示式字元及文字字元所編寫的過濾條件
正則表示式:是由一類特殊字元及文字字元所編寫的模式,其中有些字元不表示字元字面的意思,而是表示控制或通配的功能
正則表示式分兩類:基本正則表示式和擴充套件正則表示式,其中grep支援正則基本正則表示式,egrep支援擴充套件正則表示式
grep語法:
grep [OPTIONS] PATTERN [FILES...]
--color 高亮顯示匹配到的字串
-v : 顯示不能被匹配到的行
-i : 忽略字元大小寫
-o : 僅顯示匹配到的字串
-q : 靜默模式,不輸出任何資訊
基本正則表示式元字元:
字元匹配:
. :匹配任意單個字元
[] :匹配指定範圍內的任意單個字元
[^] : 匹配指定範圍外的任意單個字元
其中:[:alnum:]表示所有的字母和數字
[:alpha:]表示所有的字母(不區分大小寫)
[:dight:]表示所有的數字
[:lower:]表示所有的小寫字母
[:upper:]表示所有的大寫字母
[:space:]表示所有的空白字元
[:punct:]表示所有的標點符號
次數匹配:
用於在要指定的字元後面,用於指定前面的字元要出現的次數
* :匹配前面的的字元任意次,僅表示次數
.* : 表示任意長度的任意字元
\? :表示匹配前面的字元0次或1次,即前面的字元可有可無
\+ : 表示匹配前面的字元至少一次
\{m\} : 匹配前面的字元m次
\{m,n\} :表示匹配前面的字元至少mci,至多n次
\{0,n\} :表示匹配前面的字元至多n次
\{m,\} :表示匹配前面的字元至少m次
位置錨定:
對特定位置進行定位
^:行首錨定:用於模式的最左側
¥:行尾錨定:用於模式的最右側
^PATTERN :用於模式匹配整行
^$:空行,不含有空格的行
^ [:space:]*$:空行,包含有空格的行
\<:詞首錨定,用於單詞匹配的左側
\>:詞尾錨定,用於單詞匹配的右側
\<PATTERN\>:匹配整個單詞
分組:分組是指將一個或多個字元捆綁在一起,當做一個整體來處理,其符號為: \(\)
例如:\(xy\)*ab:表示xy這個整體可以出現任意次
注:1 分組括號中的模式匹配到的內容會被正則表示式記錄在內部變數內,這些變數命名為:\1,\2,\3...
\1:表示的是從左側起,第一個左括號以及與之匹配的右括號之間的模式所匹配到的字元
2 後向引用:引用前面分組括號中的模式所匹配到的字元,而非模式本身
擴充套件正則表達
字元匹配:
[] :匹配指定範圍內的任意單個字元
[^] : 匹配指定範圍外的任意單個字元
基本與基本正則表示式相同
次數匹配:
*:任意次
?:0次或1次
+ :至少1次
{m}:精確匹配m次
{m,n}:至少m次,至多nci
{m,}:至少m次
{0,n}:至多n次
錨定:與基本正則表示式相同
分組:():用括號括起來表示要引用的內容,不需要進行轉義
後向引用:\1,\2,\3
本週作業作業:
(1)定義一個對所有使用者都生效的命令別名,例如:lftps='lftp 172.168.0.1/pub'
演示:vim /etc/bashrc 在末行加上如下命令,並且加上註釋,重啟後生效
也可以通過bash程序重新讀取配置檔案:
source /path/to/config_file 或 ./path/to/config_file
(2)顯示 /etc/passwd檔案中不以 /bin/bash結尾的行
grep -v "/bin/bash$" /etcpasswd
(3)顯示 /etc/passwd檔案中,包含2位數字或者三位數字的行
grep "\<[0-9]\{2,3\}\>" /etc/passwd
(4)顯示/proc/meminfo檔案中以大寫或小寫S開頭的行,用三種方式實現
(5)使用echo輸出一個絕對路徑,使用egrep取出路徑名,類似執行dirname /etc/passwd的結果
echo "/etc/passwd" | egrep -o "[^/]+/?$" | cut -d/ -f1
(6) 找出ifconfig中的ip地址,要求結果只顯示ip地址
ifconfig | grep -o -E "\<["
(7)編寫指令碼,實現自動新增三個使用者,並計算這三個使用者的uid之和
(8)vim 定製自動縮排4個字元
在末行模式下輸入 set ai 就可以保證此行再輸入命令前縮進了4個字元,當設定了自動縮排後,按ENTER鍵時就會按照此行縮排字元自動縮排
(9)find用法以及常用用法:
find命令是在目錄層級結構中查詢符合條件的檔案,所以它可以同時查指定目錄及其子目錄。同時它還可以對搜尋結果執行一定的檔案處理操作。
命令語法:
find [選項] [查詢路徑]... [查詢條件] [處理操作]
其中:
(1)查詢路徑:預設值為當前路徑,路徑可有有多個,路徑之間以空格隔開
(2)查詢條件:
-name "檔名稱”,支援萬用字元
-iname "檔名稱“ ,與name基本相同,但是它忽略字母大小寫
-user username 查詢指定使用者屬主的檔案,同樣還有-uid UID
-group groupName查詢屬於指定組的檔案,同樣還有-gid GID
-type filetype:根據檔案型別查詢,常用的型別為"f"普通檔案,"d"目錄檔案
-size [+|-]數字單位:常用單位為k、M、G,+號表示大於,-號表示小於等於,無符號則以10M為例,表示9M<檔案大小<=10M。
-atime [+|-]數字 :表示檔案的最後被訪問時間,以天為單位,+號表示大於等於天數+1,-號表示小於天數,無符號則以10為例,表示 10<=檔案最後訪問時間<11 。同樣還有-mtime表示檔案內容資料的最後修改時間,-ctime表示檔案的元資料的最後修改時間
-amin表示檔案的最後被訪問時間,以分鐘為單位,規則與-atime一樣。同樣還有-mmin表示檔案內容資料的最後修改時間 和-cmin 表示檔案的元資料最後修改時間
-perm [+|-] MODE 表示根據檔案的訪問許可權為條件。
-a表示前後兩個條件要同時滿足(與的關係)
-o表示前後兩個條件滿足一個即可(或的關係)
-not 或 !表示後面的條件取反。
(3)處理操作
-print 顯示結果在螢幕上,這是預設操作
-ls 對結果檔案使用ls -l 長格式顯示有螢幕上。
-delete: 刪除查詢到的檔案
-fls /路徑/結果檔名 : 把結果以長格式資訊儲存到指定的檔案中
-exec 命令 {} \; :表示對查詢到的檔案執行相應的命令,{}表示查詢到的檔案在命令中的佔位符。
-ok 命令 {} \; :與exec相同,但是對每個檔案進行操作前,會彈出提示資訊等使用者確認。
常用用法的例項演示如下:
$find /etc -name hosts
在目錄/etc中查詢檔案hosts
$find / -size +204800
在根目錄下查詢大於100MB的檔案,size是以塊為單位,2塊=1K
$find /tmp -user user1
在/tmp目錄下查詢所有者為user1的檔案
$ find /etc -cmin -5
在/etc下查詢5分鐘內被修改過屬性的檔案和目錄
$ find /etc -size +163840 -a -size -204800
在/etc下查詢大於80MB小於100MB的檔案
$ find /etc -name hosts -exec ls -l {} \;