linux系統(tǒng)Find命令的高級應(yīng)用

Find命令是Linux操作系統(tǒng)中一個很強大的工具。這個命令除了可以用來定位文件外,還有其他許多很實用的用途院崇。如可以用來備份文件、交互式刪除文件袍祖、列舉文件清單等等底瓣。只要靈活應(yīng)用這些功能的話,那么對于系統(tǒng)工程師的日常工作就能夠起到事半功倍的效果蕉陋。

一捐凭、利用Find命令對文件進行備份

如在Linux操作系統(tǒng)中有一個用戶為oracle。系統(tǒng)會在Home目錄下自動為這個用戶創(chuàng)建一個子目錄Oracle〉树蓿現(xiàn)在用戶希望能夠?qū)ψ约耗夸浵碌奈募M行自動備份茁肠,以防止文件的以外丟失。如下圖所示缩举,現(xiàn)在系統(tǒng)工程師準(zhǔn)備把用戶目錄下面的文件備份到backup目錄下面垦梆,并把文件名字重命名為backup。這個功能可以實現(xiàn)呢?答案當(dāng)然是肯定的仅孩⊥行桑可以利用find命令結(jié)合cp命令來實現(xiàn)這個功能。

1辽慕、文件的最后修改時間京腥。

在Linux系統(tǒng)的文件屬性中,有非常重要的三個時間截鼻百,分別為文件最后修改時間绞旅、文件最后訪問時間、inode節(jié)點最后修改時間温艇。一旦用戶對某個文件執(zhí)行了更改操作因悲,則文件inode節(jié)點里的最后修改時間就會被更新了。需要注意的是勺爱,在Linux操作系統(tǒng)中目錄也被當(dāng)作文件的一種晃琳,為此對目錄的修改,如創(chuàng)建一個目錄或者更改目錄的名字也會被當(dāng)作文件的修改來對待琐鲁。另外文件修改后卫旱,只會更改文件的修改時間,而不會影響到目錄的最后修改時間围段。所以如果一個目錄下有一個文件更改了顾翼,則在備份的時候只需要備份這個更改的文件即可,而不需要備份這個目錄下其他沒有更改的文件奈泪。

出于備份效率的考慮适贸,在備份的時候只備份當(dāng)天修改過的文件灸芳。為此在備份時首先要做的就是找到這些最近更改過的文件。這個解決的思路就是從這個文件的最后修改時間入手拜姿。在find命令中有一個參數(shù)為mtime烙样,它表示修改時間少于x天。如果我們把這個參數(shù)設(shè)置為1蕊肥,那么find命令就可以找出在最近一天內(nèi)修改過的文件谒获。為此只需要對這些找到的文件進行備份即可。

2壁却、重命名文件批狱。

需要備份的文件找到之后,接下去要做的就是利用cp命令把這些文件復(fù)制到其他目錄中去展东。但是這里還需要做的一件事情是在復(fù)制過去后需要把文件進行重命名精耐,即在原來文件的后面加上.backup,以提醒用戶這些是備份文件琅锻,不能夠刪除或者修改。要實現(xiàn)這個功能的話向胡,就需要用到文件名的占位符號恼蓬。如果利用cp命令復(fù)制文件后同時批量更改文件的名字,只需要使用 cp {} {}.backup即可僵芹。這里的{}符號就是文件名的占位符號处硬。cp {} {}.backup這個命令的功能就是先把文件復(fù)制到一個特定的目錄中,然后在對復(fù)制過去的每個文件進行重命名拇派,后面都依次加上.backup內(nèi)容荷辕。

為此要實現(xiàn)上面文件備份的需要,只需要使用命令

find /home/oracle –mtime 1 –exec cp {} /backup/{}.backup /;即可件豌。

執(zhí)行這個命令后疮方,系統(tǒng)會在用戶主目錄下尋找所有修改時間少于1天的文件,并把找到的文件復(fù)制到/backup目錄下茧彤。并在每一個原始文件后面增加一個擴展名.backup骡显。最后的/;是一個固定格式必須要有。然后系統(tǒng)工程師只需要把這個命令加入到cron中曾掂,讓操作系統(tǒng)在每天中午或者其他空閑的時間周期性執(zhí)行這個命令即可惫谤。如此的話,操作系統(tǒng)就會自動對用戶的文件進行備份珠洗,以防止文件意外損壞或者修改所造成的損失溜歪。

