Linux 常用命令中篇

7、软件包管理

安装软件 rpm yum 源码安装 ​ 卸载软件

7.1 rpm介绍

rpm软件包名称:
软件名称 版本号(主版本、次版本、修订号) 操作系统 -----90%的规律
#有依赖关系,不能自动解决依赖关系。
举例:openssh-6.6.1p1-31.el7.x86_64.rpm  
数字前面的是名称
数字是版本号:第一位主版本号,第二位次版本号,带横杠的是修订号, el几---操作系统的版本。  
noarch : 32位64位都支持
x86_64 :  64位
i4-686的包 :32位
devel:表示这个RPM包是软件的开发包;
=============================================================================
​
#用rpm安装需要考虑如下信息:
1.需要考虑系统的版本需要与rpm对应
2.系统的架构:如32位还是64位
3.需要考虑依赖关系
​
rpm包管理工具  rpm命令
yum命令,管理rpm包的,解决rpm包之间的依赖关系
7.1.1 rpm安装
语法:# rpm -ivh 软件包名称
参数:
-i: install
-vh:verbose human
-U: upgrade  
​
查找rpm包的网站:  http://pkgs.org
1.通过rpm安装
可以先下载下来
wget  https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
#wget   下载命令
#wget -O 指定存放路径
​
[root@localhost ~]# rpm -ivh mysql80-community-release-el7-11.noarch.rpm  #本地安装rpm包
​
2.直接通过连接安装rpm包
[root@localhost ~]# rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
7.1.2 各种查询
#查询   
(从本地的rpm数据库)
参数:
-q:query
-l:list
-f:file
-a:all
[root@localhost ~]# rpm -qa | grep 软件名  #查找软件是否安装
[root@localhost ~]# rpm -ql httpd         #查询http安装的文件
[root@localhost ~]# rpm -qf /usr/share/httpd/noindex/
httpd-2.4.6-99.el7.centos.1.x86_64        #查询该文件属于哪个包
[root@localhost ~]# rpm -qf /etc/passwd
setup-2.8.71-11.el7.noarch                #查询某一个文件是哪个软件产生的:只能查询已经安装好的软件
7.1.3 卸载
语法:# rpm -e 软件名称
参数:
-e:erase
[root@localhost ~]# rpm -e httpd
rpm工具管理软件包总结:
1.很难解决包依赖关系
2.如果某个文件没有,很难知道它由哪个rpm包提供

7.2 yum方式管理

#可以自动解决rpm软件依赖关系,虽然是通过yum安装的但是最后执行的还是rpm,也就是说没有rpm命令yum也就不能使用。
分类:本地yum和远程yum
本地yum:
file://
远程yum:
http://
ftp://
7.2.1 yum操作
安装好环境之后我们有centos自带的官方yum源,我们也可以自行更换或者制作自己的yum源
​
清理yum缓存:
    # yum clean all
​
缓存软件包信息:
    提高搜索/安装软件的速度
    # yum makecache 
    
查询yum源信息:
    # yum repolist
​
查找软件:
    # yum search mysql
    #此命令会搜索到系统已经安装和yum源里没有安装的软件信息,可以用以简单测试yum是否好用
​
查看命令属于哪个软件:
    # yum provides rz
    
查看系统已经安装好的软件和没有安装的软件(源里存在即可查到):
    # yum list
​
安装软件:
    # yum install 软件名称
    # yum install mysql mysql-server -y     #-y跳过确认提示直接安装
    
重装:
    # yum -y reinstall 软件名        
    
卸载软件:
    # yum erase  mysql-server 
    # yum remove mysql-server 
    # yum -y remove mysql-server
    
