1.每12小時備份並壓縮/etc/目錄至/backup目錄中,保存文件名稱格式爲,"etc-年-月-日-時-分.tar.gz"
tar zcfP /backup/$(date +%F-%H-%M).tar.gz /etc/
2.rpm包管理功能總結以及實例應用演示
rpm命令按照用途可以分爲 安裝、升級、卸載、查詢、校驗、數據庫維護六個區塊,
rpm命令:rpm [OPTIONS][PACKAGE_FILE]
安裝:-i, --install
升級:-U, --update, -F, --freshen
卸載:-e, --erase
查詢:-q, --query
校驗:-V, --verify
數據庫維護:--builddb, --initdb
1) 安裝
rpm {-i|--install} [install-options] PACKAGE_FILE ...
rpm -ivh PACKAGE_FILE ...
GENERAL OPTIONS:
-v:verbose,詳細信息
-vv:更詳細的輸出
[install-options]:
-h:hash marks輸出進度條;每個#表示2%的進度;
--test:測試安裝,檢查並報告依賴關係及衝突消息等;
--nodeps:忽略依賴關係;不建議;
--replacepkgs:重新安裝
--nosignature:不檢查包簽名信息,不檢查來源合法性;
--nodigest:不檢查包完整性信息;
# rpm -i example.rpm 安裝example.rpm包;
# rpm -iv example.rpm 安裝example.rpm包並在安裝過程中顯示正在安裝的信息;
# rpm -ivh example.rpm 安裝example.rpm包並在安裝過程中顯示正在安裝的信息及安裝進度;
2)升級
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
--oldpackage: 降級;
--force: 強制升級;
# rpm -Uvh example.rpm 升級example.rpm包
注意:(1) 不要對內核做升級操作;Linux支持多內核版本並存,因此,直接安裝新版本內核;
(2) 如果某原程序包的配置文件安裝後曾被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)後提供;
3)卸載
rpm {-e|--erase} [--allmatches][--nodeps] [--noscripts][--test] PACKAGE_NAME ...
--allmatches:卸載所有匹配指定名稱的程序包的各版本;
--nodeps:忽略依賴關係
--test:測試卸載,dry run模式
# rpm -e example 卸載軟件example,注意:只輸入軟件包名即可,而不是文件名
4)查詢
rpm {-q|--query} [select-options] [query-options]
[select-options]
PACKAGE_NAME:查詢指定的程序包是否已經安裝,及其版本;
-a, --all:查詢所有已經安裝過的包;
-f FILE:查詢指定的文件由哪個程序包安裝生成;
-p, --package PACKAGE_FILE:用於實現對未安裝的程序包執行查詢操作;
--whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個程序包提供;
--whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴;
[query-options]
--changelog:查詢rpm包的changlog;
-l, --list:程序安裝生成的所有文件列表;
-i, --info:程序包相關的信息,版本號、大小、所屬的包組,等;
-c, --configfiles:查詢指定的程序包提供的配置文件;
-d, --docfiles:查詢指定的程序包提供的文檔;
--provides:列出指定的程序包提供的所有的CAPABILITY;
-R, --requires:查詢指定的程序包的依賴關係;
--scripts:查看程序包自帶的腳本片斷;
用法:
-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, -qpc PACKAGE_FILE, ...
#rpm -q example 查詢example軟件包
5)校驗軟件包
rpm {-V|--verify} [select-options] [verify-options]
rpm -V pkg 校驗軟件包
6)數據庫重建
通過rpm 命令查詢一個rpm 包是否安裝了,也是要通過rpm 數據庫來完成的;有時rpm 系統出了問題,不能安裝和查詢,可能會是數據庫出現問題,可以使用下面命令重建
rpm管理器數據庫路徑:/var/lib/rpm/
查詢操作:通過此處的數據庫進行;
獲取幫助:
CentOS 6:man rpm
CentOS 7:man rpmdb
rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
--initdb:初始化數據庫,當前無任何數據庫可實始化創建一個新的;當前有時不執行任何操作;
--rebuilddb:重新構建,通過讀取當前系統上所有已經安裝過的程序包進行重新創建;
3.yum的配置和使用總結以及yum私有倉庫的創建
yum(yellow dog, Yellowdog Update Modifier)程序包管理器的前端工具,是一個在Fedora、RedHat、SUSE中的前端軟件包管理器。基於rpm包管理,能夠從指定服務器自動下載rpm包並且安裝,可以自動處理依賴性關係,並且一次性安裝所有依賴的軟件包
客戶端配置文件指定對應服務器訪問方式如下幾種:
ftp://
http://
nfs://
file:///
配置文件:
/etc/yum.conf:爲所有倉庫提供公共配置
/etc/yum.repos.d/*.repo:爲倉庫的指向提供配置
倉庫指向的定義:
[repositoryID]
name=repo_name #顯示的名稱
baseurl=url://path/to/repository/ #路徑可以是網絡上的也可以是本地訪問路徑
enabled={1|0} #是否啓用包來源合法性驗證
gpgcheck={1|0} #是否啓用倉庫
gpgkey=URL #公鑰文件
enablegroups={1|0}
failovermethod={roundrobin|priority} 默認爲:roundrobin,意爲隨機挑選;
cost=1000 #倉庫開銷,用來做優先級,數值越小,優先級越大默認爲1000
yum的常用命令
yum insatll package 安裝軟件包
yum list 列出所有可用的package和package組
yum clean all 清除所有緩衝數據
yum deplist package 列出一個包所有依賴的包
yum remove package 卸載一個包
yum創建私有倉庫
創建yum倉庫:
createrepo [options] <directory>
4.寫一個腳本實現列出一下菜單給用戶:
(1)disk:show disk info信息
(2)mem:show memory info信息
(3)cpu:show cpu info信息
(*)quit
#!/bin/bash
cat << EOF
(1)disk:show disk info信息
(2)mem:show memory info信息
(3)cpu:show cpu info信息
(*)quit
EOF
read -p "請輸入OPTION:" option
case $option in
1)
fdisk -l /dev/[hs]d[a-z]
;;
2)
free -m
;;
3)
lscpu
;;
*)
echo "quit"
exit
;;
esac
5.sed用法總結並結合實例演示
sed是一種在線編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩衝區中,稱爲“模式空間”(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,這樣不斷重複,直到文件末尾。文件內容並沒有改變,除非你使用重定向存儲輸出。sed主要用來自動編輯一個或多個文件;簡化對文件的反覆操作;編寫轉換程序等。
sed用法格式:
sed [OPTION]... 'script' [input-file] ...
script:地址定界編輯命令
sed常用選項:
-n:不輸出模式空間中的內容至屏幕;
-e script, --expression=script:多點編輯;能指定多個編輯命令
-f /PATH/TO/SED_SCRIPT_FILE每行一個編輯命令;
-r, --regexp-extended:支持使用擴展正則表達式;
-i[SUFFIX], --in-place[=SUFFIX]:直接編輯原文件 ;
地址定界:
(1) 空地址:對全文進行處理;
(2) 單地址:
#:指定行;
/pattern/:被此模式所匹配到的每一行;
(3) 地址範圍
#,#: 指定行到指定行
#,+#: 從指定數字行加上指定數字,例如3,+8 ,從第三行開始到第十行(包括第三行)
#,/pat1/ 從指定行到第一次匹配到的pat結束
/pat1/,/pat2/ 從第一次匹配到的pat到第二次匹配到的pat
$:最後一行;
(4) 步進:~
1~2:所有奇數行
2~2:所有偶數行
編輯命令:
d:刪除;
p:顯示模式空間中的內容;
a \text:在行後面追加文本“text”,支持使用\n實現多行追加;
i \text:在行前面插入文本“text”,支持使用\n實現多行插入;
c \text:把匹配到的行替換爲此處指定的文本“text”;
w /PATH/TO/SOMEFILE:保存模式空間匹配到的行至指定的文件中;
r /PATH/FROM/SOMEFILE:讀取指定文件的內容至當前文件被模式匹配到的行後面;文件合併;
=:爲模式匹配到的行打印行號;
!:條件取反;
地址定界!編輯命令;
s///:查找替換,其分隔符可自行指定,常用的有s@@@, s###等;
替換標記:
g:全局替換;
w /PATH/TO/SOMEFILE:將替換成功的結果保存至指定文件中;
p:顯示替換成功的行;
示例:
1) -n與p合用
查看/etc/passwd文件的1-3行
[root@www ~]# cat -n /etc/passwd|sed -n '1,3p'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
打印/etc/passwd文件的奇數行
[root@www ~]# cat -n /etc/passwd|sed -n 'p;n'
1 root:x:0:0:root:/root:/bin/bash
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
11 operator:x:11:0:operator:/root:/sbin/nologin
13 gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
15 nobody:x:99:99:Nobody:/:/sbin/nologin
17 vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
19 abrt:x:173:173::/etc/abrt:/sbin/nologin
21 nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
23 ntp:x:38:38::/etc/ntp:/sbin/nologin
25 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
27 oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
29 test:x:500:500::/home/test:/bin/bash
2)d刪除
刪除第一行
[root@www ~]# cat -n a|sed '1d'
2 Kernel \r on an \m
3
刪除/etc/fstab文件中以#開頭的行
[root@www ~]# sed '/^#/d' /etc/fstab
/dev/mapper/VolGroup-lv_root / ext4 defaults 1 1
UUID=a237ccf4-03c2-44e2-aa7d-b793d08d8fef /boot ext4 defaults 1 2
/dev/mapper/VolGroup-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
取/etc/fstab最後一行
[root@www ~]# sed '$!d' /etc/fstab
proc /proc proc defaults 0 0
3)s查找替換
替換/etc/passwd文件裏root爲大寫ROOT
[root@www ~]# sed 's/root/ROOT/' /etc/passwd ##默認會替換行裏第1個匹配
ROOT:x:0:0:root:/root:/bin/bash
[root@www ~]# sed 's/root/ROOT/g' /etc/passwd ##加g選項會全局替換
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
輸出一個絕對路徑給sed命令,取出其目錄,其行爲類似於dirname;
echo "/var/log/messages/" | sed 's@[^/]\+/\?$@@'
6.用bash實現統計訪問日誌文件中狀態碼大於等於400的IP數量並排序
sed -n -r '/\<40[0-9]\>/p' /var/log/httpd/access_log|cut -d" " -f1 |sort|uniq -c
7.使用自制的yum源安裝ftp、openssh、curl、wget、tcpdump等軟件包
使用光盤鏡像中的包模擬創建本地倉庫
[root@www ~]# mount -r -t iso9660 /dev/cdrom /media/cdrom/
[root@www ~]# mkdir -p /yumrepo/Packages ###創建本地packages目錄
###將需要的Packages拷貝到本地目錄
cp /media/cdrom/Packages/ftp-0.17-67.el7.x86_64.rpm /yumrepo/Packages/
cp /media/cdrom/Packages/openssh-* /yumrepo/Packages/
cp /media/cdrom/Packages/curl-7.29.0-35.el7.centos.x86_64.rpm /yumrepo/Packages/
cp /media/cdrom/Packages/wget-1.14-13.el7.x86_64.rpm /yumrepo/Packages/
cp /media/cdrom/Packages/tcpdump-4.5.1-3.el7.x86_64.rpm /yumrepo/Packages/
###使用createrepo命令創建本地yum源(如果沒有此命令可以使用yum -y install createrepo安裝)
[root@www yumrepo]# createrepo /yumrepo/
Spawning worker 0 with 15 pkgs
Workers Finished
Gathering worker results
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
修改yum配置文件,將倉庫指向本地源
[root@www ~]# cd /etc/yum.repos.d/
[root@www yum.repos.d]# vim local.repo
[yumrepo]
name=yumrepo
baseurl=file:///yumrepo
enabled=1
gpgcheck=0
[root@www yum.repos.d]# yum repolist #######查看yum倉庫
已加載插件:fastestmirror, security
Loading mirror speeds from cached hostfile
* base: mirror.lzu.edu.cn
* extras: mirror.lzu.edu.cn
* updates: mirrors.cqu.edu.cn
倉庫標識 倉庫名稱 狀態
base CentOS-6 - Base 6,713
extras CentOS-6 - Extras 35
updates CentOS-6 - Updates 251
yumrepo yumrepo 15
repolist: 7,014
安裝ftp、openssh、curl、wget、tcpdump等軟件包
yum install -y ftp openssh curl wget tcpdump