linux: ip route 与 route 用法详解与对比

文章目录

  • 1. 引言
  • 2. ip route
    • 2.1 描述
    • 2.2 语法
    • 2.3 参数
    • 2.4 例子
  • 3. route
    • 3.1 描述
    • 3.2 语法
    • 3.3 参数
    • 3.4 例子
  • 4. 对比
  • 5. 参考


1. 引言

本文主要介绍 ip route 以及 route 的用法和区别。

2. ip route

2.1 描述

用于管理静态路由表。linux 系统中,可以自定义从 1-252个路由表。其中,linux系统维护了4个路由表:

  • 0 表: 系统保留表
  • 253 表: default table 没特别指定的默认路由都放在该表
  • 254 表: main table 没指明路由表的所有路由放在该表
  • 255 表: local table 保存本地接口地址,广播地址、NAT地址 由系统维护,用户不得更改

2.2 语法

ip route help

# 以下是输出:
Usage: ip route { list | flush } SELECTOR
       ip route save SELECTOR
       ip route restore
       ip route showdump
       ip route get [ ROUTE_GET_FLAGS ] ADDRESS
                            [ from ADDRESS iif STRING ]
                            [ oif STRING ] [ tos TOS ]
                            [ mark NUMBER ] [ vrf NAME ]
                            [ uid NUMBER ] [ ipproto PROTOCOL ]
                            [ sport NUMBER ] [ dport NUMBER ]
       ip route { add | del | change | append | replace } ROUTE
SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
            [ table TABLE_ID ] [ vrf NAME ] [ proto RTPROTO ]
            [ type TYPE ] [ scope SCOPE ]
ROUTE := NODE_SPEC [ INFO_SPEC ]
NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]
             [ table TABLE_ID ] [ proto RTPROTO ]
             [ scope SCOPE ] [ metric METRIC ]
             [ ttl-propagate { enabled | disabled } ]
INFO_SPEC := { NH | nhid ID } OPTIONS FLAGS [ nexthop NH ]...
NH := [ encap ENCAPTYPE ENCAPHDR ] [ via [ FAMILY ] ADDRESS ]
	    [ dev STRING ] [ weight NUMBER ] NHFLAGS
FAMILY := [ inet | inet6 | mpls | bridge | link ]
OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ] [ as [ to ] ADDRESS ]
           [ rtt TIME ] [ rttvar TIME ] [ reordering NUMBER ]
           [ window NUMBER ] [ cwnd NUMBER ] [ initcwnd NUMBER ]
           [ ssthresh NUMBER ] [ realms REALM ] [ src ADDRESS ]
           [ rto_min TIME ] [ hoplimit NUMBER ] [ initrwnd NUMBER ]
           [ features FEATURES ] [ quickack BOOL ] [ congctl NAME ]
           [ pref PREF ] [ expires TIME ] [ fastopen_no_cookie BOOL ]
TYPE := { unicast | local | broadcast | multicast | throw |
          unreachable | prohibit | blackhole | nat }
TABLE_ID := [ local | main | default | all | NUMBER ]
SCOPE := [ host | link | global | NUMBER ]
NHFLAGS := [ onlink | pervasive ]
RTPROTO := [ kernel | boot | static | NUMBER ]
PREF := [ low | medium | high ]
TIME := NUMBER[s|ms]
BOOL := [1|0]
FEATURES := ecn
ENCAPTYPE := [ mpls | ip | ip6 | seg6 | seg6local | rpl ]
ENCAPHDR := [ MPLSLABEL | SEG6HDR ]
SEG6HDR := [ mode SEGMODE ] segs ADDR1,ADDRi,ADDRn [hmac HMACKEYID] [cleanup]
SEGMODE := [ encap | inline ]
ROUTE_GET_FLAGS := [ fibmatch ]
# 操作 Linux 系统中路由表的命令。
# 具体来说,这个命令可以列出或清除符合特定条件的路由。
# SELECTOR 可以是一个具体的 IP 地址、一个 IP 地址范围,或者一个特定的网络接口。
# list:列出符合 SELECTOR 条件的路由。
# flush:清除符合 SELECTOR 条件的路由。
ip route { list | flush } SELECTOR

SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
            [ table TABLE_ID ] [ proto RTPROTO ]
            [ type TYPE ] [ scope SCOPE ]
# 用于从先前保存的路由表中恢复原有的路由表。
# 请注意,该命令需要读取用 ip route save 保存的数据流。
ip route restore
# 将当前符合 SELECTOR 条件的路由保存到系统中,以便在将来可以恢复或回滚到这些路由。
ip route save SELECTOR
# 用于显示路由表中的路由记录。帮助查看路由表中存储的路由信息,包括目标地址、网关、接口等
ip route showdump
# 用于获取特定 IP 地址的路由信息。这个命令可以帮助了解从当前主机到指定 IP 地址的数据包路由路径。
ip route get ADDRESS [ from ADDRESS iif STRING ]
                    [ oif STRING ]  [ tos TOS ]
                    [ mark NUMBER ]
可选的 option:
- to ADDRESS (default):目的地址
- from ADDRESS:源地址
- tos TOS:服务类型
- iif NAME:此数据包预期从中到达的设备
- oif NAME:强制将此数据包路由到的输出设备
- connected:如果未给出源地址(选项from),则重新查找源设置为从第一次查找收到的首选地址的路由。 如果使用策略路由,则可能是其他路由
# 常用命令
ip route delete # 删除路由
ip route flush  # 清空路由表或删除特定目标的路由

