第五周

1、简述rpm与yum命令的常见选项,并举例

rpm命令

rpm命令是遵循GPL协议且功能强大的包管理,它可以建立、安装、请求、确认、和卸载软件包。间接的提升了Linux 的易用性。

在CentOS系统上rpm命令管理程序包是用来安装、升级、卸载、查询和校验、数据库维护等功能。

安装:

rpm {-i|--install} [install-options] PACKAGE_FILE ...

-v:安装时详细信息输出;
-vv:安装时输出更加详细的信息;
-h:输出进度条;每个#表示2%的进度;
--test:测试安装,检查并报告依赖关系及冲突消息等;
--nodeps:忽略依赖关系安装;
--replacepkgs:重新安装;

实例:
[root@localhost Packages]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:zsh-5.0.2-28.el7                 ################################# [100%]

rpm安装时可以运行脚本,共有如下四类:

preinstall:安装过程开始之前运行的脚本,%pre , --nopre
postinstall:安装过程完成之后运行的脚本,%post , --nopost
preuninstall:卸载过程真正开始执行之前运行的脚本,%preun, --nopreun
postuninstall:卸载过程完成之后运行的脚本,%postun , --nopostun
--nosignature:不检查包签名信息,不检查来源合法性;
--nodigest:不检查包完整性信息;

升级:

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

-U:升级或安装;
-F:升级
--oldpackage:降级;
--force:强制升级;

卸载:

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...

--allmatches:卸载所有匹配指定名称的程序包的各版本;
--nodeps:忽略依赖关系
--test:测试卸载,dry run模式

实例:
[root@localhost Packages]# rpm -e zsh
[root@localhost Packages]# echo $?
0

查询:对运维是非常重要的功能

rpm {-q|--query} [select-options] [query-options]

  • [select-options]

PACKAGE_NAME:查询指定的程序包是否已经安装,和他的版本;

例:
[root@localhost Packages]# rpm -q zsh
zsh-5.0.2-28.el7.x86_64

-a, --all:查询所有已经安装过的包;

例:
[root@localhost Packages]# rpm -qa | grep "^z"
zsh-5.0.2-28.el7.x86_64
zlib-1.2.7-17.el7.x86_64

-f FILE:查询指定的文件由哪个程序包安装生成;

例:
[root@localhost Packages]# rpm -qf /etc/fstab 
setup-2.8.71-7.el7.noarch

-p, --package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;
--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供;
--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;

  • [query-options]

--changelog:查询rpm包的changlog;

例:
[root@localhost Packages]# rpm -q --changelog zsh | less

-l, --list:程序安装生成的所有文件列表;

[root@localhost Packages]# rpm -ql bash | wc -l
109

-i, --info:程序包相关的信息;

[root@localhost Packages]# rpm -qi bash
Name        : bash
Version     : 4.2.46
Release     : 28.el7
Architecture: x86_64
Install Date: Thu 22 Feb 2018 05:27:35 AM EST
Group       : System Environment/Shells
Size        : 3663637
License     : GPLv3+
Signature   : RSA/SHA256, Thu 10 Aug 2017 11:03:40 AM EDT, Key ID 24c6a8a7f4a80eb5
Source RPM  : bash-4.2.46-28.el7.src.rpm
Build Date  : Wed 02 Aug 2017 05:13:21 PM EDT
Build Host  : c1bm.rdu2.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem 
Vendor      : CentOS
URL         : http://www.gnu.org/software/bash
Summary     : The GNU Bourne Again shell
Description :
The GNU Bourne Again shell (Bash) is a shell or command language
interpreter that is compatible with the Bourne shell (sh). Bash
incorporates useful features from the Korn shell (ksh) and the C shell
(csh). Most sh scripts can be run by bash without modification.

-c, --configfiles:查询指定的程序包提供的配置文件;

[root@localhost Packages]# rpm -qc bash
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc

-d, --docfiles:查询指定的程序包提供的文档;

[root@localhost Packages]# rpm -qc zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc

--provides:列出指定的程序包提供的所有的CAPABILITY;

[root@localhost Packages]# rpm -qc zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc

-R, --requires:查询指定的程序包的依赖关系;

[root@localhost Packages]# rpm -q -R bash
/bin/sh
config(bash) = 4.2.46-28.el7
libc.so.6()(64bit)
libc.so.6(GLIBC_2.11)(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.15)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libc.so.6(GLIBC_2.8)(64bit)
libdl.so.2()(64bit)
libdl.so.2(GLIBC_2.2.5)(64bit)
libtinfo.so.5()(64bit)
rpmlib(BuiltinLuaScripts) <= 4.2.2-1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1

--scripts:查看程序包自带的脚本片断;

[root@localhost Packages]# 
[root@localhost Packages]# rpm -q -R bash
/bin/sh
config(bash) = 4.2.46-28.el7
libc.so.6()(64bit)
libc.so.6(GLIBC_2.11)(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.15)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libc.so.6(GLIBC_2.8)(64bit)
libdl.so.2()(64bit)
libdl.so.2(GLIBC_2.2.5)(64bit)
libtinfo.so.5()(64bit)
rpmlib(BuiltinLuaScripts) <= 4.2.2-1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1

