Linux 软件管理
包管理器
二进制应用程序的组成部分:
二进制文件、库文件、配置文件、帮助文件
程序包管理器:
-
debian:deb文件, dpkg包管理器
-
redhat: rpm文件, rpm包管理器
-
rpm: Redhat Package Manager
-
RPM Package Manager
包管理器工具
包之间:可能存在依赖关系,甚至循环依赖
解决依赖包管理工具:
-
yum:rpm包管理器的前端工具
-
apt-get:deb包管理器前端工具
-
zypper: suse上的rpm前端管理工具
-
dnf: Fedora 18+ rpm包管理器前端管理工具 *
程序包管理器:
功能:
将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作
包文件组成 (每个包独有)
- RPM包内的文件
- RPM的元数据,如名称,版本,依赖性,描述等
- 安装或卸载时运行的脚本
数据库(公共):/var/lib/rpm
- 程序包名称及版本
- 依赖关系
- 功能说明
管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum, dnf
获取程序包的途径:
(1) 系统发版的光盘或官方的服务器;
CentOS镜像:
[1]https://www.centos.org/download/
[2]http://mirrors.aliyun.com
[3]http://mirrors.sohu.com
[4]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包安装
在 /mnt Packages中,Redhat系列的软件都是以rpm包的方式,统一风格,每一个rpm文件都集成了很多文件。
光盘加载:
mount /dev/sr0 /mnt (/mnt挂载点)
机器重启后,不再挂载
rpm安装指令
misc-->rpm -i autofs-5.0.7-99.el7.x86_64.rpm #如果不在Packages目录下,需添加autofs的完整路径
查询软件是否安装完成–>rpm -q autofs
rpm -qa
#查询全部已安装软件
rpm -qa |grep auto
#模糊搜索
rpm -qa "auto*"
启动软件–>systemctl start autofs
查看开机启动–>systemctl status autofs
设置成为开机启动–>systemctl enable autofs
家目录–>ls /misc
#自动将光盘挂载到misc这个文件夹
ls /misc/cd
安装软件–>rpm -ivh /misc/cd/Packages/tree-1.6.0-10.el7.x86_64.rpm
#v显示详细过程,h显示详细进度
查询Package的文件列表–>rpm -ql tree
查询版本信息 -->rpm -qi tree
查询包所有文件 -->rpm -qa tree
反向查询文件来自哪个Package(Exa)–>rpm -qf /bin/bash
卸载:rpm -e tree
yum安装指令:
yum原理
以安装tree包为例:接收到yum install tree指令,先去yum server下载meta data放在一个存储空间里,然后通过meta data去rpm文件中查找相关及所依赖的包,将其下载到一个存储空间,然后进行安装,安装完成后包会被删除,但是meta data会保存下来,下次再安装其他包时会从meta data中查找
yum的配置信息:
cd /misc/cd/repodata
cd /etc/yum.repos.d/
yum源的基本语法:
[base] #[内容只是个提示,要确保唯一性]
name=CentOS-$releasever - Base #描述信息,可写可不写
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#文件路径
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
#变量$releasever操作系统的主版本号,变量$basearch CPU架构
gpgcheck=1 #是否校验每个包的合法性
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #公钥路径
yum源文件名不重要,只要后缀是repo就Ok
#!/bin/bash
vim base.repo
[base]
name=dentos base
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/7/os/x86_64/RPM-GPG-KEY-CentOS-7
cd /var/ache/yum/
#yum源文件安装在这个位置
添加epel源
#!/bin/bash
vim epel.repo
[epel]
name=epel
basename=https://mirrors.aliyun.com/epel/7/x86_64/
gpgcheck = 0
添加本地光盘路径
vim /etc/yum.repos.d/base.repo
[base]
name=centos base
baseurl=file:///misc/cd
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/;file:///misc/cd
gpgcheck = 1
gpgkey=https://mirrors.aliyun.com/centos/7/os/x86_64/RPM-GPG-KEY-CentOS-7
vim yumlist
#yumlistfile
#file:///misc/cd
#http://mirror.centos.org/centos/$releasever/os/$basearch/
vim /etc/yum.repos.d/base.repo
[base]
name=centos bas
mirrorlist=file:///root/yumlist
gpgcheck = 1
gpgkey=https://mirrors.aliyun.com/centos/7/os/x86_64/RPM-GPG-KEY-CentOS-7
安装
yum install sl -y
移除
yum remove sl -y
查看
yum history
运用remove时,包卸载不干净,可以用下面的方法
yum history
yum history undo id
#如果后悔undo,可以redo
yum history redo id -y
安装包组:
yum groupinstall ""
查看包组信息
yum groupinfo "FTP server" #不加""可能被认为是两个包
yum info httpd #查看包的说明
通过网络下载安装
yum install https://mirrors.aliyun.com/epel/7/x86_64/Packages/h/ hidapi-0.7.0-2.a88c724.el7.x86_64.rpm
关闭防火墙
systemctl stop firewalld;systemctl disable firewalld
关闭getenforce
vim /etc/selinux/config
SELINUX=disabled
开启httpd服务
systemctl start httpd
systemctl enable httpd
移除虚拟网卡
yum remove libvirt-daemon
修改默认页面
cd /var/www/html
echo welcome to magedu! > index.html
mkdir centos/7/os/x86_64/ -pv #建立与yum源路径一直文件夹
#访问 IP地址/centos/7/os/x86_64/
在yumlist文件中,添加路径 IP地址/centos/7/os/x86_64/
编译安装
gcc编译器:把文件编译成二进制文件
Example:
gcc hello.c #默认会生成一个a.out文件
gcc hello.c -o hello #生产一个hello文件,系统自动加了执行权限
make项目管理器
configure脚本–>Makefile.in-->Makefile
C语言源代码编译安装三步骤:
- ./configure
- 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成Makefile
- 检查依赖到的外部环境,如依赖的软件包
- make 根据Makefile文件,构建应用程序
- make install 负责文件到相应路径
开发工具:
autoconf:生成configure脚本
automake:生成Makefile.in
注意:安装前查看INSTALL,README
所有操作必须在解压缩目录
tar xvf httpd.tar.gz
cd httpd/
./configure --prefix=/app/httpd
#提示安装 APR ,但是实际上提示安装APR-devel
yum install apr-devel
yum install apr-util-devel
yum install pcre-devel
#yum install gcc
./configure --prefix=/app/httpd
ls #这时我们可以看到在文件夹中已经生成一个configure
make
make install
ls /app/httpd
#如果已经安装了httpd需要先停掉
systemctl stop httpd
#如果要执行自己的程序
cd /app/httpd/bin
./apachectl start
"""这时httpd已经搭建起来"""
#返回httpd文件夹,进入htdocs文件夹,可以找到index.html,修改初始界面
echo 'PATH=/app/httpd/bin:$PATH' >> /etc/profile.d/test.sh
. /etc/profile.d/test.sh
apachectl
Example:cmatrix
rz #将cmatrix复制到当前文件夹
tar vxf cmatrix..
cd cmatrix-1.2a
./configure --prefix=/app/cmatrix
yum install ncurrses-devel
make && make install
cd /app/cmatrix/bin
./cmatrix #运行程序
#把路径写到PATH路径下
echo 'PATH=PATH=/app/cmatrix/bin:$PATH' >> /etc/profile.d/test.sh
. /etc/profile.d/test.sh
为文本增加执行权限
#在文件当前目录下
chmod +x hello.sh
#./hello.sh #相对路径下执行
#/data/scripts/hello.sh #绝对路径下执行
vim /etc/profile.d/test1.sh
PATH=/data/scripts:$PATH
. /etc/profile.d/test1.sh
hello.sh #在任意路径下都可执行
cat hello.sh |bash #用管道传给bash执行
一键安装脚本
vim install_cmatrix.sh
wget http://192.168.20.100/cmatrix-1.2a.tar.gz
yum install gcc ncurses-devel -y
tar xvf cmatrix-1.2a.tar.gz
cd cmatrix-1.2a
./configure --prefix=/app/cmatrix
make && make install
echo 'PATH=/app/cmatrix/bin:$PATH' >> /etc/profile.d/test.sh
chmod +x intall_cmatrix.sh
. /etc/profile.d/test.sh
install_cmatrix
scp install_cmatrix.sh cmatrix-1.2a.tar.gz 192.168.20.100:/app/httpd/htdocs/
vim install_cmatrix.sh
wget http://192.168.20.100/cmatrix-1.2a.tar.gz
yum install gcc ncurses-devel -y
tar xvf cmatrix-1.2a.tar.gz
cd cmatrix-1.2a
./configure --prefix=/app/cmatrix
make && make install
echo 'PATH=/app/cmatrix/bin:$PATH' >> /etc/profile.d/test.sh
curl http://192.168.20.100/install_cmatrix.sh |bash #远程一键安装
变量
vim color.sh
echo -e '\033[$1mCOLOR\033[0m' #这里出了问题,因为单引号把里面的变量识别为字符串
color.sh 31
#$1,$2,…位置变量,用于让脚本在脚本代码中调用用过命令传递给它的参数
vim color.sh
echo -e “\033[$1mCOLOR\033[0m” #这里应该用双引号
color.sh 31
echo $?
#根据$?的返回值是否为0,判断语法是否成功
Bash的组合测试条件
||
rpm -q ftp &> /dev/null || yum install ftp -y #判断ftp是否安装,如果没安装就安装
ping -c1 -w2 station &> /dev/null \
> && echo "station1 is up"
> ||(echo 'station1 is unreachable';exit 1)
station1 is up
"""判断是否ping通,如果Ping通'station1 is up',如果ping不通'station1 is unreachable'"""