linux软件管理
软件管理
Linux 上常见的软件安装方式有rpm, yum, deb, apt-get, 编译源码.
rpm: redhat package manager
rpm 特定的压缩包
安装rpm包就是解压压缩包, 将编译过的文件打包按一定规则解压
rpm 命令即是解析压缩包
rpm包名
软件名-版本号.系统标识.CPU体系(平台)[.src].rpm
zip-3.0-11.el7.x86_64.rpm
zip 软件名
3.0-11 版本号
el7 系统标识(红帽7系统编译打包)
x86_64 CPU体系, 体系不一样互相不兼容
noarch 此软件包与平台无关
rpm源码包
软件名-版本号.src.rpm
查找rpm:
http://rpmfind.net
安装
rpm -ivh rpm包文件路径
-i 安装, 第二个进度条显示安装进度
-v 显示安装进度
-h 检验hash, 第一个进度条
两个进度完成代表安装成功
对rpm源码包进入安装, 会解压到家目录的rpmbuild目录下
查找某个命令的所属rpm包名
rpm -qf /usr/bin/wget
或
rpm -qf $(which wget)
查看当前系统安装所有rpm包
rpm -qa
查看是否安装某个包
rpm -qa wget
查看rpm包详细信息
rpm -qi $(which wget)
查看已安装rpm包的信息
rpm -qR wget-1.14-15.el7_4.1.x86_64
查看已安装rpm包会释放哪些文件信息
rpm -ql wget-1.14-15.el7_4.1.x86_64
卸载rpm包
格式: rpm -e rpm包名
例:
获取命令的路径
which wget
获取包名
rpm -qf /usr/bin/wget
卸载
rpm -e wget-1.14-15.el7_4.1.x86_64
一步到位
rpm -e $(rpm -qf $(which wget))
rpm安装选项
-U 升级安装
-F 强制安装
--prefix 指定安装路径, 一般推荐默认路径
--nomd5 不检验md5值
--test 测试在本系统是否能安装
...
帮助信息: man rpm
yum
yum的命令形式一般是如下: yum –选项命令包
其中选项是可选的,选项包括-h(帮助),-y(当安装过程提示选择全部为”yes”),-q(
不显示安装的过程)等等。[command]为所要进行的操作,[package …]是操作的对象。
yum的一切信息都存储在一个叫yum.reops.d目录下的配置文件中,通常位于/etc/yum.reops.d目录下。
在这个目录下面有很多文件,都是.repo结尾的,repo文件是yum源(也就是软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用!
进入/etc/yum.repo.d目录下,
vim CentOS-Base.repo
[base]
这个表示的是名称, #yum的ID,必须唯一,本地有多个yum源的时候,这里必须是唯一的
name=CentOS-$releasever - Base
#具体的yum源名字,其实相当于对它的描述描述信息 $r releasever你可以使用这个变量参考红帽企业Linux发行版,也就是说表示当前发行版的大版本号。
baseurl
是镜像服务器地址,只能写具体的确定地址。下面的例子中,只能有一个baseurl
,但里面可以包含多个url
mirrorlist
是镜像服务器的地址列表,里面有很多的服务器地址。这里有一个变量$arch,cpu体系,还有一个变量:$basearch,cpu的基本体系组
baseurl
和mirrorlist
都是指向yum源的地址,不同点是包含地址的多少。你若自己写的话,我们一般只写一个地址,直接用baseurl
就行
gpgcheck=0
#要不要验证呢,取消验证。1,使用公钥检验rpm的正确性。
gpgcheck 若是1将对下载的rpm将进行gpg的校验,校验密钥就是gpgkey,一般自己的yum源是不需要检测的。gpgcheck=0,那么gpgkey就可以不填写
在来看一下/etc/yum.conf
文件
cachedir=/var/cache/yum #yum下载的RPM包的缓存目录
keepcache=0 #缓存是否保存,1保存,0不保存。
debuglevel=2 #调试级别(0-10),默认为2
logfile=/var/log/yum.log #yum的日志文件所在的位置
1 yum清空缓存列表
1 | yum clean packages 清除缓存目录下的软件包,清空的是(/var/cache/yum)下的缓存 |
2 yum显示信息
1 | yum list # yum list显示所有已经安装和可以安装的程序包 |
3 yum安装
1 | yum -y install httpd |
4 yum删除
1 | yum remove httpd 删除程序包httpd ,也就是卸载。 |
5 yum包的升级
1 | yum check-update 检查可更新的程序 |
6 yum 解决依赖的原理
YUM 解决依赖关系问题,自动下载软件包。yum是基于C/S架构。C指的是客户端, S指的是服务器,想ftp,http,file、关于yum为什么能解决依赖关系:所有的Yum 源里面都有repodata,它里面是有XML格式文件,里面有说明需要什么包。例如上堂课实验的:mysql-server rpm 需要:perl-DBI ,python,或者是php等等包。
7 yum 组的管理
yum进行安装的时候可以一组一组的进行安装,先来看看有那些组yum grouplist
。可用的组有这么多。
Available Environment Groups:首先是可用的环境分组。
Compute Node
计算节点
Infrastructure Server
基础设施服务器
File and Print Server
文件和打印服务
Cinnamon Desktop
v Cinnamon桌面
Installed Groups
:已安装的组,开发工具
Development Tools
Available Groups:可用的组。
如果我们想以组的方式来安装,加入我想安装安全工具:
输入:yum groupinstall "Security Tools"
看到这里询问是否要安装,当然是N不安装了。如果想直接安装,不询问的话,这里也在后面加上选项 –y。
yum groupremove group1 删除程序组group1
根据包名查找软件名
yum search vim
重装软件
yum reinstall vim -y
查看软件组
yum grouplist "GNOME Desktop"
安装软件组 这时候init 5 可以切换到桌面模式
yum groupinstall "GNOME Desktop"
卸载软件组 卸载后就不可以init 5 切换了
yum groupremove "GNOME Desktop"
常用的yum 命令
yum list <-- 列出yum源中提供的所有软件
yum grouplist <-- 以分组的形式列出yum源中提供的所有软件
yum search screen <-- 搜索名字或者描述信息中包含了字符串screen的包
yum provides "*bin/screen" <-- 搜索提供了某个文件的包
yum install screen <-- 安装名为screen的包
yum remove screen <-- 删除名为screen的包
yum groupinstall "Development tools" <-- 安装名为Development tools的一组包
yum groupremove "Development tools" <-- 删除名为Development tools的一组包
yum deplist screen <-- 查看包screen的依赖关系
yumdownloader --destdir=/tmp screen <-- 把screen的安装包从仓库下载下来,放到/tmp里面
yum clean all <-- 清空yum 的数据库等
配置本地yum 源:
理解yum 的原理和yum 源的架构(结构)
1.1 yum 的配置文件
1.2 rpm 文件及相关数据
1.3 yum 运行的时候会检查配置,从配置里面得知软件的各种信息其中就包括了rpm 的位置,是否检查签名,等等。
准备材料 (iso 文件)
mkdir /yum <– 预备目录
mount -ro loop centos.iso /yum <– 挂载iso
或者:
mount /dev/sr0 /yum书写yum 的配置文件
3.1 yum 源里面有仓库
3.2 yum 的配置文件存放在 /etc/yum.repos.d 目录里面名字必须以 .repo 结尾 sudo mkdir back_repo sudo mv Centos-* ./back_repo sudo vim local.repo 假设iso 挂载在 /yum,则可以这样书写仓库信息: ------------------------------------- [repodata] <-- 标题 name=repodata <-- 名字 baseurl=file:///yum/ <-- rpm 的位置 enabled=1 <-- 是否启用该仓库, 0不启用, 1启用 gpgcheck=0 <-- 是否检查rpm 包的数字签名 ------------------------------------- 清空yum已存在的所有源信息 yum clean all 查看本地源的所有软件 yum list 测试: 拔掉网线运行命令 sudo yum install vim -y 看结果是没有网路还是软件包是最新的 开机自动挂载 sudo vim /etc/fstab /dev/sr0 /yum iso9660 loop,defaults 0 0 iso光盘文件的路径 挂载文件 格式 光盘挂载的格式 开机不自检 设置开机自动挂载后,配置写错,会导致开不了机,需要重新配置
配置yum源
配置最快yum源
1 | yum install yum-fastestmirror -y |
yum源安装软件常见报错
报错一,yum源路径网络问题
1 | yum makecache 更新Yum仓库报错。 |
报错二证书问题。
1 | centos下安装完EPEL源然后更新一下yum缓存如果发现这样的错误: |
报错三网络问题
1 | 有时候 iptables ouput 出数据有问题,把udp类型的数据改为可以出,相关代码为 |
报错四yum源网络问题
1 | 使用 yum安装的时候 |
报错五yum源镜像缓慢
1 | yum源。 |
Linux yum-config-manager命令YUM配置管理
功能描述
使用yum-config-manager命令可以进行YUM配置管理。
命令语法
yum-config-manager [选项] [部分]
选项含义
-e<错误级别> | 错误输出级别 |
---|---|
选项 | 含义 |
-d<调试级别> | 调试输出级别 |
-c<配置文件> | 指定配置文件的位置 |
-t | 错误宽容 |
-q | 安静模式 |
-v | 详细操作 |
-y | 对所有问题回答yes |
–installroot=<路径> | 设置安装根路径 |
–nogpgcheck | 禁用GPG签名检查 |
–disableplugin=<插件> | 按名称禁用插件 |
–color=<颜色> | 控制使用颜色 |
–setopt=<设置选项> | 设置任意配置和软件仓库选项 |
–noplugins | 禁用yum插件 |
–enableplugin=<插件> | 按名称启用插件 |
–enablerepo=<软件仓库> | 启用一个或多个仓库 |
–rpmverbosity=<调试级别> | 为rpm指定调试输出级别 |
–disablerepo=<软件仓库> | 禁用一个或多个软件仓库 |
–disablepresto | 禁用Presto插件,不下载任何deltarpm |
-C | 从系统缓存中完全运行,不更新缓存 |
-R<等待时间> | 最大命令等待时间,单位是分钟 |
–showduplicates | 在软件仓库,在列表/搜索命令中显示重复的 |
-x<软件包> | 按名称或排除软件包 |
–obsoletes | 在更新过程中启用废弃处理 |
–save | 保存当前的选项 |
–enable | 启用指定的软件仓库 |
–disable | 禁用指定的软件仓库 |
–add-repo=<软件仓库> | 从指定文件或URL添加(和启用)软件仓库 |
进行YUM配置管理。
[root@localhost ~]# yum-config-manager
安装yum-config-manager命令
系统默认没有安装这个命令,这个命令在yum-utils 包里,可以通过命令yum -y install yum-utils 安装就可以了。
1 | yum -y install yum-utils |
列:
从指定url中添加启用yum软件仓库
1 | yum-config-manager --add-repo=http://mirrors.aliyun.com/repo/Centos-7.repo |
显示main和repos foo和bar的配置:
1 | yum-config-manager main foo bar |
使用–enable显示启用的软件仓库:
1 | yum-config-manager --enable |
禁用软件仓库epel
1 | yum-config-manager --disable epel |
启用软件仓库epel
1 | yum-config-manager --enable epel |
打包/解包(tar)
选项
-f 指定操作文件
-c 打包
-x 解包
-C 指定解包路径
-v 显示过程
-t 列表包内容
-r 追加 (同一文件会追加多次)
-u 更新 (文件不存在追加,文件存在对比时间进行更新操作)
-d 对比包内容
--delete 删除包内容
-z 调用gzip工具(czf 代表打包压缩, xzf 代表解压解包)
-j 调用bzip2工具(cjf 代表打包压缩, xjf 代表解压解包)
-J 调用xz工具(cJf 代表打包压缩, xJf 代表解压解包)
打包
格式: tar -cf 压缩之后的文件路径 要进行压缩的文件夹路径...
tar -cf /tmp/etc.tar /etc/
打包etc到标准输出, 用于与其它组合使用
tar -cf - /etc/
打包过滤文件或目录
tar -cf /tmp/etc.tar /etc/ --exclude=wgetrc --exclude=vim
万能压缩
格式: tar -cf 压缩之后的文件路径 要进行压缩的文件夹路径...
tar -czf /tmp/etc.gz /etc
#把access.log 日志打包压缩,保存在/etc/nginx/logs/目录下。命名为access.log.gz
tar -czf /etc/nginx/logs/access.log.gz /etc/nginx/logs/access.log 2&> /dev/null
解包
格式: tar -xf 解包文件路径 [指定提取文件...] [-C 指定解压路径]
tar -xf /tmp/etc.tar
tar -xf /tmp/etc.tar -C /dev/shm/
tar -xf /tmp/etc.tar wgetrc
查看包
格式: tar -tf 查看包的路径
更新包
格式: tar -uf 压缩包路径 要追加的文件或目录路径...
删除包内容
格式: tar -f 包路径 --delete 要删除文件或目录
对比包内容
格式: tar -df 包路径 对比文件或目录路径
gzip格式打包压缩
tar -czf etc.tar.gz /etc
gzip格式解压
tar -xzf etc.tar.gz
bzip2格式打包压缩
tar -cjf etc.tar.gz /etc
bzip2格式解压
tar -xjf etc.tar.gz
万能解压
tar -xf etc.tar
tar -xf etc.tar.gz
tar -xf etc.tar.bz2
tar -xf etc.tar.xz
压缩/解压
windows:
winrar *.rar (收费)
winzip *.zip
linux:
compress *.Z (过时)
gzip *.gz / *.tar.gz / *.tgz
bzip2 *.bz2 / *.tar.bz2
xz *.xz / *.tar.xz
zip/unzip *.zip
rar *.rar
压缩: 先用tar进行打包,再调用对应压缩工具进行压缩
解压: 先调用对应压缩工具解压,再用tar进行解包
gzip
压缩
gzip 文件
不删除原文件压缩
gzip -c 文件 > gz压缩文件
解压
gzip -d gz压缩文件
查看gz压缩文件
zcat gz压缩文件
zless gz压缩文件
对比两个gz压缩文件
zcmp gz压缩文件1 gz压缩文件2
bzip2
压缩
bzip2 文件
不删除原文件压缩
bzip2 -c 文件 > bz2压缩文件
解压
bzip2 -d bz2压缩文件
xz
用法与bzip2/gzip工具一样
zip
压缩
zip -r zip压缩名 要压缩的文件或目录...
解压
unzip zip压缩名
rar
压缩
rar a rar压缩名 要压缩的文件或目录路径...
解压
rar x rar压缩名
保留压缩包里目录结构
rar e rar压缩名
将压缩包的文件直接提取, 不保留压缩包目录结构
GPG - 文件加密
非对称加密(公钥/私钥) RSA算法
公钥负责加密, 私钥负责解密
GNUPG开源工具实现非对称加密
安装:
centos: yum install gnupg -y
查看当前系统所有密钥对
gpg --list-keys
创建密钥对
gpg --gen-key
1. 选择什么加密算法(推荐默认, 直接按回车)
2. 确定密钥长度 (默认为2048)
1024 2048 4096(长度越长越安全, 生成密钥时间就越久)
3. 确定密钥的有效时间 (默认为永不过期)
4. 确认以上是否正确
5. 输入密钥信息(姓名 邮箱 注释)
6. 输入密钥保护密码
加密
gpg -r 密钥标识 [-o 加密生成文件路径] -e [准备要加密的文件]
默认生成加密文件格式为二进制, 通过-a选项指定生成文件格式为文本格式
如果不指定加密生成文件路径,则输出到标准输出
如果加密文件不指定则读标准输入
密钥标识为生成密钥对的时候输入的真实姓名或者邮箱
加密/etc/passwd文件, 生成文本加密文件到/tmp/test/gpg.file
gpg -r 1234567@163.com -o /tmp/test/gpg.file -a -e /etc/passwd
解密
gpg -r 密钥标识 [-o 解密生成文件路径] -d [gpg加过密的文件]
如果不指定解密生成文件, 解密到标准输出
如果不指定加过密的文件, 将标准输入作为源文件
公钥导出
格式: gpg [-a] -o 公钥导出路径 --export 密钥标识
gpg -a -o public.key --export 1234567@163.com
私钥导出
格式: gpg -a -o 私钥导出路径 --export-secret-keys 密钥标识
gpg -a -o private.key --export-secret-keys 1234567@163.com
密钥导入
格式: gpg --import 密钥导出文件
私钥导入设置密钥信任(不设置每次加密都会提示信任问题):
gpg --edit-key 1234567@163.com trust quit
选择5最高信任级别, 再按Y确认退出
上传公钥
gpg --keyserver hkp://keys.gnupg.net --send-keys 公钥ID
查找公钥
gpg --keyserver hkp://keys.gnupg.net --search-keys 公钥标识
源码包编译安装
大部分源码包使用autoconf项目自动生成编译环境
源码包即是压缩包, 首先必须解压并且进入解压后目录
tar -xf wget-1.14.tar.xz
cd wget-1.14
INSTALL 安装帮助文档
./configure --help 获取安装帮助信息
清除上一次编译情况
make clean
make disclean
探测操作系统环境是否满足本项目的依赖 (配置项目功能)
./configure
如果没有任何错误才能进行下一步
错误一般都依赖的工具或库没有安装或者版本不对
编译
sudo make -j4
-j4 代表开多核执行
安装
sudo make install
卸载
sudo make uninstall
作业: centos7安装以下源码包
rpm源码包安装演示
wget-1.14-15.1.src.rpm
终端打字程序
ptyping-1.0.1.tar.gz
支持ntfs格式挂载
ntfs/ntfs-3g-2009.4.4.tgz
mplayer播放器
MPlayer-1.2.tar.xz
yasm
星际译王
stardict/stardict-3.0.2.tar.bz2
计算机词库:
stardict-kdic-computer-gb-2.4.2.tar.tar
…
sudo yum install gcc -y
./configure --disable-gucharmap --disable-festival
scene.hpp +21 NULL
NULL -> 0
依赖:
intltool
sudo yum install intltool -y
gnome-doc-utils
sudo yum install gnome-doc-utils
enchant-devel
sudo yum install enchant-devel
gucharmap-devel
安装之后还会提示错误, 版本不对应
通过禁用此插件来继续编译
./configure --disable-gucharmap
festival-devel
安装之后还会提示错误
./configure --disable-gucharmap --disable-festival
6-rhel-6/naulinux-school-x86_64/stardict-3.0.2-1.el6.x86_64.rpm/download/
espeak-devel
sudo yum install espeak-devel -y
libgnomeui-2.0-devel
sudo yum install libgnomeui-devel
libz
sudo yum install gcc-c++ -y
scrollkeeper-config
sudo yum install scrollkeeper -y
坦克大战
662206tank-sdl-0.3.0.tar.gz
sudo yum install libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev -y
仙剑1
1 | sdlpal |
编译C代码遇到通用问题:
问题: 找不到*.h文件
解决: 绝对使用-I解决
已知依赖的*.h文件在哪(不知道则需要查找系统或者百度)
通过-I选项告诉gcc我们头文件在哪
gcc -I/kyo/code/include
Makefile里通过CFLAGS变量来指定头文件路径
CFLAGS=-I/kyo/code/include
问题: libSDL.so: undefined reference to `_XGetRequest'
解决: 绝对使用-l解决
Makefile里通过LDFLAGS 或 LIBS变量来指定库
LDFLAGS=-lX11
LIBS=-lX11
问题: ld: 找不到 -lSDL
解决: 绝对使用-L解决
Makefile里通过LDFLAGS 或LIBS 变量来指定库的路径
LDFLAGS=-L/kyo/code/lib -lSDL -lSDL_image -lSDL_mixer -lX11
问题: error while loading shared libraries: libSDL_image-1.2.so.0
解决: 前提系统已安装好此库,并且知道库所在路径
系统标准库路径: /usr/lib /lib
临时解决: 通过LD_LIBRARY_PATH环境变量来指定库路径
export LD_LIBRARY_PATH=/kyo/code/lib
./tank
永久解决: /etc/ld.so.conf
将依赖库路径追加到/etc/ld.so.conf, 再刷新动态库路径: sudo ldconfig
sdl库源码包
sdl
编译SDL-1.2:
错误: operand type mismatch for `movq'
解决: ./configure --disable-assembly
错误: ./src/video/x11/SDL_x11sym.h:168:17: error: conflicting types for ‘_XData32’
解决: vim ./src/video/x11/SDL_x11sym.h +168
SDL_X11_SYM(int,_XData32,(Display *dpy,register _Xconst long *data,unsigned len),(dpy,data,len),return)
错误: undefined reference to `_XGetRequest'
解决: vim Makefile +171
LIBS = -L/kyo/code/lib -Wl,-rpath,/kyo/code/lib -lSDL -lpthread -lX11
- 本文标题:linux软件管理
- 本文作者:yichen
- 本文链接:https://yc6.cool/2020/08/03/linux软件管理/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
1.sed的常用命令的使用
2.linux根下目录文件介绍
3.vim的使用
4.linux中丢失grub.cfg引导文件修复
5.linux系统管理
6.linux磁盘管理
7.磁盘命令lvm
8.dnf包管理