馬哥Linux第五周作業

at,cron,rpm,yum,sed

1.at命令簡述

at命令的功能:在未來某一時刻執行某個任務

命令格式:at [OPTION…] TIME

此處的TIME表示指定的時間點,常用的格式如下所示:

HH:MM [YYYY-mm-dd]

noon,midnight,teatime

tomorrow

now + count time-units 此處的units表示單位,如:minutes,hours,days,weeks

常用的選項有:

-l:顯示所有任務,相當于atq命令

-f FILE:從指定的文件中讀取任務

-d #:刪除指定的任務,相當于atrm #

-c #:查看指定的作業內容

注意:作業執行的結果是以郵件的形式發送給提交作業的用戶

 

2.cron:周期性的任務計劃

cronie作為crond服務的主程序包,為其提供守護進程和相關輔助程序

要是用cron,首先要確保crond的守護進程處于運行狀態

在CentOS 6 中,使用service crond status查詢運行狀態

在CentOS 7 中,使用systemctl status crond.service查詢運行狀態

向crond服務提交任務的方式不同于at,需要使用專用的配置文件,而且文件有固定的格式;不建議直接使用文本編輯器直接編輯該文件,而是使用crontab命令

 

crond的任務分為兩類:系統crond任務、用戶crond任務

系統crond任務:主要用于實現系統自身的維護,實現方式為手動編輯/etc/crontab文件

用戶crond任務:實現用戶指定的任務計劃,實現方式為使用crontab命令

系統crond任務的配置文件:/etc/crontab

[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 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

該文件的每一行定義一個周期性任務

此處的環境變量PATH不同于用戶登陸后獲得的環境變量PATH,因此建議使用命令時使用絕對路徑,或者自定義PATH環境變量

執行結果以郵件的方式發送給用戶

用戶crond任務的配置文件:/var/spool/cron/USERNAME

該文件的格式與系統crond任務的格式相同;同樣的,執行的結果也會以郵件的方式發送給制定此任務的用戶

任務的書寫格式:* * * * * command to be executed

其中五個*的含義分別為:

每小時的第幾分鐘

每天的幾點

每月的第幾天

每年的幾月

每周幾

時間的表示方法有下面幾種形式:

⑴特定值

示例:

3 * * * *:每小時的第3分鐘執行一次

3 4 * * 5:每周5的4點3分執行一次

⑵離散取值:在時間點上用逗號隔開的多個值

示例:

9 8 * * 3,7:每周3和周日的8點9分各執行一次

⑶連續取值:在時間點之間用“-”連接開頭和結尾

示例:

0 9-18 * * 1-5:周一至周五的9點到18點,每小時執行一次
⑷在指定時間點上定義步長:*/#

注意:

指定的時間點不能被步長整除時,其意義將不復存在
最小時間單位是分鐘

crontab命令的使用方法:
格式:
-e:編輯任務
-l:列出用戶的所有任務
-r:移除用戶的所有任務,即刪除/var/spool/cron/USERNAME文件
-i:在使用-r選項移除所有任務時提示用戶確認
-u user:root用戶可為指定用戶管理cron任務

注意:運行結果以郵件通知當前用戶,如果拒絕接收郵件
COMMAND > /dev/nul
COMMAND &> /dev/nul
注意:定義COMMAND時,如果命令需要用到%,需要使用”\”對其轉義
3.rpm命令
rpm作為redhat系列的程序包管理器。具有將編譯好的應用程序的各個組成文件打包成一個或幾個程序包,從而方便的實現程序包的安裝、升級、卸載、查詢、校驗的功能
程序包的組成:文件清單、安裝或卸載時執行的腳本
rpm數據庫的組成:程序包的名稱和版本、依賴關系、功能說明、安裝生成的文件的路徑及校驗碼信息
rpm的命令格式:rpm [OPTION] [PACKAGE_FILE]
按照功能可以分為以下幾個方向:
安裝:-i,–install
升級:-U,–update或-F,–freshen
卸載:-e,–erase
查詢:-q,–query
校驗:-V,–verify
數據庫維護:在CentOS 7中 –initdb,–rebuilddb
下面詳細說明其使用方法:
安裝:rpm {-i|–install} [install-options] PACKAGE_FILE …
基本使用方法為:rpm -ivh?PACKAGE_FILE …
例如:
[root@localhost Packages]# rpm -ivh zsh-5.0.2-7.el7.x86_64.rpm
警告:zsh-5.0.2-7.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中… ################################# [100%]
正在升級/安裝…
1:zsh-5.0.2-7.el7 ################################# [100%]
通用選項:
-v:輸出詳細信息
-vv:輸出更加詳細的信息
install-options:
-h:–hash,以#的方式輸出進度條,每個#表示2%的進度
–test:測試安裝,檢查并報告依賴關系及沖突消息等,并不是真正的安裝
[root@localhost Packages]# rpm -ivh –test zsh-5.0.2-7.el7.x86_64.rpm
警告:zsh-5.0.2-7.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中… ################################# [100%]
[root@localhost Packages]# rpm -q zsh
未安裝軟件包 zsh
–nodeps:忽略依賴關系
–replacepkgs:重新安裝
–nosignature:不檢查簽名信息和來源合法性
[root@localhost Packages]# rpm -ivh –nosignature zsh-5.0.2-7.el7.x86_64.rpm
準備中… ################################# [100%]
正在升級/安裝…
1:zsh-5.0.2-7.el7 ################################# [100%]
–nodigest:不檢查包完整性信息
注意:rpm安裝程序包時,如果程序包中有腳本,也會一并執行,這些腳本是:
preinstall:安裝過程開始之前執行的腳本
postinstall:安裝過程結束后執行的腳本
preuninstall:卸載過程開始之前執行的腳本
postuninstall:卸載過程結束后執行的腳本
如果不想執行這些腳本,可以使用下面的幾個選項:
–noscripts:不執行所有腳本
%pre:–nopre,不執行安裝過程開始之前執行的腳本
%post:–nopost,不執行安裝過程結束后執行的腳本
%preun:–nopreun,不執行卸載過程開始之前執行的腳本
%postun:–nopostun,不執行卸載過程結束后執行的腳本
升級:
rpm {-U|–ipdate} [install-options]?PACKAGE_FILE …
rpm {-F|–ipdate} [install-options]?PACKAGE_FILE …
-U:升級或安裝
-F:升級
基本使用方法:
rpm -Uvh?PACKAGE_FILE …
rpm -Fvh?PACKAGE_FILE …
升級所使用的install-options與安裝的基本相同
–oldpackage:降級
–froce:強制升級
注意:
⑴不要對內核做升級操作;Linux支持多內核版本并存,因此直接安裝新版本內核
⑵如果某原程序包的配置文件安裝后曾被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供

卸載:rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–test] PACKAGE_NAME …
此處的PACKAGE_NAME 不同于安裝和升級時的PACKAGE_FILE,它指的是程序包名而不是程序包文件的名稱,例如在刪除zsh時:
[root@localhost Packages]# rpm -e zsh
–allmatches:卸載所有匹配指定名稱的程序包的各個版本
–nodeps:忽略依賴關系
–test:測試卸載
–noscripts:不執行腳本
查詢:rpm {-q|–query} [select-options] [query-options]
select-options:
PACKAGE_NAME:查詢指定的程序包是否已經安裝及其版本號
[root@localhost Packages]# rpm -q yum
yum-3.4.3-125.el7.centos.noarch
-a:–all,查詢所有已經安裝的程序包
-f FILE:查詢指定的文件由哪個程序包安裝所生成
[root@localhost Packages]# rpm -qf /etc/passwd
setup-2.8.71-5.el7.noarch
-g GROUP:查詢安裝了指定的程序包組中的哪些程序包
-p PACHAGE_FILE:用于實現對未安裝的程序包執行查詢操作;會結合下面的查詢選項舉例
–whatprovides CAPABILITY:查詢指定的能力由哪個程序包提供
[root@localhost Packages]# rpm -q –whatprovides yum-allow-downgrade
yum-3.4.3-125.el7.centos.noarch
–whatrequires?CAPABILITY:查詢指定的能力被哪個程序包依賴
query-options:
–changelog:查詢程序包的changelog;
查詢已安裝的程序包:

[root@localhost Packages]# rpm -q –changelog yum | less
* 四 3月 05 2015 CentOS Sources <bugs@centos.org> – 3.4.3-125.el7.centos
– CentOS yum config
– use the CentOS bug tracker url
– retain installonly limit of 5
– ensure distrover is always from centos-release
– Make yum require yum-plugin-fastestmirror

* 一 1月 12 2015 Valentina Mukhamedzhanova <vmukhame@redhat.com> – 3.4.3-125
– Roll back the broken lvm patch.
– Related: bug#1047793

