在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ shell 學(xué)習四十四天----尋找文件
shell 學(xué)習四十一天----列出文件 ls 和 od 命令
shell 學(xué)習小結(jié)
shell 學(xué)習第二十八天----case 語句
shell 學(xué)習四十四天----尋找文件
shell 學(xué)習三十五天----波浪號展開與通配符
shell 學(xué)習三十八天----執(zhí)行順序和 eval
shell 學(xué)習四十八天----文件校驗和匹配
shell 學(xué)習四十天----awk 的驚人表現(xiàn)
shell 學(xué)習第十一天----sed 正則的精確控制
shell 學(xué)習第十七天----awk 命令
shell 學(xué)習三十九天----內(nèi)建命令
shell 學(xué)習四十五天----xargs
shell 學(xué)習三十七天----引用
shell 學(xué)習第十六天----join 練習
shell 學(xué)習第二十四天----提取開頭或結(jié)尾數(shù)行
shell 學(xué)習第九天----分組
shell 學(xué)習第五天----基本的 I/O 重定向
shell 學(xué)習第十五天----使用 cut 選定字段
shell 學(xué)習四十六天----文件系統(tǒng)的空間信息 df 和 du 命令
shell 學(xué)習第八天----擴展正則表達式 (ERE)
shell 學(xué)習第十九天----文本塊排序
shell 學(xué)習第二十一天----重新格式化段落
shell 學(xué)習三十六天----命令替換
shell 學(xué)習第二十天----sort 的其他內(nèi)容以及 uniq 命令
shell 學(xué)習四十二天----使用 touch 更新文件時間
shell 學(xué)習五十一天----top 命令查看進程列表
shell 學(xué)習第一天
shell 學(xué)習五十四天----進程系統(tǒng)調(diào)用的追蹤 strace
shell 學(xué)習五十天----查看進程 ps 命令
shell 學(xué)習第二十七天----退出狀態(tài)和 if 語句
shell 學(xué)習第二十三天----打印
shell 學(xué)習三十三天----關(guān)于重定向
shell 學(xué)習四十九天----進程建立
shell 學(xué)習第三十天----break,continue,shift,getopts
shell 學(xué)習五十五天----進程記賬
shell 學(xué)習總結(jié)一
shell 學(xué)習第二十六天----變量與算數(shù)
shell 學(xué)習第二十二天----計算行數(shù), 字數(shù)以及字符數(shù)
shell 學(xué)習五十八天----/proc 文件系統(tǒng)
shell 學(xué)習第二十五天----神器的管道符
shell 學(xué)習第三十二天----read 讀取一行
sheel 學(xué)習第三天
shell 學(xué)習----小結(jié)
shell 學(xué)習第十八天----文本排序
shell 學(xué)習第三十一天----函數(shù)問題
shell 學(xué)習第十天----sed 查找與替換
shell 學(xué)習四十三天----臨時性文件的建立與使用
shell 學(xué)習四十七天----文件比較 cmp,diff,patch
shell 學(xué)習三十四天----printf 詳解
shell 學(xué)習五十七天 ----linux 任務(wù)管理,針對上一講的總結(jié)和擴展
shell 學(xué)習第六天----小結(jié)
shell 學(xué)習第十三天----sed 案例分析
shell 學(xué)習第七天----基礎(chǔ)正則表達式 (BRE)
shell 學(xué)習第十二天----行與字符串
shell 學(xué)習小結(jié)四
shell 學(xué)習第二十九天----循環(huán)
shell 學(xué)習五十二天----刪除進程 kill 命令
shell 學(xué)習五十六天----延遲進程調(diào)度
shell 學(xué)習第四天----華麗的 printf 輸出
shell 學(xué)習第十五天----join 連接字段
shell 學(xué)習完結(jié)篇----希望你能看到
shell 學(xué)習第二天
shell 學(xué)習五十三天----捕獲信號 trap

shell 學(xué)習四十四天----尋找文件

尋找文件

快速尋找文件

locate 將文件系統(tǒng)里的所有文件名壓縮成數(shù)據(jù)庫,以迅速找到匹配類 shell 通配字符的文件名,不必實際查找整個龐大的目錄結(jié)構(gòu),這個數(shù)據(jù)庫,通常是在半夜通過 cron,在具有權(quán)限的工作中執(zhí)行 updatedb 建立。locate 對用戶來說有其必要性,它可以回答用戶:系統(tǒng)管理者究竟將要查找的 syx 放在何處?

