linux 基础(二)

目录

一、定时任务

二、磁盘管理

1、RAID存储

2、磁盘添加

3、创建RAID阵列(这部分没有实验,请自己动手)

三、进程

1、查看进程

2、关闭进程

四、网络基础

1、网络层次模型(OSI7层模型)

2、TCP/IP模型(4层模型)

3、TCP三次握手与四次挥手

4、网络相关命令


一、定时任务

1、定义定时任务

定时任务配置方式

方法一:修改系统的配置文件

/etc/crontab

方法二:用户的定时任务
/var/spool/cron/root # root 定时任务的配置文件
/var/spool/cron/test # test 用户定时任务的配置文件 普通用户很少用!!
使用命令 : crontab -e 编辑用户的配置文件,有语法检测功能
查看定时任务:crontab -l
2、排查定时任务问题
定时任务日志:/var/log/cron
系统邮件,比较详细:/var/spool/mail/root
3、定时任务案例
定时任务语法格式

复制代码
# .---------------- 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

第一颗星:分钟 0-59

第二颗星:小时 0-23

第三颗星:日 1-31

第四颗星:月 1-12

第五颗星:周 0-6 星期天可以用0或者7表示

* 表示每的意思

*/n 表示间隔n分钟 */5 每隔5分钟

  • 表示区间范围 * 1-8 * * * 表示凌晨1点到8点的每分钟执行

,表示间隔 * 1-8,14,17 * * * 表示凌晨1点到8点,下午的2点和下午的5点,每分钟执行

凌晨12点:0 0 * * *

用户语法格式:crontab -e ===== vim /var/spool/cron/root
* * * * * 可执行命令

系统定时任务

案例1、每天的上午8点30分执行

复制代码
[root@linux:~]# crontab -l
# m h  dom mon dow   command
30 08 * * * echo 'hello word'

案例2、每分钟把自己的名字追加到 test.txt

复制代码
[root@linux:~]# crontab -l
# m h  dom mon dow   command
* * * * *  echo xiaoming > test.txt

案例3:每隔五分钟执行一次定时任务,进行时间同步

复制代码
*/5 * * * * ntpdate ntp1.aliyun.com

在定时任务中不识别 % 需要加\,或者 % 在脚本中没问题的

二、磁盘管理

1、RAID存储

独立磁盘冗余阵列(RAID)是一种存储技术,通过将两个或多个硬盘驱动器(HDD)或固态硬盘(SSD)合并成一个协调的存储单元或阵列,从而创建数据丢失的故障安全机制。
RAID级别

RAID 0:条带话(数据分块)但没有冗余,提供较高的读写性能
RAID 1:镜像,数据完全复制到另外一个驱动器,提供容错能力
RAID 5:条带化加分布式奇偶校验,提供数据冗余和读取性能
RAID 10:RAID1+0,将RAID1镜像组合成RAID0条带化,提供较高的容错能力和读写性能
RAID 0
RAID 0使用数据条带化(striping)的方式将数据分散存储在多个磁盘驱动器上,而不进行冗余备份。数据被分成固定大小的块,并依次存储在每个磁盘上。最少需要一个硬盘

适用场景

  1. 视频编辑和处理:在视频编辑中,需要快速读取和写入大量数据。RAID 0可以通过并行读写操作提高数据传输速度,加快视频编辑和处理的速度。
  2. 大型 数据库 应用:对于需要频繁访问和查询数据库的应用程序,RAID 0可以提供更快的数据访问速度,加快数据库操作的响应时间。
  1. 实时流媒体:对于需要实时传输和处理大量数据的流媒体应用,RAID 0可以提供足够的带宽和吞吐量,确保流媒体内容的平滑播放。
    优点

1、高性能:通过数据条带化和并行读写操作,RAID 0可以提供更快的数据传输速度和更高的系统性能
2、成本效益:相对与其他RAID级别,RAID 0 不需要额外的磁盘用于冗余备份,因此成本上更具竞争力
缺点:
1、缺乏冗余:由于RAID 0不提供数据冗余,任何一个驱动器发生故障,所有数据都可能丢失。
2、可靠性降低:由于没有冗余备份,RAID 0的可靠性相对较低
RAID 1
RAID 1使用数据镜像(mirroring)的方式将数据完全复制到两个或多个磁盘驱动器上。当写入数据时,数据同时写入所有驱动器。这样,每个驱动器都具有相同的数据副本,从而实现数据的冗余备份。如果其中一个驱动器发生故障,系统可以继续从剩余的驱动器中读取数据,确保数据的可用性和完整性。

适用场景
1、关键数据存储:对于关键数据的存储,如企业的财务数据,RAID 1可以提供数据冗余备份,以防止数据丢失
2、数据库服务器:对于需要高可用性和容错性的数据库服务器,RAID 1可以确保数据的持久性和可用性,即使一个驱动器发生故障,也可以从其他驱动器中读取数据
3、文件服务器:对于共享文件的服务器,RAID 1可以提供冗余备份,确保文件的可靠性和高可用性
优点
1、数据冗余备份:RAID 1通过数据镜像将数据完全复制到多个驱动器上,提供冗余备份,保护数据免受驱动器故障的影响
2、高可用性:由于数据的冗余备份,即使一个驱动器发生故障,系统仍然可以从其他驱动器中读取数据,保证数据的可用性和连续性
3、读取性能提升:RAID 1 可以通过并行读取数据的方式提升读取性能,从而加快数据访问速度
缺点
1、成本增加:由于需要额外的磁盘用于数据冗余备份,RAID1的成本相对较高。需要考虑额外的硬件成本
2、写入性能略低:由于需要同时写入多个驱动器,相对于单个驱动器的写入性能,RAID 1的写入性能可能略低
RAID 5
RAID 5使用数据条带化(striping)的方式将数据分散存储在多个磁盘驱动器上,并通过分布式奇偶校验实现数据的冗余备份。数据和奇偶校验信息被组织成数据块,其中奇偶校验信息被 分布式存储在不同的驱动器上。当写入数据时,奇偶校验信息也会被更新。如果其中一个驱动器发生故障,系统可以通过重新计算奇偶校验信息来恢复丢失的数据。这种方式可以同时提供性能增强和数据冗余。

