全部課程
linux重定向和文件的查找
發(fā)布時(shí)間: 2021-06-28
linux重定向和文件的查找
管道 | 的使用
語法:command-a | command-b | command-c | ......
注意:
1、管道命令只處理前一個(gè)命令正確輸出,不處理錯(cuò)誤輸出
2、管道右邊的命令,必須能夠接收標(biāo)準(zhǔn)輸入的數(shù)據(jù)流命令才行
3、管道符可以把兩條命令連起來,它可以鏈接多個(gè)命令使用
# ps -axu | grep sshd
root 1089 0.0 0.2 105996 4088 ? Ss 20:19 0:00 /usr/sbin/sshd -D
root 43262 0.0 0.0 112680 984 pts/1 S+ 21:36 0:00 grep --color=auto sshd
tee命令(了解)
功能:讀取標(biāo)準(zhǔn)輸入的數(shù)據(jù),并將其內(nèi)容輸出成文件。
語法:tee [-a][--help][--version][文件...]
參數(shù):
-a, --append 內(nèi)容追加到給定的文件而非覆蓋
--help 在線幫助
tee指令會(huì)從標(biāo)準(zhǔn)輸入設(shè)備讀取數(shù)據(jù),將其內(nèi)容輸出到標(biāo)準(zhǔn)輸出設(shè)備,同時(shí)保存成文件
例1:將磁盤使用的信息寫入文件
# df -h | tee disk.log
例2:將文件系統(tǒng)使用的信息追加到文件
# df -h | tee -a disk.log
注: 可以使用來記錄日志
which-whereis-locate-grep-find查找命令
which-whereis-locate-grep find命令使用
查找文件一般有以下幾個(gè)命令:
which 查看可執(zhí)行文件的位置
whereis 查看可執(zhí)行文件的位置及相關(guān)文件
locate 配合數(shù)據(jù)庫緩存,快速查看文件位置
grep 過濾匹配,它是一個(gè)文件搜索工具
find 查找相關(guān)文件
舉例:
# which cd
/usr/bin/cd
# whereis cd
cd: /usr/bin/cd /usr/share/man/man1/cd.1.gz /usr/share/man/man1p/cd.1p.gz
# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.g
locate
locate命令和find -name 功能差不多,是它的另外一種寫法,但是這個(gè)要比find搜索快的多,因?yàn)閒ind命令查找的是具體目錄文件,而locate它搜索的是一個(gè)數(shù)據(jù)庫/var/lib/mlocate/mlocate.db,這個(gè)數(shù)據(jù)庫中存有本地所有的文件信息;這個(gè)數(shù)據(jù)庫是Linux自動(dòng)創(chuàng)建并每天自動(dòng)更新維護(hù)。
相關(guān)的配置信息在/etc/updatedb.conf,查看定時(shí)任務(wù)信息在/etc/cron.daily/mlocate
# touch /opt/123.txt
# locate 123.txt #發(fā)現(xiàn)找不到
# updatedb #如果對當(dāng)天文件查找,需要手動(dòng)更新數(shù)據(jù)庫updatedb
# locate 123
grep查找使用
作用:過濾,它能夠使用正則表達(dá)式來搜索文本,并把結(jié)果打印出來
參數(shù):
-v 取反
-i 忽略大小寫
^# 以#開頭
#$ 以#結(jié)尾
^$ 空行
-n 對過濾的內(nèi)容加上行號(hào)
| 或者的意思
# ps -aux | grep sshd | grep -v grep
root 1089 0.0 0.2 105996 4088 ? Ss 20:19 0:00 /usr/sbin/sshd -D
# grep bash$ /etc/passwd #以bash結(jié)尾
# grep "nologin\|root" /etc/passwd | wc -l
36
注: \ 表示轉(zhuǎn)義符
# egrep "nologin|root" /etc/passwd | wc -l #查看包括nologin或root的行
36
注:egrep 是 grep加強(qiáng)版本
find命令使用(必會(huì),參數(shù)比較多)
格式:
find pathname -options [-print]
命令字 路徑名稱 選項(xiàng) 輸出
參數(shù):
pathname: find命令所查找的目錄路徑,不輸入代表當(dāng)前目錄例如用 . 來表示當(dāng)前目錄,用 / 來表示系統(tǒng)根目錄。
find命令選項(xiàng):
-name 按照文件名查找文件。 “名稱”
-perm 按照文件權(quán)限來查找文件。666 777 等
-user 按照文件屬主來查找文件
-group 按照文件所屬的組來查找文件
-mtime -n / +n 按照文件的更改時(shí)間來查找文件,
- n 表示文件更改時(shí)間距現(xiàn)在n天以內(nèi)
+ n 表示文件更改時(shí)間距現(xiàn)在n天以前
-type 查找某一類型的文件
b - 塊設(shè)備文件
d - 目錄
c - 字符設(shè)備文件
p - 管道文件
l- 符號(hào)鏈接文件
f - 普通文件
-size n 查找符合指定的文件大小的文件
-exec 對匹配的文件執(zhí)行該參數(shù)所給出的其他linux命令, 相應(yīng)命令的形式為' 命令 {} \;,注意{ }和 \;之間的空格,{}代表查到的內(nèi)容
例1:查看當(dāng)前目錄下所有的TXT格式的文件
# find . -name "*.txt"
./a.txt
./xuegod.txt
2、按照更改時(shí)間或訪問時(shí)間等查找文件
如果希望按照更改時(shí)間來查找文件,可以使用mtime,atime或ctime選項(xiàng)
mtime: 文件最后一次修改的時(shí)間
atime: 最后一次訪問時(shí)間
ctime: 文件的最后一次變化時(shí)間,也就是修改時(shí)間
例1:希望在root目錄下查找更改時(shí)間在1天以內(nèi),被黑客修改的文件
# find /root/ -mtime -1
c3、對查找內(nèi)容執(zhí)行相應(yīng)命令
-exec 這個(gè)選項(xiàng)參數(shù)后面可以跟自定義的SHELL命令,格式如下:
# touch {1,2,3}.back
# find . -name "*.back" -exec ls -l {} \;
例3:
# find . -name "*.back" -exec mv {} /opt \;
# ls /opt/
1.back 2.back 3.back rh xuegod.txt
例4:把查找到的文件復(fù)制到一個(gè)指定的目錄
# find /root -name "*.txt" -exec cp {} /opt \;
例5:xargs和find命令結(jié)合 復(fù)制文件 -i 表示 find 傳遞給xargs的結(jié)果 由{}來代替 (了解)
# rm -rf /opt/*
# find . -name "*.txt" | xargs -i cp {} /opt
# ls /opt/
例6:查找多個(gè)類型文件
比較符的使用:
-a and 并且
-o or 或者
+ 超過
- 低于
# touch a.pdf back.sh
# find . -name "*.sh" -o -name "*.pdf"
# find /etc -size +20k -a -size -50k | wc -l
22
# find /etc -size +20k | wc -l
49
例7: 按權(quán)限查找:-perm
# find /bin/ -perm 755 # 等于0755權(quán)限的文件或目錄
# find /bin/ -perm -644 #-perm -644 至少有644權(quán)限的文件或目錄
例:查看系統(tǒng)中權(quán)限至少為777的文件或目錄
創(chuàng)建一些測試文件:
# mkdir ccc
# chmod 777 ccc
# mkdir test
# chmod 1777 test
# touch b.sh
# chmod 4777 b.sh
查找:
# find /root/ -perm 777
# find /root/ -perm 1777
# find /root/ -perm 4777
例:把系統(tǒng)中權(quán)限不低于777的危險(xiǎn)目錄查找出來
# find /root/ -perm -777
例:把系統(tǒng)中權(quán)限不低于777的危險(xiǎn)文件查找出來
# find / -type f -perm -777
例8:查找的目錄深度:
-maxdepth 1 #只查找目錄第一層的文件和目錄
如:查找/bin目錄下權(quán)限等于755的可執(zhí)行的文件
# find /bin/ -maxdepth 1 -perm 755 #/bin后面要有/
# find /bin -maxdepth 1 -perm 755 #這個(gè)命令無法滿足我們的需求
例9:查找系統(tǒng)中所有屬于用戶mk的文件,并把這個(gè)文件,放到/root/findresults目錄下
注意:/root/findresults這個(gè)需要提前創(chuàng)建好。
# mkdir /root/findresults
# find / -user mk -exec cp -a {} /root/findresults/ \;
#參數(shù): -a #復(fù)制時(shí),保留原來文件的所有屬性
報(bào)錯(cuò):
find: ‘/proc/43475/task/43475/fd/6’: 沒有那個(gè)文件或目錄
find: ‘/proc/43475/task/43475/fdinfo/6’: 沒有那個(gè)文件或目錄
find: ‘/proc/43475/fd/6’: 沒有那個(gè)文件或目錄
find: ‘/proc/43475/fdinfo/6’: 沒有那個(gè)文件或目錄
cp: 無法以目錄"/home/mk" 來覆蓋非目錄"/root/findresults/mk"
互動(dòng): 同一個(gè)目錄下,可以創(chuàng)建文件mk和文件夾mk嗎?同一個(gè)目錄下創(chuàng)建的文件名和目錄名一樣嗎?
答:不可以
解決:
# find / -user mk #發(fā)現(xiàn)
# ll /var/spool/mail/mk #查看這個(gè)文件
# ll /home/mk
發(fā)現(xiàn)/var/spool/mail/mk 和/home/mk 的名字是一樣的。 而兩者都要復(fù)制到/root/findresults/下,先復(fù)制了/var/spool/mail/mk,所以/home/mk就不能復(fù)制了。
# mv /var/spool/mail/mk /var/spool/mail/mk.mail
# rm -rf /root/findresults/*
# find / -user mk -exec cp -a {} /root/findresults/ \;
# mv /var/spool/mail/mk.mail /var/spool/mail/mk #再修改過來
命令判斷
用到的三個(gè)特殊符號(hào): ; && ||
1、 ;分號(hào) 不考慮指令的相關(guān)性,連續(xù)執(zhí)行, 分號(hào); 不保證命令全部執(zhí)行成功的
例: # sync ; shutdown -F
&& 邏輯與====》它是只有在前面的命令執(zhí)行成功后,后面的命令才會(huì)去執(zhí)行
例1:如果/opt目錄存在,則在/opt下面新建一個(gè)文件a.txt
# cd /opt/ && touch /opt/a.txt && ls
例2:源碼編譯經(jīng)典使用方法
# ./configure && make -j 4 && make install #我現(xiàn)在沒有源碼包,所以此命令不能執(zhí)行成功。大家了解一下這個(gè)經(jīng)典用法。
2、 || 邏輯或===》如果前面的命令執(zhí)行成功,后面的命令就不去執(zhí)行了;或者如果前面的執(zhí)行不成功,才會(huì)去執(zhí)行后面的命令
例1:
# ls xxx || cd /mnt
ls: 無法訪問xxx: 沒有那個(gè)文件或目錄
# pwd
/mnt
# ls /etc/passwd || cd /etc
/etc/passwd
總結(jié):
運(yùn)算順序:LINUX執(zhí)行命令,是從左到右一個(gè)一個(gè)執(zhí)行,從上到下執(zhí)行
例:# cd /opt/back || mkdir /opt/back && touch /opt/back/back.tar && ls /opt/back
上一篇: 致Oracle開發(fā)者的學(xué)習(xí)資源清單
下一篇: 什么是5G SU-MIMO?