linux程序包管理

對第五周學習的內容進行總結

簡述rpm與yum命令的常見選項,并舉例

rpm命令

rpm命令用來手動安裝rpm格式的程序包,使用格式為

  • rpm [option] path/to/rpmfile
  1. -i安裝選項
  • 使用格式rpm -i[installopition] path/to/rpmfile
  • -h選項 : 使用#來顯示安裝進度
  • -v選項 : 顯示安裝過程
  • -vv選項 : 顯示更詳細的安裝過程比-v更詳細,按需求使用
  • –test選項 : 不進行實際安裝操作,而是進行安裝環境的測試,可以查看安裝是否可以成功
  • –nodeps選項 : 忽略依賴關系,這樣即使安裝成功,也可能由于依賴關系造成運行問題
  • –replacepkgs選項 : 覆蓋安裝
  • –force選項 : 強制安裝
  • 對于新安裝程序包,常用的操作是rpm -ivh path/to/rpmfile
  1. 升級選項
  • -U : 升級安裝或全新安裝
  • -F : 升級安裝
  • 同安裝選項一樣,常用組合有-Uvh -Fvh
  • 同安裝選項一樣,也可以使用–test –nodeps選項
  • –oldpackage選項 : 降級安裝舊版本程序包 rpm -U –oldpackage path/to/rpmfile
  1. 卸載
  • -e : 卸載已安裝的rpm程序,使用 rpm -e packagename
  • 使用-e進行卸載時也可以使用–test –nodeps選項
  • –allmatches選項 : 卸載所有匹配的安裝,例如一個rpm程序的多個版本
  • 對于卸載,需要注意的是如果程序包的配置文件在安裝后被修改過,則卸載時并不會刪除這些文件,而是將它們重命名(加后綴 .rpmsave)
  1. 查詢
  • 使用格式rpm -q[queryoption] [packagename] [file]
  • 直接使用rpm -q packagename… : 查詢某程序包是否安裝,包名可以是多個
  • -i選項 : info顯示程序包簡要信息 rpm -qi packagename
  • -a選項 : 顯示已安裝的程序包列表 rpm -qa
  • -f選項 : 后跟一個文件,查詢此文件是由哪個程序包生成的 rpm -qf filename
  • -p選項 : 查詢某個未安裝的程序包,可與i選項連用 rpm -qpi packagename 查詢rpm倉庫中指定的未安裝程序包的簡要信息
  • -l選項 : 顯示某個程序包生成的文件列表 rpm -ql packagename
  • -c選項 : 顯示某程序包生成的配置文件 rpm -qc packagename
  • -d選項 : 顯示某程序包生成的幫助文件 rpm -qd packagename
  • –provides選項 : 顯示程序包提供的capabilities
  • –requires選項 : 顯示程序包所依賴的capabilities
  • –scripts選項 : 查詢程序包安裝或卸載時執行的腳本,這些腳本可以分為以下4類:
    • preinstall : 程序包安裝之前執行的腳本
    • postinstall : 程序包安裝完成之后執行的腳本
    • preuninstall : 程序包卸載之前執行的腳本
    • postuninstall : 程序包卸載之后執行的腳本
  1. 校驗
  • rpm -V packagename : 驗證程序包安裝之后生成的文件是否發生了改變
  • 程序包合法性驗證
    • 先導入驗證密匙文件 rpm –import path/to/key-file
    • 再使用命令驗證程序包 rpm -K path/to/packagefile
  1. 創建rpm包管理數據庫,創建的數據庫文件保存路徑為/var/lib/rpm下
  • –initdb : 初始化數據庫,當rpm包管理數據庫不存在時新建它
  • –rebuilddb : 重建數據庫,無論之前數據庫是否存在
  • –dbpath DIRECTORY : 可以指明建立的數據庫文件保存路徑,即改變默認的/var/lib/rpm,例如 rpm –rebuilddb –dbpath /var/rpmdb

yum命令

