Linux學習博客5

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

rpm命令

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

  • rpm [option] path/to/rpmfile
  1. -i安裝選項
  • 使用格式rpm -i[installopition] path/to/rpmfile
  • -h選項 : 使用#來顯示安裝進度
  • -v選項 : 顯示安裝過程
  • -vv選項 : 顯示更詳細的安裝過程比-v更詳細筒捺,按需求使用
  • --test選項 : 不進行實際安裝操作司浪,而是進行安裝環(huán)境的測試微饥,可以查看安裝是否可以成功
  • --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選項 : 查詢程序包安裝或卸載時執(zhí)行的腳本,這些腳本可以分為以下4類:
    • preinstall : 程序包安裝之前執(zhí)行的腳本
    • postinstall : 程序包安裝完成之后執(zhí)行的腳本
    • preuninstall : 程序包卸載之前執(zhí)行的腳本
    • postuninstall : 程序包卸載之后執(zhí)行的腳本
  1. 校驗
  • rpm -V packagename : 驗證程序包安裝之后生成的文件是否發(fā)生了改變
  • 程序包合法性驗證
    • 先導入驗證密匙文件 rpm --import path/to/key-file
    • 再使用命令驗證程序包 rpm -K path/to/packagefile
  1. 創(chuàng)建rpm包管理數(shù)據(jù)庫个曙,創(chuàng)建的數(shù)據(jù)庫文件保存路徑為/var/lib/rpm下
  • --initdb : 初始化數(shù)據(jù)庫锈嫩,當rpm包管理數(shù)據(jù)庫不存在時新建它
  • --rebuilddb : 重建數(shù)據(jù)庫,無論之前數(shù)據(jù)庫是否存在
  • --dbpath DIRECTORY : 可以指明建立的數(shù)據(jù)庫文件保存路徑垦搬,即改變默認的/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 包和數(shù)據(jù)庫米绕,定義配置
  文件中出現(xiàn)的$basearch表示系統(tǒng)的平臺(如i386,x86_64這種)瑟捣,
  $releasever表示OS發(fā)行版的主版本號(例如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 是否容忍命令行發(fā)生與軟件包有關的
 錯誤,比如你要安裝1,2,3三個包磷蜀,而其中3此前已經安裝了召耘,如果你
 設為1,則yum 不會出現(xiàn)錯誤信息褐隆。默認是0
exactarch=1
  // 有1和0兩個選項污它,設置為1,則yum 只會安裝和系統(tǒng)平臺匹配的軟件
  包庶弃,例如衫贬,yum 不會將x64的軟件包安裝在適合i386的系統(tǒng)中。默認為1
retries=6
 // 網絡連接發(fā)生錯誤后的重試次數(shù)歇攻,如果設為0固惯,則會無限重試。默認
 值為6
obsoletes=1
  // 這是一個update 的參數(shù)缴守,具體可參閱yum(8)葬毫,簡單的說就是相當
  于upgrade,允許更新舊的RPM包
gpgcheck=1
  // 是否檢查gpgkey屡穗,1為檢查贴捡,0為不檢查
plugins=1
  // 是否啟用插件,默認1為允許村砂,0表示不允許
installonly_limit=5
  // 允許同時安裝的程序包個數(shù)烂斋,這里設置為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]... 從倉庫源安裝安裝程序包
    根據(jù)配置文件的默認設置,如果某程序包存在多個版本柄错,可能會默認安裝最新的版本舷夺,如果需要安裝指定版本需要指明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緩存數(shù)據(jù)
  • yum makecache 手動創(chuàng)建yum緩存

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

通過vim命令創(chuàng)建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
創(chuàng)建本地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命令用于設置一次性的任務計劃,其只執(zhí)行一次就結束池颈。

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

  • CentOS6可以使用 service atd start 來啟動該服務
  • CentOS7可以使用 systemctl start atd.service 來啟動該服務
  1. 命令使用格式 : at [option] TIME
例如添加一個at任務
~]$ at 15:00    # 15點執(zhí)行該任務
at> ls /etc     # 輸入需要執(zhí)行的任務內容
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
# 此處省略冗長的環(huán)境變量內容
ls /etc  # 任務內容
~]$ at -f scripts/num_sum.sh 2pm + 3 days   # 3天后的下午2點執(zhí)行腳本文件中的內容
job 7 at Wed Jan  3 14:00:00 2018

