sed行编辑器和软件包管理
sed 中有一个模式空间(pattern space)即内存空间
工作原理:sed从文件或者管道中读取一行,处理一行,输出一行,在读取一行,在处理一行,直到最后一行,每当处理一行时,把当前处理的行存储在临时缓冲区,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲去的内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾,一次处理一行的设计模式使得sed性能很高,sed在读取大文件时不会出现卡顿的现象,如果使用vi命令打开几十M上百M的文件,明显会出现卡顿的现象,这是因为vi命令打开文件是一次性将文件加载到内存,然后再打开,sed就避免了这种情况,一行一行的处理,打开的速度非常快,执行速度也很快。
适合在脚本中调用
sed命令可以显示内容,也可以修改内容(编辑修改配置文件)
sed是一门独立的语言,支持标准输入,标准输入,内置自动打印,
选项:-n 不输出模式空间的内容到屏幕上,即不自动打印
-e 多点编辑
-f file 从指定文件中读取编辑脚本
-r -E 使用扩展正则表达式
-i.bak 备份文件并原处编辑 (修改)
-s 将多个文件视为独立文件,而不是单个连续的长文件流
说明: -ir 不支持
-i -r 支持
-ri 支持
-ni 清空文件
请注意:(这里不要同时使用p,-n 只会保存匹配成功的行,会直接把其他内容损坏)
可以使用&符号代替前面“pattern”模式
地址格式:1.不给地址,对全文进行处理
2.单地址:#:指定的行,$:最后一行
/pattern/ :被此处模式能够匹配的每一行
3.地址范围:#.# 从#到第#行
#,+# 从#到+#行
/pat1/,/pat2/
#,/pat/
/pat/,#
4,步进:~ : 1~2奇数行,2~2偶数行
命令:p :打印当前模式空间内容,追加到默认输出之后
打印所有内容
IP:忽略大小写输出
d 删除模式空间匹配的行,并立即自用下一轮循环 (只能按照从上往下的顺序删,不支持横向删除)
a [\]text:在指定行后面追加文本,支持使用\n实现多行追加
i [\]text:在行前面插入文本
c [\]text :替换行为单行或多行文本(替换内容)
w file :保存模式匹配的行至指定文件
r file:读取指定文件的文本至模式空间中匹配到的行后
= :为模式空间中的行打印行号
! :模式空间匹配行取反处理
q : 结束或退出sed
查找替换:s/pattern/string/修饰符 分隔符可以替换其他形式:s@@@,s###
替换修饰符:g :行内全局替换 p:显示替换成功的行 w /path/file :将替换成功的行保存至文件中
I i :忽略大小写
高级用法:sed中除了模式空间,还另外支持保持空间(hold space),利用此空间,可以将模式空间中的数据,零食保存至保存空间,从而后续接着处理,实现更为强大的功能
常见的高级命令
P:打印模式空间开端至\n内容,并追加到默认输出之前
把第一行打印出来
h:把模式空间中的内容覆盖至保持空间
H:包模式空间的内容追加至保持空间中
g:从保持空间取出数据覆盖至模式空间
G:从保持空间取出内容追加至模式空间
x:把模式空间的内容与保持空间中的内容进行互换
n:读取匹配到的行的下一行覆盖至模式空间
N:读取匹配到的行的下一行追加至模式空间
d:删除模式空间中的行(删除全部)
D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,从使用合成的模式空间重新启动循环,如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环。
删除第一行
重点 :
sed -n -i.bak(.bak可加可不加 前期安全起见 建议加上) -r -E -e 'script'
'script' 位置指令
支持正则表达式/root/某一行包含root (包含的意思) /root/p,d,w file ,r file , a, i, c newline
查找替换s/// s@@@ s###
sed 命令 也支持变量 如果使用变量必须加上双引号
如果匹配的行也有双引号:在变量前后分别补上单引号
软件运行和编译过程及库调用:
源代码不可以直接使用,必须要编译成二进制使用。
linux大部分程序是C开发
ABI:应用程序的二进制接口,win和linux文件格式不一样,
win:PE格式格式
ELF:linux文件格式
库级别的虚拟化:linux:WINE 虚拟化软件,可以模拟win
win :Cygwin 软件
模拟最终性能不大一样
API:开发接口
开发者需要用第三方模块,加密功能,图形处理功能,开发功能,调用别人开发好的模块
软件模块中的静态链接和动态链接
链接主要作用是把每个模块之间相互引用的部分处理好,使得各个模块能够正确的衔接,分享静态和动态链接
静态链接:占用较多空间,迁移容易,升级难,嵌入程序包,生成模块文件libxxx.a,把程序对应的依赖包复制一份到包
动态链接:节约空间
在lib64下面看到的都是库文件
库与库之间是共享的
sz命令可以把linux文件移到win上
scp命令可以连接别的主机
软件包的分类:
如果要看.rpm 使用rpm2cpio :把rpm的格式转换成cpio流,用cpio就可以看到里面的内容
rpm2cpio 包文件 | cpio -itv 预览包内容
rpm2cpio 包文件 | cpio -id .conf 释放包内文件
程序包管理器:redhat : rpm 文件,rpm包管理器
debian :deb文件,dpkg包管理器
安装,管理,查询,删除
分类和拆包:ARCH.rpm 主包
devel ARCH.rpm 开发包
utils ARHC.rpm 其他子包
ARHC.rpm 其他子包
数据库(公共数据):/var/lib/rpm
程序包名称及版本
依赖关系
功能说明
包安装后生成的各文件路径及校验码信息
rpm包安装
卸载只需要输入软件名,安装必须要写文件名以及路径
rpm :-i 安装
-q 查询
-e 卸载
-ql 可以查询包里面的文件分别放在那个目录下
-qi 可以查看包的信息,官网
-qf 磁盘上的文件来自于哪个包
-qc 只看配置文件
-qd 只看文档
--nodeps 忽略依赖关系,强行卸载
救援模式 --root
--force 强制重新安装
-K 检查签名(合格章)是否正常 /etc/pki/rpm-gpg/
-V 包安装完之后是否被修改过
-h 显示程序包管理执行进度
--test 测试安装,但不真正执行安装,即dry run模式
-qa 查询所有包
-p 针对尚未安装的程序包文件做查询操作
--scripts 程序包自带的脚本
--import 导入gpg密钥
yum和dnf
先在yum服务器上创建 yum repository (仓库),在仓库事先存储了众多rpm包,以及包的相关元数据文件(放置于特定目录repodata下),当yum客户端利用yum/dnf 工具进行安装包时,会自动下载repodata中的源数据,查询源数据是否存在相关的包及依赖关系,自动从仓库中找到相关包下载并安装。
/etc/yum.conf #为所有仓库提供公共配置
/etc/yum.repos.d/*.repo #为每个仓库提供的配置文件 (文件必须以在.repo结尾,名字可随意)
服务器和客户端时允许跨网段的
服务器有两个内容 1.rpm包 2.源数据 (索引)repodata
epel 额外的仓库软件包(仓库在互联网上)
yum仓库指向的路径一定必须时repodata目录所在目录
yum 服务器的baseurl形式:
file:// 本地路径
http://
https://
ftp://
相关变量:$releaserver 当前os的发行版的主版本号
$arch cpu架构
$basearch 系统基础平台
$contentdir 表示目录 ,比如 centos-8
$YUM0-$YUM9 自定义变量
baseurl 指向的路径
http://mirrors.aliyun.com/repo/
yum命令
-y 自动回答“yes”
-q 静默模式
--nogpgcheck 禁止进行gpg check
--enablerepo=repoidglob 临时启用此处指定的repo ,支持通配符 如 “*”
yum provides 去获取一个没有装的包的名称
makecache 创建缓存
--disablerepo=repoidglob 临时禁止指定的repo,和上面语句同时使用,放在后面生效
--showduplicates 指定下载版本(可选择)
updates 查看可更新的包
显示仓库列表
yum repolist
显示程序包
yum list ,
安装程序包
yum install , (yum reinstall 重新安装)
--downloadonly #只下载相关默认至/var/cache/yum/x86_64/7/目录下,而不执行install/upgrade/erase
--downloaddir=<path>,--destdir=<path> #--downloaddir选项指定下载的目录,如果不存在自动创建
安装epel源包
yum install -y epel-release
主要注意:不要对内核做升级操作,linux支持多内核版本并存,因此直接安装新版本内核
如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件不会直接覆盖老版本的配置文 件,而把新版本文件重命名(FILENAME,rpmnew)后保留
--downloadonly --downloaddir=/文件路径名 #只下载不安装
createrepo :用于创建yum源,即为存放本地特定位置的众多rpm包建立索引,描述各类包所需依赖信息,并形成源数据。
yum :重点掌握命令
repolist,install,remove,info,list,clean,provides,makecache
程序包编译,源码编译
编译源码的项目工具:c++源码编译,使用make项目管理器
configure脚本----》Makefile.in3---》Makefile
相关开发工具:autoconf :生成configure脚本
automake:生成makefile.in
jave的编译源码:使用maven
C语言源代码编译安装过程:
利用编译工具:通常只需要三大步骤:./configure ——》脚本 用他配合选项生成一个makefile文件,然后交给第二步
(1) 通过选项传递参数,指定安装路径,启用性能,执行时会参考用户的指定以及makefile.in文件生成Makefile。
(2)检依赖的外部环境,如依赖的软件包
(执行./configure 会生成一个makefile文件,会自动调用makefile文件的信息(自动执行)make命令会自动调用makefile文件,检测你的依赖环境,并且编译生成二进制文件,编译二进制以后并不会安装,还需要执行第三步,make install)
make根据Makefile文件,会检测依赖的环境,进行构建应用程序
make install 复制文件到指定路径
*注意:安装钱可任意通过查看README,INSTALL获取帮助
编译安装需要准备那些工具:
安装相关的依赖包:make,gcc(c/c++ 编译器GNU)
开发库(glibc:标准库),头文件,可安装开发包组develop ment tools
源码一般放在/usr/local/src
一般看见大写的APR就是缺一个开发包 apr-devel
编译程序三步骤:
1.安装服务或者安装软件,找到./configure脚本
2.然后执行,中间如果报错,让你装依赖包,如果提示大写,搜索包的时候小写,yum provides “(包名)*”找到后下载安装
然后指定配置文件放在哪?选项--syscondir=###,指定安装路径,如果需要开机启动就给他设置一个$PATH变量路径,然后把配置文件放在/etc/profile.d/下面
3.然后执行make -j #(cpu核数)可以增加编译速度,然后执行make install
--syscondir=/#/# 指定配置文件
--perfix=/#/# 指定安装路径
软件包管理
yum安装也是依赖rpm包
建仓库缺一不可的两个步骤:1.各种包 2.repodate 源数据
第三种方法:源码编译:我们为什么要用源码编译,有些包的特性不符合我们的要求。
第四种安装方法:介于包和源码编译中间的一种方法,(二进制安装)
二进制包不用装,直接打开用,官方已经给你编译完了,需要改一些东西
ubuntu安装方法:
dpkg(package mananger for debian)
dpkg不能解决依赖性问题
apt(advanced packing tool)
dpkg -i 安装
-l 列出当前包的简要说明
-s 列出包的状态,详细信息
-L 列出该包中所包含的文件,类似rpm -ql
-S 搜索包含pattern 的包,类似rpm -qf
--configure 配置包,-a 使用,配置所有没有配置的软件包
-c 列出deb包的内容,
--unpack 解开deb的内容
-r 卸载
apt update 更新包的特性(数据)
/etc/apt/sources.list 安装包的配置文件
remove 删除的是一些程序
purge 删除软件的所有文件以及配置文件
apt-file search -x ###包已经装上才能查 (支持通配符,正则表达式)
apt-file search -F /path/file
apt instal -y ubuntu-desktop 安装图形化
apt upgrade 升级包,要升级系统,请首先更新软件包索引,在升级
apt list 列出仓库软件包
apt search nginx 搜索安装包
apt show 查看某个安装包的详细信息
apt install 安装软件包
apt remove 卸载单个软件包,但是保留配置文件
apt autoremove 删除安装包并解决依赖关系
apt update 更新本地软件包列表索引,修改apt仓库后必须执行
apt full-upgrade 升级整个系统,必要时可以移除旧软件包
apt edit-sources 编辑source源文件
apt-cache madison 查看仓库中软件包有那些版本可以安装
1.yum仓库不太一样
2.包管理方式不一样
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)