yum命令可以更智能的管理和安裝rpm程序包,它可以自動處理程序包之前的依賴關系,使用起來更加方便。

  1. yum的配置文件
  • 全局配置文件/etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
  // yum 緩存的目錄,yum 在此存儲下載的rpm 包和數據庫,定義配置文件中出現的$basearch表示系統的平臺(如i386,
  x86_64這種),$releasever表示OS發行版的主版本號(例如CentOS7.4的主版本號就是7)
keepcache=0
  // 安裝完成后是否保留軟件包,0為不保留(默認為0),1為保留
debuglevel=2
  // Debug 信息輸出等級,范圍為0-10,默認為2
logfile=/var/log/yum.log
  // yum 生成的日志所在
pkgpolicy=newest
 // 包的策略。一共有兩個選項,newest和last,這個作用是如果你設置了多個repository,而同一軟件在不同的
 repository 中同時存在,yum 應該安裝哪一個,如果是newest,則yum會安裝最新版本。如果是last,則yum 會將服務器
 id 以默認方式排序,并選擇最后的那個服務器上的軟件安裝。一般都是選newest
tolerant=0
 // 有1和0兩個選項,表示yum 是否容忍命令行發生與軟件包有關的錯誤,比如你要安裝1,2,3三個包,而其中3此前已經
 安裝了,如果你設為1,則yum 不會出現錯誤信息。默認是0
exactarch=1
  // 有1和0兩個選項,設置為1,則yum 只會安裝和系統平臺匹配的軟件包,例如,yum 不會將x64的軟件包安裝在適合i386的系統中。默認為1
retries=6
 // 網絡連接發生錯誤后的重試次數,如果設為0,則會無限重試。默認值為6
obsoletes=1
  // 這是一個update 的參數,具體可參閱yum(8),簡單的說就是相當于upgrade,允許更新舊的RPM包
gpgcheck=1
  // 是否檢查gpgkey,1為檢查,0為不檢查
plugins=1
  // 是否啟用插件,默認1為允許,0表示不允許
installonly_limit=5
  // 允許同時安裝的程序包個數,這里設置為5個
