一、 alias 命令:系統設置命令別名 用法:alias [-p] [name[=value] ... ] 註意‘=’和字元串之間不能包含空格 顯示當前設置的別名:alias 或 alias –p 1 [root@localhost ~]# alias 2 3 alias cp='cp -i' 4 ...
一、 alias 命令:系統設置命令別名
用法:alias [-p] [name[=value] ... ] 註意‘=’和字元串之間不能包含空格
顯示當前設置的別名:alias 或 alias –p
1 [root@localhost ~]# alias 2 3 alias cp='cp -i' 4 5 alias egrep='egrep --color=auto' 6 7 alias fgrep='fgrep --color=auto' 8 9 alias grep='grep --color=auto' 10 11 alias l.='ls -d .* --color=auto' 12 13 alias ll='ls -l --color=auto' 14 15 alias ls='ls --color=auto' 16 17 alias mv='mv -i' 18 19 alias rm='rm -i' 20 21 alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' 22 23 [root@localhost ~]# alias -p 24 25 alias cp='cp -i' 26 27 alias egrep='egrep --color=auto' 28 29 alias fgrep='fgrep --color=auto' 30 31 alias grep='grep --color=auto' 32 33 alias l.='ls -d .* --color=auto' 34 35 alias ll='ls -l --color=auto' 36 37 alias ls='ls --color=auto' 38 39 alias mv='mv -i' 40 41 alias rm='rm -i' 42 43 alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
若只想顯示某個別名代表的含義可輸入alias name,比如:
1 [root@localhost ~]# alias ls 2 3 alias ls='ls --color=auto'
若想為某個命令設置別名可輸入 alias 新命令='原命令 選項/參數',比如:
[root@localhost ~]# alias lftps='lftp 172.168.0.1/pub' [root@localhost ~]# alias lftps alias lftps='lftp 172.168.0.1/pub'
別名永久化:
alias的作用僅在該次登入的操作,即輸入一次alias後,這個修改只在當前的Shell生效。如果重新開啟一個 Shell,或者重新登錄,則這些alias將無法使用。好在linux中提供alias永久化的方法:
<1>.若要每次登入就自動生效別名,則把別名加在/etc/profile或~/.bashrc中。然後# source ~/.bashrc
[root@localhost ~]# cat .bashrc # .bashrc # User specific aliases and functions alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' alias lftps='172.168.0.1/pub' # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi [root@localhost ~]# source ~/.bashrc [root@localhost ~]# lftps -bash: 172.168.0.1/pub: No such file or directory
<2>.若要讓每一位用戶都生效別名,則把別名加在/etc/bashrc最後面,然後# source /etc/bashrc
若想取消某個別名可輸入unalias name,比如
unalias lftps
二、文本處理工具grep:
Linux上文本處理三劍客:
grep, egrep, fgrep:文本過濾工具(模式:pattern)工具;
grep:基本正則表達式,-E,-F
egrep:擴展正則表達式, -G,-F
fgrep:不支持正則表達式,
sed:stream editor, 流編輯器;文本編輯工具;
awk:Linux上的實現為gawk,文本報告生成器(格式化文本);
概念:正則表達式(Regual Expression, REGEXP):由一類特殊字元及文本字元所編寫的模式,其中有些字元不表示其字面意義,而是用於表示控制或通配的功能;
分類:正則表達式分兩類:
基本正則表達式:BRE
擴展正則表達式:ERE
元字元:\(hello[[:space:]]\+\)\+
grep(Global search REgular expression and Print out the line):.
作用:文本搜索工具,根據用戶指定的“模式(過濾條件)”對目標文本逐行進行匹配檢查;列印匹配到的行;
模式:由正則表達式的元字元及文本字元所編寫出的過濾條件;
正則表達式引擎;
用法1:grep [OPTIONS] PATTERN [FILE...]
實例:
[root@localhost ~]# grep "UID" /etc/fstab UUID=86f402f4-53d3-44d5-be0f-7b83897744d9 / ext4 defaults 1 1 UUID=50ad8124-e08c-4e0f-8788-6529804755f4 /boot ext4 defaults 1 2
用法2:grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
參數OPTIONS:
--color=auto:對匹配到的文本著色後高亮顯示;
-i:ignorecase,忽略字元的大小寫;
-o:僅顯示匹配到的字元串本身;
-v, --invert-match:顯示不能被模式匹配到的行;
-E:支持使用擴展的正則表達式元字元;
-q, --quiet, --silent:靜默模式,即不輸出任何信息;
-A #:after, 後#行
-B #:before,前#行
-C #:context,前後各#行
基本正則表達式元字元:
字元匹配:
. :匹配任意單個字元;
[]:匹配指定範圍內的任意單個字元;
[^]:匹配指定範圍外的任意單個字元;
[:digit:]:所有數字 [0-9]
[:lower:]:所有小寫字母 [a-z]
[:upper:]:所有大寫字母 [A-Z]
[:alpha:]:所有字母 [a-zA-Z]
[:alnum:]:所有字母和數字 [0-9a-zA-Z]
[:punct:]:所有標點符號
[:space:]:所有空白字元 空格後tab
匹配次數:用在要指定其出現的次數的字元的後面,用於限制其前面字元出現的次數;預設工作於貪婪模式;
*:匹配其前面的字元任意次;0,1,多次;
.*:匹配任意長度的任意字元
\?:匹配其前面的字元0次或1次;即其前面的字元是可有可無的;
\+:匹配其前面的字元1次或多次;即其面的字元要出現至少1次;
\{m\}:匹配其前面的字元m次;
\{m,n\}:匹配其前面的字元至少m次,至多n次;
\{0,n\}:至多n次
\{m,\}:至少m次
位置錨定:
^:行首錨定;用於模式的最左側;
$:行尾錨定;用於模式的最右側;
^PATTERN$:用於PATTERN來匹配整行;
^$:空白行;
^[[:space:]]*$:空行或包含空白字元的行;
單詞:非特殊字元組成的連續字元(字元串)都稱為單詞;
\< 或 \b:詞首錨定,用於單詞模式的左側;
\> 或 \b:詞尾錨定,用於單詞模式的右側;
\<PATTERN\>:匹配完整單詞;
分組及引用
\(\):將一個或多個字元捆綁在一起,當作一個整體進行處理;
\(xy\)*ab
Note:分組括弧中的模式匹配 到的內容會被正則表達式引擎自動記錄於內部的變數中,這些變數為:
\1:模式從左側起,第一個左括弧以及與之匹配的右括弧之間的模式所匹配到的字元;
\2:模式從左側起,第二個左括弧以及與之匹配的右括弧之間的模式所匹配到的字元;
\3
後向引用:引用前面的分組括弧中的模式所匹配到的字元;
egrep:
支持擴展的正則表達式實現類似於grep文本過濾功能;grep -E
egrep [OPTIONS] PATTERN [FILE...]
選項:
-i, -o, -v, -q, -A, -B, -C
-G:支持基本正則表達式
擴展正則表達式的元字元:
字元匹配:
.:任意單個字元
[]:指定範圍內的任意單個字元
[^]:指定範圍外的任意單個字元
次數匹配:
*:任意次,0,1或多次;
?:0次或1次,其前的字元是可有可無的;
+:其前字元至少1次;
{m}:其前的字元m次;
{m,n}:至少m次,至多n次;
{0,n}
{m,}
位置錨定
^:行首錨定;
$:行尾錨定;
\<, \b:詞首錨定;
\>, \b:詞尾錨定;
分組及引用:
():分組;括弧內的模式匹配到的字元會被記錄於正則表達式引擎的內部變數中;
後向引用:\1, \2, ...
或:
a|b:a或者b;
C|cat:C或cat
(c|C)at:cat或Cat
fgrep:不支持正則表達式元字元;
當無需要用到元字元去編寫模式時,使用fgrep必能更好;
作業題;
顯示/etc/passwd文件中不以/bin/bash結尾的行;
[root@localhost ~]# grep -v "/bin/bash$" /etc/passwd
找出/etc/passwd文件中的兩位數或三位數;
[root@localhost ~]# grep "\<[0-9]\{2,3\}\>" /etc/passwd
找出/proc/meminfo文件中,所有以大寫或小寫S開頭的行;至少有三種實現方式;
[root@localhost ~]# grep -i "^s" /proc/meminfo [root@localhost ~]# grep "^[sS]" /proc/meminfo [root@localhost ~]# grep -E "^(s|S)" /proc/meminfo
使用echo命令輸出一絕對路徑,使用egrep取出其路徑名,類似執行dirname /etc/passwd的結果
[root@localhost ~]# echo /etc/sysconfig/ | grep -E -o "[^/]+/?$"
找出ifconfig中的IP地址,要求結果只顯示IP地址
[root@localhost ~]# ifconfig |egrep -o "(([0-9]|[1-9]|[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9]|[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"
Vim定製自動縮進四個字元
步驟:1、打開/etc/vimrc文件
2.在末尾加入 set ts=4
三、編寫shell腳本,實現自動添加三個用戶,並計算這三個用戶的uid之和
[root@localhost ~]# vim userAdd.sh #!/biin/bash #date 2018/12/2 #author gongxu #miaoshu 添加三個用戶,並計算這三個用戶的uid之和 if [ $# -lt 3 ];then echo "at less input three username" exit 5 fi if grep "^$1\>" /etc/passwd &> /dev/null;then echo "$1 exist" exit 1 else useradd $1 echo $1 | passwd --stdin $1 &> /dev/null echo "$1 add finished" fi if grep "^$2\>" /etc/passwd &> /dev/null;then echo "$2 exist" exit 2 else useradd $2 echo $2 | passwd --stdin $2 &> /dev/null echo "$2 add finished" fi if grep "^$3\>" /etc/passwd &> /dev/null;then echo "$3 exist" exit 3 else useradd $3 echo $3 | passwd --stdin $3 &> /dev/null echo "$3 add finished" fi id1=$(grep "^$1" /etc/passwd | cut -d : -f 3) id2=$(grep "^$2" /etc/passwd | cut -d : -f 3) id3=$(grep "^$3" /etc/passwd | cut -d : -f 3) id4=$[id1+id2+id3] echo "user: $1,$2,$3 uid sum=$id4"
四、find用法及其常用的實例演示
find命令作用:實時查找工具,通過遍歷指定起始路徑下文件系統層級結構完成文件查找;
find命令的工作特性:
查找速度略慢;
精確查找;
實時查找;
用法:find [OPTIONS] [查找起始路徑] [查找條件] [處理動作]
查找起始路徑:指定具體搜索目標起始路徑;預設為當前目錄;
查找條件:指定的查找標準,可以根據文件名、大小、類型、從屬關係、許可權等等標準進行;預設為找出指定路徑下的所有文件;
處理動作:對符合查找條件的文件做出的操作,例如刪除等操作;預設為輸出至標準輸出;
查找條件:表達式:選項和測試
測試:結果通常為布爾型("true", "false")
根據文件名查找:
-name "pattern"
-iname "pattern"
支持glob風格的通配符;
*, ?, [], [^]
-regex pattern:基於正則表達式模式查找文件,匹配是整個路徑,而非其名;
根據文件從屬關係查找:
-user USERNAME:查找屬主指定用戶的所有文件;
-group GRPNAME:查找屬組指定組的所有文件;
-uid UID:查找屬主指定的UID的所有文件;
-gid GID:查找屬組指定的GID的所有文件;
-nouser:查找沒有屬主的文件;
-nogroup:查找沒有屬組的文件;
根據文件的類型查找:
例:find /etc -size +1M -type f –ls #-type 後表示文件類型的不需要在加 -,只有是find的參數才加 -
-type TYPE:
f: 普通文件
d: 目錄文件
l:符號鏈接文件
b:塊設備 文件
c:字元設備文件
p:管道文件
s:套接字文件
組合測試:
與:-a, 預設組合邏輯;
或:-o
非:-not, !
實例:
1、 找出/tmp目錄下屬主為非root的所有文件;
[root@localhost ~]# find /tmp -not -user root -ls
2、 找出/tmp目錄下文件名中不包含fstab字元串的文件;
[root@localhost ~]# find /tmp -not -name "*fstab*" -ls
3、找出/tmp目錄下屬主為非root,而且文件名不包含fstab字元串的文件;
[root@localhost ~]# find /tmp -not -user root -a -not -iname "*fstab*" -ls
或保留一個 -not,使用括弧:
[root@localhost ~]# find /tmp -not \( -user root -o -not -iname "*fstab*" \) –ls
根據文件的大小查找:
-size [+|-]#UNIT
Unit的常用單位:k, M, G
#UNIT:(#-1, #]
-#UNIT:[0,#-1]
+#UNIT:(#, oo)
根據時間戳查找:
以“天”為單位:
-atime [+|-]#
#:[#, #-1)
-#:(#, 0]
+#:(oo, #-1]
-mtime
-ctime
以“分鐘”為單位:
-amin
-mmin
-cmin
根據許可權查找:
-perm [/|-]mode
mode:精確許可權匹配; 例:find /tmp –perm 664
/mode:任何一類用戶(u,g,o)的許可權中的任何一位(r,w,x)符合條件即滿足;
9位許可權之間存在“或”關係; 例:find /tmp –perm /222 –ls
-mode:每一類用戶(u,g,o)的許可權中的每一位(r,w,x)同時符合條件即滿足;
9位許可權之間存在“與”關係;
處理動作:
-print:輸出至標準輸出;預設的動作;
-ls:類似於對查找到的文件執行“ls -l”命令,輸出文件的詳細信息;
-delete:刪除查找到的文件;
-fls /PATH/TO/SOMEFILE:把查找到的所有文件的長格式信息保存至指定文件中;
-ok COMMAND {} \; :對查找到的每個文件執行由COMMAND表示的命令;每次操作都由用戶進行確認;
例:find /tmp –nouser –nogroup –ok chown root:root {} \; #修改沒有用戶和用戶組的文件,然後加上root用戶。
註意:{}為查找到的文件名的集合,\; 為固定格式。
-exec COMMAND {} \; :對查找到的每個文件執行由COMMAND表示的命令;
例:find /tmp –perm /002 –exec mv {} {}.danger \; #修改其他用戶有寫許可權的文件,將其文件名後面加上danger
註意:find傳遞查找到的文件路徑至後面的命令時,是先查找出所有符合條件的文件路徑,並一次性傳遞給後面的命令;
但是有些命令不能接受過長的參數,此時命令執行會失敗;另一種方式可規避此問題:
find | xargs COMMAND
實例:
1、查找/var目錄下屬主為root,且屬組為mail的所有文件或目錄;
[root@localhost ~]# find /var -user root -a -group mail –ls
2、查找/usr目錄下不屬於root, bin或hadoop的所有文件或目錄;用兩種方法;
[root@localhost ~]# find /usr -not -user root -a -not -user bin -a -not -user hadoop [root@localhost ~]# find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls
3、查找/etc目錄下最近一周內其內容修改過,且屬主不是root用戶也不是hadoop用戶的文件或目錄;
[root@localhost ~]# find /etc -mtime -7 -a -not \( -user root -o -user hadoop \) -ls [root@localhost ~]# find /etc -mtime -7 -a -not -user root -a -not -user hadoop -ls
4、查找當前系統上沒有屬或屬組,且最近一周內曾被訪問過的文件或目錄;
[root@localhost ~]# find / \( -nouser -o -nogroup \) -atime -7 -ls
5、查找/etc目錄下大於1M且類型為普通文件的所有文件;
[root@localhost ~]# find /etc -size +1M -type f -exec ls -lh {} \;
6、查找/etc目錄下所有用戶都沒有寫許可權的文件;
[root@localhost ~]# find /etc -not -perm /222 -type f -ls
7、查找/etc目錄至少有一類用戶沒有執行許可權的文件;
[root@localhost ~]# find /etc -not -perm -111 -type f -ls
8、查找/etc/init.d/目錄下,所有用戶都有執行許可權,且其它用戶有寫許可權的所有文件;
[root@localhost ~]# find /etc -perm -113 -type f –ls [root@localhost ~]# find /etc/init.d/ -perm -111 -a -perm /002 -type f -ls