另外需要注意的是,在Linux操作系統(tǒng)中find命令只可以找到最近一天修改的文件许蓖。而在Linux操作系統(tǒng)中蝴猪,還有mmin參數(shù)调衰,這個參數(shù)是以分鐘為單位,如可以找到那些最近4個小時或者1個小時之內(nèi)修改過的文件拯腮,從而提高備份的頻率窖式。為此系統(tǒng)工程師可以根據(jù)用戶的需要來調(diào)整文件備份的頻率。不過筆者認(rèn)為动壤,一般情況下文件備份一天一次即可萝喘。

二、把找到的文件清單保存到文件中

Find命令還可以根據(jù)文件的權(quán)限來查找琼懊。如把用戶主目錄下所有用戶都可以讀寫的文件找出來阁簸。這些文件所有的用戶都可以修改,為此具有一定的安全隱患哼丈。系統(tǒng)工程師可能希望把這些文件對應(yīng)的清單保存到一個文件中启妹,然后他們可以根據(jù)這份清單一個個的去調(diào)整權(quán)限。如果只是顯示在屏幕中的話醉旦,對于他們后需的工作很不方便饶米。總不能夠拿筆抄下來或者每修改一個執(zhí)行一下查詢命令吧?為此把找到的文件清單保存到一個文本文件中是必需的车胡。要實現(xiàn)這個需求的話檬输,可以采用如下命令:

Find /home –perm 666 –type f –ls >detail.txt

在這條命令中,條件語句中主要用了兩個參數(shù)匈棘,分別為權(quán)限參數(shù)perm與文件類型參數(shù)-type丧慈。在Linux操作系統(tǒng)中主要包括三類文件(其余幾類不怎么用),分別為普通文件主卫、目錄文件與連接文件逃默。這里只需要尋找普通文件,為此就可以利用-type參數(shù)來指定需要查找的文件類型簇搅。另外值得注意的是完域,如果在條件語句中有多個參數(shù)話,則其默認(rèn)會采取的是與運算馍资,即必須同時滿足以上兩個條件的文件才會被查找出來筒主。如果系統(tǒng)工程師需要采用或預(yù)算的話,則需要在參數(shù)之間加入-o可選項鸟蟹,它表示條件之間的關(guān)系是或的關(guān)系乌妙,只需要滿足其中任何一個條件即可。在查詢條件中還有一個很重要的操作符建钥,即!操作符藤韵,它表示相反的條件。如現(xiàn)在系統(tǒng)工程師想查找所有的目錄文件與普通文件(不考慮其他種類的特殊文件)熊经,則有兩種表示方法泽艘。一是 –type f –o –type –d;二是! –type l欲险。很明顯采用了!操作符的第二種處理方式要簡單的多。為此系統(tǒng)工程師可以根據(jù)自己的需要來選擇合適的操作符匹涮。

其次在第三部分的動作參數(shù)中大家可以看到天试,在上面的例子中采用了exec關(guān)鍵字,但是在這個例子中卻沒有用到然低。這是為什么呢?原來在find命令的定義中喜每,由于ls命令與print命令比較常用,為此用到這兩個命令的時候雳攘,直接利用橫桿加上命令即可带兜。如果使用其他命令則需要加入exec關(guān)鍵字。

三吨灭、交互式復(fù)制找到的文件

如現(xiàn)在用戶需要把某個文件夾下自己所創(chuàng)建的文件復(fù)制到另外一個目錄中刚照。但是并不是所有的文件,用戶希望能夠自己來選擇是否需要進行復(fù)制喧兄。要實現(xiàn)這個目的的話无畔,就需要用到find命令中的ok參數(shù)。在命令參數(shù)種加入-ok選項吠冤,主要是告訴操作系統(tǒng)這個命令需要以交互式的方式來執(zhí)行檩互。當(dāng)用戶輸入y的話,操作系統(tǒng)就會執(zhí)行這些動作;而輸入n的話咨演,則會忽略。

