W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在網(wǎng)絡(luò)上,人們?cè)絹?lái)越傾向于傳輸壓縮格式的文件,原因是壓縮文件體積小,在網(wǎng)速相同的情況下,傳輸時(shí)間短。下面將學(xué)習(xí)如何在Linux系統(tǒng)中對(duì)文件進(jìn)行打包壓縮與解壓,以及讓用戶基于關(guān)鍵詞在文本文件中搜索相匹配的信息、在整個(gè)文件系統(tǒng)中基于指定的名稱(chēng)或?qū)傩运阉魈囟ㄎ募1竟?jié)雖然只有3條命令,但是其功能都比較復(fù)雜而且參數(shù)很多,因此放到了本章最后講解。
1.tar命令
tar命令用于對(duì)文件進(jìn)行打包壓縮或解壓,格式為“tar [選項(xiàng)] [文件]”。
在Linux系統(tǒng)中,常見(jiàn)的文件格式比較多,其中主要使用的是.tar或.tar.gz或.tar.bz2格式,我們不用擔(dān)心格式太多而記不住,其實(shí)這些格式大部分都是由tar命令來(lái)生成的。劉遄老師將講解最重要的幾個(gè)參數(shù),以方便大家理解。tar命令的參數(shù)及其作用如表2-14所示。
表2-14 tar命令的參數(shù)及其作用
參數(shù) | 作用 |
---|---|
-c | 創(chuàng)建壓縮文件 |
-x | 解開(kāi)壓縮文件 |
-t | 查看壓縮包內(nèi)有哪些文件 |
-z | 用Gzip壓縮或解壓 |
-j | 用bzip2壓縮或解壓 |
-v | 顯示壓縮或解壓的過(guò)程 |
-f | 目標(biāo)文件名 |
-p | 保留原始的權(quán)限與屬性 |
-P | 使用絕對(duì)路徑來(lái)壓縮 |
-C | 指定解壓到的目錄 |
首先,-c參數(shù)用于創(chuàng)建壓縮文件,-x參數(shù)用于解壓文件,因此這兩個(gè)參數(shù)不能同時(shí)使用。 其次,-z參數(shù)指定使用Gzip格式來(lái)壓縮或解壓文件,-j參數(shù)指定使用bzip2格式來(lái)壓縮或解壓文件。 用戶使用時(shí)則是根據(jù)文件的后綴來(lái)決定應(yīng)使用何種格式參數(shù)進(jìn)行解壓。在執(zhí)行某些壓縮或解壓操作時(shí),可能需要花費(fèi)數(shù)個(gè)小時(shí),如果屏幕一直沒(méi)有輸出,您一方面不好判斷打包的進(jìn)度情況,另一方面也會(huì)懷疑電腦死機(jī)了,因此非常推薦使用-v參數(shù)向用戶不斷顯示壓縮或解壓的過(guò)程。 -C參數(shù)用于指定要解壓到哪個(gè)指定的目錄。 -f參數(shù)特別重要,它必須放到參數(shù)的最后一位,代表要壓縮或解壓的軟件包名稱(chēng)。 劉遄老師一般使用“tar -czvf 壓縮包名稱(chēng).tar.gz 要打包的目錄”命令把指定的文件進(jìn)行打包壓縮;相應(yīng)的解壓命令為“tar -xzvf 壓縮包名稱(chēng).tar.gz”。 下面我們來(lái)逐個(gè)演示下打包壓縮與解壓的操作。先使用tar命令把/etc目錄通過(guò)gzip格式進(jìn)行打包壓縮,并把文件命名為etc.tar.gz:
[root@linuxprobe ~]# tar czvf etc.tar.gz /etc
tar: Removing leading `/' from member names
/etc/
/etc/fstab
/etc/crypttab
/etc/mtab
/etc/fonts/
/etc/fonts/conf.d/
/etc/fonts/conf.d/65-0-madan.conf
/etc/fonts/conf.d/59-liberation-sans.conf
/etc/fonts/conf.d/90-ttf-arphic-uming-embolden.conf
/etc/fonts/conf.d/59-liberation-mono.conf
/etc/fonts/conf.d/66-sil-nuosu.conf
………………省略部分壓縮過(guò)程信息………………
接下來(lái)將打包后的壓縮包文件指定解壓到/root/etc目錄中(先使用mkdir命令來(lái)創(chuàng)建/root/etc目錄):
[root@linuxprobe ~]# mkdir /root/etc
[root@linuxprobe ~]# tar xzvf etc.tar.gz -C /root/etc
etc/
etc/fstab
etc/crypttab
etc/mtab
etc/fonts/
etc/fonts/conf.d/
etc/fonts/conf.d/65-0-madan.conf
etc/fonts/conf.d/59-liberation-sans.conf
etc/fonts/conf.d/90-ttf-arphic-uming-embolden.conf
etc/fonts/conf.d/59-liberation-mono.conf
etc/fonts/conf.d/66-sil-nuosu.conf
etc/fonts/conf.d/65-1-vlgothic-gothic.conf
etc/fonts/conf.d/65-0-lohit-bengali.conf
etc/fonts/conf.d/20-unhint-small-dejavu-sans.conf
………………省略部分解壓過(guò)程信息………………
2.grep命令
grep命令用于在文本中執(zhí)行關(guān)鍵詞搜索,并顯示匹配的結(jié)果,格式為“grep [選項(xiàng)] [文件]”。grep命令的參數(shù)及其作用如表2-15所示。
表2-15 grep命令的參數(shù)及其作用
參數(shù) | 作用 |
---|---|
-b | 將可執(zhí)行文件(binary)當(dāng)作文本文件(text)來(lái)搜索 |
-c | 僅顯示找到的行數(shù) |
-i | 忽略大小寫(xiě) |
-n | 顯示行號(hào) |
-v | 反向選擇——僅列出沒(méi)有“關(guān)鍵詞”的行。 |
grep命令是用途最廣泛的文本搜索匹配工具,雖然有很多參數(shù),但是大多數(shù)基本上都用不到。劉遄老師在總結(jié)了近10年的運(yùn)維工作和培訓(xùn)教學(xué)的經(jīng)驗(yàn)后,提出的本書(shū)的寫(xiě)作理念“去掉不實(shí)用”絕對(duì)不是信口開(kāi)河。 如果一名IT培訓(xùn)講師的水平只能停留在“技術(shù)的搬運(yùn)工”層面,而不能對(duì)優(yōu)質(zhì)技術(shù)知識(shí)進(jìn)行提煉總結(jié),那對(duì)他的學(xué)生來(lái)講絕非好事。我們?cè)谶@里只講兩個(gè)最最常用的參數(shù):-n參數(shù)用來(lái)顯示搜索到信息的行號(hào);-v參數(shù)用于反選信息(即沒(méi)有包含關(guān)鍵詞的所有信息行)。這兩個(gè)參數(shù)幾乎能完成您日后80%的工作需要,至于其他上百個(gè)參數(shù),即使以后在工作期間遇到了,再使用man grep命令查詢也來(lái)得及。
在Linux系統(tǒng)中,/etc/passwd文件是保存著所有的用戶信息,而一旦用戶的登錄終端被設(shè)置成/sbin/nologin,則不再允許登錄系統(tǒng),因此可以使用grep命令來(lái)查找出當(dāng)前系統(tǒng)中不允許登錄系統(tǒng)的所有用戶信息:
[root@linuxprobe ~]# grep /sbin/nologin /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
………………省略部分輸出過(guò)程信息………………
3.find命令
find命令用于按照指定條件來(lái)查找文件,格式為“find [查找路徑] 尋找條件 操作”。
本書(shū)中曾經(jīng)多次提到“Linux系統(tǒng)中的一切都是文件”,接下來(lái)就要見(jiàn)證這句話的分量了。在Linux系統(tǒng)中,搜索工作一般都是通過(guò)find命令來(lái)完成的,它可以使用不同的文件特性作為尋找條件(如文件名、大小、修改時(shí)間、權(quán)限等信息),一旦匹配成功則默認(rèn)將信息顯示到屏幕上。find命令的參數(shù)以及作用如表2-16所示。
表2-16 find命令中的參數(shù)以及作用
參數(shù) | 作用 |
---|---|
-name | 匹配名稱(chēng) |
-perm | 匹配權(quán)限(mode為完全匹配,-mode為包含即可) |
-user | 匹配所有者 |
-group | 匹配所有組 |
-mtime -n +n | 匹配修改內(nèi)容的時(shí)間(-n指n天以內(nèi),+n指n天以前) |
-atime -n +n | 匹配訪問(wèn)文件的時(shí)間(-n指n天以內(nèi),+n指n天以前) |
-ctime -n +n | 匹配修改文件權(quán)限的時(shí)間(-n指n天以內(nèi),+n指n天以前) |
-nouser | 匹配無(wú)所有者的文件 |
-nogroup | 匹配無(wú)所有組的文件 |
-newer f1 !f2 | 匹配比文件f1新但比f(wàn)2舊的文件 |
-type b/d/c/p/l/f | 匹配文件類(lèi)型(后面的字幕字母依次表示塊設(shè)備、目錄、字符設(shè)備、管道、鏈接文件、文本文件) |
-size | 匹配文件的大?。?50KB為查找超過(guò)50KB的文件,而-50KB為查找小于50KB的文件) |
-prune | 忽略某個(gè)目錄 |
-exec …… {}\; | 后面可跟用于進(jìn)一步處理搜索結(jié)果的命令(下文會(huì)有演示) |
這里需要重點(diǎn)講解一下-exec
參數(shù)重要的作用。這個(gè)參數(shù)用于把find命令搜索到的結(jié)果交由緊隨其后的命令作進(jìn)一步處理,它十分類(lèi)似于第3章將要講解的管道符技術(shù),并且由于find命令對(duì)參數(shù)的特殊要求,因此雖然exec是長(zhǎng)格式形式,但依然只需要一個(gè)減號(hào)(-)。
根據(jù)文件系統(tǒng)層次標(biāo)準(zhǔn)(Filesystem Hierarchy Standard)協(xié)議,Linux系統(tǒng)中的配置文件會(huì)保存到/etc目錄中(詳見(jiàn)第6章)。如果要想獲取到該目錄中所有以host開(kāi)頭的文件列表,可以執(zhí)行如下命令:
[root@linuxprobe ~]# find /etc -name "host*" -print
/etc/avahi/hosts
/etc/host.conf
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/selinux/targeted/modules/active/modules/hostname.pp
/etc/hostname
如果要在整個(gè)系統(tǒng)中搜索權(quán)限中包括SUID權(quán)限的所有文件(詳見(jiàn)第5章),只需使用-4000即可:
[root@linuxprobe ~]# find / -perm -4000 -print
/usr/bin/fusermount
/usr/bin/su
/usr/bin/umount
/usr/bin/passwd
/usr/sbin/userhelper
/usr/sbin/usernetctl
………………省略部分輸出信息………………
進(jìn)階實(shí)驗(yàn):在整個(gè)文件系統(tǒng)中找出所有歸屬于linuxprobe用戶的文件并復(fù)制到/root/findresults目錄。
該實(shí)驗(yàn)的重點(diǎn)是“-exec {} \;”參數(shù),其中的{}表示find命令搜索出的每一個(gè)文件,并且命令的結(jié)尾必須是“\;”。完成該實(shí)驗(yàn)的具體命令如下:
[root@linuxprobe ~]# find / -user linuxprobe -exec cp -a {} /root/findresults/ \;
在本章最后,劉遄老師再多提幾句:很多讀者初次接觸到本書(shū)時(shí)都擔(dān)心因?yàn)樽约旱挠⒄Z(yǔ)基礎(chǔ)不好而導(dǎo)致學(xué)不會(huì)Linux系統(tǒng),其實(shí)大可不必?fù)?dān)心,因?yàn)槲覀兊膱D書(shū)、培訓(xùn)課程甚至紅帽考題都是中文的。而在學(xué)習(xí)完本章后您也一定發(fā)現(xiàn)了,我們以后要使用的是Linux命令,而絕不是純粹的英語(yǔ)單詞,即便它們的拼寫(xiě)100%相同,最終用處肯定也是不一樣的。因此就學(xué)習(xí)Linux系統(tǒng)技術(shù)來(lái)講,您跟英語(yǔ)達(dá)人絕對(duì)都是站在同一起跑線上的,更何況還正確地選擇了一本適合您的Linux教材。休息一下,然后開(kāi)始學(xué)習(xí)第3章吧!
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: