马哥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.178linux.com/91067

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code