1、壓縮比:
壓縮前和壓縮後的大小體積比例
2、壓縮目的:
時間換空間,用cpu的時間換磁盤的空間;如何選擇壓縮,要衡量是節省cpu時間還是節省硬盤空間。
3、linux壓縮、解壓縮工具,及歸檔工具:
序號 | 壓縮工具 | 解壓縮工具 | 不解壓查看內容 | 後綴 | 備註 |
1 | compress | uncompress | .z | ||
2 | gzip | gunzip | zcat | .gz | 只能壓縮文件 |
3 | bzip2 | bunzip2 | .bz2 | 只能壓縮文件 | |
4 | xz | unxz | .xz | 只能壓縮文件 | |
5 | lzma | unlzma | lzcat | .lzma | |
6 | zip | unzip | zcat | .zip | 壓縮比比較小 |
歸檔工具 | |||||
1 | tar | ||||
2 | cpio |
3.1、gzip、 gunzip、 zcat:
gzip [ options ] [ name ... ] //壓縮單個文件,後綴爲.gz,同時刪除原文件
[ options ]:
-d:直接解壓縮,相當於gunzip,
-#:制定壓縮比,默認是6,數字越大,壓縮比越大(範圍1-9),不建議修改
-c:將壓縮結果輸出至標準輸出。
格式: gzip -c FILE >/PATH/TO/SOMEFILE.GZ
如:
[root@localhost tmp]# ls
fstab issue
[root@localhost tmp]# gzip -c issue > ./issue1.gz
[root@localhost tmp]# ll
total 12
-rw-r--r--. 1 root root 540 Nov 20 19:38 fstab
-rw-r--r--. 1 root root 23 Nov 20 19:38 issue
-rw-r--r--. 1 root root 49 Nov 20 19:53 issue1.gz
[root@localhost tmp]# zcat issue1.gz
\S
Kernel \r on an \m
[root@localhost tmp]#
gunzip [ optios ] [ name ... ] //解壓縮,同時會刪除原壓縮文件
zcat [ -fhLV ] [ name ... ] //直接查看壓縮中的文件內容,用cat查看會出現亂碼
如:
[root@localhost tmp]# ls
fstab issue
[root@localhost tmp]# gzip fstab issue
[root@localhost tmp]# ll
total 8
-rw-r--r--. 1 root root 295 Nov 20 19:38 fstab.gz
-rw-r--r--. 1 root root 49 Nov 20 19:38 issue.gz
[root@localhost tmp]#
[root@localhost tmp]# gunzip fstab.gz issue.gz
[root@localhost tmp]# ll
total 8
-rw-r--r--. 1 root root 540 Nov 20 19:38 fstab
-rw-r--r--. 1 root root 23 Nov 20 19:38 issue
[root@localhost tmp]#
[root@localhost tmp]# zcat issue.gz
\S
Kernel \r on an \m
[root@localhost tmp]#
3.2、 bzip2, bunzip2 、bzcat
bzip2 [ options ] [ filenames ... ] //壓縮單個文件,後綴爲.bz2,同時刪除原文件
[ options ]:
-d:直接解壓縮,相當於bunzip,
-#:制定壓縮比,默認是6,數字越大,壓縮比越大(範圍1-9),不建議修改
-k:保留原文件
bunzip2 [ options ] [ filenames ... ]
bzcat [ -s ] [ filenames ... ]
如:
[root@localhost tmp]# gzip ./*
[root@localhost tmp]# ll
total 8
-rw-r--r--. 1 root root 295 Nov 20 19:38 fstab.gz
-rw-r--r--. 1 root root 49 Nov 20 19:38 issue.gz
[root@localhost tmp]# gzip -d fstab.gz issue.gz
[root@localhost tmp]# ll
total 8
-rw-r--r--. 1 root root 540 Nov 20 19:38 fstab
-rw-r--r--. 1 root root 23 Nov 20 19:38 issue
3.3、 xz, unxz, xzcat,
xz [ options ] [ filenames ... ] //壓縮單個文件,後綴爲.xz,同時刪除原文件
[ options ]:
-d:直接解壓縮,相當於unxz,
-#:制定壓縮比,默認是6,數字越大,壓縮比越大(範圍1-9),不建議修改
-k:保留原文件
注意:gzip、bzip、xz只能壓縮文件不能是目錄,而且三者壓縮和解壓縮都會刪除原文件,三者壓縮比依次增大
3.4、歸檔工具:tar、cpio
由於gzip、bzip2、xz壓縮軟件只能壓縮單個文件,不能壓縮目錄。這種情況下,
如果要壓縮一個目錄,則先要進行歸檔操作,歸檔操作就是將多個文件打包成一個。
歸檔一般會增大文件體積,因爲歸檔也要有一些文件參與,因此可以將目錄歸檔後在壓縮。
3.4.1、tar命令格式:
tar [OPTION...] [FILE]...
注意:tar命令的options可以不帶“-”,而且創建、展開、查看必須帶-f選項。
options:
-c:創建歸檔
tar -cf /PATH/TO/SOMEFILE.tar FILE....
-x:展開歸檔;-C:和-x一起使用表示展開到何處目錄,也可以不跟,表示當前目錄
tar -xf /PATH/FROM/SOMEFILE.tar [-C /TO/SOME/PATH]
-t:不展開歸檔查看歸檔文件
tar -tf /PATH/TO/SOMEFILE.tar
歸檔後在進行壓縮,也可以歸檔的同時進行壓縮(結合gzip、bzip2、xz)。
歸檔並壓縮:
-z:調用gzip
-j:調用bzip2
-J:調用xz
tar {z|j|J}cf /PATH/TO/SOMEFILE.tar.{gz|bz2|xz} FILE... //歸檔並壓縮
tar {z|j|J}xf /PATH/TO/SOMEFILE.tar.{gz|bz2|xz} FILE... //展開歸檔並解壓縮
如:
[root@localhost tmp]# ls
test
[root@localhost tmp]# tar -zcf test.tar.gz test/
[root@localhost tmp]# ll
total 8
drwxr-xr-x. 2 root root 49 Nov 20 20:55 test
-rw-r--r--. 1 root root 5139 Nov 20 21:08 test.tar.gz
[root@localhost tmp]#
如:
[root@localhost tmp]# ll
total 0
drwxr-xr-x. 2 root root 49 Nov 20 20:55 test
[root@localhost tmp]# gzip test/
gzip: test/ is a directory -- ignored
[root@localhost tmp]# tar -cf test/ //必須指明歸檔後的文件名,否則不通過,如這裏所示
tar: Cowardly refusing to create an empty archive
Try `tar --help' or `tar --usage' for more information.
[root@localhost tmp]# tar -cf test.tar test/
[root@localhost tmp]# ls
test test.tar
[root@localhost tmp]# tar -tf test.tar //查看歸檔中的文件有哪些
test/
test/fstab
test/functions
test/issue
[root@localhost tmp]#
[root@localhost tmp]# gzip test.tar
[root@localhost tmp]# ll
total 8
drwxr-xr-x. 2 root root 49 Nov 20 20:55 test
-rw-r--r--. 1 root root 5148 Nov 20 20:56 test.tar.gz
[root@localhost tmp]#
3.5、zip:既能歸檔又能壓縮,因此可以壓縮目錄,但是壓縮比有限。
zip、unzip
命令格式:
zip /PATH/TO/SOMEFILE.zip FILE....
如:
[root@localhost tmp]# ls
test
[root@localhost tmp]# zip test
zip error: Nothing to do! (test.zip)
[root@localhost tmp]# zip test.zip
zip error: Nothing to do! (test.zip)
[root@localhost tmp]# zip test.zip test/
adding: test/ (stored 0%)
[root@localhost tmp]# ls
test test.zip
[root@localhost tmp]#
4、任務計劃
4.1、任務計劃:未來的某一時間執行一次某任務,或者重複執行某任務。
4.2、任務計劃分類:
單次任務計劃:未來某一時間執行一次某任務
重複任務計劃:某任務在一個時間點,重複執行,如每天執行、每週執行、每月執行等等,
4.3、任務計劃涉及的命令:
單次任務計劃:at命令、batch命令
重複任務計劃:crontab命令
4.4、任務計劃的結果反饋
任務的計劃執行結果:①會通過郵件服務器中的郵件返送給用戶;②此郵件位於本地主機上,目錄在/var/spool/mail/用戶 |
要實現每個用戶登錄服務器看到郵件,需滿足的條件: 啓動本地郵件服務器,此服務僅是本地的 在/var/spool/mail/目錄下有相應的用戶目錄,如:/var/spool/mail/user123 |
查看本地郵件服務是否啓動? 查看進程是否有tcp25端口開啓,若開啓,說明郵件服務器已啓用 方法一:netstat [root@localhost ~]# netstat -tnl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp6 0 0 ::1:25 :::* LISTEN [root@localhost ~]# 方法二: [root@localhost ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 100 ::1:25 :::* [root@localhost ~]# |
本地電子郵件服務器介紹: 發送端:使用的協議:smtp;simple mail transmisson protocol。只用來發送郵件,不能接收,類型郵遞員的角色 接收端:使用的協議有兩種: pop3:post office protocol imap4:internet mail access protocol linux上實現收發:發送和接收internet郵件 centos7:mailx cenos6:mail mua:mail user agent:用戶接收郵件的工具程序 發送郵件格式: mail [-s 'SUBJECT'] username[@hostname] //mail [-s '郵件主題'] 用戶名@[主機名] 郵件正文的內容有三種方式生成: ①通過交互式輸入,按ctrl+d提交 ②通過輸入重定向生成 ③通過管道生成 查看郵件: #mail //不帶參數,表示查看郵件 如:示例一: [root@localhost ~]# mail -s "a new mail" root //寫一封郵件,回車進入正文,寫完後,按ctrl+d退出正文。 this is a new message EOT [root@localhost ~]# mail //查看郵件 Heirloom Mail version 12.5 7/5/10. Type ? for help. "/var/spool/mail/root": 1 message 1 new >N 1 root Sat Dec 2 05:33 19/625 "a new mail" & 1 //輸入要查看郵件的序列號 Message 1: From [email protected] Sat Dec 2 05:33:41 2017 Return-Path: <[email protected]> X-Original-To: root Delivered-To: [email protected] Date: Sat, 02 Dec 2017 05:33:41 +0800 Subject: a new mail User-Agent: Heirloom mailx 12.5 7/5/10 Content-Type: text/plain; charset=us-ascii From: [email protected] (root) Status: R this is a new message & q //輸入q,退出查看 Held 1 message in /var/spool/mail/root [root@localhost ~]# 示例二:重定向郵件正文內容: [root@localhost ~]# mail -s "a new mail" root < /etc/is //重定向郵件正文內容 iscsi/ issue issue.net [root@localhost ~]# mail -s "a new mail" root < /etc/issue You have mail in /var/spool/mail/root [root@localhost ~]# mail Heirloom Mail version 12.5 7/5/10. Type ? for help. "/var/spool/mail/root": 2 messages 1 new 1 root Sat Dec 2 05:33 20/636 "a new mail" >N 2 root Sat Dec 2 05:38 20/625 "a new mail" 示例三:通過管道生成郵件正文內容 [root@localhost ~]# cat /etc/fstab | mail -s 'another message' root [root@localhost ~]# mail Heirloom Mail version 12.5 7/5/10. Type ? for help. "/var/spool/mail/root": 3 messages 1 new 1 root Sat Dec 2 05:33 20/636 "a new mail" 2 root Sat Dec 2 05:38 21/636 "a new mail" >N 3 root Sat Dec 2 05:41 29/1147 "another message" & |
4.5、at命令:單次任務
命令格式:
at [options...] TIME //time是未來某一時間
TIME表示格式:
①、HH:MM[YYYY-mm-dd]
②、noon:正午
midnight:午夜
teatime:下午四點
tomorrow:明天
③、now+#:#表示單位(unit)
unit可以是:minutes、hours、days、 weeks
[options]:
-l:查看作業隊列,相當於atq,作業運行後會消失
-f /PATH/FROM/SCRIPT.SH :從指定的文件中讀取作業,不用交互式輸入作業,文件中可以是命令的堆積。
[root@localhost ~]# at -f /root/idsum.sh 06:17
job 5 at Sat Dec 2 06:17:00 2017
[root@localhost ~]#
-d # :刪除任務,#表示作業號 相當於atrm
-c :查看執行任務的作業內容,注意前部分輸出的是環境變量
-q :指明隊列
注意:作業執行的結果是以郵件發送給提交作業的用戶,因此,想要查看執行結果,需要查看郵件。
示例:
[root@localhost ~]# at 05:55 //在5點55分執行一次任務
at> echo pwd //任務內容可以是命令,也可以是腳本
at> ls
at> <EOT> //ctrl+d提交任務並退出
job 1 at Sat Dec 2 05:55:00 2017
[root@localhost ~]# at -l //查看任務,時間未過期可以看到任務,若過了指定時間則看不到任務
1Sat Dec 2 05:55:00 2017 a root
[root@localhost ~]# at -l //時間過期,看不到任務
[root@localhost ~]# date
Sat Dec 2 05:57:36 CST 2017
[root@localhost ~]#
[root@localhost ~]# mail //查看任務執行結果
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 4 messages 1 new 2 unread
1 root Sat Dec 2 05:33 20/636 "a new mail"
2 root Sat Dec 2 05:38 21/636 "a new mail"
U 3 root Sat Dec 2 05:41 30/1157 "another message"
>N 4 root Sat Dec 2 05:55 37/715 "Output from your job
4.6、batch命令:
類似at命令,batch會讓系統自行選擇在系統資源比較空閒的時間去執行執行的任務
4.7、cron命令或crontab命令:週期性任務執行計劃
他需要服務程序來監視是否有週期性任務計劃需要執行。
cron的主程序包:cronie;提供crond守護進程及相關輔助工具
要想週期性執行任務,需要確保crond守護進程處於運行狀態,查看crond是否處於運行狀態:
centos7: [root@localhost ~]# systemctl status crond.service
centos6: [root@localhost ~]# service crond status
cron作業提交方式:
向crond提交作業的方式不同於at命令,他需要使用專用的配置文件,此文件有固定的格式,不建議使用文本編輯器對其直接進行編輯,建議使用crontab命令。
cron任務分類: ①系統cron任務:主要用於維護系統自身的維護;通過手動編輯:/etc/crontab文件來實現 ②用戶cron任務:用戶自己定義的;通過命令crontab來實現,用戶cron配置文件:/var/spool/cron/USERNAME下,username爲相應的用戶 |
系統cron任務格式: [root@localhost ~]# cat /etc/crontab SHELL=/bin/bash //定義shell PATH=/sbin:/bin:/usr/sbin:/usr/bin //定義環境變量,此處的環境變量不同於用戶的登陸後的環境變量,因此建議命令使用絕對路徑,或者自定義PATH變量 MAILTO=root //定義接收郵件的人 # 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 //user—name表示運行時的身份,command to be executed表示要執行的任務 [root@localhost ~]# 注意:系統corn任務中每一行定義一個週期性任務,共七個字段,用空格分開;第一個*表示分鐘,第二個*表示小時,第三個*表示月中的哪一天,第四個*表示一年中的哪個月,第五個*表示一週的星期幾,第六user—name表示運行時的身份,第七command to be executed表示要執行的任務。如果時間表示爲*則表示單位裏的任一單位,如分鐘用*表示,則表示每一分鐘。執行結果通過郵件發送給mailto指定的用戶。 |
用戶cron任務格式: 用戶cron任務和系統cron任務的區別是:自定義任務時,用戶cron任務不需要指定用戶,系統cron需要指定。如下: 系統cron任務:共七個字段;* * * * * user-name command to be executed 用戶cron任務:共六個字段;* * * * * command to be executed 用戶cron配置文件中,每一行定義一個cron任務,共六個字段;此處的環境變量不同於用戶登錄後環境,因此建議命令使用絕對路徑,或者自定義PATH環境變量;郵件發送給當前用戶。 |
cron任務中的時間表示方式: ①、特定值: 給定的時間點有效取值範圍內的值 注意:周幾和哪一天一般不同時使用 ②、*:通配符 給定的時間點上有效取值範圍內的所有值,表示“每什麼”意思 如: 3 * * * * :每小時3分,每小時任務 3 4 * * 5:每週五4點三分,每週任務 5 6 7 * *:每月7號6點5分,每月任務 7 8 9 10 *:每年10月9號8點7分,每年任務 ③、指定時間點上離散取值: 在時間點上使用“逗號”分號的多個值 #,#,# 如: 9 8 * * 3,7:每週3和7的8點9分 0 8,20 * * 3,7: 每週3和7的8點和20點執行的任務 ④、連續取值: 在時間點上,使用“-”連接的開頭和結束 #-# 如: 0 9-18 * * 1-5:每週1到5的9點到18點 ⑤、在指定時間點上,定義步長,用“/”表示 */# :#表示步長 如: */2 * * * *:表示每2分鐘 */5 * * * *:表示每5分鐘 注意:指定的時間點不能步長整除時,其意義不復存在;最小時間單位爲“分鐘”想完成“秒級”任務,得需要額外藉助於其他機制,定義成每分鐘任務,然後再利用腳本實現每分鐘之內,執行循環多次。 |
cron命令: 使用格式: crontab [-u USER] [-l|-r|-e] [-i] [-s] -e:編輯任務,直接打開命令正文,輸入並保存即可 -l:列出所有任務(自己的) -r:移除所有任務;即刪除/var/spool/cron/USERNAME文件,如要刪除某一行任務,則需要使用“-e”打開,去刪除或註釋掉。 -i:交互式操作(在使用“-r”)移除任務時需要確認 -u USER:root用戶可指定其他用戶的cron任務,並管理它們。 注意1:運行結果以郵件方式通知給當前用戶;如果拒絕接受郵件,可進行如下操作:①、command >/dev/null或者②、command &>/dev/null。同時,定義“command”時,如果需要用到“%”,需要對其進行轉義,但放置於“單引號”中的“%”不用轉義也可以。 注意2、某任務在指定時間因關機未能執行,下次開機不會自動執行,如果需要實現此功能,在下次開機時無論時間到沒到,都執行一次,則需要使用anacron命令時間 |
示例1:
每12小時備份一次/etc/目錄至指定/backups目錄中,保存文件名格式爲“etc-YYYY-mm-dd-hh.tar.xz"
[root@localhost ~]# mkdir /backups/
[root@localhost ~]# crontab -e
0 */12 * * * /usr/bin/tar -cvJf /backups/etc-$(date +%Y-%m-%d-%H).tar.xz /etc //如果不成功,則應對“%”進行轉義處理,即"\%"
[root@localhost ~]#
示例2:
每週247備份/var/log/secure文件至/logs目錄中,文件名格式爲”secure-yyyymmdd
[root@localhost ~]# crontab -e
0 0 0 0 2,4,7 /usr/bin/cp /var/log/secure /logs/secure-`date +%Y%m%d`
示例3:每兩小時取出當前系統/proc/meminfo文件中以s或m開頭的行信息追加至/tmp/meminfo.txt文件中。
[root@localhost ~]# crontab -e
0 */2 * * * /usr/bin/cat /proc/meminfo | /usr/bin/grep "^[SM]" >> /tmp/meminfo.txt