廣州總校區(qū)切換校區(qū)
復(fù)制成功
微信號(hào):togogoi
添加微信好友, 詳細(xì)了解課程
已復(fù)制成功,如果自動(dòng)跳轉(zhuǎn)微信失敗,請前往微信添加好友
打開微信
圖片

行業(yè)新聞

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命令,格式如下:




例2:

# 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?

<
在線咨詢 ×

您好,請問有什么可以幫您?我們將竭誠提供最優(yōu)質(zhì)服務(wù)!