ip route add/change/replace
可选的 option:
- to TYPE PREFIX (default):路由的目标前缀。如果省略TYPE,则ip采用unicast类型。上面列出了其他类型的值。前缀是一个IP或IPv6地址,后跟斜杠和前缀长度。如果前缀的长度丢失,ip将采用全长主机路由。还有一个特殊的前缀默认值-相当于IP 0/0或IPv6::/0。
- tos TOS:服务类型(TOS)密钥。这个密钥没有相关的掩码,最长的匹配被理解为:首先,比较路由和包的TOS。如果它们不相等,则分组仍然可以匹配具有零TOS的路由。TOS是8位十六进制数或/etc/iproute2/rt_dsfield中的标识符。
- metric :跳数,该条路由记录的质量,一般情况下,如果有多条到达相同目的地的路由记录,路由器会采用metric值小的那条路由
- table TABLEID:要将此路由添加到的表。TABLEID可以是文件/etc/iproute2/rt_tables中的数字或字符串。如果省略此参数,ip将采用主表,但本地、广播和nat路由除外,默认情况下,这些路由将放入本地表中
- dev NAME:输出设备名称
- via ADDRESS:下一跳路由器的地址。 实际上,此字段的含义取决于路由类型。 对于普通的单播路由,它要么是真正的下一跳路由器,要么是以BSD兼容模式安装的直接路由,它可以是接口的本地地址。 对于NAT路由,它是已转换IP目标块的第一个地址
- src ADDRESS:发送到路由前缀所覆盖的目的地时首选的源地址
- realm REALMID:此路由被分配到的领域。REALMID可以是/etc/iproute2/rt_realms文件中的数字或字符串。
- mtu MTU/mtu lock MTU:到达目的地的路径上的MTU。 如果未使用修饰符锁定,则由于路径MTU发现,内核可能会更新MTU。 如果使用了修饰符锁定,则将不尝试任何路径MTU发现,在IPv4情况下,所有数据包将在没有DF位的情况下发送,或者将其分片到IPv6的MTU
- window NUMBER:TCP播发到这些目的地的最大窗口,以字节为单位。它限制了允许TCP对等方发送给我们的最大数据突发
- rtt TIME:初始RTT(“往返时间”)估算值。 如果未指定后缀,则这些单位是直接传递到路由代码的原始值,以保持与先前版本的兼容性。 否则,如果使用后缀s,sec或secs来指定秒数,而使用ms,msec或msecs的后缀来指定毫秒。
- rttvar TIME (2.3.15+ only):初始RTT方差估算值。 与上面的rtt一样指定值
- rto_min TIME (2.6.23+ only):与此目标通信时要使用的最小TCP重新传输超时。值的指定与上面的rtt相同
- ssthresh NUMBER (2.3.15+ only):初始慢启动阈值的估计值
- cwnd NUMBER (2.3.15+ only):锁定标志,如果不使用锁定标志,则忽略该选项
- initcwnd NUMBER (2.5.70+ only):到此目标的连接的初始拥塞窗口大小。 实际窗口大小是该值乘以相同连接的MSS(``最大段大小'')。 默认值为零,表示使用RFC2414中指定的值。
- initrwnd NUMBER (2.6.33+ only):到此目标的连接的初始接收窗口大小。 实际窗口大小是此值乘以连接的MSS。 默认值为零,表示使用慢启动值。
- features FEATURES (3.18+only):启用或禁用每路由功能。此时唯一可用的特性是ecn,它可以在启动到给定目标网络的连接时启用显式拥塞通知。当响应来自给定网络的连接请求时,即使net.ipv4.tcp_ecn sysctl设置为0
- congctl NAME/congctl lock NAME (3.20+ only):仅针对给定的目的地设置特定的TCP拥塞控制算法。 如果未指定,Linux将保留当前的全局默认TCP拥塞控制算法或应用程序中的一种。 如果未使用修饰符锁定,则应用程序仍可能会覆盖该目的地的建议拥塞控制算法。 如果使用了修饰符锁,则不允许应用程序覆盖该目的地的指定拥塞控制算法,因此将强制/保证使用建议的算法
- advmss NUMBER (2.3.15+ only):在建立TCP连接时向这些目标播发的MSS(“最大段大小”)。如果没有给定,Linux将使用从第一跳设备MTU计算的默认值
- reordering NUMBER (2.3.15+ only):到此目的地的路径上的最大重新排序。 如果未给出,则Linux使用通过sysctl变量net/ipv4/tcp_reordering选择的值
- nexthop NEXTHOP:多路径路由的下一跳。 NEXTHOP是一个复杂值,其语法类似于顶级参数列表:
	- via ADDRESS:下一跳路由
	- dev NAME:输出设备名称
	- weight NUMBER:是多路径路由的此元素的权重,反映其相对带宽或质量
- scope SCOPE_VAL:路由前缀所覆盖的目的地范围。 SCOPE_VAL可以是数字/etc/iproute2/rt_scopes中的字符串。 如果省略此参数,则ip假定所有网关单播路由的作用域是全局范围,直接单播和广播路由的作用域链接以及本地路由的作用域主机
- protocol RTPROTO:该路由的路由协议标识符。 RTPROTO可以是文件/ etc / iproute2 / rt_protos中的数字或字符串。如果未提供路由协议ID,则ip会采用协议引导方式(即假定路由是由不了解自己在做什么的人添加的)。 几个协议值具有固定的解释。
	- redirect: 路由是由于ICMP重定向而安装的
	- kernel:路由是在自动配置期间由内核安装的
	- boot:路由是在启动过程中安装的。如果路由守护进程启动,它将清除所有这些守护进程
	- static:该路由由管理员安装,以覆盖动态路由。 路由守护程序将尊重它们,甚至可能将它们通告给其对等端。
	- ra:路由是通过路由器发现协议安装的
ip route show # 该命令显示路由表的内容或按某些条件选择的路由