查詢未安裝的程序包文件

[root@localhost Packages]# rpm -q -p zsh-5.0.2-7.el7.x86_64.rpm –changelog | less
警告:zsh-5.0.2-7.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
* 二 1月 28 2014 James Antill <james@fedoraproject.org> – 5.0.2-7
– Remove unneeded build require on tetex.
– Resolves: rhbz#1037828
– Depend on hostname package instead of /bin/hostname.

* 五 1月 24 2014 Daniel Mach <dmach@redhat.com> – 5.0.2-6
– Mass rebuild 2014-01-24

* 五 12月 27 2013 Daniel Mach <dmach@redhat.com> – 5.0.2-5
– Mass rebuild 2013-12-27

-l:–list,查詢程序包安裝生成的程序文件列表;也可以用于查詢未安裝的程序包在安裝后會生成哪些程序文件
查詢已安裝的程序包
[root@localhost Packages]# rpm -ql yum
/etc
/etc/bash_completion.d
/etc/bash_completion.d/yum
/etc/bash_completion.d/yummain.py
/etc/cron.daily
/etc/cron.daily/0yum-daily.cron
/etc/cron.hourly
查詢未安裝的程序包文件
[root@localhost Packages]# rpm -q -p zsh-5.0.2-7.el7.x86_64.rpm -l | less
警告:zsh-5.0.2-7.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
/bin/zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc
/usr/lib64/zsh
/usr/lib64/zsh/5.0.2
-i:–info,查詢程序包的相關信息、版本號、大小、所屬的包組等;也可以用于查詢未安裝的程序包文件
-c:查詢指定的程序包提供的配置文件;也可以用于查詢未安裝的程序包文件
-d:查詢指定的程序包提供的幫助文件;也可以用于查詢未安裝的程序包文件
–provides:查詢指定的程序包所提供的CAPABILITY;也可以用于查詢未安裝的程序包文件
[root@localhost Packages]# rpm -q –provides yum
config(yum) = 3.4.3-125.el7.centos
yum = 3.4.3-125.el7.centos
yum-allow-downgrade = 1.1.20-0.yum
yum-basearchonly = 1.1.9.yum
yum-plugin-allow-downgrade = 1.1.22-0.yum
yum-plugin-basearchonly = 1.1.9.yum
yum-plugin-downloadonly = 3.4.3-44.yum
yum-plugin-protect-packages = 1.1.27-0.yum
yum-plugin-security = 3.4.3-84.yum
yum-presto = 3.4.3-66.yum
yum-protect-packages = 1.1.27-0.yum
yum-skip-broken = 1.1.18.yum
-R:查詢指定的程序包的依賴關系;也可以用于查詢未安裝的程序包文件
[root@localhost Packages]# rpm -q -R yum
/bin/bash
/usr/bin/python
config(yum) = 3.4.3-125.el7.centos
cpio
diffutils
pygpgme
pyliblzma
python >= 2.4
python(abi) = 2.7
python-iniparse
python-sqlite
python-urlgrabber >= 3.9.0-8
pyxattr
rpm >= 0:4.4.2
rpm-python
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
yum-metadata-parser >= 1.1.0
yum-plugin-fastestmirror
rpmlib(PayloadIsXz) <= 5.2-1
–scripts:查詢指定的程序包自帶的腳本
校驗:rpm {-V|–verify} [select-options] [verify-options]
檢查程序包在安裝后是否被修改過
例如:在安裝zsh后修改其安裝后所生成的文件,校驗結果如下
[root@localhost Packages]# rpm -V zsh
S.5….T. c /etc/zlogin
其中S.5….T. 的每個字符都有其特殊含義:
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
如果在未導入密鑰文件的情況下安裝程序包,會有相應的提示:
[root@localhost Packages]# rpm -ivh –test zsh-5.0.2-7.el7.x86_64.rpm
警告:zsh-5.0.2-7.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中… ################################# [100%],
以系統自帶光盤為例,我們在掛載光盤文件后,可以看到文件列表中的RPM-GPG-KEY-CentOS-7,該文件就是密鑰文件
使用rpm –improt 密鑰文件
[root@localhost media]# rpm –import RPM-GPG-KEY-CentOS-7
然后再次安裝程序包,就不會顯示剛才的告警信息
[root@localhost Packages]# rpm -ivh –test zsh-5.0.2-7.el7.x86_64.rpm
準備中… ################################# [100%]
安裝此組織簽名的程序包時,會自動進行驗證,如上所示;另外,也可以使用rpm -K PACKAGE_FILE ..進行手動驗證
[root@localhost Packages]# rpm -K zsh-5.0.2-7.el7.x86_64.rpm
zsh-5.0.2-7.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 確定
數據庫維護:
rpm {–initdb|–rebuilddb} [-v] [–dbpath DIRECTORY] [–root DIRECTORY]
–initdb:初始化數據庫,當前無任何數據庫可初始化創建一個新的,有數據庫時不執行任何操作
–rebuilddb:重新構建,通過讀取當前系統上所有已經安裝過的程序包進行重新創建