crontab命令

crontab可以設置周期性任務計劃脯爪。它是由crond服務來實現(xiàn)的。

  1. 系統(tǒng)cron任務
  • 它是通過編輯配置文件/etc/crontab來實現(xiàn)的
文件中添加任務的格式
# 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分執(zhí)行一次任務
    • 時間位上出現(xiàn)*/# 表示相應的位上每#個間隔一次
0 8 * */3 *     # 表示每間隔3天的8:00執(zhí)行一次
    • 時間位上#-# 表示連續(xù)時間
30 1-3 * * *     # 表示每天1:30, 2:30, 3:30分別執(zhí)行
    • 時間位上#,# 表示離散的時間點
15 9 * * 3,5     # 表示周3和周5的9:15執(zhí)行
  • command執(zhí)行的結果矿微,默認會以郵件的形式發(fā)送給用戶痕慢,如果不想接收郵件,可以使用輸出重定向command &> /dev/null
  1. 用戶cron任務
  • 用戶的cron任務配置文件: /var/spool/cron/路徑下與用戶同名的文件
  • 使用crontab命令來編輯用戶cron任務
    • crontab -e : 直接進入編輯文件
    • crontab -l : 列出已經定義的所有任務
    • crontab -r : 清空列表中的所有任務
制定 每周三凌晨三涌矢、五點10分執(zhí)行某個腳本掖举,輸出當前時間,時間格式為 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是一種行編輯器塔次,它可以使用正則表達式進行模式匹配。它在處理文本時名秀,會逐行進行處理励负,先將當前處理的行存儲在一個臨時緩沖區(qū)“模式空間”(pattern space)中,接著用sed命令進行處理匕得,處理完成后继榆,默認將結果送至標準輸出,然后在繼續(xù)處理下一行汁掠,直至文本的末尾略吨。默認操作下sed不會改變文件的內容,如果想保存sed處理后的結果考阱,可以使用輸出重定向翠忠。


sed.png
  1. 命令格式
    sed [options] 'command' file(s)
    sed [options] -f scriptfile file(s)

  2. 參數(shù)

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

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


sed_n1.png

sed_n2.png

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

刪除文件的偶數(shù)行
~]$ 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行時董虱,由于沒有下一行了所以無法
  執(zhí)行N命令扼鞋,于此同時分號后面的P命令也沒有被執(zhí)行

將文件的所有行逆序輸出
~]$ sed '1!G;h;$!d' ./123
5
4
3
2
1
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市愤诱,隨后出現(xiàn)的幾起案子云头,更是在濱河造成了極大的恐慌,老刑警劉巖淫半,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溃槐,死亡現(xiàn)場離奇詭異,居然都是意外死亡科吭,警方通過查閱死者的電腦和手機昏滴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來对人,“玉大人谣殊,你說我怎么就攤上這事∥” “怎么了姻几?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長势告。 經常有香客問我蛇捌,道長,這世上最難降的妖魔是什么咱台? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任络拌,我火速辦了婚禮,結果婚禮上回溺,老公的妹妹穿的比我還像新娘盒音。我一直安慰自己,他們只是感情好馅而,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著譬圣,像睡著了一般瓮恭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上厘熟,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天屯蹦,我揣著相機與錄音维哈,去河邊找鬼。 笑死登澜,一個胖子當著我的面吹牛阔挠,可吹牛的內容都是我干的。 我是一名探鬼主播脑蠕,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼购撼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谴仙?” 一聲冷哼從身側響起迂求,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晃跺,沒想到半個月后揩局,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡掀虎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年凌盯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烹玉。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡驰怎,死狀恐怖,靈堂內的尸體忽然破棺而出春霍,到底是詐尸還是另有隱情砸西,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布址儒,位于F島的核電站芹枷,受9級特大地震影響,放射性物質發(fā)生泄漏莲趣。R本人自食惡果不足惜鸳慈,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望喧伞。 院中可真熱鬧走芋,春花似錦、人聲如沸潘鲫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溉仑。三九已至挖函,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浊竟,已是汗流浹背怨喘。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工津畸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人必怜。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓肉拓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親梳庆。 傳聞我的和親對象是個殘疾皇子暖途,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容