sed行编辑器和软件包管理

sed 中有一个模式空间(pattern space)即内存空间

工作原理:sed从文件或者管道中读取一行,处理一行,输出一行,在读取一行,在处理一行,直到最后一行,每当处理一行时,把当前处理的行存储在临时缓冲区,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲去的内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾,一次处理一行的设计模式使得sed性能很高,sed在读取大文件时不会出现卡顿的现象,如果使用vi命令打开几十M上百M的文件,明显会出现卡顿的现象,这是因为vi命令打开文件是一次性将文件加载到内存,然后再打开,sed就避免了这种情况,一行一行的处理,打开的速度非常快,执行速度也很快。

sed [option]... 'script;script;...' [inputfile...]

适合在脚本中调用

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/

      https://mirrors.cloud.tencent.com/centos/$releasever/
   https://repo.huaweicloud.com/centos/$releasever/

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.包管理方式不一样

  

 

 

 

          

 

posted @   家购诗  阅读(68)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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)
点击右上角即可分享
微信分享提示