find命令常見用法與linux定時計劃任務

  find命令:
linux

        一種實時查找工具,經過遍歷指定路徑下的文件系統完成文件查找。正則表達式

        find [OPTION]...[查找路徑] [查找條件] [處理動做]
centos

            查找路徑:指定具體目標路徑,默認爲當前路徑
bash

            查找條件:指定的查找標準,能夠爲文件名,類型,大小,權限等標準進行,默認爲找出路徑下的全部文件
ide

            處理動做:對查找的文件執行什麼動做;默認輸出至屏幕
工具


    查找條件:文件名,屬主屬組,文件類型,文件大小,時間戳,權限oop

        根據文件名查找:
ui

            -name "文件名稱": 支持使用glob:*,?,[],[^]
spa

            -iname "文件名稱": 不區分字母大小寫
orm

            -regex "PATTERN": 以PATTERN匹配整個文件路徑字符串,而不只僅是文件名稱

       根據屬主屬組查找:

            -user USERNAME:查找屬主爲指定用戶的文件

            -group GRPNAME:查找屬組爲指定組的文件

            -uid UserID:查找屬主爲指定UID號的文件

            -gid GroupID:查找屬主爲指定GID號的文件

            -nouser:查找沒有屬主的文件

            -nogroup:查找沒有屬組的文件

        根據文件類型查找:

            -type TYPE:

                f:普通文件

                d:目錄文件

                l:符號連接

                s:套接字文件

                b:塊設備文件

                c:字符設備文件

                p:管道文件

        根據文件大小查找:

            -size [+|-] #UNIT

                經常使用單位:k,M,G,同時支持b,c,w

                #UNIT:(#-1,#],查找大於#-1,小於等於#UNIT大小的文件

                +#UNIT:(#,∝)

                -#UNIT:[0,#-1]

        根據時間戳查找:

            以「天」爲單位:

                -atime [+|-] #

                -mtime [+|-] #

                -ctime [+|-] #

            以「分」爲單位:

                -amin [+|-] #

                -mmin [+|-] #

                -cmin [+|-] #

                    #:[#,#+1)

                   +#:[#+1,∝)

                    -#:[0,#)

        根據權限查找:

            -perm [/|-] MODE

                MODE:精確權限匹配,指定的MODE即爲文件或目錄全部的權限。若是指定爲0,即沒有任何權限。

                    如:400,查找指定目錄下屬主只有可讀權限,屬組和其餘沒有任何權限的文件或目錄。

                /MODE:任何一類對象權限,只要匹配一位便可,一位:指u,g,o中rwx任意以指定的MODE相匹配便可

                    如:/524,只要u可讀或者可執行,或者g可寫,或者o可讀的文件和目錄都將被匹配到。其餘未指定的位可爲0或1

                -MODE:每一類對象都必須同時擁有爲其指定的權限標準。若是指定爲0,權限可忽略。

                    如:-400,查找指定目錄下屬主必須具備可讀權限,屬組和其餘用戶權限能夠忽略

                        -520,查找指定目錄下屬主必須具備可讀寫權限,屬組必須具備可寫權限,其餘用戶權限可忽略

                        -424,查找指定目錄下屬主必須具備可讀權限,屬組必須具備有可寫權限,其餘用戶有可讀權限

        組合條件:

            -a:非

            -o:或

            -not,!:非

    處理動做:

        -print:默認選項

        -ls:相似對查找到的文件執行"ls -l"命令

        -delete:刪除查找到的文件

        -fls /path/to/somefile:查找到的全部長格式文件保存至指定文件

        -ok COMMAND {} \; 對查找到的每一個文件執行由COMMAND指定的命令,要求進行交互式確認

        -exec COMMAND {} \;對查找到的每一個文件執行由COMMAND指定的命令,

            {}: 用於引用查找到的文件名稱自身;


        有些命令可能不能接受過多參數,致使命令執行失敗,可經過xargs避免此問題

            find | xargs COMMAND


一、找出/etc/rc.d/init.d/functions文件中某單詞後面跟一組小括號的行,形如:hello();

