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