概述
监控系统的状态
使用w命令查看当前系统负载
第1行从左至右显示的信息依次为:时间、系统运行时间、登录用户数、平均负载。
从第2行开始的所有行则是告诉我们:当前登录的用户名及其登录地址等。
最应该关注第1行中的load average:后面的3个数值。
上例中,/proc/cpuinfo这个文件记录了CPU的详细信息。目前市面上的服务器有很多是2颗多核CPU,在Linux看来,它就是2*n个CPU(这里的n为单颗物理CPU上有几核)。
假如n是4,则查看这个文件时会显示8段类似的信息,而最后一段信息的processor:后面会显示7。
所以查看当前系统有几个CPU,我们可以使用命令`grep-c‘processor'/proc/cpuinfo`。
然而查看有几颗物理CPU时,则需要查看关键字physical id。
用 vmstat 命令监控系统的状态
命令w查看的是系统整体上的负载,通过看那个数值可以知道当前系统有没有压力。
但它无法判断具体是哪里(CPU、内存、磁盘等)有压力,所以这就用到了vmstat。
vmstat命令打印的结果共分为6部分:procs、memory、swap、io、system和cpu。
请重点关注一下r、b、si、so、bi、bo这几列信息。
procs显示进程的相关信息。
r(run):表示运行或等待CPU时间片的进程数。大家不要误认为等待CPU时间片意味着这个进程没有运行,实际上某 一时刻1个CPU只能有一个进程占用,其他进程只能排着队等着,此时这些排队等待CPU资源的进程依然是运行状态。该数值如果长期大于服务器CPU的个数,则说明CPU资源不够用了。
b(block):表示等待资源的进程数,这个资源指的是/0、内存等。举个例子,当磁盘读写非常频繁时,写数据就会非常慢,此时CPU运算很快就结束了,但进程需要把计算的结果写人磁盘,这样进程的任务才算完成,那此时这个进程只能慢慢地等待磁盘了,这样这个进程就是这个b状态。该数值如果长时间大于1,则需要关注一下了。
memory显示内存的相关信息。
swpd:表示切换到交换分区中的内存数量,单位为KB。
free:表示当前空闲的内存数量,单位为KB。
buff:表示(即将写入磁盘的)缓冲大小,单位为KB。
cache:表示(从磁盘中读取的)缓存大小,单位为KB。
swap显示内存的交换情况。
si:表示由交换区写入内存的数据量,单位为KB。
so:表示由内存写入交换区的数据量,单位为KB。
io显示磁盘的使用情况。
bi:表示从块设备读取数据的量(读磁盘),单位为KB。
bo:表示从块设备写入数据的量(写磁盘),单位为KB。
system显示采集间隔内发生的中断次数。
in:表示在某一时间间隔内观测到的每秒设备的中断次数。
cs:表示每秒产生的上下文切换次数。
cpu显示CPU的使用状态。
us:显示用户下所花费CPU的时间百分比。
sy:显示系统花费CPU的时间百分比。
id:表示CPU处于空闲状态的时间百分比。
wa:表示I/0等待所占用CPU的时间百分比。
st:表示被偷走的CPU所占百分比(一般都为0,不用关注)。
以上所介绍的各个参数中,经常会关注r、b和wa这3列。
io部分的bi和bo也是要经常参考的对象,如果磁盘io压力很大,这两列的数值会比较高。
另外,当si和so两列的数值比较高并且不断变化时,说明内存不够了,内存中的数据频繁交换到交换分区中,这往往对系统性能影响极大。
用 top 命令显示进程所占的系统资源
上例中,top命令打印出了很多信息,包括系统负载(1oad average)、进程数(Tasks)、CPU使用情况、内存使用情况以及交换分区使用情况。
这些内容其实可以通过其他命令来查看,用top重点查看的还是下面的进程使用系统资源的详细状况,其中你需要关注%CPU、EM和COMMAND这几项所代表的意义。
RES这一项为进程所占的内存大小,而EM这一项为使用内存的百分比。
在top状态下,按Shift+m键可以按照内存使用大小排序。按数字1可以列出所有核CPU的使用状态,按q键可以退出top。
和top命令唯一的区别就是,它一次性输出所有信息而非动态显示。
用 sar 命令监控系统动态
查看网卡流量 sar -n DEV(要提前yum install -y sysstat)
查看历史负载 sar -q
用nload命令查看网卡流量
提前下载:yum install -y epel-release; yum install -y nload
最上面一行为网卡名字以及P地址,按向右箭头可以查看其他网卡的网络流量。
输出结果分为两部分,Incoming为进入网卡的流量,Outgoing为网卡出去的流量
关注的是Curr那行的数据,其单位也可以动态自动调整。
按q退出该界面。
用free 命令查看内存使用状况
total:内存总大小。
used:真正使用的实际内存大小。
free:剩余物理内存大小(没有被分配,纯剩余)。
shared:共享内存大小,不用关注它。
buff/cache:分配给buffer和cache的内存总共有多大。关于buffer和cache大家也许有一些疑惑,因为字面意思上两者很相近。一个很容易区分这两者的方法,buffer和cache都是一部分内存,内存的作用就是缓解CPU和IO(如,磁盘)的速度差距的,你可以这样理解:数据经过CPU计算,即将要写入磁盘,这时用的内存为buffer;CPU要计算时,需要把数据从磁盘中读出来,临时先放到内存中,这部分内存就是cache。
available:系统可使用内存有多大,它包含了free。Linux系统为了让应用跑得更快,会预先分配一部分内存(buffer/cache)给某些应用使用,虽然这部分内存并没有真正使用,但也已经分配出去了。然而,当另外一个服务要使用更多内存时,是可以把这部分预先分配的内存拿来用的。所以还没有被占用的这部分buffer和cache再加上free就是available。
另外free命令还可以加-m和-g选项(分别以MB或GB为单位)打印内存的使用状况,甚至也支持-h选项,这和CentOS6版本不同。
用 ps 命令查看系统进程
PID:表示进程的ID,这个ID很有用。在Linux中,内核管理进程就得靠pid来识别和管理某一个进程。比如我想终止某一个进程,则用命令“kill进程的pid”。有时这样并不能终止进程,需要加-9选项,即“kill-9进程的pid”,但这样有点暴力,严重的时候会丢数据,所以尽量还是别用。
STAT:进程的状态。进程状态分为以下几种(不要求记住,但要了解)。
D:不能中断的进程(通常为10)。
R(run):正在运行中的进程,其中包括了等待CPU时间片的进程。
s(sleep):已经中断的进程。通常情况下,系统的大部分进程都是这个状态。
T:已经停止或者暂停的进程。如果我们正在运行一个命令,比如说sleep10,我们按一下Ctrl+Z暂停进程时,用ps命令查看就会显示T这个状态。■W:(内核2.6xx以后不可用),没有足够的内存页分配。
X:已经死掉的进程(这个好像从来不会出现)。
Z:僵尸进程,即杀不掉、打不死的垃圾进程,占用系统一点资源,不过没有关系。如果占用太多(一般不会出现),就需要重视了。
<:高优先级进程。
N:低优先级进程。
L:在内存中被锁了内存分页。
s:主进程,后面阿铭讲到nginx或者php-fpm服务的时候,你就能更好地理解它了。
l:多线程进程。
+:在前台运行的进程,比如在当前终端执行ps aux就是前台进程。
例中的3不准确,需要减掉1。因为使用grep命令时,grep命令本身也算一个进程。
用 netstat 命令查看网络状况
提前安装:yum install -y net-tools
显示的结果中,上面那一部分是tcp/ip,下面一部分是监听的socket(unix开头的行)。
netstat命令用来打印网络连接状况、系统所开放端口、路由表等信息。
最常用的两种用法是netstat -lnp(打印当前系统启动哪些端口)和 netstat -an(打印网络连接状况)
抓包工具
tcpdump 工具
提前安装:yum install -y tcpdump
除了按快捷键Ctrl+C结束抓包,tcpdump还有其他的选项可以使用。
tcpdump-nn-i eno16777736 -c100
-c 的作用是指定抓包数量,抓够了自动退出,不用我们人为取消。列几个常用的示例:
tcpdump-nn-i eno16777736 port22//这样指定只抓22端口的包
tcpdump-nn-i eno16777736 tcp and not port22//指定抓tcp的包,但是不要22端口的
tcpdump-nn-i eno16777736 port 22 and port 53//只抓22和53端口的包
wireshark 工具
要提前安装 yum install -y wireshark
你在Windows下使用过wireshark这个抓包工具,它的功能非常强大。
在Linux平台我们同样也可以使用它,只不过是以命令行的形式。
wireshark的具体选项不再详细介绍,在日常工作中,tcpdump其实就已经够我们使用了。
Linux 网络相关
用ifconfig 命令查看网卡IP
要提前安装 yum install -y net-tools
如果Linux上有多个网卡,而你只想重启某一个网卡的话,可以使用如下命令:
#ifdown eno16777736; ifup eno16777736
ifdown即停用网卡,ifup即启动网卡。
需要大家注意的是,如果我们远程登录服务器,当使用命令ifdown eno16777736时,很有可能后面的命令ifup eno16777736不会运行。
这样会导致我们断网而无法连接服务器,所以请尽量使用命令systemctl restart network来重启网卡。
给一个网卡设定多个IP
之所以加反斜杠(),是因为要把:转义,不然在Linux命令行下面无法识别。
然后编辑ifcfg-eno16777736:1这个配置文件。
一定要注意DEVICE要写成eno16777736:1,如下所示:
查看网卡连接状态
这里显示link ok,就说明网卡为连接状态。
如果显示no link,说明网卡坏了或者没有连接网线。
还有一个命令也可以查看网卡的状态,如下:
如果网卡没有连接,最后面一行Link detected显示为no
更改主机名
设置DNS
在Linux下设置DNS非常简单,只要把DNS地址写到配置文件/etc/resolv.conf中即可。如下所示:
#cat /etc/resolv.conf
#Cenerated by NetworkManager
nameserver 119.29.29.29
如果只是临时修改DNSIP地址,就直接修改/etc/resolv.conf;如果是永久生效的话,还是要修改网卡的配置文件。
/etc/hosts的格式很简单,每一行为一条记录,分成两部分,第一部分是IP,
第二部分是域名。关于hosts文件,需要注意:
一个IP后面可以跟多个域名,可以是几十个甚至上百个;
每一行只能有一个IP,也就是说一个域名不能对应多个IP;
如果有多行中出现相同的域名(对应的IP不一样),会按最前面出现的记录来解析。
Linux 的防火墙
SELinux
SELinux是Linux系统特有的安全机制。因为这种机制的限制太多,配置也特别烦琐,所以几乎没有人真正应用它。安装完系统,我们一般都要把SELinux关闭,以免引起不必要的麻烦。临时关闭SELinux的方法为:
#setenforce 0
但这仅仅是临时的,要想永久关闭需要更改配置文件/etc/selinux/config,需要把SELINUX=enforcing
改成SELINUX=disabled,更改后的内容如下所示:
更改完该配置文件后,重启系统方可生效。可以使用getenforce命令获得当前SELinux的状态。
netfilter
在之前的CentOS版本(比如5和6)的防火墙为netfilter,CentOS7的防火墙为firewalld。
firewalld
要提前安装(yum install -y firewalld firewalld-config)
firewalld有两个基础概念,分别是zone和service,每一个zone里面有不同的iptables规则,默认一共有9个zone,而CentOS7默认的zone为public。获取系统所有的zone,命令如下所示:
如下命令可以查看系统默认的zone:
drop(丢弃):任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。
block(限制):任何接收的网络连接都被IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohibited信息所拒绝。
public(公共):在公共区域内使用,不能相信网络内的其他计算机不会对你的计算机造成危害,只能接收经过选取的连接。
external(外部):特别是为路由器启用了伪装功能的外部网。你不能信任来自网络的其他计算,不能相信它们不会对你的计算机造成危害,只能接收经过选择的连接。
dmz(非军事区):用于你的非军事区内的计算机,此区域内可公开访问,可以有限地进入你的内部网络,仅仅接收经过选择的连接。
work(工作):用于工作区。你可以基本相信网络内的其他计算机不会危害你的计算机。仅仅接收经过选择的连接。
home(家庭):用于家庭网络。你可以基本信任网络内的其他计算机不会危害你的计算机。仅仅接收经过选择的连接。
internal(内部):用于内部网络。你可以基本上信任网络内的其他计算机不会威胁你的计算机。仅仅接受经过选择的连接。
trusted(信任):可接受所有的网络连接。
#firewall-cmd–set-default-zone-work //设定默认的zone为work
success
#firewal1-cmd–get-zone-of-interface=eno16777736 //查看指定网卡所在的zone
Work
#firewal1-cmd–zone=public–add-interface=lo //给指定网卡设置zone
success
#firewall-cmd–zone=dmz–change-interface=lo //针对网卡更改zone
success
#firewall-cmd–zone=dmz–remove-interface=lo //针对网卡删除zones
uccess
#firewall-cmd–get-active-zones //查看系统所有网卡所在的zone
Work
interfaces:eno16777736
概念—service。其实,之所以有9种zone,是因为每一个zone里面都使用了不同的service,而service就是针对一个服务(端口)做的iptables规则。
列出当前系统所有的service
这些service都是由一个个配置文件定义的,配置文件的模板在/usr/lib/firewalld/services/目录下,真正生效的配置在/etc/firewalld/services目录下面(默认为空):
查看一个zone下面的service:
查看当前zone有哪些service
查看指定zone有哪些service
Linux 系统的任务计划
命令 crontab
Linux任务计划功能的操作都是通过crontab命令来完成的,其常用的选项有以下几个。
-u:表示指定某个用户,不加-u选项则为当前用户。
-e:表示制定计划任务。
-l:表示列出计划任务。
-r:表示删除计划任务。
创建第一个任务计划,如下所示:
从左到右依次为:分、时、日、月、周和命令行。
上例表示在6月5日(这一天必须是星期三)的10点01分执行命令:echo“ok">/root/cron.1og。
删除任务计划要使用crontab-r命令,这个删除选项最好还是少用,因为它会一下子把全部计划都删除掉。如果你想只删除一条计划,可以使用-e选项进入crontab进行编辑。-r选项用法如下所示:
#crontab-r
#crontab-1
no crontab for root
Linux 系统服务管理
也许你配置过Windows开机启动的服务,其中有些服务在日常的管理工作中用不到,我们就要把它停止,一来可以节省资源,二来可以减少安全隐患。在Linux上同样也有相关的工具来管理系统的服务。
chkconfig 服务管理工具
Linux系统所有的预设服务都可以通过查看 /etc/init.d/目录得到,如下所示:
我们可以使用命令 chkconfig --list 列出所有的服务及其每个级别的开启状态,如下所示:
#chkconfig–list
注意:该输出结果只显示SysV服务,并不包含原生systemd服务。SysV配置数据可能被原生systemd配置覆盖。如果您想列出systemd服务,请执行’systemctl list-unit-files’。
欲查看对特定 target 启用的服务请执行
‘systemctl list-dependencies [target]’。
更改某级别下的开启状态,如下图:
#chkconfig–level 3 network off
#chkconfig–list lgrep network
network0:关闭1:关闭2:启用3:关闭4:启用5:启用6:关闭
这里用 --level指定级别,后面是服务名,然后是off或者on。选项–1evel后面还可以指定多个级别,如下所示:
#chkconfig–leve1 345 network off
#chkconfig–list |grep network
network 0:关闭1:关闭2:启用3:关闭4:关闭5:关闭6:关闭
另外还可以省略级别,默认是针对级别2、3、4和5操作的,如下所示:
#chkconfig network on
#chkconfig–list |grep network
network0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭
chkconfig还有一个功能,就是可以把某个服务加入系统服务或者删除,即可以使用“chkconfig-add 服务名“或者“chkconfig–del服务名“这样的形式,并且可以在chkconfig–list的结果中
查找到。
#chkconfig --del network
#chkconfig --list lgrep network
#chkconfig --add network
#chkconfig --list grep network
network0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭
这个功能常用于把自定义的启动脚本加入到系统服务当中。
systemd 服务管理
CentOS7不使用SysV而改为systemd了,这是因为systemd支持多个服务并发启动,而SysV只能一个一个地启动,这样最终导致的结果是systemd方式启动会快很多。首先是列出系统所有的服务,如下所示:
服务对应的启动文件,如下图:
服务相关知识点,如下图:
#systemctl enable crond.service // 让某个服务开机启动(.service可以省略)
#systemctl disable crond.service // 不让开机启动
#systemctl status crond.service // 查看服务状态
#systemctl start crond.service // 启动某个服务
#systemctl stop crond.service // 停止某个服务
#systemctl restart crond.service // 重启某个服务
#systemctl is-enabled crond // 查看某个服务是否开机启动
target:多个unit组成的组。
device:硬件设备。
mount:文件系统挂载点。
automount:自动挂载点。
path:文件或路径。
scope:不是由systemd启动的外部进程。
slice:进程组。
snapshot:systemd快照。
socket:进程间通信的套接字。
swap:swap文件。
timer:定时器。
跟unit相关的命令,如下图:
#systemctl list-units // 列出正在运行(active)的unit
#systemctl list-units --all // 列出所有的unit(包括失败的、inactive的)
#systemctl list-units --all --state=inactive // 列出所有inactive的unit
#systemctl list-units --all --type=service // 列出所有状态的service
#systemctl list-units --type=service // 列出找态为active的service
#systemctl is-active crond.service // 查看某个unit是否active
概念一一target。target类似于CentOS6里面的启动级别,但target支持多个target同时启动。
target其实是多个unit的组合,系统启动说白了就是启动多个unit,为了管理方便,就使用target来管理这些unit。
查看当前系统的所有target:
查看一个 target 包含的所有 unit ,如下:
梳理一下service、unit以及target之间的联系:
一个service属于一种unit;
多个unit一起组成了一个target;
一个target里面包含了多个service,你可以查看文件/usr/lib/systemd/system/sshd.service里面[install]部分的内容,它就定义了该 service属于哪一个 target。
Linux下的数据备份工具 rsync
rsync不仅可以远程同步数据(类似于scp),而且可以本地同步数据(类似于cp),但不同于cp或scp的一点是,它不会覆盖以前的数据(如果数据已经存在),而是先判断已经存在的数据和新数据的差异,只有数据不同时才会把不相同的部分覆盖。
提前安装yum install-y rsync
上例将会把 /etc/paswd同步到/tmp/目录下,并改名为1.txt。如果是远程复制,数据备份就是这样的形式——IP:path,比如172.30.15.128:/root/。具体用法如下:
rsync的命令格式
rsync [OPTION]… SRC DEST
rsync [OPTIONj… SRC [USERQ]HOST:DEST
rsync [OPTION]… [USER@]HOST:SRC DEST
rsync [OPTION]… [USERQ]HOST::SRC DEST
rsync [OPTION]… SRC [USER@]HOST::DEST
前面
第一个例子为第一种格式,第二个例子为第二种格式。但不同的是,并没有加user@host,如果不加默认指的是root。
第三种格式是从远程目录同步数据到本地。
第四种和第五种格式使用了两个冒号,这种格式和其他格式的验证方式不同。
rsync常用选项
-a:这是归档模式,表示以递归方式传输文件,并保持所有属性,它等同于-rlptgoD。-a选项后面可以跟一个-no-0PTION,表示关闭-rlptgoD中的某一个,比如-a–no-1等同于-rptgoD。
-r:表示以递归模式处理子目录。它主要是针对目录来说的,如果单独传一个文件不需要加-r选项,但是传输目录时必须加。
-V:表示打印一些信息,比如文件列表、文件数量等。
-l:表示保留软连接。
-L:表示像对待常规文件一样处理软连接。如果是SRC中有软连接文件,则加上该选项后,将会把软连接指向的目标文件复制到DST。
-p:表示保持文件权限。
-o:表示保持文件属主信息。
-g:表示保持文件属组信息。
-D:表示保持设备文件信息。
-t:表示保持文件时间信息。
--delete:表示删除DST中SRC没有的文件。
--exclude=PATTERN:表示指定排除不需要传输的文件,等号后面跟文件名,可以是万用字符模式(如*.txt)。
--progress;表示在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等。
-u:表示把DST中比SRC还新的文件排除掉,不会覆盖。
-z:加上该选项,将会在传输过程中压缩
1.建立目录和文件
使用 -a 选项
这里有一个问题,就是本来想把testl目录直接复制成test2目录,可结果rsync却新建了test2目录,然后把testl放到test2当中。为了避免这样的情况发生,可以这样做:
这里加一个斜杠就好了,所以要养成加斜杠的习惯。前面已经讲了-a选项等同于 -rlptgoD,且-a还可以和–no-OPTIN一并使用。下面再来看看-l 选项的作用,如下所示:
上例中使用了-v选项,跳过了非普通文件123.txt。
使用 -L选项
Linux系统日志
/var/log/messages
日志文件为/var/log/messages,它是核心系统日志文件,包含了系统启动时的引导消息,以及系统运行时的其他状态消息。I/O错误、网络错误和其他系统错误都会记录到这个文件中。其他信息,比如某个人的身份切换为root,以及用户自定义安装的软件(Apache)的日志也会在这里列出。
dmesg
dmesg这个命令,它可以显示系统的启动信息。如果你的某个硬件有问题(比如网卡),用这个命令也是可以看到的:
安全日志
last命令用来查看登录Linux的历史信息,具体用法如下:
上例中,从左至右依次为账户名称、登录终端、登录客户端IP、登录日期及时长。
xargs 与 exec
xargs和exec可以实现相同的功能,exec主要是和find一起配合使用,而xargs比exec的用处更多。
xargs 应用
exec应用
使用find命令时,使用-exec选项,它可以达到和xargs同样的效果。比如查找当前目录创建时间大于10天的文件并删除,如下所示:
#find . -mtime +10 -exec rm -rf {} ;
这个命令中也是用{ }替代前面find出来的文件。后面的作为;的转义符,否则shell会把分号作为该行命令的结尾。
-exec同样可以实现上面批量更改文件名的需求,如下所示:
screen 工具
使用 nohup
首先写一个sleep.sh脚本,然后把它放到后台执行,如下所示:
screen 工具的使用
简单来说,screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的SSH连接窗口一样。
下面阿铭介绍screen的一个简单应用。
首先打开一个会话,直接输入screen命令,然后回车进入screen会话窗口。如果你的系统中没有screen命令,请用命令yum install -y screen安装。它的使用也很简单,直接输入如下命令,就可以进入一个虚拟终端:
最后
以上就是着急紫菜为你收集整理的Linux系统管理的全部内容,希望文章能够帮你解决Linux系统管理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复