可选的 option:
- to SELECTOR (default):仅从给定的目的地范围内选择路线。 SELECTOR由一个可选的修饰符(root 、match、exact)和一个前缀组成。 root PREFIX选择前缀不小于PREFIX的路由。 F.e. 根0/0选择整个路由表。 match PREFIX选择前缀不超过PREFIX的路由。 比如: 匹配10.0/16选择10.0/16、10/8和0/0,但不选择10.1/16和10.0.0/24。 精确的PREFIX(或仅PREFIX)选择具有此精确前缀的路由。 如果这两个选项都不存在,则ip假定根目录为0/0,即列出整个表。
- tos TOS:仅选择具有给定TOS的路线
- table TABLEID:显示此表中的路由。默认设置是显示主表。TABLEID可以是实表的ID,也可以是特殊值之一:
	- all:列出所有表
	- cache:转储路由缓存
- cloned:缓存列表克隆的路由,即由于某些路由属性(例如MTU)已更新而从其他路由动态分叉的路由。 实际上,它等效于表缓存。
- from SELECTOR:与to的语法相同,但它绑定的是源地址范围而不是目的地。请注意,from选项仅适用于克隆路由
- protocol RTPROTO:只列出该协议的路由
- scope SCOPE_VAL:仅列出具有此范围的路由
- type TYPE:仅列出该类型的路由
- dev NAME:仅列出通过此设备的路由
- via PREFIX:仅列出通过前缀选择的nexthop路由器的路由
- src PREFIX:仅列出具有按前缀选择的首选源地址的路由
- realms FROMREALM/TOREALM/REALMID:仅列出具有这些领域的路由。

2.3 参数

# 一些用到的参数解释
SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
            [ table TABLE_ID ] [ proto RTPROTO ]
            [ type TYPE ] [ scope SCOPE ]
ROUTE := NODE_SPEC [ INFO_SPEC ]
NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]
             [ table TABLE_ID ] [ proto RTPROTO ]
             [ scope SCOPE ] [ metric METRIC ]
INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...
NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS
OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ]
           [ rtt TIME ] [ rttvar TIME ] [reordering NUMBER ]
           [ window NUMBER ] [ cwnd NUMBER ] [ initcwnd NUMBER ]
           [ ssthresh NUMBER ] [ realms REALM ] [ src ADDRESS ]
           [ rto_min TIME ] [ hoplimit NUMBER ] [ initrwnd NUMBER ]
           [ features FEATURES ] [ quickack BOOL ] [ congctl NAME ]
           [ expires TIME ]
TYPE := { unicast | local | broadcast | multicast | throw |
          unreachable | prohibit | blackhole | nat }
TABLE_ID := [ local | main | default | all | NUMBER ]
SCOPE := [ host | link | global | NUMBER ]
NHFLAGS := [ onlink | pervasive ]
RTPROTO := [ kernel | boot | static | NUMBER ]
TIME := NUMBER[s|ms]
BOOL := [1|0]
FEATURES := ecn
Route TYPE 类型及解释:
unicast:描述了由路由前缀覆盖的目标的真实路径。
unreachable:这些目标不可达。丢弃数据包并生成ICMP消息“主机不可达”。本地发送者收到“EHOSTUNREACH”错误。
blackhole:这些目标不可达。静默地丢弃数据包。本地发送者收到“EINVAL”错误。
prohibit:这些目标不可达。丢弃数据包并生成管理上禁止的ICMP消息“通信被禁止”。本地发送者收到“EACCES”错误。
local:目标被分配给此主机。数据包被环回并在本地传递。
broadcast:目标是一个广播地址。数据包作为链接广播发送。
throw:与策略规则一起使用的特殊控制路由。如果选择了这种路由,则会在未找到路由的情况下终止此表中的查找。没有策略路由时,相当于路由表中没有路由。丢弃数据包并生成ICMP消息“net unreachable”。本地发送者收到“ENETUNREACH”错误。
NAT:一个特殊的NAT路由。前缀所覆盖的目标被认为是虚拟(或外部)地址,在转发之前需要将其转换为真实(或内部)地址。使用属性via选择要转换的地址。但请注意,Linux 2.6版本不再支持Route NAT。
anycast:这种路由类型尚未实现。目标是被分配给此主机的任播地址。主要等效于本地,但有一个区别:当用作任何数据包的源地址时,这些地址是无效的。
multicast:该路由类型是用于多播路由的特殊类型。