exclude=selinux*
  // 排除某些軟件在升級名單之外,不讓它們升級,可以用通配符,列表中各個項目要用空格隔開
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release

  • 各repository的配置文件
    文件為/etc/yum.d/*.repo
[base]
  // []中表示此repository的ID,必須唯一不能重復
name=
  // repository的名字
baseurl=
  // repository的路徑,支持ftp:// http:// file://
gpgcheck=1
  // 是否進行gpgkey的檢查,1為檢查,0為不檢查
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  // gpgkey的路徑
enabled=
  // 是否啟用此repository,1為啟用,0為不啟用。可省略,省略時表示啟用
cost=
  // 指明repository的開銷,默認為1000,可省略

  1. yum命令的使用
  • yum install package1 [package2]… 從倉庫源安裝安裝程序包
    根據配置文件的默認設置,如果某程序包存在多個版本,可能會默認安裝最新的版本,如果需要安裝指定版本需要指明package的版本
  • -y選項 安裝卸載時可以使用該選項,例如yum install -y packagename 安裝時就不需要在交互時手動回答yes了
  • –disablerepo= 安裝時禁用某repository
  • –enablerepo= 安裝時啟用某repository
  • –nogpgcheck 安裝時禁止gpgkey校驗
  • yum reinstall package1 [package2]… 重新安裝程序包(可以覆蓋安裝)
  • yum update package1 [package2]… 升級安裝程序包
  • yum downgrade package1 [package2]… 降級安裝程序包
  • yum check-update 檢查有哪些升級程序包可用
  • yum {remove | erase} package1 [package2]… 卸載程序包,卸載時會將依賴于指定要卸載的程序包的相關程序包也卸載
  • yum localinstall /path/to/rpmfile … 安裝本地的程序包文件,安裝時也會智能判斷依賴關系
  • yum localupdate /path/to/rpmfile … 升級安裝本地的程序包文件
  • yum list [all|available|installed|updates|extras|obsoletes] [glob_exp1]… 查看yum倉庫列表,按需求使用選項和glob表達式
  • yum grouplist [hidden] [groupwildcard] 顯示包組列表,按需使用選項(如是否顯示隱藏和使用組通配符等)
  • yum provides|whatprovides feature1 [feature2]… 查看指定的特性(可以是個文件)是由哪個程序包提供的
  • yum deplist package1 [package2]… 查看指定程序包依賴的capabilities
  • yum info package1 … 顯示包簡要信息
  • yum groupinfo group1 … 顯示包組的簡要信息
  • yum groupinstall group1 … 安裝包組
  • yum groupupdate group1 … 升級安裝包組
  • yum groupremove group1 … 卸載包組
  • yum repolist [all|enabled|disabled] 顯示yum倉庫列表
  • yum clean [all|packages|metadata|expire-cache|rpmdb|plugins] 清楚yum緩存數據
  • yum makecache 手動創建yum緩存

CentOS下自建yum倉庫,分別為網絡源和本地源

通過vim命令創建repo文件
網絡yum源

~]# vim /etc/yum.repos.d/networks.repo
[networks]
name=networks
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=0

本地yum源

先將CentOS7光盤掛載至/media/cdrom路徑下
~]# ls /media/cdrom/
CentOS_BuildTag  EFI  EULA  GPL  images  isolinux  LiveOS  Packages  repodata  RPM-GPG-KEY-CentOS-7  RPM-GPG-KEY-CentOS-Testing-7  TRANS.TBL
創建本地repo文件
~]# vim /etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///media/cdrom
gpgcheck=0

查看所有yum源驗證效果,可以看到上面添加的2個yum源已經成功

~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id                                                                                        repo name                                                                             status
epel/7/x86_64                                                                                  Epel                                                                                  12,184
local                                                                                          local                                                                                  9,591
networks/7/x86_64                                                                              networks                                                                               9,591

簡述at和crontab命令

at命令

at命令用于設置一次性的任務計劃,其只執行一次就結束。

at命令是由atd服務提供的:

  • CentOS6可以使用 service atd start 來啟動該服務
  • CentOS7可以使用 systemctl start atd.service 來啟動該服務
  1. 命令使用格式 : at [option] TIME
例如添加一個at任務
~]$ at 15:00    # 15點執行該任務
at> ls /etc     # 輸入需要執行的任務內容
at> <EOT>       # 使用'鍵盤ctrl+D'退出任務編輯
job 4 at Sun Dec 31 15:00:00 2017
  • -l選項 : 也可以使用atq,效果等同,都是顯示所有當前用戶的at任務列表
  • -d選項 : 也可以使用atrm,效果等同,都是刪除一個at任務列表中的at任務
  • -c選項 : 打印任務內容到標準輸出
  1. TIME的格式
  • HH:MM [date] : 其中的date可以是具體年月日(例如2017-12-31),也可以是英文表示的日子(例如December 31),甚至時間上也可以簡化表示(明天下午2點:2pm tomorrow)
  • HH:MM + #(minutes|hours|days|weeks) : 某時刻加一個相對時間表示法(例如2pm + 3days三天后的下午2點)
  1. 實例
~]$ atq    # 顯示當前任務列表
4   Sun Dec 31 15:00:00 2017 a sky
5   Sun Dec 31 14:00:00 2017 a sky
6   Mon Jan  1 07:00:00 2018 a sky
~]$ at -d 6   # 刪除6號任務
~]$ atq
4   Sun Dec 31 15:00:00 2017 a sky
5   Sun Dec 31 14:00:00 2017 a sky
~]$ at -c 4
#!/bin/sh
# atrun uid=1000 gid=1000
# mail sky 0
umask 2
# 此處省略冗長的環境變量內容
ls /etc  # 任務內容
~]$ at -f scripts/num_sum.sh 2pm + 3 days   # 3天后的下午2點執行腳本文件中的內容
job 7 at Wed Jan  3 14:00:00 2018

crontab命令

crontab可以設置周期性任務計劃。它是由crond服務來實現的。

  1. 系統cron任務
  • 它是通過編輯配置文件/etc/crontab來實現的
文件中添加任務的格式
# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

  • 時間表示的4個方式
    • 時間位上的*表示每個有效的取值
25 * * * *      # 這就表示每個整點過25分執行一次任務
    • 時間位上出現*/# 表示相應的位上每#個間隔一次