[root@allen ~]# grep -E --color=auto "\<[[:alpha:]]+\>\(\)" /etc/rc.d/init.d/functions
checkpid() {
daemon() {
killproc() {
pidfileofproc() {
pidofproc() {
status() {
success() {
failure() {
passed() {
warning() {
action() {
strstr() {

二、使用echo命令輸出一個絕對路徑,使用grep取出其基名;

基名:指不包含文件的目錄路徑,僅含文件名自己。能夠經過basename來查詢文件的基名,多用於腳本中。

[root@allen ~]# echo /etc/sysconfig/network-scripts/ | grep -E -o "[^/]+/?$" | cut -d"/" -f1
network-scripts

擴展:取出其路徑名

[root@allen ~]# echo /etc/sysconfig/network-scripts/ | egrep -o "(/[^/]+)+/." | grep -E -o "(/[^/]+)+/" | grep -E -o "(/[^/]+)+"  
/etc/sysconfig

三、找出ifconfig命令結果中的1-255之間數字;

        ①要獲取1-255之間的數字,需對數字進行拆分,分段獲取:1-9,10-99,100-199,200-249,250-255

        ②基本正則表達式不支持元字符‘|’,因此須要使用參數-E,或者使用egrep查詢。

        ③選項-o,僅顯示匹配的字符

        ④此處須要用到單詞錨定符/</>,或者/b/b來完整匹配一個數字

[root@allen ~]# ifconfig | grep -E -o "\<[1-9]\>|\<[1-9][0-9]\>|\<[1][0-9]{2}\>|\<[2][0-4][0-9]\>|\<25[0-5]\>"


  

四、查找當前系統上沒有屬主或屬組的文件;

[root@localhost ~]# find / -nouser -o -nogroup

 查找當前系統上沒有屬主或屬組,且最近3天內曾被訪問過的文件或目錄;

[root@localhost ~]# find / \( -nouser -o -nogroup \) -a -atime -3


五、查找/etc目錄下大於1M,且類型爲普通文件的全部文件;

[root@localhost ~]# find /etc -size +1M -type f -exec ls -lh {} \;  
-rw-r--r--. 1 root root 1.1M Apr 24  2015 /etc/pki/tls/certs/ca-bundle.trust.crt
-rw-r--r--. 1 root root 8.0M Nov 17 09:27 /etc/selinux/targeted/modules/active/policy.kern
-rw-r--r--. 1 root root 8.0M Nov 17 09:27 /etc/selinux/targeted/policy/policy.24
-rw-r--r--. 1 root root 2.2M Nov 17 09:29 /etc/gconf/gconf.xml.defaults/%gconf-tree.xml

六、查找/etc/init.d/目錄下,全部用戶都有執行權限,且其它用戶有寫權限的文件;

[root@localhost hallen]# find /etc/init.d/ -perm -113 -ls

七、查找/etc目錄下最近一週內其內容被修改過,且不屬於root或hadoop的文件;

[root@localhost ~]# find /etc -not \( -user root -o -user hadoop \) -a -mtime -7 -ls
[root@localhost ~]# find /etc -not -user root -a -not -user hadoop -a -mtime -7 -ls

八、複製/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以致少一個空白字符開頭的行的行首加#;

[root@localhost tmp]# cp /etc/rc.d/rc.sysinit /tmp/rc.sysinit
[root@localhost tmp]# sed 's@^[[:space:]]\+@#@' /tmp/rc.sysinit

九、刪除/tmp/rc.sysinit文件中的以#開頭,且後面跟了至少一個空白字符的行行的#和空白字符

[root@localhost tmp]# sed -i 's/^#[[:space:]]\+//' /tmp/rc.sysinit
[root@localhost tmp]#sed '/^#[[:space:]]\+/ d' /tmp/rc.sysinit

十、將/etc/yum.repos.d/CentOS-Media.repo文件中全部的enabled=0或gpgcheck=0的最後的0修改成1;

[root@localhost tmp]# sed -ri '/enabled=0|gpgcheck=0/ s/0/1/'  /etc/yum.repos.d/CentOS-Media.repo


週期性任務計劃:cron

    在centos中,週期性任務計劃相關程序包包含cronnie,cronie-anacron,crontabs三個。

        cronie是主程序包,提供了crond守護進程及相關輔助工具

        cronie-anacron是cronie的補充程序,用於監控cronie的任務執行情況。

        crontabs包含Centos提供系統維護任務

    系統級別的任務計劃定義在/etc/crontab配置文件中。

    用戶任務計劃經過crontab命令來添加,每一個用戶定義的計劃任務都會在/var/spool/cron/目錄下存在一個以用戶名命名文件。


    crontab命令:

    crontab [-u user] [-l | -e | -r] [-i]

        -l:列出全部任務

        -e:編輯任務

        -r:移除全部任務

        -i:通-r一同使用,交互式選擇移除指定任務

        -u user: 僅root用戶可運行,代爲指定用戶管理cron任務

    cron任務時間說明:

    cron用5個時間段來定義計劃任務執行週期,分別爲:分鐘,小時,天,月,周。

    系統cron任務

    # Example of job definition:

    # .---------------- minute (0 - 59)

    # |   .------------- hour (0 - 23)

    # |   |   .---------- day of month (1 - 31)

    # |   |   |  .------- month (1 - 12) OR jan,feb,mar,apr ...

    # |   |   |   |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

    # |   |   |   |   |

    # *  *  *   *   * user-name  command to be executed

    時間表示法:

    1) 特定值:給定時間點有效取值範圍內的值

    2) *:給定時間點上有效取值範圍內的全部值,表示"每..."

    3) 離散取值:用逗號","分隔

    4) 連續取值:-

    5) 在指定時間範圍上,定義步長: */# (#爲整數)

對cron任務來講,如需使用%號,須要使用轉義字符進行轉義。因%在cron中有特殊用途


十一、每週2,4,6備份/var/log/messages文件至/backup/messages_logs/目錄中,保存的文件名形如messages-20161202

[root@allen ~]# crontab -e
0 2 * * 2,4,6 cp /var/log/messages /backup/logs/messages-`date +\%Y\%m\%d`

十二、天天每兩小時取當前系統/proc/meminfo文件中的全部以S開頭的信息至/stats/memory.txt文件中

[root@allen ~]# crontab -e
0 */2 * * * grep -E '^S' /proc/meminfo >> /stats/memory.txt

1三、寫一個腳本建立10用戶user10-user19;密碼同用戶名;

#!/bin/bash
#useradd user10 to user19
for i in $(seq 10 19);do
   id user$i > /dev/null 2>&1
   status=`echo $?`
  if [ $status -ne 0 ];then
    useradd user$i > /dev/null 2>&1
  fi

  if id user$i > /dev/null 2>&1;then
    echo "user$i" | passwd --stdin user$i > /dev/null 2>&1
  fi
done
相關文章
相關標籤/搜索