第六週作業 rpm包管理、yum配置、sed用法、備份任務等
1、 每12小時備份並壓縮/etc/目錄至/backup目錄中,儲存檔名稱格式為,“etc-年-月-日-時-分.tar.gz”
• tar:
o 打包:tar -cf something.tar something
o 解包:tar -xf something.tar
o -c:建立 .tar 格式的包檔案
o -x:解開.tar格式的包檔案
o -v:輸出詳細資訊
o -f:表示使用歸檔檔案
o -p:打包時保留原始檔案及目錄的許可權 –P絕對路徑
o -t:列表檢視包內的檔案
常見壓縮格式及對應引數
*.tar.gz | *.tar.xz | *.tar.bz2 |
---|---|---|
-z | -J | -j |
[[email protected] backup]#tar -czvf /backup/etc-`date +%Y-%m-%d-%H-%M.tar.gz` /etc //測試一下打包壓縮的功能 [[email protected] backup]# ll total 10760 -rw-r--r--. 1 root root 11017766 Dec 23 19:40 etc-2018-12-23-19-40.tar.gz [[email protected] backup]# crontab -e //設定每過12小時執行一次備份壓縮任務 0 */12 * * * tar -czvf /backup/etc-`date +%Y-%m-%d-%H-%M.tar.gz` /etc
2、rpm包管理功能總結以及例項應用演示。
rpm命令:rpm [OPTIONS] [PACKAGE_FILE]
安裝:-i, --install
-v:verbose,詳細資訊
-vv:更詳細的輸出
-h:hash marks輸出進度條;每個#表示2%的進度;
--test:測試安裝,檢查並報告依賴關係及衝突訊息等;
--nodeps:忽略依賴關係;不建議;
--replacepkgs:重新安裝
--nosignature:不檢查包簽名信息,不檢查來源合法性;
--nodigest:不檢查包完整性資訊;
--noscripts:不帶指令碼資訊
升級:-U, --update, 升級或安裝
-F, --freshen 純粹升級,必須存在老版本,不支援安裝操作
--oldpackage:降級;
--force:強制升級;
解除安裝:-e, --erase
--allmatches:解除安裝所有匹配指定名稱的程式包的各版本;
--nodeps:忽略依賴關係
--test:測試解除安裝,dry run模式
查詢:-q, --query
-qi PACKAGE --info:查詢程式包相關的資訊,版本號、大小、所屬的包組等
-qf FILE 查詢指定的檔案由哪個程式包安裝生成
-qc PACKAGE --configfiles:查詢指定的程式包提供的配置檔案
-ql PACKAGE --list:查詢程式安裝生成的所有檔案列表
-qd PACKAGE --docfiles:查詢指定的程式包提供的文件
-qR PACKAGE --requires: 查詢指定的程式包的依賴關係
-qpi PACKAGE_FILE 查詢未安裝的程式包的相關資訊
-qpl PACKAGE_FILE 查詢未安裝的程式若安裝生成的所有檔案列表
-qpc PACKAGE_FILE 查詢未安裝的程式若安裝生成的所有檔案列表
-q --changelog: 查詢rpm包的changlog
[[email protected] backup]# rpm -ql php
/etc/httpd/conf.d/php.conf
/usr/lib64/httpd/modules/libphp5.so
/var/lib/php/session
/var/www/icons/php.gif
[[email protected] backup]# rpm -qi php
Name : php Relocations: (not relocatable)
Version : 5.3.3 Vendor: Red Hat, Inc.
Release : 47.el6 Build Date: Tue 15 Dec 2015 06:01:38 PM CST
Install Date: Sun 23 Dec 2018 08:28:51 PM CST Build Host: x86-029.build.eng.bos.redhat.com
Group : Development/Languages Source RPM: php-5.3.3-47.el6.src.rpm
Size : 3702253 License: PHP
Signature : RSA/8, Sat 12 Mar 2016 12:31:10 AM CST, Key ID 199e2f91fd431d51
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
URL : http://www.php.net/
Summary : PHP scripting language for creating dynamic web sites
Description :
PHP is ...(省略)
[[email protected] backup]# rpm -qc php
/etc/httpd/conf.d/php.conf
[[email protected] backup]# rpm -qf /bin/ls
coreutils-8.4-43.el6.x86_64
[[email protected] backup]# rpm -ql /misc/cd/Packages/vsftpd-2.2.2-21.el6.x86_64.rpm
package /misc/cd/Packages/vsftpd-2.2.2-21.el6.x86_64.rpm is not installed
[[email protected] backup]# rpm -qpl /misc/cd/Packages/vsftpd-2.2.2-21.el6.x86_64.rpm
warning: /misc/cd/Packages/vsftpd-2.2.2-21.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/rc.d/init.d/vsftpd
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/sbin/vsftpd
/usr/share/doc/vsftpd-2.2.2
....(省略)
校驗:-V, --verify
包來源合法性驗正和完整性驗證: -K PACKAGE_FILE
[[email protected] Packages]#rpm -K /php-5.3.3-47.el6.x86_64.rpm
php-5.3.3-47.el6.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS: (MD5) PGP#fd431d51)
[[email protected] Packages]# rpm -ivh --nodeps php-5.3.3-47.el6.x86_64.rpm
warning: php-5.3.3-47.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
1:php ########################################### [100%]
[[email protected] Packages]# rpm -V php
Unsatisfied dependencies for php-5.3.3-47.el6.x86_64:
php-cli(x86-64) = 5.3.3-47.el6 is needed by php-5.3.3-47.el6.x86_64
php-common(x86-64) = 5.3.3-47.el6 is needed by php-5.3.3-47.el6.x86_64
3、yum的配置和使用總結以及yum私有倉庫的建設。
YUM: Yellowdog Update Modifier,完成RHEL系列前端自動解決依賴關係安裝工具,依賴rpm存在。
1、YUM配置檔案路徑
/etc/yum.conf:為所有yum倉庫提供公共配置
/etc/yum.repos.d/*.repo:為倉庫的指向提供配置
2./etc/yum.conf主配置定義
[main] #通用主配置段
cachedir=/var/cache/yum/$basearch/$releasever # 快取檔案路徑
keepcache=0 # 快取到本地的檔案是否儲存
debuglevel=2 # 除錯級別
logfile=/var/log/yum.log # 安裝的日誌檔案
exactarch=1 # 精確嚴格的平臺release匹配
obsoletes=1
gpgcheck=1 #檢測來源合法性和完整性
plugins=1 #支援外掛機制
installonly_limit=5 #同時安裝多少程式包
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bu # 追蹤bug路徑
distroverpkg=centos-release # 當前發行版版本號從哪兒獲取
# This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
...
*3.yum倉庫(.repo)配置檔案定義**
[repositoryID] #倉庫ID,唯一標識別,不能重複
name=Some name for this repository # 完整的倉庫名稱
baseurl=url://path/to/repository/ # yum倉庫指明的訪問路徑
enabled={1|0} #是否啟用此yum倉庫,預設啟用
gpgcheck={1|0} #是否檢查完整性和來源合法性
gpgkey=URL #祕鑰檔案位置,可能是對方倉庫提供
enablegroups={1|0} #是否基於組來批量管理程式包
failovermethod={roundrobin|priority} #故障轉移方法:輪詢、根據優先順序選擇; 預設roundrobin隨機
cost=# #設定開銷,預設為1000
… ...
至少需要三行
[repositoryID] #倉庫ID
baseurl=url://path/to/repository/ # yum倉庫指明的訪問路徑
gpgcheck=0 #不檢查完整性和來源合法性
說明:
1)*.repo可以將多個[repositoryID]的配置資訊放在一個而檔案內,也可以切成多個方便管理
2)baseurl可以使用:ftp:// 、http:// 、nfs:// 、file:/// 指明URL路徑
3)baseurl等號兩邊不能有空格,其後可以填寫多個映象訪問路徑,每行一個,不能頂行寫
多個訪問路徑間聯絡是映象相同,目的是為了做備用訪問
4)更多選項使用man 5 yum.conf檢視,基本配置只需前三行就可以
5)發行版光碟映象安裝可能會自動配置網路映象URL地址
4、YUM常用命令
yum repolist 顯示倉庫列表
yum list 顯示程式包
yum search 模糊查詢程式包
yum install 安裝程式包
yum remove 解除安裝程式包
yum update [package1] [package2] [...] 升級操作
yum downgrade package1 [package2] [...] 降級操作
yum info [package1] [package2] [...] 檢視程式包簡要資訊
yum provides | whatprovides feature1 [feature2] [...] 檢視指定的特性(可以是某檔案)是由哪個程式包所提供
yum clean <packages | metadata | expire-cache | rpmdb | plugins | all > 清理本地快取
[[email protected] backup]# yum repolist //檢視yum倉庫
Loaded plugins: product-id, refresh-packagekit, search-disabled-repos, security,
: subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
repo id repo name status
rhel-source Red Hat Enterprise Linux 6Server - x86_64 - Source 3,855
repolist: 3,855
[[email protected] backup]# yum search ftp //模糊查詢安裝包
Loaded plugins: product-id, refresh-packagekit, search-disabled-repos, security,
: subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
=============================== N/S Matched: ftp ===============================
ftp.x86_64 : The standard UNIX FTP (File Transfer Protocol) client
gvfs-obexftp.x86_64 : ObexFTP support for gvfs
tftp.x86_64 : The client for the Trivial File Transfer Protocol (TFTP)
tftp-server.x86_64 : The server for the Trivial File Transfer Protocol (TFTP)
vsftpd.x86_64 : Very Secure Ftp Daemon
...
[[email protected] backup]# yum list *ftp* //查詢已安裝與未安裝的匹配包
Loaded plugins: product-id, refresh-packagekit, search-disabled-repos, security,
: subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Installed Packages
gvfs-obexftp.x86_64 1.4.3-26.el6 @anaconda-RedHatEnterpriseLinux-201604140956.x86_64/6.8
vsftpd.x86_64 2.2.2-21.el6 @rhel-source
Available Packages
ftp.x86_64 0.17-54.el6 rhel-source
lftp.i686 4.0.9-6.el6 rhel-source
lftp.x86_64 4.0.9-6.el6 rhel-source
...
包組:一堆程式的一個集合,用於一起安裝,因為某些程式安裝需要依賴包組內容
# yum groupinstall group1 [group2] [...] 安裝包組
# yum groupupdate group1 [group2] [...] 升級包組
# yum grouplist [hidden] [groupwildcard] [...] 顯示包組列表
# yum groupremove group1 [group2] [...] 移除包組
# yum groupinfo group1 [...] 顯示包組資訊
5、建立私有yum倉庫
第一種:使用發行版光碟作為yum倉庫:
1)掛載光碟或ISO檔案到某一掛載點
#mkdir /mnt/cdrom
#mount /dev/sr0 /mnt/cdrom
2)備份原來的yum源:
#mkdir /etc/yum.repos.d/bak
#mv /etc/yum.repos.d/* /etc/yum.repos.d/bak/
3)增加一個光碟的yum源
#vi /etc/yum.repos.d/mybase.repo
[mybase]
name=LocalYum
baseurl=file:///mnt/cdrom
gpgcheck=0
enabled=1
第二種,使用本地或網路rpm包手動建立。
第一步:安裝createrepo
第二步:確定repository輸出方式:有兩種,本地輸出與網路輸出。
本地輸出:提供一個放置rpm包的本地路徑
網路輸出 :提供一個檔案伺服器,配置好ftp服務或http服務(注意防火牆要開放對應埠) ftp服務:
安裝程式包:vsftpd
檔案存放路徑:/var/ftp/pub
啟動服務: service vsftpd start
http服務:
安裝程式包:httpd
檔案存放路徑:/var/www/html
啟動服務:service httpd start
第三步:把rpm程式包檔案放入準備好的目錄中,可以從光碟複製rpm包過去。
第四步:對此目錄執行createrepo命令即可,至此就完成了本地倉庫的建立。
第五步:測試所建立的yum 倉庫是否可用
在/etc/yum.repos.d/目錄下建立一個以repo結尾的檔案,示例如下:
[[email protected] yum.repos.d]# yum info createrepo//檢視已安裝的createrepo資訊
[[email protected] yum.repos.d]# mkdir -p /yumtest/Packages
[[email protected] yum.repos.d]# cp /media/cdrom/Packages/* /yumtest/Packages/ //下載所需要的所有檔案到本地某個路徑
[[email protected] yum.repos.d]# createrepo /yumtest/ //建立關聯關係,完成後生成repodata
[email protected] yum.repos.d]# cat Local.repo //配置yum原始檔
[Local]
name=Local Yum
baseurl=file:///yumtest/
#baseurl=http://<repo_host>/Packages //當為http網路輸出時,用此配置。<repo_host>倉庫主機IP,Packages為http釋出目錄下的軟體包目錄
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enabled=1
[[email protected] yum.repos.d]# yum repolist //檢視配置好的yum倉庫
4、寫一個指令碼實現列出以下選單給使用者:
(1)disk:show disk info資訊
(2)mem:show memory info資訊
(3)cpu:show cpu info資訊
(*)quit
#!/bin/bash
cat<<EOF //提示資訊
disk:show disk info資訊
mem:show memory info資訊
cpu:show cpu info資訊
quit
EOF
read -p "Your choice:" choice //讀取使用者的選擇
case $choice in //case條件選擇
disk)
fdisk -l;;
mem)
cat /proc/meminfo;;
cpu)
lscpu;;
*)
exit;;
esac
5、sed用法總結並結合例項演示
sed:Stream Editor 行處理工具,流編輯器
格式:sed [OPTION]… {script-only-if-no-other-script} [input-file]…
其中{script-only-if-no-other-script}:指的是AddressCommands,地址界定執行命令
AddressCommands中間無空格,直接連線為一個選項操作
(1)OPTION常用選項
-n:不輸出模式空間中的內容至螢幕;
-e script, --expression=script:多點編輯;
-f /PATH/TO/SED_SCRIPT_FILE : 每行一個編輯命令;
-r, --regexp-extended:支援使用擴充套件正則表示式;
-i[SUFFIX], --in-place[=SUFFIX]:直接編輯原檔案 ;
(2)地址定界
1)空地址:什麼都不填寫時,表示對全文進行處理
2)單地址
#:表示對指定的行
/pattern/:被此模式所匹配到的每一行,其中模式兩邊的/不能省略
3)地址範圍 (#表示任意數字)
#,#:從某行到某行,第二個#大於第一個#
#,+#:從某行開始加多商行
#,/pattern1/:從某行開始到第一次配到模式的行
/pattern1/,/pattern2/:從第一次匹配到的模式1到第二次匹配到哦的模式2
步進:~,#~# 從第幾行
1~2:所有奇數行。從第一行開始,每次加兩行讀取
2~2:所有偶數行。從第二行開始,每次加兩行讀取
(4)編輯命令
d: 刪除;
p: 顯示模式空間中的內容;
a \text: 在行後面追加文字“text”,支援使用\n實現多行追加;
i \text: 在行前面插入文字“text”,支援使用\n實現多行插入;
c \text: 把匹配到的行替換為此處指定的文字“text”;
w /PATH/TO/SOMEFILE: 儲存模式空間匹配到的行至指定的檔案中;
r /PATH/FROM/SOMEFILE: 讀取指定檔案的內容至當前檔案被模式匹配到的行後面;檔案合併;
=: 為模式匹配到的行列印行號;
!: 條件取反;
s///: 查詢替換,其分隔符可自行指定,常用的有[email protected]@@, s###等;
替換標記:
g:全域性替換;
w /PATH/TO/SOMEFILE:將替換成功的結果儲存至指定檔案中;
p:顯示替換成功的行;
例項
1、刪除centos7系統/etc/grub2.cfg檔案中所有以空白開頭的行行首的空白字元
sed -r 's/^([[:space:]])//g' /etc/grub.conf
2、刪除/etc/fstab檔案中所有以#開頭,後面至少跟一個空白字元的行的行首的#和空白字元
sed -r 's/^#[[:space:]]+//g' etc/fstab
3、在centos6系統/root/install.log每一行行首增加#號
sed '/Installing/i%' /root/install.log 在行的前一行加,而非行首
sed -r 's/(Install)/#\1/' /root/install.log
sed -r 's/^(.*)/#\1/g' /root/install.log
4、在/etc/fstab檔案中不以#開頭的行的行首增加#號(有問題)
sed -n -r 's/(^[^#].*)/#\1/p' /etc/fstab
sed -n -r 's/^[^#].*/#&/p' /etc/fstab
5、處理/etc/fstab路徑,使用sed命令取出其目錄名和基名
echo "/etc/sysconfig/network-scripts/" |sed -r 's#(^.*\/)([^\/].*\/?)$#\1#' 基名,可換@
echo "/etc/sysconfig/network-scripts/" |sed -r 's#(^.*\/)([^\/].*\/?)$#\2#' 路徑
6、利用sed 取出ifconfig命令中本機的IPv4地址
ifconfig |sed -n '2p' |sed -r 's/.*addr://'| sed -r 's/\ B.*//'
6、用bash實現統計訪問日誌檔案中狀態碼大於等於400的IP數量並排序
#!/bin/bash
nginx_log='/usr/local/nginx/logs/mynginx.log'
code_400_num=$(grep -o '[4|5][0-9][0-9]' ${nginx_log} | wc -l)
code_400_sort=$(grep '[4|5][0-9][0-9]' ${nginx_log} | sort
echo $code_400_num
echo $code_400_sort
7、 使用自制的yum源安裝ftp、openssh、curl、wget、tcpdump等軟體包
關閉其它非自制yum源,設定*.repo檔案中相應的enabled=0
[[email protected] scripts]# yum install -y ftp --enablerepo=Local Yum
[[email protected] scripts]# yum install -y openssh --enablerepo=Local Yum
...