当前位置:   article > 正文

马哥36期第五周作业

--nsnoop 忽略依赖关系

1、每12小时备份并压缩/etc/目录至/backup目录中,保存文件名称格式为,"etc-年-月-日-时-分.tar.gz"

#crontab -e
0 /12 /bin/tar -zvcf /backup/etc-$(date +%Y-%m-%d-%H-%M).tar.gz /etc

2、rpm包管理功能总结以及实例应用演示。

一、程序包管理概述

  1. 1.程序包语言
  2. (1)系统级开发:一般直接调用硬件

C/C++:httpd, vsftpd, nginx

go语言

   (2)应用级开发:java/Python/perl/ruby/php:

java: hadoop, hbase, (基于jvm虚拟机)

Python:openstack, (基于pvm虚拟机)

perl: (perl解释器)

ruby: (ruby解释器)

php: (php解释器)

  1. 2.程序语言格式
  2. (1)C/C++程序格式:

源代码:文本格式的程序代码;

编译开发环境:编译器、头文件、开发库

二进制格式:文本格式的程序代码 --> 编译器 --> 二进制格式(二进制程序、库文件、配置文件、帮助文件)

   (2)java/python程序格式:

源代码:编译成能够在其虚拟机(jvm/pvm)运行的格式;

开发环境:编译器、开发库

二进制

3.项目构建工具:

c/c++: make

java: maven

4.程序包管理器:要完成安装、升级、卸载、查询、校验(校验为Linux所有)功能

   (1)功能

将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作;

  1. (2)组成方式
  2. 1)程序包的组成清单(每个程序包都单独实现):文件清单、 安装或卸载时运行的脚本
  3. 2)数据库(公共):/var/lib/rpm/
  4. 程序包的名称和版本、依赖关系、 功能说明、安装生成的各文件的文件路径及校验码信息...
  5. (3)不同系列Linux所用程序包管理器:

debian:dpt, dpkg, ".deb"

redhat:redhat package manager, rpm, ".rpm"; rpm is package manager;

S.u.S.E:rpm, ".rpm",

Gentoo:ports

ArchLinux:

  1. 5.包的命名格式
  2. (1)源代码:name-VERSION.tar.*z

VERSION:major.minor.release 主版本号.次版本号.发行号

     (2)RPM包:name-VERSION-release.arch.rpm

VERSION:major.minor.release

release.arch:rpm包的发行号,arch 平台号

6.RHEL制作RPM包时会拆包:主包和支包,方便安装所需要组件而非全部

主包:name-VERSION-release.arch.rpm

支包:name-function-VERSION-release.arch.rpm

  1. function(功能):devel, utils, libs, ...
  2. 7.程序包管理器前端工具:自动解决依赖关系;
  3. yumrhel系列系统上rpm包管理器的前端工具;
  4. apt-get (apt-cache):deb包管理器的前端工具;
  5. zyppersuserpm管理器前端工具;

dnf:Fedora 22+系统上rpm包管理器的前端工具,yum的升级版;

8.获取程序包的途径:

(1)系统发行版的光盘或官方的文件服务器(或镜像站点):

http://mirrors.aliyun.com、http://mirrors.sohu.com、http://mirrors.163.com

(2)各个项目自己的官方站点

(3)第三方组织:

  1. 1) EPEL等可靠地开源社区组织
  2. 2) 搜索引擎:http://pkgs.org、 http://rpmfind.net 、http://rpm.pbone.net

(4)自动编译二进制代码、制作

二、RPM包管理

rpm命令:rpm [OPTIONS] [PACKAGE_FILE]

安装:-i, --install

升级:-U, --update, -F, --freshen

卸载:-e, --erase

查询:-q, --query

校验:-V, --verify

数据库维护:--builddb, --initdb

1.安装:

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

rpm -ivh PACKAGE_FILE ...

GENERAL OPTIONS(通用选项):

-v:verbose,详细信息

-vv:更详细的输出

 [install-options]:

-h:hash marks输出进度条;每个#表示2%的进度;

