第 11 堂課:基礎設定、備份、檔案壓縮打包與工作排程
帳號與權限的部份瞭解告一段落之後,讀者應該可以針對系統進行一些基礎的設定了,包括網路、日期時間等等。 同時,最好也能理解一下系統的備份工作,同時為了減少備份的容量,理解一下檔案的壓縮與打包也是重要的工作。 最終,當事情通通要交給系統獨自運作時,讀者對於工作排程的理解也不能少。
- 11.1:Linux 系統基本設定
- 11.1.1:網路設定
- 11.1.2:日期與時間設定
- 11.1.3:語系設定
- 11.1.4:簡易防火牆管理
- 11.2:檔案的壓縮與打包
- 11.2.1:檔案的壓縮指令
- 11.2.2:檔案的打包指令, tar
- 11.2.3:備份功能
- 11.3 Linux 工作排程
- 11.3.1:單次工作排程: at
- 11.3.2:循環工作排程: crontab
- 11.4:課後練習操作
11.1:Linux 系統基本設定
在更進一步管理系統前,先來整理一下系統的網路建置、日期與時間的修改、語系等相關的設定,讓系統更符合你的操作行為與環境。
11.1.1:網路設定
網路設定是系統管理員主要負責的項目。一般來說,以伺服器的角度觀之,通常伺服器的網路都是固定的,大多使用手動的方式來設定好網路。 如果是以桌機的角度來看,則大多使用自動取得網路參數,亦即所謂的『 dhcp 』協定來自動處理。如果是台灣地區的一般民眾, 可能會有兩個主要的網路參數取得方式,一個是與電話線路結合,例如中華電信的 ADSL 或者光世代的撥接方式,一種則是透過與第四台的纜線結合。
CentOS 7 以後,系統希望讀者使用 Network Manager 這個服務來管理網路,同時提供一個名為 nmcli 的簡易指令,搭配 bash-completion 軟體,可以快速的使用 [tab] 按鍵配合,完成所有的任務。
- 觀察網路連線界面與網路卡
系統上的所有網路界面都可以透過 ifconfig 這個指令來觀察,不過這個指令在某些系統上並不一定會提供。 因此,近來我們建議使用 ip link show 這個指令來查閱!方法如下:
[root@localhost ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP
mode DEFAULT qlen 1000
link/ether 52:54:00:21:bc:9e brd ff:ff:ff:ff:ff:ff
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
mode DEFAULT
link/ether 52:54:00:2f:74:a6 brd ff:ff:ff:ff:ff:ff
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state
DOWN mode DEFAULT qlen 500
link/ether 52:54:00:2f:74:a6 brd ff:ff:ff:ff:ff:ff
|
上述的 lo, eth0, virbr0, virbr0-nic 等等就是網路介面卡!系統實際上就是透過這些介面卡來連線到網路的。讀者應該要知道, 一張介面卡可以同時提供多個網路位址 (IP),而利用這些介面卡來達成連線的方式就稱為網路連線代號。查詢網路連線代號的方式如下:
[root@localhost ~]# nmcli connection show
NAME UUID TYPE DEVICE
virbr0-nic 94c93abe-6786-444c-9cdd-1f20961473ca generic virbr0-nic
virbr0 ac82c547-0c6c-464f-8e38-d4a5efa90788 bridge virbr0
eth0 ff0b88ed-7cc6-4803-be7d-e77c74fea95b 802-3-ethernet eth0
|
讀者們應該要注意的是:
- NAME:即為網路連線代號,接下來我們要處理的任務均是針對此連線代號而來。
- UUID:Linux 的裝置識別碼,在系統當中幾乎是獨一無二的存在。
- TYPE:網路連線的類型,包括乙太網路、無線網路、橋接等等功能
- DEVICE:即是網路介面卡。
由於讀者們所操作的系統是本教材提供的複製品,對於您的環境來說,可能有些許的差異,因此,建議你應該要刪除 eth0 這個連線代號, 然後重建一次 eth0 比較妥當。刪除連線與建立連線的方式如下:
[root@localhost ~]# nmcli connection delete eth0 [root@localhost ~]# nmcli connection add con-name eth0 ifname eth0 type ethernet Connection 'eth0' (ab47810d-2aca-4956-9263-de0952b4eebc) successfully added. [root@localhost ~]# nmcli connection show NAME UUID TYPE DEVICE virbr0-nic 94c93abe-6786-444c-9cdd-1f20961473ca generic virbr0-nic virbr0 ac82c547-0c6c-464f-8e38-d4a5efa90788 bridge virbr0 eth0 ab47810d-2aca-4956-9263-de0952b4eebc 802-3-ethernet eth0 |
讀者會發現到 eth0 連線代號的 UUID 改變了,同時 DEVICE 會搭配到你的網路界面卡,此時系統就幫你建置好 eth0 這個連線代號。
例題:使用 man nmcli 之後,查詢 connection 的關鍵字,找到 add 的項目,寫下底下項目的意義:
|
- 觀察網路連線代號的詳細設定
詳細的網路連線代號內容的觀察,可以這樣做:
[root@localhost ~]# nmcli connection show eth0
connection.id: eth0
connection.uuid: ab47810d-2aca-4956-9263-de0952b4eebc
connection.interface-name: eth0
connection.type: 802-3-ethernet
connection.autoconnect: yes
.......
ipv4.method: auto
ipv4.dns:
ipv4.dns-search:
ipv4.addresses:
ipv4.gateway: --
ipv4.routes:
.......
ipv6.method: auto
ipv6.dns:
ipv6.dns-search:
ipv6.addresses:
ipv6.gateway: --
.......
IP4.ADDRESS[1]: 172.16.0.83/16
IP4.GATEWAY: 172.16.200.254
IP4.DNS[1]: 172.16.200.254
IP4.DOMAIN[1]: gocloud.vm
DHCP4.OPTION[1]: requested_domain_search = 1
DHCP4.OPTION[2]: requested_nis_domain = 1
DHCP4.OPTION[3]: requested_time_offset = 1
.......
IP6.ADDRESS[1]: fe80::5054:ff:fe21:bc9e/64
IP6.GATEWAY:
|
一般來說,輸出的資訊有小寫字元與大寫字元,小寫字元大多為『設定值』,大寫字元大多為『現在運作中的狀態資料』。 上表僅列出較為重要的資訊,包括有:
- connection.autoconnect [yes|no] :是否於開機時啟動這個連線,預設通常是 yes
- ipv4.method [auto|manual] :自動還是手動設定網路參數
- ipv4.dns [dns_server_ip] :填寫 DNS 伺服器的 IP 位址
- ipv4.addresses [IP/Netmask] :IP 與 netmask 的集合,中間用斜線 / 來隔開
- ipv4.gateway [gw_ip] : gateway 的 IP 位址!
至於大寫字元裡頭,比較常見的重要項目:
- IP4.ADDRESS[1]: 目前運作中的 IPv4 的 IP 位址參數
- IP4.GATEWAY: 目前運作中的 IPv4 的通訊閘
- IP4.DNS[1]: 目前運作中的 DNS 伺服器 IP 位址
- DHCP4.OPTION[XX]: 由 DHCP 伺服器所提供的相關參數
基本上,如果看到 DHCP4.OPTION 之類的字樣,代表這個網路連線代號主要是透過『自動取得 IP 』的方式來處理的。
- 自動取得 IP 參數的設定
所謂的自動取得 IP 參數,代表使用 DHCP 伺服器來管理網路參數的給予,因此讀者的環境中應該具有 IP 分享器或其他提供 DHCP 功能的設備。 由於所有的設定均來自於 DHCP 服務,因此讀者僅須提供 ipv4.method 為自動 (auto) 即可。
[root@localhost ~]# nmcli connection modify eth0 ipv4.method auto [root@localhost ~]# nmcli connection up eth0 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4) |
上表『 nmcli connection up eth0 』代表使用設定值來重新啟動這個網路連線代號之意。
- 手動設定 IP 參數
網路環境的設定主要由 ISP 來提供,假設你的系統所在的 ISP 告知你的網路設定如下:
- IP/Netmask: 172.16.50.1/16
- Gateway: 172.16.200.254
- DNS: 172.16.200.254
讀者可以透過底下的方式來處理手動設定 IP 的方式:
[root@localhost ~]# nmcli connection modify eth0 \ > connection.autoconnect yes \ > ipv4.method manual \ > ipv4.addresses 172.16.50.1/16 \ > ipv4.gateway 172.16.200.254 \ > ipv4.dns 172.16.200.254 [root@localhost ~]# nmcli connection show eth0 ....... ipv4.method: manual ipv4.dns: 172.16.200.254 ipv4.dns-search: ipv4.addresses: 172.16.50.1/16 ipv4.gateway: 172.16.200.254 ....... [root@localhost ~]# nmcli connection up eth0 |
確認啟動網路之後,觀察一下最下方的大寫字樣的資料,是否正確顯示出跟你設定值相同的資訊?
[root@localhost ~]# nmcli connection show eth0
.......
IP4.ADDRESS[1]: 172.16.50.1/16
IP4.GATEWAY: 172.16.200.254
IP4.DNS[1]: 172.16.200.254
IP6.ADDRESS[1]: fe80::5054:ff:fe21:bc9e/64
IP6.GATEWAY:
|
- 主機名稱設定
一般連線到 Internet 的伺服器應該都有一個主機名稱,主機名稱的觀察方式可以直接使用 hostname 來觀察, 如果是設定,則需要編寫 /etc/hostname 這個檔案。但如果手動編輯設定檔,通常都需要透過重新開機 (reboot) 來讓主機名稱生效。 為了解決這個 reboot 的問題, centos 提供了名為 hostnamectl 的指令來管理,假設主機名稱為 www.centos 時,可以這樣設定:
[root@localhost ~]# hostnamectl set-hostname www.centos [root@localhost ~]# hostnamectl Static hostname: www.centos Icon name: computer-vm Chassis: vm Machine ID: 741c73b552ed495d92a024bc7a9768cc Boot ID: 2b1132689ed24361b2dec52309174403 Virtualization: kvm Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 3.10.0-327.el7.x86_64 Architecture: x86-64 |
這樣立刻設定好主機名稱,且可以不用重新開機。
例題:
|
11.1.2:日期與時間設定
地球上每個地區都有專屬於自己的時區,因此當你帶著 notebook 到不同時區的地點時,可能得要修訂自己的電腦時間才行。 修訂的方式可以使用 CentOS7 提供的 timedatectl 指令。
[root@localhost ~]# timedatectl
Local time: Tue 2016-05-10 19:25:38 CST
Universal time: Tue 2016-05-10 11:25:38 UTC
RTC time: Tue 2016-05-10 11:25:52
Time zone: Asia/Taipei (CST, +0800)
NTP enabled: no
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
|
例題: 查詢自己系統目前的正確時間,然後透過 timedatectl 指令來設定好目前的時間。
|
除了自行設定之外,讀者亦可透過網路來進行時間的校正。以崑山科大來說,崑山科大提供了 ntp.ksu.edu.tw 這個 NTP 伺服器, 因此網路校時可以簡單的進行:
[root@localhost ~]# ntpdate ntp.ksu.edu.tw 10 May 11:28:30 ntpdate[18839]: step time server 120.114.100.1 offset -28784.726606 sec [root@localhost ~]# hwclock -w |
如上表所示,某些特殊的環境下,台灣的時間會快了 8 小時,這是因為虛擬機使用了格林威治時間所致。校正後系統即可正確設定。
- 透過持續網路校時功能 (用戶端功能)
讀者應該會發現到現今的作業系統大多可以保持正確的時間,再也無須進行手動校時。CentOS 7 提供兩個機制來協助網路校時, 一個是透過 chronyd 服務,一個則是透過 ntpd。CentOS 7 預設使用 chronyd 這個服務。若以崑山科大為例,崑山科大提供 ntp.ksu.edu.tw 這個時間伺服器,若以此時間伺服器為主要的更新時間來源,可以這樣做:
[root@localhost ~]# vim /etc/chrony.conf # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). #server 0.centos.pool.ntp.org iburst <==將預設的伺服器註解 #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst server ntp.ksu.edu.tw iburst <==加入所需要的伺服器 ..... [root@localhost ~]# systemctl enable chronyd [root@localhost ~]# systemctl restart chronyd [root@localhost ~]# systemctl status chronyd ● chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled; vendor preset: enabled) Active: active (running) since 一 2017-04-03 02:26:43 EDT; 4s ago Process: 2086 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS) Process: 2082 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS) Main PID: 2084 (chronyd) CGroup: /system.slice/chronyd.service └─2084 /usr/sbin/chronyd 4月 03 02:26:43 localhost systemd[1]: Starting NTP client/server... 4月 03 02:26:43 localhost chronyd[2084]: chronyd version 2.1.1 starting (+CMDMON +NTP +REFCLOCK +RTC... 4月 03 02:26:43 localhost chronyd[2084]: Generated key 1 4月 03 02:26:43 localhost systemd[1]: Started NTP client/server. 4月 03 02:26:47 localhost chronyd[2084]: Selected source 120.114.100.1 4月 03 02:26:47 localhost chronyd[2084]: System clock wrong by 2.322333 seconds, adjustment started Hint: Some lines were ellipsized, use -l to show in full. |
若有需要了解到目前的 NTP 時間狀況,可以使用追蹤 (tracking) 來處理看看:
[root@localhost ~]# chronyc tracking
Reference ID : 120.114.100.1 (ntp.ksu.edu.tw)
Stratum : 4
Ref time (UTC) : Mon Apr 3 06:38:52 2017
System time : 0.000042931 seconds slow of NTP time
Last offset : -0.000060345 seconds
RMS offset : 0.000033498 seconds
Frequency : 19.614 ppm slow
Residual freq : -0.102 ppm
Skew : 0.959 ppm
Root delay : 0.008587 seconds
Root dispersion : 0.054062 seconds
Update interval : 64.2 seconds
Leap status : Normal
|
如此一來,如果有網路,則此 Linux 系統就能夠持續的更新時間了。
11.1.3:語系設定
登入系統時,取得 bash 之後,會有預設的語系資料,預設讀者的環境應該是 zh_TW.utf8 這個語系。但是圖形界面登入處預設為英文語系, 那個環境即為『系統語系』的相關設定。讀者可以使用 locale 來查閱目前的語系,而使用 localectl 來查閱系統的預設語系。
[root@localhost ~]# localectl
System Locale: LANG=en_US.UTF-8
VC Keymap: us
X11 Layout: us,cn
X11 Variant: ,
X11 Options: grp:ctrl_shift_toggle
|
若想要讓圖形界面的畫面以台灣中文為主,可以使用如下的方式來處置:
[root@localhost ~]# localectl set-locale LANG=zh_TW.utf8 [root@localhost ~]# systemctl isolate multi-user.target [root@localhost ~]# systemctl isolate graphical.target |
11.1.4:簡易防火牆管理
若要作為伺服器,那麼 Linux 的防火牆管理就顯的重要了。CentOS 7 提供一個名為 firewalld 的防火牆服務, 這個防火牆主要透過 firewall-cmd 指令管理,而防火牆的執行分為兩種方式:
- 目前進行中 (acitve) 的環境
- 永久記錄 (permanent) 的設定資料
此外,為了方便管理,防火牆將許多不同的應用定義了多種的領域 (zone),不過,在這裡我們只需要知道公開的領域 (public) 即可。
[root@localhost ~]# firewall-cmd --get-default-zone public [root@localhost ~]# firewall-cmd --list-all public (default, active) interfaces: eth0 sources: services: dhcpv6-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules: |
上面表格顯示預設的防火牆使用 public 這個領域的規則設定,而 public 領域內的資料中,主要應用了:
- 『interfaces: eth0』:主要管理的界面為 eth0 這個介面卡
- 『services: dhcpv6-client ssh』可以通過防火牆進出系統的服務有 dhcp 用戶端以及 ssh 這兩個服務
- 『masquerade: no』沒有啟動 IP 偽裝功能
未來如果讀者的伺服器要加上 httpd 這個 WWW 網頁伺服器服務的話,就以如下的方式來加入:
[root@localhost ~]# firewall-cmd --add-service=http success [root@localhost ~]# firewall-cmd --list-all public (default, active) interfaces: eth0 sources: services: dhcpv6-client http ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules: |
但是上述指令僅能在這次開機階段執行,重新開機後,或者是重新載入 firewalld 之後,這條規則就被註銷了。因此, 確認規則是正常的之後,應該使用如下的方式增加到設定檔當中才對:
[root@localhost ~]# firewall-cmd --add-service=http --permanent success [root@localhost ~]# firewall-cmd --list-all --permanent |
請自行確認輸出的結果含有 http 才行。
例題:請依據底下的方式處理好你的防火牆
|
11.2:檔案的壓縮與打包
許多時刻讀者應該會進行檔案系統的壓縮與打包,讓系統的備份資料或者是減少資料的使用空間。同時,程式設計師在網路提供資料時, 為了降低頻寬使用率,更好的壓縮比會是資料壓縮的考量選項之一。
11.2.1:檔案的壓縮指令
在 Linux 環境下,常見的壓縮指令有:gzip, bzip2, xz 三種,這三個指令主要的目的為壓縮單一檔案而已。但預設的情況下, 被壓縮的檔案會遺失而僅存在被壓縮完成之後的壓縮檔,除非使用 -c 的選項搭配資料流重導向,方可原始檔案與壓縮檔案同時存在。
例題:測試不同壓縮指令的壓縮比
|
11.2.2:檔案的打包指令, tar
因為 gzip, bzip2, xz 主要是針對單一檔案來進行壓縮,對於類似 windows 提供的 winRAR, zip, 7-zip 等可以將多數檔案打包成為一個檔案的用法來說, 這些壓縮指令是無法達到的。不過,Linux 環境底下有提供名為 tar 的打包指令,這個指令也可以使用 gzip, bzip2, xz 的函數來打包並壓縮, 讀者可以將 tar 想成 7-zip 就是了。
tar 的基本語法有點像這樣:
[root@localhost ~]# tar [-z|j|J] -c|-t|-x [-v] [-f tar 支援的檔名] [filename...]
|
使用 tar 後續接的選項,你可以這樣思考:
- [-z|j|J] :是否需要壓縮支援,三個選項分別是 gzip, bzip2, xz 的支援
- -c|-t|-x :實際進行的任務,三個選項分別是打包、查閱資料、解打包
- -v :是否要查閱指令執行過程
- [-f tar 支援的檔名] :使用 -f 來處理 tar 的檔案
我們很常進行將 /etc/ 完整備份的任務,假設我們要將 /etc 使用最大壓縮比的 xz 壓縮備份,可以這樣做:
[root@localhost ~]# cd /dev/shm/zip [root@localhost zip]# tar -Jcv -f etc.tar.xz /etc [root@localhost zip]# ll etc* -rw-r--r--. 1 root root 5635764 5月 11 11:57 etc.tar.xz |
一般來說,tar 的副檔名是可以隨意取的,亦即上方的 etc.tar.xz 。不過最好搭配 tar 以及壓縮指令的副檔名較佳,因此常見的副檔名為:
- *.tar:單純的 tar 並沒有壓縮
- *.tar.gz:支援 gzip 壓縮的 tar 檔案
- *.tar.bz2:支援 bzip2 壓縮的 tar 檔案
- *.tar.xz:支援 xz 壓縮的 tar 檔案
若需要查看 etc.tar.xz 的檔案內容,可以使用如下的方式來查看:
[root@localhost zip]# tar -Jtv -f etc.tar.xz
.......
-rw-r--r-- root/root 11 2016-05-10 19:06 etc/hostname
-rw-r--r-- root/root 163 2016-02-18 02:54 etc/.updated
-rw-r--r-- root/root 12288 2016-02-18 18:42 etc/aliases.db
|
只要將 -c 改成 -t 即可查閱壓縮檔案的內容,同時讀者也很清楚的看到,檔名的項目『已經移除了根目錄』! 因此,解打包 tar 檔案時,預設會在工作目錄解開檔名。若需要在不同的目錄下解開,就需要搭配 -C 的選項才行 (man tar)。
例題:
|
11.2.3:備份功能
tar 經常被用來作為系統檔案備份的工具,如果不考慮容量,一般建議使用 gzip 支援速度較快,如果不考慮時間, 則建議支援 xz 壓縮的方式處理,可以有較小的空間使用率。
以 Linux 作業系統的正規目錄來說,建議備份的目錄應該有底下的這些目錄:
- /etc/ 整個目錄
- /home/ 整個目錄
- /var/spool/mail/
- /var/spoll/{at|cron}/
- /root/
- 如果你自行安裝過其他的軟體,那麼 /usr/local/ 或 /opt 也最好備份一下!
若是針對網路服務方面的資料,那經常備份的有:
- 軟體本身的設定檔案,例如:/etc/ 整個目錄,/usr/local/ 整個目錄
- 軟體服務提供的資料,以 WWW 及 Mariadb 為例:
WWW 資料:/var/www 整個目錄或 /srv/www 整個目錄,及系統的使用者家目錄
Mariadb : /var/lib/mysql 整個目錄 - 其他在 Linux 主機上面提供的服務之資料庫檔案!
例題:假設我需要備份的目錄有底下這些:
|
11.3 Linux 工作排程
Linux 系統的工作非常的多,管理員總是希望系統可以自行管理自己,這樣維護系統會比較輕鬆。而自動排程的方式有兩種,分別是:
- 單一執行一次,執行完畢後該工作則被捨棄;
- 一直循環不停的工作
在預設的情況下,Linux 系統提供的上述兩種工作排程,最小的時間解析度為分鐘,最大的時間解析度為一年內。
11.3.1:單次工作排程: at
單次排程工作必須要啟動 atd 這個『服務』才能夠運作,因此讀者應該先查看系統的 atd 是否有啟動。
[root@localhost ~]# systemctl status atd ● atd.service - Job spooling tools Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled) Active: active (running) since 二 2016-05-03 00:01:14 CST; 1 weeks 2 days ago Main PID: 1271 (atd) CGroup: /system.slice/atd.service └─1271 /usr/sbin/atd -f 5月 03 00:01:14 localhost systemd[1]: Started Job spooling tools. 5月 03 00:01:14 localhost systemd[1]: Starting Job spooling tools... |
確定有在運作即可。
例題:
若上述的判斷結果顯示為沒有啟動,該如何處理?
|
單次循環工作可使用『 at TIME 』來處理,那個 TIME 為時間格式。最常見的時間格式為:
[student@localhost ~]$ at HH:MM YYYY-MM-DD [student@localhost ~]$ at now [student@localhost ~]$ at now + 10 minutes |
若 student 希望能在今日 11 點,將 ip addr show 的結果輸出到自己家目錄的 myipshow.txt 檔案中,那應該要這樣處理:
[student@localhost ~]$ at 11:00 at> ip addr show &> /home/student/myipshow.txt at> <EOT> <==這裡按下 [ctrl]+d 結束輸入 job 1 at Thu May 12 11:00:00 2016 |
上表的案例中,我們僅輸入一行指令 (ip addr... 那行),底下那行不要輸入任何字元,直接按下 [ctrl]+d 的組合按鈕即可出現 <EOT> 字樣, 然後就結束 at 的輸入。接下來我們可以查閱 at 的工作佇列狀態:
[student@localhost ~]$ atq
1 Thu May 12 11:00:00 2016 a student
|
上表即表示第一項工作為 student 在 5 月 12 日 11:00 要執行的。但是實際的內容就得要以『 at -c 1 』來查看,那個 1 指的是第一個工作, 亦即是 atq 輸出的最前面字元的數字。
例題:假設你的系統因為所在環境的電力維護問題,因此需要在今年底的 12 月 31 日 17:30 關機。而你希望在關機前 30 分鐘通知線上用戶趕快登出 (可用 wall 處理),
該如何處理這項任務?
|
預設所有人都可以使用 at 這個指令,但如果管理員想要關閉某些用戶的 at 使用權,可以將該用戶寫入 /etc/at.deny 即可。 若要管理的較為嚴格,則將可以執行 at 的用戶寫入 /etc/at.allow,則沒有寫入 at.allow 的用戶將無法使用 at。亦即:
- 僅 at.deny 存在時:寫入該檔案內的用戶無法使用 at,其餘用戶可以使用
- 僅 at.allow 存在時:寫入該檔案內的用戶可以使用 at,其餘用戶不可使用。
- at.deny 與 at.allow 同時存在:以 at.allow 為主。
11.3.2:循環工作排程: crontab
循環型的工作排程需要啟動 crond 這個服務才行,請先確認這個服務的狀態。
[root@localhost ~]# systemctl status crond ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since 二 2016-05-03 00:01:14 CST; 1 weeks 2 days ago Main PID: 1273 (crond) CGroup: /system.slice/crond.service └─1273 /usr/sbin/crond -n 5月 03 00:01:14 localhost systemd[1]: Started Command Scheduler. 5月 03 00:01:14 localhost systemd[1]: Starting Command Scheduler... 5月 03 00:01:14 localhost crond[1273]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 67% if used.) 5月 03 00:01:15 localhost crond[1273]: (CRON) INFO (running with inotify support) |
基本上,cron 的設定可以分為兩種,一種與 at 很類似,直接讓使用者操作指令來設定, 一種則是需要修改到系統設定檔,第二種方式只能讓管理員來設定。
- 所有用戶均可操作的 crontab 指令
所有用戶 (包含 root) 預設都能使用 crontab 這個指令,當執行 corntab -e 之後,系統就會進入到 cron 的設定環境, 該環境其實就是使用 vi 函式。設定方式主要有六個欄位,設定口訣為『分 時 日 月 周 指令』,每個欄位中間可用空格或 [tab] 按鈕隔開。 至於前面五個欄位的時間參數限制如下:
代表意義 | 分鐘 | 小時 | 日期 | 月份 | 週 | 指令 |
數字範圍 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 | 指令最好使用絕對路徑 |
週的數字為 0 或 7 時,都代表『星期天』的意思!另外,還有一些輔助的字符,大概有底下這些:
特殊字符 | 代表意義 |
*(星號) | 代表任何時刻都接受的意思!舉例來說,範例一內那個日、月、週都是 * , 就代表著『不論何月、何日的禮拜幾的 12:00 都執行後續指令』的意思! |
,(逗號) | 代表分隔時段的意思。舉例來說,如果要下達的工作是 3:00 與 6:00 時,就會是:
0 3,6 * * * command時間參數還是有五欄,不過第二欄是 3,6 ,代表 3 與 6 都適用! |
-(減號) | 代表一段時間範圍內,舉例來說, 8 點到 12 點之間的每小時的 20 分都進行一項工作:
20 8-12 * * * command仔細看到第二欄變成 8-12 喔!代表 8,9,10,11,12 都適用的意思! |
/n(斜線) | 那個 n 代表數字,亦即是『每隔 n 單位間隔』的意思,例如每五分鐘進行一次,則:*/5 * * * * command用 * 與 /5 來搭配,也可以寫成 0-59/5 ,相同意思! |
例題:
|
- 管理員可以操作的系統設定檔
除了 crontab 之外,管理員也可以在底下的位置放置系統管理的設定,包括:
- /etc/crontab
- /etc/cron.d/*
系統管理的部份,建議寫入到 /etc/crontab 檔案中,如果是管理員想要開發個別的軟體,則建議放置於 /etc/cron.d/* 當中。 舉例而言,若前一小節談到的 /backups/backup_system.sh 想要每週日定期執行一次時,可以這樣設定:
[root@localhost ~]# vim /etc/crontab
0 11 * * 0 root sh /backups/backup_system.sh &> /dev/null
|
與一般用戶的 crontab -e 指令不同,管理員還需要指定『執行該指令的用戶身份』為何較佳。讀者也可以將上述的設定寫入成為一個檔名, 然後將該檔案放入 /etc/cron.d 目錄中即可。此外,系統也已經指定了一些特定時間會執行的目錄,使用者也能夠自己撰寫腳本後, 將該腳本寫入下列的目錄中即可。
- /etc/cron.hourly/:內容為每小時進行一次的工作
- /etc/cron.daily/:內容為每天進行一次的工作
- /etc/cron.weekly/:內容為每周進行一次的工作
- /etc/cron.monthly/:內容為每月進行一次的工作
例題:除了每週進行一次系統備份外,該腳本我希望每個月還能夠自動執行一次,該如何處理?
|
11.4:課後練習操作
前置動作:請使用 unit11 的硬碟進入作業環境,並請先以 root 身分執行 vbird_book_setup_ip 指令設定好你的學號與 IP 之後,再開始底下的作業練習。
請使用 root 的身份進行如下實做的任務。直接在系統上面操作,操作成功即可,上傳結果的程式會主動找到你的實做結果。
- 請回答下列問題,並將答案寫在 /root/ans11.txt 檔案內:
- 一般網路檢查是否有通行,會有幾個步驟?每個步驟所需要檢查的項目是什麼?
- 一般 Linux 作業系統在 PC 上面會有兩個時間紀錄,分別是那兩個?
- 在 Linux 底下,常見的壓縮指令,依據壓縮比從最好到最差,寫出三個常見的指令。
- 例行工作排程的 crontab 使用中,對於一般帳號來說,設定時的六個欄位的口訣為何?
- 系統的基礎設定-網路的設定部份:
- 由於我們的系統是經過 clone 出來的,因此所有的設備恐怕都怪怪的。所以,請先將系統中的 eth0 這個網路連線刪除。
- 請依據底下的說明,重新建立 eth0 這個網路連線:
- 使用的介面卡為 eth0 這個介面卡
- 需要開機就自動啟動這個連線
- 網路參數的設定方式為手動設定,不要使用自動取得喔
- IP address 為: 192.168.251.XXX/24 (XXX 為上課時,老師給予的號碼)
- Gateway 為: 192.168.251.250
- DNS server IP為:請依據老師課後說明來設定 (若無規定,請以 168.95.1.1 及 8.8.8.8 這兩個為準)
- 主機名稱:請設定為 stdXXX.book.vbird (其中 XXX 為上課時,老師給予的號碼)
- 系統的基礎設定-時間、語系等其他設定值:
- 你系統的時間好像怪怪的,時區與時間好像都錯亂了!請改回台北的標準時區與時間。
- 不知為何,你的語系好像被修改成簡體中文了。請將它改回繁體中文語系喔!
- 未來這部主機會作為 WWW/FTP/SSH 伺服器,因此防火牆規則中,請放行 http, ftp, ssh 這幾個服務。請注意,這個規則也需要寫入永久設定檔中。
- 檔案的壓縮、解壓縮等任務
- 你的系統中有個檔名 /root/mybackup 的檔案,這個檔案原本是備份系統的資料,但副檔名不小心寫錯了! 請將這個檔案修訂成為比較正確的副檔名 (例如 /root/mybackup.txt 之類的模樣),並且將該檔案在 /srv/testing/ 目錄中解開這個檔案的內容。
- 我需要備份的目錄有:/etc, /home, /var/spool/mail/, /var/spool/cron/, /var/spool/at/, /var/lib/,
請撰寫一隻名為 /root/backup_system.sh 的腳本,來進行備份的工作。腳本內容應該是:
- 第一行一定要宣告 shell 喔!
- 自動判斷 /backups 目錄是否存在,若不存在則 mkdir 建立她,若存在則不進行任何動作
- 設計一個名為 source 的變數,變數內容以空格隔開所需要備份的目錄
- 設計一個名為 target 的變數,該變數為 tar 所建立的檔名,檔名命名規則 /backups/mysystem_20xx_xx_xx.tar.gz , 其中 20xx_xx_xx 為西元年、月、日的數字,該數字依據你備份當天的日期由 date 自行取得。
- 開始利用 tar 來備份
- 請使用網路校時 (chronyd) 的方式,使用貴校 (以崑山來說,就是 ntp.ksu.edu.tw) 作為伺服器,主動更新你的系統時間。(若貴校並無 NTP 伺服器,則以 time.stdtime.gov.tw 作為來源)
- 例行工作排程的設定:
- 你的系統將在下個月的 20 號 08:00 進行關機的歲修工作,請以『單次』工作排程來設計關機的動作 (poweroff)
- 讓系統每天 3:00am 時,全系統更新一次!相關設定請寫入 /etc/crontab 內 (可以先查詢下一堂課的指令)
- 請使用 gooduser 這個帳號身份,在每天的 15:30 時,下達『 /bin/echo 'It is tea time' 』的例行任務。 若有需要使用 gooduser 登入時,該帳號的密碼為 mypassword
作業結果傳輸:請以 root 的身分執行 vbird_book_check_unit 指令上傳作業結果。 正常執行完畢的結果應會出現【XXXXXX;aa:bb:cc:dd:ee:ff;unitNN】字樣。若需要查閱自己上傳資料的時間, 請在作業系統上面使用: http://192.168.251.250 檢查相對應的課程檔案。
2017/04/02:終於將這一章的習題搞定了!趁著連續假期處理處理~
2018/08/16:在 11.1.1 的第一個例題上方『讀者會發現到 eth0 ...同時 DEICE 會...』,應該是『讀者會發現到 eth0 ...同時 DEVICE 會...』才對!
2016/05/12以來統計人數