locate syx 缺乏通配字符模式時,locate 匯報稿含有將參數(shù)作為子字符串的文件;這里找到 48 個匹配的文件。

由此可見 locate 的輸出量可能極大,他通常會通過管道丟給分頁程序 (pager),如 less;或是查找過濾程序,例如 grep 處理: $locate syx | grep syx5

通配字符模式續(xù)杯保護,以避免 shell 展開,這么一來 locate 才能處理他們:$locate '*gcc-3.3*.tar*' #在 locate 里,使用通配字符匹配,以尋找 gcc-3.3

注意:locate 或許不舍用于所有站點,因為它會將被限制訪問的目錄下的文件名泄露給用戶。如果考慮到這一點,只需要簡單的將 updatedb 的操作交給一般用戶權(quán)限執(zhí)行:這么一來,不合法的用戶便無從得知原本就不該讓它知道的文件名了。不過比較好的方式是使用 secure locate 包:slocate,他也會將文件的保護與所有權(quán)存儲在數(shù)據(jù)庫里,但只顯示用戶可以訪問的文件名。

updatedb 提供選項,課件里文件系統(tǒng)里選定位置的 locate 數(shù)據(jù)庫,例如用戶的根目錄樹狀結(jié)構(gòu),所以 locate 可用作個人文件的查詢。

尋找命令存儲位置

偶爾你也可能會想知道,調(diào)用一個沒有路徑的命令時,他再文件系統(tǒng)的位置如何。此時可以使用 type 命令

$type gcc #gcc 在哪?
$type type #type 是什么?
$type newgcc #newgcc 是什么?
$type mypwd #mypwd 是什么?
$type hahaha #這個不存在的命令是什么?
-bash:type:hahaha:not found

注意:type 是內(nèi)部 shell 命令,所以它認得別名與函數(shù)。

假定你想選擇大于某個大小的文件,或是三天前修改的文件,屬于你的文件,或者擁有三個或三個以上直接鏈接的文件,此時就會用到 find 命令。

如果你需要在整個目錄樹狀結(jié)構(gòu)分支里繞來繞去去尋找某個東西,find 可以幫助你完成此工作。

find 命令

語法:
find [files-or-directories] [options]

用途:
尋找與制定名稱模式匹配于或具有給定屬性的文件

主要選項

選項  
用途
-atime n
選定 n 天前訪問的文件
-ctime n
選定 n 天前改過 inode 的文件
-follow 
接著符號性連接
-group g
選定組 g 內(nèi)的文件 (g 為用戶組 ID 名稱或數(shù)字)
-links n
選定擁有 n 個直接鏈接的文件
ls
產(chǎn)生類似 ls 冗長形式的列表,而不知有文件名。
-mtime n
選定 n 天前修改過的文件
-name ‘pattern’
選定文件名與 shell 通配字符模式匹配的文件 (通配字符模式會使用括號框起來,可避免 shell 解釋)
-perm mask
選定與制定八進制權(quán)限掩碼匹配的文件
-prune
不想下遞歸目錄樹狀結(jié)構(gòu)里
-size n
選擇大小為 n 的文件
-type t
選定類型 t 的文件,類型施丹旖字母:d 為目錄,l 為符號性連接。
-user u
選定用戶 u 擁有的文件 (u 為用戶的 ID 名稱或編號)

行為:

  • find 向下深入目錄樹狀結(jié)構(gòu),尋找所有在這些目錄樹下的文件。接下來,應(yīng)用其命令行選項所定義的選定器,選擇文件攻進一步操作,通常是顯示他們的名稱,或產(chǎn)生類似 ls 的冗長列出。
  • find 不同于 ls 與 shell 的地方時:他沒有隱藏文件的概念,也就是說:就算是點號開頭的文件名,find 還是能找到他。
  • 另一點不同于 ls 的地方時:當 find 處理的是目錄時,他會自動遞歸深入目錄結(jié)構(gòu),需找在那之下的任何東西,除非你使用 -prune 選項要求不這么做。
  • find 找到文件,他會先執(zhí)行命令行選項所設(shè)置的選項限制,如果這些測試成功,則將名稱交給內(nèi)部的操作程序處理。默認操作是將名稱打印在標準輸出上,不過如果使用 -exec 選項,則可提供命令模板,在其中名稱可以被替換,并再執(zhí)行該命令。
  • 在選定的文件上自動執(zhí)行命令是很強的功能。單頁極度危險。如果該命令具有破壞性,那么最好是讓 find 先將列表產(chǎn)生在臨時性文件中,再有可勝任的人小心的確認,決定是否將命令進一步自動化處理。
  • 使用 find 進行破壞性目的的 shell 腳本,在編寫時必須格外小心,之后,也必須徹底執(zhí)行調(diào)試,例如在破壞性命令開始前插入 echo,這么一來你可以看看會有哪些操作,而不必真的執(zhí)行它。

