linux安裝包管理:yum和rpm 文本處理:sed
-
編寫腳本用來備份 文件/root/etcback.sh
#!/bin/bash tar -zcf /data/etc-`date "+%F-%H-%M"`.tar.gz /etc/ &>/dev/null
- 執行crontab -e,加入0 1,13 * /root/etcback.sh,保存退出
-
確保crond服務啟動 ps -aux|grep cron
root 971 0.0 0.1 126304 1564 ? Ss 13:18 0:00 /usr/sbin/crond -n - 測試:把系統時間調整到差不多時間,date -s 0:57
查看日誌/var/log/cron
Dec 15 01:00:01 centos7 CROND[2440]: (root) CMD (/root/etcback.sh)
ls /data
etc-2018-12-15-01-00.tar.gz
成功備份
2.rpm基本用法和應用
- 將編譯好的應用程序的各組成文件打包一個或幾個 程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、 升級和校驗等管理操作
rpm數據庫(公共):/var/lib/rpm - rpm安裝與升級
rpm -ivh PACKAGE_FILE 包路徑 基本安裝方法
--test: 測試安裝,但不真正執行安裝,即dry run模式
--nodeps:忽略依賴關系
--replacepkgs | replacefiles 強行重新安裝
--nosignature: 不檢查來源合法性
--nodigest:不檢查包完整性
--noscripts:不執行程序包腳本
--oldpackage:降級
--force: 強制安裝
rpm -Uvh 升級和安裝
rpm -Fvh 只升級(無舊版本無法升級)
內核建議rpm -ivh 安裝新版本 (內核允許多版本) - rpm包查詢
rpm -q 包名 查詢
-qa 查詢所有安裝包
-ql 包名 列出文件列表
-qf 文件 列出文件來自哪個包
-qp 包路徑 針對未安裝包的查詢
-qc 只看配置文件
-qd 只看文檔
-qi 看一些說明
-V 包名 查看安裝包文件是否被修改
rpm -K|checksig rpmfile 檢查包的完整性和簽名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 導入私鑰 - 包卸載
rpm -e 包名 卸載
--nodeps 忽略依賴關系
--noscripts
--notriggers
--test 測試卸載 - 其他應用
rpm2cpio 包文件|cpio –itv 預覽包內文件
rpm2cpio 包文件|cpio –id “*.conf” 釋放包內文件 (默認恢復到當前文件夾,不加條件恢復全部) - 示例
- rpm -qpi /misc/cd/Packages/httpd-2.4.6-67.el7.centos.x86_64.rpm查詢包信息
Name : httpd
Version : 2.4.6
Release : 67.el7.centos
Architecture: x86_64
Install Date: (not installed)
Group : System Environment/Daemons
Size : 9823661
License : ASL 2.0
Signature : RSA/SHA256, Fri 11 Aug 2017 12:40:32 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM : httpd-2.4.6-67.el7.centos.src.rpm
Build Date : Fri 04 Aug 2017 11:21:07 AM CST
Build Host : c1bm.rdu2.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://httpd.apache.org/
Summary : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server. - rpm -ivh --nodeps Packages/httpd-2.4.6-67.el7.centos.x86_64.rpm 忽略依賴性安裝
Preparing... ################################# [100%]
Updating / installing...
1:httpd-2.4.6-67.el7.centos ################################# [100%] - rpm2cpio /misc/cd/Packages/httpd-2.4.6-67.el7.centos.x86_64.rpm |cpio -idv ./usr/sbin/httpd 解壓rpm包中指定文件到當前文件夾
./usr/sbin/httpd
19336 blocks
tree usr/ 查看解壓文件
usr/
└── sbin
└── httpd
1 directory, 1 file
- rpm -qpi /misc/cd/Packages/httpd-2.4.6-67.el7.centos.x86_64.rpm查詢包信息
3.yum的配置與使用,私有倉庫創建
- yum客戶端配置文件
/etc/yum.conf:為所有倉庫提供公共配置
/etc/yum.repos.d/*.repo:為倉庫的指向提供配置 - 倉庫指向的定義:
[repositoryID] name= 倉庫名字
baseurl=https:// http:// ftp:// file://
enabled={1|0} 0表示禁用,默認開啟
gpgcheck={1|0} 0表示不檢查,默認檢查
gpgkey=URL 私鑰文件位置
enablegroups={1|0}
failovermethod={roundrobin|priority} roundrobin:意為隨機挑選,默認值 priority:按順序訪問 cost= 默認為1000 - yum的repo配置文件中可用的變量:
$releasever: 當前OS的發行版的主版本號
$arch: 平臺,i386,i486,i586,x86_64等
$basearch:基礎平臺;i386, x86_64
$YUM0-$YUM9:自定義變量
實例: http://server/centos/$releasever/$basearch/ - yum --nogpgcheck:禁止進行gpg check -y: 自動回答為“yes” -q:靜默模式
yum repolist [all|enabled|disabled] 列出源信息
yum list all 列出所有可安裝的包
yum install package1 [package2] [...] 安裝
yum reinstall package1 [package2] [...] (重新安裝)
yum update package1 [package2] [...] 更新
yum downgrade package1 [package2] [...] (降級)
yum check-update 檢查可用更新
yum remove | erase package1 [package2] [...] 卸載
yum info package 查看包信息
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] 清理本地緩存: 清除/var/cache/yum/$basearch/$releasever緩存
yum search string1 [string2] [...] 以指定的關鍵字搜索程序包名和相關信息
yum history [info|list|packages-list|packages-info| summary|addon-info|redo|undo| rollback|new|sync|stats] 查看yum事務歷史
如
yum history
yum history info 6
yum history undo 6 - yum 程序組合安裝相關
yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum grouplist [hidden] [groupwildcard] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...] -
創建自己的yum倉庫
進入. /etc/yum.repos.d/ 建立base.repo文件
[base]
name=carom
baseurl=file:///misc/cd/
gpgkey=file:///misc/cd/RPM-GPG-KEY-CentOS-$releaserver
[network]
name=all
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
enabled=1
gpgkey=https://mirrors.aliyun.com/centos/$releasever/os/x86_64/RPM-GPG-KEY-CentOS-$releasever禁用network yum源時改為enabled=0
[root@centos7 ~]# yum clean all
Loaded plugins: fastestmirror, langpacks
Cleaning repos: base network
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
[root@centos7 ~]#yum repolist
Loaded plugins: fastestmirror, langpacks
base | 3.6 kB 00:00:00
network | 3.6 kB 00:00:00
(1/4): base/group_gz | 156 kB 00:00:00
(2/4): base/primary_db | 5.7 MB 00:00:00
(3/4): network/7/group_gz | 166 kB 00:00:01
(4/4): network/7/primary_db | 6.0 MB 00:00:05
Determining fastest mirrors
repo id repo name status
base carom 9,591
network/7 all 10,019
repolist: 19,610
4.查看系統信息小腳本
#!/bin/bash
disk () {
df -h
echo ""
lsblk
}
mem () {
free -h
echo ""
cat /proc/meminfo
}
cpu (){
iostat -c
echo ""
cat /proc/cpuinfo
}
f_wait () {
echo ""
read -p "please input any key to continue !" key
case $key in
*)
continue
;;
esac
}
while true ;do
echo -e "(1)disk:show disk info\n"
echo -e "(2)mem: show memory info\n"
echo -e "(3)cpu: show cpu info!\n"
echo -e "(*) quit\n "
read -p "please input your selection (1-3): " num
case $num in
1)
disk
f_wait
;;
2)
mem
f_wait
;;
3)
cpu
f_wait
;;
*)
echo "exit........"
sleep 1
exit
esac
done
測試:
root@centos7 testsh]#bash sysmenu.sh
(1)disk:show disk info
(2)mem: show memory info
(3)cpu: show cpu info!
(*) quit
please input your selection (1-3): 1
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 50G 8.8G 42G 18% /
devtmpfs 576M 0 576M 0% /dev
tmpfs 591M 0 591M 0% /dev/shm
tmpfs 591M 8.5M 582M 2% /run
tmpfs 591M 0 591M 0% /sys/fs/cgroup
/dev/sda3 30G 75M 30G 1% /data
/dev/sda1 1014M 158M 857M 16% /boot
/dev/sdb1 9.8G 13M 7.8G 1% /mydata
tmpfs 119M 12K 119M 1% /run/user/42
tmpfs 119M 0 119M 0% /run/user/0
/dev/sr0 8.1G 8.1G 0 100% /misc/cd
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K 0 disk
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 50G 0 part /
├─sda3 8:3 0 30G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
sdb 8:16 0 60G 0 disk
├─sdb1 8:17 0 10G 0 part /mydata
└─sdb2 8:18 0 1G 0 part [SWAP]
sdc 8:32 0 30G 0 disk
├─sdc1 8:33 0 10G 0 part
├─sdc2 8:34 0 10G 0 part
│ └─testvg-testlv 253:0 0 3G 0 lvm
└─sdc3 8:35 0 10G 0 part
sr0 11:0 1 8.1G 0 rom /misc/cd
please input any key to continue !
(1)disk:show disk info
(2)mem: show memory info
(3)cpu: show cpu info!
(*) quit
please input your selection (1-3): q
exit........
5.sed用法
sed是一種流編輯器,它一次處理一行內容。處理時,把當前 處理的行存儲在臨時緩沖區中,稱為“模式空間”,接著用sed命令處理緩沖區中的內容,處理完成後 ,把緩沖區的內容送往屏幕。然後讀入下行,執行下一個循環 。如果沒有使諸如‘D’的特殊命令,那會在兩個循環之間清空 模式空間,但不會清空保持空間(高級用法時候使用)。這樣不斷重復,直到文件末 尾。文件內容並沒有改變,除非你使用重定向存儲輸出。
- 基本格式
sed 選項 位置定界 執行操作 如:sed –n ‘2p’ /etc/passwd 2是位置定界 p是打印操作 - 基本選項
-n:不輸出模式空間內容到屏幕,即不自動打印
-e: 連接多次操作
-f:/PATH/SCRIPT_FILE: 從指定文件中讀取編輯腳本
-r: 支持使用擴展正則表達式
-i.bak: 修改原文件並且備份原文件 - 位置定界
(1) 不給地址:對全文進行處理
(2) 單地址: n: 指定的第n行,$:最後一行 /pattern/:被此處模式所能夠匹配到的每一行(可用正則表達式匹配)
(3) 地址範圍: m,n 指定從m行到n行 m,+n 指定從m行開始到下面第n行 /pat1/,/pat2/ 表達式之間的行 m,/pat1/ 從m行開始 到匹配行
(4) ~:步進 m~n 表示第m行開始 每n行處理一次 1~2 奇數行 2~2 偶數行 - 執行操作
d: 刪除模式空間匹配的行,並立即啟用下一輪循環
p:打印當前模式空間內容,追加到默認輸出之後
a []text:在指定行後面追加文本 支持使用\n實現多行追加
i []text:在行前面插入文本
c []text:替換行為單行或多行文本
w /path/somefile: 保存模式匹配的行至指定文件
r /path/somefile:讀取指定文件的文本至模式空間中匹配到的行後
=: 打印行號
!:模式空間中匹配行取反處理 如 2!d 刪除除了第二行所有行 - 常用用法(替代)
s///:查找替換,支持使用其它分隔符,s@@@,s### ?
替換標記: g: 行內全局替換 如sed ‘s/test/mytest/g‘ example test 換成 mytest
p: 顯示替換成功的行 sed –n ‘s/root/&superman/p’ /etc/passwd root 換成 rootsuperman &表示要替換內容
w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中
例子
ifconfig ens33| sed -rn "2s/.inet (.) +netmask./\1/p" 獲取ip ;第2行做替換 ,後向引用獲取第一個括號內容
df |sed -rn "/^\/dev\/sd/s/. ([0-9]+)%./\1/p" 獲取各個分區利用率
sed -r ‘s/(.\/)([^/]+\/?)/\2/‘ 獲取目錄基名
sed -r ‘s/(.*\/)([^/]+\/?)/\1/‘獲取目錄名 - 高級用法(使用模式空間和保持空間)
P 打印到\n
h 模式空間 覆蓋 保持空間
H 模式空間 追加 保持空間
g 保持空間 覆蓋 模式空間
G 保持空間 追加 模式空間
x 保持空間 互換 模式空間
n 讀取匹配行的下一行覆蓋到模式空間 如果沒有用-n開關關閉auto-print,每次模式空間清空之前會默認打印一次裏面的內容
N 讀取匹配行的下一行追加到模式空間
d 刪除模式空間的行
D 如果模式空間有換行符 ,就刪除第一個換行符的模式空間文本,不重新讀取新行,並返回腳本頭部執行 例如:sed ‘N;D ‘中讀第一行後執行N,追加第二行,執行D,刪除第一行,這時系統不直接讀取第三行,而是直接執行N
如果不包含換行符 ,類似d - 示例
seq 1 10 | sed -n ‘n;p‘ seq 1 10 | sed -n ‘1~2p‘ 打印偶數行
seq 1 10 | sed ‘1!G;h;$!d‘ seq 1 10 | sed -n ‘1!G;h;$p‘倒序打印1-10
seq 1 10 | sed ‘N;D ‘ seq 1 10 | sed ‘$!d‘ 打印最後一行
seq 1 10 | sed ‘$!N;$!D ‘打印最後兩行
seq 1 10 | sed ‘G‘ 每一行下追加空行
seq 1 10 | sed ‘g ‘ 變成全部空行
sed ‘/^$/d;G‘ 每一行追加空白行且刪除原本所以空白行
seq 1 10|sed ‘N;s/\n/ /‘ seq 1 10|xargs -n2
[^A-Za-z0-9_ ] 方法可以使用在排除特殊字符
6.統計httpd日誌文件狀態大於400的ip地址數量
#!/bin/bash
dirpath=/var/log/httpd/access_log
while read line ; do
sta=`echo $line |sed -rn "s/.*\" ([0-9]+) .*/\1/p"`
if [ $sta -ge 400 ] ;then
echo $line |sed -rn "s/(.*) - -.*/\1/p" >> ./httpdstat
fi
done <$dirpath
cat ./httpdstat|sort -rn|uniq -c|sort -rn
rm -f ./httpdstat &>/dev/null
安裝httpd服務,啟動httpd服務,用不同ip訪問網頁產生錯誤和正常日誌文件
執行腳本
[root@centos7 testsh]#bash httpdstatic.sh
354 192.168.0.101
18 192.168.0.108
15 192.168.0.111
3 192.168.0.112
7.使用自定義yum安裝ftp、openssh、tcpdump服務
-
執行命令批量安裝服務
yum -y install ftp tcpdump openssh
後面提示
Installed:
ftp.x86_64 0:0.17-67.el7 openssh.x86_64 0:7.4p1-16.el7 tcpdump.x86_64 14:4.9.2-3.el7Complete!
成功安裝 - 查看安裝歷史
[root@centos7 testsh]#yum history info
Loaded plugins: fastestmirror, langpacks
Transaction ID : 16
Begin time : Sun Dec 16 17:56:29 2018
Begin rpmdb : 1304:04159b1e18a815a1fde89273c26b57ef2cb0405d
End time : 17:56:30 2018 (1 seconds)
End rpmdb : 1307:43802a135230576fae6af9f1bc4399169efa29d4
User : root <root>
Return-Code : Success
Command Line : -y install ftp tcpdump openssh
Transaction performed with:
Installed rpm-4.11.3-32.el7.x86_64 @network
Installed yum-3.4.3-154.el7.centos.noarch @anaconda
Installed yum-plugin-fastestmirror-1.1.31-42.el7.noarch @anaconda
Packages Altered:
Install ftp-0.17-67.el7.x86_64 @base
Install openssh-7.4p1-16.el7.x86_64 @network
Install tcpdump-14:4.9.2-3.el7.x86_64 @network
history info
linux安裝包管理:yum和rpm 文本處理:sed