一、w查看当前系统的负载,命令w执行后显示:
[root@www ~]# w
07:59:25 up 6:29, 2 users, load average: 4.65, 5.04, 4.81
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 01:30 6:28m 0.03s 0.03s -bash
root pts/0 win-bl291404v29. 01:31 0.00s 36.41s 0.09s w
4.65:1分钟内平均下来负载时多少,这一分钟之内有4.65个进程使用cpu
5.04:5分钟内平均下来负载时多少,这五分钟之内有5.04个进程使用cpu
4.81:15分钟内平均下来负载时多少,这十五分钟之内有4.81个进程使用cpu
目前市面上的服务器通常都是2颗4核cpu
查看服务器有几个cpu:cat /proc/cpuinfo
4.65/cpu核数<1是比较好的
二、top
top显示进程所占系统资源,如果负载是64,那哪个进程使用cpu最高,可以用top命令查看。zombie是僵尸进程,top命令后,按1可以查看每个cpu的使用率,可以按shift+>可以查看下面的内容,shift+M可以按内存使用率排序,退出top命令,按q。us:用户态使用率 sy:内核态使用率。这个命令用于动态监控进程所占系统资源,每隔3秒变一次。这个命令的特点是把占用系统资源(cpu,内存,磁盘IO等最高的进程放到最前面),top -bn1静态打印出
三、 vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 79460 30592 646248 0 0 2 6 11 16 0 0 100 0 0
procs:跟进程相关 memory:跟内存相关 swap:跟交换分区相关 io:跟磁盘相关
vmstat 1 10:每1秒钟显示一次,一共显示10次
各参数含义:r:每1秒钟有几个进程使用cpu,长期大于cpu的个数,cpu不够用
b:被阻塞的,数据写入磁盘,需要等待,等待IO进程数
buff:缓冲,即将写入磁盘
cache:缓存,从磁盘里读出来,读磁盘
si:每秒从交换区写入内存的大小
so:每秒从内存写到交换区的大小
bi:每秒读取的块数(读磁盘)
bo:每秒写入的块数(写磁盘)
VIRT:虚拟内存占有量
RES:物理内存
swpd:虚拟内存已使用的大小,如果>0,表示机器物理内存不足
swpd在增加,si so在变化,说明内存不够了,要加内存。b列数值不大,说明不是磁盘io导致的。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期超过50%的使用,那么我们就该考虑优化程序算法或其他措施。
四、sar
yum install -y sysstat
sar -n DEV 1 10 显示网卡流量
sar -n DEV -f /var/log/sa/sa24(查看某一天的网卡流量历史,使用-f选项)
rxpck/s:进来的包 rxbyt/s:进来的流量
txpck/s:发出去的包 txbyt/s:发出去的流量
为什么要看网卡流量:有的时候我们会遇到攻击,通常网卡流量会固定在一个范围,eth0的rxbyt/s这个值一旦很大,意味着被攻击了。
sar -q可以查看历史的系统负载
sar -q -t /var/log/sa/sa
sar -b 1 10可以查看磁盘的写和读
五、free
[root@www ~]# free
total used free shared buffers cached
Mem: 1004412 925696 78716 0 31232 646256
-/+ buffers/cache: 248208 756204
Swap: 0 0 0
从上列中可以看到当前系统内存大小为1004412,已经使用925696,剩余78716.其实真正剩余并不是78716,而是第二行的756204,真正使用的也是第二行的248208,这是因为系统初始化时,就已经分配出很大一部分内存给缓存,这部分缓存用来随时提供给程序使用,如果程序不要,那部分内存就空闲。所以,查看内存使用多少,剩余多少看第二行数据。
六、ps 查看系统进程
ps aux / ps -elf
PID :进程的id,这个id很有用,在linux中内核管理进程就得靠pid来识别和管理某一个程,比如我想终止某一个进程,则用 ‘kill 进程的pid’ 有时并不能杀掉,则需要加一个-9选项了 kill -9 进程pid
STAT :表示进程的状态,进程状态分为以下几种
D 不能中断的进程(通常为IO)
R 正在运行中的进程
S 已经中断的进程,系统中大部分进程都是这个状态
T 已经停止或者暂停的进程,如果我们正在运行一个命令,比如说 sleep 10 如果我们按一下ctrl -z 让他暂停,那么我们用ps查看就会显示T这个状态
X 已经死掉的进程(这个从来不会出现)
Z 僵尸进程,杀不掉,打不死的垃圾进程,占系统一小点资源,不过没有关系。如果太多,就有问题了。
< 高优先级进程
N 低优先级进程
L 在内存中被锁了内存分页
s 主进程
l 多线程进程
+ 在前台的进程
pstree 树形显示所有进程
netstat 查看网络状况
netstat -lnp 查看当前系统开启的端口以及socket
netstat -an 查看当前系统所有的连接
八、tcpdump
yum install tcpdump
tcpdump是抓包工具,默认抓外网eth0的包,如果抓内网,则是tcpdump -i eth1
tcpdump -i eth1 -so -nn tcp and host 192.168.137.5 and port 80 -c 100 -w 1.cap
-c 100:100个包 cat 1.cap,里面是乱码的,可以借助wireshark看 -so:抓所有的包
wireshark:yum install wireshark
tshark -i eth1 -nn
selinux:
临时关闭:setenforce 0
查看selinux状态:getenforce
永久关闭:vi /etc/selinux/config
iptables详解
netfilter是一种防火墙的名字,iptables是工具的名字,netfilter有表,表下面有链,链下面有规则,iptables -t可以指定表名,iptables -t filter -nvL(查看filter表下面有哪些规则,可以用-nvL),filter表默认有三个链,INPUT、OUTPUT、FORWARD。除了filter表外,还有iptables -t nat -nvL,nat表,nat表下面也有三个链,PREROUTING,OUTPUT,POSTROUTING。第三个表叫mangle表,iptables -t mangle -nvL。我们平时用的最多的就是filter表,filter 这个表主要用于过滤包的,我们的服务器网卡他无非就是进包和出包,可以针对进包和出包做一些规则做一些限制,filter表的INPUT和OUTPUT是我们用的最多的,那么filter表怎么设定规则呢?列如把eth0这个网卡进来的包,针对80端口的,针对某一个IP把他过滤掉不让他访问,
iptables -t filter -I INPUT -p tcp --dport 80 -s 12.12.12.12 -j REJECT
-A添加的规则是在后面,-I添加的规则是在前面
规则里的 pkts表示包的数量 bytes表示包有多少字节,越往上的规则就越先生效,iptables -Z 计数器清零
iptables -F 清除当前的规则,添加规则之后需要保持,service iptables save,这样重启后规则还在!iptables-save >/tmp /1.ipt 保存到指定文件;iptables-restore < /tmp/1.ipt
三个表的作用,filter 这个表主要用于过滤包的,是系统预设的表,内建三个链INPUT、OUTPUT以及FORWARD。INPUT作用于进入本机的包;OUTPUT作用于本机送出的包;FORWARD作用于那些跟本机无关的包。
nat 主要用处是网络地址转换、端口映射,也有三个链。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前改变其源地址。
mangle 主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time ToLive,生存周期)值以及为数据包设置Mark标记,以实现Qos (Quality of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。 五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
ptables规则相关:
查看规则 iptables -t nat -nvL
清除规则 iptables -t nat -F
增加/删除规则 iptables -A/-D INPUT -s 10.72.11.12 -p tcp --sport 1234 -d 10.72.137.159 --dport 80 -j DROP
插入规则 iptables -I INPUT -s 1.1.1.1 -j DROP/ACCEPT/REJECT
iptables -nvL --line-numbers 查看规则带有id号
iptables -D INPUT 1 根据规则的id号删除对应规则
iptables -P INPUT DROP 用来设定默认规则,默认是ACCEPT ,一旦设定为DROP后,只能使用 iptables -P ACCEPT 才能恢复成原始状态,而不能使用-F参数
policy ACCEPT 0 packets, 0 bytes这个是策略,相当于是个总开关,如果这里是ACCEPT默认所有的包都放行
实例:
针对filter表,预设策略INPUT链DROP,其他两个链ACCEPT,然后针对192.168.0.0/24开通22端口,对所有网段开放80端口,对所有网段开放21端口。 脚本如下:
#! /bin/bash
ipt="/sbin/iptables"
$ipt -F; $ipt -P INPUT DROP;
$ipt -P OUTPUT ACCEPT; $ipt -P FORWARD ACCEPT;
$ipt -A INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT
icmp的包有常见的应用,本机ping通外网,外网ping不通本机 iptables -I INPUT -p icmp --icmp-type 8 -j DROP
Linux系统日志
/etc/rsyslog.conf (http://www.lishiming.net/thread-7260-1-1.html)
/var/log/messages核心系统日志文件
每周归档一个日志 messages-20130901
/etc/logrotate.conf
messages由syslogd这个守护进程产生的,如果停掉这个服务则系统不会产生/var/log/messages
/var/log/wtmp 查看用户登录历史,运行 last可以查看
/var/log/btmp lastb 查看无效登录历史
/var/log/maillog跟邮件相关的日志
/var/log/secure和验证相关的
dmesg 查看一些实时更新
/var/log/dmesg系统在启动过程中,一些硬件相关的日志
exec与xargs
exec 和find同时使用
查找当前目录创建时间大于10天的文件并删除 :find . -mtime +10 -exec rm -rf {} \;
批量更改文件名: find ./* -exec mv {} {}_bak \;
xargs 用在管道符号后面
find . -mtime +10 |xargs rm -rf
ls -d ./* |xargs -n1 -i{} mv {} {}_bak
xargs 可以把多行变成一行 cat 1.txt|xargs
screen 工具介绍
有时候我们会运行一个比较长的命令,那么这个命令可能会运行几个小时或者是好几天,那么这个时候你不可能在电脑前一直开着这个终端,下班了也会关机,那这个时候可以把任务丢到后台去但是有一种情况就是丢到后台没有办法获得他的日志他的运行状况运行过程,那么怎么办?screen就可以避免这种情况
安装screen,yum install -y screen,安装好之后运行screen会进入screen终端
screen相当于一个虚拟终端,它不会因为网络中断而退出,每次登录都可以进入那个screen
使用方法:直接输入screen命令
screen -ls 查看已经开启的screen
Ctrl +a 再按d退出该screen会话,只是退出,并没有结束,任务还在后台继续运行。结束的话输入Ctrl +d 或者输入exit
退出后还想再次登录某个screen会话,使用sreen -r screenid 若只有一个screen 直接screen -r
screen -S aming ; 登录的话 screen -r aming
学会使用curl命令
curl是Linux系统命令行下用来简单测试web访问的工具,几个常用的选项你要掌握
curl -xip:port www.baidu.com # -x可以指定ip和端口,省略写hosts,方便实用
curl -Iv http://www.qq.com # -I 可以把访问的内容略掉,只显示状态码,-v可以显示详细过程
curl -u user:password http://123.com # -u可以指定用户名和密码
curl http://study.lishiming.net/index.html -O #可以下载
还可以使用 -o 自定义名字
curl -o index2.html http://study.lishiming.net/index.html
rsync同步讲解
rsync比scp好的地方是可以实现增量备份
1. rsync 命令格式
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]HOST:DEST把本地的数据推送到远程去
rsync [OPTION]... [USER@]HOST:SRC DEST把远程机器上的数据拉到本地来
rsync [OPTION]... [USER@]HOST::SRC DEST把远程机器上的数据拉到本地
rsync [OPTION]... SRC [USER@]HOST::DEST把本地的数据推送到远程去
rsync常用选项
-a 归档模式,表示以递归方式传输文件,并保持所有属性,等同于-rlptgoD, -a选项后面可以跟一个 --no-OPTION 这个表示关闭-rlptgoD中的某一个例如-a--no-l 等同于-rptgoD
-r 对子目录以递归模式处理,主要是针对目录来说的,如果单独传一个文件不需要加-r,但是传输的是目录必须加-r选项
-v 打印一些信息出来,比如速率,文件数量等
-l 保留软链结
-L 向对待常规文件一样处理软链接,如果是SRC中有软链接文件,则加上该选项后将会把软链接指向的目标文件拷贝到DST
-p 保持文件权限
-o 保持文件属主信息
-g 保持文件属组信息
-D 保持设备文件信息
-t 保持文件时间信息
--delete 删除那些DST中SRC没有的文件,A机器作为源,B机器作为目标,假如把A机器上的数据备份到B机器上,那么有一天A机器上的数据我们做了一些删除操作,B机器上还存在那些文件,那当我去同步的时候,加上--delete,那么B机器上的这些老数据也会跟着一同删除
--exclude=PATTERN 指定排除不需要传输的文件,等号后面跟文件名,可以是万用字符模式(如*.txt)
--progress,就是大P 在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等等
-u 加上这个选项后将会把DST中比SRC还新的文件排除掉,不会覆盖。
最常用的 -a -v --delete --exclude
rsync选项讲解
[root@localhost ~]# ls 111/234/456/(111/234/456是目录,234目录下还有个aminglinux文件)
12.txt
[root@localhost ~]# rsync -av 111/ /tmp/322/(/表示把111下面的所有文件或者目录都同步到/tmp/322/目录下,如果不加/,他是把111作为一个对象一个目录)
sending incremental file list
created directory /tmp/322
./
234/
234/aminglinux
234/456/
234/456/12.txt
sent 195 bytes received 61 bytes 512.00 bytes/sec
total size is 0 speedup is 0.00
[root@localhost ~]# ln -s /etc/inittab 111/12.txt
[root@localhost ~]# ls -l 111
总用量 4
lrwxrwxrwx. 1 root root 12 9月 4 21:44 12.txt -> /etc/inittab
drwxr-xr-x. 3 root root 4096 9月 4 21:33 234
[root@localhost ~]# rsync -av 111/ /tmp/322
sending incremental file list
./
12.txt -> /etc/inittab
sent 152 bytes received 20 bytes 344.00 bytes/sec
total size is 12 speedup is 0.07
[root@localhost ~]# ls -l /tmp/322/
总用量 4
lrwxrwxrwx. 1 root root 12 9月 4 21:44 12.txt -> /etc/inittab
drwxr-xr-x. 3 root root 4096 9月 4 21:33 234
所以啊原封不动的把我们软连接文件同步过来了
那我们换一种想法,假如说我们的目标目录是一个远程的机器,那远程的机器这个文件/etc/inittab正好不存在,那假如说我现在就要你的源文件怎么办?加个L
[root@localhost ~]# rsync -avL 111/ /tmp/322/
sending incremental file list
12.txt
sent 1060 bytes received 33 bytes 2186.00 bytes/sec
total size is 884 speedup is 0.81
[root@localhost ~]# ls -l /tmp/322
总用量 8
-rw-r--r--. 1 root root 884 9月 2 19:06 12.txt
drwxr-xr-x. 3 root root 4096 9月 4 21:33 234
其实这个12.txt就是/etc/inittab,可以用diff测试,diff这个命令是对比两个文件的差异的
[root@localhost ~]# diff /etc/inittab /tmp/322/12.txt(发现没有异同)
--delete讲解
[root@localhost ~]# rm -r 111/12.txt
rm:是否删除符号链接 "111/12.txt"?y
[root@localhost ~]# rsync -avL --delete 111/ /tmp/322
sending incremental file list
./
deleting 12.txt
sent 111 bytes received 17 bytes 256.00 bytes/sec
total size is 0 speedup is 0.00
-u讲解
[root@localhost ~]# vim /tmp/322/234/aminglinux(更改目标文件)
[root@localhost ~]# rsync -avLu 111/ /tmp/322
sending incremental file list
234/
sent 111 bytes received 17 bytes 256.00 bytes/sec
total size is 0 speedup is 0.00
目标文件aminglinux文件没有被覆盖
--exclude讲解
[root@localhost ~]# rm -rf /tmp/322/*
[root@localhost ~]# touch 111/23
[root@localhost ~]# rsync -avLu --exclude="23" 111/ /tmp/322/
sending incremental file list
./
234/
234/aminglinux
234/456/
234/456/12.txt
sent 195 bytes received 61 bytes 512.00 bytes/sec
total size is 0 speedup is 0.00
rsync同步之ssh隧道方式,ssh默认走的是22端口
A机器和B机器需安装yum install openssh-clients,B机器IP是192.168.137.2
[root@localhost ~]# rsync -avPz 111/ 192.168.137.2:/tmp/111/
如果把A机器的111删除了,可以利用rsync把远程的数据拉回来
[root@localhost ~]# rsync -avPz 192.168.137.2:/tmp/111/ ./111/
有时候我们也会发现对方端口并不是22端口,看对方ssh的端口
[root@localhost ~]# rsync -avPz -e “ssh -P 端口” 192.168.137.2:/tmp/111/ ./111/
现在我们把B机器的22端口封掉 iptables -I INPUT -p tcp --dport 22 -s 192.168.137.5 -j DROP
在A机器再次同步 rsync -avPz 192.168.137.2:/tmp/111/ ./111/,发现卡死了
用telnet可以探测B机器的22端口是否开启telnet 192.168.137.2 22,如果telnet没有安装,可以yum install telnet
rsync后台服务方式
服务端配置文件 /etc/rsyncd.conf ,内容如下:
#port=8730 #监听端口默认为873,也可以是别的端口
log file=/var/log/rsync.log #指定日志
pid file=/var/run/rsyncd.pid #指定pid
#address=192.168.0.10 #可以定义绑定的ip,就是监听的ip,哪些ip可以连接服务端,加了更加安全
以上部分为全局配置部分,以下为模块内的设置
[aming] #为模块名,自定义
aming模块和/tmp/rsync绑定的
我们连tmp模块,rsync自己就会去找/tmp/rsync路径了
path=/tmp/rsync # 指定该模块对应在哪个目录下
use chroot=true #同步数据的时候,肯定有个用户相当于有个用户登录到服务端,我登录用户的时候是否把它限定在这个目录下,是否限定在该目录下,默认为true,当有软连接时,需要改为fasle
max connections=4 # 指定最大可以连接的客户端数
read only=yes #是否为只读,登录到这台机器后,是否允许读,,推送的时候要写no
list=true #是否可以列出模块名
uid=root #以哪个用户的身份来传输
gid=root #以哪个组的身份来传输
auth users=aming #指定验证用户名,可以不设置
secrets file=/etc/rs.passwd #指定密码文件,如果设定验证用户,这一项必须设置
hosts allow=192.168.137.5 #设置可以允许访问的主机,可以是网段
密码文件/etc/rs.passwd的内容格式为:username:password
启动服务的命令是:rsync --daemon
默认去使用/etc/rsyncd.conf这个配置文件,也可以指定配置文件 rsync --daemon --config=/etc/rsyncd2.conf
可使用的选项有: rsync --daemon --help
几个测试点:port, use chroot, log file, secrets file, hosts allow, list
ps aux |grep rsync可以看到 rsync --daemon进程起来了
netstat -lnp可以看到8730端口
在服务端 mkdir /tmp/rsync和 mkdir /tmp/rsync123
touch /tmp/rsync/1.txt
echo "assdddfdkj" > /tmp/rsync/1.txt
vim /etc/rs.passwd(aming是用户名,123aaa是密码)
aming:123aaa
chmod 400 /etc/rs.passwd
现在去客户端:
[root@localhost ~]# rsync -avzP --port 8730 [email protected]::aming/1.txt ./
Password:
receiving incremental file list
1.txt
11 100% 10.74kB/s 0:00:00 (xfer#1, to-check=0/1)
sent 75 bytes received 149 bytes 49.78 bytes/sec
total size is 11 speedup is 0.05
Linux系统任务计划
/etc/crontab cron的主配置文件,可以定义PATH,格式如下
.---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
cron也是一个服务,所以需要先启动服务才能生效
service crond start(启动crond服务)
service crond status (查看crond状态)
crontab -e 定义任务,制定计划任务
crontab -l查看当前用户任务
crontab -r删除计划任务
crontab -u制定某个用户,不加-u选项则为当前用户
cat /usr/spool/cron/username这个文件就是我们计划任务的文件
系统服务管理
yum install -y ntsysv
安装后,执行ntsysv会弹出服务选择
chkconfig --list列出所有的服务
chkconfig --level 3 sendmail on 把sendmail服务级别3开启
chkconfig sendmail off所有级别都关闭
chkconfig sendmail on 2、3、4、5开启
chkconfig --del sendmail删除sendmail服务
chkconfig --add sendmail 增加sendmail服务
Linux网络相关
1、vi /etc/sysconfig/network-scripts/ifcfg-eth0
如果Linux上有多个网卡,而只想重启某一个网卡的话,可以使用这个命令:ifdown eth0;ifup eth0
如果我们远程登录服务器,当使用ifdown eth0这个命令的时候,很有可能后面的命令ifup eth0不会被运行,这样导致我们断网而无法连接服务器,所以尽量使用service network restart
2、给一个网卡设定多个IP
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-eth0\:1
编辑ifcfg-eth0:1这个文件,一定要注意DEVICE这里写eth0:1,重启网卡
3、查看网卡连接状态
mill-tool eth0
Link ok说明网卡为连接状态
如果显示no link说明网卡坏掉了或者没有连接网线
4、更改主机名
查看主机名hostname,hostname aming 这样修改只是保存在内存中,下次重启还会变成未改之前的主机名,所以需要去更改相关的配置文件/etc/sysconfig/network
5、设置DNS
只要把DNS地址写到一个配置文件即可
vi /etc/resolv.conf
namesever 192.168.137.1