2.4 例子

  1. 查询路由
# 以下三种显示系统路由
ip r
ip route
ip route show
ip route list	 	

在这里插入图片描述

# 精准匹配某一条路由,ip 是目的地址
ip route show 172.17.0.0/16
# 模糊匹配某一条路由,ip 是目的地址	
ip route show match 192.168											

在这里插入图片描述
在这里插入图片描述

# 查询经由网卡 ens33 的路由
ip route show dev ens33
# 查询源地址为 192.168.127.128 的路由
ip route show src 192.168.127.128
# 查询下一跳为192.168.127.2的路由							
ip route show via 192.168.127.2
# 查看本地路由表						
ip route show table local
ip route list table local

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 添加路由
# 在1号表中添加默认路由为192.168.127.1
ip route add default via 192.168.127.1 table 1
# 在1号表中添加目的为192.168.127.0网段的路由为192.168.127.2
ip route add 192.168.127.0/24 via 192.168.127.2 table 1
# 设置系统默认路由	
ip route add default via 192.168.127.1
# 设置目的为192.168.127.0网段的网关为192.168.127.254,通过网卡 eth33 出去
ip route add 192.168.127.0/24 via 192.168.0.254 dev eth33
# 设置默认网关为 192.168.127.254,通过网卡 eth33 出去
ip route add default via 192.168.127.254 dev eth33
# 设置请求的目地192.168.127.130不可达的路由
ip route add prohibit 192.168.127.130
# 设置源IP 192.168.127.129到达192.168.127.130不可达				
ip route add prohibit 192.168.127.130 from 192.168.127.129	
# 更改默认路由。此操作等同于先删除,后新增	
ip route change default via 192.168.127.1 dev eth33
  1. 删除路由
# 删除默认路由
ip route del default
# 删除通往192.168.127.0/24的路由
ip route del 192.168.127.0/24
# 删除经由网卡 ens33 通往192.168.127.0/24的路由
ip route del 192.168.127.0/24 dev eth33
# 清空路由表
ip route flush table main								

3. route

3.1 描述

用于显示和操作IP静态路由表。

直接执行 route 命令来添加路由不会永久保存,当网卡重启或者机器重启之后,该路由就失效了。要想永久保存,可以保存到配置文件。

  1. /etc/sysconfig/static-routes文件为路由固化文件,但是 linux 系统一般不会自动生成,需要手动创建。
  2. 在文件内编辑路由,路由格式是固定的:
    • 添加默认路由:any net 0.0.0.0 netmask 0.0.0.0 gw 10.60.60.1
    • 添加网络路由:any net 1.1.1.0 netmask 255.255.255.0 gw 10.60.60.1

3.2 语法

route -h

# 以下是输出:
Usage: route [-nNvee] [-FC] [<AF>]           List kernel routing tables
       route [-v] [-FC] {add|del|flush} ...  Modify routing table for AF.

       route {-h|--help} [<AF>]              Detailed usage syntax for specified AF.
       route {-V|--version}                  Display version/author and exit.

        -v, --verbose            be verbose
        -n, --numeric            don't resolve names
        -e, --extend             display other/more information
        -F, --fib                display Forwarding Information Base (default)
        -C, --cache              display routing cache instead of FIB

  <AF>=Use -4, -6, '-A <af>' or '--<af>'; default: inet
  List of possible address families (which support routing):
    inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
    netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
    x25 (CCITT X.25)

3.3 参数