案例:

$touch MybashProgram.sh mycprogram.c MyCProgram.c Program.c 
$mkdir backup
$cd backup
$touch MybashProgram.sh mycprogram.c MyCProgram.c Program.c 
  1. 查找文件
    ```$find -name MyCProgram.c(保證不再 backup 目錄下) ./tmp/MyCProgram.c ./tmp/backup/MyCProgram.c

    上面的命令展示了,在當前目錄下查詢文件名為 `MyCProgram.c` 的文件。如果要指定查找目錄,例如從根目錄開始查找文件名為 `MyCProgram.c` 的文件:
    ```$ find / -name MyCProgram.c 
    /tmp/MyCProgram.c
    /tmp/backup/MyCProgram.c
  2. 查找文件,忽略文件名的大小寫
    ```$ find -iname mycprogram.c ./mycprogram.c ./MyCProgram.c ./backup/mycprogram.c ./backup/MyCProgram.c
  3. 指定搜索目錄的深度

    • 在 root 目錄及其子目錄下查找 passwd 文件:
      ```$find / -name passwd /etc/passwd /etc/pam.d/passwd /usr/bin/passwd
    • 在 root 目錄及其一層深的子目錄中查找:
      passwd $find / -maxdepth 2 -name passwd /etc/passwd
    • 在第二層子目錄和第四層子目錄之間查找 psswd 文件:
      $find / -mindepth 3 -maxdepth 5 -name passwd /etc/pam.d/passwd /usr/bin/passwd
  4. 相反匹配
    顯示所有名字不是 MyCProgram.c 的文件或者目錄。由于 maxdepth 是 1,所以只會顯示當前目錄下的文件和目錄:
    ```$find -maxdepth 1 -not -iname "mycprogram.c" . ./MybashProgram.sh ./create_sample_files.sh ./backup ./Program.c

  5. 對查找到的文件執(zhí)行特定的命令
    對當前目錄及其子目錄下文件名為“test.c”,文件名不區(qū)分大小寫執(zhí)行'rm(刪除)'操作:
    $find -iname test.c -exec rm {} \;

  6. 查找空文件

    • 查找當前目錄及其子目錄下的所有空文件: $find -empty
    • 查找當前目錄 (不包括其子目錄) 下的空文件: $find -maxdepth 1 -empty
  7. 根據(jù)權(quán)限查找文件
    文件權(quán)限在 linux 系統(tǒng)是一個很重要的概念,新建兩個文件:test.c,test1.c,權(quán)限修改為如下:
    ```----r----- 1 root root 0 7 月 12 20:30 test1.c -rw------- 1 root root 0 7 月 12 20:30 test.c

    
    
      - 查找只有文件所有者有讀寫權(quán)限的文件:
    `$find -perm 600`
      - 查找與文件所有者同用戶組的用戶具有讀權(quán)限的文件:
    `$find -perm 040`
  8. 查找制定類型的文件
    • 查找 socket 文件: $find /tmp -type s
    • 查找目錄: find /tmp -type d
    • 查找普通文件: find /tmp -type f
    • 查找隱藏文件: $find /tmp -type s -name ".*"
    • 查找隱藏目錄: $find /tmp -type d -name ".*"

尋找問題文件

我們注意到包含特殊字符 (如換行字符) 的文件名有點麻煩。find 具有 -print0 選項,以顯示文件名為 nul 終結(jié)的字符串。由于路徑名稱可包含任何字符,除了 NUl 以外,所以這個選項,可產(chǎn)生能夠被清楚解析的文件名列表。

詳細資料:參考 http://www.jb51.net/LINUXjishu/205761.html