[root@localhost ~]# yum -y remove `rpm -qa | grep httpd`  #yum卸载rpm查找出来所有与httpd相关的软件包全部卸载掉
7.2.2 更换网络yum源-----aliyun
https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b11WaK1yM  --阿里yum源地址
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mkdir CentOSback/
[root@localhost yum.repos.d]# mv *.repo CentOSback/
[root@localhost yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo    ##下载aliyun的yum源
​
参数:
curl -o  指定存放路径
或者
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
​
安装扩展源-----epel.repo
[root@localhost yum.repos.d]# wget http://mirrors.aliyun.com/repo/epel-7.repo
​
如未切换到/etc/yum.repos.d路径下则指定路径,如下:
[root@linux-server ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
​
[root@localhost yum.repos.d]# ls
CentOSback  CentOS-Base.repo  epel-7.repo  Httpback  Permyyum
7.2.3 制作本地yum方式
a. 通过镜像制作本地yum源
1.首先需要挂载镜像
[root@localhost ~]# mkdir /mnt/centos7usertest
​
2.将本地镜像上传到虚拟机中
[root@localhost ~]# mv /usr/local/home/dir10/CentOS-7-x86_64-DVD-1708.iso /root/    #此为镜像放在了/usr/local/home/dir10/目录下
如通过xshell的xftp上传则直接就在root目录下,直接挂载即可
​
[root@localhost ~]# mount CentOS-7-x86_64-DVD-2207-02.iso /mnt/centos7usertest/
mount: /dev/loop0 写保护,将以只读方式挂载
​
如果/etc/yum.repos.d/目录下有.repo文件可以删除再自建,如下:
[root@localhost ~]# rm -rf /etc/yum.repos.d/*
然后cd到yum源配置文件存放目录
[root@localhost ~]# cd /etc/yum.repos.d/
​
或者将本身安装过的yum源通过备份的方式存放再进行自建
[root@localhost yum.repos.d]# ls
Aliback  CentOSback  Httpback  Permyyum
​
[root@localhost yum.repos.d]# vim CentOS.Base.repo  #在编写yum配置文件时必须是.repo
[centos7usertest]       #yum源区别名称,用来区分其他yum源
name=centos7usertest    #yum源描述,即yum源名字
baseurl=file:///mnt/centos7usertest #指定本地yum源路径
enabled=1   #是否使用此yum源(1为打开,0为关闭)
gpgcheck=0  #检查软件
b. 通过开启yum下载缓存功能制作自己的yum源------了解
**制作自己的yum源**:
打开Yum缓存功能:安装完软件之后,软件不会被删除(默认安装完之后,不会保留安装包)
# vim /etc/yum.conf  修改下面参数的值为1,软件会被保存到cachedir指定的目录下
keepcache=1
[root@localhost ~]# yum install -y httpd wget
[root@localhost ~]# cd /var/cache/yum/x86_64/7/base/packages/  #yum缓存仓库
[root@localhost packages]# ls
httpd-2.4.6-90.el7.centos.x86_64.rpm        wget-1.14-18.el7_6.1.x86_64.rpm
httpd-tools-2.4.6-90.el7.centos.x86_64.rpm
​
**自己制作yum源**
[root@localhost /]# mkdir /myyum    #把rpm安装包放到此目录里面
​
**把想用yum安装的软件包拷贝到目录下**
[root@localhost /]# cp /var/cache/yum/x86_64/7/base/packages/* /myyum/
[root@localhost /]# yum install -y createrepo   #创建repo文件工具
[root@localhost /]# createrepo /myyum/      #此目录就可以作为yum源了。
[root@localhost /]# vim /etc/yum.repos.d/myyum.repo
[myyum]
name=myyum
baseurl=file:///myyum
enabled=1
gpgcheck=0
[root@localhost /]# yum repolist
yum排错:
1.yum配置文件必须以.repo结尾      
2.yum.conf里面8,9行的值设置成0
3.配置文件关键字错误
4.检查yum源是否存在
5.baseurl路径是否正确
6.镜像大小是否正确
7.当有Yum进程存在的时,无法同时再打开一个Yum进程

7.3 源码包管理

一个软件要在Linux上执行,必须是二进制文件,因此当我们拿到软件源码后,需要将它编译成二进制文件才能在Linux上运行。
源码包的编译用到了linux系统里的编译器,通常源码包都是用C语言开发的,这也是因为C语言为linux上最标准的程序语言。Linux上的C语言编译器叫做gcc,利用它就可以把C语言变成可执行的二进制文件。
源码安装的优点,编译安装过程,可以设定参数按照需求增加功能,进行安装,并且可以指定安装的版本,可以指定安装路径,灵活性比较大。

获得源码包途径 官方网站,可以获得最新的软件包

mysql: MySQL

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.27.tar.gz

Nginx: www.nginx.org

安装源码包 
准备工作(去Nginx官网下载Nginx软件的源码包) 
1.编译环境如编译器gcc、make 
# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel  #编译环境的准备
​
gcc:是编译工具,编译单个文件
make:工具可以看成是一个智能的批处理工具,通过调用makefile文件中用户指定的命令来进行编译和链接的。(将这种高级语言写的代码编译成二进制语言)
pcre:支持正则表达式
zlib-devel:有些应用依赖于这个库才能正常运行,因此需要安装zlib-devel
openssl-devel:某些库文件等跟开发相关的东西。
​
2. 准备软件 nginx-1.16.0.tar.gz 
3. 部署安装Nginx 软件服务
[root@localhost ~]# wget http://nginx.org/download/nginx-1.25.5.tar.gz
[root@localhost ~]# tar xzf nginx-1.25.5.tar.gz 
[root@localhost ~]# cd nginx-1.25.5/
[root@localhost nginx-1.25.5]# ./configure --user=www --group=www --prefix=/usr/local/nginx
[root@localhost nginx-1.25.5]# make             #编译文件
[root@localhost nginx-1.25.5]# make install     #安装文件
[root@localhost ~]# useradd www                 #创建nginx用户
[root@localhost ~]# /usr/local/nginx/sbin/nginx #启动
[root@localhost ~]# systemctl stop firewalld    #关闭防火墙

启动访问

停止nginx
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s stop

详解源码安装三步曲 
# ./configure   #相对路径执行安装

 a. 指定安装路径,例如 --prefix=/usr/local/nginx     
 b. 检查安装环境,例如是否有编译器gcc,是否满足软件的依赖需求,最终生成:Makefile
 c. 软件模块或者功能的启用禁用

#make                //按Makefile文件编译,产生可执行的文件。但是这个文件在当前目录中。

#make install        //按Makefile定义的文件路径安装,将产生的可执行文件,安装到合适的位置,相当于拷贝。

8、进程管理

8.1 文件属性chattr【扩展】

文件权限管理之———隐藏权限防止root误删除

8.1.1 文件属性添加与查看
[root@localhost test]# touch a.txt b.txt c.txt
1.查看文件属性
[root@localhost test]# lsattr a.txt b.txt c.txt 
---------------- a.txt
---------------- b.txt
---------------- c.txt
2.设置权限
[root@localhost test]# chattr +a a.txt  #不允许修改,只允许追加
[root@localhost test]# chattr +i b.txt  #不允许做任何操作
[root@localhost test]# chattr +A c.txt 
[root@localhost test]# lsattr a.txt b.txt c.txt 
-----a---------- a.txt
----i----------- b.txt
-------A-------- c.txt
​
i:即Immutable,系统不允许对这个文件进行任何的修改
a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何覆盖或截断这个文件
A:即Atime,告诉系统不要修改对这个文件的最后访问时间

测试

[root@localhost test]# echo 777 > a.txt 	#覆盖,只允许追加
-bash: a.txt: 不允许的操作
[root@localhost test]# rm -rf b.txt 		#不能删除
rm: 无法删除"b.txt": 不允许的操作
[root@localhost test]# echo 777 >> a.txt 	#追加
[root@localhost test]# cat a.txt 
777
[root@localhost test]# echo 777 > b.txt 
-bash: b.txt: 权限不够
[root@localhost test]# echo 777 >> b.txt 
-bash: b.txt: 权限不够
[root@localhost test]# rm -rf b.txt 
rm: 无法删除"b.txt": 不允许的操作
[root@localhost test]# mv b.txt c.txt 
mv:是否覆盖"c.txt"? y
mv: 无法将"b.txt" 移动至"c.txt": 不允许的操作

**取消权限**
[root@localhost test]# chattr -a a.txt 
[root@localhost test]# chattr -i b.txt
[root@localhost test]# chattr -A c.txt 
[root@localhost test]# lsattr a.txt b.txt c.txt
---------------- a.txt
---------------- b.txt
---------------- c.txt

8.2 进程管理

关于进程process

What is process?
Process states
8.2.1 什么是进程?
进程是已启动的可执行程序的运行实例,是程序运行的过程, 动态的,有生命周期及运行状态。
程序: 二进制文件,静态 /bin/date, /usr/sbin/httpd,/usr/sbin/sshd, /usr/local/nginx/sbin/nginx
8.2.2 查看进程process
8.2.2.1 静态查看进程
[root@localhost ~]# ps aux | less
参数:
ps:process nsapashot
a:只能查看系统里面运行的所有终端进程
u:显示进程拥有者
x:显示系统内所有进程
f:显示进程之间的父子关系
a. 查看进程(1)
[root@localhost ~]# ps aux
USER	PID		%CPU	%MEM    VSZ   RSS	TTY		STAT START   TIME	COMMAND
============================================================================
USER:运行进程的用户
PID:进程ID
%CPU:CPU占用率
%MEM:内存占用率
VSZ:进程占用的虚拟内存大小
RSS:占用的物理内存大小
STAT:进程状态-----了解
?:表示没有占用终端
R:运行
S:可中断睡眠 Sleep
D:不可中断睡眠
T:停止的进程 
Z:僵尸进程
X:死掉的进程
START:进程的启动时间
TIME:进程占用CPU的总时间
COMMAND:进程文件,进程名

进程状态-----了解
Sl:以线程的方式运行
Ss:s进程的领导者,父进程
R+:+表示是前台的进程组
S<:<优先级较高的进程 	
SN:N优先级较低的进程
查看tty的方法:
[root@localhost ~]# tty
? 表示这个进程开启的时候没有占用终端
b. 查看进程(2)
[root@localhost ~]# ps -ef
参数:
-e:显示所有进程
-l:长格式显示
-f:完整格式
UID:	用户ID
PID:	进程ID
PPID:	父进程ID
C:		CPU占用率
STIME:	开始时间
TTY:	开始此进程的TTY----终端设备
TIME:	此进程运行的总时间
CMD:	命令名
c. 查看单个PID
[root@localhost ~]# yum install -y httpd	#安装apache软件
[root@localhost ~]# systemctl start httpd	#启动
[root@localhost ~]# cat /var/run/httpd/httpd.pid 
8296
d. 查看指定PID

grep:过滤

[root@localhost ~]# ps aux | grep sshd
root       1272  0.0  0.0 112984   436 ?        Ss   4月23   0:00 /usr/sbin/sshd -D
root      18616  0.0  0.4 161072  4632 ?        Ss   15:48   0:00 sshd: root@pts/2
root      21626  0.0  0.0 112824   980 pts/2    R+   16:30   0:00 grep --color=auto sshd
e. 查看端口
[root@localhost ~]# yum install lsof	#安装软件包
[root@localhost ~]# lsof -i:80			#端口号,这能查看带端口的进程
COMMAND  PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
httpd   8296   root    4u  IPv6 3096439      0t0  TCP *:http (LISTEN)
httpd   8300 apache    4u  IPv6 3096439      0t0  TCP *:http (LISTEN)
f. 查看网络进程和正在监听的端口
[root@localhost ~]# netstat -tnlp
参数:
-a:显示全部的进程
-u:显示udp
-n:以数字的形式显示协议名称
-t:显示tcp
-p:显示进程的名称和pid
-l:只显示正在被监听的端口
[root@localhost ~]# w	#查看已经登陆到终端的进程信息,远程登录会有ip地址
8.2.2.2 动态查看进程

#top、htop

[root@localhost ~]# top		#动态显示信息,三秒刷新一次
在工作中必须监控的东西 load average(平均负载)等待cpu处理的队列长度, 也是个数。
1分钟   第一个数字
5分钟   第二个数字
15分钟  第三个数字
==========================================================
计算cpu负载:load average的三个值: 0.10, 0.16, 0.12,分别除以cpu的个数,得出的值。如果值大于1,那么那时候的负载就高。
a. top操作
[root@localhost ~]# top	
h|?:帮助
>:	往下翻页
<:	往上翻页
M:	按内存排序
P:	按cpu排序
q:	退出   
z:	彩色显示
W:	保存
=============================
PR:	 优先级
VIRT:进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES: 进程使用的、未被换出的物理内存大小,单位kb
SHR: 共享内存大小,单位kb
ni:nice值
id:cpu空闲率
wa:cpu等待,等待输入/输出的进程占用的 CPU 百分比。如果使用率过高,表示硬盘该换了
b. 进程优先级nice
nice 值越高:表示优先级越低,例如+19,该进程容易将CPU 使用量让给其他进程。
nice 值越低:表示优先级越高,例如-20,该进程更不倾向于让出CPU。

8.3 进程控制

a. 按pid杀死进程
kill,pkill
语法: kill 信号 PID   #信号也是进程间通信的一种方式
[root@localhost ~]# kill -l	#查看所有信号
-1   HUP  重新加载进程或者重新加载配置文件,PID不变
-9   KILL 强制杀死
-15  TERM 正常杀死(这个信号可以默认不写)
-18  CONT 激活进程
-19  STOP 挂起进程

案例一

给vsftpd进程发送信号1,15 vsftpd信号测试

[root@localhost ~]# yum install -y vsftpd	#安装vsftpd
[root@localhost ~]# systemctl start vsftpd	#启动
[root@localhost ~]# ps aux | grep vsftpd
root      22985  0.0  0.0  53292   580 ?        Ss   16:52   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
[root@localhost ~]# kill -1 22985	#发送重启信号,例如vsftpd的配置文件发生改变,希望重新加载
[root@localhost ~]# ps aux | grep vsftpd
root      22985  0.0  0.0  53292   748 ?        Ss   16:52   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
[root@localhost ~]# kill 22985	#正常杀死进程,信号为-15可以默认不写。我们可以使用systemctl stop vsftpd 停止服务
[root@localhost ~]# ps aux | grep vsftpd
root      23118  0.0  0.0 112824   980 pts/2    R+   16:54   0:00 grep --color=auto vsftpd

进程状态解释-----了解
+: 表示运行在前台的进程组
S+:休眠状态
T+:暂停,挂起状态
R+:表示前台正在运行
s: 父进程

案例二

给vsftpd进程发送信号-9, vsftpd信号测试

[root@localhost /]# systemctl start vsftpd
[root@localhost /]# ps aux | grep vsftpd
root      25112  0.0  0.0  53292   576 ?        Ss   17:25   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root      25131  0.0  0.0 112824   980 pts/2    R+   17:25   0:00 grep --color=auto vsftpd
[root@localhost /]# kill -9 25112
[root@localhost /]# ps aux | grep vsftpd
root      25153  0.0  0.0 112824   976 pts/2    R+   17:26   0:00 grep --color=auto vsftpd
b. 按进程名称杀死进程

案例三

使用pkill 杀死httpd 进程

[root@localhost /]# systemctl start httpd
[root@localhost /]# ps aux | grep httpd
root       8296  0.0  0.2 224088  2436 ?        Ss   13:09   0:02 /usr/sbin/httpd -DFOREGROUND
apache     8300  0.0  0.2 226172  2092 ?        S    13:09   0:00 /usr/sbin/httpd -DFOREGROUND
apache     8301  0.0  0.2 226172  2092 ?        S    13:09   0:00 /usr/sbin/httpd -DFOREGROUND
apache     8302  0.0  0.2 226172  2092 ?        S    13:09   0:00 /usr/sbin/httpd -DFOREGROUND
apache     8303  0.0  0.2 226172  2092 ?        S    13:09   0:00 /usr/sbin/httpd -DFOREGROUND
apache     8304  0.0  0.2 226172  2092 ?        S    13:09   0:00 /usr/sbin/httpd -DFOREGROUND
root      25276  0.0  0.0 112824   980 pts/2    R+   17:27   0:00 grep --color=auto httpd
[root@localhost /]# pkill -9 httpd
[root@localhost /]# ps aux | grep httpd
root      25294  0.0  0.0 112824   980 pts/2    R+   17:27   0:00 grep --color=auto httpd
  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值