--test:测试安装,检查并报告依赖关系及冲突消息等;

--nodeps:忽略依赖关系;不建议;

--replacepkgs:重新安装

--nosignature:不检查包签名信息,不检查来源合法性;

--nodigest:不检查包完整性信息;

 注意:rpm可以自带脚本;

四类:--noscripts

preinstall:安装过程开始之前运行的脚本,%pre , --nopre

postinstall:安装过程完成之后运行的脚本,%post , --nopost

preuninstall:卸载过程真正开始执行之前运行的脚本,%preun, --nopreun

postuninstall:卸载过程完成之后运行的脚本,%postun , --nopostun

  1. (2)实例演示
  2. 1)[root@localhost Packages]#rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm #安装zsh程序,显示过程

[root@localhost Packages]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:zsh-5.0.2-28.el7 ################################# [100%]

2.升级:

   (1)rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

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

  1. -U:升级或安装 -Uvh; rpm -Uvh PACKAGE_FILE ...
  2. -F:纯粹升级,必须存在老版本,不支持安装操作 -Fvh rpm -Fvh PACKAGE_FILE ...

--oldpackage:降级;

--force:强制升级;

  1. 注意:
  2. 1) 不要对内核做升级操作;Linux支持多内核版本并存,可直接安装新版本内核;
  3. 2) 如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件 不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
  4. (2)实例演示
  5. [root@localhost Packages]# rpm -Uvh zsh-5.0.2-28.el7.x86_64.rpm

[root@localhost Packages]# rpm -Uvh zsh-5.0.2-28.el7.x86_64.rpm
准备中... ################################# [100%]
软件包 zsh-5.0.2-28.el7.x86_64 已经安装
3.卸载:

  1. (1)rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
  2. --allmatches:卸载所有匹配指定名称的程序包的各版本;
  3. --nodeps:忽略依赖关系
  4. --test:测试卸载,dry run模式
  5. (2)实例演示
  6. 1)[root@localhost Packages]#rpm -e --test zsh #测试卸载zsh
  7. [root@localhost Packages]#rpm -ql zsh #查看zsh程序安装所生成的所有文件列表
  8. 结论:--test不会真的卸载程序

[root@localhost Packages]# rpm -e --test zsh
[root@localhost Packages]# rpm -ql zsh
/bin/zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
2)[root@localhost Packages] rpm -e zsh

#卸载程序

[root@localhost Packages]# rpm -e zsh
[root@localhost Packages]# rpm -ql zsh
未安装软件包 zsh
[root@localhost Packages]#
4.查询:

   (1)rpm {-q|--query} [select-options] [query-options]

[select-options]

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

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

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

-p, --package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;

--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供;

--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;

[query-options]

--changelog:查询rpm包的changlog;

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

-i, --info:程序包相关的信息,版本号、大小、所属的包组,等;

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

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

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

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

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

   用法总结:

-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE

-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, -qpc PACKAGE_FILE, ...d

  1. (2)实例演示
  2. 1)[root@localhost Packages]# rpm -ql sed

#查询程序安装所以生成的所有文件列表

[root@localhost Packages]# rpm -ql sed

             2)[root@localhost Packages]# rpm -qi sed  

#显示程序的相关信息

[root@localhost Packages]# rpm -qi sed
Name : sed
Version : 4.2.2
Release : 5.el7
Architecture: x86_64
Install Date: 2018年12月10日 星期一 05时28分49秒
Group : Applications/Text
Size : 601208
License : GPLv3+
Signature : RSA/SHA256, 2014年07月04日 星期五 12时58分02秒, Key ID 24c6a8a7f4a80eb5
Source RPM : sed-4.2.2-5.el7.src.rpm
Build Date : 2014年06月10日 星期二 09时01分55秒
Build Host : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org&gt;
Vendor : CentOS
URL : http://sed.sourceforge.net/
Summary : A GNU stream text editor
Description :
The sed (Stream EDitor) editor is a stream or batch (non-interactive)
3)[root@localhost Packages]# rpm -qd sed #查看包所提供文档位置