适用场景
1、文件服务器:对于文件服务器,RAID 5可以提供高性能的数据访问和数据冗余备份,确保文件的安全性和可用性
2、数据库服务器:对于需要高性能和数据冗余的数据库服务器,RAID5可以提供快速的数据读取和写入,同时保护数据免受驱动器故障的影响
3、小型企业环境:对于小型企业,RAID 5提供了经济实惠的解决方案,同事提供了性能和数据冗余的好处
优点
1、性能增强:通过数据条带化和并行读写操作,RAID 5可以提供较高的数据传输速度和系统性能
2、数据冗余备份:通过分布式奇偶校验,RAID5可以提供数据的冗余备份,保护数据免受驱动器故障的影响。
3、成本效益:对于其他RAID级别,RAID 5只需要额外一个驱动器用于奇偶校验信息,从而在成本上更具有竞争力
缺点
1、写入性能受限:由于写入数据时需要重新计算奇偶校验信息,相对于读取操作,RAID 5的写入性能较低
2、驱动器故障期间的数据完整性:如果一个驱动器发生故障,系统在恢复数据时需要进行计算 ,这可能导致数据访问速度较慢,并且在此期间可能会有数据完整性的风险
RAID 10
RAID 10使用条带化(striping)的方式将数据分散存储在多个磁盘驱动器上,并通过镜像(mirroring)实现数据的冗余备份。数据被分成固定大小的块,并依次存储在不同的驱动器上,类似于RAID 0。然而,每个数据块都会被完全复制到另一个驱动器上,实现数据的冗余备份,类似于RAID 1。这样,RAID 10在提供性能增强的同时,也提供了数据的冗余保护。

适用场景
1、数据库服务器:对于需要高可用性和性能的数据库服务器,RAID 10可以提供快速的数据读取和写入,同事保护数据免受驱动器故障的影响
2、虚拟化环境:在虚拟化环境中需要高性能和数据冗余来支持多个虚拟机的运行。RAID10 可以满足这些要求,提供性能增强和数据保护
3、关键业务应用:对于关键业务应用,如金融交易兄或在线电子商务平台,RAID 10可以提供高可用性和快速的数据访问,确保业务连续性和稳定性
优点
1、高性能:通过数据条带化和并行读写操作,RAID10可以提供较高的数据传输速度和系统性能
2、数据冗余备份:通过数据镜像将数据完全复制到另外一个驱动器上,RAID10提供了数据的冗余备份,保护数据免受驱动器故障的影响
3、较高的可靠性:由于RAID10采用镜像的方式进行数据冗余备份,即使一个驱动器发生故障,仍然可以从其他驱动器中读取数据,确保数据的可用性和连续性。
4、快速的故障恢复:在RAID 10中,如果一个驱动器发生故障,系统可以直接从镜像驱动器中恢复数据,而无需进行复杂的计算,从而加快故障恢复的速度
缺点
1、较高的成本:相对于其他RAID级别,RAID 10 需要更多的驱动器用于数据镜像,从而增加了硬件成本
2、低效的空间利用:由于RAID10的数据镜像特性,有效的存储容量只等于所有驱动器的一半。
总结

|---------|-------|---------|--------|------|------|------|
| | 最小磁盘数 | 容错能力 | 磁盘空间开销 | 读取速度 | 写入速度 | 硬件成本 |
| RAID 0 | 2 | 无 | 0% | 高 | 高 | 低 |
| RAID 1 | 2 | 单个磁盘面故障 | 50% | 高 | 低 | 中 |
| RAID 5 | 3 | 单个磁盘故障 | 1/N | 中 | 低 | 中 |
| RAID 10 | 4 | 多个磁盘故障 | 50% | 高 | 中 | 高 |

2、磁盘添加

第一步:插入一块磁盘
第二步:重启系统生效
注意 : 虚拟机需要重启
物理机不需要重启,支持热插拔
云服务器扩容,支持在线扩容
第三步:重启后检查是否可以看到硬盘
fdisk -l

复制代码
[root@localhost ~]# fdisk -l
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

[root@localhost dev]# ll sd*
brw-rw----. 1 root disk 8,  0 Jan 11 05:35 sda
brw-rw----. 1 root disk 8,  1 Jan 11 05:35 sda1
brw-rw----. 1 root disk 8,  2 Jan 11 05:35 sda2
brw-rw----. 1 root disk 8, 16 Jan 11 05:35 sdb
[root@localhost dev]# pwd
/dev

第四步开始分区
对大于 2T 的磁盘使用 parted 分区 GPT 格式 128 个主分区
对小于 2T 的磁盘使用 fdisk 分区 MBR 格式 4 个主分区

复制代码
# 1)、进入分区页面
[root@localhost ~]# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xfe6e99b2.

Command (m for help):m
Help:

  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition                    # 删除分区
   F   list free unpartitioned space
   l   list known partition types
   n   add a new partition                    # 创建新的分区
   p   print the partition table              # 输出分区表
   t   change a partition type
   v   verify the partition table
   i   print information about a partition

  Misc
   m   print this menu                        # 打印帮助信息 显示菜单
   u   change display/entry units
   x   extra functionality (experts only)

  Script
   I   load disk layout from sfdisk script file
   O   dump disk layout to sfdisk script file

  Save & Exit
   w   write table to disk and exit           # 保存并退出
   q   quit without saving changes            # 退出不保存

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table

# 添加新的分区
Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)    # 主分区
   e   extended (container for logical partitions) # 扩展分区的表示方式
Select (default p):                            # 默认回车是主分区

