现在进入linux日常管理的部分,估计第一阶段可能进入尾声了!
1 使用w查看系统负载
w命令;分别代表系统时间;启动时间;登录的用户;load average代表:1,5,15分钟内系统的负载是多少(和cpu有关)单位时间内使用cpu的活动进程有多少个(平均值)。
1.1 cat /proc/cpuinfo查看cpu核数;processor值为0代表单核cpu。还可以用lscpu查看cpu信息
1.2① 查看物理CPU的个数
[root@knightlai ~]# cat /proc/cpuinfo |grep "physical id"
physical id : 0
② 查看逻辑CPU的个数
[root@knightlai ~]# cat /proc/cpuinfo |grep "processor"|wc -l
1
③ 查看CPU是几核
[root@knightlai ~]# cat /proc/cpuinfo |grep "cores"
cpu cores : 1
2.vmstat命令
[root@knightlai ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 742308 2076 117952 0 0 59 7 65 142 0 0 99 1 0
r列表示有多少进程在run(运行)的状态;
b代表cpu以外的资源被其他进程占用;
swpd当内存不够时数值会发生变化;
si代表有多少kb的数据从swp进入到内存中;
bi代表从磁盘中出来到内存中去,bo代表写入的数据量数值大小代表磁盘数据的
读写频率;
us表示用户级别的一些资源占用的cpu百分比;
us +sy +id =100;
wa代表等待cpu的百分比。
3.top命令
top命令查看进程使用资源情况(动态显示)
top - 03:27:53 up 29 min, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 91 total, 1 running, 90 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 6.2 sy, 0.0 ni, 93.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 997956 total, 741936 free, 135700 used, 120320 buff/cache
KiB Swap: 3905532 total, 3905532 free, 0 used. 715096 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 125320 3788 2572 S 0.0 0.4 0:01.04 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.08 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/u256:0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
主要关注us的值(代表cpu使用率)
RES代表物理内存的大小,单位是k字节。
默认按cpu占用大小排序,但是按M可以按内存占用大小查看排序。
按P切换回cpu占用排序;
按1可以显示所有cpu的使用值
4.sar命令
sar -n DEV查看网卡流量
[root@knightlai ~]# sar -n DEV
Linux 3.10.0-862.el7.x86_64 (knightlai) 08/23/2018 _x86_64_ (1 CPU)
02:58:14 AM LINUX RESTART
03:00:02 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
03:10:01 AM lo 0.09 0.09 0.01 0.01 0.00 0.00 0.00
03:10:01 AM ens33 3.29 0.13 0.29 0.01 0.00 0.00 0.00
03:20:01 AM lo 0.03 0.03 0.00 0.00 0.00 0.00 0.00
03:20:01 AM ens33 3.09 0.04 0.27 0.00 0.00 0.00 0.00
Average: lo 0.06 0.06 0.01 0.01 0.00 0.00 0.00
Average: ens33 3.19 0.08 0.28 0.00 0.00 0.00 0.00
rx代表接收到的数据包,tx是发送出去的数据包。
rxpck数值几千的值大概是正常的,上万的话可能被攻击了
5. 监控io性能
iotop命令查看磁盘实时读写速率 iotop可以实时查看磁盘使用情况
Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd --switched-root --system --deserialize 22
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
5 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H]
6 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/u256:0]
6..free命令
free命令查看内存使用情况
[root@knightlai ~]# free
total used free shared buff/cache available
Mem: 997956 137860 731016 7792 129080 708348
Swap: 3905532 0 3905532
第一列是内存的总大小,单位是kb(可以使用free -h); 第二列是使用了多少; 第三列是剩余内存数量; buff/cache(缓冲和缓存)是预分配内存的量; avaliable是预分配和没有完的内存.
磁盘-->内存(cache缓存)-->cpu;cpu-->内存(buff缓冲)-->磁盘
7.PS命令
ps命令用来查看系统进程
[root@knightlai ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 125320 3788 ? Ss 20:42 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 20:42 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 20:42 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 20:42 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 20:42 0:00 [kworker/u256:0]
root 7 0.0 0.0 0 0 ? S 20:42 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 20:42 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R 20:42 0:00 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< 20:42 0:00 [lru-add-drain]
root 11 0.0 0.0 0 0 ? S 20:42 0:00 [watchdog/0]
root 13 0.0 0.0 0 0 ? S 20:42 0:00 [kdevtmpfs]
D是不能中断的进程;R run状态下的进程;S sleep状态下的进程;T 暂停的进程;Z 僵尸进程;< 高优先级的进程;
N 低优先级进程;s 主进程;l 多线程进程;+ 前台进程。
8.查看网络状态
netstat -an查看 tcp/ip状态
[root@knightlai ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 52 192.168.139.168:22 192.168.139.146:53001 ESTABLISHED
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
udp 0 0 127.0.0.1:323 0.0.0.0:*
udp6 0 0 ::1:323 :::*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 13312 /run/systemd/shutdownd
unix 2 [ ACC ] STREAM LISTENING 20284 public/pickup
unix 2 [ ACC ] STREAM LISTENING 20288 public/cleanup
unix 2 [ ACC ] STREAM LISTENING 20291 public/qmgr
unix 2 [ ACC ] STREAM LISTENING 20329 public/showq
9.Linux下抓包
9.1 tcpdump命令抓包
tcpdump -nn 命令表示用数字显示ip地址的端口号;用来看数据的流向
[root@localhost ~]# tcpdump -nn
tcpdump: packet printing is not supported for link type NFLOG: use -w
(因为网卡名比较特殊,默认时eth0,所以无法使用,需要指定)
tcpdump -nn port * 指定端口
[root@knightlai ~]# tcpdump -nn -i ens33 port 22
21:35:57.179743 IP 192.168.139.168.22 > 192.168.139.146.53001: Flags [P.], seq 1696392:1696700, ack 261, win 294, length 308
21:35:57.179829 IP 192.168.139.168.22 > 192.168.139.146.53001: Flags [P.], seq 1696392:1696700, ack 261, win 294, length 308
21:35:57.179840 IP 192.168.139.168.22 > 192.168.139.146.53001: Flags [P.], seq 1696700:1697120, ack 261, win 294, length 420
21:35:57.179930 IP 192.168.139.168.22 > 192.168.139.146.53001: Flags [P.], seq 1696700:1697120, ack 261, win 294, length 420
21:35:57.179933 IP 192.168.139.146.53001 > 192.168.139.168.22: Flags [.], ack 1697120, win 910, length 0
10.Linux网络相关
10.1 ifup可以启动网卡,ifdown可以关闭网卡远程操作不可恢复。
修改主机名
[root@knightlai ~]# hostnamectl set-hostname knightlai
[root@knightlai ~]# hostname
knightlai
DNS配置文件
[root@knightlai ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.139.1
扩展内容:buffer和cache区别
1、Buffer(缓冲区)是系统两端处理速度平衡(从长时间尺度上看)时使用的。它的引入是为了减小短期内突发I/O的影响,起到流量整形的作用。比如生产者——消费者问题,他们产生和消耗资源的速度大体接近,加一个buffer可以抵消掉资源刚产生/消耗时的突然变化。
2、Cache(缓存)则是系统两端处理速度不匹配时的一种折衷策略。因为CPU和memory之间的速度差异越来越大,所以人们充分利用数据的局部性(locality)特征,通过使用存储系统分级(memory hierarchy)的策略来减小这种差异带来的影响。
Cache和Buffer的相同点:都是2个层面之间的中间层,都是内存。
Cache和Buffer的不同点:Cache解决的是时间问题,Buffer解决的是空间问题。
进程和线程区别
进程是指在系统中正在运行的一个应用程序;程序一旦运行就是进程,或者更专业化来说:进程是指程序执行时的一个实例。
线程是进程的一个实体。
进程——资源分配的最小单位,线程——程序执行的最小单位。
线程进程的区别体现在几个方面:
第一:因为进程拥有独立的堆栈空间和数据段,所以每当启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这对于多进程来说十分“奢侈”,系统开销比较大,而线程不一样,线程拥有独立的堆栈空间,但是共享数据段,它们彼此之间使用相同的地址空间,共享大部分数据,比进程更节俭,开销比较小,切换速度也比进程快,效率高,但是正由于进程之间独立的特点,使得进程安全性比较高,也因为进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。一个线程死掉就等于整个进程死掉。
第二:体现在通信机制上面,正因为进程之间互不干扰,相互独立,进程的通信机制相对很复杂,譬如管道,信号,消息队列,共享内存,套接字等通信机制,而线程由于共享数据段所以通信机制很方便。。
3.属于同一个进程的所有线程共享该进程的所有资源,包括文件描述符。而不同过的进程相互独立。
4.线程又称为轻量级进程,进程有进程控制块,线程有线程控制块;
5.线程必定也只能属于一个进程,而进程可以拥有多个线程而且至少拥有一个线程;
第四:体现在程序结构上,举一个简明易懂的列子:当我们使用进程的时候,我们不自主的使用if else嵌套来判断pid,使得程序结构繁琐,但是当我们使用线程的时候,基本上可以甩掉它,当然程序内部执行功能单元需要使用的时候还是要使用,所以线程对程序结构的改善有很大帮助。
tcp三次握手四次挥手
最开始的时候客户端和服务器都是处于CLOSED状态。主动打开连接的为客户端,被动
打开连接的是服务器。
1. TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;
2. TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。
3. TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。
4. TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。
5. 当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。
TCP释放连接的四次挥手
1. 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
2. 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接收。这个状态还要持续一段时间,也就
是整个CLOSE-WAIT状态持续的时间。
3. 客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
4. 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
5. 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIMEWAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
6. 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。