Linux 基礎知識(五)
crontab -e
*12/*** /usr/bin/tar -czf `date +%F-%H-%M`-etc.tar.gz /etc/
?
?
二、rpm包管理功能總結以及實例應用演示
rpm命令:rpm [OPTIONS] [PACKAGE_FILE]
安裝:-i, --install
升級:-U, --update, -F, --freshen
卸載:-e, --erase
查詢:-q, --query
校驗:-V, --verify
數據庫維護:--builddb, --initdb
安裝: 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:重新安裝 註意:rpm可以自帶腳本; 四類:--noscripts preinstall:安裝過程開始之前運行的腳本,%pre , --nopre postinstall:安裝過程完成之後運行的腳本,%post , --nopost preuninstall:卸載過程真正開始執行之前運行的腳本,%preun, --nopreun postuninstall:卸載過程完成之後運行的腳本,%postun , --nopostun --nosignature:不檢查包簽名信息,不檢查來源合法性; --nodigest:不檢查包完整性信息; 升級: rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... rpm {-F|--freshen} [install-options] PACKAGE_FILE ... -U:升級或安裝; -F:升級 rpm -Uvh PACKAGE_FILE ... rpm -Fvh PACKAGE_FILE ... --oldpackage:降級; --force:強制升級; 註意:(1) 不要對內核做升級操作;Linux支持多內核版本並存,因此,直接安裝新版本內核; (2) 如果某原程序包的配置文件安裝後曾被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)後提供; 卸載: rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ... --allmatches:卸載所有匹配指定名稱的程序包的各版本; --nodeps:忽略依賴關系 --test:測試卸載,dry run模式 查詢: -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 {-V|--verify} [select-options] [verify-options] S file Size differs M Mode differs (includes permissions and file type) 5 digest (formerly MD5 sum) differs D Device major/minor number mismatch L readLink(2) path mismatch U User ownership differs G Group ownership differs T mTime differs P caPabilities differ 包來源合法性驗正和完整性驗正: 來源合法性驗正: 完整性驗正: 獲取並導入信任的包制作者的密鑰: 對於CentOS發行版來說:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 驗正: (1) 安裝此組織簽名的程序時,會自動執行驗正; (2) 手動驗正:rpm -K PACKAGE_FILE 數據庫重建: rpm管理器數據庫路徑:/var/lib/rpm/ 查詢操作:通過此處的數據庫進行; 獲取幫助: CentOS 6:man rpm CentOS 7:man rpmdb rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY] --initdb:初始化數據庫,當前無任何數據庫可實始化創建一個新的;當前有時不執行任何操作; --rebuilddb:重新構建,通過讀取當前系統上所有已經安裝過的程序包進行重新創建;
?
?
三、寫一個腳本實現以下菜單給用戶
(1) disk:show disk info 信息
(2) mem:show memory info 信息
(3) cpu:show cpu info 信息
(*) quit
?
#!/bin/bash echo ‘(1) disk: show disk info‘ echo ‘(2) mem: show memory info‘ echo ‘(3) cpu: show cpu info‘ echo ‘(*) quit‘ read -p "Your chioce: " chioce if [[ "$chioce" == "1" ]]; then fdisk -l /dev/sd[a-z] elif [[ "$chioce" == "2" ]]; then free -h elif [[ "$chioce" == "3" ]]; then lscpu elif [[ "$chioce" == "*" ]]; then exit 0 else echo "Unknow chioce." exit 0 fi
?
四、sed用法總結並結合實例演示
語法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
常用選項:
-n∶使用安靜(silent)模式。但如果加上 -n 參數後,則只有經過sed 特殊處理的那一行(或者動作)才會被列出來。
-e∶直接在指令列模式上進行 sed 的動作編輯;
-f∶直接將 sed 的動作寫在一個檔案內, -f filename 則可以執行 filename 內的sed 動作;
-r∶sed 的動作支援的是延伸型正規表示法的語法。
常用命令:
d:刪除;
p:顯示模式空間中的內容;
a \text:在行後面追加文本“text”,支持使用\n實現多行追加;
c \text:把匹配到的行替換為此處指定的文本“text”;
w /PATH/TO/SOMEFILE:保存模式空間匹配到的行至指定的文件中;
r /PATH/FROM/SOMEFILE:讀取指定文件的內容至當前文件被模式匹配到的行後面;文件合並;
=:為模式匹配到的行打印行號;
!:條件取反;
地址定界!編輯命令;
s///:查找替換,其分隔符可自行指定,常用的有s@@@, s###等;
替換標記:
g:全局替換;
w /PATH/TO/SOMEFILE:將替換成功的結果保存至指定文件中;
p:顯示替換成功的行;
地址定界:
(1) 空地址:對全文進行處理;
(2) 單地址:
#:指定行;
/pattern/:被此模式所匹配到的每一行;
(3) 地址範圍
#,#:
#,+#:
#,/pat1/
/pat1/,/pat2/
$:最後一行;
(4) 步進:~
1~2:所有奇數行
2~2:所有偶數行
?
示例
sed ‘s/123/456/g‘ 替換全部123為456
sed ‘s/123/456/1‘ 替換每行第一個123為456
sed ‘s/123/456/2‘ 替換每行第二個123為456
?
顯示除前3行內容
sed -n ‘1,3!p‘ /etc/passwd
?
顯示第3行及之後3行
sed -n ‘3,+3p‘ /etc/passwd
?
文件第一行插入###
sed ‘1i####‘ /etc/passwd >a.txt?
文件未追加@@@
br/>?
文件未追加@@@
?
文件第3行替換$$$
sed ‘3c$$$‘ /etc/passwd >a.txt
?
文件2~4行復制文件尾
sed ‘2,4H;$G‘ /etc/passwd >a.txt
sed ‘2,4H;$G‘ 111 >333
?
刪空白行
sed ‘/^$/d‘ /etc/passwd >a.txt
?
fstab 包含xfs 寫入新文件
sed ‘/xfs/w 111‘ /etc/fstab
?
sed -n ‘n;p‘ FILE:顯示偶數行;
?
sed ‘1!G;h;$!d‘ FILE:逆序顯示文件的內容;
?
sed ’$!d‘ FILE:取出最後一行;
?
sed ‘$!N;$!D‘ FILE:取出文件後兩行;
?
sed ‘/^$/d;G‘ FILE:刪除原有的所有空白行,而後為所有的非空白行後添加一個空白行;
?
sed ‘n;d‘ FILE:顯示奇數行;
?
sed ‘G‘ FILE:在原有的每行後方添加一個空白行;
?
五、用bash實現統計訪問日誌文件中狀態碼大於等於400的IP數量並排序
sed -n -r ‘/\<40[0-9]\>/p‘ /var/log/httpd/access_log|awk ‘{print $1}‘ |sort|uniq -c
?
?
*六、使用自制的yum源安裝ftp、openssh、wget、tcpdump等軟件包
??
?創建目錄復制安裝包
mkdir -pv /localrepo
cp /data/www/centos7/Packages/curl-7.29.0-51.el7.x86_64.rpm /localrepo/
cp /data/www/centos7/Packages/ftp-0.17-67.el7.x86_64.rpm /localrepo/
cp /data/www/centos7/Packages/openssh-7.4p1-16.el7.x86_64.rpm /localrepo/
cp /data/www/centos7/Packages/wget-1.14-18.el7.x86_64.rpm /localrepo/
cp /data/www/centos7/Packages/tcpdump-4.9.2-3.el7.x86_64.rpm /localrepo/
創建yum倉庫
yum install createrepo
creatrepo /localrepo/
配置倉庫
vim /etc/yum.repos.d/local.repo
[localrepo]
name=localrepo
baseurl=file:///localrepo
enabled=1
gpgcheck=0
顯示倉庫
yum repolist
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
localrepo | 2.9 kB 00:00:00
localrepo/primary_db | 6.0 kB 00:00:00
repo id repo name status
base/7/x86_64 CentOS-7 - Base - mirrors.aliyun.com 10,019
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 12,874
extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com 321
localrepo localrepo 5
updates/7/x86_64 CentOS-7 - Updates - mirrors.aliyun.com
安裝軟件
yum install -y ftp openssh curl wget tcpdump
Linux 基礎知識(五)