校验:查看程序是否被人改过

rpm {-V|--verify} [select-options] [verify-options]

来源合法性验证:完整性验证,获取并导入信任的包制作者的密钥;

验证:

  • 安装此组织签名的程序时,会自动执行验正;
  • 手动验正:rpm -K PACKAGE_FILE

数据库重建:

rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]

--initdb:初始化数据库,当前无任何数据库可初始化创建一个新的;当前有时不执行任何操作;
--rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;

实例:创建数据库
[root@localhost Packages]# mkdir /tmp/rpm
[root@localhost Packages]# rpm --initdb --dbpath=/tmp/rpm
[root@localhost Packages]# ls /tmp/rpm
Basenames     __db.002  Group       Obsoletename  Requirename  Triggername
Conflictname  __db.003  Installtid  Packages      Sha1header
__db.001      Dirnames  Name        Providename   Sigmd5

···
[root@localhost Packages]# rpm --rebuilddb --dbpath=/tmp/rpm
[root@localhost Packages]# ls /tmp/rpm
Basenames Dirnames Installtid Obsoletename Providename Sha1header Triggername
Conflictname Group Name Packages Requirename Sigmd5
···

yum命令

能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

yum的命令行选项:

  • --nogpgcheck:禁止进行gpg check;
  • -y:非交互式自动化安装;
  • -q:静默模式;
  • --disablerepo=repoidglob:临时禁用此处指定的repo;
  • --enablerepo=repoidglob:临时启用此处指定的repo;
  • --noplugins:禁用所有插件;
实例:
[root@localhost Packages]# yum -y install tree
Loaded plugins: fastestmirror
base                                                                     | 3.6 kB  00:00:00     
extras                                                                   | 3.4 kB  00:00:00     
updates                                                                  | 3.4 kB  00:00:00     
(1/2): extras/7/x86_64/primary_db                                        | 185 kB  00:00:00     
(2/2): updates/7/x86_64/primary_db                                       | 6.9 MB  00:00:09     
Determining fastest mirrors
 * base: mirrors.sohu.com
 * extras: mirrors.tuna.tsinghua.edu.cn
 * updates: mirrors.163.com
Resolving Dependencies
--> Running transaction check
---> Package tree.x86_64 0:1.6.0-10.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================================
 Package            Arch                 Version                       Repository          Size
================================================================================================
Installing:
 tree               x86_64               1.6.0-10.el7                  base                46 k

Transaction Summary
================================================================================================
Install  1 Package

Total download size: 46 k
Installed size: 87 k
Downloading packages:
tree-1.6.0-10.el7.x86_64.rpm                                             |  46 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
  Installing : tree-1.6.0-10.el7.x86_64                                                     1/1 
  Verifying  : tree-1.6.0-10.el7.x86_64                                                     1/1 

Installed:
  tree.x86_64 0:1.6.0-10.el7                                                                    

Complete!

2、自建yum仓库,分别为网络源和本地源

制作网络源,并用CentOS安装光盘制作本地源

  • 挂载光盘
[root@localhost ~]# mkdir /mnt/cdrom
[root@localhost ~]# mount -r /dev/cdrom /mnt/cdrom
[root@localhost ~]# mount | tail -1
/dev/sr0 on /mnt/cdrom type iso9660 (ro,relatime)
  • repodata文件是yum源可以指向的位置
[root@localhost ~]# cd /mnt/cdrom/
[root@localhost cdrom]# ls
CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL
  • 备份其他仓库
[root@localhost yum.repos.d]# ls
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo
[root@localhost yum.repos.d]# mkdir original
[root@localhost yum.repos.d]# mv Cen* original/
[root@localhost yum.repos.d]# ls
original
  • VIM创建源配置文件,base为本地源,centos7为网络源
    各网络源镜像地址:https://www.centos.org/download/mirrors/
    [root@localhost yum.repos.d]# vim local.repo
  1 [base]                            ==> 仓库名称,必须唯一
  2 name=CentOS 7 Release 7.4.1708    ==> 仓库说明
  3 baseurl=file:///mnt/cdrom         ==>  仓库的访问路径
  4 enabled=1                         ==>  1为启用此仓库,0为不启用
  5 gpgcheck=0                        ==>  1为启用秘钥,0为不启用
  6 
  7 [centos7]
  8 name=CentOS 7
  9 baseurl=https://mirrors.ustc.edu.cn/centos/7.4.1708/os/x86_64/
 10 enbaled=1
 11 gpgcheck=0
  • 查看和更新仓库信息,网络源centos7和本地源base都各有9591个程序包。
[root@localhost yum.repos.d]# yum repolist
Loaded plugins: fastestmirror
base                                                                     | 3.6 kB  00:00:00     
centos7                                                                  | 3.6 kB  00:00:00     
(1/2): centos7/group_gz                                                  | 156 kB  00:00:00     
(2/2): centos7/primary_db                                                | 5.7 MB  00:00:07     
Loading mirror speeds from cached hostfile
repo id                             repo name                                             status
base                                CentOS 7 Release 7.4.1708                             9,591
centos7                             CentOS 7                                              9,591
repolist: 19,182

