grep : 文本搜索
find :文本查找
locate:(updatedb 手動生產)
1.依賴於數據庫 2.非實時查找,結果非精確 3.查找速度快 4.采用的模糊查找
find:
實時查找:速度慢 精確匹配
格式:
find [options] [查找路徑] [查找條件] [處理動作]
查找路徑:默認為當前目錄 查找條件:默認為查找指定路徑下的所有文件 處理動作:默認為顯示
查找條件:
-name “文件名稱”:支持使用globbing(文件通配) -iname "文件名稱" : 根據姓名查找文件,不區分大小寫 -user UserName :根據屬主查找 -group GroupName : 根據屬組查找 -nouser:查找沒有屬主的文件 -nogroup: 查找沒有屬組的文件 -type: 根據文件類型查找 f: 普通文件 d: 目錄 b: 塊設備 c: 字符設備 l: 符號鏈接文件 p: 命令管道 s: 套節子 -szie:根據文件大小查找 格式: -size[+|-]#Unit #:(#-1)根據時間撮查找:
以天為單位(time): -atime [+|-]# -mtime -ctime -: 剛好# +: ># 以分鐘為單位 -amin -mmin -cmin根據權限查找:
-perm [+|-] MODE MODE : 精確匹配 + MODE:任何一類用戶的任何一位權限匹配 (常用於查找某類的某特定權限是否存在) - MODE:每類用戶的指定要檢查的權限位都匹配文件通配:
*:表示任意長度的任意字符 ?:表示任意的單個字符 [] : 表示在指定范圍內的單個字符:[a-z] [^]:脫字符,取反的意思組合條件:
-a :與。同事滿足 -o : 或,一個滿足 -not , !非。取反練習:
1.查找/var目錄中屬主為root且屬組為mail的文件
find /var/ -user root -group mail2.查找/usr目錄下不屬於root、bin或 hadoop的所有文件
find /usr/ -not -user root -not -user bin -not -user hadoop find /usr/ -not \( -user root -o -user bin -o -user hadoop \)3.查找/etc目錄中最近一周內其內容修改過的,且不屬於root或hadooop的文件
find /etc -mtime -7 -not -user root -not -user hadoop4.查找當前系統上沒有屬組或屬組,且最近一個月內被訪問過的文件
find / \(-nouser -o -nogroup\) -atime -305.查找早/etc/目錄下大於1M且類型為普通文件的所有文件
find /etc/ -type f -size +1M6.查找/etc/目錄所有用戶都沒有寫權限的文件
find /etc/ -not -perm +222 所有都沒有;相反:任何一個有 所有都有:相反:只要有一個沒有7.查找/etc/目錄下至少一類沒有寫權限的文件
find /etc/ -perm -2228.查找/etc/init.d目錄下,所有用戶都有執行權限其其他用戶有寫權限的文件
find /etc/init.d/ -perm -111 -perm -002 find /etc/init.d/ -perm -113Linux任務計劃
一次性任務執行:
at:
1.交互式 讓用戶在at>提示符輸入多個要執行命令 格式:at time atq =at -L 查看作業 -q 字母 TIme 添加別的隊列 at -d job_name 刪除一個尚未執行的作業= atrm Ctrl+d :提價任務 at 作業有隊列:使用單個字符表示 2.批處理:將任務的各命令寫入文件由at進行調用 at批模式: at -f 文件路徑 TIME TIME: 模糊時間: now noon(中午) midnight(午夜) teatime(下午4點) tomorrow任務的執行結果會議郵件的形式發送給提交者
使用mail
-s 指定主題 mail -s 主題 用戶 mail 用戶名 主題 內容 可以通過系統文件當作內容 或者用ehco echo -e "hello are you " | mail -s "to" root cat /etc/passwd | mail -s "ss" rootbatch:不能指定時間,它自動選擇系統空閒時執行
crond:守護進程,運行在後台,隨時監視著進程等待執行 服務進程:阻塞,輪訓周期性任務執行
系統cron:
文件: /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs # 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. /# :表示在指定時間范圍內每隔#一次 5-45/3 5到45分鐘,每3分鐘執行一次注意: 通過輸出重定向而拒收郵件
&> /dev/null 錯誤 > /dev/null 2>/文件位置 成功的到/dev/null 成功到指定位置用戶cron:
文件: /var/spool/sron/UserName使用crontab命令來實現
-l:查看自己的cron任務列表 -e:通過EDITOR變量中定義的編輯器打開用戶自己的cron配置文件: 編輯單獨的任務都使用-e選項,無論是刪除、修改還是新建 -r:移除crontab文件如果是管理員
-u UserName: 為別的用戶指定crontab作業 #crontab -e -u 用戶名提醒:如果在conrtab的用戶命令中使用%,得轉義為\%
anacron
練習
1、每3分鐘執行一個“echo “how are you?””
*/3 * * * * /bin/echo "hao are you"2、每周2、4、6備份/etc/目錄至/backup目錄中,備份的文件名以當etc_開頭並跟上當日的日期作為文件名
3 2 * * 2,4,6 /bin/tar -Jcf /backup/etc_`data '+/%F'.tar.xz ` /etc/*3.每天6,9,12,15,18查看一下系統當前掛載的所有文件系統,並將查看的結果追加至/tmp/mounts.txt文件中
3 6,9,12,15,18 * * * * * /bin/mount>>/tmp/mounts.txt4.每天每兩小時取當前系統內存空間余量,將其保存至/stats/memory.txt文件中
34 */2 * * * /bin/grep "^MemFree:" /proc/meminfo >> /status/memory.txt如何實現秒級別的任務
* * * * * * /bin/echo "how are your"; sleep 30; /bin/echo "how are you"crontab文件的格式
空白行會被忽略 #開頭的行是注釋anacron:
1. 是crontab的補充,用於檢查crontab中某任務在過去的一個周期內是否沒有執行, 2. 如果沒有執行,則在開機以後的某時間點讓其執行一次,無論其周期是否到達facl:文件訪問控制列表
普通用戶無法安全地將某文件授權給其他用戶訪問
facl:
附加原有權限模型之上另一層權限控制機制,保存至文件擴展屬性信息中命令:
getfacel file... setfacel {-x|-m} 權限 file... -m:設定權限 -m u:UserName:Perms -m g:GroupName:Perms -m m::Perms -x:取消權限 -x u:UserName -x g:GroupName -x m: ll表示為+,有額外的權限屬性 -R:遞歸,對文件夾內的文件也生效bash編程之循環控制
for varName in List; do 循環體 done while CONDITION; do 循環體 done循環控制
continue:提前結束本次循環而開始評估下一輪 break [n]:結束當前循環,指定條吹幾次循環shell練習
練習:求100以內所有偶數之和
#!/bin/bash declare -i sum=0 declare -i i=1 while [ $i -le 100 ];do if [ [ $i%2 ] -eq 0 ];then let sum+=$i fi let i++ done寫一個腳本
1.讓用戶輸入一個塊設備,如果設備文件不存在,就提示用戶重新輸入,知道用戶輸入正確2.用戶可以輸入quit退出
#!/bin/bash # while true; do read -p "Enter a dev " devdir if [ "$devdir" == "quit" ];then break fi if [ -b $devdir ];then break else echo "wrong device file" fi done擴展前一題
1,顯示用戶輸入塊設備,並提示用戶,後續操作會損壞設備上的所有文件,讓用戶選擇是否選擇
2.如果用戶輸入y。則繼續後面的操作
3.如果用戶輸入n ,則顯示用戶選擇了終止,並退出腳本
4.輸入任何其他字符,則用戶重新選擇#!/bin/bash # while true; do read -p "Enter a dev " devdir if [ "$devdir" == "quit" ];then break fi if [ -b $devdir ];then echo "$devdir is very good !" read -p "Are you suer [y|b]" devop devop=echo $devop | tr 'A-Z' 'a-z' if [[ "$devop" == "y" ]];then echo "no xuanze le yes" elif [[ "$devop" == "n" ]];then break else continue fi else echo "wrong device file" fi done練習:寫一個腳本
1.提示用戶輸入一個目錄路徑
2,顯示目錄下至少包含一個大寫字母的文件名#!/bin/bash while true;do read -p "Enter a directory: " dirname [ "$dirname" == "quit" ] && exit 3 [ -d "$dirname" ] && break || echo "wrong directory..." done for filename in $dirname/*;do if [[ "$fileName" =~ .*[[:upper:]]{1,}.* ]]; then echo "$fileName" fi done練習:寫一個腳本
前提:配置好yum源
1、如果本機沒有一個可用的yum源,則提示用戶,並退出腳本(4);如果此腳本非以root用戶執行,則顯示僅有root才有權限安裝程序包,而後退出(3);
2、提示用戶輸入一個程序包名稱,而後使用yum自動安裝之;盡可能不輸出yum命令執行中的信息;
如果安裝成功,則綠色顯示,否則,紅色顯示失敗;
3、如果用戶輸入的程序包不存在,則顯示錯誤後讓用戶繼續輸入;
4、如果用戶輸入quit,則正常退出(0);
5、正常退出前,顯示本地共安裝的程序包的個數;#!/bin/bash while true;do if [ $UID -ne 0 ]; then echo "`basename $0` must be running as root" exit 3 fi yum repolist &> /dev/null if [[ $? -eq 0 ]];then while true;do read -p "Enter a chengxubao: " baoname if [[ "$baoname" == "quit" ]];then rpm -qa |wc -l exit 0 fi yum list |grep "^$baoname.*" &> /dev/null if [[ $? -eq 0 ]];then yum install $baoname -y &> /dev/null if [[ $? -ne 0 ]];then echo "$baoname not ok" else echo "$baoname is ok!" exit 0 fi else continue fi done else echo "yum is not ok!!" exit 4 fi done