rpm程序包管理器的數據庫路徑:/var/lib/rpm/
查詢操作:通過此處的數據庫進行
該命令的幫助手冊的獲取方式:
CentOS 6 man rpm
CentOS 7 man rpmdb
4.yum
yum的 配置文件
/etc/yum.conf:為所有yum倉庫提供公共配置
/etc/yum.repos.d/*.repo:為某一個倉庫提供配置
可以使用man yum.conf查看配置文件的詳細介紹
yum倉庫配置文件的基本格式及含義:
[repositoryid] 倉庫名稱
name=Some name for this repository 該倉庫的詳細描述
baseurl=url://path/to/repository/ 指向該倉庫中的程序包所對應的repodata的路徑
enabled={0|1} 是否啟用本倉庫,默認啟用
gpgcheck={0|1} 是否檢查合法性和完整性
gpgkey=URL 指明密鑰文件的訪問路徑
enablegroups={0|1} 是否支持組批量管理程序包,默認支持
failovermethod={roundrobin|priority} 默認為輪詢,如果選擇優先級,數值越小優先級越高
cost=# 默認#為1000
yum命令:yum [OPTIONS] [COMMAND] [PACKAGE…]
這里通過自制的yum倉庫來舉例說明:
[root@localhost yum.repos.d]# cat base.repo
[base]
name=CentOS 7.1 base rpm
baseurl=file:///media
gpgcheck=0
enable=1
顯示倉庫列表:
repolist [all|enabled|disabled]
默認顯示啟用的倉庫列表
[root@localhost yum.repos.d]# yum repolist
已加載插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
源標識 源名稱 狀態
base CentOS 7.1 base rpm 9,591
repolist: 9,591
顯示程序包
list
默認顯示已安裝和可以安裝的所有程序包
顯示格式如下:
zenity.x86_64 3.8.0-4.el7 @anaconda
zip.x86_64 3.0-10.el7 @anaconda
zlib.x86_64 1.2.7-13.el7 @anaconda
可安裝的軟件包
389-ds-base.x86_64 1.3.6.1-16.el7 base
389-ds-base-devel.x86_64 1.3.6.1-16.el7 base
389-ds-base-libs.x86_64 1.3.6.1-16.el7 base
其中@anaconda表示已經安裝的軟件包,base表示在倉庫bash中可以安裝的軟件包
其它選項:
yum list [all | glob_exp1] [glob_exp2] […]
yum list available [glob_exp1] […]
顯示所有在倉庫中卻未安裝的程序包
yum list updates [glob_exp1] […]
顯示所有可更新的程序包
yum list installed [glob_exp1] […]
顯示所有已安裝的程序包

安裝程序包
install PACKAGE1 PACKAGE2 …
重新安裝程序包
reinstall?PACKAGE1 PACKAGE2 …
升級程序包
update?PACKAGE1 PACKAGE2 …
降級
downgrade?PACKAGE1 PACKAGE2 …
檢查可用升級:
check-update [PACKAGE1 PACKAGE2 …]
如果命令后不指定軟件包,表示查詢所有可用升級;如果指定軟件包,表示查詢指定的軟件包的可用升級

[root@localhost yum.repos.d]# yum check-update firefox gdm
已加載插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile

firefox.x86_64 52.2.0-2.el7.centos base
gdm.x86_64 1:3.22.3-11.el7 base
取代的軟件包
firefox.x86_64 52.2.0-2.el7.centos base
firefox.x86_64 31.4.0-1.el7.centos @anaconda
gdm.x86_64 1:3.22.3-11.el7 base
gdm-libs.x86_64 1:3.8.4-32.el7 @anaconda

卸載程序包

remove | erase?PACKAGE1 PACKAGE2 …

?會刪除依賴此程序包的其他所有程序包
查詢程序包的信息
info [PACKAGE1 PACKAGE2 …]
查看指定的特性或者文件是由哪個程序包提供的
provides | whatprovides feature1 [feature2] […]

[root@localhost yum.repos.d]# yum provides /etc/yum.conf
已加載插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
yum-3.4.3-154.el7.centos.noarch : RPM package installer/updater/manager
源 :base
匹配來源:
文件名 :/etc/yum.conf

yum-3.4.3-125.el7.centos.noarch : RPM package installer/updater/manager
源 :@anaconda
匹配來源:
文件名 :/etc/yum.conf

清理本地yum緩存

clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
構建緩存
makecache [fast]
注意:如果添加或刪除了倉庫,建議清理本地緩存再重新構建緩存
搜索程序包名和概要信息
search string1 [string2] […]

[root@localhost yum.repos.d]# yum search zsh
已加載插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
=============================================================== N/S matched: zsh ===============================================================
zsh-html.x86_64 : Zsh shell manual in html format
zsh.x86_64 : Powerful interactive shell

名稱和簡介匹配 only,使用“search all”試試。

查詢指定的程序包所依賴的程序包

deplist?PACKAGE1 PACKAGE2 …

[root@localhost yum.repos.d]# yum deplist zsh
已加載插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
軟件包:zsh.x86_64 5.0.2-28.el7
依賴:/bin/sh
provider: bash.x86_64 4.2.46-28.el7
依賴:/sbin/install-info
provider: info.x86_64 5.1-4.el7
依賴:coreutils
provider: coreutils.x86_64 8.22-18.el7
依賴:grep
provider: grep.x86_64 2.20-3.el7
依賴:libc.so.6(GLIBC_2.15)(64bit)
provider: glibc.x86_64 2.17-196.el7
依賴:libdl.so.2()(64bit)
provider: glibc.x86_64 2.17-196.el7
依賴:libdl.so.2(GLIBC_2.2.5)(64bit)
provider: glibc.x86_64 2.17-196.el7
依賴:libm.so.6()(64bit)
provider: glibc.x86_64 2.17-196.el7
依賴:libm.so.6(GLIBC_2.2.5)(64bit)
provider: glibc.x86_64 2.17-196.el7
依賴:libncursesw.so.5()(64bit)
provider: ncurses-libs.x86_64 5.9-13.20130511.el7
依賴:librt.so.1()(64bit)
provider: glibc.x86_64 2.17-196.el7
依賴:librt.so.1(GLIBC_2.2.5)(64bit)
provider: glibc.x86_64 2.17-196.el7
依賴:libtinfo.so.5()(64bit)
provider: ncurses-libs.x86_64 5.9-13.20130511.el7
依賴:rtld(GNU_HASH)
provider: glibc.x86_64 2.17-196.el7
provider: glibc.i686 2.17-196.el7

查看yum事務歷史

history?[info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

[root@localhost yum.repos.d]# yum history list
已加載插件:fastestmirror, langpacks
ID | 登錄用戶 | 日期和時間 | 操作 | 變更數
——————————————————————————-
2 | root <root> | 2018-01-14 15:26 | Install | 1
1 | 系統 <空> | 2017-12-15 06:20 | Install | 1217
history list

查看詳細信息
[root@localhost yum.repos.d]# yum history info
已加載插件:fastestmirror, langpacks
事務 ID: 2
起始時間 : Sun Jan 14 15:26:42 2018
啟動 RPM 數據庫 : 1217:32b8cea72dada528cae6c6f2ec938445bb6ca221
結束時間 : 15:26:45 2018 (3 秒)
結束 RPM 數據庫 : 1218:68bf5357543eaaed46d8f9551eca0cd3ca80ffcb
用戶 : root <root>
返回碼 : 成功
命令行 : install zsh
事務完成屬主:
已安裝 rpm-4.11.1-25.el7.x86_64 @anaconda
已安裝 yum-3.4.3-125.el7.centos.noarch @anaconda
已安裝 yum-plugin-fastestmirror-1.1.31-29.el7.noarch @anaconda
已變更的包:
安裝 zsh-5.0.2-7.el7.x86_64 @base
history info

 

安裝及升級本地程序包:
* localinstall rpmfile1 [rpmfile2] […]
(maintained for legacy reasons only – use install)
* localupdate rpmfile1 [rpmfile2] […]
(maintained for legacy reasons only – use update)
這兩個命令可以安裝或升級下載到本地的rpm包,并可以利用yum的特性解決依賴關系;但是在CentOS6和7中,這兩個命令已經被install和update所取代
包組管理的相關命令:
* groups […]
在CentOS 6中,該命令的格式如下:
groupinstall group1 [group2] …
groupupdate group1 [group2] …
grouplist group1 [group2] …
groupremove group1 [group2] …
groupinfo group1 [group2] …
而在CentOS 7中,也可以使用如下格式:
group install group1 [group2] …
group update group1 [group2] …
group list group1 [group2] …
group remove group1 [group2] …
group info group1 [group2] …
因實驗虛擬機的語言環境是中文,所以查詢到的包組名稱是中文,雖然這并不影響安裝等操作,但還是建議使用英文環境,避免不必要的錯誤
[root@localhost yum.repos.d]# yum grouplist
已加載插件:fastestmirror, langpacks
沒有安裝組信息文件
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
Available environment groups:
最小安裝
基礎設施服務器
計算節點
文件及打印服務器
基本網頁服務器
虛擬化主機
帶 GUI 的服務器
GNOME 桌面
KDE Plasma Workspaces
開發及生成工作站
可用組:
傳統 UNIX 兼容性
兼容性程序庫
圖形管理工具
安全性工具
開發工具
控制臺互聯網工具
智能卡支持
科學記數法支持
系統管理
系統管理工具
完成
如何使用光盤當做本地yum倉庫:
⑴掛載光盤至某目錄
mount -r -t iso9660 /dev/cdrom MOUNT_POINT
或mount /dev/cdrom MOUNT_POINT
⑵創建配置文件

[root@localhost yum.repos.d]# cat base.repo
[base]
name=CentOS 7.1 base rpm
baseurl=file:///media
gpgcheck=0
enable=1
yum的命令行選項:
–nogpgcheck:禁止進行gpg check
-y:自動回答為yes
-q:靜默模式
–disablerepo=repoidglob:臨時禁用此處指定的repo
–enablerepo=repoidglob:臨時啟用此處指定的repo
–noplugins:禁用所有插件

createrepo:創建repodata
格式:createrepo [options] <directory>

sed命令:stream editor 流編輯器
無標題
sed的處理流程概述:
⑴sed命令處理時會將原文件的每一行讀取到模式空間中
⑵模式空間中的每一行文本會受到來自匹配模式的檢查
⑶如果這一行不滿足匹配條件,默認會將其輸出到標準輸出;
如果這一行滿足匹配條件,則會對其進行相應的編輯操作
⑷匹配到的行在編輯操作后會將處理的結果輸出到標準輸出
命令格式:sed [OPTIONS…] “SCRIPT” [INPUT-FILE]
常用選項:
-n:不輸出模式空間中沒有被匹配到的內容至屏幕
-e script, –expression=script:多點編輯,可以執行多個腳本
-f /PATH/TO/SED_SCRIPT_FILE:
SED_SCRIPT_FILE:每行一個編輯命令
-r:支持擴展正則表達式
-i[SUFFIX], –in-place[=SUFFIX]:直接編輯原文件

script:地址定界+編輯命令,script由地址定界和編輯命令組成,在格式上兩者之間沒有空格分隔
地址定界:
⑴沒有地址定界:表示對全文進行處理
⑵單地址:
#:指定行
/PATTERN/:被該模式匹配到的每一行
$:最后一行
⑶地址范圍:
#,#
#,+#
#,/PATTERN/:從指定的行到第一次被此模式匹配到的行
/PATTERN1/,/PATTERN2/:從第一次被模式1匹配到的行到第一次被模式2匹配到的行
⑷步進:~
1~2:所有奇數行
2~2:所有偶數行

編輯命令:
d:刪除模式空間中被匹配到的行
p:顯示模式空間中被匹配到的行
a \text:在行后面追加文本行“text”,支持使用\n實現多行追加
i \text:在行前面插入文本行“text”,支持使用\n實現多行插入
c \text:把匹配到的行替換為此處指定的文本行”text”
w /PATH/TO/SOMEFILE:保存匹配到的行至指定的文件中
r /PATH/FROM/SOMEFILE:讀取指定文件的內容至當前文件被匹配到的行處
=:為所匹配到的行打印行號
!:條件取反;寫在地址定界后面,編輯命令前面
s///:查找替換,其分隔符可自行指定,常用的有@,#
替換標記:
g:全局替換
w /PATH/TO/SOMEFILE:將替換成功的結果保存至指定文件中
p:顯示替換成功的行

下面舉例說明使用方法:
⑴顯示/etc/fstab時,刪除第1,3行
[root@localhost yum.repos.d]# sed “1,3d” /etc/fstab
⑵顯示/etc/fstab時,刪除UUID開頭的行
[root@localhost yum.repos.d]# sed “/^UUID/d” /etc/fstab
⑶顯示/etc/fstab時,只顯示#開頭的行
因為sed命令默認會將沒有被模式空間中的模式匹配到的行輸出到標準輸出,如果使用[root@localhost yum.repos.d]# sed “/^#/p” /etc/fstab ,則會在將原本輸出的基礎上,再將#開頭的行輸出一遍

[root@localhost yum.repos.d]# sed “/^#/p” /etc/fstab

#
#
# /etc/fstab
# /etc/fstab
# Created by anaconda on Thu Dec 14 22:20:07 2017
# Created by anaconda on Thu Dec 14 22:20:07 2017
#
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk’
# Accessible filesystems, by reference, are maintained under ‘/dev/disk’
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
#
/dev/mapper/rootvg-root / xfs defaults 0 0
UUID=a6d99a7e-4f75-4eef-acb7-930242a1a150 /boot xfs defaults 0 0
/dev/mapper/rootvg-home /home xfs defaults 0 0
/dev/mapper/rootvg-swap swap swap defaults 0 0

所以編輯命令p使用時要結合-n選項使用

[root@localhost yum.repos.d]# sed -n “/^#/p” /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Dec 14 22:20:07 2017
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk’
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#

⑷顯示/etc/fstab時,在UUID開頭的行后面追加新的一行

[root@localhost yum.repos.d]# sed “/^UUID/a \new line” /etc/fstab

#
# /etc/fstab
# Created by anaconda on Thu Dec 14 22:20:07 2017
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk’
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rootvg-root / xfs defaults 0 0
UUID=a6d99a7e-4f75-4eef-acb7-930242a1a150 /boot xfs defaults 0 0
new line
/dev/mapper/rootvg-home /home xfs defaults 0 0
/dev/mapper/rootvg-swap swap swap defaults 0 0

⑸顯示/etc/fstab時,在UUID開頭的行前面插入新的一行

[root@localhost yum.repos.d]# sed “/^UUID/i \new line” /etc/fstab

#
# /etc/fstab
# Created by anaconda on Thu Dec 14 22:20:07 2017
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk’
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rootvg-root / xfs defaults 0 0
new line
UUID=a6d99a7e-4f75-4eef-acb7-930242a1a150 /boot xfs defaults 0 0
/dev/mapper/rootvg-home /home xfs defaults 0 0
/dev/mapper/rootvg-swap swap swap defaults 0 0

⑹顯示/etc/fstab時,將UUID開頭行替換為“other line”

[root@localhost yum.repos.d]# sed “/^UUID/c \other line” /etc/fstab

#
# /etc/fstab
# Created by anaconda on Thu Dec 14 22:20:07 2017
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk’
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rootvg-root / xfs defaults 0 0
other line
/dev/mapper/rootvg-home /home xfs defaults 0 0
/dev/mapper/rootvg-swap swap swap defaults 0 0

⑺將/etc/fstab文件中以#開頭的行保存至/tmp/testfile1中

[root@localhost yum.repos.d]# sed “/^#/w /tmp/testfile1” /etc/fstab

#
# /etc/fstab
# Created by anaconda on Thu Dec 14 22:20:07 2017
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk’
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rootvg-root / xfs defaults 0 0
UUID=a6d99a7e-4f75-4eef-acb7-930242a1a150 /boot xfs defaults 0 0
/dev/mapper/rootvg-home /home xfs defaults 0 0
/dev/mapper/rootvg-swap swap swap defaults 0 0
[root@localhost yum.repos.d]# cat /tmp/testfile1
#
# /etc/fstab
# Created by anaconda on Thu Dec 14 22:20:07 2017
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk’
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#

/tmp/testfile1不必事先存在,因為sed命令默認會將沒有被模式空間中的模式匹配到的行輸出到標準輸出,所以上面的例子中會將原文輸出,如果不想輸出,加上-n選項

⑻將/etc/issue讀取到/etc/fstab中UUID開頭的行后面

[root@localhost yum.repos.d]# sed “/^UUID/r /etc/issue” /etc/fstab

#
# /etc/fstab
# Created by anaconda on Thu Dec 14 22:20:07 2017
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk’
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rootvg-root / xfs defaults 0 0
UUID=a6d99a7e-4f75-4eef-acb7-930242a1a150 /boot xfs defaults 0 0
\S
Kernel \r on an \m

/dev/mapper/rootvg-home /home xfs defaults 0 0
/dev/mapper/rootvg-swap swap swap defaults 0 0

⑼顯示/etc/fstab時,在#開頭的行前添加行號

[root@localhost yum.repos.d]# sed “/^#/=” /etc/fstab

2
#
3
# /etc/fstab
4
# Created by anaconda on Thu Dec 14 22:20:07 2017
5
#
6
# Accessible filesystems, by reference, are maintained under ‘/dev/disk’
7
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8
#
/dev/mapper/rootvg-root / xfs defaults 0 0
UUID=a6d99a7e-4f75-4eef-acb7-930242a1a150 /boot xfs defaults 0 0
/dev/mapper/rootvg-home /home xfs defaults 0 0
/dev/mapper/rootvg-swap swap swap defaults 0 0

⑽顯示/etc/fstab時,刪除不是#開頭的行

如果script使用雙引號,地址定界 ! 編輯命令之間要加空格

[root@localhost yum.repos.d]# sed “/^#/ ! d” /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Dec 14 22:20:07 2017
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk’
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#

如果使用單引號,地址定界 ! 編輯命令之間不加空格

[root@localhost yum.repos.d]# sed ‘/^#/!d’ /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Dec 14 22:20:07 2017
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk’
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#

⑾刪除/etc/grub2.cfg文件中所有以空白字符開頭的行的行首的所有空白字符
sed “s/^[[:space:]]\+//” /etc/grub2.cfg
⑿刪除/etc/fstab文件中所有以#開頭的行的行首的#號及#號后面的所有空白字符
sed “s/^#[[:space:]]*//” /etc/fstab
⒀輸出一個絕對路徑給sed命令,取出其目錄,其行為類似于dirname
echo “/etc/sysconfig/network-scripts/” | sed ‘s@[^/]\+/\?$@@’

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