Using default response p.
Partition number (1-4, default 1):            # 默认分区编号
First sector (2048-41943039, default 2048):    # 开始的分区 默认回车
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): +1G   # 结束大小手动配置

Created a new partition 1 of type 'Linux' and of size 1 GiB.

Command (m for help): p      #输出分区
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7d92b8e2

Device     Boot Start     End Sectors Size Id Type
/dev/sdb1        2048 2099199 2097152   1G 83 Linux

Command (m for help): d    # 删除分区
Selected partition 1
Partition 1 has been deleted.

Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7d92b8e2

Command (m for help): w   # 保存并写入到磁盘
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

#查看分区信息
[root@localhost ~]# fdisk -l
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7d92b8e2

Device     Boot Start     End Sectors Size Id Type
/dev/sdb1        2048 4196351 4194304   2G 83 Linux

#2)、格式化分区
[root@localhost ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
#3)、挂载使用
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/sdb1 /data
[root@localhost ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             1.9G     0  1.9G   0% /dev
tmpfs                1.9G     0  1.9G   0% /dev/shm
tmpfs                1.9G  9.0M  1.9G   1% /run
tmpfs                1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/cl-root   17G  2.0G   16G  12% /
/dev/sda1            976M  139M  771M  16% /boot
tmpfs                376M     0  376M   0% /run/user/0
/dev/sdb1            2.0G   47M  2.0G   3% /data
# 4)写入开机自动挂载
[root@localhost ~]# tail -1 /etc/fstab
/dev/sdb1               /data                   xfs     defaults        0 0

mount 挂载磁盘

mount 挂载的磁盘 挂载的目录

umount 取消挂载

umount 挂载的目录

复制代码
[root@localhost ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             1.9G     0  1.9G   0% /dev
tmpfs                1.9G     0  1.9G   0% /dev/shm
tmpfs                1.9G  9.0M  1.9G   1% /run
tmpfs                1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/cl-root   17G  2.0G   16G  12% /
/dev/sdb1            2.0G   47M  2.0G   3% /data
/dev/sda1            976M  139M  771M  16% /boot
tmpfs                376M     0  376M   0% /run/user/0
[root@localhost ~]# umount /data
[root@localhost ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             1.9G     0  1.9G   0% /dev
tmpfs                1.9G     0  1.9G   0% /dev/shm
tmpfs                1.9G  9.0M  1.9G   1% /run
tmpfs                1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/cl-root   17G  2.0G   16G  12% /
/dev/sda1            976M  139M  771M  16% /boot
tmpfs                376M     0  376M   0% /run/user/0

fdisk -l 查看磁盘信息

复制代码
[root@localhost ~]# fdisk -l
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x9ec38dcd

Device     Boot   Start      End  Sectors Size Id Type
/dev/sda1  *       2048  2099199  2097152   1G 83 Linux
/dev/sda2       2099200 41943039 39843840  19G 8e Linux LVM


Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7d92b8e2

Device     Boot Start     End Sectors Size Id Type
/dev/sdb1        2048 4196351 4194304   2G 83 Linux


Disk /dev/mapper/cl-root: 17 GiB, 18249416704 bytes, 35643392 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/cl-swap: 2 GiB, 2147483648 bytes, 4194304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

swap: 用磁盘划分的分区来充当内存使用,在内存不够用时,临时充当内存使用,目的就是解决 oom 内存溢出
swap 可以在安装操作系统进行分区的时候划分
free -h 查看内存信息

复制代码
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          3.7Gi       261Mi       3.1Gi       8.0Mi       339Mi       3.2Gi
Swap:         2.0Gi          0B       2.0Gi

生成一个2G的文件
dd if=/dev/zero of=/tmp/2g bs=1M count=2000

复制代码
[root@localhost ~]# dd if=/dev/zero of=/tmp/2g bs=1M count=2000
2000+0 records in
2000+0 records out
2097152000 bytes (2.1 GB, 2.0 GiB) copied, 5.68625 s, 369 MB/s

[root@localhost ~]# ls /tmp/2g
/tmp/2g
[root@localhost ~]#

格式化为swap
mkswap /tmp/2g

复制代码
[root@localhost ~]# mkswap /tmp/2g
mkswap: /tmp/2g: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 2 GiB (2097147904 bytes)
no label, UUID=100b4418-d3f9-4995-816f-534831588097

第三步 : 激活 swap 空间 ( 挂载到源 swap 基础之上 )

swapon /tmp/2g

root@localhost \~\]# swapon /tmp/2g swapon: /tmp/2g: insecure permissions 0644, 0600 suggested. 报错修改/tm/2g权限为0600

复制代码
[root@localhost ~]# swapon /tmp/2g
swapon: /tmp/2g: insecure permissions 0644, 0600 suggested.
swapon: /tmp/2g: swapon failed: Device or resource busy
[root@localhost ~]#
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          3.7Gi       265Mi       1.1Gi       8.0Mi       2.3Gi       3.2Gi
Swap:         4.0Gi          0B       4.0Gi

查看是否成功

复制代码
[root@localhost ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       2097148 0       -2
/tmp/2g                                 file            2047996 0       -3
[root@localhost ~]#

卸载 swap 分区 :

复制代码
[root@localhost ~]# swapoff /tmp/2g
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          3.7Gi       264Mi       1.1Gi       8.0Mi       2.3Gi       3.2Gi
Swap:         2.0Gi          0B       2.0Gi

lsof 命令查找文件被哪个进程所调用

复制代码
默认没有此命令: yum -y install lsof
[root@db01 ~]# lsof |grep 1.log
tail 4734 root 3r REG 8,16 10485760000

3、创建RAID阵列(这部分没有实验,请自己动手)

复制代码
# 创建 RAID 0
mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/sdb /dev/sdc
# 创建 RAID 1
mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
# 创建 RAID 5
mdadm --create --verbose /dev/md5 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd
# 创建 RAID 10
mdadm --create --verbose /dev/md10 --level=10 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde

创建完成后,可以使用以下命令格式化 RAID 设备:

复制代码
mkfs.ext4 /dev/md0

查看 RAID 状态

复制代码
# 查看 RAID 阵列的详细信息
mdadm --detail /dev/md0
# 查看所有 RAID 阵列的状态
cat /proc/mdstat

管理 RAID 阵列

复制代码
# 模拟磁盘故障
mdadm --manage /dev/md0 --fail /dev/sdb
# 移除故障磁盘
mdadm --manage /dev/md0 --remove /dev/sdb
# 添加新磁盘到阵列
mdadm --manage /dev/md0 --add /dev/sde

停止和启动 RAID

复制代码
# 停止 RAID 阵列
mdadm --stop /dev/md0
# 重新装配 RAID 阵列
mdadm --assemble /dev/md0 /dev/sdb /dev/sdc

配置自动加载

为了在系统重启后自动加载 RAID 阵列,可以将配置信息写入 /etc/mdadm/mdadm.conf 文件:

复制代码
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
update-initramfs -u

三、进程

1、查看进程

使用命令ps查看当前进程的状态

ps --auxf 常用组合方式查看进程、 PID 、占用 cpu 百分比,占用内存百分比,状态、执行的命令等
-a:显示所有终端机下执行的进程
-u:以用户为主的格式来显示进程状态
-x:显示所有进程,不易终端机来区分
-f:用ASCII字符显示树状结构,表示进程间的相互关系

复制代码
[root@localhost ~]# ps -auxf
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          2  0.0  0.0      0     0 ?        S    18:33   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        I<   18:33   0:00  \_ [rcu_gp]
root          4  0.0  0.0      0     0 ?        I<   18:33   0:00  \_ [rcu_par_g
root          6  0.0  0.0      0     0 ?        I<   18:33   0:00  \_ [kworker/0
root          8  0.0  0.0      0     0 ?        I<   18:33   0:00  \_ [mm_percpu
root          9  0.0  0.0      0     0 ?        S    18:33   0:00  \_ [ksoftirqd
root         10  0.0  0.0      0     0 ?        I    18:33   0:00  \_ [rcu_sched
root         11  0.0  0.0      0     0 ?        S    18:33   0:00  \_ [migration
root         12  0.0  0.0      0     0 ?        S    18:33   0:00  \_ [watchdog/

USER:该进程属于哪个使用者账号

PID:该进程的进程号

%CPU:该进程使用的CPU百分比

%MEM:该进程所占用的内存百分比

VSZ:该进程使用的虚拟内存

RSS:该进程占用的固定内存量

TTY:该进程是哪个终端上面运行的,与终端无关则显示?
tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT:该进程目前的状态
START:该进程被触发启动的时间
TIME:该进程实际使用的CPU运行时间
COMMAND:运行该进程的命令

top 命令动态查看当前进程状态

Tasks: 162 total:当前进程的总数
1 running:正在运行的进程数
160 sleeping:睡眠的进程数
0 stopped:停止的进程数
0 zombie:僵尸进程数
%Cpu(s): 0.0 us系统用户进程使用CPU百分比
0.1 sy: 内核进程占用CPU百分比,
0.0 ni:改变过优先级进程占用CPU百分比
99.8 id:空闲CPU百分比
0.0 wa:CPU等待IO完成的时间
0.2 hi:硬中断,占的CPU百分比
0.0 si:软中断,占的CPU百分比
0.0 st: 虚拟机占用物理 CPU 的时间
PR列: 优先级 显示 nice 值, PR 默认是 20 ,越小,优先级越高。修改 nice 可以同
时修改 PR -20 映射到 0 , +19 映射到 39

2、关闭进程

kill -l 列出当前系统所支持的信号

复制代码
[root@localhost ~]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
[root@localhost ~]#

常用的三个信号

SIGHUP 重新加载配置文件 1

SIGKILL 强制杀死进程 9

SIGTERM 终止进程,默认kill使用该信号 15
后台进程
& #把进程放入后台运行
jobs 显示在后台运行的程序

复制代码
[root@localhost ~]# sleep 3000 &
[1] 1905
[root@localhost ~]# jobs
[1]+  Running                 sleep 3000 &

#让作业1在后台运行

复制代码
[root@localhost ~]# bg  %1
-bash: bg: job 1 already in background

#将作业 1 掉回到前台运行

复制代码
[root@localhost ~]# jobs
[1]+  Running                 sleep 3000 &
[root@localhost ~]# fg %1
sleep 3000

终止后台PID为1的进程

复制代码
[root@localhost ~]# jobs
[1]+  Running                 sleep 3000 &
[root@localhost ~]# kill %1
[root@localhost ~]# jobs
[1]+  Terminated              sleep 3000

nohup 命令

复制代码
nohup sleep 600 &

nice 制定程序的优先级,

语法格式:nice -n 优先级数字 进程名称

四、网络基础

1、网络层次模型(OSI7层模型)

应用层

只要就是供应用程序可以接入网络接口,并根据程序的不同对应不同的接口协议

表示层

处理数据的表示、安全和压缩,负责数据格式转换、加密解密等。

会话层

管理用户间的会话,负责建立、维护和终止会话。

传输层

负责网络中端到端的连接( TCP 、 UDP )。

网络层

网络层的主要作用就是路由和寻址,主要接触到的是 IP 协议,即 IP 地址。

数据链路层

建立逻辑连接,进行硬件地址寻址和差错校验,主要协议有ARP。

物理层

负责建立、维护和断开物理连接,处理通信信道上的原始比特流传输

数据包封装与解封装

在通信过程中,数据从源主机的应用层开始,逐层向下传递,每层添加相应的控制信息(报头),直至物理层,然后通过物理媒介传输到目的主机。目的主机从物理层开始,逐层向上传递,每层去除相应的控制信息,最终将数据传递到应用层。
封装过程:由上至下进行封装
应用层、表示层、会话层 PDU 数据
传输层:分段 TCP 协议
网络层:打包 TCP 协议 +IP 地址
数据链路层 : 成帧 TCP 协议 +IP 地址 +MAC 地址
物理层:位 数据成为比特

拆包过程:由下至上进行拆包
物理层:位 比特
数据链路层:查看 MAC 地址
网络层:查看 IP 地址
传输层:查看 TCP 协议
前三层:数据内容

2、TCP/IP模型(4层模型)

OSI7层模型与TCP/IP模型对应关系

TCP/IP 模型层对应协议

协议 端口 描述
FTP 21 明文协议, 文件传输协议,基于 TCP
TFTP 69 简单文件传输协议,基于UDP
SSH 22 安全外壳协议,远程连接, 加密
Telnet 23 明文协议, 远程连接
SNMP 161/162 简单网络管理协议,基于 UDP
SMTP 25 简单邮件传输协议,基于TCP
HTTP 80 超文本传输协议
HTTPS 443 超文本传输安全协议
DHCP 67/68/546 动态主机设置协议 ,C(67),S(68),546(V6)

3、TCP三次握手与四次挥手

ACK :表示确认控制字段,确认数据是否接收到
SYN :表示请求建立连接字段,和主机建立连接时使用
FIN :表示请求断开连接字段,和主机断开连接时使用
PSH: 表示有 DATA 数据传输, PSH 为 1 表示的是有真正的 TCP 数据包内容被传递
RST: 表示连接重置。一般是在 FIN 之后才会出现为 1 的情况,表示的是连接重置。
seq 序列号:将大的数据进行拆分后标记序列信息,便于接收方将拆分后的数据信息进行组装,在原有序列号基础上 +1 进行回复,告知发送方下次再给我发送的数据是什么

TCP三次握手

第一次握手:client端向server端发起连接发送SYN=1报文和初始序列号seq=x

第二次握手:server端收到client端确认信息SYN =1,并且向client发送一个SYN=1的报文,发送确认号ack=x+1,序列号seq=y

第三次握手:client端收到server端确认报文后,再次向server端发出确认号ack=y+1,序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED已建立连接状态 触发三次握手

TCP四次握手

第一次挥手:客户端发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态

第二次挥手:服务器端接收到连接释放报文后,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT 关闭等待状态

第三次挥手:客户端接收到服务器端的确认请求后,客户端就会进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

第四次挥手:客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命),当客户端撤销相应的TCB后,客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成

TCP11种状态(啥意思就不写了,太多了,我也记不住)

4、网络相关命令

ip add 查看网卡相关信息

复制代码
[root@localhost ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:2d:5c:0c brd ff:ff:ff:ff:ff:ff
    inet 192.168.40.8/24 brd 192.168.40.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::54a:548f:240a:aad8/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

route -n # 查看网关路由信息

复制代码
[root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.40.2    0.0.0.0         UG    100    0        0 ens33
192.168.40.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33

tcpdump 抓包

tcpdump 是一个用于截取网络分组,并输出分组内容的工具。凭借强大的功能和灵活的截取策略,使其成为类 UNIX 系统下用于网络分析和
问题排查的首选工具
tcpdump 支持针对网络层、协议、主机、网络或端口的过滤,并提供 and 、 or 、 not 等逻辑语句来帮助你去掉无用的信息
-i #监听哪一个网卡
-n #不把 ip 解析成主机名
-nn #不把端口解析成应用层协议
-c #指定抓包的数量
-S #不把随机序列和确认序列解析成绝对值
-w #将流量保存到文件中 , 文件中的信息是无法直接查看的
-r #读取文件中的内容
-v #输出一个稍微详细的信息,例如在ip 包中可以包括 ttl 和服务类型的信息。
-vv #输出详细的报文信息。

默认启动

复制代码
[root@localhost ~]# tcpdump -vv

过滤主机

复制代码
# 抓取所有经过ens33,目的或源地址是192.168.40.1的网络数据
[root@localhost ~]# tcpdump -i ens33 host 192.168.40.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
05:48:49.591921 IP localhost.localdomain.ssh > 192.168.40.1.dvr-esm: Flags [P.], seq 2795414585:2795414793, ack 1863926489, win 1259, length 208
05:48:49.646487 IP 192.168.40.1.dvr-esm > localhost.localdomain.ssh: Flags [.], ack 208, win 4102, length 0
05:48:50.005595 IP localhost.localdomain.ssh > 192.168.40.1.dvr-esm: Flags [P.], seq 208:528, ack 1, win 1259, length 320
05:48:50.006236 IP localhost.localdomain.ssh > 192.168.40.1.dvr-esm: Flags [P.], seq 528:704, ack 1, win 1259, length 176
05:48:50.006571 IP 192.168.40.1.dvr-esm > localhost.localdomain.ssh: Flags [.], ack 704, win 4100, length 0

# 指定源地址为192.168.40.1
[root@localhost ~]# tcpdump -i ens33 src host 192.168.40.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
05:49:56.527597 IP 192.168.40.1.dvr-esm > localhost.localdomain.ssh: Flags [.], ack 2795504745, win 4104, length 0
05:49:57.086283 IP 192.168.40.1.dvr-esm > localhost.localdomain.ssh: Flags [.], ack 177, win 4103, length 0
05:49:57.128748 IP 192.168.40.1.dvr-esm > localhost.localdomain.ssh: Flags [.], ack 337, win 4102, length 0
05:49:57.173716 IP 192.168.40.1.dvr-esm > localhost.localdomain.ssh: Flags [.], ack 497, win 4102, length 0
05:49:57.217388 IP 192.168.40.1.dvr-esm > localhost.localdomain.ssh: Flags [.], ack 657, win 4101, length 0
05:49:57.260430 IP 192.168.40.1.dvr-esm > localhost.localdomain.ssh: Flags [.], ack 817, win 4101, length 0
05:49:57.283281 IP 192.168.40.1.dvr-esm > localhost.localdomain.ssh: Flags [P.], seq 0:64, ack 977, win 4106, length 64

#指定目的地址为 192.168.40.1
[root@localhost ~]# tcpdump -i ens33 dst host 192.168.40.1 -c 4
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
05:51:10.244552 IP localhost.localdomain.ssh > 192.168.40.1.dvr-esm: Flags [P.], seq 2795601513:2795601721, ack 1863932153, win 1419, length 208
05:51:20.735214 IP localhost.localdomain.ssh > 192.168.40.1.dvr-esm: Flags [P.], seq 208:416, ack 1, win 1419, length 208
05:51:20.735339 IP localhost.localdomain.ssh > 192.168.40.1.dvr-esm: Flags [P.], seq 416:592, ack 1, win 1419, length 176
05:51:20.735428 IP localhost.localdomain.ssh > 192.168.40.1.dvr-esm: Flags [P.], seq 592:768, ack 1, win 1419, length 176

过滤端口

tcpdump -i ens33 port 80 #抓取所有经过ens33,目的或源端口是80的网络数据
tcpdump -i ens33 src port 80 #指定源端口
tcpdump -i ens33 dst port 80 #指定目的端口

协议过滤

tcpdump -i ens33 arp
tcpdump -i ens33 ip
tcpdump -i ens33 tcp
tcpdump -i ens33 udp
tcpdump -i ens33 icmp

抓 tcp 某端口的数据包

tcpdump -i eth0 tcp port 21 -nn

常用表达式

非 : ! or "not" ( 去掉双引号 )
且 : && or "and"
或 : || or "or"

抓取所有经过 eth1 ,目的地址是 192.168.1.254 或 192.168.1.200 端口是 80 的 TCP 数

tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'

抓取所有经过 eth1 ,目标 MAC 地址是 00:01:02:03:04:05 的 ICMP 数据

tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'

ping 主要用来检测网络的联通情况和分析网络速度

常用选项
-t #持续 ping ,不中断。不加该选项只 ping4 个包。
-c #ping的包数,默认是 4 个。
-W1 #多长时间ping一次。延时 1 秒返回请求
-f #极速 ping 。

复制代码
[root@localhost ~]# ping baidu.com -c 4
PING baidu.com (124.237.177.164) 56(84) bytes of data.
64 bytes from 124.237.177.164 (124.237.177.164): icmp_seq=1 ttl=128 time=52.4 ms
64 bytes from 124.237.177.164 (124.237.177.164): icmp_seq=2 ttl=128 time=61.9 ms
64 bytes from 124.237.177.164 (124.237.177.164): icmp_seq=3 ttl=128 time=50.7 ms
64 bytes from 124.237.177.164 (124.237.177.164): icmp_seq=4 ttl=128 time=42.3 ms

--- baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 35ms
rtt min/avg/max/mdev = 42.300/51.830/61.914/6.973 ms

nc 一个简单、可靠的网络工具

常用选项

-l #用于指定nc处于监听模式

-u #指定nc使用udp协议,默认为TCP

-v #输出交互或出错信息

-w #超时秒数

-z #表示zero,表示扫描时不发送任何数据

nc用法1,网络连通性测试和端口扫描

nc可以作为server端启动一个tcp的监听

关闭192.168.40.8的防火墙,在机器192.168.40.7上启动一个端口监听9999,

复制代码
#在server端启动一个TCP监听
[root@localhost ~]# nc -l 9999

使用nmap在机器192..168.40.7上扫描机器192.168.40.8上的端口9999

复制代码
[root@linux:~]# nmap 192.168.40.8 -p9999
Starting Nmap 7.94SVN ( https://nmap.org ) at 2026-01-12 03:12 UTC
Nmap scan report for 192.168.40.8
Host is up (0.00045s latency).

PORT     STATE SERVICE
9999/tcp open  abyss
MAC Address: 00:0C:29:2D:5C:0C (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.53 seconds

使用nc 作为客户端工具进行端口探测

-v可视化,-z扫描时不发送数据,-w超时几秒,后面跟数字

复制代码
[root@linux:~]# nc -vz -w 2 192.168.40.8 9999
Connection to 192.168.40.8 9999 port [tcp/*] succeeded!
[root@linux:~]#nc -vzw 2 192.168.40.8 9999

使用nc扫描连续端口

复制代码
[root@linux:~]# nc -vzw 2 192.168.40.8 9998-9999
Connection to 192.168.40.8 9998 port [tcp/*] succeeded!
Connection to 192.168.40.8 9999 port [tcp/*] succeeded!
[root@linux:~]#

nc作为server端启动一个udp的监听

复制代码
[root@localhost ~]# nc -ul 9999


[root@localhost ~]# netstat -antup | grep 9999
udp        0      0 0.0.0.0:9999            0.0.0.0:*                           1993/nc
udp6       0      0 :::9999                 :::*                                1993/nc

用nc扫描UDP端口

u表示udp端口,v表示可视化输出,z表示扫描时不发送数据

复制代码
[root@linux:~]# nc -vuz 192.168.40.8 9999
Connection to 192.168.40.8 9999 port [udp/*] succeeded!
[root@linux:~]#

nc扫描大量udp端口

复制代码
[root@linux:~]# nc -vuz 192.168.40.8 9998-9999
Connection to 192.168.40.8 9998 port [udp/*] succeeded!
Connection to 192.168.40.8 9999 port [udp/*] succeeded!
[root@linux:~]#

使用nc 传输文件和目录

192,168.40.7向192.168.40.8发送一个文件,receiver先侦听端口,sender向receiver所在机器的该端口发送数据。

nc -l port >file

nc -l 9999 > test.txt

把端口9999接收到的数据都写到test.txt文件里

复制代码
[root@localhost ~]# nc -l 9999 > file.txt

把test.txt文件从192.168.40.7传输到192.168.40.8上

复制代码
[root@linux:~]# nc 192.168.40.8 9999 < test.txt


[root@localhost ~]# ll
total 12
-rw-------. 1 root root 1230 Jan  6 23:17 anaconda-ks.cfg
-rw-r--r--. 1 root root    7 Jan 12 22:41 file.txt
-rw-r--r--. 1 root root    7 Jan 12 22:39 test.txt
[root@localhost ~]# cat file.txt
123456
[root@localhost ~]#

先启动发送文件

发送

复制代码
[root@localhost ~]# nc -l 9999 < file.mv

接收

复制代码
[root@linux:~]# nc 192.168.40.8 9999 > test.mv

使用nc测试网速

把来自一台机器的/dev/zero 发送给另一台机器的/dev/null

就是把一台机器的无限个0,传输给另一个机器的空设备上,然后新开一个窗口使用dstat命令监测

接收数据端

复制代码
[root@localhost ~]# nc -l 9999 > /dev/null

发送数据端

复制代码
[root@linux:~]# nc 192.168.40.8 9999 < /dev/zero

dstat命令

nmap

  • 发现网络中的活动主机
  • 扫描开放的端口和服务
  • 识别操作系统类型和版本
  • 检测网络服务的漏洞

    图片来源: https://zhuanlan.zhihu.com/p/585377081
    端口扫描

    [root@linux:~]# nmap 192.168.40.8
    Starting Nmap 7.94SVN ( https://nmap.org ) at 2026-01-12 03:13 UTC
    Nmap scan report for 192.168.40.8
    Host is up (0.00010s latency).
    Not shown: 997 closed tcp ports (reset)
    PORT STATE SERVICE
    22/tcp open ssh
    80/tcp open http
    9999/tcp open abyss
    MAC Address: 00:0C:29:2D:5C:0C (VMware)

    Nmap done: 1 IP address (1 host up) scanned in 0.54 seconds

0.54秒扫描了1000个端口,997个端口关闭,结果中列出了其中3个开放的端口
指定端口

使用-p参数,可以一次扫描单个端口、多个端口、或扫描一个范围的端口
-p-等价于 -p 1-65535

复制代码
[root@linux:~]# nmap 192.168.40.8 1-80
Starting Nmap 7.94SVN ( https://nmap.org ) at 2026-01-12 07:13 UTC
Failed to resolve "1-80".
Failed to resolve "1-80".
Nmap scan report for 192.168.40.8
Host is up (0.0044s latency).
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
MAC Address: 00:0C:29:2D:5C:0C (VMware)

Failed to resolve "1-80".
Nmap done: 1 IP address (1 host up) scanned in 0.93 seconds

TCP全连接扫描

-sT 参数进行TCP全连接扫描。
「全连接扫描」使用完整的三次握手建立链接,能够建立链接就判定端口开放,否则判定端口关闭。

复制代码
[root@linux:~]# nmap 192.168.40.8 -p80 -sT
Starting Nmap 7.94SVN ( https://nmap.org ) at 2026-01-12 07:26 UTC
Nmap scan report for 192.168.40.8
Host is up (0.00056s latency).

PORT   STATE SERVICE
80/tcp open  http
MAC Address: 00:0C:29:2D:5C:0C (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.31 seconds

如果端口开放,就会进行完整的三次握手,成功建立链接,扫描结果中,STATE字段显示为 open

如果端口关闭,就只能进行一次握手,无法建立链接,扫描结果中,STATE字段显示为 closed。
SYN半链接扫描

-sS 参数进行SYN半链接扫描
「半链接扫描」只进行两次握手,对方返回确认帧(ACK=1)就判定端口开放,否则判定端口关闭。

复制代码
[root@linux:~]# nmap 192.168.40.8 -p80 -sS
Starting Nmap 7.94SVN ( https://nmap.org ) at 2026-01-12 07:33 UTC
Nmap scan report for 192.168.40.8
Host is up (0.00035s latency).

PORT   STATE SERVICE
80/tcp open  http
MAC Address: 00:0C:29:2D:5C:0C (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.55 seconds
[root@linux:~]#

隐秘扫描

「隐秘扫描」向目标主机的端口发送TCP FIN包 或 Xmas tree包 或 Null包,如果收到RST响应包,就判定端口关闭,否则就判定端口开放或被屏蔽(open/filtered)
nmap 127.0.0.1 -p 80 -sF # Fin扫描
nmap 127.0.0.1 -p 80 -sN # Null扫描(所有flags都为0的TCP包)
nmap 127.0.0.1 -p 80 -sX # Xmas扫描(flags的FIN、URG、PUSH都为1的包)

主机探测
扫描网段中有哪些主机在线,使用 -sP 参数,不扫描端口,只扫描「存活主机」。

复制代码
[root@linux:~]# nmap 192.168.40.0/24 -sP
Starting Nmap 7.94SVN ( https://nmap.org ) at 2026-01-12 07:37 UTC
Nmap scan report for 192.168.40.1
Host is up (0.00023s latency).
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for _gateway (192.168.40.2)
Host is up (0.00014s latency).
MAC Address: 00:50:56:E7:C2:22 (VMware)
Nmap scan report for 192.168.40.8
Host is up (0.00034s latency).
MAC Address: 00:0C:29:2D:5C:0C (VMware)
Nmap scan report for 192.168.40.254
Host is up (0.00025s latency).
MAC Address: 00:50:56:FE:BC:2B (VMware)
Nmap scan report for linux (192.168.40.7)
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 2.54 seconds

服务识别

扫描端口时,默认显示端口对应的服务,但不显示服务版本。

想要识别具体的「服务版本」,可以使用 -sV 参数。

复制代码
[root@linux:~]# nmap 192.168.40.8 -p80 -sV
Starting Nmap 7.94SVN ( https://nmap.org ) at 2026-01-12 07:40 UTC
Nmap scan report for 192.168.40.8
Host is up (0.00067s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    nginx 1.28.1
MAC Address: 00:0C:29:2D:5C:0C (VMware)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.74 seconds
[root@linux:~]#

VERSION字段显示服务的详细版本。

系统识别
想要识别「操作系统版本」,可以使用 -O (不是零,是大写的欧)参数。

复制代码
[root@linux:~]# nmap 192.168.40.8 -p80 -O
Starting Nmap 7.94SVN ( https://nmap.org ) at 2026-01-12 07:44 UTC
Nmap scan report for 192.168.40.8
Host is up (0.0012s latency).

PORT   STATE SERVICE
80/tcp open  http
MAC Address: 00:0C:29:2D:5C:0C (VMware)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1.96 seconds

扫描结果导出
Nmap的扫描结果可以保存到文件中,比如文本格式、XML格式。
将扫描结果导出为「文本格式」,结果原样保存。

nmap 192.168.40.8 -p 80 -oN result.txt

nmap 192.168.31.180 -p 80 -oX result.xml
telnet 远程登录工具,可以检查某个主机是否开启某个端口
在192.168.40.8上开启端口监听

复制代码
[root@localhost ~]# nc -l 9999

使用telnet在192.168.40.7执行

复制代码
[root@linux:~]# telnet 192.168.40.8 9999
Trying 192.168.40.8...
Connected to 192.168.40.8.
Escape character is '^]'.


netstat 打印网络连接、路由表、tcp11种状态

-l:只显示监听的套接字
-n:不做名字解析
-t:显示TCP端口
-u:显示UDP端口
-p:显示PID和程序名字
-r:显示路由表
-a:显示所有的套接字

复制代码
[root@localhost ~]# netstat -antup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1564/nginx: master
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1145/sshd
tcp        0     64 192.168.40.8:22         192.168.40.1:13325      ESTABLISHED 1831/sshd: root [pr
tcp6       0      0 :::22                   :::*                    LISTEN      1145/sshd

ss 跟netstat命令一样

-l:只显示监听的套接字
-n:不做名字解析
-t:显示TCP端口
-u:显示UDP端口
-p:显示PID和程序名字
-r:显示路由表
-a:显示所有的套接字

复制代码
[root@localhost ~]# ss -antup
Netid  State    Recv-Q   Send-Q      Local Address:Port     Peer Address:Port
tcp    LISTEN   0        128               0.0.0.0:80            0.0.0.0:*       users:(("nginx",pid=1568,fd=9),("nginx",pid=1567,fd=9),("nginx",pid=1566,fd=9),("nginx",pid=1565,fd=9),("nginx",pid=1564,fd=9))
tcp    LISTEN   0        128               0.0.0.0:22            0.0.0.0:*       users:(("sshd",pid=1145,fd=5))
tcp    ESTAB    0        64           192.168.40.8:22       192.168.40.1:13325   users:(("sshd",pid=1846,fd=5),("sshd",pid=1831,fd=5))
tcp    LISTEN   0        128                  [::]:22               [::]:*       users:(("sshd",pid=1145,fd=7))

tracert&traceroute 路由跟踪

注意: tracert 是在windows 上使用的,linux下命令是 traceroute

tracert

-d 禁止吧IP解析为对应的域名

复制代码
C:\Users\liujiaming>tracert www.baidu.com

通过最多 30 个跃点跟踪
到 www.a.shifen.com [2408:871a:2100:186c:0:ff:b07e:3fbc] 的路由:

  1     3 ms     3 ms     4 ms  2408:8206:2540:7c95:60c9:403f:38c2:4544
  2     7 ms     6 ms     6 ms  2408:8000:1000:4004::f
  3     *        6 ms     *     2408:8000:1120:3dd::2
  4     *        *        *     请求超时。
  5     *        *        *     请求超时。
  6     *        *        *     请求超时。
  7    11 ms    11 ms    11 ms  2408:871a:2800::49
  8    15 ms    12 ms    11 ms  240c:4001:1122:fed0:0:eb01:ec02:2
  9    14 ms    11 ms    11 ms  240c:4051:1164:1eb:1eaf:2:eb01:3
 10    20 ms    22 ms    13 ms  240c:4051:1164:103:1eaf:2:1b03:7
 11    11 ms    11 ms    20 ms  2408:871a:2100:186c:0:ff:b07e:3fbc

跟踪完成。

traceroute

-n 禁止把 IP 解析为对应的域名

复制代码
[root@localhost ~]# traceroute www.baidu.com
traceroute to www.baidu.com (103.235.46.102), 30 hops max, 60 byte packets
 1  _gateway (192.168.40.2)  0.266 ms  263.085 ms  263.081 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *
[root@localhost ~]#

iftop 监控流量

中间的 <= => 这两个左右箭头,表示的是流量的方向。
TX :发送流量
RX :接收流量
TOTAL :总流量
Cumm :运行 iftop 到目前时间的总流量
peak :流量峰值
rates :分别表示过去 2s 10s 40s 的平均流量
使用q退出

相关推荐
jiayong234 小时前
DevOps体系详解01-核心概念与价值
运维·devops
jiayong234 小时前
DevOps体系详解02-技术架构与工具链
运维·架构·devops
pride.li5 小时前
开发板和Linux--nfs服务挂载
linux·运维·服务器
looking_for__5 小时前
【Linux】应用层协议
linux·服务器·网络
BB_CC_DD5 小时前
Linux截图工具(ubuntu18.04+flameshot(火焰截图))
linux
云泽8086 小时前
不止是命令:Linux 高频指令实战 + 芯片架构底层逻辑
linux·运维·服务器
j_xxx404_6 小时前
Linux:基础IO
linux·运维·服务器
wdfk_prog7 小时前
[Linux]学习笔记系列 -- [drivers][i2c]i2c-dev
linux·笔记·学习
angushine8 小时前
银河麒麟V10创建用户
运维
Trouvaille ~8 小时前
【Linux】网络编程基础(二):数据封装与网络传输流程
linux·运维·服务器·网络·c++·tcp/ip·通信