find命令使用及Linux任務調度

文件搜索和查找工具:
安裝文件名或文件的屬性來查找並定位文件的路徑;
locate:模糊查找工具;
基於專用的數據庫進行查找,但前提是數據庫必須事先存在,並且須要按期更新;
查找速度很是快,可是查找精度十分有限,且僅限於數據庫中包含的內容;
能夠在特定的狀況下,實施手動更新數據庫,須要使用updatedb命令便可;node

/var/lib/mlocate/mlocate.db:locate查找的數據庫文件;

    find:精確查找工具;
        查找精度很是高,但速度比較慢;
            在指定的位置經過文件名或其餘文件的關鍵屬性對文件進行遍歷掃描; 
                注意:不建議對根目錄進行find操做;
        實時查找;

        限制:使用find命令僅能完成當前用戶有讀和執行權限的目錄的掃描查找;

find命令:
find - search for files in a directory hierarchy
find [path...] [expression]
path:查找路徑;
默認爲當前工做目錄,也能夠指定具體的查找目錄的路徑;
expression:
OPTIONS:
TESTS:查找條件;
實施本次查找的標準;既能夠指定文件名,又能夠指定諸如:文件大小,文件類型,文件權限和時間戳等;
ACTIONS:處理動做;
對於查找到的符合條件的文件進行某種指定的處理操做;默認值爲將查找結果輸出到標準輸出;shell

查找條件:
            根據文件名查找:
                -name pattern:文件名支持使用Globbing;(*,?,[],[^])
                [root@localhost ~]# find /etc/pass*
                /etc/passwd
                /etc/passwd-                    
                -iname pattern:忽略文件名中字母大小寫的區別,而進行查找;支持使用Globbing;
                -samefile name:根據指定的文件的文件名,查找其它硬連接文件的路徑;

            根據文件的inode號查找:
                -inum n:
                -links n:查找硬鏈接數爲"n"的全部文件;
                -regex pattern:
                -iregex pattern:

            根據文件的全部權進行查找:
                -user uname
                -uid UID
                    就是根據用戶名和/或用戶ID,查找屬主爲這個用戶帳戶的全部文件;
                -group gname
                -gid GID
                    就是根據組名和/或組ID,查找屬組爲這個組帳戶的全部文件;
                -nogroup:在文件的全部權的權限位上,沒有屬組名稱僅顯示屬組ID的文件;
                -nouser:在文件的全部權的權限位上,沒有屬主名稱僅顯示屬主ID的文件;

            根據文件的類型:
                -type c:
                    c表示文件類型的單字符描述符,其中包括:
                        b:塊設備
                        c:字符設備
                        d:目錄
                        f:普通文件
                        l:符號連接
                        p:管道
                        s:套接字
                -xtype c:
                    符號連接文件的查找結果須要其餘選擇的配合才能找到,不然查找的是被連接的原文件;

            根據時間戳進行查找:
                以天爲時間單位進行查找:
                    -atime [+|-]n:根據訪問時間戳進行查找
                    -ctime [+|-]n:根據改變時間戳進行查找
                    -mtime [+|-]n:根據修改時間戳進行查找

                         n:[n,n+1)
                        +n:[n+1,+oo)
                        -n:[now,n)

                以分鐘爲時間單位進行查找:
                    -amin [+|-]n:
                    -cmin [+|-]n:
                    -mmin [+|-]n:

            根據文件的大小進行查找:
                -size [+|-]n[cwbkMG]
                     n:(n-1,n]
                    +n:[n,+oo)
                    -n:[0,n-1]
             ~]# find /etc -size +2M
            邏輯運算操做符組合前面的條件進行復雜邏輯判斷:
                -a | -and:邏輯與運算,默認就是該邏輯運算,可省略;
                -o | -or:邏輯或運算;
                -not | !:邏輯非運算;

                德摩根定律依然生效;

            根據權限查找:
                -perm [/|-]mode
                     mode:精確權限匹配,意思是查找必須與指定的權限位徹底匹配的文件;
                    /mode:任何一個權限位的權限中只要有一個權限可以知足條件,即爲匹配成功,就能夠將之做爲查找結果;隱含了邏輯或關係;
                    -mode:每個權限位的權限中都必須同時包含指定的權限位,才能知足條件,纔算匹配成功,將之做爲查找結果;隱含了邏輯與關係;

                    真  取反  假
                    假  取反  真
                    所有爲真  取反  任何一個爲假
                    所有爲假  取反  任何一個爲真

        處理動做:
            -print:將符合條件的查找結果直接輸出到標準輸出;默認動做;
            -ls:將符合條件的查找結果以"ls -dils"命令的執行結果進行顯示,也就是在最後加-ls就會顯示出查找到的結果的詳細信息;
            -exec command {} \;
            -ok command {} \;
                對於符合條件的查找結果按照"command"命令再執行一遍,{}爲佔位符,其含義是:用來引用find命令查找結果中的各個文件的路徑信息;

                注意:
                    -exec是非交互式的;-ok是交互式的;
                    不少命令是不能放置與管道後面使用的;由於管道輸送的是純字符串信息,所以管道後面的命令通常來說都必須是處理字符串的命令;若是管道以後放置的命令不能處理純字符串,一般,可使用xargs名將其轉換成可以被管道後面的命令處理的參數;

                    示例:
                        # find -perm /222 | xargs chmod a+w

                        # chmod a+w $(find -perm /222)

                        # find -perm /222 { -exec|-ok } chmod a+w {} \;
                        查找當前系統上沒有屬主或屬組,且最近一個月內曾被訪問過的文件,並將其屬主屬組均修改成root;
                        find / −nouser −nogroup  -atime -1 -exec chown root:root {} \;

