Summary01 - cron任務、grep、find命令

李俊的部落格發表於2018-03-15

##############################################################
cron計劃任務
cron任務概述
• 用途:按照設定的時間間隔為使用者反覆執行某一項固定的系統任務

• 軟體包:cronie、crontabs
• 系統服務:crond
• 日誌檔案:/var/log/crond

如何編寫crontab任務記錄
–  分     時     日     月       周      任務命令列(絕對路徑)
     *      *       *       *        *      
       
* : 匹配範圍內任意時間
, : 分隔多個不連續的時間點
- : 指定連續時間範圍
/n :指定時間頻率,每n ...

• 使用 crontab 命令

– 編輯:crontab -e [-u 使用者名稱]

 

每分鐘記錄    當前系統的時間, 寫入到/opt/time.txt

虛擬機器Server
[root@server0 ~]# date

2018年 03月 15日 星期四 10:10:27 CST

[root@server0 ~]# crontab -e -u root
*/1  *  *  *  *    date >> /opt/time.txt
[root@server0 ~]# cat /opt/time.txt

例子: 
每天早上6點 
0 6 * * * echo "Good morning." >> /tmp/test.txt //注意單純echo,從螢幕上看不到任何輸出,因為cron把任何輸出都email到root的信箱了。

每兩個小時 
0 */2 * * * echo "Have a break now." >> /tmp/test.txt  

每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點 
0 11 4 * 1-3 command line

1月1日早上4點 
0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出現錯誤,或者有資料輸出,資料作為郵件發給這個帳號 HOME=/ 

每小時執行/etc/cron.hourly內的指令碼
01 * * * * root run-parts /etc/cron.hourly
每天執行/etc/cron.daily內的指令碼
0 24 * * * root run-parts /etc/cron.daily 

每星期執行/etc/cron.weekly內的指令碼
22 4 * * 0 root run-parts /etc/cron.weekly 

每月去執行/etc/cron.monthly內的指令碼 
42 4 1 * * root run-parts /etc/cron.monthly 

注意: "run-parts"這個引數了,如果去掉這個引數的話,後面就可以寫要執行的某個指令碼名,而不是資料夾名。   

每天的下午4點、5點、6點的5 min、15 min、25 min、35 min、45 min、55 min時執行命令。 
5,15,25,35,45,55 16,17,18 * * * command

每週一,三,五的下午3:00系統進入維護狀態,重新啟動系統。
00 15 * * 1,3,5 shutdown -r +5


每小時的10分,40分執行使用者目錄下的innd/bbslin這個指令: 
10,40 * * * * innd/bbslink 

每小時的1分執行使用者目錄下的bin/account這個指令: 
1 * * * * bin/account

#######################################################

grep命令擴充套件

  匹配空行:  ^$

[root@server0 ~]#grep -Pv "^(#|$)" /etc/dnsmasq.conf   //去除註釋和空行

[root@server0 ~]# grep -v '^$'  /etc/default/useradd


# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
  顯示一個/etc/login.defs 配置檔案有效配置(去掉以#開頭的 註釋   去掉空行)

[root@server0 ~]# grep -v  '^#' /etc/login.defs
[root@server0 ~]# grep -v  '^#' /etc/login.defs     |  grep -v '^$' 
 # grep -v  '^#' /etc/login.defs     |   grep -v '^$'  |   cat -n

###############################################################
find 按條件查詢檔案
• 根據預設的條件遞迴查詢對應的檔案
– find [目錄] [條件1] [-a|-o] [條件2] ...

– 常用條件表示:
  -type 型別(f檔案、d目錄、l快捷方式)
  -name "文件名稱"
  -size +|-檔案大小(k、M、G)
  -user 使用者名稱


[root@server0 ~]# find /boot/ -type l     #查詢是快捷方式
/boot/grub/menu.lst
[root@server0 ~]# ls -l /boot/grub/menu.lst 

[root@server0 ~]# find /boot/ -type d     #查詢是目錄

[root@server0 ~]# find /boot/ -type f     #查詢是文字檔案

 請顯示/etc目錄下以 .conf結尾的?(包含子目錄)

[root@server0 ~]# find /etc  -name  "*.conf"

 請顯示/etc目錄下以 .conf結尾的?(不包含子目錄)
[root@server0 ~]# ls /etc/*.conf

[root@server0 ~]# mkdir /root/nsd1802
[root@server0 ~]# touch /root/nsd01.txt
[root@server0 ~]# touch /root/nsd18.txt

[root@server0 ~]# find /root/ -name "nsd*"
[root@server0 ~]# find /root/ -name "nsd*"      -type f
[root@server0 ~]# find /root/ -name "nsd*"      -type d

-size +|-檔案大小(k、M、G)
[root@server0 ~]# find /boot/ -size +10M
[root@server0 ~]# find /boot/ -size +300k
[root@server0 ~]# find /boot/ -size -10M

 -user 使用者名稱
[root@server0 ~]# find / -user student  -type f
[root@server0 ~]# useradd wangwu
[root@server0 ~]# find / -user wangwu   
[root@server0 ~]# find / -user wangwu  -type d  

#############################################################

 find結果處理

[root@server0 ~]# rm -rf /opt/*
[root@server0 ~]# ls /opt/
[root@server0 ~]# find /boot/ -size +300k


• 使用find命令的 -exec 操作
– find .. .. -exec 處理命令 {} \;
– 優勢:以 {} 代替每一個結果,逐個處理,遇 \; 結束
# find /boot/ -size +300k    -exec cp -r {} /opt   \;
# ls /opt/
# find  /   -user student  -type f   
# mkdir /root/findfile
# find  /   -user student  -type f  -exec cp {}  /root/findfile \;
# ls /root/findfile

################################################################

案例練習,準備:
            rht-vmctl  reset  classroom
            rht-vmctl  reset  server
   rht-vmctl  reset  desktop
########################################################################


案例1:為虛擬機器 server0 配置以下靜態地址引數
– 主機名:server0.example.com
[root@server0 ~]# vim /etc/hostname


– IP地址:172.25.0.11
– 子網掩碼:255.255.255.0
– 預設閘道器:172.25.0.254
[root@server0 ~]# nmcli connection modify 'System eth0'  ipv4.method manual ipv4.addresses '172.25.0.11/24 172.25.0.254' connection.autoconnect yes
[root@server0 ~]# nmcli connection up 'System eth0'
– DNS伺服器:172.25.254.254
[root@server0 ~]# vim /etc/resolv.conf 
nameserver 172.25.254.254


案例2:為虛擬機器 desktop0 配置以下靜態地址引數
– 主機名:desktop0.example.com
[root@desktop0 ~]# vim /etc/hostname
– IP地址:172.25.0.10
– 子網掩碼:255.255.255.0
– 預設閘道器:172.25.0.254

[root@desktop0 ~]# nmcli connection modify 'System eth0'   ipv4.method manual ipv4.addresses '172.25.0.10/24 172.25.0.254' connection.autoconnect yes

        [root@server0 ~]# nmcli connection up 'System eth0'    

– DNS伺服器:172.25.254.254
[root@desktop0 ~]# vim /etc/resolv.conf 

案例3:指定yum軟體源
為 server0 指定可用的 yum 軟體源
– YUM軟體庫的地址為 http://classroom.example.com/content/rhel7.0/x86_64/dvd
[root@server0 ~]# vim /etc/yum.repos.d/dvd.repo
– 將此配置為虛擬機器 server0 的預設軟體倉庫
– 確認可用的倉庫列表
[root@server0 ~]# yum repolist 
– 利用yum倉庫安裝httpd與vsftpd
[root@server0 ~]# yum install httpd
[root@server0 ~]# yum -y install vsftpd


案例4:指定yum軟體源
為 desktop0 指定可用的 yum 軟體源
– YUM軟體庫的地址為 http://classroom.example.com/content/rhel7.0/x86_64/dvd
[root@desktop0 ~]# vim /etc/yum.repos.d/dvd.repo
– 將此配置為虛擬機器 server0 的預設軟體倉庫
[rhel]
name=rhel7.0
baseurl=http://classroom.example.com/content/rhel7.0/x86_64/dvd
enabled=1
gpgcheck=0

– 確認可用的倉庫列表
[root@desktop0 ~]# yum repolist 
– 利用yum倉庫安裝httpd與vsftpd
[root@desktop0 ~]# yum -y install httpd
[root@desktop0 ~]# yum -y install vsftpd

案例5:虛擬機器 server0上操作,複製、貼上、移動

 以root使用者新建/nsddir/目錄,在此目錄下新建readme.txt檔案,並進一步完成下列操作

 1)將“I love Linux”寫入到檔案readme.txt 
