1. 程式人生 > >Linux 基礎知識(五)

Linux 基礎知識(五)

第一個 matches xtra 程序包安裝 signature 包組 acc -- rebuilddb

一、每12小時備份並壓縮/etc/目錄到/back目錄中,保存文件名格式為,etc-年-月-日-時-分.tar.gz)

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實現多行追加;

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) 空地址:對全文進行處理;
(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 基礎知識(五)