Linux常用命令之进程管理

Linux常用命令之进程管理

本篇继续分享Linux中常用命令。主要分享Linux系统的进程管理相关的命令。掌握Linux常用命令之进程管理,轻松掌控系统运行状态,提升效率必备指南。

ps命令——查看进程

查看当前时刻进程信息。

选项

a显示与终端相关的所有进程,包含每个进程的完整路径u显示进程的用户信息x显示与终端无关的所有进程-e 显示所有进程-f 额外显示UID,PPID,STIME栏位信息。-u显示指定用户相关的进程信息

操作:

1、输出每个进程信息

[root@harbor ~]# ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 12月25 ? 00:00:57 /usr/lib/systemd/systemd –switched-root –system –deserialize 22root 2 0 0 12月25 ? 00:00:00 [kthreadd]root 4 2 0 12月25 ? 00:00:00 [kworker/0:0H]

2、查看特定进程信息

[root@harbor ~]# ps -ef |grep nginx10000 135209 135159 0 12月28 ? 00:00:00 nginx: master process nginx -g daemon off;10000 135415 135209 0 12月28 ? 00:00:00 nginx: worker process10000 135416 135209 0 12月28 ? 00:00:00 nginx: worker process10000 135417 135209 0 12月28 ? 00:00:00 nginx: worker process10000 135418 135209 0 12月28 ? 00:00:00 nginx: worker process

3、BSD语法显示每个进程信息

[root@harbor ~]# ps aux

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.0 193872 6956 ? Ss 12月25 0:57 /usr/lib/systemd/systemd –switched-root –system –deserialize 22root 2 0.0 0.0 0 0 ? S 12月25 0:00 [kthreadd]root 4 0.0 0.0 0 0 ? S< 12月25 0:00 [kworker/0:0H]root 6 0.0 0.0 0 0 ? S 12月25 0:00 [ksoftirqd/0]root 7 0.0 0.0 0 0 ? S 12月25 0:02 [migration/0]

输出说明:

USER:该进程属于的用户。PID:该进程的进程号。%CPU:该进程使用掉的CPU资源百分比。%MEM:该进程所占用的物理内存百分比。VSZ:该进程使用掉的虚拟内存量(单位为Kbytes)。RSS:该进程占用的固定的内存量(单位为Kbytes)。TTY:该进程是在哪个终端机上面运作的,若与终端机无关,则显示“?”,另外,tty1-tty6是本机上面的登入者进程,若为pts/0等,则表示为由网络连接进主机的进程。STAT:该进程目前的状态,主要的状态包括如下几种。R:正在运行,或者是可以运行。S:正在中断睡眠中,可以由某些信号(signal)唤醒。D:不可中断睡眠。·T:正在侦测或者是停止了。Z:已经终止,但是其父进程无法正常终止它,从而变成zombie(僵尸)进程的状态。+:前台进程。l:多线程进程。N:低优先级进程。<:高优先级进程。s:进程领导者。L:已将页面锁定到内存中。START:该进程被触发启动的时间。TIME:该进程实际使用CPU运作的时间。COMMAND:该进程的实际命令。

kill命令——终止进程

能中止你希望停止的进程

-l列出全部的信号名称-s指定要发送的信号

操作:

显示系统的所有信号

[root@localhost ~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+338) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+843) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+1348) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-1253) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-758) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62)

kill命令默认发送的信号是15,用于结束进程。使用信号9可以强制终止进程。

[root@localhost ~]# netstat -lntupActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1353/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1473/master tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 945/rpcbind [root@localhost ~]# kill -9 1473[root@localhost ~]# netstat -lntup #再次查看没有进程号为1473的进程。Active Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1353/sshd tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 945/rpcbind [root@localhost ~]#

top命令——动态显示各个进程的资源占用情况

top用于实时地对系统资源进行监控,输出各个进程的资源占用情况。同时top命令也是一个交互式命令。

交互式选项

交互式命令含义h或?显示帮助信息,给出交互式命令的一些说明总结m以内存排序显示z打开/关闭颜色显示n或#设置显示做大进程行数q退出top

nohup命令——后台运行进程

nohup命令可以将程序以后台方式运行,被运行程序的输出信息将不会显示到终端。

无论是否将nohup命令的输出重定向到终端,输出都将写入到当前目录的nohup.out文件中。如果当前目录的nohup.out文件不可写,则输出重定向到$HOME/nohup.out文件中。

正常情况下,如果用户退出登录或会话终止,则用户正在执行并可持续一段时间的命令(非守护进程)将自动终止

实际工作中,我们一般会和&一起使用,让程序直接在后台运行。

[root@localhost ~]# nohup ping 172.16.1.20 &[2] 109057[root@localhost ~]# nohup: 忽略输入并把输出追加到”nohup.out”[root@localhost ~]# ps -ef |grep pingroot 109057 93226 0 10:45 pts/0 00:00:00 ping 172.16.1.20root 109329 93226 0 10:45 pts/0 00:00:00 grep –color=auto ping注意:以上示例是为了测试,测试完后要kill掉,不然一直生成日志,占用磁盘空间。[root@localhost ~]# kill -9 109057

runlevel命令——输出当前运行级别

[root@localhost ~]# runlevelN 3# 显示当前运行界别为3,即为命令行多用户模式

运行级别说明:

0停机1单用户模式2无网络的多用户模式3多用户模式4未使用5图形界面多用户模式6重启

init命令——进程初始化工具

init命令是Linux下的进程初始化工具,init进程是所有Linux进程的父进程,它的进程号为1

切换运行

界别

关机[root@localhost ~]# init 0 # 重启 [root@localhost ~]# init 6

service命令——管理系统服务

service命令用于centos6以及前面版本。centos7后使用systemd管理系统服务。

service命令用于对系统服务进程管理,可以对服务进行启动,停止,重启,重新加载配置,查看状态等操作。

操作:

启动服务service chronyd start# 停止服务service chronyd stop# 重启服务service chronyd restart# 平滑重启服务service chronyd reload# 查看服务状态service chronyd status

systemctl命令——管理系统服务

systemctl是Systemd的主命令,用于管理系统。

systemd的配置目录:

  • /usr/lib/systemd/system/:每个服务最主要的启动脚本的配置放在这,有点类似以前的/etc/init.d;

  • /run/systemd/system/:系统执行过程中所产生的服务脚本所在目录,这些脚本的优先级要比/usr/lib/systemd/system/高;

  • /etc/systemd/system/:管理员根据主机系统的需求所创建的执行脚本所在目录,执行优先级比/run/systemd/system/高;

启动服务systemctl start chronyd# 停止服务systemctl stop chronyd# 重启服务systemctl restart chronyd# 平滑重启服务systemctl restart chronyd # 查看服务状态systemctl restart chronyd# 列出已安装的unitsystemctl list-unit-files # 列出类型为service的项目systemctl list-units –type=service # 输出主机当前的运行模式systemctl get-default # 设置主机的运行模式,关闭图形界面,使用命令行模式systemctl isolate multi-user.target #将目前的操作环境改为图形界面systemctl isolate graphical.target #系统关机systemctl poweroff #重新开机 systemctl reboot #进入暂停模式 systemctl suspend #强制进入救援模式 systemctl rescue #禁用某个服务systemctl mask etcd.service #解除禁用某个服务systemctl unmask etcd.service

相关文章:

Linux常用命令之网络管理

Linux常用命令之用户管理

Linux常用命令之文件备份和压缩

Linux常用命令之进程管理

Linux的150个常用命令汇总,运维大神不一定全部掌握!

下面是分类总结的150个命令,看一下你知道多少个?

1 文件和目录操作命令

命令作用pwd显示当前所在位置cd切换目录tree以树形结构显示目录下的内容mkdir创建目录touch创建空文件ls显示目录下的内容及相关信息属性cp复制文件或目录mv移动或重命名文件rm删除文件或目录ln创建硬链接或软连接find查看目录下的文件file显示文件的类型pwd显示当前所在位置xargs将标准输入转换成命令行参数rename重命名文件dirname显示文件或目录路径chattr改变文件扩展属性lsattr查看文件扩展属性md5sum计算和校验文件的MD5值chown改变文件或目录的用户和用户组chmod改变文件或目录权限umask显示或设置权限掩码

