一、简述rpm与yum命令的常见选项,并举例
rpm的相关命令和选项
rpm命令: rpm [OPTIONS] [PACKAGE_FILE]
安装: -i, --install
升级: -U, --update,-F, --freshen
卸载: -e, --erase
查询: -q, --query
校验: -V, --verify
数据库维护: --builddb, --initdb
安装:
rpm {-i|--install} [install-options] PACKAGE_FILE...
-v: VERBOSE,详细信息
-vv: 更详细的输出
-h: hash marks输出进度条;每个#表示2%的进度;
--test: 测试安装,检查并报告依赖关系及冲突消息等;
--nodeps: 忽略依赖关系;副作用是能安装成功,但未必能运行
--replacepkgs: 重新安装
--force:强制安装
安装时常用的组合:-ivh,-ivvh
[root@wujunjie ~]# rpm -ivh /media/cdrom/Packages/zsh-5.0.2-25.el7.x86_64.rpm
warning: /media/cdrom/Packages/zsh-5.0.2-25.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:zsh-5.0.2-25.el7 ################################# [100%]
升级:
rpm {-U|--update} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-U: 升级或安装;
-F: 只是升级;
组合使用:-Uvh,-Fvh
--test: 测试安装,检查并报告依赖关系及冲突消息等;
--nodeps: 忽略依赖关系;副作用是能安装成功,但未必能运行
--oldpackage:降低到旧版本
- 注意:
(1)不要对内核做升级操作; Linux支持多内核版本并存,因此,直接安装新版本内核;
(2)如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
卸载:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts][--test] PACKAGE_NAME ...
简单用法:rpm -e PACKAGE_NAME...
--allmatches: 卸载所有匹配指定名称的程序包的各版本;
--nodps: 忽略依赖关系
--test: 测试卸载, dry run模式
- 注意:
如果程序包的配置文件安装后曾被修改,卸载时,此文件通常不会被删除,而是被重命名(加后缀.rpmsave)后留存。
查询:
rpm {-q|--query} [select-options] [query-options]
[select-options]
-qa 查询已安装的所有程序包
[root@wujunjie ~]# rpm -qa tree
tree-1.6.0-10.el7.x86_64
-qf FILE 其后可跟个文件名,查询指定文件是由哪个程序包安装生成的
[root@wujunjie ~]# rpm -qf /bin/cd
bash-4.2.46-20.el7_2.x86_64
-qp 用于实现对未安装的程序包执行查询操作,其后有--whatprovides CAPABILITY,未安装的程序包有哪些特性;
--whatprovides CAPABILITY 查询指定的CAPABILITY由哪个程序包提供;
--whatrequires CAPABILITY 查询指定的CAPABILITY被哪个程序包所依赖;
[query-options]:
-ql 程序安装生成的所有文件列表;
[root@wujunjie ~]# rpm -ql tree
/usr/bin/tree
/usr/share/doc/tree-1.6.0
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz
-qi 程序包的相关信息,版本号,大小,所属的包组等;
[root@wujunjie ~]# rpm -qi tree
Name : tree
Version : 1.6.0
Release : 10.el7
Architecture: x86_64
Install Date: Sat 25 Aug 2018 08:56:02 AM CST
Group : Applications/File
Size : 89505
License : GPLv2+
-qc 查询指定的程序提供的配置文件
[root@wujunjie ~]# rpm -qc zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc
-qd 查询指定的程序提供的帮助文件
[root@wujunjie ~]# rpm -qd tree
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz
--changelog 查询rpm包的changelog
--provides 查询指定的程序包提供的所有的CAPABILITY;
-R 查询指定的程序包的依赖关系;
--scripts 查询程序包自带的脚本信息;
校验:
rpm {-V|--verify} [select-options] [verify-options]
S: file Size differs文件的容量大小是否被篡改
M:Mode differs文件的类型或文件的属性是否被改变
5:MD5 sum differs MD5这一种指纹码的内容已经不同
D:Device major/minor number mismatch装置的主/次代码已经改变
L:readLink(2) path mismatch Link路径已被改变
U:User ownership differs 文件的所属人已被改变
G:Group ownership differs 文件的所属群组已被改变
T:mTime differs 文件的创建时间已被改变
P:caPabilities differ
yum命令:
语法格式:yum [options] [command] [package ...]
yum命令可一次性操作多个rpm包的管理
yum常见命令列表
常用命令 | 解释说明 |
---|---|
install package1 [package2] [...] | 安装程序包,package为程序包名即可; |
update [package1] [package2] [...] | 程序包升级,更新,其后可跟程序包名,也可不跟程序包名,如果不加程序包名,即有更新升级的程序包即升级更新,没有的话就不升级更新;这个对比的是yum仓库源里的程序包版本; |
remove erase package1 [package2] [...] | 卸载程序包; |
list | 显示yum仓库里的程序包文件列表; |
info | 查看指定程序包简要信息 |
provides whatprovides feature1 [feature2] [...] | 查看指定的特性或者某个文件由哪个程序包提供 |
makecache | 构建缓存; |
gruops | 包组管理;有些程序包可打包成一个包组名来进行统一管理; |
clean [packages,metadata,expire-cache,rpmdb,plugins,all] 清 | 理本地缓存; |
search string1 [string2] [...] | 搜索指定字符串的相关程序包信息; |
localinstall rpmfile1 [rpmfile2] [...] | 安装本地程序包; |
localupdate rpmfile1 [rpmfile2] [...] | 升级更新本地程序包; |
reinstall package1 [package2] [...] | 重新安装程序包; |
downgrade package1 [package2] [...] | 降级安装程序包; |
deplist package1 [package2] [...] | 显示指定程序包的依赖关系; |
repolist [all,enable,disable] | 显示仓库列表; |
repoinfo [all,enable,disable] | 显示仓库的详细信息; |
version | 显示yum的版本相关信息; |
history | 查看yum事务历史; |
check-update | 检查可用升级的程序包; |
yum | 包组管理的相关管理命令: |
yum groupinstall | 安装多个软件,安装这个软件的所有依赖的软件包,yum groupinstall安装的时候软件包名必须加双引号 |
yum gruopupdate | 更新这个软件的所有软件包 |
yum gruoplist | 查看这个软件的所有软件包 |
yum groupremove | 卸载所有软件包 |
yum groupinfo | 可以获得YUM仓库中的软件分组信息 |
二、自建yum仓库,分别为网络源和本地源
先查看机器上所有的yum源仓库,并将其备份
[root@wujunjie ~]# yum repolist
Loaded plugins: fastestmirror, langpacks
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
Loading mirror speeds from cached hostfile
* base: mirrors.cn99.com
* extras: mirrors.cn99.com
* updates: mirrors.cn99.com
repo id repo name status
!base/7/x86_64 CentOS-7 - Base 9,911
!extras/7/x86_64 CentOS-7 - Extras 370
!updates/7/x86_64 CentOS-7 - Updates 1,054
repolist: 11,335
[root@wujunjie yum.repos.d]# mkdir backup
[root@wujunjie yum.repos.d]# mv ./*.repo backup/
[root@wujunjie yum.repos.d]# ll
total 4
drwxr-xr-x. 2 root root 4096 Sep 15 10:38 backup
挂在本地镜像ISO文件
[root@wujunjie ~]# mkdir /mnt/cdrom
[root@wujunjie ~]# mount /dev/cdrom /mnt/cdrom/
mount: /dev/sr0 is write-protected, mounting read-only
[root@wujunjie ~]# mount -r /dev/cdrom /mnt/cdrom/
mount: /dev/sr0 is already mounted or /mnt/cdrom busy
/dev/sr0 is already mounted on /run/media/root/CentOS 7 x86_64
/dev/sr0 is already mounted on /media/cdrom
/dev/sr0 is already mounted on /mnt/cdrom
配置本地yum源文件
[root@wujunjie yum.repos.d]# vim server_local.repo
[server_local]
name=yum_source
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0
清空原缓存并建立新yum缓存
[root@wujunjie yum.repos.d]# yum clean all
Loaded plugins: fastestmirror, langpacks
Cleaning repos: server_local
Cleaning up everything
Cleaning up list of fastest mirrors
[root@wujunjie yum.repos.d]# yum makecache
Loaded plugins: fastestmirror, langpacks
server_local | 3.6 kB 00:00:00
(1/4): server_local/group_gz | 155 kB 00:00:00
(2/4): server_local/primary_db | 3.0 MB 00:00:00
(3/4): server_local/filelists_db | 3.0 MB 00:00:00
(4/4): server_local/other_db | 1.3 MB 00:00:00
Determining fastest mirrors
Metadata Cache Created
[root@wujunjie yum.repos.d]# yum repolist
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repo id repo name status
server_local yum_source 3,831
repolist: 3,831
三、简述at和crontab命令,制定 每周三凌晨三、五点10分执行某个脚本,输出当前时间,时间格式为 2017-12-28 10:00:00
at命令
at [OPTION]... TIME
常用选项:
-l:查看作业队列,相当于atq,执行完后,就消失了
-f /PATH/FROM/SOMEFILE:从指定文件中读取作业任务,而不用再交互式输入;
-d:删除指定的作业,相当于atrm;
-c:查看指定作业的具体内容;
-q QUEUE:指明队列;
-v 可以使用较明显的时间格式列出at中的工作列表
- 注意:作业执行结果是以邮件发送给提交作业的用户;
[root@wujunjie ~]# at now+2min
at> echo 1234
at>
job 1 at Sat Sep 15 15:45:00 2018
[root@wujunjie ~]# atq
1 Sat Sep 15 15:45:00 2018 a root
[root@wujunjie ~]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N 1 root Sat Sep 15 15:45 14/491 "Output from your job 1"
& 1
Message 1:
From [email protected] Sat Sep 15 15:45:00 2018
Return-Path:
X-Original-To: root
Delivered-To: [email protected]
Subject: Output from your job 1
To: [email protected]
Date: Sat, 15 Sep 2018 15:45:00 +0800 (CST)
From: [email protected] (root)
Status: R
1234
& q
Held 1 message in /var/spool/mail/root
crontab命令
crontab [-u user] [-l | -r | -e] [-i]
常用选项
-e:编辑任务;
-l:列出所有任务;
-r:移除所有任务;即删除/var/spool/cron/USERNAME文件;
-i:在使用-r选项移除所有任务时提示用户确认;
-u user:root用户可为指定用户管理cron任务;
[root@wujunjie ~]# 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
五个时间点分别表示:分,小时,天,月,周几
[root@wujunjie ~]# crontab -l
10 3,5 * * 3 /bin/date '+%F %H:%M:%S '
四、简述sed常用操作命令,并举例
sed [OPTION]... script [input-file]...
常用选项:
-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i∶直接修改读取的档案内容,而不是由萤幕输出。常用编辑命令:
-a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
-c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
-d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
-i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
-p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
-s ∶替换,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!对于替换还有两个后选项分别为:
g:全局替换和
i:不区分大小写
-r /path/from/somefile :在文件的指定位置插入另一个文件的所有内容,完成文件合并
-w /path/to/somefile:把指定的内容另存至/path/somefile路径所指定的文件中-
常用选项实例
-n安静输出;[root@wujunjie ~]# head -4 /etc/passwd|nl|sed -n "2p" 2 bin:x:1:1:bin:/bin:/sbin/nologin取消默认输出
-
常用编辑命令实例:
-a新增内容[root@wujunjie ~]# head -4 /etc/passwd|nl|sed "2a1223213213" 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 1223213213 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin
-c取代
[root@wujunjie ~]# head -4 /etc/passwd|nl|sed "2c1223213213"
1 root:x:0:0:root:/root:/bin/bash
1223213213
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
-d删除
[root@wujunjie ~]# head -4 /etc/passwd|nl|sed "2d"
1 root:x:0:0:root:/root:/bin/bash
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
-i插入
[root@wujunjie ~]# head -4 /etc/passwd|nl|sed "2i1231"
1 root:x:0:0:root:/root:/bin/bash
1231
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
-s替换(g全局替换)
[root@wujunjie ~]# head -4 /etc/passwd|nl|sed "2s#bin#123#g"
1 root:x:0:0:root:/root:/bin/bash
2 123:x:1:1:123:/123:/s123/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
-p列印
[root@wujunjie ~]# head -4 /etc/passwd|nl|sed "2p"
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin