分布式跟踪工具Pinpoint技术入门

本文初衷

因为工作需要,这周研究了一下APM(Application Performance Management)相关技术,看了些许资料,对比了各种技术的特点,最终选择Pinpoint作为性能监控工具,本文的主要目的是记录本人部署Pinpoint的过程。

Pinpoint是什么

简单的说,Pinpoint是一款对Java编写的大规模分布式系统的APM工具,有些人也喜欢称呼这类工具为调用链系统分布式跟踪系统。我们知道,前端向后台发起一个查询请求,后台服务可能要调用多个服务,每个服务可能又会调用其它服务,最终将结果返回,汇总到页面上。如果某个环节发生异常,工程师很难准确定位这个问题到底是由哪个服务调用造成的,Pinpoint等相关工具的作用就是追踪每个请求的完整调用链路,收集调用链路上每个服务的性能数据,方便工程师能够快速定位问题。

同类工具

为什么要用Pinpoint

最重要的原因,对代码的零侵入,运用JavaAgent字节码增强技术,只需要加启动参数即可。

Pinpoint架构图

pinpoint-architecture

(图片出处:官网)架构说明:

  • Pinpoint-Collector:收集各种性能数据
  • Pinpoint-Agent:和自己运行的应用关联起来的探针
  • Pinpoint-Web:将收集到的数据显示成WEB网页形式
  • HBase Storage:收集到的数据存到HBase中

开始部署

前提条件

  • maven 3.2.x+
  • git
  • java 6+

0. 开始

1. 部署Hbase

Pinpoint以Hbase作为数据的存储。

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
  • 编辑hbase-site.xml:
<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>file:///Users/acheron/Tmp/hbase</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/Users/acheron/Tmp/zookeeper</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.clientPort</name>
        <value>2182</value>
  </property>
</configuration>

这样配置是本地单实例模式启动,上面配置分别表示:数据存放地点、zookeeper数据存放地点、zookeeper端口号(默认2181)。当然这个文件可以不配置,那么会采取默认值

启动hbase的时候,hbase用得是自带的zk,在hbase的配置里可见 export HBASE_MANAGES_ZK=true;

  • 进入hbase/bin目录启动hbase:./start-hbase.sh
  • jps命令查看Hbase是否启动成功,如果启动成功的会看到”HMaster”的进程
  • 初始化pinpoint需要的表:./hbase shell hbase-create.hbase (这里的hbase-create.hbase在源码pinpoint/hbase/scripts/hbase-create.hbase)
  • 访问页面测试是否成功:http://localhost:16010/master-status ,如果成功在页面的tables标签下能看到导入的表。
  • 也可以用命令来查看是否导入表成功,进入hbase,输入”status ‘detailed'”可以查看初始化的表
./hbase shell
status 'detailed'

2. 部署Pinpoint-collector

  • 将pinpoint-collector-1.6.0-SNAPSHOT.war放到tomcat-collector-8086/webapps/下,并重命名为ROOT.war
  • 启动tomcat,配置ROOT/WEB-INF/classes/hbase.properties:
hbase.client.host=localhost
hbase.client.port=2181

