2018-8-23 课堂笔记

现在进入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连接的时间要比客户端早一些。

猜你喜欢

转载自blog.csdn.net/a1779078902/article/details/82011266