1.1 查詢多少天內的檔案
[root@shell ~]# find . -atime -2
./.bash_profile
#查詢兩天內受到存取的檔案使用-atime,-2表示兩天內
#-n表示檔案更改時間距現在n天以內
#+n表示檔案更改時間距現在n天以前
#n表示距現在第n天
1.2 查詢指定檔案
[root@shell ~]# find /root/ -mtime -4 -name ‘*.xml’
/root/10.xml
1.3 查詢檔案或者當前目錄下的目錄
[root@shell ~]# find . -type f
./10.xml
[root@shell ~]# find . -type d
./.pki
1.4 按照許可權查詢檔案
[root@shell ~]# find . -perm 644
./10.xml
1.5 按照所屬使用者或者組來尋找
[root@shell ~]# find . -user root -group root
./10.xml
1.6 查詢比某個檔案新的檔案
[root@shell ~]# find . -newer 1.xml
./8.xml
#更改時間比檔案1.xml新的檔案
[root@shell ~]# find . ! -newer 1.xml
./10.xml
#更改時間比檔案1.xml的檔案
1.7 邏輯操作符的使用
[root@shell ~]# find . -maxdepth 1 -type d ! -name 「.」
./.pki
#-maxdepth 查詢一級目錄,!表示取反。
1.8 ls -l 命令放在find的-exec 選項中執行
[root@shell ~]# find . -type f -exec ls -l {} ;
-rw-r–r-- 1 root root 48 9月 10 21:06 ./10.xml
#{}表示所有查詢到的內容,\表示結束標誌
1.8 將目錄下所有擴充套件名爲.sh ,把包含」hello」的字串全部替換爲」world」
[root@shell ~]# find . -name 「*.xml」 -exec sed ‘s/hello/world/g’ {} ;
world boer
dflaflafjdlkf world
xargs:將標準輸入轉換成命令列參數
1.1 多行輸入變單行的例子
[root@shell ~]# cat 1.xml
world boer
dflaflafjdlkf world
testw rewl world
[root@shell ~]# xargs <1.xml
world boer dflaflafjdlkf world testw rewl world
1.2 通過-n 指定每行的輸出個數的例子
[root@shell ~]# xargs -n 3 <1.xml
world boer dflaflafjdlkf
1.3 自定義分割符(-d)
[root@shell ~]# xargs -n 3 <1.xml |xargs -d w
orld boer dflaflafjdlkf
1.4 find+xargs的使用
[root@shell ~]# find . -name 「*.xml」 |xargs -i mv {} test/
[root@shell ~]# cd test/
[root@shell test]# ls
10.xml 2.xml 4.xml 6.xml 8.xml wenben
[root@shell test]# find . -type f -name ‘*.xml’ |xargs rm -r
[root@shell test]# ls
1.5 查詢linux系統下以txt結尾,30天沒有修改的檔案大小大於20K同時具有執行許可權的檔案並備份/data/backup:
find / -name *.txt -mtime +30 -type f -size +20k -perm a=x -exec cp {} /data/backup/ ;
1.grep 的使用
參數說明:
-c:表示列印符合要求的行數
-i:表示忽略大小寫
-n:表示輸出符合要求的行號
-v:表示反向選擇,列印不符合要求的行
2.實戰
2.1 查詢包含root的行
[root@shell ~]# grep -n ‘root’ /etc/passwd
1:root: x
:0:0:root:/root:/bin/bash
2.2 查詢不包含nologin 的行
[root@shell ~]# grep -v ‘nologin’ /etc/passwd
youngboy10:x
:521:521::/home/youngboy10:/bin/bash
2.3 查詢包含數位的行
[root@shell ~]# grep -n ‘[0-9]’ /etc/inittab
15:# upstart works, see init(5), init(8), and initctl(8)
2.4 過濾掉所有空行和以#開頭的行
[root@shell ~]# grep -Ev ‘^$|#’ /etc/httpd/conf/httpd.conf
ServerTokens OS
ServerRoot 「/etc/httpd」
PidFile run/httpd.pid
Timeout 60
2.5 查詢r 和t之間有兩個任意字元的行
[root@shell ~]# grep ‘r…t’ /etc/passwd --color
root:x
:0:0:root:/root:/bin/bash
operator:x
:11:0:operator:/root:/sbin/nologin
ftp:x
:14:50:FTP User:/var/ftp:/sbin/nologin
2.6 查詢指定字元的出現次數的行
[root@shell ~]# grep ‘o{2}’ /etc/passwd --color
root:x
:0:0:root:/root:/bin/bash
lp:x
:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x
:8:12:mail:/var/spool/mail:/sbin/nologin
#o 出現2次
[root@shell ~]# grep ‘o{1,2}’ /etc/passwd --color
root:x
:0:0:root:/root:/bin/bash
bin:x
:1:1:bin:/bin:/sbin/nologin
daemon:x
:2:2:daemon:/sbin:/sbin/nologin
#o 出現1~2次
*
表示0個或者多個*前面的字元。 「.」 表示任意一個字元
1.列印某行
[root@shell ~]# sed -n '2’p /etc/passwd
bin:x
:1:1:bin:/bin:/sbin/nologin
#列印第二行
[root@shell ~]# sed -n '1,$'p /etc/passwd
root:x
:0:0:root:/root:/bin/bash
bin:x
:1:1:bin:/bin:/sbin/nologin
#列印所有行
[root@shell ~]# sed -n '1,3’p /etc/passwd
root:x
:0:0:root:/root:/bin/bash
bin:x
:1:1:bin:/bin:/sbin/nologin
daemon:x
:2:2:daemon:/sbin:/sbin/nologin
#列印1到3行
2.含某個字串的行
[root@shell ~]# sed -n '/^root/'p /etc/passwd
root:x
:0:0:root:/root:/bin/bash
#列印以root 開頭的行,和grep 類似(^,$,.,*)
3.刪除某些行
[root@shell ~]# sed '1’d /etc/passwd
bin:x
:1:1:bin:/bin:/sbin/nologin
#刪除第一行
[root@shell ~]# sed '1,3’d /etc/passwd
adm:x
:3:4:adm:/var/adm:/sbin/nologin
lp:x
:4:7:lp:/var/spool/lpd:/sbin/nologin
#刪除1,3行
[root@shell ~]# sed '/bash/'d /etc/passwd
bin:x
:1:1:bin:/bin:/sbin/nologin
daemon:x
:2:2:daemon:/sbin:/sbin/nologin
#刪除包含bash 的行
4.替換字元或者字串
[root@shell ~]# sed ‘1,2s/ot/to/g’ /etc/passwd
roto:x
:0:0:roto:/roto:/bin/bash
bin:x
:1:1:bin:/bin:/sbin/nologin
#將1,2行的ot 替換成to,g表示本行全域性替換,不加g則只替換本行出現的第一個
[root@shell ~]# cat 1.txt
long
huilong
hou
[root@shell ~]# sed ‘s/h/t/g’ 1.txt
long
tuilong
tou
[root@shell ~]# sed ‘s/[0-9]//g’ /etc/passwd
root:x
:::root:/root:/bin/bash
#刪除所有的數位,如果字母的話是[a-zA-Z]
5.直接修改檔案的內容
[root@shell ~]# sed -i ‘s/h/t/g’ 1.txt
[root@shell ~]# cat 1.txt
long
tuilong
tou
6.第二行後加a=b
[root@shell ~]# sed ‘2a a=b’ a.txt
DEVICE=eth0
TYPE=Ethernet
a=b
UUID=f7fff62c-ee4f-4177-962c-e76b0a09df41
7.第三行前追加a=c
[root@shell ~]# sed ‘3i a=c’ a.txt
DEVICE=eth0
TYPE=Ethernet
a=c
UUID=f7fff62c-ee4f-4177-962c-e76b0a09df41
8.包含ONBOOT的行,並在其後面新增a=c
[root@shell ~]# sed ‘/ONBOOT/a a=c’ b.txt
DEVICE=eth0
TYPE=Ethernet
UUID=f7fff62c-ee4f-4177-962c-e76b0a09df41
ONBOOT=yes
a=c
awk 的使用
1.擷取文件中的某一段
[root@shell ~]# head -n5 /etc/passwd|awk -F ‘:’ ‘{print $1}’
root
#-F 指定分隔符,預設是空格或者tab爲分隔符,print 列印$1 爲第一個欄位
[root@shell ~]# head -n5 /etc/passwd|awk -F ‘:’ ‘{print $0}’
root:x
:0:0:root:/root:/bin/bash
#$0 表示整行
[root@shell ~]# head -n5 /etc/passwd|awk -F ‘:’ ‘{print $1"#"$2"#"$3"#"$4}’
root#x#0#0
#表示自定義的內容,必須用雙引號括起來。
2.統計文件的行數
[root@shell ~]# awk ‘{print NR}’ /etc/passwd|tail -n1
3.統計每行有多少個欄位
[root@shell ~]# awk -F ‘:’ ‘{print NF}’ /etc/passwd
7
[root@shell ~]# awk -F ‘:’ ‘{print $NF}’ /etc/passwd
/bin/bash
#輸出每行最後一個欄位
[root@shell ~]# awk -F ‘:’ ‘NR1,NR2 {print $1}’ /etc/passwd
root
bin
#匹配第一,第二行第一個欄位。
4.條件操作符
[root@shell ~]# awk -F ‘:’ ‘$3>=500’ /etc/passwd
wo:x
:500:500::/home/wo:/bin/bash
oldboy:x
:501:501::/home/oldboy:/bin/bash
5.預設分隔符是空格
[root@python-study ~]# echo 「this is a test」|awk ‘{print $0}’
this is a test
[root@python-study ~]# echo 「this is a test」|awk ‘{print $1}’
This
6.顯示/etc/passwd的第1列和第7列,用逗號分隔顯示,所有行開始前新增列名start1,start7,最後一行新增,end1,end7
[root@python-study ~]# awk -F’:’ ‘BEGIN {print 「start1,start7」} {print $1 「,」 $7} END {print 「end1,end7」}’ /etc/passwd
#BEGIN語句在所有文字處理動作執行之前被執行,END在所有文字處理動作執行之後被執行
1.3 統計/etc/passwd檔案中,每行的行號,每行的列數,對應的完整行內容
[root@python-study ~]# awk -F’:’ ‘{print NR " " NF " " $0}’ /etc/passwd
1.4將輸出的內容變成大寫
[root@python-study ~]# awk -F’:’ ‘{print toupper($1)}’ /etc/pass
1.5常用函數
常用函數如下
函數名 作用
toupper(s)返回s的大寫
tolower(s) 返回s的小寫
length(s) 返回s長度
substr(s,p) 返回字串s中從p開始的後綴部分
[root@python-study ~]# awk -F’:’ ‘{print length($1)}’ /etc/passwd
1.6 統計文字總欄位個數
[root@python-study ~]# awk ‘BEGIN{i=0}{i +=NF}END {print i}’ /etc/passwd
54
#load average: 第一個數表示1分鐘內系統的平均負載值,第二個數表示5分鐘內系統的平均負載值,第三個數表示15分鐘內的系統的平均負載值;主要注意第一個數,只要不超過cpu 的數量就沒有關係(不超過1就可以了)
[root@shell ~]# grep -c ‘processor’ /proc/cpuinfo
1
#每個1秒輸出一次,輸出5次。r表示執行或等待cpu的進程數。當該數值大於cpu個數時,說明cpu資源不夠用。b表示等待資源的進程數。wa 表示I/O等待所佔用CPU的時間百分比。
#顯示記憶體使用的詳細情況
[root@python ~]# vmstat -s
#檢視/dev/sda1的讀寫統計資訊
#reads:來自該分割區的讀的次數
#read sectors:來自該分割區的讀磁區的次數
#writes:來自該分割區的寫的次數
#requested writes:來自該分割區的寫的請求次數
#直觀的檢視網絡卡流量,注意curr
#檢視當前系統開啓了那些埠
[root@python ~]# tcpdump -i eth1 -c 10
#指定抓包數
[root@python ~]# tcpdump -i eth1 port 22 -c 10
#指定抓22埠的包
1.1 顯示正在使用檔案的進程
[root@shell ~]# lsof /var/log/messages
#FD:檔案描述符(0:表示標準輸出,1:表示標準輸入,2:表示標準錯誤,u:表示該檔案被開啓並處於讀取/寫入模式,r:表示該檔案被開啓並處於只讀模式,w:表示該檔案被開啓並處於寫入模式。)
#TYPE:檔案型別,REG表示普通檔案
#NODE:索引節點
1.2 指定進程所開啓的檔案
[root@python ~]# lsof -c rsyslogd
1.3 顯示指定進程號所開啓的檔案
[root@python ~]# lsof -p 1140
1.4 監聽指定協定,埠和主機等資訊
[root@python ~]# lsof -i tcp
#顯示所有tcp網路連線的進程資訊
[root@python ~]# lsof -i tcp:22
顯示埠爲22的進程
[root@shell ~]# lsof -u root
#顯示指定使用者使用的檔案
[root@shell run]# mpstat 1 1
[root@shell run]# mpstat -P 0
#顯示第一個cpu的資訊
#只顯示磁碟統計資訊
[root@shell ~]# iostat -dk
#只顯示cpu的統計資訊
[root@shell ~]# iostat -ck
[root@python ~]# chkconfig –list
[root@shell ~]# chkconfig --level 3 sshd on
[root@shell ~]# chkconfig --list|grep sshd
sshd 0:關閉 1:關閉 2:啓用 3:啓用 4:啓用 5:啓用 6:關閉
#使用—level指定關閉sshd服務在3級別開機啓動。
1.1 檢視cpu的整體負載
[root@shell ~]# sar -u 1 1
#%user:使用者進程消耗的cpu時間百分百
%nice:改變過優先順序的進程佔用的cpu時間百分百
%system:系統(內核)進程消耗的cpu時間百分百
%steal:虛擬機器強制cpu等待的時間百分百
%idle:cpu處於空閒狀態的百分百
1.2 顯示執行佇列的大小(與系統當前的平均負載均衡相同)
[root@shell ~]# sar -q 1 1
#runq-sz:執行佇列的長度(等待執行的進程數)
#plist-sz:進程列表中進程和執行緒的數量
1.3 顯示記憶體使用情況
[root@shell ~]# sar -r 1 1
1.4 顯示緩衝區的使用情況
[root@shell ~]# sar -b 1 1
tps:每秒物理裝置的I/O傳輸總量
rtps:每秒從物理裝置讀入的數據總量
wtps:每秒從物理裝置寫入的數據總量
1.5 檢視系統磁碟的讀寫效能
[root@shell ~]# sar -d 1 1
陣列是一個元素的集合,它把有限的元素(或變數、字元內容)用一個名字來命名。
[root@shell ~]# long=(1 2 3)
[root@shell ~]# echo ${long[*]}
1 2 3
[root@shell ~]# echo ${long[0]}
1
[root@shell ~]# echo ${long[1]}
2
[root@shell ~]# echo ${long[2]}
3
[root@shell ~]# echo ${long[3]}
[root@shell ~]# echo ${#long[*]}
3
[root@shell ~]# echo ${#long[1]}
1
[root@shell ~]# echo ${#long[2]}
1
[root@shell ~]#
[root@shell ~]# unset long[1]
[root@shell ~]# echo ${long[]}
1 3
[root@shell ~]# unset long
[root@shell ~]#
[root@shell ~]# echo ${long[]}
[root@shell ~]# long=(1 2 3)
[root@shell ~]# echo KaTeX parse error: Expected 'EOF', got '#' at position 33: …
[root@shell ~]#̲ long01=((echo {a…z}))
[root@shell ~]# echo ${long01[*]}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@shell ~]# sh 3.sh
1
2
3
4
5
[root@shell ~]# cat 3.sh
#!/bin/bash
long=(1 2 3 4 5)
for i in ${long[*]}
do
echo $i
done
#第一種
[root@shell shell]# sh 1.sh
1
2
3
4
5
[root@shell shell]# cat 1.sh
#!/bin/bash
for n in 1 2 3 4 5
do
echo $n
done
#第二種
[root@shell shell]# sh 2.sh
3
4
5
6
7
8
9
[root@shell shell]# cat 2.sh
#!/bin/bash
for ((i=3;i<=9;i++))
do
echo $i
done
#第一個i是變數的初始化,第二個是變數的範圍,第三個是變數的自增自減。
[root@shell shell]# touch long_{1…100}_log.txt
#要求將_log去掉
[root@shell shell]# cat 3.sh
#!/bin/bash
cd /root/shell
for n in echo ls *.txt
do
mv $n echo $n|sed 's/_log//g'
done
[root@shell shell]# cat 4.sh
#!/bin/bash
for n in chkconfig --list|grep "3:on"|awk '{print $1}'|grep -Ev 'mysqld'
do
chkconfig $n off
done
[root@shell shell]# cat 5.sh
#!/bin/bash
for ((i=0;i<5;i++))
do
curl http://wwww.baidu.com
sleep 2
done
[root@shell ~]# cat 3.sh
#!/bin/bash
PS3=「please select a nmu from menu:」
select n in old young child
do
echo -e 「i guess you selected the menu is:\n $REPLY) $n」
done
[root@shell ~]# sh 3.sh
[root@shell shell]# vi 1.sh
#!/bin/bash
#read password and test
echo 「------------------------------」
read -p 「enter a password:」 good
if [ 「$good」 == 「pass」 ];
then
echo 「ok」
else
echo 「error」
fi
[root@shell shell]# source 1.sh
enter a password:good
error
[root@shell shell]# source 1.sh
enter a password:pass
ok
[root@shell shell]# cat 2.sh
#!/bin/bash
read -p 「please enter your count:」 count
if [ $count -gt 80 ];
then
echo 「excellence」
elif [ $count -gt 70 ];
then
echo 「fine」
elif [ $count -gt 60 ];
then
echo 「pass」
else
echo 「fail」
fi
[root@shell shell]# source 2.sh
please enter your count:60
fail
[root@shell shell]# source 2.sh
please enter your count:80
fine
[root@shell shell]# cat 3.sh
#!/bin/bash
case $1 in
[a-z]|[A-Z])
echo 「you shi zimu」
;;
[[:digit:]])
echo 「you shi shuzi」
;;
*)
echo 「error」
;;
Esac
[root@shell shell]# source 3.sh
please enter you:g
you shi zimu
[root@shell shell]# source 3.sh
please enter you:1
you shi shuzi
[root@shell shell]# cat 4.sh
#!/bin/bash
case $1 in
start)
httpd &
;;
stop)
pkill httpd
;;
restart)
pkill httpd
httpd &
;;
*)
echo 「useage:$0(stop|start|restart)」
;;
esac
[root@shell shell]# source 4.sh restart
[root@shell shell]# cat 6.sh
#!/bin/bash
u_num=1
while [ $num -le 20 ]
do
echo "1*$u_num"
u_num=$((u_num+1))
done
[root@shell shell]# source 6.sh
11
12
13
14
15
16
17
18
19
110
111
112
113
114
115
116
117
118
119
120
[root@shell shell]# cat 7.sh
#!/bin/bash
FILE=/etc/sysconfig/network-scripts/ifcfg-eth0
while read -r line
do
echo $line
done<$FILE
[root@shell shell]# source 7.sh
DEVICE=eth0
TYPE=Ethernet
UUID=f7fff62c-ee4f-4177-962c-e76b0a09df41
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.88
PREFIX=24
[root@shell shell]# cat 11.sh
#!/bin/bash
for ip in {1..254}
do
case $ip in
10)
continue
;;
15)
break
;;
esac
echo $ip
done
sleep 5
exit
echo "the world be printed content"
[root@shell shell]# source 11.sh
1
2
3
4
5
6
7
8
9
11
12
13
14
例子
#批次刪除使用者
[root@shell shell]# cat 8.sh
#!/bin/bash
u_num=20
until [ $u_num -eq 0 ]
do
userdel user${u_num}
u_num=$((u_num-1))
done