第四周
处理文本的工具sed
- Stream EDitor, 行编辑器
- sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时 缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的 内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。 如果没有使诸如‘D’的特殊命令,那会在两个循环之间清空模式空间,但不会清 空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重 定向存储输出。
- 功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等
- 参考: http://www.gnu.org/software/sed/manual/sed.html
sed [option]... ‘script‘ inputfile...
常用选项:
- -n 不输出模式空间内容到屏幕,即不自动打印
- -e 多点编辑
- -f /PATH/SCRIPT_FILE 从指定文件中读取编辑脚本
- -r 支持使用扩展正则表达式
- -i.bak 备份文件并原处编辑
script: ‘地址命令‘
地址定界:
- (1) 不给地址:对全文进行处理
- (2) 单地址:
?? #:指定的行,$:最后一行
?? /pattern/:被此处模式所能够匹配到的每一行 - (3) 地址范围:
????#,#
????#,+#
????/pat1/,/pat2/
????#,/pat1/ - (4) ~:步进
?? 1~2 奇数行
?? 2~2 偶数行
编辑命令:
- d 删除模式空间匹配的行,并立即启用下一轮循环
- p 打印当前模式空间内容,追加到默认输出之后
- a []text 在指定行后面追加文本,支持使用\n实现多行追加
- i []text 在行前面插入文本
- c []text 替换行为单行或多行文本
- w /path/file 保存模式匹配的行至指定文件
- r /path/file 读取指定文件的文本至模式空间中匹配到的行后
- = 为模式空间中的行打印行号
- ! 模式空间中匹配行取反处理
- s/// 查找替换,支持使用其它分隔符,[email protected]@@,s###
- 替换标记:
????g 行内全局替换
????p 显示替换成功的行
????w /PATH/FILE 将替换成功的行保存至文件中
高级编辑命令:
- P: 打印模式空间开端至\n内容,并追加到默认输出之前
- h: 把模式空间中的内容覆盖至保持空间中
- H:把模式空间中的内容追加至保持空间中
- g: 从保持空间取出数据覆盖至模式空间
- G:从保持空间取出内容追加至模式空间
- x: 把模式空间中的内容与保持空间中的内容进行互换
- n: 读取匹配到的行的下一行覆盖至模式空间
- N:读取匹配到的行的下一行追加至模式空间
- d: 删除模式空间中的行
- D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本, 并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间 不包含换行符,则会像发出d命令那样启动正常的新循环
软件包管理
包和包管理器
- 最初只提供了.tar.gz的打包的源码文件,用户必须自已编译每个想在 GNU/Linux上运行的软件。用户急需系统能提供一种更加便利的方法来 管理这些软件,当Debian诞生时,这样一个管理工具也就应运而生,它 被命名为dpkg。从而著名的“package”概念第一次出现在GNU/Linux 系统中,稍后Red Hat才开发自己的“rpm”包管理系统
- 包的组成: 二进制文件、库文件、配置文件、帮助文件
程序包管理器:
- debian: deb文件, dpkg包管理器
- redhat: rpm文件, rpm包管理器
- rpm:Redhat Package Manager
???RPM Package Manager
包命名
- 源代码:name-VERSION.tar.gz|bz2|xz
VERSION: major.minor.release - rpm包命名方式:
name-VERSION-release.arch.rpm
例:bash-4.2.46-19.el7.x86_64.rpm
VERSION: major.minor.release release:release.OS
常见的arch: x86: i386, i486, i586, i686 x86_64: x64, x86_64, amd64 powerpc: ppc
跟平台无关:noarch
包命名和工具
- 包:分类和拆包
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm 开发子包
Application-utils-VERSION-ARHC.rpm 其它子包
Application-libs-VERSION-ARHC.rpm 其它子包 - 包之间:可能存在依赖关系,甚至循环依赖
- 解决依赖包管理工具
yum:rpm包管理器的前端工具
apt:deb包管理器前端工具
zypper:suse上的rpm前端管理工具
dnf:Fedora 18+ rpm包管理器前端管理工具
库文件
- 查看二进制程序所依赖的库文件
ldd /PATH/TO/BINARY_FILE - 管理及查看本机装载的库文件
ldconfig 加载配置文件中指定的库文件
/sbin/ldconfig –p 显示本机已经缓存的所有可用库文件名及文件路径 映射关系 - 配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
- 缓存文件:/etc/ld.so.cache
程序包的来源
- 管理程序包的方式:
??????使用包管理器:rpm
??????使用前端工具:yum, dnf
获取程序包的途径
(1) 系统发版的光盘或官方的服务器
- CentOS镜像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2) 项目官方站点
(3) 第三方组织:
- Fedora-EPEL:
Extra Packages for Enterprise Linux - Rpmforge:RHEL推荐,包很全
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
(4) 自己制作
注意:第三方包建议要检查其合法性 来源合法性,程序包的完整性
rpm包管理
CentOS系统上使用rpm命令管理程序包:
安装、卸载、升级、查询、校验、数据库维护
- 安装: rpm {-i|--install} [install-options] PACKAGE_FILE…
-v: verbose
-vv:
-h: 以#显示程序包管理执行进度 - rpm -ivh PACKAGE_FILE ...
rpm包安装
- [install-options]
--test: 测试安装,但不真正执行安装,即dry run模式
--nodeps:忽略依赖关系
--replacepkgs | replacefiles
--nosignature: 不检查来源合法性
--nodigest:不检查包完整性
--noscripts:不执行程序包脚本
??????%pre: 安装前脚本 --nopre
??????%post: 安装后脚本 --nopost
??????%preun: 卸载前脚本 --nopreun
??????%postun: 卸载后脚本 --nopostunrpm包升级
- 升级:
- rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
- rpm {-F|--freshen} [install-options] PACKAGE_FILE...
???upgrade:安装有旧版程序包,则“升级”
??????如果不存在旧版程序包,则“安装”
???freshen:安装有旧版程序包,则“升级”
??????如果不存在旧版程序包,则不执行升级操作 - rpm -Uvh PACKAGE_FILE ...
- rpm -Fvh PACKAGE_FILE ...
- --oldpackage:降级
- --force: 强制安装
- [install-options]
注意:
(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此直接安装新版本内核
(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文 件不会直接覆盖老版本的配置文件,而把新版本文件重命名(FILENAME.rpmnew)后 保留
包查询
- rpm {-q|--query} [select-options] [query-options]
- [select-options]
-a:所有包
-f:查看指定的文件由哪个程序包安装生成
-p rpmfile:针对尚未安装的程序包文件做查询操作
--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供
--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖 - rpm2cpio 包文件|cpio –itv 预览包内文件
- rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件
- [query-options]
--changelog:查询rpm包的changelog
-c:查询程序的配置文件
-d:查询程序的文档
-i:information
-l:查看指定的程序包安装后生成的所有文件
--scripts:程序包自带的脚本
--provides:列出指定程序包所提供的CAPABILITY
-R:查询指定的程序包所依赖的CAPABILITY - 常用查询用法
-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
-qa - 包卸载
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
当包卸载时,对应的配置文件不会删除, 以FILENAME.rpmsave形式保留
包校验
- 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
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 - 包来源的合法性验证及完整性验证
完整性验证:SHA256
来源合法性验证:RSA - 公钥加密
对称加密:加密、解密使用同一密钥
非对称加密:密钥是成对儿的
public key: 公钥,公开所有人
secret key: 私钥, 不能公开 - 导入所需要公钥
rpm -K|checksig rpmfile 检查包的完整性和签名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7
rpm -qa “gpg-pubkey*”
rpm数据库
- 数据库重建: /var/lib/rpm
- rpm {--initdb|--rebuilddb}
initdb: 初始化
如果事先不存在数据库,则新建之
否则,不执行任何操作
rebuilddb:重建已安装的包头的数据库索引目录
yum源
- 阿里云repo文件 http://mirrors.aliyun.com/repo/
- CentOS系统的yum源 ?阿里云:https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
- 清华大学:https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/
- EPEL的yum源
- 阿里云:https://mirrors.aliyun.com/epel/$releasever/x86_64
- 阿里巴巴开源软件 https://opsx.alibaba.com/
yum-config-manager
- 生成172.16.0.1_cobbler_ks_mirror_CentOS-X-x8664.repo yum-config-manager --add-repo= http://172.16.0.1/cobbler/ks_mirror/7/
- yum-config-manager --disable “仓库名" 禁用仓库
- yum-config-manager --enable “仓库名” 启用仓库
yum命令
- yum命令的用法:
yum [options] [command] [package ...] - 显示仓库列表: yum repolist [all|enabled|disabled]
- 显示程序包: yum list yum list [all | glob_exp1] [glob_exp2] [...] yum list {available|installed|updates} [glob_exp1] [...]
- 安装程序包: yum install package1 [package2] [...] yum reinstall package1 [package2] [...] (重新安装)
- 升级程序包: yum update [package1] [package2] [...] yum downgrade package1 [package2] [...] (降级)
- 检查可用升级: yum check-update
- 卸载程序包: yum remove | erase package1 [package2] [...]
- 查看程序包information:
yum info [...] - 查看指定的特性(可以是某文件)是由哪个程序包所提供: yum provides | whatprovides feature1 [feature2] [...]
- 清理本地缓存:
清除/var/cache/yum/$basearch/$releasever缓存
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] - 构建缓存: yum makecache
- 搜索:yum search string1 [string2] [...]
以指定的关键字搜索程序包名及summary信息 - 查看指定包所依赖的capabilities:
yum deplist package1 [package2] [...] - 查看yum事务历史:
yum history [info|list|packages-list|packages-info|
summary|addon-info|redo|undo|
rollback|new|sync|stats]
yum history
yum history info 6
yum history undo 6- 日志 :/var/log/yum.log
- 安装及升级本地程序包
yum localinstall rpmfile1 [rpmfile2] [...]
(用install替代)
yum localupdate rpmfile1 [rpmfile2] [...]
(用update替代)- 包组管理的相关命令
yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum grouplist [hidden] [groupwildcard] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]
- 包组管理的相关命令
- yum的命令行选项:
--nogpgcheck:禁止进行gpg check
-y: 自动回答为“yes”
-q:静默模式
--disablerepo=repoidglob:临时禁用此处指定的repo --enablerepo=repoidglob:临时启用此处指定的repo
--noplugins:禁用所有插件
系统安装光盘作为本地yum仓库:
- (1) 挂载光盘至某目录,例如/mnt/cdrom
*<<开起autofs服务 systemctl start autofs
开机启动autofs服务 systemctl enable autofs
开启autofs服务后根目录下出现misc目录, cd /misc/cd cd目录会自动挂载光盘。从而可以将/misc/cd目录作为yum仓库>>
关闭linux防火墙 systemctl
mount /dev/cdrom /mnt/cdrom
- (2) 创建配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled= - 创建yum仓库:
createrepo [options] <directory>
DNF
- DNF 介绍:新一代的RPM软件包管理器。DNF 发行日期是2015年5月11日,DNF 包管 理器采用Python 编写,发行许可为GPL v2,首先出现在Fedora 18 发行版中。在 RHEL 8.0 版本正式取代了 YUM,DNF包管理器克服了YUM包管理器的一些瓶颈,提升 了包括用户体验,内存占用,依赖分析,运行速度等
- 安装所需软件包,依赖epel源
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-conf-0.6.42.sdl7.noarch.rpm
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64//dnf-0.6.42.sdl7.noarch.rpm
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/python-dnf-0.6.42.sdl7.noarch.rpm
yum install python-dnf-0.6.4-2.sdl7.noarch.rpm dnf-0.6.4-2.sdl7.noarch.rpm dnf-conf-0.6.42.sdl7.noarch.rpm python2-libcomps-0.1.8-3.el7.x86_64.rpm libcomps-0.1.83.el7.x86_64.rpm- 配置文件:/etc/dnf/dnf.conf
- 仓库文件:/etc/yum.repos.d/ *.repo
- 日志: /var/log/dnf.rpm.log
*<<将上述rpm包制作成yum仓库,baseurl=仓库文件地址>>
DNF使用
dnf 用法:与yum一致
dnf [options] <command> [<arguments>...]
dnf --version dnf repolist
dnf install httpd
dnf remove httpd
dnf clean all
dnf makecache
dnf list installed
dnf list available
dnf search nano
dnf history undo 1
原文地址:https://blog.51cto.com/14450832/2427517