rpm和yum命令常见选项
rpm
rpm是软件包管理工具命令,用来安装、升级、卸载、查询、校验rpm类型的软件包。
参数与选项
一、安装
语法格式
rpm{-i|--install} [instatll-options] PACKAGE_FILE1....
参数
-h:以#来表示安装进度 –percent:以百分比形式表示安装进度 -v:显示安装过程的详细信息 -vv:显示跟详细的安装过程 –test:不执行真正的安装过程,仅报告依赖关系及冲突信息。此为调试模式 –nodeps:忽略依赖关系,能成功安装,但未必能运行成功,不建议使用。 –replacepkgs:重新安装并覆盖原有文件 –force:强制安装 –noslgnature:不检查包签名信息,不检查来源合法性 –nodigest:不检查包完整性信息
安装时常用组合:-ivh,-ivvh
示例
[root@localhost ~]# rpm -ivh --test /media/Packages/zsh-5.0.2-28.el7.x86_64.rpm 准备中... ################################# [100%] [root@localhost ~]# rpm -ivh /media/Packages/zsh-5.0.2-28.el7.x86_64.rpm 准备中... ################################# [100%] 正在升级/安装... 1:zsh-5.0.2-28.el7 ################################# [100%]
二、升级升级已安装的软件包
语法
升级或安装:rpm{-U|--upgrade}[install_options]PACKAGE_FILE...
升级:rpm{-F|--freshen}[install_options]PACKAGE_FILE...
–oldpackage:降级到旧版本 其余参数(install-options)与安装选项的参数相同 常用组合:-Uvh,-Fvh
注意:
不要对内核进行升级,Linux允许多内核共存,可直接安装多个不同版本内核。 若程序包的配置文件安装后曾被修改过,升级时新版本的文件不会覆盖老版本的配置文件,而是把新版本的配置文件重命名(加后缀.rpmnew)后保存。
示例
[root@localhost ~]# rpm -Uvh /media/Packages/zsh-5.0.2-28.el7.x86_64.rpm 准备中... ################################# [100%] 软件包 zsh-5.0.2-28.el7.x86_64 已经安装
三、卸载
卸载已安装的程序包
语法
rpm{-e|--erase}[erase-options]PACKAGE_NAME...
参数
–nodeps:忽略依赖关系; –test:测试卸载,dry-run模式 –allmatches:如果一个程序包同时安装了多个版本,则此选项会一次性全部卸载。
注意:若程序包配置文件在安装后修改过,卸载时,此配置文件不会被被删除,而是被重命名(加后缀.rpmsave)后保存。
示例
[root@localhost ~]# rpm -evh zsh 准备中... ################################# [100%] 正在清理/删除... 1:zsh-5.0.2-28.el7 ################################# [100%]
四、查询
查询程序包是否已安装,检查已安装的程序包,查看程序包的详细信息
语法
rpm{-q|--query}[select-options][query-options]
参数
select-options
rpm -q PACKAGE_NAME…:查询程序包是否安装 -a:查询已安装的所有包 -f:查询某文件是由哪个程序包安装生成 -p:查询尚未安装的程序包文件的相关信息 query-options
-i:查询某程序包的简要说明信息 -l:查询某程序包生成的文件列表 -c:查询某程序包安装完成后生成的所有配置文件 -d:查询某程序包安装完成后生成的所有帮助文件 –changelog:查询某程序包制作室随版本变化的chengelog信息 –provides:查询某程序包提供的capabilities –requires:查询某程序包所依赖的capabilities –scripts:查询某程序包安装或卸载时执行脚本。脚本分为四类 :
preinstall:安装过程开始之前执行的脚本 postinstall:安装过程完成后执行的脚本 preuninstall:卸载开始之前执行的脚本 postuninstall:卸载过程完成后执行的脚本
示例
[root@localhost ~]# rpm -qa | head -5 cups-libs-1.6.3-35.el7.x86_64 gnome-boxes-3.22.4-4.el7.x86_64 perl-Net-LibIDN-0.12-15.el7.x86_64 kdeplasma-addons-libs-4.10.5-5.el7.x86_64 libxshmfence-1.2-1.el7.x86_64 [root@localhost ~]# rpm -ql zsh | head -5 /bin/zsh /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile [root@localhost ~]# rpm -q --provides zsh config(zsh) = 5.0.2-28.el7 zsh = 5.0.2-28.el7 zsh(x86-64) = 5.0.2-28.el7 [root@localhost ~]# rpm -qi zsh Name : zsh Version : 5.0.2 Release : 28.el7 Architecture: x86_64 Install Date: 2018年09月18日 星期二 09时42分04秒 Group : System Environment/Shells Size : 5855982 License : MIT Signature : RSA/SHA256, 2017年08月11日 星期五 04时28分17秒, Key ID 24c6a8a7f4a80eb5 Source RPM : zsh-5.0.2-28.el7.src.rpm Build Date : 2017年08月02日 星期三 18时52分37秒 Build Host : c1bm.rdu2.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://zsh.sourceforge.net/ Summary : Powerful interactive shell Description : The zsh shell is a command interpreter usable as an interactive login shell and as a shell script command processor. Zsh resembles the ksh shell (the Korn shell), but includes many enhancements. Zsh supports command line editing, built-in spelling correction, programmable command completion, shell functions (with autoloading), a history mechanism, and more.
五、校验1、 校验程序包安装完成后是否发生了改变
语法
rpm {-V|--verify} [select-options] [verify-options]
参数
–nodeps:不校验依赖关系; –nodigest:不检查包完整性; –nofiles:不校验文件属性是否发生改变; –nosignature:不检查包或头部签名;
无结果输出时表示软件包完整。有相应结果输出表示对应内容发生改变。校验结果中各位置表示的意思:
S:(file Size differ)文件的容量大小发生改变 M:(Mode differ)文件的类型或文件的权限属性改变 5:(MD5 sum differ)MD5验证内容完整性发生改变 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 ~]# rpm -V perl [root@localhost ~]#
2、程序包的合法性验证验证程序包来源合法性及完整性需要先导入合法的KEY文件
语法
导入KEY文件:rpm --import /path/to/RPM-GPG-KEY-FILE
验证:rpm {-K|--checksig} PACKAGE_FILE
–nosignature:不检查来源合法性 –nodigest:不检查完整性
[root@localhost ~]# rpm --import /media/RPM-GPG-KEY-CentOS-7 [root@localhost ~]# rpm -K /media/Packages/zsh-5.0.2-28.el7.x86_64.rpm /media/Packages/zsh-5.0.2-28.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 确定
六、创建rpm管理器数据库
语法
rpm {--initdb|--rabuilddb}[-v][--dbpath DIRECTORY]
参数
–initdb:初始化数据库,即数据不存在时,新建数据库 –rebuilddb:无论当前是否存在数据哭,都直接创建此数据库;构建的数据库存放在/var/lib/rpm当中。
yum
yum是通过分析RPM的标头数据后,根据个软件的依赖关系制作出有依赖关系是的解决方案,然后自动处理软件的依赖性问题,以解决软件安装、升级、卸载问题。
yum的配置文件,主要指向仓库的位置以及相关的各种配置信息;每个yum命令行可以同时指向多个仓库,仓库间可进行优先级等相关配置。各仓库的配置文件以.repo结尾,每个repo配置文件中可以配置多个仓库。配置文件主要由两部分组成:
主配置文件:/etc/yum.conf,为各仓库指向提供公共配置文件。仓库标识为[main]各仓库的定义:/etc/yum.repos/*.repo
仓库的定义:
[repositoryid]:仓库标识,必须唯一,唯一标识此repository指向 name=#:当前仓库的描述信息 baseurl=url://path/to/repository/:指明repository的访问路径,通常为一个文件服务器上某repository,可设定多个url。支持ftp服务、http服务和本地目录file。 enable={1|0}:此仓库能否被使用 enablegroups={1|0}:是否支持使用组来批量管理程序包 failovermethod={roundrobin|priority}:故障转移方法,默认为roundrobin,随机挑选 gpackage={1|0}:是否对程序包做校验 gpgkey=url://path/ro/keyfile:指定gpgkey文件路径 cost=#:指明当前repository的访问开销,默认为1000
语法
yum [options][command] package….
参数
command
install package… :安装程序包,可同时安装多个 update [package…]:升级指定程序包 check-update:检查可用升级 remove | erase package1[package2…]:卸载程序包 list[…]:列出所有可安装的软件清单 info[…]:显示程序包的info信息 provides | whatprovides feature1[feature2]:产看指定的特性有那个程序包提供 clean [packages | metadate | expire-cache | rpmdb | plugins | all]:清理本地缓存 makecache:创建缓存 search string1[string2…]:关机字搜索程序包名及summary信息 reinstall package1[package2…]:重新安装 downgrade package1[package2…]:降级安装 deplist package1[package2…]:查看制定包的依赖关系capability history [info | list |package-list | packages-info | summary | addon-info | rado | undo | rollback | new | sync |stats]:查看事务历史 localinstall rpmfile1[…]:安装本地的rpm包 localupdate rpmfile1[…]:从本地的rpm包升级程序 groupinstall group1[group2…]:包组安装 groupupdate group1[group2…]:包组升级 grouplist [hidden][groupwildcard] […]:列出所有包组 groupremove group1[….]:卸载包组 groupinfo group1[….]:查看包组的info信息 repolist[all | enable | disabled]:列出已经配置的所有可用仓库
options
–nogpgcheck:禁止进行gpgcheck -y:自动回答为yes -p:静默模式 –disablerepo=#:临时禁用在配置文件中配置并启用的某个repository –enablerepo=#:临时启用指定的repo –noplugins:禁用所有插件
示例
[root@localhost ~]# yum update yum-utils.noarch 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.163.com * extras: mirrors.aliyun.com * updates: mirrors.huaweicloud.com 正在解决依赖关系 --> 正在检查事务 ---> 软件包 yum-utils.noarch.0.1.1.31-45.el7 将被 升级 ---> 软件包 yum-utils.noarch.0.1.1.31-46.el7_5 将被 更新 --> 解决依赖关系完成 依赖关系解决 ============================================================================================================================== Package 架构 版本 源 大小 ============================================================================================================================== 正在更新: yum-utils noarch 1.1.31-46.el7_5 updates 120 k 事务概要 ============================================================================================================================== 升级 1 软件包 总计:120 k Is this ok [y/d/N]: y Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction 正在更新 : yum-utils-1.1.31-46.el7_5.noarch 1/2 清理 : yum-utils-1.1.31-45.el7.noarch 2/2 验证中 : yum-utils-1.1.31-46.el7_5.noarch 1/2 验证中 : yum-utils-1.1.31-45.el7.noarch 2/2 更新完毕: yum-utils.noarch 0:1.1.31-46.el7_5 完毕! [root@localhost ~]# yum install -y zsh 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.163.com * extras: mirrors.aliyun.com * updates: mirrors.huaweicloud.com 正在解决依赖关系 --> 正在检查事务 ---> 软件包 zsh.x86_64.0.5.0.2-28.el7 将被 安装 --> 解决依赖关系完成 依赖关系解决 ============================================================================================================================== Package 架构 版本 源 大小 ============================================================================================================================== 正在安装: zsh x86_64 5.0.2-28.el7 base 2.4 M 事务概要 ============================================================================================================================== 安装 1 软件包 总下载量:2.4 M 安装大小:5.6 M Downloading packages: zsh-5.0.2-28.el7.x86_64.rpm | 2.4 MB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction 正在安装 : zsh-5.0.2-28.el7.x86_64 1/1 验证中 : zsh-5.0.2-28.el7.x86_64 1/1 已安装: zsh.x86_64 0:5.0.2-28.el7 完毕!
练习
1、自建yum仓库,分别为网络源和本地源。
(1)、网络源:
配置网络源需要确保Linux以能够连接网络
1、备份本地yum源
[root@localhost yum.repos.d]# cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup [root@localhost yum.repos.d]# ll 总用量 36 -rw-r--r--. 1 root root 1664 4月 29 00:35 CentOS-Base.repo -rw-r--r--. 1 root root 1664 9月 18 11:36 CentOS-Base.repo.backup -rw-r--r--. 1 root root 1309 4月 29 00:35 CentOS-CR.repo -rw-r--r--. 1 root root 649 4月 29 00:35 CentOS-Debuginfo.repo -rw-r--r--. 1 root root 314 4月 29 00:35 CentOS-fasttrack.repo -rw-r--r--. 1 root root 630 4月 29 00:35 CentOS-Media.repo -rw-r--r--. 1 root root 1331 4月 29 00:35 CentOS-Sources.repo -rw-r--r--. 1 root root 4768 4月 29 00:35 CentOS-Vault.repo
2、下载新的对应的CentOS-Base.repo到/etc/yum/yum.repos.d/目录下。需根据自己的Linux版本来下载对应repo,高版本的Linux不能使用低版本的yum源。阿里的yum源地址为https://opsx.alibaba.com/mirror
[root@localhost yum.repos.d]# wget -O /etc/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo --2018-09-18 11:47:23-- http://mirrors.aliyun.com/repo/Centos-7.repo 正在解析主机 mirrors.aliyun.com (mirrors.aliyun.com)... 118.123.208.230 正在连接 mirrors.aliyun.com (mirrors.aliyun.com)|118.123.208.230|:80... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:2523 (2.5K) [application/octet-stream] 正在保存至: “/etc/CentOS-Base.repo” 100%[====================================================================================>] 2,523 --.-K/s 用时 0s 2018-09-18 11:47:23 (215 MB/s) - 已保存 “/etc/CentOS-Base.repo” [2523/2523]) [root@localhost yum.repos.d]# cat /etc/CentOS-Base.repo # CentOS-Base.repo # # The mirror system uses the connecting IP address of the client and the # update status of each mirror to pick mirrors that are updated to and # geographically close to the client. You should use this for CentOS updates # unless you are manually picking other mirrors. # # If the mirrorlist= does not work for you, as a fall back you can try the # remarked out baseurl= line instead. # # [base] name=CentOS-$releasever - Base - mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/ http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/ http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/…..
3、运行yum makecache生成缓存,成功则表示网络yum源配置成功
[root@localhost yum.repos.d]# yum makecache 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com base | 3.6 kB 00:00:00 extras | 3.4 kB 00:00:00 updates | 3.4 kB 00:00:00 Not using downloaded updates/repomd.xml because it is older than what we have: Current : Tue Sep 18 00:01:58 2018 Downloaded: Fri Sep 14 00:12:01 2018 元数据缓存已建立
(2)、本地源:
可以Linux系统镜像或者镜像网站中将rpm包下载到本地,然后使用createrepo命令创建本地源。也可以使用光盘的设备存入对应版本的系统镜像,然后挂载到系统上作为本地源。
1、创建本地光盘挂载目录/mirror/repo,并将光盘挂在到/mirror/repo目录下,可修改/etc/fstab文件,将光盘永久挂载
[root@localhost media]# mkdir -p /mirror/repo [root@localhost media]# ll /dev/cdrom lrwxrwxrwx. 1 root root 3 9月 18 08:52 /dev/cdrom -> sr0 [root@localhost media]# mount /dev/cdrom /mirror/repo [root@localhost media]# echo "/dev/cdrom /mirror/repo iso9660 defaults 0 0" >> /etc/fstab
2、yum配置文件是/etc/yum.repos.d/目录下,创建一个以.repo结尾文件,编辑完成后保存退出。
[base] name=localyum baseurl=file:///mirror/repo gpgcheck=0 enable=1
3、用yun makecache创建元数据缓存,再用yum repolist查看repo列表信息。repolist会表示出文件个数,则本地yum源配置成功
[root@localhost repo]# yum makecache 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile base | 3.6 kB 00:00:00 元数据缓存已建立 [root@localhost repo]# yum repolist 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile 源标识 源名称 状态 base localyum 9,911 repolist: 9,911 [root@localhost repo]#
linux任务计划
Linux任务计划分为两种:
一次性的任务计划:只执行一次。使用at命令进行处理周期性的任务计划:每隔一定周期去做相同的事情。使用crontab来根据定义的周期信息,循环去做一些事情。
at
at是由atd服务提供的,用来处理一次性的计划任务。在centos6上可使用service atd start来启动服务;在centos7上使用systemctl start atd.service来启动服务。
语法
at [options] TIME
选项
-l:at -l相当于atq命令,列出目前系统上的所有当前用户的at队列 -d:at -d相当于atrm命令,可以去向一个在at排程中的工作 -v:可以使用较明显的时间格式列出at中的工作列表 -f file:把at要执行的所有任务放置于文件,让at读取此文件作为要运行的任务。 -m:及时程序、指令执行完成后没有输出结果,也要发送信息给使用者。
TIME的格式
HH:MM :如14:20。表示在今日HH:MM时刻进行,若已超过指定时刻,则于明天的HH:MM时刻进行此工作。 HH:MM YYYY-MM-DD:如13:10 2018-10-01 HH:MM[am|pm][Month][Date] HH:MM[am|pm]+number[minutes|hours|days|weeks]:如now + 5 hours。从现在开始5小时后执行
示例
[root@localhost repo]# at 13:55 at> /bin/bash /app/test11.sh at> <EOT> job 15 at Tue Sep 18 13:55:00 2018 [root@localhost repo]# atq 15 Tue Sep 18 13:55:00 2018 a root [root@localhost repo]# ll /var/spool/mail/root From root@localhost.localdomain Tue Sep 18 13:55:00 2018 Return-Path: <root@localhost.localdomain> X-Original-To: root Delivered-To: root@localhost.localdomain Received: by localhost.localdomain (Postfix, from userid 0) id 886CE81E7D1; Tue, 18 Sep 2018 13:55:00 +0800 (CST) Subject: Output from your job 15 To: root@localhost.localdomain Message-Id: <20180918055500.886CE81E7D1@localhost.localdomain> Date: Tue, 18 Sep 2018 13:55:00 +0800 (CST) From: root@localhost.localdomain (root) 2018-09-18 13:55:00
crontab
crontab是由crond服务提供的,用来处理一次性的计划任务。在centos6上可使用service crond start来启动服务;在centos7上使用systemctl start crond.service来启动服务
.cron任务有两类:系统cron和用户cron。
系统cron是指系统级别的例行性任务计划,通过编辑配置文件/etc/crontab文件来实现
用户cron是通过使用crontab命令编辑,编辑完成后存放在/var/spool/cron/目录下的与用户名同名的文件中。
系统cron的配置格式:
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
其中:
前五个*表示对应的时间点 user-name:表示用户身份 command:表示要运行的任务五个时间点分别为:分钟 小时 天 月 周几时间表示法:
每个时间为都应该使用其可用的有效取值范围内的值;*用于表示试用期所有有效取值 */#:在对应的时间为有效取值上没#个时间单位执行一次。如 */7 * * * * /bin/echo “hello” 表示没7分钟执行一次。但并不精确。 连续时间点:如 20 3 * * 1-5 /bin/echo “howdy” 表示周一至周五每天3:20执行 离散时间点,以逗号分隔:20 3 * * 1,3,5 /bin/echo “howdy”注意:在定义cron任务时,所有用到的命令使用绝对路径;如果是脚本,则脚本中的命令使用绝对路径,或者自定义一个拥有完整路径的环境变量
用户cron的定义
用户级别的周期性任务计划是通过crontab命令来实现。
语法
crontab [-u user] [-l | -r | -e] [-i]
参数选项
-u user:root用户可以为指定的用户管理cron任务 -l:列出已经定义的所有任务。 -e:打开编辑界面定义任务 -r:remove。移除所有任务。 -i:在使用-r选项移除所有任务时提示用户确认注意:删除单一任务时应通过编辑人物界面删除行实现,在crontab中如果用户命令中需要使用%时,需要对其进行转义。
练习
制定 每周三凌晨三、五点10分执行某个脚本,输出当前时间,时间格式为 2017-12-28 10:00:00
1、想创建脚本文件test11.sh,写入脚本。 [root@localhost /]# vim /app/test11.sh #!/bin/bash # #输出当前时间,时间格式为2017-12-28 10:00:00 echo `date "+%Y-%m-%d %H:%M:%S"` 2、使用crontab -e创建计划任务 [root@localhost /]# crontab -e 10 3,5 * * 3 /bin/bash /app/test11.sh [root@localhost /]# crontab -l 10 3,5 * * 3 /bin/bash /app/test11.sh 3、另一种方式: [root@localhost /]# crontab -e 10 3,5 * * 3 /bin/echo `date "+%Y-%m-%d %H:%M:%S"`4、另一种:通过编辑配置文件/etc/crontab文件来实现
[root@localhost /]# vim /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 10 3,5 * * 3 root /bin/bash /app/test11.sh
文本处理三剑客之sed
sed的工作原理:
从文本中一次读取一行,并且复制一份到sed自己的工作区域,这个工作区域叫作模式空间(pattern space),在模式空间进行文本处理以后,将结果送到标准输出;默认sed对文本的每一行做处理操作,也可以定义sed仅处理符合条件(基于正则表达式来进行文本过滤)的行;(默认不对原文件进行编辑);所以在模式空间中读取一行后,首先判断是否符合sed所指定的模式,如果符合则进行定义的编辑操作,将结果输出到标准输出,如果不匹配则默认输出到标准输出(默认是输出操作),也可以定义不输出没被sed模式匹配到的行;然后读取第二行,以此类推;sed内部不仅有模式空间,还有一个空间叫hold space保持空间,可以将被sed模式匹配到的行编辑完以后存放到保持空间里(高级用法);
sed [option] 'script' [input-file]
选项参数
1、选项:
-n:不输出模式空间内容,即不自动打印 -e script,–expression=script:实现多点编辑 -f /path/to/script_file:从指定文件中读取编辑脚本 -f:支持使用扩展正则表达式 -i .bak,–in-place[=SUFFIX]:备份原文件,然后直接编辑原文件
2、script脚本:地址界定
不指定参数:对全文进行处理 单地址:
#:对指定的#行进行处理 $:对最后一行进行处理 /模式/:对模式所匹配的行进行处理 地址范围:
#,#:从某行到某行 #,+#:从某行开始往后#行 /模式1/,/模式2/:从模式1匹配的行到模式2匹配到的行 #,/模式/:从某行开始,到模式所匹配到的行 步长:~
n~2:当n奇数时,表示从n行开始的奇数行;当n为偶数时,表示从n行开始的偶数行。
3、常用的编辑命令:
d:删除模式空间匹配的行,便立即启用下一轮循环。sed ‘1,5d’ /etc/fstab:删除第1到5行[root@localhost /]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Wed Sep 5 09:28:43 2018 # # 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 # UUID=934c9a34-c3a2-40e3-9696-4e4edda5ede4 / xfs defaults 0 0 UUID=4eabc87c-d983-4090-8a3c-6d1a3963c827 /boot xfs defaults 0 0 UUID=4ef876f1-19ad-4cf6-b7f5-e54f96e818b5 /home xfs defaults 0 0 UUID=e7275fe6-32b3-4a7b-a90d-c8a39cb23af1 /var xfs defaults 0 0 UUID=6076fd94-46d9-4fcc-a0f2-1add7f541689 swap swap defaults 0 0[root@localhost /]# sed '1,5d' /etc/fstab # 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 # UUID=934c9a34-c3a2-40e3-9696-4e4edda5ede4 / xfs defaults 0 0 UUID=4eabc87c-d983-4090-8a3c-6d1a3963c827 /boot xfs defaults 0 0 UUID=4ef876f1-19ad-4cf6-b7f5-e54f96e818b5 /home xfs defaults 0 0 UUID=e7275fe6-32b3-4a7b-a90d-c8a39cb23af1 /var xfs defaults 0 0 UUID=6076fd94-46d9-4fcc-a0f2-1add7f541689 swap swap defaults 0 0
p:显示当前模式空间中的内容sed ‘1~2p’ /etc/fstab:显示2遍所有奇数行[root@localhost /]# sed '1~2p' /etc/fstab
# # /etc/fstab # /etc/fstab # Created by anaconda on Wed Sep 5 09:28:43 2018 # # # 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 # UUID=934c9a34-c3a2-40e3-9696-4e4edda5ede4 / xfs defaults 0 0 UUID=934c9a34-c3a2-40e3-9696-4e4edda5ede4 / xfs defaults 0 0 UUID=4eabc87c-d983-4090-8a3c-6d1a3963c827 /boot xfs defaults 0 0 UUID=4ef876f1-19ad-4cf6-b7f5-e54f96e818b5 /home xfs defaults 0 0 UUID=4ef876f1-19ad-4cf6-b7f5-e54f96e818b5 /home xfs defaults 0 0 UUID=e7275fe6-32b3-4a7b-a90d-c8a39cb23af1 /var xfs defaults 0 0 UUID=6076fd94-46d9-4fcc-a0f2-1add7f541689 swap swap defaults 0 0 UUID=6076fd94-46d9-4fcc-a0f2-1add7f541689 swap swap defaults 0 0
a [\]text:在指定行后面追加文本sed ‘3a \new line’ /etc/fstab:在第三行下面插入一行new line[root@localhost /]# sed '3a \new line' /etc/fstab
# # /etc/fstab new line # Created by anaconda on Wed Sep 5 09:28:43 2018
i [\]text:在行前面插入文本sed ‘3i \new line’ /etc/fstab:在第三行上面插入一行new line[root@localhost /]# sed '3i \new line' /etc/fstab
# new line # /etc/fstab
c [\]text :替换行为单行或多行文本sed ‘/^UUID/c # add new device base on UUID’ /etc/fstab:把UUID开头的行替换为# add new device base on UUID[root@localhost /]# sed '/^UUID/c \# add new device base on UUID' /etc/fstab
# # /etc/fstab # Created by anaconda on Wed Sep 5 09:28:43 2018 # # 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 # # add new device base on UUID # add new device base on UUID # add new device base on UUID # add new device base on UUID # add new device base on UUID
w /path/file:保存匹配结果到指定文件sed -n ‘/^[^#]/w /tmp/fstab.bak’ /etc/fstab:把非#开头的行保存至/tmp/fstab.bak文件里[root@localhost /]# sed -n '/^[^#]/w /tmp/fstab.bak' /etc/fstab [root@localhost /]# cat /tmp/fstab.bak UUID=934c9a34-c3a2-40e3-9696-4e4edda5ede4 / xfs defaults 0 0 UUID=4eabc87c-d983-4090-8a3c-6d1a3963c827 /boot xfs defaults 0 0 UUID=4ef876f1-19ad-4cf6-b7f5-e54f96e818b5 /home xfs defaults 0 0 UUID=e7275fe6-32b3-4a7b-a90d-c8a39cb23af1 /var xfs defaults 0 0 UUID=6076fd94-46d9-4fcc-a0f2-1add7f541689 swap swap defaults 0 0
r /path/file:读取指定文件文本至模式空间中匹配到的行后sed ‘3r /etc/issue’ /etc/fstab:把issue文件,写在fstab文件第3行的后面(文件合并)[root@localhost /]# sed '3r /etc/issue' /etc/fstab
# # /etc/fstab \S Kernel \r on an \m
# Created by anaconda on Wed Sep 5 09:28:43 2018 # # Accessible filesystems, by reference, are maintained under '/dev/disk'
=:为模式空间中的行打印行号sed ‘/^UUID/=’ /etc/fstab:把UUID开头的行上面加一行号[root@localhost /]# sed '/^UUID/=' /etc/fstab
# # /etc/fstab # Created by anaconda on Wed Sep 5 09:28:43 2018 # # 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 # 9 UUID=934c9a34-c3a2-40e3-9696-4e4edda5ede4 / xfs defaults 0 0 10 UUID=4eabc87c-d983-4090-8a3c-6d1a3963c827 /boot xfs defaults 0 0 11 UUID=4ef876f1-19ad-4cf6-b7f5-e54f96e818b5 /home xfs defaults 0 0 12 UUID=e7275fe6-32b3-4a7b-a90d-c8a39cb23af1 /var xfs defaults 0 0 13 UUID=6076fd94-46d9-4fcc-a0f2-1add7f541689 swap swap defaults 0 0
!:对模式空间中匹配航取反处理! sed ‘/^#/d’ /etc/fstab:删除非#开头的行]# ! sed '/^#/d' /etc/fstab
# # /etc/fstab # Created by anaconda on Wed Sep 5 09:28:43 2018 # # 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 # 9 UUID=934c9a34-c3a2-40e3-9696-4e4edda5ede4 / xfs defaults 0 0 10 UUID=4eabc87c-d983-4090-8a3c-6d1a3963c827 /boot xfs defaults 0 0 11 UUID=4ef876f1-19ad-4cf6-b7f5-e54f96e818b5 /home xfs defaults 0 0 12 UUID=e7275fe6-32b3-4a7b-a90d-c8a39cb23af1 /var xfs defaults 0 0 13 UUID=6076fd94-46d9-4fcc-a0f2-1add7f541689 swap swap defaults 0 0 [root@localhost /]# ! sed '/^#/d' /etc/fstab
UUID=934c9a34-c3a2-40e3-9696-4e4edda5ede4 / xfs defaults 0 0 UUID=4eabc87c-d983-4090-8a3c-6d1a3963c827 /boot xfs defaults 0 0 UUID=4ef876f1-19ad-4cf6-b7f5-e54f96e818b5 /home xfs defaults 0 0 UUID=e7275fe6-32b3-4a7b-a90d-c8a39cb23af1 /var xfs defaults 0 0 UUID=6076fd94-46d9-4fcc-a0f2-1add7f541689 swap swap defaults 0 0
s///:查找替换,其分隔符可自行指定,常用有s@@@、s###等;
替换标记:
g:全局替换; w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中; p:仅显示替换成功的行sed -i ‘s/7030/7035/’ redis.conf 把此文件7030替换一次为7035]# sed -i 's/7030/7035/' redis.conf
4、高级编辑命令
P:打印模式空间开端至\n内容,并追加到默认输出之前:sed -n ‘n;p’ file :显示偶数行 G:从保持空间中取出内容追加至模式空间 g:从保持空间中读出数据覆盖至模式空间 h:把模式空间中的内容覆盖至保持空间中。sed ‘1!G;h;$!d’ file 反向显示 H:把模式空间中的内容追加至保持空间中。 x:把模式空间中的内容与保持空间中的内容进行互换 n:读取匹配到的行的下一行覆盖至模式空间 N:读取匹配到的行的下一行追加至模式空间。 sed ‘N;D’ filesed ‘/^$/d;G’ file:删除原有的所有空白行,而后为所有的非空白行后添加一个空白行 d:删除模式空间中的行 D:删除多行模式空间中的所有行。如果模式空间包含换行符,则删除知道第一个换行符的模式空间中的文本,并不会读取新的输入航,而是用合成的模式空间启动循环。如果模式空间不包含换行符,则会如d命令那样启动正常的新循环
原创文章,作者:N32_王先桥,如若转载,请注明出处:http://www.178linux.com/124310