Linux任務調度:
在將來的某個時間點,讓系統自動觸發咱們事先編寫好的命令的列表或腳本的執行,從而實現即便用戶不在計算機旁能夠按時完成任務;數據庫

前提:
    1.時間的準確性;
    2.支持任務調度的應用程序;
        atd:在將來某個時間點執行一次計劃任務;
        crond:在將來某個時間點週期性的執行已設定計劃任務;

注意:在計劃任務中全部執行的操做命令的輸出結果,這類結果均以郵件的方式發送至指定用戶的郵箱中;

本地的電子郵件服務:
    SMTP:簡單郵件傳輸協議,TCP/25;

    mail [-s SUBJECT] USERNAME[@DOMAINNAME]

    /var/spool/mail目錄中爲每一個系統用戶都安放了郵箱;

atd任務調度進程,可以識別和完成有at命令及batch命令定製的計劃任務;
    at命令:
        at [option] timespec

        timespec:
            1.HH:MM [YYYY-mm-dd]
            2.noon, midnight, teatime
            3.tomorrow
            4.now+#UNIT
                UNIT:minutes, hours, days, or weeks

        at定義的計劃任務都在某個特定的任務隊列之中;默認at只啓用了一個任務隊列,用字母"a"來標識;隊列名稱一般使用單個字母;

        at命令的經常使用用法:
            at [-q QUEUE_NAME] time:定義計劃任務;在輸入任務以後,Ctrl+d提交;

            atq或at -l
                查看全部的任務隊列中的還沒有執行的計劃任務列表;

            atrm JOB_ID或at -d JOB_ID
                撤銷任務隊列中還沒有執行的指定任務標識符的計劃任務;

            at -f /PATH/TO/SOME_FILE time

            at -c JOB_ID:查看指定的計劃任務的具體內容;

    batch命令:
        與at命令功能相似,都是一次性的定義計劃任務;

        區別是,batch命令定義計劃任務時,無需指定執行時間,而是由系統自動選擇較空閒時間完成此任務;

crond任務調度進程:可以識別和週期性的執行crontab命令定製的計劃任務;
    須要cronie程序包提供;一般在CentOS系統中會被默認安裝;

    crontab定義的計劃任務分爲兩類:
        系統任務:
            全局性任務;一般使用/etc/crontab文件中定義;
            /etc/crontab文件的通用格式:
                *    *      *  *  * user-name  command to be executed
              分鐘    小時   天 月 星期

             注意:
                * * * * *:定義週期性執行計劃任務的具體時間;
                user-name:運行後面命令的用戶帳戶;
                command to be executed:這次計劃任務的執行主體;爲了保證任務可以正確執行,命令建議使用絕對路徑;

        用戶任務:
            個體性任務;一般會存放在/var/spool/crom/下與用戶名對應的文件中;
            此類文件的格式:
                *    *      *    *   *     command to be executed
             分鐘 小時   天    月  星期

        時間表示法:
            1.某個特定時間:給定的時間點的有效取值範圍內的全部有效值;
                0 3 4 9 5
            2.通配符時間:"*",表示"每..."的意思;
            3.離散的時間點:
                0 8,20 * * 1,2,4,5
            4.連續的時間段:
                0-10 8-12 * * *
            5.步進時間:
                */3 * * * *

                */9 * * * *:沒法真正實現每9分鐘執行一次;所以默認狀況下,步進長度應該是可以被60整除的數字;

            注意:最小的時間單位是分鐘,若是計劃使用不足一分鐘的若干秒爲執行週期,則必須藉助於其餘的機制,如:編寫shell腳本;

用戶週期性任務的定製:
    crontab命令:
        crontab - maintains crontab files for individual users

        crontab [-u user] file
        crontab [-u user] [-l | -r | -e] [-i]
            -u user:超級用戶爲本身或其餘用戶設置或編輯週期性任務時使用的選項;
            -l:查看全部的已經被定義好的計劃任務列表;
            -e:使用vi編輯器編輯臨時的crontab文件;
            -r:移除全部的計劃任務;建議謹慎使用;
            -i:在使用-r選項時,可以進行交互式刪除;
相關文章
相關標籤/搜索