指向zookeeper的地址和端口,如果是本机,端口默认,则这里不需更改。

  • 配置上面后,重启tomcat(端口8086

3. 部署Pinpoint-web

Pinpoint-web的配置和Pinpoint-collector相似:

  • 将pinpoint-web-1.6.0-SNAPSHOT.war放到tomcat-web-8085/webapps/下,并重命名为ROOT.war
  • 启动tomcat,配置ROOT/WEB-INF/classes/hbase.properties:
hbase.client.host=localhost
hbase.client.port=2181

指向zookeeper的地址和端口,如果是本机,端口默认,则这里不需更改。

  • 配置上面后,重启tomcat(端口8085

4. 部署Pinpoint-agent

  • 新建目录:mkdir pp-agent
  • 将pinpoint-agent-1.6.0-SNAPSHOT.tar.gz 拷贝到pp-agent目录并解压
  • 配置pinpoint.config:profiler.collector.ip=127.0.0.1这是指pinpoint-collector的地址,如果是同一服务器,则不用修改。其它默认。
  • 安装pinpoint-collector启动后,自动就开启了9994,9995,9996的端口了,这里默认即可。如果有端口需求,要去pinpoint-collector的配置文件(“pinpoint-collector/webapps/ROOT/WEB-INF/classes/pinpoint-collector.properties”)中,修改这些端口。

5. 部署TestApp

  • 官方提供了一个测试用的应用,pinpoint-quickstart-testapp-null.war,将其重命名为ROOT.war,部署到tomcat-testapp-8084
  • 修改此tomat的/bin/catalina.sh,在106行左右加入启动参数:
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/Users/acheron/pinpoint/pp-agent/pinpoint-bootstrap-1.6.0.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=myapp"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=MyTestPP"

第一行:pinpoint-bootstrap-1.6.0.jar的位置

第二行:这里的agentId必须唯一,标志一个jvm。

第三行:applicationName表示同一种应用:同一个应用的不同实例应该使用不同的agentId,相同的applicationName。

6. springboot包部署

如果是jar包部署,直接在启动命令加启动参数:

nohup java -javaagent:/Users/acheron/pinpoint/pp-agent/pinpoint-bootstrap-1.6.0.jar -Dpinpoint.agentId=acheron-consumer -Dpinpoint.applicationName=acheron-consumer -jar myapp.jar &

7.效果演示

hbase和各应用都启动成功之后,访问Pinpoint-web,效果:

pinpoint-page

结束语

各大APM工具,几乎都是根据google这篇经典的Dapper论文而来,一定要读一读。这里是它的源文地址:https://research.google.com/pubs/pub36356.html,感谢这位同学的翻译:http://bigbully.github.io/Dapper-translation/

参考文章

SSH免密码及别名登录设置

问题

众所周知,在用SSH远程登录linux服务器时,可以用下面的命令:

ssh root@192.168.1.209

但麻烦的是,每次都要输入服务器地址和密码,有没有方法不用每次都输入密码,甚至可以给服务器设置一个容易记住的别名,例如可以ssh 209直接登录。

解决

使用”公钥登录”的方法可以解决这个问题。“公钥登录”的原理很简单,用户将自己的公钥储存在远程服务器上。登录的时候,远程服务器会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录。

1. 免密登录

在用户的~/.ssh目录下有文件id_rsaid_rsa.pub,前者表示本机的私钥,后者表示本机的公钥。如果没有这两个文件,则可以运行下面的命令生成:

$ ssh-keygen

运行上面的命令以后,系统会出现一系列提示,一路按回车即可,运行结束在.ssh目录会生成上述两个文件。

然后用ssh-copy-idscp命令将生成的公钥id_rsa.pub传到远程机器上:

$ ssh-copy-id root@192.168.1.209

因为公钥只是一串字符器,所以可以不用上面这个命令,可以直接拷贝本机的公钥里的字符串,附加到远程主机的~/.ssh/authorized_keys里,这样就可以免密登录了。

2. 别名登录

按上面第一步设置后,可以用ssh root@192.168.1.209不用输入密码就可以直接登录了,现在设置将root@192.168.1.209209代替,直接用ssh 209就可以登录。

在本机的 ~/.ssh目录下创建 config文件:

$ vim ~/.ssh/config

输入以下内容:

Host 209
User root
HostName 192.168.1.209
IdentityFile ~/.ssh/id_rsa

其中内容说明如下(端口默认为22):

  • Host 209 :自己定的别名
  • User root :远程主机的用户名
  • HostName 192.168.1.209:远程主机的地址
  • IdentityFile ~/.ssh/id_rsa:本地私钥

当前如果要登录多个主机,可以设置多个:

Host herohuang
HostName herohuang.com
User acheron
IdentityFile ~/.ssh/id_rsa_a
Host github
HostName github.com
User github
IdentityFile ~/.ssh/id_rsa_b

学习总结:Linux系统管理

一、进程管理

1. 进程管理的作用

  • 判断服务器健康状态
  • 查看系统中所有进程
  • 杀死进程

2. 进程的查看–ps和pstree命令

  • 查看系统中所有进程,使用BSD操作系统格式
ps aux 
  • 查看系统中所有进程,使用linux标准命令格式
ps -le

选项: -a:显示一个终端的所有进程,除了会话引线 -u:显示进程的归属用户及内存的使用情况 -x:显示没有控制终端的进程 -l:长格式显示 -e:显示所有进程,和-A作用一致

  • ps命令进程输出的说明:
    • USER:该进程是由哪个用户产生的
    • PID:进程的ID号
    • %CPU:该进程占用的CPU资源的百分比,占用越高,进程越消耗资源
    • %MEM:该进程占用物理内存的百分比,占用越高,进程越消耗资源
    • VSZ:该进程占用虚拟内存的大小,单位KB
    • RSS:该进程占用实际物理内存的大小,单位KB
    • TTY:该进程是在哪个终端中运行的,其中tty1-tty7代表本地控制台终端,tty1-tty6代表本地的字符界面终端,tty7是图形终端,pts/0-255代表虚拟终端。
    • STAT:进程状态:
      • R:运行
      • S:睡眠
      • T:停止状态
      • s:包含子进程
      • +:位于后台
    • START:该进程的启动时间
    • TIME:该进程占用CPU的运算时间,注意不是系统时间
    • COMMAND:产生此进程的命令名

  • 查看进程树
pstree

选项:

  • -p:显示进程的PID
  • -u:显示进程的所属用户

3. 进程的查看–top命令

top
  • 选项:
    • -d 秒数:指定top命令默认每隔几秒更新,默认是3秒
    • -b:使用批处理模式输出,一般和“-n”选项合用
    • -n 次数:指定top命令执行的次数,一般和-b选项合用
  • 在top命令的交互模式中可以执行的命令:
    • ?或h:显示交互模式的帮助
    • P:以CPU使用率排序,默认就是此项
    • M:以内存的使用率排序
    • N:以PID排序
    • q:推出top
  • top命令前5行的作用:
top - 22:52:38 up  3:41,  1 user,  load average: 0.15, 0.16, 0.23
Tasks: 223 total,   2 running, 221 sleeping,   0 stopped,   0 zombie
%Cpu(s):  9.7 us,  2.8 sy,  0.0 ni, 86.4 id,  1.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3967824 total,   985600 free,  1241660 used,  1740564 buff/cache
KiB Swap:  4115452 total,  4115452 free,        0 used.  2213400 avail Mem 

  • 第一行: 系统当前时间 系统的运行时间 当前登录了几个用户 系统在之前1分钟,5分钟,15分钟的平均负载,一般小于1时,负载较小。如果大于1,系统已经超出负载。
  • 第二行: Tasks: 系统中的进程总数 2 running: 正在运行的进程数 221 sleeping:睡眠的进程 0 stopped:正在停止的进程 0 zombie:僵尸进程,如果不是0,需要手工检查僵尸进程
  • 第三行: %Cpu(s):用户模式占用CPU的百分比 2.8sy:系统模式占用的CPU百分比 0.0ni:改变过优先级的用户进程CPU占用百分比 86.4id:空闲CPU的CPU百分比 1.1wa:等待输入/输出的进程的占用百分比 0.0hi:硬终端请求服务占用的CPU百分比 0.1si:软终端请求服务占用的CPU百分比 0.0st:st(Steal time)虚拟时间百分比,就是当由虚拟机时,虚拟CPU等待实际CPU的时间百分比
  • 第四行: Mem:物理内存的总量,单位KB free:空闲的物理内存数量 userd:已经使用的物理内存数量 buff:作为缓冲的内存数量
  • 第五行: Swap:交换分区(虚拟内存)的总大小 free:空闲交换分区的大小 userd:已经使用的交互分区的大小

    • top只能查看部分进程情况,如果要查看系统中所有进程的CPU占用情况,则可以用以下方式,将结果存于top.log中:
top -b -n 1 > top.log

4. 杀死进程

  • 1.kill命令
    • 查看可用的进程信号
      kill -l
      
    • 重启进程
      kill -1 2235
      
    • 根据进程信号,-1既-HUP:
      kill -HUP 2235
      
    • 强制杀死进程
      kill -9 2235
      
  • 2.killall命令
    • killall [选项][信号]进程名 按照进程名杀死进程 选项: -i :交互式,询问是否杀死某个进程 -I:忽略进程名的大小写
  • 3.pkill命令
    • pkill [选项][信号]进程名 按照进程名杀死进程 选项: -t 终端号:安装终端号踢出用户
    1. 查看当前登录用户,终端号可以这个命令查看
    w
    
    1. 强制杀死从pts/1虚拟终端登录的进程
    pkill -9 -t pts/1
    

5. 修改进程优先级

Linux操作系统是一个多用户多任务的操作系统,linux系统中运行这非常多的进程,但是cpu在同一个时钟周期内只能运算一个指令,进程优先级决定了每个进程处理的先后顺序。

查看优先级可以根据上面的查看进程命令ps -le查看,

  • PRI,NI都表示优先级,其中PRI代表Priority,NI代表Nice,数字越小代表该进程优先级越高。
  • PRI是不能修改的,但用户可以修改NI,但是系统生效的优先级是PRI+NI,所有修改NI可以修改进程的优先级。
  • 修改NI值的几个注意事项:
    • NI值的范围是-20到19
    • 普通用户调整NI的范围是0到19,而且只能调整自己的进程
    • 普通用户只能调高NI值,不能降低
    • root用户才能设定进程NI值位负值,而且可以调整任何用户的进程
    • PRI(最终值)= PRI(原始值) + NI
    • 用户只能修改NI的值,不能直接修改PRI
  • 修改优先级命令:
nice [选项]命令

nice命令可以给新执行的命令直接赋予NI值,但是不能修改已经存在的进程的NI值 选项: -n NI值:给命令赋予NI值

例如将apache服务所有进程优先级改为-5:

nice -n -5 service httpd start
  • 修改已经存在的进程的NI值的命令 例如将PID为2125的进程该为-10: renice -10 2125
renice[优先级] PID

二、工作管理

1. 工作管理简介

工作管理指的是在单个登录终端中同时管理多个工作的行为。类似于在windows中,将程序放在后台运行。

  • 查看后台作业,加-l可以查看进程的PID号 注:结果显示+号表示最近一个放入后台的工作,也是工作恢复时默认恢复的工作,-号代表倒数第二个放入后台的工作
jobs [-l]

2. 工作管理方法

  • 把进程放入后台方式: 1.命令 & : 把命令放入后台,并在后台运行 2.命令执行后 ctrl+z : 放在后台暂停
  • 将后台暂停的工作恢复到前提运行:
fg %工作号

%可以省略,工作号是前面的1,2,3,而不是PID号

  • 将后台暂停的工作恢复到后台运行:
bg %工作号

3. 后台命令脱离终端

命令在后台只在当前终端执行,如果关闭当前终端,后台命令也会关闭,因为终端关闭时其实是给kill -l发送一个信号。而一些服务要脱离终端运行,例如mysql的服务,mysqld这个d是守护进程的意思。

后台程序脱离终端方法:

  • 1.把需要后台执行的命令加入 /etc/rc.local文件
  • 2.使用系统定时任务,让系统在指定的时间执行某个后台任务
  • 2.nohup [命令] &

三、系统资源查看

1.vmstat 监控系统资源

vmstat [刷新延时 刷新次数]
比如:vmstat 1 3  每隔1秒中刷新3次

结果:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 4  0      0 1636132  55736 1163332    0    0   212    86  198  856  8  2 85  6  0
 3  0      0 1632764  55736 1163364    0    0     0     0 1020 7142 19  6 74  1  0
 3  0      0 1630328  55736 1163360    0    0     0     0 1186 6955 17  5 76  1  0

说明:

  • procs:进程信息字段
    • r :等待运行的进程数,数量越大,系统越繁忙
    • b: 不可被唤醒的进程数量,数量越大,系统越繁忙
  • memory:内存信息字段
    • swpd:虚拟内存的使用情况,单位kb
    • free:空闲的内存容量,单位kb
    • buff:缓冲的内存容量,单位kb
    • cache:缓存的内存容量,单位kb
  • swap:交换分区的信息字段
    • si:从磁盘中交换到内存中数据的数量,单位kb
    • so:从内存中交换到磁盘中数据的数量,单位kb 此两个数越大,说明数据需要经常在磁盘和内存之间交换,系统性能越差
  • io:磁盘读写信息字段
    • bi:从块设备读入数据的总量,单位是块
    • bo:写到块设备的数据的总量,单位是块 此两个数越大,代表系统的I/O越繁忙
  • system:系统信息字段
    • in:每秒被中断的进程次数
    • cs:每秒进行的事件切换次数,此两个数越大,代表系统与接口设备的通信非常繁忙
  • CPU: cpu信息字段
    • us:非内核进程消耗cpu运算时间的百分比
    • sy:内核进程消耗cpu运算时间的百分比
    • id:空闲cpu的百分比
    • wa:等待I/0所消耗的cpu百分比
    • st:被虚拟机所盗用的cpu百分比

缓存cache:用来加速数据从硬盘中读取 缓冲buffer:加速数据写入

2.dmesg开机时内核检测信息

dmesg
dmesg | grep CPU

3.free命令查看内存使用状态

free [-b|-k|-m|-g]

选项:

  • -b:以字节为单位显示
  • -k:以kb为单位显示,默认
  • -m:以MB为单位显示
  • -g:以GB为单位显示

4.查看cpu的信息

cat /proc/cpuinfo

5. uptime 命令

uptime

显示系统的启动时间和平均负载,也就是top命令的第一行,w命令也可以看到这个数据

5. 查看系统与内核相关信息

uname [选项]

选项:

-a:查看系统所有相关信息
-r:查看内核版本
-s:查看内核名称

6. 查看操作系统的位数:

随便打开一个外部命令,看这个命令是几位,则操作系统的位数,如:

file /bin/ls

7. 查询当前linux系统的发行版

lsb_release -a

对比上面的查看内核版命令:uname -r

8. 列出进程打开或使用的文件信息

lsof [选项]

选项:

-c 字符串: 只列出以`字符串`开头的进程打开的文件
-u 用户名:只列出某个用户的进程打开的文件
-p pid:列出某个pid进程打开的文件

如:

lsof | more 查看系统中所有进程调用的文件
lsof /sbin/init 查询某个问被哪个进程调用
lsof -c httpd 查看httpd进程调用了哪些文件
lsof -u root 按照用户名,查询某用户的进程调用的文件名

四、系统定时任务

1. at一次执行

at服务是否安装

chkconfig --list | grep atd

at服务的状态

service atd status

at服务的启动

service atd restart 

at [选项]时间

  • 选项: -m:当at工作完成后,无论是否命令有输出,都用email通知执行at命令的用户 -c 工作号:显示该at工作的实际内容
  • 时间: HH:MM 例如:03:30 HH:MM YYYY-MM-DD 例如:03:30 2016-07-15 HH:MM[am|pm][month][date] 例如:02:30 July 25 HH:MM[am|pm] + [minutes|hours|days|weeks] 例如:now+5 minutes

查询当前服务器上的at工作:

atq

删除指定的at任务:

atrm [工作号]

2. crontab循环定时任务

service crond restart
chkconfig crond on

crontab [选项] 选项:

-e:编辑crontab定时任务
-l: 查询crontab任务
-r:删除当前用户所有的crontab任务

3.系统的crontab设置

执行系统的定时任务的方法:

  • 手工执行定时任务
  • 系统定时任务:
    • 第一种是把需要定时执行的脚本复制到/etc/cron.{daily,weekly,monthly}目录中的任意一个。
    • 第二种是修改 /etc/crontab配置文件

4. anacron配置及总结

anacron是用来保证在系统关机的时候错过的定时任务,可以在开机之后再执行。

  • anacron会使用一天,七天,一个月作为检测周期
  • 在系统的/var/spool/anacron/目录中存在cron.{daily,weekly,monthly}文件,用于记录上次执行cron的时间
  • 和当前时间做比较,如果两个时间的差值超过了anacron指定的时间差值,证明有cron任务被执行
  • 配置文件:
vim /etc/anacrontab

linux软件安装总结

一、软件包概念

  • 源码包(需要自己编译)
  • 二进制包(已经编译好:rpm包,系统默认包)
  • 脚本安装包:将在安装上述两种包的过程中手动输入的命令的过程写成脚本,双击执行即可,省去手动输入的麻烦。

二、rpm命令管理

1.包全名与包名

  • 包全名:操作的包是没有安装的软件包时,使用包全名,而且要注意路径
  • 包名:操作已经安装的软件包时,使用包名,搜索的是/var/lib/rpm/中的数据库

2.rpm命令

rpm包默认安装位置

/etc/   配置文件安装目录
/usr/bin/   可执行的命令安装目录
/usr/lib/   程序所使用的函数库保存位置
/usr/share/doc/ 基本的软件使用手册保存位置
/usr/share/man/ 帮助文件保存位置
  • 安装
rpm -ivh 包全名
选项:
-i install
-v 显示详细信息
-h 显示进度
--nodeps不检测依赖性
  • 升级与卸载
rpm -Uvh 包全名
选项:
-U(upgrade)升级
rpm -e 包名
选项:
-e(erase)卸载
--nodeps不检查依赖性
  • 查询
rpm -q 包名(查询包是否安装)
rpm -qa (查询所有已安装的包)
rpm -qi 包名(查询包信息)
rpm -ql 包名(查询包安装位置)
rpm -qR 包名 (查询软件包的依赖包)→ 会列出所有依赖
-p 查询未安装包的信息
rpm -qf 系统文件名(查询系统文件属于哪个包
查询软件包详细信息
rpm -qi 包名
选项:
-i 查询软件信息
-p 查询未安装包信息
查询包中文件安装位置
rpm -ql 包名
选项:
-l 列表
-p 查询未安装包信息
查询软件包的依赖性
rpm -qR 包名
选项:
-R 查询软件包的依赖性
-p 查询未安装包信息
  • RPM包校验
rpm -V 检查包,是否被动过
  • RPM包中文件提取
rpm2cpio 包全名 | cpio -idv .文件绝对路径 
前面的【.】代表当前路径,不能省略。
文件绝对路径和包里文件的绝对路径对应,也就是告诉了cpio要去包里提取哪个文件。
注:cpio只知道提取文件,并不知道要从什么地方提取文件,因此通常要使用【|】管道符或【<】输入重定向告诉cpio应该从什么设备去取出文件。

三、yum在线安装

1. yum源文件

  • yum的优点:将所有软件包放到官方服务器上,当进行yum在线安装时,可以自动解决依赖性问题。(rpm缺点:安装过程中,rpm包依赖性太强)
  • redhat的yum在线安装需要付费,centOS不需要。
  • 在【/etc/yum.repos.d/】目录中,默认有4个yum源文件,其中【CentOS-Base.repo】是基本yum源文件,如果能上网,那它是默认生效的,而其他的都是默认不生效的。
  • [base]:名字可以随便起。
  • name:名字也是随便起。
  • mirrorlist和baseurl一个是主站点,一个是辅助站点,这两个有一个就行。可以找一个163或其他yum源更换。
  • enabled:默认最后一个容器不生效,其他容器都生效。
  • gpgcheck:一般都要开启,开启后安装时会验证rpm包是否是官方的,以保证系统安全。
  • gpgkey:默认系统安装后,在目录【/etc/pki/rpm-gpg】下都会存在数字证书。注:前面的【file://】表示文件协议,后面的【/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6】是数字证书的位置。

2.光盘yum源搭建:

  • 1.挂载光盘
建立挂载点:mkdir /mnt/cdrom
挂载光盘:mount /dev/chrom /mnt/cdrom
  • 2、使网络yum源失效
进入yum源目录:cd /etc/yum.repos.d/
修改yum源文件后缀名,使其失效:
mv CentOS-Base.repo CentOS-Base.Repo.bak
  • 3、使光盘yam源生效:
vim CentOS-Media.repo

3.yum命令

  • 卸载:
yum -y remove 包名
选项:
-remove:卸载
-y:自动回答yes
(服务器使用最小化安装,用什么装什么,尽量不卸载)
  • Yum 软件组管理命令
yum grouplist
#列出所有可用的软件组列表
yum groupinstall 软件组名
#安装指定软件组,组名可以由grouplist查询出来
yum groupremove 软件组名
#卸载指定软件组

四、源码包安装

一般:

  • 源代码保存位置:/usr/local/src/
  • 软件安装位置:/usr/local/

1.源码包和rpm包的区别:

  • 1.rpm包安装位置不用指定,源码包安装位置必须指定。源码包没有卸载命令。卸载时直接删除文件夹即可。
  • 2.rpm包启动方式两种 service XXXX start(red hat 系列专属) 或 /etc/rc.d/init.d/xxx start 源码包不能用第一种。

2.源码包安装过程:

  • 1、由于源码都是c语言写的,所以要先安装c语言编译器:gcc
  • 2、从官方网站下载源码包 注:若已安装了二进制包,则源码包也是可以继续安装的,因为两者安装目录不一样。但是,并不建议这样做,因为端口会冲突。

3.编译

make编译
make clean 若报错,可使用该命令,删除编译缓存。
make install 编译安装

脚本安装

参考inmp

一键安装包,实际上还是安装的源码包和RPM包,只是把安装过程写成了脚本,便于安装:

  • 优点:简单,快捷、方便
  • 缺点:不能定义安装软件的版本, 不能定义需要的软件功能, 源码包的优势丧失了

其它命令

netstat -tlun
查找网络连接信息和系统开启的端口号
使用 -t 选项列出 TCP 协议的连接
使用 -l 选项列出正在监听的套接字
使用 -u 选项列出 UDP 协议的连接
使用 -n 选项禁用域名解析功能