可选 option:
-v:显示详细的处理信息
-A family:用指定的地址族(如inet,inet6)
-n:以数字形式代替解释主机名形式来显示地址
-e:用netstat(8)的格式来显示选路表
-ee:使用更详细的资讯来显示
-net:到一个网络的路由表
-host:到一个主机的路由表
-F:显示内核的FIB选路表。其格式可以用-e 和 -ee选项改变
-C:显示内核的路由缓存
del :删除一条路由
add:添加一条路由
target:指定目标网络或主机。可以用点分十进制形式的IP地址或主机/网络名
netmask Nm:为添加的路由指定网络掩码
gw Gw:为发往目标网络/主机的任何分组指定网关。注意:指定的网关首先必须是可达的。也就是说必须为该网关预先指定一条静态路由。如果你为本地接口之一指定这个网关地址的话,那么此网关地址将用于决定此接口上的分组将如何进行路由
metric M:把选路表中的路由值字段(由选路进程使用)设为M
mss M:把基于此路由之上的连接的TCP最大报文段长度设为M字节。这通常只用于优化选路设置。默认值为536
window W:把基于此路由之上的连接的TCP窗口长度设为W字节。这通常只用于AX.25网络和不能处理背对背形式的帧的设备
irtt I:把基于此路由之上的TCP连接的初始往返时间设为I毫秒(1-12000)。这通常也只用于AX.25网络。如果省略此选项,则使用RFC1122的缺省值300ms
reject:设置一条阻塞路由以使一条路由查找失败。这用于在使用缺省路由前先屏蔽掉一些网络。但这并不起到防火墙的作用
mod, dyn, reinstate:设置一条动态的或更改过的路由。这些标志通常只由选路进程来设置。这只用于诊断目的
dev If:强制使路由与指定的设备关联,因为否则内核会自己来试图检测相应的设备(通常检查已存在的路由和加入路由的设备的规格)。在多数正常的网络上无需使用

3.4 例子

  1. 查询路由
# 以数字形式展现路由表
route -n

在这里插入图片描述

route 输出结果解析:

  • Destination:目标网络或目标主机
  • Gateway:网关地址或 ‘*’ (如未设置)
  • Genmask:目标网络的子网掩码;'255.255.255.255’为主机,'0.0.0.0’为缺省路由
  • Flags:路由标志
    • U (route is up) :路由正常
    • H (target is a host) :主机路由
    • G (use gateway) :使用网关的间接路由
    • R (reinstate route for dynamic routing) :为动态选路恢复路由
    • D (dynamically installed by daemon or redirect) :该路由由选路进程或重定向动态创建
    • M (modified from routing daemon or rederict) :该路由已由选路进程或重定向修改
    • ! (reject route) :阻塞路由
  • Metric:通向目标的距离(通常以跳来计算)
  • Ref:使用此路由的活动进程个数(Linux内核并不使用)
  • Use:查找此路由的次数。根据-F 和 -C的使用,此数值是路由缓存的损失数或采样数
  • Iface:使用此路由发送分组的接口(网卡名字)
  • MSS:基于此路由的TCP连接的缺省最大报文段长度
  • Window:基于此路由的TCP连接的缺省窗口长度
  • irtt:初始往返时间。内核用它来猜测最佳TCP协议参数而无须等待(可能很慢的)应答
  • HH (cached only):为缓存过的路由而访问硬件报头缓存的ARP记录和缓存路由的数量。如果缓存过路由的接口(如lo)无须硬件地址则值为-1
  • Arp (cached only):无论缓存路由所用的硬件地址情况如何都进行更新
  1. 添加路由
# 添加一条默认路由。使用此路由的所有分组将通过网关 default-gw 进行传输。							
route add default gw default-gw
# 添加一条目的网络192.168.127.0/24,经由 ens33 的路由
route add -net 192.168.127.0 netmask 255.255.255.0 dev eth33 	
# 添加到主机192.168.127.128的路由
route add -host 192.168.127.128 gw 192.168.127.1
# 拒绝网络192.168.x.x											
route add 192.168.0.0 netmask 255.255.0.0 reject										
  1. 删除路由