详细选项参数和实操请参考:Linux常用命令之文件管理

2 文件过滤及内容编辑处理命令

命令作用cat合并文件或查看文件内容tac反向显示文件内容more分页显示文件内容less分页显示文件内容head显示文件内容头部tail显示文件内容尾部cut从文件中提取一段文字并输出split分割文件paste合并文件sort文件排序uniq去重复行wc统计文件的行数、单词数或字节数dos2unix将DOS格式文件转换成UNIX格式iconv转换文件的编码格式diff比较两个文件的不通vimdiff可视化比较工具rev反向输出文件内容tr替换或删除字符od按不同进制显示文件tee多重定向vi/vim文本编辑器

详细选项参数和实操请参考:Linux常用命令之文件处理

3 信息显示与文件搜索

命令作用uname显示系统时间hostname显示或设置系统的主机名dmesg系统启动异常诊断stat显示文件或文件系统状态du统计磁盘看空间使用情况date显示与设置时间echo显示一行文本watch监视命令执行情况which显示命令的全路径locate快速定位文件路径updatedb更新mloacate数据库

详细选项参数和实操请参考:Linux常用命令之信息显示

4 文件备份与压缩命令

命令作用tar打包备份gzip压缩或解压命令bzip2压缩或解压命令zip打包和压缩文件unzip解压zip文件scp远程文件复制rsync文件同步工具

详细选项参数和实操请参考:Linux常用命令之文件备份和压缩

5 用户管理及用户信息查询命令

命令作用useradd创建用户usermod修改用户信息userdel删除用户groupadd创建新的用户组groupdel删除用户组passwd修改用户密码chage修改用户密码有效期chpasswd批量更新用户密码su切换用户visudo编辑sudoers文件sudo以另一个用户身份执行命令id显示用户与用户组的信息w显示已登录用户信息who显示已登录用户信息users显示已登录用户whoami显示当前登录的用户名last显示用户登录列表lastb显示用户登录失败的记录lastlog显示所有用的最近登录记录

详细选项参数和实操请参考:Linux常用命令之用户管理

6 磁盘与文件系统管理命令

命令作用fdisk磁盘分区工具gdisk磁盘分区工具parted磁盘分区工具partprobe更新内核的磁盘分区表信息tune2fs调整ext2/ext3/ext4文件系统参数mkfs格式化文件系统dumpe2fs导出ext2/ext3/ext4文件系统信息resize2fs调整ext2/ext3/ext4文件系统大小xfs_growfs调整xfs文件系统大小fsck检查并修复linux文件系统dd转换或复制文件mount挂载文件系统df报告文件系统磁盘空间的使用情况mkswap创建交换分区swapon激活交换分区swapoff关闭交换分区sync刷新文件系统缓冲区

详细选项参数和实操请参考:Linux常用命令之磁盘管理

7 进程管理命令

命令作用ps查看进程pstree显示进程状态数pgrep查看匹配条件的进程kill终止进程killall通过进程名终止进程pkill通过进程名终止进程top实时显示系统中各个进程的资源占用情况nice调整程序运行时的优先级renice调整运行中的进程的优先级nohup用户退出系统进程继续工作strace跟踪进程的系统调用ltrace跟踪进程调用函数库runlevel输出当前运行级别init初始化linux进程service管理系统服务(内核3.10以下)systemctl管理系统服务(内核3.10及以上)

详细选项参数和实操请参考:Linux常用命令之进程管理

8 网络管理命令

命令作用ifconfig配置或显示网络接口信息ifup激活网络接口ifdown禁用网络接口route显示或管理路由表arp管理系统的arp缓存ip网络配置工具netstat查看网络状态ss查看网络状态ping测试主机之间网络的连通性traceroute追踪数据传输路由状况arping发送arp请求telnet远程登录主机nc多功能网络工具ssh安全的远程登录主机wget命令行下载工具mailq显示邮件传输队列mail发送和接收邮件nslookup域名查询工具dig域名查询工具host域名查询工具nmap网络探测工具和安全/端口扫描器tcpdump监听网络流量

详细选项参数和实操请参考:Linux常用命令之网络管理

9 系统管理工具

命令作用lsof查看进程打开的文件uptime显示系统的运行时间及负载free查看系统内存信息iftop动态显示网络接口信息流量情况vmstat虚拟内存统计mpstatCPU信息统计iostatI/O信息统计sar收集系统信息chkconfig管理开机服务setup系统管理工具nmtui系统管理工具ethtool查询网卡参数mii-tool管理网络接口的状态rpmRPM包管理器yum自动化RPM包管理工具

yum管理参考链接:Linux系统的yum包管理详解,值得收藏!

https://www.calcguide.tech/2025/08/26/linux开源软件路线图/

Vhttps://www.calcguide.tech/2025/05/11/linux的150个常用命令汇总,运维大神不一定全部掌握!/

https://www.calcguide.tech/2025/05/11/linux的150个常用命令汇总,运维大神不一定全部掌握!/

Linux系统的yum包管理详解值得收藏!

一、yum概述

1、yum和apt包管理器的区别

Linux 系统基本上分两大类:

RedHat系列:Redhat、Centos、Fedora 等;

Debian系列:Debian、Ubuntu 等。

目前国产操作系统基本都是基于这两大派系进行二次开发,整体上是换汤不换药,大多数命令是相通的。

而yum是一个RedHat系列的包管理器,基于RPM,使用rpm命令处理包。在CentOS 8及更高版本中被dnf(Dandified Yum)取代,dnf提供了一些性能改进和新的特性,使用上和yum基本相同。

apt是Debian系列的包管理系统,使用dpkg作为底层包管理系统。自动处理软件包的依赖关系,确保在安装新软件时所有必需的包都会一同安装。

包管理工具主要用于软件包的安装,升级,删除,查看。apt和yum都是为了简化软件包的管理和维护,它们在功能上非常相似,但在不同Linux发行版的生态系统中有各自的特性和用法

2、yum和rpm的区别

YUM和RPM包管理器的区别主要体现在软件仓库管理、‌更新机制、‌依赖关系处理以及使用场景上。‌

软件仓库管理:‌YUM使用软件仓库,‌使得管理大量软件包变得更加容易,‌而RPM通常单独管理每个包。‌这意味着YUM能够一次性更新所有软件包,‌而RPM需要手动更新每个包。‌

更新机制:‌YUM可以一次性更新所有软件包,‌而RPM需要手动更新每个包。‌这种差异使得YUM在处理大量软件包的更新时更为高效。‌

依赖关系处理:‌RPM是一个基础的包管理工具,‌而YUM是在RPM基础上构建的一个更高级、‌更易用的工具,‌特别适用于需要处理复杂依赖关系的场景。‌YUM能够自动解决软件包的依赖关系,‌而RPM则需要手动处理这些依赖关系。‌

使用场景:‌RPM适用于简单的系统或当不需要处理复杂的软件依赖关系时。‌而YUM则更适合于需要频繁更新和管理的复杂系统,‌尤其是在处理多个软件包之间的依赖关系时

二、配置yum源

配置在线yum源

常用的几个国内源站

1
1、清华大学https://mirrors.tuna.tsinghua.edu.cn/2、网易http://mirrors.163.com/3、阿里云http://mirrors.aliyun.com4、中科大https://mirrors.ustc.edu.cn/

在有网环境默认使用各版本的官网yum源,一般比较慢,可用从国内的几个源站获取yum源。

下面是阿里云上快速获取CentOS7的基础源和epel源

1
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repocurl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repoyum clean allyum makecache

另一种快速添加yum源方法:yum-config-manager