[root@desktop0 nsddir]# vim readme.txt
 2)將readme.txt重新命名為mylove.txt
[root@desktop0 nsddir]# mv readme.txt mylove.txt
 3)將/etc/passwd、/boot、/etc/group同時拷貝到/nsddir目錄下
[root@desktop0 nsddir]# cp -r /etc/passwd /boot/ /etc/group /nsddir/
 4)將ifconfig命令的前兩行內容,追加寫入mylove.txt
[root@desktop0 nsddir]# ifconfig |head -2 >> mylove.txt 
 5)將主機名永久配置檔案,拷貝到/nsddir目錄下
[root@desktop0 nsddir]# cp /etc/hostname /nsddir/
 6)將DNS永久配置檔案,拷貝到/nsddir目錄下
[root@desktop0 nsddir]# cp /etc/resolv.conf /nsddir/

案例6:虛擬機器Server上操作:複製、刪除、移動及vim文字編輯器
  1. 新建目錄結構/nsd/test
[root@desktop0 nsddir]# mkdir -p /nsd/test
  2. 在目錄/nsd/test建立檔案nsd.txt並寫入內容 NSD  Student
[root@desktop0 test]# vim nsd.txt
  3. 將/nsd/test/nsd.txt檔案複製到/root目錄下,同時 改名為 tedu.txt
[root@desktop0 test]# cp /nsd/test/nsd.txt /root/tedu.txt
  4. 利用vim 修改檔案/etc/hostname將其原有內容全部刪除,寫入新的內容為server0.example.com
[root@desktop0 ~]# vim /etc/hostname 
  5. 將/etc/passwd 、/etc/resolv.conf、/etc/hostname 同時拷貝到/nsd/test/目錄下
[root@desktop0 ~]# cp -r /etc/passwd /etc/resolv.conf /etc/hostname /nsd/test/
  6. 將檔案 /nsd/test/hostname 重改名為 hn.txt 
[root@desktop0 test]# mv /nsd/test/hostname /nsd/test/hn.txt
  7. 建立目錄結構/nsd/test/kernel
[root@desktop0 test]# mkdir kernel
  8. 將目錄 /boot內容中以 vm 開頭的 複製到/nsd/test/kernel目錄下 
[root@desktop0 test]# find /boot/ -name 'vm*' -exec cp {} /nsd/test/kernel \;

案例7:虛擬機器 server0上操作,查詢並處理檔案
 – 利用find查詢所屬使用者 student 擁有的必須是檔案,把它們拷貝到 /root/findfiles/ 資料夾中
[root@desktop0 findfiles]# find / -user student -type f -exec cp {} /root/findfiles/ \;
 – 利用find查詢/boot目錄下大於10M並且必須是檔案,拷貝到/opt
[root@desktop0 findfiles]# find /boot/ -size +10M
 – 利用find查詢/boot/ 目錄下以 vm 開頭且必須是檔案,拷貝到/opt
[root@desktop0 findfiles]# find /boot/ -name 'vm*' -type f -exec cp {} /opt/ \;
 – 利用find查詢/boot/ 目錄下為快捷方式
[root@desktop0 opt]# find /boot/ -type l
 – 利用find查詢/etc 目錄下,以 tab 作為結尾的 必須是檔案
[root@desktop0 grub]# find /etc/ -name '*tab' -type f

案例8:虛擬機器 server0上操作,查詢並提取檔案內容
1.在檔案 /usr/share/dict/words 中查詢到所有包含字串 seismic 的行,將輸出資訊,寫入到/opt/nsd18.txt
[root@desktop0 grub]# grep 'seismic' /usr/share/dict/words > /opt/nsd18.txt
2.檢視核心版本,將顯示結果重定向到/root/version.txt
[root@desktop0 opt]# uname -r > /root/version.txt
3.檢視紅帽系統版本,將顯示結果追加到/root/version.txt
[root@desktop0 ~]# cat /etc/redhat-release  >> /root/version.txt 
4.檢視主機名將顯示結果追加到/root/version.txt
[root@desktop0 ~]# hostname >> /root/version.txt 
5.將/etc/fstab檔案中以UUID開頭的資訊,寫入到/root/fstab.txt
[root@desktop0 ~]# grep '^UUID' /etc/fstab >> /root/fstab.txt
6.提取/etc/passwd以bash結尾的行,將其資訊寫入/opt/pass.txt
[root@desktop0 ~]# grep 'bash$' /etc/passwd >> /opt/pass.txt
7. 複製/etc/login.defs檔案到當前目錄下,改名為init.txt
[root@desktop0 ~]# cp /etc/login.defs /root/init.txt
8.提取init.txt檔案裡的有效配置(去除以#號開頭,去除空行),儲存為init2.txt
[root@desktop0 ~]# grep -v '^#' init.txt | grep -v '^$' > init2.txt

案例9:虛擬機器 server0上操作,tar製作/釋放歸檔壓縮包(zcf、ztf、zxf、jcf、jtf、jxf、cf、tf)
    1)備份/boot、/home這兩個資料夾,儲存為boothome.tar.gz檔案