如要實現(xiàn)上面這個需求蚯斯,可以執(zhí)行這個命令來實現(xiàn)薄风。Find /home –user oracle –ok cp {} /backup /;此時這個OK選項的意思就是當(dāng)把每個查找到的文件移動到指定的目錄時,不管目標(biāo)文件是否存在拍嵌,都需要用戶進行確認(rèn)遭赂。只有用戶輸入y后,ok 后面的命令才會被執(zhí)行横辆,否則的話就會被忽略不計撇他。除了OK選項外,有些命令本身就包含了一個交互性的選項狈蚤。如rm文件刪除命令困肩。若沒有帶-i交互性選項的話,則操作系統(tǒng)會直接刪除文件脆侮,而不會等待用戶確認(rèn)锌畸。但是若在這個命令后面加入-i選項的話,則每刪除一個文件的話靖避,系統(tǒng)就會提示用戶確認(rèn)潭枣。只要命令本身就支持這個-i交互式選項比默,那么在find命令中就可以直接使用這個參數(shù),而不需要利用ok選項盆犁。在大部分命令中命咐,這兩個選項的效果是相同的。但是有些則不同谐岁。如CP命令醋奠。Cp –i命令表示把文件從一個地方復(fù)制到另外一個地方,如果目標(biāo)文件已經(jīng)存在的話翰铡,則會提醒用戶是否需要覆蓋;如果不存在的話則會直接復(fù)制過去钝域。但是采用ok 選項的話則表示無論目標(biāo)文件是否存在,都需要系統(tǒng)管理員一一進行確認(rèn)锭魔。也就是說-i選項只有在目標(biāo)文件存在的時候例证,可能需要覆蓋才會讓用戶進行確認(rèn)。而 ok選項的話則根本不管目標(biāo)文件存在與否迷捧,都要進行確認(rèn)织咧。到底需要采用哪個參數(shù),則就要根據(jù)用戶的需要了漠秋。

另外也可以利用這個find命令來交互式的刪除文件笙蒙。如Find /home –user oracle –exec rm –I {} /;。在這個命令中就是用到了rm刪除命令自帶的-i交互式選項庆锦。默認(rèn)情況下文件刪除時是不需要用戶確認(rèn)的捅位。但是無疑這是比較危險的一個動作。為此在涉及到文件刪除操作搂抒、或者原始文件可能被覆蓋的情況下艇搀,最好能夠使用交互式的方式進行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末求晶,一起剝皮案震驚了整個濱河市焰雕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芳杏,老刑警劉巖矩屁,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異爵赵,居然都是意外死亡吝秕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門空幻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來郭膛,“玉大人,你說我怎么就攤上這事氛悬≡蛱辏” “怎么了耘柱?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長棍现。 經(jīng)常有香客問我调煎,道長,這世上最難降的妖魔是什么己肮? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任士袄,我火速辦了婚禮,結(jié)果婚禮上谎僻,老公的妹妹穿的比我還像新娘娄柳。我一直安慰自己,他們只是感情好艘绍,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布赤拒。 她就那樣靜靜地躺著,像睡著了一般诱鞠。 火紅的嫁衣襯著肌膚如雪挎挖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天航夺,我揣著相機與錄音蕉朵,去河邊找鬼。 笑死阳掐,一個胖子當(dāng)著我的面吹牛始衅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缭保,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼觅闽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了涮俄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤尸闸,失蹤者是張志新(化名)和其女友劉穎彻亲,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吮廉,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡苞尝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了宦芦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宙址。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖调卑,靈堂內(nèi)的尸體忽然破棺而出抡砂,到底是詐尸還是另有隱情大咱,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布注益,位于F島的核電站碴巾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏丑搔。R本人自食惡果不足惜厦瓢,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望啤月。 院中可真熱鬧煮仇,春花似錦、人聲如沸谎仲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽强重。三九已至绞呈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間间景,已是汗流浹背佃声。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留倘要,地道東北人圾亏。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像封拧,于是被迫代替她去往敵國和親志鹃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容