P:打印模式空间开端至\n内容,并追加到默认输出以前
h:把模式空间中的内容覆盖至保持空间中
H:把模式空间中的内容覆盖至保持空间中
g:从保持空间取出数据覆盖至模式空间
G:从保持空间取出内容追加至模式空间
x:把模式空间中的内容与保持空间中的内容进行互换
n:读取匹配到的行的下一行覆盖至模式空间
N:读取匹配到的行的下一行追加至模式空间
d:删除模式空间中的行
D:若是模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间从新启动循环。若是模式空间不包含换行符,则会想发出d命令那样启动正常的新循环前端
sed -n ‘n;p’ file 显示偶数行
sed ‘1!G;h;$!d’ file 倒序显示文件每一行内容
sed ‘N;D’ file 仅显示最后一行
sed ‘$!N;$!D’ file 仅显示文件最后两行
sed ‘G’ file 每行后加一个空行
sed ‘g’ file 将每行内容替换为空行
sed ‘/^$/d;G’ file 每行后加一个空行,已有空白行的仅显示一个空白行
sed ‘n;d’ file 显示奇数行
sed -n ‘1!G;h;$p’ file 倒序显示文件的每一行内容node
程序源代码预处理编译汇编连接
动态编译:.a
动态编译:.sopython
连接主要做用是把各个模块之间互相引用的部分处理好,使得各个模块之间可以正确的衔接,分为静态连接和动态连接
静态连接的特色:
把程序对应的依赖库复制一份到包
libxxx.a
嵌入程序包
升级难,须要从新编译
占用较多空间,迁移容易
动态连接的特色:
只把依赖加作一个动态连接
libxxx.so
“连接指向”
占用较少空间,升级方便数据库
系统级开发
C
C++
应用及开发
Java
delphi
python
go
Php
perl
rubycentos
二进制文件、库文件、配置文件、帮助文件缓存
debian:deb文件, dpkg包管理器
redhat: rpm文件, rpm包管理器
rpm: Redhat Package Manager
RPM Package Managerruby
源代码:
Name-version.tar.gz|bz2|xz
名字-版本号.tar.gz|bz2|xz
rpm包命名方式:
name-VERSION-release.arch.rpm
包名-版本号-release.运行平台.rpm
常见的arch(运行安装平台):
x86: i386, i486, i586, i686
x86_64: x64, x86_64, amd64
跟平台无关:noarch(平台是noarch的软件包表明在大部分平台上均可以通用的软件包,兼容性比较好)服务器
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm 开发子包
Application-utils-VERSION-ARHC.rpm 其它子包
Application-libs-VERSION-ARHC.rpm 其它子包
包之间:可能存在依赖性关系,甚至循环依赖ide
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper: suse上的rpm前端管理工具
dnf: Fedora 18+ rpm包管理器前端管理工具工具
查看二进制程序所依赖的库文件
ldd 后跟二进制文件路径 :查看一个二进制程序所依赖的库文件
管理及查看本机装载的库文件
ldconfig :加载库文件
/sbin/ldconfig -p :显示本机已经缓存的全部可用库文件名及文件路径映射关系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
缓存文件:/etc/ld.so.cache
RPM包内的文件
RPM的元数据,如名称,版本,依赖性,描述等
安装或卸载时运行的脚本
程序包名称及版本
依赖关系
功能说明
包安装后生成的各文件路径及校验码信息
CentOS镜像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
Fedora-EPEL:
Extra Packages for Enterprise Linux
Rpmforge:RHEL推荐,包很全
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
注意:第三方包建议要检查其合法性
来源合法性,程序包的完整性
将编译好的应用程序的各组成文件打包一个或几个 程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、 升级和校验等管理操做
使用包管理器:rpm
使用前端工具:yum, dnf
CentOS系统上使用rpm命令管理程序包:
安装、卸载、升级、查询、校验、数据库维护
rpm {-i|-stall} [install-options] PACKAGE_FILE…
-i 安装
-v :显示过程
-vv:显示详细过程
-h :显示进度
-ivh 经常使用安装选项
--nodeps忽略依赖性关系检测
--test 测试安装,但不是真安装
--replacepkgs 重复安装已安装过的包,文件覆盖
--replacefiles 即将安装的包的部分文件与其余已安装的包文件冲突,可继续安装,文件不覆盖
--nosignature: 不检查来源合法性
--nodigest:不检查包完整性
--noscripts:不执行程序包脚本
%pre: 安装前脚本; --nopre
%post: 安装后脚本; --nopost
%preun: 卸载前脚本; --nopreun
%postun: 卸载后脚本; --nopostun
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
upgrade:安装有旧版程序包,则“升级” 若是不存在旧版程序包,则“安装”
freshen:安装有旧版程序包,则“升级”若是不存在旧版程序包,则不执行升级操做
--oldpackage 指定的包比已安装过的包旧,降级安装
--force 强制安装
-U 指定的包比已安装的包新或者未安装
-F 指定的包比已安装的包新
例:
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
注意:
(1) 不要对内核作升级操做;Linux支持多内核版本并存,所以 ,对直接安装新版本内核
(2) 若是原程序包的配置文件安装后曾被修改,升级时,新版本 的提供的同一个配置文件并不会直接覆盖老版本的配置文
-q查看是否安装
-qa 查询已安装的全部包
-qf 文件路径 查询指定的文件来源于哪个rpm包
-ql 包名 查询该包提供了哪些文件
-qp# rpm包 对未安装的包,指定rpm文件再配合其余查询子选项来进行各项查询操做
-q --changelog 包名 查看更新日志
-qc 包名 查看该软件包所提供的配置文件
-qd 包名 查看该软件包所提供的文档文件
-qi 包名 查看该软件包的详细信息
-q --scripts 查看安装前及安装后的脚本
-q --provides 包名 查看一个软件包提供了哪些能力
-qR 包名 查看一个软件包的运行所依赖的能力
-q --whatprovides 能力名 查看一个能力由哪一个包提供
-q --whatrequires 能力名 查看一个能力依赖于哪些包
rpm2cpio 包文件|cpio –itv 预览包内文件
rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件
小注意:rpm2cpio 能够将rpm 包转换为cpio归档文件
-e 包名(包名要打全,除了.rpm其余都要打上)
rpm -e rpm -q vsftpd
或rpm -e vsftpd --allmatches 安装了多个版本的某个rpm能够一次性所有删除
--nodeps 删除时不检查依赖性关系
包来源合法性验证及完整性验证
完整性验正:SHA256
来源合法性验正:RSA
公钥加密
对称加密:加密、解密使用同一密钥
非对称加密:密钥是成对儿的
public key: 公钥,公开全部人
secret key: 私钥, 不能公开
-V 校验已安装的包的文件哪些发生生了更改或丢失,更改变化的类型以下:
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
-pV: 显示比-V还详细的更改信息,未安装的包也能够看,-V则不能够
-V 后跟包名就能够了,-pV: 后必须跟全称,.rpm只须要跟软件名就能够了
下面咱们就测试一下
例图:
当vsftpd的全部配置文件都没有被改变时-V是没有反应的,当咱们修改某一个文件时在用-V来查询,下面就就指出了被修改的文件的路径,S.5….T. 提示了是被更改了哪些信息,
这个图呢是为了验证使用-Pv时必须打上软件包的全称,不然会出错呦
-K|checksig rpmfile 验证包的合法性,完整性和签名
--import 公钥: 导入公钥(公钥RPM-GPG-KEY-CentOS-6)
rpm -qa "gpg-pubkey*" 查询公钥
rpm -e rpm -qa "gpg-pubkey*"
删除公钥
导入公钥例图:
第一步,在挂载的光盘下查找公钥路径
第二部导入公钥
rpm数据库是记录安装的哪些软件包,哪些软件包没有被安装的一个数据库,rpm -q 就是查询软件包是否安装的一个命令,而这个命令访问的就是这个数据库里面的文件来得知该软件包是否被安装而后再告诉用户的,若是这个数据库被删除了,则使用rpm -q就会出错,无论有没有安装哪一个包都会提示没有安装,由于数据库中没有这个软件包的记录了。rpm数据库的路径是/var/lib/rpm 数据库重建: rpm {--initdb|--rebuilddb} Initdb :初始化 若是事先不存在数据库,则建之 不然不执行任何操做 rebuilddb :重建已安装的包头的数据库索引目录