[root@localhost Packages]# rpm -qd sed
/usr/share/doc/sed-4.2.2/AUTHORS
/usr/share/doc/sed-4.2.2/BUGS
/usr/share/doc/sed-4.2.2/COPYING
/usr/share/doc/sed-4.2.2/COPYING.DOC
/usr/share/doc/sed-4.2.2/NEWS
/usr/share/doc/sed-4.2.2/README
/usr/share/doc/sed-4.2.2/THANKS
/usr/share/doc/sed-4.2.2/sedfaq.txt.gz
/usr/share/info/sed.info.gz
/usr/share/man/man1/sed.1.gz
4)[root@localhost Packages]# rpm -qc zsh #显示zsh相关的配置文件的位置

[root@localhost Packages]# rpm -qc zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc
5)[root@localhost Packages]# rpm -q --changelog zsh #查询zsh的改变日志

从近到远显示出该程序每次改版更新的相关信息

[root@localhost Packages]# rpm -q --changelog zsh
* 四 2月 16 2017 Kamil Dudka <kdudka@redhat.com> - 5.0.2-28

  • zero new space allocated in prompt buffer (#1408619)

  • 一 11月 28 2016 Kamil Dudka <kdudka@redhat.com> - 5.0.2-27
  • fix parsing of parameter subscript expression with NOEXEC (#1398740)

  • 一 10月 17 2016 Kamil Dudka <kdudka@redhat.com> - 5.0.2-26
  • fix crash while parsing the here-document syntax (#1374752)

  • 四 7月 14 2016 Kamil Dudka <kdudka@redhat.com> - 5.0.2-25
  • improve use of new command substitution in completion (#1356388)

  • 五 6月 10 2016 Kamil Dudka <kdudka@redhat.com> - 5.0.2-24
  • fix off-by-one error in completion utility cache code (#1344599)

    5.校验:

    (1)rpm {-V|--verify} [select-options] [verify-options]

    S file Size differs #文件大小改变

    M Mode differs (includes permissions and file type) #文件权限改变(包括许可和文件类型)

    5 digest (formerly MD5 sum) differs #MD5校验码是否改变

    D Device major/minor number mismatch #设备的主次版本号是否错配

    L readLink(2) path mismatch # readlink路径是否错配

           U User ownership differs              #用户本身关系

    G Group ownership differs # 用户组本身关系

    T mTime differs # 修改时间modify time

    P caPabilities differ

    (2)实例演示

           测试安装的程序的校验信息

    [root@localhost Packages]# rpm -ivh --nodeps php-5.4.16-45.el7_0.3.x86_64.rpm

    [root@localhost Packages]# rpm -V php

忽略依赖关系安装php程序,此处为了测试使用

#测试程序的校验信息

[root@localhost Packages]# rpm -ivh --nodeps php-5.4.16-45.el7.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:php-5.4.16-45.el7 ################################# [100%]
[root@localhost Packages]# rpm -V php
未满足的依赖关系 php-5.4.16-45.el7.x86_64:
php-common(x86-64) = 5.4.16-45.el7 被 (已安裝) php-5.4.16-45.el7.x86_64 需要
php-cli(x86-64) = 5.4.16-45.el7 被 (已安裝) php-5.4.16-45.el7.x86_64 需要
6.包来源合法性验正和完整性验证:

  1. (1) 检验方式
  2. 数字签名:用私钥加密对应程序的特征码
  3. (2) 获取并导入信任的包制作者的密钥:

[root@localhost rpm-gpg]# cd /etc/pki/rpm-gpg/
[root@localhost rpm-gpg]# rpm --import RPM-GPG-KEY-CentOS-7
(3)验证:

1) 安装此组织签名的程序时,会自动执行验证;

2) 手动验正:rpm   -K    PACKAGE_FILE  

在导入秘钥的CentOS7.1上验证

[root@localhost Packages]# rpm -K zsh-5.0.2-28.el7.x86_64.rpm
zsh-5.0.2-28.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 确定
7.数据库重建:

  1. (1)rpm管理器数据库路径:/var/lib/rpm/
  2. 查询操作:通过此处的数据库进行;
  3. (2)获取帮助:CentOS命令查询位置不同
  4. CentOS 6:man rpm
  5. CentOS 7:man rpmdb
  6. (3)rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]

--initdb:初始化数据库,当前无任何数据库可实始化创建一个新的;当前有时不执行任何操作;

--rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;

[--dbpath DIRECTORY] :指明建立位置

  1. (4)实例演示
  2. 1)在指定目录下/rpmdb下初始化一个rpm的数据库

注意:此时的库是没用的,所以大小和原来的库不同

[root@localhost Packages]# rpm -initdb --dbpath /rpmdb/
[root@localhost Packages]# ll /rpmdb/
总用量 440
-rw-r--r--. 1 root root 8192 12月 16 16:05 Basenames
-rw-r--r--. 1 root root 8192 12月 16 16:05 Conflictname
-rw-r--r--. 1 root root 311296 12月 16 16:05 db.001
-rw-r--r--. 1 root root 90112 12月 16 16:05
db.002
-rw-r--r--. 1 root root 107048 12月 16 16:05 __db.003
-rw-r--r--. 1 root root 8192 12月 16 16:05 Dirnames
-rw-r--r--. 1 root root 8192 12月 16 16:05 Group
-rw-r--r--. 1 root root 8192 12月 16 16:05 Installtid
-rw-r--r--. 1 root root 8192 12月 16 16:05 Name
-rw-r--r--. 1 root root 8192 12月 16 16:05 Obsoletename
-rw-r--r--. 1 root root 12288 12月 16 16:05 Packages
-rw-r--r--. 1 root root 8192 12月 16 16:05 Providename
-rw-r--r--. 1 root root 8192 12月 16 16:05 Requirename
-rw-r--r--. 1 root root 8192 12月 16 16:05 Sha1header
-rw-r--r--. 1 root root 8192 12月 16 16:05 Sigmd5
-rw-r--r--. 1 root root 8192 12月 16 16:05 Triggername
2)查看/var/lib/rpm