0 8 * */3 *     # 表示每間隔3天的8:00執行一次
    • 時間位上#-# 表示連續時間
30 1-3 * * *     # 表示每天1:30, 2:30, 3:30分別執行
    • 時間位上#,# 表示離散的時間點
15 9 * * 3,5     # 表示周3和周5的9:15執行
  • command執行的結果,默認會以郵件的形式發送給用戶,如果不想接收郵件,可以使用輸出重定向command &> /dev/null
  1. 用戶cron任務
  • 用戶的cron任務配置文件: /var/spool/cron/路徑下與用戶同名的文件
  • 使用crontab命令來編輯用戶cron任務
    • crontab -e : 直接進入編輯文件
    • crontab -l : 列出已經定義的所有任務
    • crontab -r : 清空列表中的所有任務
制定 每周三凌晨三、五點10分執行某個腳本,輸出當前時間,時間格式為 2017-12-28 10:00:00
~]$ crontab -e
10 3,5 * * 3 /bin/date +"\%F \%H:\%M:\%S"
~]$ crontab -l
10 3,5 * * 3 /bin/date +"\%F \%H:\%M:\%S"

簡述sed常用操作命令,并舉例

sed是一種行編輯器,它可以使用正則表達式進行模式匹配。它在處理文本時,會逐行進行處理,先將當前處理的行存儲在一個臨時緩沖區“模式空間”(pattern space)中,接著用sed命令進行處理,處理完成后,默認將結果送至標準輸出,然后在繼續處理下一行,直至文本的末尾。默認操作下sed不會改變文件的內容,如果想保存sed處理后的結果,可以使用輸出重定向。

 

linux程序包管理
sed.png
  1. 命令格式
    sed [options] ‘command’ file(s)
    sed [options] -f scriptfile file(s)
  2. 參數
  • -e script1 -e script2 : -e選項可以指定多條命令執行
  • -f scriptfile : -f選項可以從文件中讀取命令執行操作,同樣可以指定多個文件處理
  • -n選項 : 僅顯示sed命令處理后的結果
  • -r選項 : 支持擴展的正則表達式
  • -i選項 : 直接修改源文件
  1. sed命令
a\ 在當前行下面插入文本
i\ 在當前行上面插入文本
c\ 把選定的行改為新的文本
= 打印行號
d 刪除,刪除選擇的行
D 刪除模板塊的第一行
! 表示其后面的命令對所有沒有前面的條件匹配的行發生作用
s 替換指定字符
g 表示行內全面替換
h 拷貝模板塊的內容到內存中的緩沖區
H 追加模板塊的內容到內存中的緩沖區
g 獲得內存緩沖區的內容,并替代當前模板塊中的文本
G 獲得內存緩沖區的內容,并追加到當前模板塊文本的后面
x 互換當前模式空間和內存緩沖區的內容
n 讀取下一個輸入行進入模式空間
N 追加下一個輸入行到模式空間現有數據的后面
p 打印模板塊的行
P(大寫) 打印模板塊的第一行
w file 把處理過的結果寫入文件
r file 讀取文件內容并追加進入模式空間

關于n, N這兩個命令的執行方式是容易搞錯的地方,可以參考下面的圖示

 

linux程序包管理
sed_n1.png

 

linux程序包管理
sed_n2.png

 

linux程序包管理
sedN2.png
  1. sed處理文本示例
