简述rpm与yum命令的常见选项,并举例
rpm命令
rpm命令用来手动安装rpm格式的程序包,使用格式为
- rpm [option] path/to/rpmfile
- -i安装选项
- 使用格式rpm -i[installopition] path/to/rpmfile
- -h选项 : 使用#来显示安装进度
- -v选项 : 显示安装过程
- -vv选项 : 显示更详细的安装过程比-v更详细,按需求使用
- --test选项 : 不进行实际安装操作,而是进行安装环境的测试,可以查看安装是否可以成功
- --nodeps选项 : 忽略依赖关系,这样即使安装成功,也可能由于依赖关系造成运行问题
- --replacepkgs选项 : 覆盖安装
- --force选项 : 强制安装
- 对于新安装程序包,常用的操作是rpm -ivh path/to/rpmfile
- 升级选项
- -U : 升级安装或全新安装
- -F : 升级安装
- 同安装选项一样,常用组合有-Uvh -Fvh
- 同安装选项一样,也可以使用--test --nodeps选项
- --oldpackage选项 : 降级安装旧版本程序包 rpm -U --oldpackage path/to/rpmfile
- 卸载
- -e : 卸载已安装的rpm程序,使用 rpm -e packagename
- 使用-e进行卸载时也可以使用--test --nodeps选项
- --allmatches选项 : 卸载所有匹配的安装,例如一个rpm程序的多个版本
- 对于卸载,需要注意的是如果程序包的配置文件在安装后被修改过,则卸载时并不会删除这些文件,而是将它们重命名(加后缀 .rpmsave)
- 查询
- 使用格式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 : 程序包卸载之后执行的脚本
- 校验
- rpm -V packagename : 验证程序包安装之后生成的文件是否发生了改变
- 程序包合法性验证
- 先导入验证密匙文件 rpm --import path/to/key-file
- 再使用命令验证程序包 rpm -K path/to/packagefile
- 创建rpm包管理数据库,创建的数据库文件保存路径为/var/lib/rpm下
- --initdb : 初始化数据库,当rpm包管理数据库不存在时新建它
- --rebuilddb : 重建数据库,无论之前数据库是否存在
- --dbpath DIRECTORY : 可以指明建立的数据库文件保存路径,即改变默认的/var/lib/rpm,例如 rpm --rebuilddb --dbpath /var/rpmdb
yum命令
yum命令可以更智能的管理和安装rpm程序包,它可以自动处理程序包之前的依赖关系,使用起来更加方便。
- 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,可省略
- 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 来启动该服务
- 命令使用格式 : 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选项 : 打印任务内容到标准输出
- TIME的格式
- HH:MM [date] : 其中的date可以是具体年月日(例如2017-12-31),也可以是英文表示的日子(例如December 31),甚至时间上也可以简化表示(明天下午2点:2pm tomorrow)
- HH:MM + #(minutes|hours|days|weeks) : 某时刻加一个相对时间表示法(例如2pm + 3days三天后的下午2点)
- 实例
~]$ 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服务来实现的。
- 系统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
- 用户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处理后的结果,可以使用输出重定向。
sed.png
-
命令格式
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s) -
参数
- -e script1 -e script2 : -e选项可以指定多条命令执行
- -f scriptfile : -f选项可以从文件中读取命令执行操作,同样可以指定多个文件处理
- -n选项 : 仅显示sed命令处理后的结果
- -r选项 : 支持扩展的正则表达式
- -i选项 : 直接修改源文件
- sed命令
a\ 在当前行下面插入文本
i\ 在当前行上面插入文本
c\ 把选定的行改为新的文本
= 打印行号
d 删除,删除选择的行
D 删除模板块的第一行
! 表示其后面的命令对所有没有前面的条件匹配的行发生作用
s 替换指定字符
g 表示行内全面替换
h 拷贝模板块的内容到内存中的缓冲区
H 追加模板块的内容到内存中的缓冲区
g 获得内存缓冲区的内容,并替代当前模板块中的文本
G 获得内存缓冲区的内容,并追加到当前模板块文本的后面
x 互换当前模式空间和内存缓冲区的内容
n 读取下一个输入行进入模式空间
N 追加下一个输入行到模式空间现有数据的后面
p 打印模板块的行
P(大写) 打印模板块的第一行
w file 把处理过的结果写入文件
r file 读取文件内容并追加进入模式空间
关于n, N这两个命令的执行方式是容易搞错的地方,可以参考下面的图示
sed_n1.png
sed_n2.png
sedN2.png
- 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
网友评论