[root@localhost Packages]# cd /var/lib/rpm
[root@localhost rpm]# ll
总用量 101428
-rw-r--r--. 1 root root 5173248 12月 16 15:55 Basenames
-rw-r--r--. 1 root root 16384 12月 13 21:25 Conflictname
-rw-r--r--. 1 root root 311296 12月 16 16:02 db.001
-rw-r--r--. 1 root root 90112 12月 16 16:02
db.002
-rw-r--r--. 1 root root 1318912 12月 16 16:02 __db.003
-rw-r--r--. 1 root root 1376256 12月 16 15:55 Dirnames
-rw-r--r--. 1 root root 32768 12月 16 15:55 Group
-rw-r--r--. 1 root root 24576 12月 16 15:55 Installtid
-rw-r--r--. 1 root root 81920 12月 16 15:55 Name
-rw-r--r--. 1 root root 36864 12月 16 15:55 Obsoletename
-rw-r--r--. 1 root root 92139520 12月 16 15:55 Packages
-rw-r--r--. 1 root root 2527232 12月 16 15:55 Providename
-rw-r--r--. 1 root root 614400 12月 16 15:55 Requirename
-rw-r--r--. 1 root root 147456 12月 16 15:55 Sha1header
-rw-r--r--. 1 root root 86016 12月 16 15:55 Sigmd5
-rw-r--r--. 1 root root 8192 12月 13 22:33 Triggername

3、yum的配置和使用总结以及yum私有仓库的创建。

一、YUM简介

1. YUM: Yellowdog Update Modifier

完成RHEL系列前端自动解决依赖关系安装工具,依赖rpm存在

  1. 2.工作模式:C/S 架构
  2. Server端(yum仓库):依赖关系库、原文件、校验码文件
  3. Client端:yum客户端程序、配置文件(连接Server路径信息)
  4. 3.设计缺陷:

某一次安装过程中半途终止,再次重启后将无法解决程序间的依赖关系

yum升级版dnf就是为了解决此类问题