[root@desktop0 ~]# tar -zcf /opt/boothome.tar.gz /boot/ /home/

    2)檢視boothome.tar.gz檔案內包含哪些內容 

[root@desktop0 opt]# tar -tf boothome.tar.gz 

    3)將boothome.tar.gz釋放到資料夾/root/boothome/下

        [root@desktop0 opt]# tar -xf /opt/boothome.tar.gz -C /root/boothome/

    4)建立一個名為 /root/backup.tar.bz2 的歸檔檔案,其中包含 /usr/local 目錄中的內容
[root@desktop0 boothome]# tar -jcf /root/backup.tar.bz2 /usr/local/

案例10:虛擬機器 server0上操作
• 新建使用者 alex,其使用者ID為3456,密碼是flectrag 
[root@desktop0 ~]# useradd -u 3456 alex
[root@desktop0 home]# passwd alex 
• 建立下列使用者、組以及組的成員關係: 
– 一個名為 adminuser 的組 
[root@desktop0 ~]# groupadd adminuser
– 一個名為 natasha 的使用者,其屬於 adminuser 組, 這個組是該使用者的從屬組 
[root@desktop0 ~]# useradd -G adminuser natasha
– 一個名為 harry 的使用者,其屬於 adminuser 組,這個 組是該使用者的從屬組 
[root@desktop0 ~]# useradd -G adminuser harry
– 一個名為 sarah 的使用者,其在系統中沒有可互動的 Shell(/sbin/nologin),並且不是 adminuser 組的成員 
[root@desktop0 home]# useradd -s /sbin/nologin sarah
– natasha 、harry、sarah 的密碼都要設定為 flectra
[root@desktop0 home]# echo flectra | passwd --stdin natasha 
        更改使用者 natasha 的密碼 。
        passwd:所有的身份驗證令牌已經成功更新。
        [root@desktop0 home]# echo flectra | passwd --stdin harry 
        更改使用者 harry 的密碼 。
        passwd:所有的身份驗證令牌已經成功更新。
        [root@desktop0 home]# echo flectra | passwd --stdin sarah
        更改使用者 sarah 的密碼 。
        passwd:所有的身份驗證令牌已經成功更新。

案例11:組賬號基本管理
    1)新建組賬號stugrp
[root@desktop0 home]# groupadd stugrp
    2)建立使用者lily、zhangsan
[root@desktop0 home]# useradd lily
[root@desktop0 home]# useradd zhangsan
    3)為stugrp組新增三個成員使用者(lily、root、zhangsan)
[root@desktop0 home]# gpasswd -a lily stugrp
[root@desktop0 home]# gpasswd -a root stugrp
[root@desktop0 home]# gpasswd -a zhangsan stugrp
    4)從stugrp組刪除一個成員(lily)
[root@desktop0 home]# gpasswd -d lily stugrp

案例12:配置NTP網路時間客戶端

[root@desktop0 home]# yum -y install chrony   1.安裝軟體

配置虛擬機器 server0,自動校對系統時間

        NTP伺服器位於 classroom.example.com 

[root@desktop0 home]# vim /etc/chrony.conf    2.修改配置檔案
server classroom.example.com iburst


此客戶機的時間與NTP伺服器的時間保持同步
[root@desktop0 home]# systemctl restart chronyd.service  3.重啟服務
  [root@desktop0 home]# systemctl enable chronyd             4.將服務設定為開機自啟動   

案例13:虛擬機器 server0上操作
    為使用者 natasha 配置一個定時任務 
– 每天在本地時間 14:23 執行
– 需要完成的任務操作為 /bin/echo  hiya
[natasha@server0 home]$ crontab -e
23 14 * * * /bin/echo hiya

相關文章