# 删除192.168.127.0的路由								
route del -net 192.168.127.0 netmask 255.255.255.0 dev eth33
# 删除默认路由		
route del default gw 192.168.127.1 eth33	

4. 对比

route 和 ip route的区别:

  1. ip route 支持多种查询显示方式,而 route 命令没有其他的查询显示方式。
  2. ip route add 提供了更多route命令无法实现的选项,如prohibitfromsrc
  3. ip route 功能更加强大,推荐使用。

5. 参考

ip route命令详解
route 命令详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/259425.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

聚类算法及可视化方法的实践与探索

簇内平方和表示数据点到其簇内质心的距离的平方和&#xff0c;公式如下&#xff1a; 其中&#xff0c; 是k簇数&#xff0c; ni是第 i 个簇的样本数&#xff0c; xij是第 i个簇中的第 j 个样本。 import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sk…

Python Opencv实践 - 手势音量控制

本文基于前面的手部跟踪功能做一个手势音量控制功能&#xff0c;代码用到了前面手部跟踪封装的HandDetector.这篇文章在这里&#xff1a; Python Opencv实践 - 手部跟踪-CSDN博客文章浏览阅读626次&#xff0c;点赞11次&#xff0c;收藏7次。使用mediapipe库做手部的实时跟踪&…

47 星南二楼

动态规划&#xff0c;相当于求解最长子序列问题 #include <iostream> using namespace::std; using std::cout; using std::cin; int n; int a[5100],dp[5100];int xnel(int n, int a[]) {int result 0;for(int i0; i<n; i){for(int j0; j<i; j){if(a[j]<a[…

node版本与npm版本不对应的解决方案

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 错误情况 今天遇到了个问题&#xff0c;原来用的node的版本是v14.16.0的&#xff0c;后来升级到了最新版20多的时候&#xff0c;以前的项目启动不了。 于是我手动将node卸载了&#xff0c…

【2023年网络安全优秀创新成果大赛专刊】银行数据安全解决方案(天空卫士)

在2023年网络安全优秀创新成果大赛&#xff0c;成都分站中&#xff0c;天空卫士银行数据安全方案获得优秀解决方案奖。与此同时&#xff0c;天空卫士受信息安全杂志邀请&#xff0c;编写《银行数据安全解决方案》。12月6日&#xff0c;天空卫士编写的《银行数据安全解决方案》做…

DAY11

问题一&#xff1a;指针与引用的区别 疑问 为什么引用的本质是指针常量&#xff0c;但是对它求sizeof却是变量所占内存空间的大小那&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f; 1.引用是给变…

Playground AI刚刚推出了它的新宠儿——Playground V2,去试试?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

令人惊叹的代码技巧

在编程世界中&#xff0c;有一些令人惊叹的代码技巧和巧妙的实现方式。以下是一些我见过的令人印象深刻的代码技巧&#xff1a; 函数式编程魔法&#xff1a; 使用函数式编程的一些特性&#xff0c;比如高阶函数、匿名函数和Lambda表达式&#xff0c;可以使代码更为简洁、易读。…

(9)Linux Git的介绍以及缓冲区

&#x1f4ad; 前言 本章我们先对缓冲区的概念进行一个详细的探究&#xff0c;之后会带着大家一步步去编写一个简陋的 "进度条" 小程序。最后我们来介绍一下 Git&#xff0c;着重讲解一下 Git 三板斧&#xff0c;一般只要掌握三板斧就基本够用了。 缓冲区&#xff…

Redis权限管理体系(三): ACL 配置持久化

点击上方蓝字关注我 前面我们已经了解了ACL用户管理的用途及使用&#xff1a; Redis权限管理体系(一&#xff09;&#xff1a;客户端名及用户名 Redis权限管理体系(二&#xff09;&#xff1a;终于等来了Redis权限控制体系ACL 但因默认配置中ACL的配置未持久化&#xff0c;因此…