2.yum repository: yum repo,yum仓库

存储rpm包,以及包的相关的元数据文件(放置于特定目录下:repodata)

二、YUM客户端配置

1.yum配置文件路径

/etc/yum.conf:为所有yum仓库提供公共配置

/etc/yum.repos.d/*.repo:为仓库的指向提供配置

  1. 2./etc/yum.conf主配置定义
  2. [root@localhost ~]# man 5 yum.conf #可获得yum.conf的详解
  3. [root@localhost ~]# cat /etc/yum.conf

[main] #通用主配置段

cachedir=/var/cache/yum/$basearch/$releasever # 缓存文件路径

keepcache=0 # 缓存到本地的文件是否保存

debuglevel=2 # 调试级别

logfile=/var/log/yum.log # 安装的日志文件

exactarch=1 # 精确严格的平台release匹配

obsoletes=1

gpgcheck=1 #检测来源合法性和完整性

plugins=1 #支持插件机制

installonly_limit=5 #同时安装多少程序包

bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bu # 追踪bug路径

distroverpkg=centos-release # 当前发行版版本号从哪儿获取

3.仓库(*.repo)配置文件定义:

[repositoryID] #仓库ID,唯一标识别,不能重复

name=Some name for this repository # 完整的仓库名称

baseurl=url://path/to/repository/ # yum仓库指明的访问路径

enabled={1|0} #是否启用此yum仓库,默认启用

gpgcheck={1|0} #是否检查完整性和来源合法性

gpgkey=URL #秘钥文件位置,可能是对方仓库提供

enablegroups={1|0} #是否基于组来批量管理程序包

failovermethod={roundrobin|priority} #故障转移方法:轮询、根据优先级选择; 默认roundrobin随机

cost=# #设置开销,默认为1000

… ...

  1. 说明:
  2. 1)*.repo可以将多个[repositoryID]的配置信息放在一个而文件内,也可以切成多个方便管理
  3. 2)baseurl可以使用:ftp:// 、http:// 、nfs://file:/// 指明URL路径
  4. 3)baseurl等号两边不能有空格,其后可以填写多个镜像访问路径,每行一个,不能顶行写
  5. 多个访问路径间联系是镜像相同,目的是为了做备用访问
  6. 4)更多选项使用man 5 yum.conf查看,基本配置只需前三行就可以
  7. 5)发行版光盘镜像安装可能会自动配置网络镜像URL地址

三、yum命令的用法

yum [options] [command] [package ...]

  1. 1.OPTIONS
  2. --nogpgcheck:禁止进行gpg check;
  3. -y: 自动回答为“yes”;
  4. -q: 静默模式,不输出显示信息;
  5. --disablerepo=repoidglob:临时禁用此处指定的repo;
  6. --enablerepo=repoidglob:临时启用此处指定的repo;
  7. --noplugins:禁用所有插件;
  8. 2.常用COMMAND
  9. (1)显示仓库列表:repolist
  10. # yum repolist [all|enabled|disabled] [所有|可用的|不可用]
  11. (2)显示程序包:list
  12. # yum list [all | glob_exp1] [glob_exp2] [...] [所有的|符合glob通配条件的]
  13. # yum list {available|installed|updates} [glob_exp1] [...] 可用尚未安装的,已经安装的,可升级的
  14. (3)安装程序包:install
  15. # yum install package1 [package2] [...]
  16. # yum reinstall package1 [package2] [...] (重新安装)
  17. (4)卸载程序包:此时依赖于此安装包也会被卸载
  18. # yum remove | erase package1 [package2] [...]
  19. (5)升、降级安装程序包:update、downgrade
  20. # yum update [package1] [package2] [...] 升级操作
  21. # yum downgrade package1 [package2] [...] 降级操作
  22. (6)检查可用升级:check-uodate
  23. # yum check-update
  24. (7)查看程序包简要信息:info
  25. # yum info [package1] [package2] [...]
  26. (8)查看指定的特性(可以是某文件)是由哪个程序包所提供:provides
  27. yum provides | whatprovides feature1 [feature2] [...]
  28. (9)清理本地缓存:clean
  29. # yum clean <packages | metadata | expire-cache | rpmdb | plugins | all >

包、源数据、过期缓存、rpmdb、插件、所有

包安装完了会自动清除、而元数据(依赖关系等)不会自动,但下次yum安装会自动重新校验

 3.COMMAND:安装及升级本地程序包

指定安装本地的*.rpm,但是会根据yum源现有依赖关系,解决此安装可能出现的依赖关系

  1. # yum localinstall rpmfile1 [rpmfile2] [...]
  2. # yum localupdate rpmfile1 [rpmfile2] [...]
  3. 4.COMMAND:包组管理的相关命令:

包组:一堆程序的一个集合,用于一起安装,因为某些程序安装需要依赖包组内容

  1. # yum groupinstall group1 [group2] [...] 安装包组
  2. # yum groupupdate group1 [group2] [...] 升级包组
  3. # yum grouplist [hidden] [groupwildcard] [...] 显示包组列表
  4. # yum groupremove group1 [group2] [...] 移除包组
  5. # yum groupinfo group1 [...] 显示包组信息

四、创建yum仓库

1.使用光盘当作本地yum仓库:

光盘的镜像本身就是一个yum源,自己安装系统时候选择安装工具时就是借助yum自动安装

  1. (1)挂载光盘至某目录,例如/media/cdrom # mount -r [-t iso9660] /dev/cdrom /media/cdrom
  2. (2)创建配置文件
  3. [ID]
  4. name=
  5. baseurl=file:///… …
  6. gpgcheck=
  7. 2.yum的repo配置文件中可用的变量:
  8. $releasever: 当前OS的发行版的主版本号;
  9. $arch: 平台;
  10. $basearch:基础平台,同一系列最基本的架构,如3264
  11. $YUM0-$YUM9 可做自定义
  12. 3.手动创建yum仓库:
  13. (1)安装工具:createrepo,已安装

[root@localhost yum.repos.d]# yum info createrepo
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile

  • base: mirrors.cn99.com
  • epel: mirror01.idc.hinet.net
  • extras: mirrors.huaweicloud.com
  • updates: mirrors.cn99.com
    已安装的软件包
    名称 :createrepo
    架构 :noarch
    版本 :0.9.9
    发布 :28.el7
    大小 :302 k
    源 :installed
    来自源:anaconda
    简介 : Creates a common metadata repository
    网址 :http://createrepo.baseurl.org/
    协议 : GPLv2
    描述 : This utility will generate a common metadata repository from a
    : directory of rpm packages.
    (2)下载所需要的所有文件到本地某个路径:

[root@localhost yum.repos.d]# mkdir -p /yumtest/Packages
[root@localhost yum.repos.d]# cp /media/cdrom/Packages/* /yumtest/Packages/
(3)创建关联关系: createrepo - Create repomd (xml-rpm-metadata) repository

命令:createrepo [options] <directory>

当完成后生成repodata即可

[root@localhost yum.repos.d]# createrepo /yumtest/
Spawning worker 0 with 2478 pkgs
Spawning worker 1 with 2478 pkgs
Spawning worker 2 with 2478 pkgs
Spawning worker 3 with 2477 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@localhost yum.repos.d]#
(4)配置yum源文件,创建*.rope写入信息即可

root@localhost yum.repos.d]# cat Local.repo
[Local]
name=Local Yum
baseurl=file:///yumtest/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=1

[root@localhost yum.repos.d]# yum repolist
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
epel/x86_64/metalink | 7.5 kB 00:00

  • base: mirrors.huaweicloud.com
  • epel: ftp.cuhk.edu.hk
  • extras: mirrors.huaweicloud.com
  • updates: mirrors.163.com
    Local | 2.9 kB 00:00
    base | 3.6 kB 00:00
    extras | 3.4 kB 00:00
    updates | 3.4 kB 00:00
    Local/primary_db | 5.9 MB 00:00
    源标识 源名称 状态
    Local Local Yum 9,911
    base/7/x86_64 CentOS-7 - Base 10,019
    epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 12,744
    extras/7/x86_64 CentOS-7 - Extras 321
    updates/7/x86_64 CentOS-7 - Updates 599
    repolist: 33,594

4、写一个脚本实现列出以下菜单给用户:

(1)disk:show disk info信息
(2)mem: show memory info信息
(3)cpu: show cpu info信息
(*)quit


#!/bin/bash

cat << EOF
1)disk: show disk info
2)mem:show memory info
3) cpu:show cpu info
*) quit
EOF

read -p 'Please input your choice:' option
if [[ $option == 'disk' ]];then
fdisk -l
elif [[ $option == 'mem' ]];then
free -h
elif [[ $option == 'cpu' ]];then
lscpu
else
exit 0
fi

5、sed用法总结并结合实例演示

sed:流编辑器
1.sed:Stream Editor 行处理工具,流编辑器

对文件内容逐行进行处理调用操作并显示到STDOUT

    工作流程:

(1)sed默认不编辑原文件,而是逐行操作,复制一份到指定内存(pattern space,模式空间)

(2)pattern space内进行模式匹配,即和指定条件做匹配

不满足模式:输出到标准输出STDOUT

满足模式:进行指定的模式操作,再输出到STDOUT

(3)第二个特殊的内存空间 hold space:保持空间,临时保存操作在另一处内存

(4)当执行pattern space和 hold space相关选项时候回进行之间的数据流编辑操作

(5)最后根据操作执行hold space空间操作,选择性显示到STDOUT

2.格式:sed [OPTION]… {script-only-if-no-other-script} [input-file]…

其中{script-only-if-no-other-script}:指的是AddressCommands,地址界定执行命令

AddressCommands中间无空格,直接连接为一个选项操作

============ sed [OPTION]… AddressCommands [input-file]…==============

  1. (1)OPTION常用选项
  2. -n:不输出模式空间中的内容至屏幕;
  3. -e script, --expression=script:多点编辑;
  4. -f /PATH/TO/SED_SCRIPT_FILE : 每行一个编辑命令;
  5. -r, --regexp-extended:支持使用扩展正则表达式;
  6. -i[SUFFIX], --in-place[=SUFFIX]:直接编辑原文件 ;
  7. (2)地址定界
  8. 1)空地址:什么都不填写时,表示对全文进行处理
  9. 2)单地址
  10. #:表示对指定的行

/pattern/:被此模式所匹配到的每一行,其中模式两边的/不能省略

  3)地址范围  (#表示任意数字)

#,#:从某行到某行,第二个#大于第一个#

#,+#:从某行开始加多商行

#,/pattern1/:从某行开始到第一次配到模式的行

/pattern1/,/pattern2/:从第一次匹配到的模式1到第二次匹配到哦的模式2

  4)步进:~,#~#   从第几行

1~2:所有奇数行。从第一行开始,每次加两行读取

2~2:所有偶数行。从第二行开始,每次加两行读取

    (3)编辑命令

d:删除;

p:显示模式空间中的内容;

a \text:在行后面追加文本“text”,支持使用\n实现多行追加;

i \text:在行前面插入文本“text”,支持使用\n实现多行插入;

c \text:把匹配到的行替换为此处指定的文本“text”;

w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中;

r /PATH/FROM/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行后面;文件合并;

=:为模式匹配到的行打印行号;

!:条件取反;

地址定界!编辑命令;

s///:查找替换,其分隔符可自行指定,常用的有s@@@, s###等;

替换标记:

g:全局替换;

w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;

p:显示替换成功的行;

  1. 练习1:删除/boot/grub/grub2.cfg文件中所有以空白字符开头的行的行首的所有空白字符;
  2. ~]# sed 's@^[[:space:]]\+@@' /etc/grub2.cfg
  3. 练习2:删除/etc/fstab文件中所有以#开头的行的行首的#号及#后面的所有空白字符;
  4. ~]# sed 's@^#[[:space:]]*@@' /etc/fstab
  5. 练习3:输出一个绝对路径给sed命令,取出其目录,其行为类似于dirname;
  6. ~]# echo "/var/log/messages/" | sed 's@[^/]\+/\?$@@'
  7. ~]# echo "/var/log/messages" | sed -r 's@[^/]+/?$@@'
  8. 3.pattern space和hold space编辑命令操作
  9. (1)常用选项
  10. h:把模式空间中的内容覆盖至保持空间中;
  11. H:把模式空间中的内容追加至保持空间中;
  12. g:把保持空间中的内容覆盖至模式空间中;
  13. G:把保持空间中的内容追加至模式空间中;
  14. x:把模式空间中的内容与保持空间中的内容互换;
  15. n:覆盖读取匹配到的行的下一行至模式空间中;
  16. N:追加读取匹配到的行的下一行至模式空间中;
  17. d:删除模式空间中的行;
  18. D:删除多行模式空间中的所有行;
  19. (2)实例演示

sed -n 'n;p' FILE:显示偶数行;

sed '1!G;h;$!d' FILE:逆序显示文件的内容;

sed ’$!d' FILE:取出最后一行;

sed '$!N;$!D' FILE:取出文件后两行;

sed '/^$/d;G' FILE:删除原有的所有空白行,而后为所有的非空白行后添加一个空白行;

sed 'n;d' FILE:显示奇数行;

sed 'G' FILE:在原有的每行后方添加一个空白行;

6、 用bash实现统计访问日志文件中状态码大于等于400的IP数量并排序

#!/bin/bash

  1. nginx_log='/usr/local/nginx/logs/mynginx.log'
  2. code_400_num=$(grep -o '[4|5][0-9][0-9]' ${nginx_log} | wc -l)
  3. code_400_sort=$(grep '[4|5][0-9][0-9]' ${nginx_log} | sort
  4. echo $code_400_num
  5. echo $code_400_sort

7、 使用自制的yum源安装ftp、openssh、curl、wget、tcpdump等软件包

mkdir -p /yumrepo/Packages ###创建本地packages目录
###将需要的Packages拷贝到本地目录
cp /media/cdrom/Packages/ftp-0.17-67.el7.x86_64.rpm /yumrepo/Packages/
cp /media/cdrom/Packages/openssh-* /yumrepo/Packages/
cp /media/cdrom/Packages/curl-7.29.0-35.el7.centos.x86_64.rpm /yumrepo/Packages/
cp /media/cdrom/Packages/wget-1.14-13.el7.x86_64.rpm /yumrepo/Packages/
cp /media/cdrom/Packages/tcpdump-4.5.1-3.el7.x86_64.rpm /yumrepo/Packages/
###使用createrepo命令创建本地yum源(如果没有此命令可以使用yum -y install createrepo安装)

[root@www yumrepo]# createrepo /yumrepo/
Spawning worker 0 with 15 pkgs
Workers Finished
Gathering worker results
++++++++++++++++++++++++++++++
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
修改yum配置文件,将仓库指向本地源
++++++++++++++++++++++++++++++
[root@www ~]# cd /etc/yum.repos.d/
[root@www yum.repos.d]# vim local.repo
[yumrepo]
name=yumrepo
baseurl=file:///yumrepo
enabled=1
gpgcheck=0
++++++++++++++++++++++++++++++
[root@www yum.repos.d]# yum repolist #######查看yum仓库
已加载插件:fastestmirror, security
Loading mirror speeds from cached hostfile

base: mirror.lzu.edu.cn
extras: mirror.lzu.edu.cn
updates: mirrors.cqu.edu.cn
仓库标识 仓库名称 状态
base CentOS-6 - Base 6,713
extras CentOS-6 - Extras 35
updates CentOS-6 - Updates 251
yumrepo yumrepo 15
repolist: 7,014
++++++++++++++++++++++++++++++
安装ftp、openssh、curl、wget、tcpdump等软件包

yum install -y ftp openssh curl wget tcpdump

转载于:https://blog.51cto.com/14387464/2409945

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/195555
推荐阅读
相关标签
  

闽ICP备14008679号