僅顯示以"#"開頭的行
~]$ sed -n '/^#/p' /etc/fstab
在所有"#"后添加"*"
~]$ sed 's/\(#\)/\1*/g' /etc/fstab
刪除第5行及其之后的所有行
~]$ sed '5,$d' /etc/fstab
刪除每一行開頭的"#"并刪除文件中的空白行
~]$ sed -e 's/^#//g' -e '/^[[:space:]]*$/d' /etc/fstab
-r選項使用擴展正則表達式,"&"表示每一個匹配到的內容
~]$ echo "this is a test line" | sed -r 's/\w+/[&]/g'
[this] [is] [a] [test] [line]
將issue文件的內容添加到fstab文件每一個以"#"開頭的行之后
~]$ sed '/^#/r /etc/issue' /etc/fstab
將this is a test添加到以"#"開頭的行之后
~]$ sed '/^#/a\this is a test' /etc/fstab
將this is a test添加到以"#"開頭的行之前
~]$ sed '/^#/i\this is a test' /etc/fstab
打印以"#"開頭的行的行號
~]$ sed '/^#/=' /etc/fstab
為文件每一行添加行號
~]$ sed = /etc/fstab | sed 'N;s/\n/: /g'
1: 
2: #
3: # /etc/fstab

刪除文件的偶數行
~]$ sed 'n;d' /etc/fstab
僅輸出文件最后2行
~]$ sed 'N;$!D' /etc/fstab

關于難點N的處理邏輯的實例解析
~]$ cat ./123
1
2
3
4
5
~]$ sed 'N;P' ./123
1
1
2
3
3
4
5
~]$ sed -n 'N;P' ./123
1
3
  / 從上面的多次處理結果可以得出sed從首行開始每次有2行進入模式空間進行處理,
  P命令打印空間中的第1行,當讀取到最后一行第5行時,由于沒有下一行了所以無法
  執行N命令,于此同時分號后面的P命令也沒有被執行

將文件的所有行逆序輸出
~]$ sed '1!G;h;$!d' ./123
5
4
3
2
1

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90765

(0)
skysky
上一篇 2018-01-01 21:08
下一篇 2018-01-01 21:55

相關推薦

  • N26-第九周

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash # # # NUM1=0 NUM2=0 for i in `cut -d: -f7 /etc/passwd` ;do if [[ “$i” = ‘/bin/bash…

    Linux干貨 2017-03-15
  • 學習了點命令

    什么是shell 它提供了用戶與內核進行交互操作的一種接口shell它接受用戶輸入的命令并把它送入內核去執行 shell也被稱為Linux的命令解釋器 shell是一種高級程序設計 語言 查看當前系統使用了那個shell            &nb…

    Linux干貨 2017-07-13
  • nginx服務

      Nginx 提供web服務,也是工作在應用層的負載均衡器,擁有強大的緩存能力。 本章主要學習,web server、web reverse proxy(http)和cache 緩存服務器使用較多的是varnish+squid: 任何緩存都是反向代理,但是varnish反向代理能力還是與nginx有很大差距。所以,varnish還是做緩存服務,而…

    Linux干貨 2016-11-01
  • Linux基礎-用戶管理相關操作-week 4

    1.復制/etc/skel 目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其他用戶均沒有任何訪問權限  cp /etc/skel /home/tuser1 -rf chmod og=  /home/tuser1 -R 2.編輯/etc/group文件添加組hadoop echo hadoop:x:503 …

    Linux干貨 2016-11-21
  • Linux基于OpenSSL實現私有CA構建

    前言 隨著互聯網的迅猛發展,網絡通信已經成為傳遞信息的主要途徑。而通信時的數據傳輸大部分卻是明文傳輸的,在網絡這個不安全的環境下,如果沒有一套數據加密機制,就會導致敏感信息和重要數據泄露,引起不可估量的損失。而OpenSSL正好彌補了這一缺憾,那什么是OpenSSL呢?OpenSSL是一套強大的具有加密功能的組件,它包含libcrypto(公共加密庫)、li…

    Linux干貨 2015-04-13
  • CentOS Linux 系統計劃任務簡單介紹

    CentOS  Linux 系統計劃任務簡單介紹 §·linux 系統計劃任務 ※·linux中Centos計劃任務的程序為:cron 周期性任務計劃:cron 相關的程序包: cronie: 主程序包,提供crond守護進程及相關輔助工具 cronie-anacron:cronie的補充程序;用于監控cronie任務執行狀況;如cronie中的任…

    Linux干貨 2016-09-08
欧美性久久久久