oracle怎样才算开启了内存大页?

oracle怎样才算开启了内存大页&#xff1f; 关键核查下面三点&#xff1a; 1./etc/sysctl.conf vm.nr_hugepages16384这是给了32G&#xff0c;计划sga给30G&#xff0c;一般需多分配2-4G sysctl -p生效 看cat /proc/meminfo|grep Huge啥结果&#xff1f; 这种明显是配了…

Go项目快速集成Swagger UI

swag Swag将Go的注释转换为Swagger2.0文档。我们为流行的 Go Web Framework 创建了各种插件&#xff0c;这样可以与现有Go项目快速集成&#xff08;使用Swagger UI&#xff09;。 目录 快速开始支持的Web框架如何与Gin集成格式化说明开发现状声明式注释格式 通用API信息API操…

【每日一题】【12.20】2828.判别首字母缩略词

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 1.题目链接 2828. 判别首字母缩略词https://leetcode.cn/problems/check-if-a-string-is-an-acronym-of-words/ 2.题目描述 今天…

RTDETR论文快速理解和代码快速实现(训练与预测)

文章目录 前言一、摘要二、论文目的三、论文贡献四、模型结构1、模型整体结构2、backbone结构3、neck结构4、混合编码器(neck) 五、RTDERT模型训练(data-->train)1、环境安装2、训练1、数据准备2、数据yaml文件3、训练代码4、训练运行结果 3、推理1、推理代码2、推理运行结果…

Nginx快速入门:安装目录结构详解及核心配置解读(二)

0. 引言 上节我们讲解了nginx的应用场景和安装&#xff0c;本节继续针对nginx的各个目录文件进行讲解&#xff0c;让大家更加深入的认识nginx。并通过一个实操案例&#xff0c;带大家来实际认知nginx的核心配置 1. nginx安装目录结构 首先nginx的默认安装目录为&#xff1a;…

原子学习笔记3——使用tslib库

一、tslib介绍 tslib 是专门为触摸屏设备所开发的 Linux 应用层函数库&#xff0c;并且是开源。 tslib 为触摸屏驱动和应用层之间的适配层&#xff0c;它把应用程序中读取触摸屏 struct input_event 类型数据&#xff08;这是输入设备上报给应用层的原始数据&#xff09;并进行…

Elasticsearch常见面试题

文章目录 1.简单介绍下ES&#xff1f;2.简单介绍当前可以下载的ES稳定版本&#xff1f;3.安装ES前需要安装哪种软件&#xff1f;4.请介绍启动ES服务的步骤&#xff1f;5.ES中的倒排索引是什么&#xff1f;6. ES是如何实现master选举的&#xff1f;7. 如何解决ES集群的脑裂问题8…

SpringBoot-XXLJOB提供动态API调度任务

目录 一、项目版本 二、XXL-JOB提供动态API controller层 service层 三、SpringBoot项目 pom model XxlJobUtil-工具类 XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&…

Gateway网关-网关的cors跨域配置

目录 一、跨域 二、解决方案 三、实际测试 3.1 html调用接口 3.2 跨域问题复现 3.3 application文件中配置CORS 3.4 问题解决 一、跨域 跨域问题&#xff1a;浏览器禁止请求的发起者与服务端发生跨域ajax请求&#xff0c;请求被浏览器拦截的问题 跨域&#xff1a;…

第四节TypeScript 声明变量

1、typescript变量声明 变量是一种使用方便的占位符&#xff0c;用于引用计算机内存地址。 我们可以把变量看做存储数据的容器。 typescript变量的命名规则&#xff1a; 变量名称可以包含数字和字母。除了下划线_和美元$符号外&#xff0c;不能包含其它特殊字符&#xff0c…