程序:程序员编写功能代码是静态的,是在永久存储设备上存放的
进程:程序运行时,在内存中的状态是动态的
linux 运维常用命令
静态查看进程ps
ps -ef #显示正在运行的命令程序
UID:userid
PID:进程ID号
PPID:父进程
C:cpu使用百分比
STIME:程序的启动时间
TTY:登录的终端
TIME:程序使用掉 CPU 的时间
CMD:运行的命令
ps -aux #显示终端上地所有进程,包括其他用户地进程,显示没有控制终端地进程
%CPU:占用CPU百分比
%MEM:占用内存的百分比
VSZ:虚拟内存集
RSS:常驻内存集
TTY:登录的终端
STAT:进程状态
START:启动时间
TIME :程序使用掉 CPU 的时间
COMMAND:运行的命令
虚拟内存集>常驻内存集
动态查看进程top
top #动态查看进程,按M根据内存排序,按P根据CPU排序
load average #平均负载,第一分钟,第五分钟,第十五分钟的平均负载
hi hard interuppt #硬中断
si soft interuppt 软中断
top -d 1 #每秒刷新一次
进程间的通信:共享内存,消息队列,信号
信号方式通信:管理进程(杀进程)
杀进程kill -9
ps aux | grep a.txt
kill -9 7731 #找到进程号7731,关闭该进程
杀进程 命令:
pkill 进程号 :停止一个进程
pkill -kill -t /dev/pts/o 将用户从终端中提出,其实是将用户的/bin/bash 的进程杀死
xkill 图形化杀进程
nice值:进程运行的优先级
端口查看
lsof #系统打开的文件
lsof -i :22 #查看打开22端口所有进程
lsof -i :80 #查看打开80端口所有进程,如果没有则没有返回
netstat -nutlp #查看当前开启的所以端口
netstat -anlp
-a (all)显示所有选项,默认不显示LISTEN相关
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
netstat -anlp| grep 22 #查看22端口占用情况
远程访问端口telnet
telnet 127.0.0.1 22 #查看本机22端口是否开启
telnet 192.18.1.10 80 #远程查看192.18.1.10的80端口是否开启
查看系统发行版本,以及版本号,架构
查看发行版本
cat /etc/os-release #比较全面
查看服务器架构
echo $HOSTTYPE
查看CPU核数
pkill -kill -t pts/2
强制使某个用户下线
pkill -kill -t pts/2
mount挂载硬盘
mkdir /mnt/cdrom #创建挂载目录
mount -t auto /dev/cdrom /mnt/cdrom #挂载
cd /mnt/cdrom #看是否挂载成功
fuser -k 目录 #解除挂载时,设备忙,使用这个命令解除挂载
查看服务器日志
cat /var/log/messages | grep error #查看报错
日志级别:1:emage 2:crit 3:alert 4:waring 5:notice 6:info 7:debug
更改Linux系统时间
timedatectl #查看当前时区时间
timedatectl set-timezone Asia/Shanghai #指定时区为亚洲/上海
端口扫描
扫描指定主机所有udp、tcp协议端口
nmap -sUT 192.168.0.106
vim ecspubIP.txt #创建文件,第一列是主机名,第二列是公网IP
vim scan.sh
#!/bin/bash
echo "###############################################################"
echo "hostname": $1
nmap -sUT $2
echo "###############################################################"
awk '{print "sh scan.sh "$1,$2}' ecspubIP.txt | bash >allport.txt
#批量执行端口扫描
cat allport.txt |grep -v done | grep -v show | grep -v up | grep -v Starting >>allport1.txt
#对扫描的文本进行处理,只要主机名,IP地址和端口
查看服务器公网出口地址
curl inet-ip.info
tldr 类似man手册
tldr命令相比于linux中提供的man命令更加简单好用,能够将使用命令行的门槛大大降低,如下图所示。
tldr安装
curl -o /usr/bin/tldr https://raw.githubusercontent.com/raylee/tldr/master/tldr && chmod +x /usr/bin/tldr
或者
yum install -y tldr
执行tldr 报错解决:
tldr 命令查询的 github raw 网址已经被 GFW 墙掉了。请使用全局代理或 proxychains 前缀,或添加 https_proxy 环境变量。
Error fetching from tldr: <urlopen error [Errno 111] Connection refused>
解析 raw.githubusercontent.com 对应地址,添加到/etc/hosts
vim /etc/hosts
185.199.110.133 raw.githubusercontent.com
使用tldr 加对应命令
tldr tar
处理 您在 /var/spool/mail/root 中有新邮件
Linux 每次执行命令后会提示您在 /var/spool/mail/root 中有新邮件,很烦
修改配置文件解决
echo "unset MAILCHECK">> /etc/profile
source /etc/profile
压测工具Ab(ApacheBench)
Ab(ApacheBench) 测试工具是 Apache 提供的一款测试工具,具有简单易上手的特点,在测试 Web 服务时非常实用。ab 一般都是在Linux上用。
Ubuntu:apt-cache install apache2-util
Centos:yum -y install httpd-tools
对应用服务进行压力测试,模拟不同并发用户数下的服务的响应情况:
1、10 个并发用户/10 万请求量(总)
2、100 个并发用户/10 万请求量(总)
3、1000 个并发用户/10 万请求量(总)
ab -c 10 -n 100000 http://192.168.40.120:30002/
ab -c 100 -n 100000 http://192.168.40.120:30002/
ab -c 1000 -n 100000 http://192.168.40.120:30002/
ab -c 1000 -n 1000000 -t 60 http://192.168.40.120:30002/
参数的含义:
-n:总请求次数(最小默认为 1);
-c:并发次数(最小默认为 1 且不能大于总请求次数,例如:10 个请求,10 个并发,实际就是 1 人请求 1 次);
-t:持续时间(秒为单位)
-p:post 参数文档路径(-p 和 -T 参数要配合使用);
-T:header 头内容类型(此处切记是大写英文字母 T);
- Requests per second:吞吐率,指某个并发用户数下单位时间内处理的请求数;
- Time per request:上面的是用户平均请求等待时间,指处理完成所有请求数所花费的时间 /(总请求数 / 并发用户数);
- Time per request:下面的是服务器平均请求处理时间,指处理完成所有请求数所花费的时间 / 总请求数;
- Percentage of the requests served within a certain time:每秒请求时间分布情况,指在整个请求中,每个请求的时间长度的分布情况
grafana查看到的流量
日志轮转logrotate分割管理服务器日志
安装
yum install -y logrotate
默认 logrotate 安装在 etc 目录下,其中
- /etc/logrotate.conf 主配置文件。
- /etc/logrotate.d 目录下可以存放很多具体的日志滚动切割规则配置文件,我们想要自动拆分日志的配置都可以单独的放在这里,方便后续的维护和修改。
配置日志分割文件
要分割 nginx 的 access.log 文件,具体操作如下:
#在 /etc/logrotate.d/ 目录下新建一个叫做 access 的配置文件
cd /etc/logrotate.d
vim access
# 然后编辑 access 文件:
/usr/local/nginx/logs/access.log{
weekly
missingok
rotate 8
create
copytruncate
noolddir
dateext
compress
delaycompress
notifempty
sharedscripts
}
配置项 说明
daily每天滚动一次
weekly指定滚动周期为每周
monthly指定滚动周期为每月
notifempty如果文件为空,则不滚动
missingok如果文件不存在,则不滚动
rotate 7保留最近7个日志文件
compress压缩日志文件
delaycompress延迟压缩,延迟到下一次日志分割的时候。注意这个要结合compress 一起使用
create 640 root root新建日志文件的属主及权限,如果 nginx 不是root用户运行的要特别注意
sharedscripts共享脚本,即日志滚动完成后再运行脚本,否则每滚动一个日志文件都要运行一次脚本
postrotate日志滚动完成后运行的脚本,有些业务日志可以不需要这个脚本
copytruncate用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。
nocopytruncate备份日志文件不过不截断
nocreate不建立新的日志文件
errors address滚动时的错误信息发送到指定的 Email 地址
ifempty即使日志文件为空文件也做滚动
mail address把滚动的日志文件发送到指定的 Email 地址
nomail滚动时不发送日志文件
olddir /log滚动后的日志文件放入指定的目录,这里是/log,必须和当前日志文件在同一个文件系统。
noolddir滚动后的日志文件和当前日志文件放在同一个目录下
sharedscripts共享脚本,即日志滚动完成后再运行脚本,否则每滚动一个日志文件都要运行一次脚本
prerotate在滚动之前需要执行的指令,例如修改文件的属性等动作,必须独立成行
postrotate在滚动之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务;必须独立成行
dateext使用当期日期作为命名格式
dateformat .%s配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合
dateext使用,只支持%Y/%m/%d/%s四个参数
size log-size当日志文件到达指定的大小时才滚动,以下为合法格式:
size = 5或size 5 (>= 5 个字节就滚动) size = 100k或size 100k size = 100M或size 100M
为了验证配置文件是否能正常工作,我们可以使用下面的命令:
logrotate -d /etc/logrotate.d/nginx
# 如果输下面内容,并没有报错信息,说明配置文件有效。
reading config file /etc/logrotate.d/nginx
Allocating hash table for state file, size: 15360 B
Handling 1 logs
rotating pattern: /var/log/nginx/*.log after 1 days (7 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/*.log /access.log
log does not need rotating (log has been already rotated)
considering log /var/log/nginx/*.log /error.log
强制执行
logrotate -f /etc/logrotate.d/