1
# 安装依赖包yum-utilsyum install yum-utils -y# 添加阿里云源yum-config-manager --add-repo=源url地址yum-config-manager --add-repo https://mirrors.aliyun.com/repo/Centos-7.repo# 查看源列表yum repolist

配置离线yum源

在工作中,出于安全性考虑,服务器并不能访问互联网,当使用rpm安装包安装一些软件时,经常出现缺少依赖而不能安装的情况。

此时我们需要配置本地yum源,配置本机yum源相对容易,一般只需要将系统镜像上传到主机后进行挂载。也可以搭建内网共享yum源,其他服务器都可以向共享yum源获取相应的依赖包。

本次环境给搭建搭建一个简单的单机yum源。

1、下载上传iso镜像 根据对应的操作系统版本,下载对应的evething包,evething包软件多一点。

或者直接挂在光驱,也可以做yum源

2、挂在iso

1
# 创建挂载路径,这个路径可以随意&#91;root@localhost ~]# mkdir /media/iso# 挂在iso镜像&#91;root@localhost ~]# mount -o loop /root/centos-7-x86_64-everything-2009.isomount: /dev/loop0 写保护,将以只读方式挂载# 如果挂在了光驱,执行下面语句&#91;root@localhost ~]# mount -o loop /dev/cdrom /media/iso

3、修改repo文件

1
&#91;root@localhost ~]# cd /etc/yum.repos.d/&#91;root@localhost ~]# mkdir backup&#91;root@localhost ~]# mv *.repo backup/&#91;root@localhost ~]# cat >> local.repo <<EOF&#91;local]name=local repobaseurl=file:///media/isoenable=1gpgcheck=0EOF&#91;root@localhost ~]# yum clean all# 测试安装软件&#91;root@localhost ~]# yum install telnet

三、包管理器常用操作

rpm常用操作

rpm工具在工作中也有很多应用场景。

选项:

1
-i  安装-v  显示执行过程-h  显示安装进度(打印#)-U  升级到新版本-q  查询(常配合其他参数使用)-a  查询所有软件-l  查看软件的安装位置-f  查看拥有指定文件的软件-e  卸载--force  强制执行--nodeps  忽略依赖

常用组合:

1
# 安装一个新的软件包rpm -ivh package.rpm # 升级软件包rpm -Uvh package.rpm# 强制安装软件包,即使存在版本冲突或其他问题。rpm -Uvh --force package.rpm# 删除软件包rpm -e package_name # 忽略依赖,强制删除(慎用)rpm -e --nodeps package_name # 列出系统上所有已安装的软件包rpm -qa # 查询特定软件包rpm -qa |grep ssh# 查询版本号rpm -q package_name rpm -q net-tools# 询关于某个软件包的信息rpm -qi package_name rpm -qi telnet# 出一个软件包安装的文件列表。rpm -ql package_name rpm -ql telnet# 查找某个文件属于哪个软件包。rpm -qf file_path :rpm -qf `which nslookup`bind-utils-9.11.4-26.P2.el7.x86_64# 查询该包提供的内容。rpm -q --provides package_name# 模拟软件包的安装过程,检查是否有依赖项问题或其他错误。rpm -i --test package.rpm

yum常用操作

1、yum仓库管理

1
# 列出可用的yum仓库yum repolist# 列出所有软件仓库,包括禁用的yum repolist # 清除缓存yum clean all# 重新生成缓存yum makecache# 列出所有可用的软件包yum list# 列出指定的软件包yum list |grep package_nameyum list | grep gcc# 列出所有可升级的rpm包yum list updates# 列出所有已安装的rpm包yum list installed# 查看包详情yum info wget# 查看一个软件包的依赖关系yum deplist 包名

2、查询软件包

1
# 查询软件包(支持模糊查询)yum search 包名yum search net-tools# 查询某个命令由哪个软件包提供的yum provides 要查询的命令/文件名yum provides nslookup yum provides ifconfig# 查看源中的软件版本yum list docker --showduplicates | sort -ryum list nginx --showduplicates

3、安装软件包

1
# 安装软件包,可用一起安装多个# -y参数是直接确认安装,不用询问是否安装yum install nfs-utils -y yum install -y vim gcc gcc-c++# 默认安装的是最新版本,可用指定版本安装yum install nginx-1.22.1# 本地安装,已有rpm包yum localinstall 本地包名.rpm -y # 只下载不安装(生产环境常用)yum install  -y --downloadonly --downloaddir=存放目录 包名以上操作一般还需要安装软件包:yum-plugin-downloadonly# 组安装yum groupinstall "Chinese Support"# 安装一套LAMPyum groupinstall "Web Server"# 列出组信息yum grouplist# 删除组yum groupremove "Chinese Support"# 从指定源安装软件yum install nginx --enablerepo=epel

4、更新软件包

1
# 更新所有可更新的软件包yum update -y# 更新指定软件yum update nginx -y # 升级系统yum upgrade  # 此命令会删除旧的软件包,重新安装新的软件包# 更新软件包,自动解决依赖问题yum upgrade --obsoletes -y

5、卸载软件包

1
# 卸载指定软件包,不卸载依赖包yum remove 包名 -yyum remove nginx -y# 忽略依赖包yum remove nginx --nodeps# 连同依赖一起卸载yum autoremove 包名yum autoremove nginx# 删除软件包,以及软件包数据和配置文件(慎用)yum erase 包名

6、其他用途

1
# 查看yum执行历史yum history# 查看命令记录详情yum history info 编号# 撤销yum执行记录yum history undo 编号

本篇关于Linux系统的包管理器知识分享完结!

Linux系统yum包管理详解, yum和apt区别, Linux yum命令使用教程, Linux系统包管理器对比, yum包管理器详解, Linux系统yum安装指南, Linux yum常用命令, Linux系统包管理器选择, Linux yum配置文件详解, Linux系统软件安装方法

overlay技术--理解VXLAN(L2 over UDP)、NVGRE(L2 over GRE)、STT(L2 over TCP)

overlay技术–理解VXLAN(L2 over UDP)、NVGRE(L2 over GRE)、STT(L2 over TCP)

overlay技术需求1 虚拟机迁移范围受到网络架构限制 由于虚拟机迁移的网络属性要求,其从一个物理机上迁移到另一个物理机上,要求虚拟机不间断业务,则需要其IP地址、MAC地址等参数维保持不变,如此则要求业务网络是一个二层网络,且要求网络本身具备多路径多链路的冗余和可靠性。2 虚拟机规模受网络规格限制 在大二层网络环境下,数据流均需要通过明确的网络寻址以保证准确到达目的地,因此网络设备的二层地址表项大小((即MAC地址表)),成为决定了云计算环境下虚拟机的规模的上限。3 网络隔离/分离能力限制 当前的主流网络隔离技术为VLAN(或VPN),在大规模虚拟化环境部署会有问题,VLAN数量在标准定义中只有12个比特单位,即可用的数量为4000个左右,这样的数量级对于公有云或大型虚拟化云计算应用而言微不足道。在此驱动力基础上,逐步演化出Overlay的虚拟化网络技术趋势。

overlay技术简介Overlay在网络技术领域,指的是一种网络架构上叠加的虚拟化技术模式,其大体框架是对基础网络不进行大规模修改的条件下,实现应用在网络上的承载,并能与其它网络业务分离,并且以基于IP的基础网络技术为主。其实这种模式是以对传统技术的优化而形成的。针对前文提出的三大技术挑战,Overlay在很大程度上提供了全新的解决方式。

针对虚机迁移范围受到网络架构限制的解决方式Overlay是一种封装在IP报文之上的新的数据格式,因此,这种数据可以通过路由的方式在网络中分发,而路由网络本身并无特殊网络结构限制,具备良性大规模扩展能力,并且对设备本身无特殊要求,以高性能路由转发为佳,且路由网络本身具备很强的的故障自愈能力、负载均衡能力。针对虚机规模受网络规格限制的解决方式虚拟机数据封装在IP数据包中后,对网络只表现为封装后的的网络参数,即隧道端点的地址,因此,对于承载网络(特别是接入交换机),MAC地址规格需求极大降低,最低规格也就是几十个(每个端口一台物理服务器的隧道端点MAC)。针对网络隔离/分离能力限制的解决方式针对VLAN数量4000以内的限制,在Overlay技术中引入了类似12比特VLAN ID的用户标识,支持千万级以上的用户标识,并且在Overlay中沿袭了云计算“租户”的概念,称之为Tenant ID(租户标识),用24或64比特表示。针对VLAN技术下网络的TRUANK ALL(VLAN穿透所有设备)的问题,Overlay对网络的VLAN配置无要求,可以避免网络本身的无效流量带宽浪费,同时Overlay的二层连通基于虚机业务需求创建,在云的环境中全局可控。Overlay主要技术标准及比较目前,IETF在Overlay技术领域有如下三大技术路线正在讨论,为简单起见,本文只讨论基于IPv4的Overlay相关内容。VXLAN。VXLAN是将以太网报文封装在UDP传输层上的一种隧道转发模式,目的UDP端口号为4798;为了使VXLAN充分利用承载网络路由的均衡性,VXLAN通过将原始以太网数据头(MAC、IP、四层端口号等)的HASH值作为UDP的号;采用24比特标识二层网络分段,称为VNI(VXLAN Network Identifier),类似于VLAN ID作用;未知目的、广播、组播等网络流量均被封装为组播转发,物理网络要求支持任意源组播(ASM)。

NVGRE

NVGRE主要支持者是Microsoft。与VXLAN不同的是,NVGRE没有采用标准传输协议(TCP/UDP),而是借助通用路由封装协议(GRE)。NVGRE使用GRE头部的低24位作为租户网络标识符(TNI),与VXLAN一样可以支持1600个虚拟网络。为了提供描述带宽利用率粒度的流,传输网络需要使用GRE头,但是这导致NVGRE不能兼容传统负载均衡,这是NVGRE与VXLAN相比最大的区别也是最大的不足。为了提高负载均衡能力建议每个NVGRE主机使用多个IP地址,确保更多流量能够被负载均衡。NVGRE不需要依赖泛洪和IP组播进行学习,而是以一种更灵活的方式进行广播,但是这需要依赖硬件/供应商。最后一个区别关于分片,NVGRE支持减小数据包最大传输单元以减小内部虚拟网络数据包大小,不需要要求传输网络支持传输大型帧。

STT

STT利用了TCP的数据封装形式,但改造了TCP的传输机制,数据传输不遵循TCP状态机,而是全新定义的无状态机制,将TCP各字段意义重新定义,无需三次握手建立TCP连接,因此称为无状态TCP;以太网数据封装在无状态TCP;采用64比特Context ID标识二层网络分段;为了使STT充分利用承载网络路由的均衡性,通过将原始以太网数据头(MAC、IP、四层端口号等)的HASH值作为无状态TCP的源端口号;未知目的、广播、组播等网络流量均被封装为组播转发。

这三种二层Overlay技术,大体思路均是将以太网报文承载到某种隧道层面,差异性在于选择和构造隧道的不同,而底层均是IP转发。上表所示为这三种技术关键特性的比较:VXLAN和STT对于现网设备对流量均衡要求较低,即负载链路负载分担适应性好,一般的网络设备都能对L2-L4的数据内容参数进行链路聚合或等价路由的流量均衡

而NVGRE则需要网络设备对GRE扩展头感知并对flow ID进行HASH,需要硬件升级;

STT对于TCP有较大修改,隧道模式接近UDP性质,隧道构造技术属于革新性,且复杂度较高,而VXLAN利用了现有通用的UDP传输,成熟性极高。总体比较,VLXAN技术相对具有优势。

参考:vlan: http://www.bitscn.com/network/200605/26966.htmlVLAN和VXLAN: https://blog.csdn.net/octopusflying/article/details/77609199vpc: http://www.360doc.com/content/17/0405/08/35636606_642959801.shtml阿里云vpc: http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/pdf/vpc-product-introduction-intl-zh-2017-03-17.pdfhttp://www.h3c.com/cn/d_201309/796466_30008_0.htm————————————————

原文链接:https://blog.csdn.net/gengzhikui1992/article/details/79680240

windows和linux常见端口及服务列表及高危端口

Windows 和 Linux 常见端口及服务列表(0-3000)

​​Windows 系统常见端口​​

端口号服务介绍描述21FTP(控制端口)文件传输协议的控制通道,用于发送FTP命令,存在明文传输风险。22SSH安全远程登录协议(部分第三方工具支持),需注意暴力破解风险。25SMTP邮件发送协议,易被滥用于垃圾邮件发送。53DNS域名解析服务,需防范DNS劫持或放大攻击。80HTTP网页服务默认端口,易受跨站脚本(XSS)或注入攻击。135RPC远程过程调用,曾因漏洞被用于蠕虫传播(如MS08-067)。137-139NetBIOS局域网名称解析和文件共享,易泄露主机信息或内网渗透。443HTTPS加密网页服务,需防范证书伪造或中间人攻击。445SMB文件共享协议,永恒之蓝漏洞(WannaCry)的传播途径。3389RDP远程桌面协议,弱密码或未授权访问易导致系统沦陷。

​​Linux 系统常见端口​​

端口号服务介绍描述22SSH加密远程管理通道,但弱密码或旧版本协议易被爆破。53DNS同Windows,需注意DNS缓存投毒风险。80HTTP同Windows,Apache/Nginx服务常见漏洞(如未授权访问)。111RPCbind远程过程调用端口映射,若暴露易被用于服务枚举攻击。143IMAP邮件接收协议,明文传输时易泄露凭据。161SNMP网络设备监控协议,默认团体名(如public)易被利用获取敏感信息。389LDAP目录服务协议,弱认证可能导致用户数据泄露。443HTTPS同Windows,需防范SSL/TLS协议漏洞(如Heartbleed)。2049NFS网络文件系统,配置不当会导致未授权文件访问。3306MySQL数据库服务,弱密码或SQL注入漏洞常见攻击目标。

​​重点协议及高危端口详解​​

​​1. SMB(445/TCP)​​• 高危原因:SMB协议用于Windows文件共享,但漏洞频发(如永恒之蓝)。攻击者可利用漏洞远程执行代码,传播勒索病毒或横向移动。

• 防护建议:关闭445端口,升级系统补丁,启用SMBv3加密。

​​2. RDP(3389/TCP)​​• 高危原因:远程桌面默认端口,弱密码易被暴力破解,0day漏洞(如BlueKeep)可导致蠕虫级攻击。

• 防护建议:限制IP白名单访问,启用网络级认证(NLA),使用VPN替代直接暴露。

​​3. SSH(22/TCP)​​• 高危原因:Linux核心管理通道,若使用弱密码或未更新OpenSSH版本(如CVE-2024-3094漏洞),易被入侵。

• 防护建议:禁用root远程登录,启用密钥认证,限制失败登录尝试次数。

​​4. NetBIOS(137-139/UDP)​​• 高危原因:Windows老旧协议,通过UDP广播泄露主机名、共享目录等信息,常用于内网渗透。

• 防护建议:禁用NetBIOS over TCP/IP,关闭SMBv1协议。

​​5. NFS(2049/TCP)​​• 高危原因:Linux文件共享协议,默认无加密,配置错误会导致敏感数据暴露。

• 防护建议:限制访问IP范围,启用Kerberos认证,避免导出敏感目录。

​​6. MySQL(3306/TCP)​​• 高危原因:默认允许远程连接,弱口令(如root空密码)或注入漏洞可导致数据泄露。

• 防护建议:禁止远程root登录,启用防火墙规则,定期审计SQL语句。

​​补充说明​​• 端口安全通用原则:

• 关闭非必要端口(如Windows的135-139、Linux的111);

• 使用加密协议替代明文协议(如SFTP替代FTP);

• 定期扫描端口开放情况(netstat -ano或ss -tunlp)。

• 高危端口列表:包括445、3389、22、3306、2049等,需优先加固。

常见TCP端口号及对应的字符串

端口号字符串协议说明7echoEchoEcho服务9discardDiscard用于连接测试的空服务13daytimeDaytime给请求主机发送日期和时间19CHARgenCharacter generator字符生成服务;发送无止境的字符流20ftp-dataFTP data connectionsFTP数据端口21ftpFile Transfer Protocol(FTP)文件传输协议(FTP)端口23telnetTelnetTelnet服务25smtpSimple Mail Transport Protocol (SMTP)简单邮件传输协议37timeTime时间协议43whoisNickname(WHOIS)目录服务49tacacsTAC Access Control System (TACACS)用于基于TCP/IP验证和访问的访问控制系统(TACACS登录主机协议)53domainDomain Name Service (DNS)域名服务70gopherGopher信息检索协议(互联网文档搜寻和检索)79fingerFinger用于用户联系信息的Finger服务,查询远程主机在线用户等信息80wwwWorld Wide Web (HTTP)用于万维网(WWW)服务的超文本传输协议(HTTP),用于网页浏览101hostnameNIC hostname serverNIC机器上的主机名服务109pop2Post Office Protocol v2邮件协议-版本2110pop3Post Office Protocol v3邮件协议-版本3111sunrpcSun Remote Procedure Call (RPC)SUN公司的远程过程调用(RPC)协议,用于远程命令执行,被网络文件系统(NFS)使用119nntpNetwork News Transport Protocol (NNTP)网络新闻传输协议,承载USENET通信179bgpBorder Gateway Protocol (BGP)边界网关协议194ircInternet Relay Chat (IRC)互联网中继聊天(多线交谈协议)512execExec (rsh)用于对远程执行的进程进行验证513loginLogin (rlogin)远程登录514cmdRemote commands远程命令,不必登录的远程shell(rshell)和远程复制(rcp)515lpdPrinter service打印机(lpr)假脱机517talkTalk远程对话服务和客户540uucpUnix-to-Unix Copy ProgramUnix到Unix复制服务543kloginKerberos loginKerberos版本5(v5)远程登录544kshellKerberos shellKerberos版本5(v5)远程shell

常见UDP端口号及对应的字符串

端口号字符串协议说明7echoEchoEcho服务9discardDiscard用于连接测试的空服务37timeTime时间协议42nameserverHost Name Server主机名服务53dnsDomain Name Service (DNS)域名服务65tacacs-dsTACACS-Database ServiceTACACS数据库服务67bootpsBootstrap Protocol Server引导程序协议(BOOTP)服务端,DHCP服务使用68bootpcBootstrap Protocol Client引导程序协议(BOOTP)客户端,DHCP客户使用69tftpTrivial File Transfer Protocol (TFTP)小文件传输协议90dnsixDNSIX Security Attribute Token MapDNSIX安全属性标记图111sunrpcSUN Remote Procedure Call (SUN RPC)SUN公司的远程过程调用(RPC)协议,用于远程命令执行,被网络文件系统(NFS)使用123ntpNetwork Time Protocol (NTP)网络时间协议,蠕虫病毒会利用137netbios-nsNETBIOS Name ServiceNETBIOS名称服务138netbios-dgmNETBIOS Datagram ServiceNETBIOS数据报服务139netbios-ssnNETBIOS Session ServiceNETBIOS会话服务161snmpSNMP简单网络管理协议162snmptrapSNMPTRAPSNMP陷阱177xdmcpX Display Manager Control Protocol (XDMCP)X显示管理器控制协议434mobilip-agMobileIP-Agent移动IP代理435mobilip-mnMobileIP-MN移动IP管理512biffMail notify异步邮件,可用来通知用户有邮件到达513whoWho登录的用户列表514syslogSyslogUNIX系统日志服务517talkTalk远程对话服务器和客户端520ripRouting Information ProtocolRIP路由协议

入侵检测规则匹配算法全景解析与性能对比

入侵检测规则匹配算法全景解析与性能对比

本文将深入剖析单模式/多模式匹配算法的核心原理,并结合Intel Hyperscan的创新架构,揭示其在网络安全领域的革命性突破。所有技术示意图均基于公开论文与官方文档构建,字符图片图1:模式匹配算法演进时间轴(1960s-KMP→1977-BM→1975-AC→2015-Hyperscan)

一、单模式匹配算法矩阵

算法跳跃机制时间复杂度典型应用场景BF逐字符滑动O(n*m)短文本快速验证RK哈希值跳跃O(n)低冲突率内容过滤BM坏字符/好后缀O(n/m)HTTP协议字段检测KMP部分匹配表O(n)日志连续特征分析

字符图片图2:BM算法双重跳跃机制(坏字符规则:跳跃未匹配字符;好后缀规则:复用已匹配后缀)

BM算法的核心创新在于双重规则协同:当主串字符与模式串不匹配时,优先根据坏字符规则计算跳跃位数(如主串出现未在模式串中的字符可跳跃整个模式串长度),若已匹配部分存在重复后缀,则通过好后缀规则二次优化滑动距离。实验表明改进后的BM算法较传统版本减少20%比较次数。

二、多模式匹配技术突破

字符图片图3:AC自动机三指针联动(goto构建Trie主干,failure实现后缀回溯,output标记终结状态)

  • Trie树优化路径:通过公共前缀压缩存储空间(如”she”与”he”共享”h”节点),支持百万级规则库构建

  • 动态失效指针:通过BFS生成failure跳转表,使匹配失败时快速定位相似模式

AC自动机的核心优势在于状态机复用:以”hishers”匹配为例,当匹配到”his”时failure指针跳转至”is”前缀,实现跨模式串的连续检测,50万规则库匹配耗时仅O(n)。

三、Hyperscan架构革命

字符图片图4:Hyperscan混合自动机架构(DFA处理简单规则,NFA应对复杂语法,SIMD加速并行处理)

Lazy DFA技术:动态构建最小化状态,内存占用较传统DFA减少90%

AVX-512指令加速:16字节并行处理使单核吞吐量达100Gbps

流状态压缩:通过差分编码将千兆级状态压缩至10MB内存

字符图片图5:Hyperscan与AC自动机性能对比(Xeon Platinum 8380测试环境)

四、关键指标对比

维度AC自动机Wu-ManberHyperscan规则容量10万级5万级50万+内存占用GB级500MB10MB流延迟50ms20ms<1ms正则支持基础语法有限扩展PCRE全集

Hyperscan的突破性设计使其在Snort、Suricata等开源IDS/IPS中实现大规模部署,通过DPDK集成可达到线速处理能力。其流模式下的状态压缩技术,成功解决了跨报文匹配的完整性难题。

技术文档参考:: https://blog.csdn.net/gengzhikui1992/article/details/105424680: https://example.com/BM算法改进研究: https://blog.csdn.net/bladelyer/article/details/BM算法详解: https://blog.csdn.net/AC多模式匹配算法: https://blog.csdn.net/AC自动机原理: https://intel.com/hyperscan官方文档: https://blog.csdn.net/DPDK集成性能分析: https://blog.csdn.net/Hyperscan流模式解析

入侵检测规则匹配算法

入侵检测规则匹配算法,分为单模式匹配算法和多模式匹配算法。

单模式匹配单模式匹配,就是一个串跟一个串进行匹配,常见算法有:BM算法和KMP算法。

1.1 BF (Brute Force)暴力匹配算法作为最简单、最暴力的字符串匹配算法,BF 算法的思想可以用一句话来概括,那就是,我们在主串中,检查起始位置分别是 0、1、2…n-m 且长度为 m 的 n-m+1 个子串,看有没有跟模式串匹配的。

理论上的最坏情况时间复杂度是 O(n*m),但是,统计意义上,大部分情况下,算法执行效率要比这个高很多。朴素字符串匹配算法思想简单,代码实现也非常简单。简单意味着不容易出错,如果有 bug 也容易暴露和修复。

2.2 RK(Rabin-Karp) 算法BF算法每次检查主串与子串是否匹配,需要依次比对每个字符,所以 BF 算法的时间复杂度就比较高,是 O(n*m)。

RK 算法的思路是这样的:我们通过哈希算法对主串中的 n-m+1 个子串分别求哈希值,然后逐个与模式串的哈希值比较大小。如果某个子串的哈希值与模式串相等,那就说明对应的子串和模式串匹配了。

模式串哈希值与每个子串哈希值之间的比较的时间复杂度是 O(1),总共需要比较 n-m+1 个子串的哈希值,所以,这部分的时间复杂度也是 O(n)。所以,RK 算法整体的时间复杂度就是 O(n)。

跟 BF 算法相比,效率提高了很多。不过这样的效率取决于哈希算法的设计方法,如果存在冲突的情况下,时间复杂度可能会退化。极端情况下,哈希算法大量冲突,时间复杂度就退化为 O(n*m)。

2.3 BM(Boyer-Moore)算法参考:http://www.cs.jhu.edu/~langmea/resources/lecture_notes/boyer_moore.pdf

我们把模式串和主串的匹配过程,看作模式串在主串中不停地往后滑动。当遇到不匹配的字符时,BF 算法和 RK 算法的做法是,模式串往后滑动一位,然后从模式串的第一个字符开始重新匹配。

如果我们可以一次性往后滑动好几位,那匹配的效率岂不是就提高了?

BM 算法,本质上其实就是在寻找这种规律,当模式串和主串某个字符不匹配的时候,能够跳过一些肯定不会匹配的情况,将模式串往后多滑动几位。

BM 算法构建的规则有两类,坏字符规则和好后缀规则。

坏字符规则:If we mismatch, use knowledge of the mismatched text character to skip alignments好后缀规则:If we match some characters, use knowledge of the matched characters to skip alignments2.4 KMP算法KMP 算法的核心思想,跟上一节讲的 BM 算法非常相近。我们假设主串是 a,模式串是 b。在模式串与主串匹配的过程中,当遇到不可匹配的字符的时候,我们希望找到一些规律,可以将模式串往后多滑动几位,跳过那些肯定不会匹配的情况

多模式匹配多模式匹配,在一个串中同时查找多个串,常见算法有:AC自动机算法和Trie树算法。

2.1 Trie树Trie 树,也叫“字典树”。顾名思义,它是一个树形结构。它是一种专门处理字符串匹配的数据结构,用来解决在一组字符串集合中快速查找某个字符串的问题。

举个简单的例子来说明一下。我们有 6 个字符串,它们分别是:how,hi,her,hello,so,see。我们希望在里面多次查找某个字符串是否存在。如果每次查找,都是拿要查找的字符串跟这 6 个字符串依次进行字符串匹配,那效率就比较低,有没有更高效的方法呢?这个时候,我们就可以先对这 6 个字符串做一下预处理,组织成 Trie 树的结构,之后每次查找,都是在 Trie 树中进行匹配查找。

Trie 树的本质,就是利用字符串之间的公共前缀,将重复的前缀合并在一起。

如果要在一组字符串中,频繁地查询某些字符串,用 Trie 树会非常高效。

构建 Trie 树的过程,需要扫描所有的字符串,时间复杂度是 O(n)(n 表示所有字符串的长度和)。

但是一旦构建成功之后,后续的查询操作会非常高效。如果要查询的字符串长度是 k,那我们只需要比对大约 k 个节点,就能完成查询操作。跟原本那组字符串的长度和个数没有任何关系。所以说,构建好 Trie 树后,在其中查找字符串的时间复杂度是 O(k),k 表示要查找的字符串的长度。

字符串中包含的字符集不能太大,要求字符串的前缀重合比较多,如果字符集太大,那存储空间可能就会浪费很多。即便可以优化,但也要付出牺牲查询、插入效率的代价。

2.2 AC( Aho-Corasick)自动机假设需要模式串有上万个,通过单模式串匹配算法(比如 KMP 算法),需要扫描几千遍。很显然,这种处理思路比较低效。

Trie 树就是一种多模式串匹配算法。我们用Trie树可以对上千个模式串字典进行预处理,构建成 Trie 树结构。这个预处理的操作只需要做一次,如果字典动态更新了,比如删除、添加了一个模式串,那我们只需要动态更新一下 Trie 树就可以了。

HyperscanHyperscan是一款来自于Intel的高性能的正则表达式匹配库。它是基于X86平台以PCRE为原型而开发的,并以BSD许可开源在https://01.org/hyperscan。在支持PCRE的大部分语法的前提下,Hyperscan增加了特定的语法和工作模式来保证其在真实网络场景下的实用性。与此同时,大量高效算法及IntelSIMD*指令的使用实现了Hyperscan的高性能匹配。Hyperscan适用于部署在诸如DPI/IPS/IDS/FW等场景中,目前已经在全球多个客户网络安全方案中得到实际的应用。此外,Hyperscan还支持和开源IDS/IPS产品Snort(https://www.snort.org)和Suricata (https://suricata-ids.org)集成,使其应用更加广泛。

3.1 功能功能多样

作为纯软件产品,Hyperscan支持Intel处理器多平台的交叉编译,且对操作系统无特殊限定,同时支持虚拟机和容器场景。Hyperscan 实现了对PCRE语法的基本涵盖,对复杂的表达式例如”.”和”[^>]”不会有任何支持问题。在此基础上,Hyperscan增加了不同的匹配模式(流模式和块模式)来满足不同的使用场景。通过指定参数,Hyperscan能找到匹配的数据在输入流中的起始和结束位置。更多功能信息请参考http://01org.github.io/hyperscan/dev-reference/。

大规模匹配

根据规则复杂度的不同,Hyperscan能支持几万到几十万的规则的匹配。与传统正则匹配引擎不同,Hyperscan支持多规则的同步匹配。在用户为每条规则指定独有的编号后,Hypercan可以将所有规则编译成一个数据库并在匹配过程中输出所有当前匹配到的规则信息。

流模式(streaming mode)

Hyperscan主要分为两种模式:块模式 (blockmode)和流模式 (streaming mode). 其中块模式为状态正则匹配引擎具有的模式,即对一段现成的完整数据进行匹配,匹配结束即返回结果。流模式是Hyperscan为网络场景下跨报文匹配设计的特殊匹配模式。在真实网络场景下,数据是分散在多报文中。若有数据在尚未到达的报文中时,传统匹配模式将无法适用。在流模式下,Hyperscan可以保存当前数据匹配的状态,并以其作为接收到新数据时的初始匹配状态。如图3所示,不管数据”xxxxabcxxxxxxxxdefx”以怎样的形式被分散在以时间顺序到达的报块中,流模式保证了最后匹配结果的一致性。另外,Hyperscan对保存的匹配状态进行了压缩以减少流模式对内存的占用。Hyperscan流模式解决了数据完整性问题,极大地简化用户网络流处理的过程。

3.2 原理Hyperscan以自动机理论为基础,其工作流程主要分成两个部分:编译期(compiletime)和运行期(run-time)。

编译期Hyperscan 自带C++编写的正则表达式编译器。如图1所示,它将正则表达式作为输入,针对不同的IA平台,用户定义的模式及特殊语法,经过复杂的图分析及优化过程,生成对应的数据库。另外,生成的数据库可以被序列化后保存在内存中,以供运行期提取使用。

Hyperscan的运行期是通过C语言来开发的。用户需要预先分配一段内存来存储临时匹配状态信息,之后利用编译生成的数据库调用Hyperscan内部的匹配引擎(NFA, DFA等)来对输入进行模式匹配。Hyperscan在引擎中使用Intel处理器所具有的SIMD指令进行加速。同时,用户可以通过回调函数来自定义匹配发生后采取的行为。由于生成的数据库是只读的,用户可以在多个CPU核或多线程场景下共享数据库来提升匹配扩展性。————————————————

原文链接:https://blog.csdn.net/gengzhikui1992/article/details/105424680

在GDB调试器中打印数组的所有值,可以通过以下方法实现

在GDB调试器中打印数组的所有值,可以通过以下方法实现:

一、静态数组打印

直接打印数组名对于静态数组(如int arr[5]),直接使用 p arr 命令即可打印全部元素。但需注意默认最多显示200个元素,超出部分会被截断。

1
2
(gdb) p arr
$1 = {10, 20, 30, 40, 50}

强制显示全部元素若数组长度超过默认限制,需通过 set print elements 0 解除限制:

1
2
(gdb) set print elements 0
(gdb) p arr # 此时会显示所有元素

二、动态数组(指针形式)打印

使用指针+长度语法对于动态分配的数组(如int *ptr),使用 p *ptr@len 格式,其中 len 为元素个数。

1
2
(gdb) p *ptr@10  # 打印前10个元素
$2 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

结合变量长度若数组长度存储在变量中(如int a=10),可直接引用变量:

1
(gdb) p *ptr@a  # 打印ptr指向的数组的前a个元素

三、高级显示设置

显示数组下标通过 set print array-indexes on 开启下标显示,便于定位元素位置:

1
2
3
(gdb) set print array-indexes on
(gdb) p arr
$3 = {&#91;0] = 10, &#91;1] = 20, &#91;2] = 30, &#91;3] = 40, &#91;4] = 50}

指定起始索引使用 p buffer[3]@5 格式打印从索引3开始的连续5个元素:

1
2
(gdb) p buffer&#91;3]@5
$4 = {3, 4, 5, 6, 7}

四、其他场景

  • C++ Vector容器:直接使用 p vec 命令(需调试符号支持):
1
2
(gdb) p vec
$5 = std::vector of length 5 = {100, 200, 300, 400, 500}
  • 内存地址转数组:对任意内存地址(如0x7fff0008c0),使用强制类型转换:
1
(gdb) p *(int(*)&#91;])0x7fff0008c0@10  # 以int数组形式打印

注意事项

  • 若输出被截断,优先检查 print elements 的设置。

  • 动态数组需确保指针有效且长度不越界。

  • 对复杂数据结构(如嵌套数组),可结合 ptype 命令查看类型定义。

程序员在选择副业怎么做

https://calcguide.tech/2025/08/06/what-programmers-should-consider-when-choosing-a-side-hustle/

https://calcguide.tech/2025/08/06/how-programmers-can-choose-side-hustles-smartly-practical-guideหัวข้อ-โ/

  1. 开发轻量级 SaaS 工具
  • 特点:一次开发,长期订阅付费,服务器成本随用户量自动扩展。

  • 案例:

  • • SEO 检查工具:用户输入网址自动生成优化报告(技术栈:Python + AWS Lambda)。

  • • 社交媒体排期工具:批量生成帖子并同步到多个平台(利用第三方API,如Twitter/Facebook API)。

  • • 薪资计算器:针对自由职业者的税费计算工具。

  • 成本控制:使用Serverless架构(如Vercel、AWS Lambda)减少服务器开支。

  1. 在线教育 & 知识付费
  • 特点:内容一次制作,无限次销售,平台自动分发。

  • 案例:

  • • 录播课程:在Udemy/慕课网发布《React高级实战》,或自建网站销售。

  • • 电子书/手册:编写《TypeScript最佳实践》通过Gumroad销售PDF。

  • • 付费订阅内容:通过Substack发布技术Newsletter(如《架构设计周刊》)。

  • 工具推荐:用OBS录制课程,Canva制作课件,Thinkific搭建付费站。

  1. 开源项目商业化
  • 特点:免费版引流,企业版收费,维护成本低。

  • 案例:

  • • 开源库收费增强版:如Ag-Grid社区版免费,企业版提供高级功能。

  • • GitHub Sponsors:通过技术影响力获取捐赠(如Vue.js核心成员)。

  • • 插件市场:为开源项目(如WordPress)开发付费插件。

  • 关键点:选择高频使用场景(如数据表格、图表库)。

  1. API 服务
  • 特点:封装技术能力为API,按调用次数收费。

  • 案例:

  • • OCR识别API:调用Tesseract引擎封装为REST API(定价:0.001美元/次)。

  • • AI模型服务:提供文本情感分析、图像风格迁移API。

  • • 数据聚合API:爬取公开数据(如股票价格)提供结构化接口。

  • 平台推荐:快速部署到APILayer、RapidAPI等市场。

  1. 数字产品 & 模板
  • 特点:零交付成本,自动化销售。

  • 案例:

  • • 代码模板:销售Next.js电商模板、Flutter应用脚手架。

  • • 设计资源:开发Figma组件库(如Dashboard UI Kit)。

  • • Chrome插件:解决小众需求(如「Github代码行数统计器」)。

  • 渠道:Gumroad、Creative Market、Envato Market。

  1. 内容创作 & 广告分成
  • 特点:流量积累后,广告/联盟收入边际成本趋零。

  • 案例:

  • • 技术博客:通过Google AdSense、Carbon Ads赚取广告费。

  • • YouTube/B站教程:平台分成+品牌赞助(如编程工具推广)。

  • • 技术书籍联属营销:推荐Amazon技术书籍获取佣金。

  • 工具:用Hugo/Jekyll搭建静态博客,自动SEO优化。

  1. 自动化工具 & 机器人
  • 特点:代码自动化替代人工,规模化变现。

  • 案例:

  • • Discord管理机器人:自动审核、欢迎消息、数据统计。

  • • Twitter增长工具:自动关注/取关、内容排期(需遵守平台规则)。

  • • RPA脚本:为企业提供Excel数据清洗自动化脚本。

  • 技术栈:Python + Selenium/AutoHotkey。

  1. 会员制社区
  • 特点:知识沉淀+用户粘性,边际服务成本低。

  • 案例:

  • • 付费技术社群:Discord/知识星球提供答疑、资源分享。

  • • LeetCode刷题群:每周发布精选题目+题解。

  • • 开源协作社区:付费参与内部项目共建。

  • 工具:用Discord机器人自动管理会员权限。

  1. 模板 & 主题销售
  • 特点:一次开发,多平台分发。

  • 案例:

  • • Notion模板:销售项目管理、读书笔记模板。

  • • WordPress主题:开发轻量级博客主题上架ThemeForest。

  • • 简历生成器:提供LaTeX/HTML简历模板,支持一键导出PDF。

  1. 联盟营销(Affiliate)
  • 特点:零库存,推荐技术产品获取佣金。

  • 案例:

  • • 云服务推荐:推荐AWS/Azure,用户注册后获取返利。

  • • 开发工具推广:如GitHub Copilot、JetBrains全家桶。

  • • 在线课程分销:Udemy讲师可设置课程分销分成。

选择建议

从自身技能出发:优先复用已有技术栈(如前端开发可做Chrome插件)。

验证需求:通过Reddit、Indie Hackers等社区测试产品创意。

自动化流程:用GitHub Actions自动部署、Zapier连接支付/邮件通知。

合规性:注意数据隐私(如GDPR)、税务申报(注册个体户简化流程)。

核心公式:睡后收入 = 低边际成本 + 可规模化 + 自动化交付

从上述方向中选择1-2个快速启动(例如先开发一个Chrome插件或发布电子书),逐步迭代优化,可有效平衡主业与副业精力。

程序员在选择副业时,边际成本低(即用户量增长时成本几乎不增加)的项目往往能实现“睡后收入”。以下是一些高性价比的方向及具体案例:

  1. 开发轻量级 SaaS 工具
  • 特点:一次开发,长期订阅付费,服务器成本随用户量自动扩展。

  • 案例: • SEO 检查工具:用户输入网址自动生成优化报告(技术栈:Python + AWS Lambda)。 • 社交媒体排期工具:批量生成帖子并同步到多个平台(利用第三方API,如Twitter/Facebook API)。 • 薪资计算器:针对自由职业者的税费计算工具。

  • 成本控制:使用Serverless架构(如Vercel、AWS Lambda)减少服务器开支。

  1. 在线教育 & 知识付费
  • 特点:内容一次制作,无限次销售,平台自动分发。

  • 案例: • 录播课程:在Udemy/慕课网发布《React高级实战》,或自建网站销售。 • 电子书/手册:编写《TypeScript最佳实践》通过Gumroad销售PDF。 • 付费订阅内容:通过Substack发布技术Newsletter(如《架构设计周刊》)。

  • 工具推荐:用OBS录制课程,Canva制作课件,Thinkific搭建付费站。

  1. 开源项目商业化
  • 特点:免费版引流,企业版收费,维护成本低。

  • 案例: • 开源库收费增强版:如Ag-Grid社区版免费,企业版提供高级功能。 • GitHub Sponsors:通过技术影响力获取捐赠(如Vue.js核心成员)。 • 插件市场:为开源项目(如WordPress)开发付费插件。

  • 关键点:选择高频使用场景(如数据表格、图表库)。

  1. API 服务
  • 特点:封装技术能力为API,按调用次数收费。

  • 案例: • OCR识别API:调用Tesseract引擎封装为REST API(定价:0.001美元/次)。 • AI模型服务:提供文本情感分析、图像风格迁移API。 • 数据聚合API:爬取公开数据(如股票价格)提供结构化接口。

  • 平台推荐:快速部署到APILayer、RapidAPI等市场。

  1. 数字产品 & 模板
  • 特点:零交付成本,自动化销售。

  • 案例: • 代码模板:销售Next.js电商模板、Flutter应用脚手架。 • 设计资源:开发Figma组件库(如Dashboard UI Kit)。 • Chrome插件:解决小众需求(如「Github代码行数统计器」)。

  • 渠道:Gumroad、Creative Market、Envato Market。

  1. 内容创作 & 广告分成
  • 特点:流量积累后,广告/联盟收入边际成本趋零。

  • 案例: • 技术博客:通过Google AdSense、Carbon Ads赚取广告费。 • YouTube/B站教程:平台分成+品牌赞助(如编程工具推广)。 • 技术书籍联属营销:推荐Amazon技术书籍获取佣金。

  • 工具:用Hugo/Jekyll搭建静态博客,自动SEO优化。

  1. 自动化工具 & 机器人
  • 特点:代码自动化替代人工,规模化变现。

  • 案例: • Discord管理机器人:自动审核、欢迎消息、数据统计。 • Twitter增长工具:自动关注/取关、内容排期(需遵守平台规则)。 • RPA脚本:为企业提供Excel数据清洗自动化脚本。

  • 技术栈:Python + Selenium/AutoHotkey。

  1. 会员制社区
  • 特点:知识沉淀+用户粘性,边际服务成本低。

  • 案例: • 付费技术社群:Discord/知识星球提供答疑、资源分享。 • LeetCode刷题群:每周发布精选题目+题解。 • 开源协作社区:付费参与内部项目共建。

  • 工具:用Discord机器人自动管理会员权限。

  1. 模板 & 主题销售
  • 特点:一次开发,多平台分发。

  • 案例: • Notion模板:销售项目管理、读书笔记模板。 • WordPress主题:开发轻量级博客主题上架ThemeForest。 • 简历生成器:提供LaTeX/HTML简历模板,支持一键导出PDF。

  1. 联盟营销(Affiliate)
  • 特点:零库存,推荐技术产品获取佣金。

  • 案例: • 云服务推荐:推荐AWS/Azure,用户注册后获取返利。 • 开发工具推广:如GitHub Copilot、JetBrains全家桶。 • 在线课程分销:Udemy讲师可设置课程分销分成。

选择建议

从自身技能出发:优先复用已有技术栈(如前端开发可做Chrome插件)。

验证需求:通过Reddit、Indie Hackers等社区测试产品创意。

自动化流程:用GitHub Actions自动部署、Zapier连接支付/邮件通知。

合规性:注意数据隐私(如GDPR)、税务申报(注册个体户简化流程)。

核心公式:睡后收入 = 低边际成本 + 可规模化 + 自动化交付

从上述方向中选择1-2个快速启动(例如先开发一个Chrome插件或发布电子书),逐步迭代优化,可有效平衡主业与副业精力。

链表超详细总结

一、基本概念与特性

定义与结构链表是一种物理存储非连续的线性数据结构,其逻辑顺序通过节点间的指针链接实现。每个节点包含两个部分:• 数据域:存储实际数据(如整数、字符串等)。 • 指针域:指向下一个节点的地址(单链表),或前驱/后继节点的地址(双向链表)。

核心特性• 动态内存管理:链表节点在运行时动态生成,无需预先分配连续内存空间,适合处理未知规模的数据。 • 高效插入/删除:插入和删除操作的时间复杂度为 O(1)(若已知节点位置),但查找特定节点需要 O(n) 时间。 • 空间开销:每个节点需额外存储指针,空间利用率低于数组。

二、链表的分类

单向链表• 结构:每个节点仅包含指向后继节点的指针。 • 应用场景:简单场景(如栈、队列的实现)或作为其他数据结构的子结构(如哈希桶)。

双向链表• 结构:节点包含前驱和后继指针,支持双向遍历。 • 优势:删除和反向遍历效率高,常用于需要频繁前向/后向操作的数据管理。

循环链表• 结构:尾节点指向头节点,形成闭环,适用于周期性操作(如轮询任务调度)。 • 变体:双向循环链表进一步结合双向指针和循环特性。

三、基本操作与实现

核心操作• 插入 ◦ 头插法:将新节点插入链表头部(需更新头指针)。 ◦ 尾插法:遍历至链表尾部插入节点,时间复杂度为 O(n)。 • 删除 ◦ 头删:直接移动头指针并释放内存。 ◦ 中间删除:需定位前驱节点以调整指针。 • 遍历:从头指针开始逐个访问节点,直至遇到 NULL(单链表)或头节点(循环链表)。

高级操作• 反转链表:通过迭代或递归调整指针方向。 # 示例:Python迭代法反转链表(模拟实现) def reverse(self): prev = None current = self.head while current: next_node = current.next current.next = prev prev = current current = next_node self.head = prev # 网页10 • 合并链表:归并排序中常用双指针法合并有序链表。 • 环形检测:快慢指针法(Floyd算法)判断链表是否存在环。

四、链表的优缺点

优点缺点动态扩展内存,无需预先分配固定空间查找效率低(需遍历)插入/删除高效(无需移动其他元素)指针占用额外内存,空间利用率较低灵活支持复杂操作(如双向遍历)对缓存不友好(非连续存储)

五、应用场景

内存管理:动态分配内存块时使用链表跟踪空闲内存区域。

图的邻接表:存储图的顶点及其邻接关系。

哈希表冲突解决:通过链地址法处理哈希冲突。

任务调度:循环链表实现轮询调度算法。

六、实现注意事项

边界处理:需处理空链表、头尾节点等特殊情况(如删除最后一个节点时需更新尾指针)。

内存泄漏:动态分配节点后需手动释放内存(C/C++中需调用 free() 或 delete)。

语言差异:• Python:通过类模拟链表(如定义 Node 类和 LinkedList 类)。 • C/C++:需显式管理指针和内存。

七、总结链表是灵活且动态的数据结构,适用于频繁增删的场景,但需权衡其空间开销和查找效率。掌握其核心操作(如插入、删除、反转)及分类特性(如双向、循环)是解决复杂算法问题(如LRU缓存、合并K个有序链表)的关键。

链表超详细总结, 链表 数据结构 详解, 链表 基本概念 与特性, 链表 结构 与原理, 链表 线性数据结构 特点, 链表 逻辑顺序 指针链接, 链表 学习总结 全面解析, 链表 详细讲解 通俗易懂, 链表 定义 与结构 分析, 链表 知识点 总结 教程