1. 程式人生 > >第六週作業 rpm包管理、yum配置、sed用法、備份任務等

第六週作業 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
...