(0)
歐陽歐陽
上一篇 2018-01-12
下一篇 2018-01-13

相關推薦

  • RAID介紹及軟RAID實現

    RAID RAID:Redundant Arrays of Inexpensive(Independent)Disks1988年由加利福尼亞大學伯克利分校(University of California-Berkeley)“A Case for Redundant Arrays of Inexpensive Disks”。多個磁盤合成一個“陣列”來提供更好…

    Linux干貨 2016-09-02
  • 馬哥教育網絡班21期-第2周課程練習

    1、 Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 cp 復制、mv 剪切、rm 刪除 tree,mkdir 2、 bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容及其示例演示。 echo$ 查看命令執行狀態返回值 。 返回0,則表示執行成功。 返回非零,則表示執行失敗。(1-255) 3、請使用命令行展開功能來完成…

    Linux干貨 2016-07-17
  • ?文件服務器 – vsftpd

    文件服務器 – vsftpd 概述 FTP協議 vsftpd的配置文件 vsftpd + pam + file_db + virtual_vsftp_user vsftpd + pam + mysql + virtual_vsftp_user 登錄時錯誤類型 總結 文件服務器是一種專供其他電腦訪問文件和存儲的程序。文件服務器通常比一般的個人電腦擁…

    Linux干貨 2016-10-15
  • 來到馬哥的第一天

    找到馬哥之后的故事

    Linux干貨 2018-03-26
  • N27_網絡班第八周作業

    1、寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間所有主機的在線狀態; 在線的主機使用綠色顯示; 不在線的主機用紅色表示; #!bin/bash # for i in `seq 254`;do if ping -c 1 192.168.68.$i &> /dev/null;then echo -e “…

    2017-09-28
  • 配置基于mysql的虛擬用戶認證vsftp服務器

    1.安裝vsftp、mysql、epel_release(epel源,后面要安裝的pam_mysql認證模塊需要這個源)、pam_mysql 2.剛裝的mysql運行一下/usr/bin/mysql_secure_installation 3.建立數據庫vsftpd,建表user,     create database vsftpd; …

    Linux干貨 2016-06-22
欧美性久久久久