第1章 企業案例故障
實例1-1 磁盤空間不足系列:
原因 排查過程 解決
1.block df -h; du -sh /data/* 具體的文件或目錄 確認之後刪除
2.block lsof|grep delete 重啓對應的服務
3.inode df -i; 找出系統中大於1M的目錄 刪除大量小文件
第2章 特殊符號
2.1 引號系列
2.1.1 “” 雙引號
引號內的特殊符號會被解析
2.1.2 ‘’ 單引號
所見即所得,輸入什麼就輸出什麼
2.1.3 `` 反引號
$()==``
2.1.4 無引號
可以使用{}
2.2 重定向系列
>標準輸出重定向先把文件清空追加
>>標準輸出追加重定向
2> 標準錯誤輸出重定向
2>>
<標準輸入重定向 xargs tr
<<標準輸入追加重定向與cat配合追加多行內容
2>&1將錯誤和正確內容都記錄到文件中
2.3 位置系列
~ 當前用戶家目錄
.. 上一級目錄
. 當前目錄
- 參數 cd – su –
2.4 判斷關係
&& 前面命令執行成功之後在執行後一個命令
|| 前一個命令執行失敗之後執行後一個命令
[root@oldboyedu50-lnb ~]# ls /oldboy && echo 目錄已存在
ext nginx.conf oldboy.SH oldboy.txt-hard oldboy.txt-soft2 test.sh t.sh.bak xiaodong xingfujie
jeacen oldboy oldboy.txt oldboy.txt-soft test t.sh wodi.gz xiaofan yingsui.gz
目錄已存在
[root@oldboyedu50-lnb ~]# ls /ooooo && echo 目錄已存在
ls: cannot access /ooooo: No such file or directory
[root@oldboyedu50-lnb ~]# ls /ooooo || echo 目錄不存在
ls: cannot access /ooooo: No such file or directory
目錄不存在
2.5 無分類系列
# 註釋說明 顯示環靜變量的配置文件 root用戶的命令提示符
$ 普通用戶命令提示符 awk取列
! !ls運行上一個以ls開頭的命令並執行 !!運行上一個命令
| 管道符號
; 在同一行分割命令
2.6 通配符號
2.6.1 * 所有文件
1.以.conf結尾的文件
find / -type f -name "*.conf"
2.找出系統中文件名包含ifconfig (文件名中有ifconfig就行)
方法一:
[root@oldboyedu50-lnb ~]# find / -type f -name "ifconfig"
/sbin/ifconfig
[root@oldboyedu50-lnb ~]#
[root@oldboyedu50-lnb ~]# find / -type f -name "*ifconfig*"
/usr/sbin/pifconfig
/usr/share/man/de/man8/ifconfig.8.gz
/usr/share/man/pt/man8/ifconfig.8.gz
/usr/share/man/man8/pifconfig.8.gz
/usr/share/man/man8/ifconfig.8.gz
/usr/share/man/fr/man8/ifconfig.8.gz
/sbin/ifconfig
方法二:
[root@oldboyedu50-lnb ~]# find / -type f |grep ifconfig
/usr/sbin/pifconfig
/usr/share/man/de/man8/ifconfig.8.gz
/usr/share/man/pt/man8/ifconfig.8.gz
/usr/share/man/man8/pifconfig.8.gz
/usr/share/man/man8/ifconfig.8.gz
/usr/share/man/fr/man8/ifconfig.8.gz
/sbin/ifconfig
2.6.2 {} 生成序列 備份
{} 生成序列
[root@oldboyedu50-lnb ~]# echo stu{01..5}
stu01 stu02 stu03 stu04 stu05
[root@oldboyedu50-lnb ~]#
[root@oldboyedu50-lnb ~]#
[root@oldboyedu50-lnb ~]# echo {1,5,100}
[root@oldboyedu50-lnb ~]# echo stu{01..10}
stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10
[root@oldboyedu50-lnb ~]# echo stu{01..10..2}
stu01 stu03 stu05 stu07 stu09
通過 {} 進行備份
[root@oldboyedu50-lnb ~]# cp oldboy.txt{,.bak}
[root@oldboyedu50-lnb ~]# echo oldboy.txt{,.bak}
oldboy.txt oldboy.txt.bak
第3章 基礎正則表達式
3.1 符號比較
中文 ‘’ “” () 。 * …… ¥ | {} 【】
英文 '' "" () . * ^ $ | {} []
爲grep配置別名
alias grep='grep --color'
alias egrep='egrep --color'
3.2 第1個符號 ^ 以....開頭的行
模擬文件
[root@oldboyedu50-lnb /oldboy]# cat oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
第1個符號 ^
以....開頭的行 ^m
[root@oldboyedu50-lnb /oldboy]# grep '^m' oldboy.txt
my blog is http://oldboy.blog.51cto.com
my qq is 49000448
my god ,i am not oldbey,but OLDBOY!
cat -A 顯示文件中所有符號 每行結尾都會有個$
3.3 第2個符號 $ 顯示文件結尾的行
[root@oldboyedu50-lnb /oldboy]# grep ' $' oldboy.txt
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
3.4 第3個符號^$ 顯示空行
[root@oldboyedu50-lnb /oldboy]# grep '^$' oldboy.txt
3.5 第4個符號 . 任意一個字符
[root@oldboyedu50-lnb /oldboy]# #grep '.' oldboy.txt
[root@oldboyedu50-lnb /oldboy]# grep -o '.' oldboy.txt
3.6 第5個符號 \ 轉義字符
[root@oldboyedu50-lnb /oldboy]# grep '\.$' oldboy.txt
I teach linux.
not 4900000448.
[root@oldboyedu50-lnb /oldboy]# tr '\n' '\t' <oldboy.txt
I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my blog is http://oldboy.blog.51cto.com our size is http://blog.oldboyedu.com my qq is 49000448 not 4900000448. my god ,i am not oldbey,but OLDBOY! [root@oldboyedu50-lnb /oldboy]#
3.7 第6個符號 * 一個字符連續出現0或0次以上
3.8 第7個符號 .* 所有符號字符 包括空行
[root@oldboyedu50-lnb /oldboy]# grep '.*' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
正則中表示 連續出現或所有的時候
正則表達式有貪婪性
替你尋找的文字符號 有多少吃多少 有多少匹配多少
[root@oldboyedu50-lnb /oldboy]# grep '^.*o' oldboy.txt
I am oldboy teacher!
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
3.9 第8個符號 []每次匹配一個字符
grep '[a-z]' oldboy.txt
grep '[A-Z]' oldboy.txt
grep '[0-9]' oldboy.txt
grep '[a-zA-Z]' oldboy.txt
grep '[a-Z]' oldboy.txt
grep -i '[a-z]' oldboy.txt
-i 不區分大小寫 ignore case
1.找出oldboy.txt中以m或n開頭的行
[root@oldboyedu50-lnb /oldboy]# grep '^[mn]' oldboy.txt
my blog is http://oldboy.blog.51cto.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
2.找出oldboy.txt中以m或n開頭並且以m或n結尾的行
[root@oldboyedu50-lnb /oldboy]# grep '^[mn]' oldboy.txt
my blog is http://oldboy.blog.51cto.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu50-lnb /oldboy]# grep '^[mn]' oldboy.txt|grep '[mn] $'
my blog is http://oldboy.blog.51cto.com
3.10 第9個符號 [^] 每次匹配一個字符,顯示出除過這個字符的所有字符
[root@oldboy50-01 ~]# grep '[^ab]' oldboy.tat
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
1.排除文件中的數字和大小寫字母
[root@oldboyedu50-lnb /oldboy]# grep '[0-Z]' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
第4章 擴展正則表達式 (ERE Extented Regular Expression)
4.1 第10個符號 + 前一個字符連續出現1次或1次以上
[root@oldboyedu50-lnb /oldboy]# egrep '0+' oldboy.txt
my qq is 49000448
not 4900000448.
[root@oldboyedu50-lnb /oldboy]# grep -E '0+' oldboy.txt
my qq is 49000448
not 4900000448.
[root@oldboyedu50-lnb /oldboy]# grep '0\+' oldboy.txt
my qq is 49000448
not 4900000448.
[root@oldboyedu50-lnb /oldboy]# egrep '0+' oldboy.txt -o
000
00000
1.取出連續出現的小寫字母
[root@oldboyedu50-lnb /oldboy]# egrep '[a-z]+' oldboy.txt
4.2 第11個符號 | 或者
[root@oldboyedu50-lnb /oldboy]# egrep 'oldboy|linux' oldboy.txt
I am oldboy teacher!
I teach linux.
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
1.先備份 /etc/ssh/sshd_config 然後 排除 文件中的#號的行或空行
[root@oldboyedu50-lnb /oldboy]# egrep -v '^$|#' /etc/ssh/sshd_config
Protocol 2
SyslogFacility AUTHPRIV
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
X11Forwarding yes
Subsystem sftp /usr/libexec/openssh/sftp-server
實例4-1 [^]與grep -v
[^a-z] 排除按字符 某個字符 某些字符
grep -v [a-z] 排除按行
[root@oldboyedu50-lnb /oldboy]# grep '[^a-z]' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
+++++\\\\\\!!!!$$$$$$^^^
####!!!^^^^^$$$$@@@@@####
[root@oldboyedu50-lnb /oldboy]# grep -v '[a-z]' oldboy.txt
+++++\\\\\\!!!!$$$$$$^^^
####!!!^^^^^$$$$@@@@@####
4.3 第12個符號 () 表示一個整體 反向引用/後向引用
[root@oldboyedu50-lnb /oldboy]# egrep 'oldb(o|e)y' oldboy.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my god ,i am not oldbey,but OLDBOY!
反向引用/後向引用
思路:把你想要的內容保護起來 ()
sed 在 's###g' 後兩個井號之間使用 \數字 引用
[root@oldboyedu50-lnb /oldboy]# echo 123456
123456
[root@oldboyedu50-lnb /oldboy]# echo '<123456>'
<123456>
[root@oldboyedu50-lnb /oldboy]# echo 123456|sed -r 's#(.*)#\1#g'
123456
[root@oldboyedu50-lnb /oldboy]# echo 123456|sed -r 's#(.*)#<\1>#g'
<123456>
[root@oldboyedu50-lnb /oldboy]# echo 123456|sed -r 's#(34)#<\1>#g'
12<34>56
[root@oldboyedu50-lnb /oldboy]# echo 123456|sed -r 's#(..)(..)(..)#\3#g'
56
[root@oldboyedu50-lnb /oldboy]# echo 123456|sed -r 's#(..)(..)(..)#\3\2#g'
5634
[root@oldboyedu50-lnb /oldboy]# echo 123456|sed -r 's#(..)(..)(..)#\3\2\1#g'
563412
[root@oldboyedu50-lnb /oldboy]# echo 123456|sed -r 's#(..)(..)(..)#\3<\2\1#g'
[root@oldboyedu50-lnb /oldboy]# echo 123456|sed -r 's#(..)(..)(..)#\3<\2>\1#g'
56<34>12
4.4 第13個符號 {} 0{n,m}表示至少出現了n次,最多出現m次
[root@oldboyedu50-lnb /oldboy]# egrep '0{3,4}' oldboy.txt
my qq is 49000448
not 4900000448.
[root@oldboyedu50-lnb /oldboy]# egrep '0{3}' oldboy.txt
my qq is 49000448
not 4900000448.
[root@oldboyedu50-lnb /oldboy]# egrep '0{3,4}' oldboy.txt
my qq is 49000448
not 4900000448.
[root@oldboyedu50-lnb /oldboy]# egrep '0{3}' oldboy.txt
my qq is 49000448
not 4900000448.
取×××號碼
[root@oldboyedu50-lnb /oldboy]# cat id.txt
金 211324198705244720
萬 500224197105168312
任 1231231231oldboy
任 3oldboy
任 lidao97303136098
任 alex2197303136098
任 350182197303oldgir
呂 211282199209113038
孔 150000198309176071
鄒 371001197412221284
賀 130185200011215926
杜 362522198711278101
向 14052219961008852X
[root@oldboyedu50-lnb /oldboy]# egrep '[0-9X]{18}' id.txt
金 211324198705244720
萬 500224197105168312
呂 211282199209113038
孔 150000198309176071
鄒 371001197412221284
賀 130185200011215926
杜 362522198711278101
XXXXXXXXXXXXXXXXXX
向 14052219961008852X
[root@oldboyedu50-lnb /oldboy]# egrep '[0-9]{17}[0-9X]' id.txt
金 211324198705244720
萬 500224197105168312
呂 211282199209113038
孔 150000198309176071
鄒 371001197412221284
賀 130185200011215926
杜 362522198711278101
向 14052219961008852X
4.5 第14個符號 ? 前一個字符連續出現0次或1次
取出網卡的ip地址
方法1
[root@oldboyedu50-lnb /oldboy]# ip a s eth0 |awk 'NR==3'|awk -F"[ /]+" '{print $3}'
10.0.0.200
[root@oldboyedu50-lnb /oldboy]#
取出ifconfig eth0 ip地址和子網掩碼
[root@oldboyedu50-lnb /oldboy]# ifconfig eth0 |awk 'NR==2'
inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu50-lnb /oldboy]# ifconfig eth0 |awk 'NR==2' |awk -F"[ :]+" '{print $4,$NF}'
10.0.0.200 255.255.255.0
方法二
[root@oldboyedu50-lnb /oldboy]# ifconfig eth0 |awk 'NR==2'
inet addr:10.0.0.200 Bcast:10.0.0.255 Mask:255.255.255.0
[root@oldboyedu50-lnb /oldboy]# ifconfig eth0 |awk 'NR==2' |awk -F"addr:|Bcast:| Mask:" '{print $2}'
10.0.0.200