3、简述at和crontab命令,制定 每周三凌晨三、五点10分执行某个脚本,输出当前时间,时间格式为 2017-12-28 10:00:00

at命令

在未来的一个时间执行一次任务

at [OPTION]... TIME

常用选项:
-l:查看作业队列,相当于atq,执行完后,就消失了
-f /PATH/FROM/SOMEFILE:从指定文件中读取作业任务,而不用再交互式输入;
-d:删除指定的作业,相当于atrm;
-c:查看指定作业的具体内容;
-q QUEUE:指明队列;
注意:作业执行结果是以邮件发送给提交作业的用户;

实例:
[root@localhost yum.repos.d]# at now+2min
at> echo holle,11223344
at> 
job 5 at Fri Mar 30 22:42:00 2018
[root@localhost yum.repos.d]# atq
[root@localhost yum.repos.d]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N  1 root                  Fri Mar 30 22:42  14/512   "Output from your job        5"
& 1
Message  1:
From [email protected]  Fri Mar 30 22:42:05 2018
Return-Path: 
X-Original-To: root
Delivered-To: [email protected]
Subject: Output from your job        5
To: [email protected]
Date: Fri, 30 Mar 2018 22:42:05 -0400 (EDT)
From: [email protected] (root)
Status: R

holle,11223344

& q
Held 1 message in /var/spool/mail/root
You have mail 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@localhost ~]# crontab -e    ==> 编辑脚本任务

10 3,5 * * 3 bin/date '%F %T'    ==> 编辑脚本内容

[root@localhost ~]# crontab -l   ==> 查看作业队列
10 3,5 * * 3 bin/date '%F %T'

4、简述sed常用操作命令,并举例

sed命令是linux下的文本处理三剑客之一,它是一个“非交互式的”面向字符流的编辑器。处理时,把当前要处理的行存储在缓冲区(模式空间)中,接着用sed命令来处理缓冲区的内容,处理完成,把缓冲区内容输出屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。

sed [OPTION]... 'script' [input-file] ...

选项与参数:
-n:不输出模式空间中的内容至屏幕;
-e:多点编辑;直接在命令行界面进行sed的动作编辑
-f:将sed的动作下载一个文件内,每行一个编辑命令;
-r:支持使用扩展正则表达式;
-i:直接编辑原文件 ;

编辑命令:
d:删除;
p:显示模式空间中的内容;
i \text:在行前面插入文本“text”,支持使用\n实现多行插入;
c \text:把匹配到的行替换为此处指定的文本“text”;
w:保存模式空间匹配到的行至指定的文件中;
r :读取文件内容到现文件被匹配到的行后面并文件合并;
=:为模式匹配到的行打印行号;
!:条件取反;
s///:查找替换

实例:
[root@localhost bbb]# nl aaa.txt 
     1  111111111
     2  #2222222
     3  3333333
     4  ##gggggg
     5  asaassasas
     6    ASVDFGLOE,D
     7  ##$%^&*^^%^**111111111
     8  #2222222
     9  3333333

删除2-5行
[root@localhost bbb]# nl aaa.txt | sed '2,5d'
     1  111111111
     6    ASVDFGLOE,D
     7  ##$%^&*^^%^**111111111
     8  #2222222
     9  3333333

显示偶数行
[root@localhost bbb]# nl aaa.txt | sed '1~2d'
     2  #2222222
     4  ##gggggg
     6    ASVDFGLOE,D
     8  #2222222

第三行前面插入字符
[root@localhost bbb]# nl aaa.txt | sed '3i \nwe line'
     1  111111111
     2  #2222222
nwe line
     3  3333333
     4  ##gggggg
     5  asaassasas
     6    ASVDFGLOE,D
     7  ##$%^&*^^%^**111111111
     8  #2222222
     9  3333333

有#号的行后面追加字符
[root@localhost bbb]# nl aaa.txt | sed '/#/a \PPPPPPPPPP'
     1  111111111
     2  #2222222
PPPPPPPPPP
     3  3333333
     4  ##gggggg
PPPPPPPPPP
     5  asaassasas
     6    ASVDFGLOE,D
     7  ##$%^&*^^%^**111111111
PPPPPPPPPP
     8  #2222222
PPPPPPPPPP
     9  3333333

匹配不以2结尾的行,显示处理后的结果,不输出模式空间的内容
[root@localhost bbb]# nl aaa.txt | sed -n '/[^2]$/p'
     1  111111111
     3  3333333
     4  ##gggggg
     5  asaassasas
     6    ASVDFGLOE,D
     7  ##$%^&*^^%^**111111111
     9  3333333

把#替换成@
[root@localhost bbb]# nl aaa.txt | sed 's/#/@/g'
     1  111111111
     2  @2222222
     3  3333333
     4  @@gggggg
     5  asaassasas
     6    ASVDFGLOE,D
     7  @@$%^&*^^%^**111111111
     8  @2222222
     9  3333333

你可能感兴趣的:(第五周)