nftables(3)表達式(1)數據類型

簡介

前面文章主要介紹的是nftables的基本原理和基礎的配置,如nftables基本的表、鏈、規則的創建和管理。本篇文章主要介紹的是表達式EXPRESSIONS。

在網絡安全和數據處理中,表達式(Expressions)扮演著非常重要的角色。它們用于表示值,這些值可以是常量(如網絡地址、端口號等),也可以是在規則集評估過程中從數據包中收集的數據。表達式可以通過二進制、邏輯、關系和其他類型的表達式組合來形成復雜或關系(匹配)表達式。此外,表達式還用作某些類型操作(如網絡地址轉換NAT、數據包標記等)的參數。

每個表達式都有其數據類型,這決定了符號值的大小、解析方式、表示形式以及與其他表達式進行類型兼容性檢查的方式。數據類型對于確保表達式的正確執行和結果的準確性至關重要。

?通過description命令顯示表達式的類型及其數據類型的信息。還可以給出一個數據類型,nft將在其中顯示有關該類型的更多信息。

describe expression | data type
如上圖所示,可以通過description顯示tcp flags和icmp type信息

數據類型

數據類型(Data Types)是極其重要的概念,它們決定了符號值的大小、解析方式、表示形式以及表達式之間的類型兼容性。一下我們介紹幾種常見的數據類型:

INTEGER TYPE(整數類型)

NameKeywordSizeBase type
Integerintegervariable-

整數類型用于表示數值,可以是以十進制、十六進制或八進制形式指定的數字。整數類型的大小不是固定的,而是取決于它被使用的上下文或表達式。例如,在某些編程語言或系統中,整數可以是8位、16位、32位或64位,這取決于系統架構、編譯器選項或程序員的指定。

BITMASK TYPE(位掩碼類型)

NameKeywordSizeBase type
Bitmaskbitmaskvariableinteger

位掩碼類型用于表示一組位(bit),其中每個位都可以獨立地設置為開(1)或關(0)。位掩碼常用于控制選項或設置狀態,因為它們允許在一個單獨的值中存儲多個布爾值。位掩碼類型基于整數類型,因為整數提供了存儲和操作位所需的底層機制。

STRING TYPE(字符串類型)

NameKeywordSizeBase type
Stringstringvariable-

字符串類型用于表示文本數據,即一系列字符。字符串的開頭通常是一個字母字符(a-zA-Z),后面可以跟零個或多個字母數字字符或特定字符(如/、-、_、.)。此外,任何被雙引號(")包圍的內容都被視為字符串。這允許在字符串中包含那些可能被視為特殊字符的字符。

#例如如何在網絡過濾規則中指定接口名稱。
# Interface name  
filter input iifname eth0  
# Weird interface name  
filter input iifname "(eth0)"

LINK LAYER ADDRESS TYPE(鏈路層地址類型)

NameKeywordSizeBase type
Link layer addresslladdrvariableinteger

鏈路層地址類型(lladdr)用于表示鏈路層地址,如以太網MAC地址。這些地址通常由一系列以冒號(:)分隔的兩位十六進制數字組成,數量是可變的。盡管其大小是可變的,但每個MAC地址通常由6個八位字節(即48位)組成,但在指定時,格式上的冒號不計入實際大小。

#以太網目標MAC地址:這條規則指定了數據包輸入過濾時,目標以太網MAC地址應為 00:0c:29:0f:37:05
filter input ether daddr  00:0c:29:0f:37:05

IPV4 ADDRESS TYPE(IPv4地址類型)

NameKeywordSizeBase type
IPV4 addressipv4_addr32 bitinteger

IPv4地址類型(ipv4_addr)用于表示IPv4地址。這些地址通常是32位的,并可以通過多種方式指定,包括點分十進制、點分十六進制、點分八進制、十進制、十六進制、八進制表示法或作為主機名。如果指定為主機名,則使用標準系統解析器進行解析。

#點分十進制表示法:這條規則指定了數據包輸出過濾時,目標IPv4地址應為127.0.0.1(即本地回環地址)。
filter output ip daddr 127.0.0.1#主機名表示法:這條規則指定了數據包輸出過濾時,目標IPv4地址應通過主機名localhost解析得出。
filter output ip daddr localhost

IPV6 ADDRESS TYPE(IPv6地址類型)

NameKeywordSizeBase type
IPv6 addressipv6_addr128 bitinteger

IPv6地址類型(ipv6_addr)用于表示IPv6地址。這些地址是128位的,并可以指定為主機名或一系列由冒號分隔的十六進制半字(每個半字通常為4位十六進制數)。為了與端口號區分,IPv6地址有時會被方括號([])包圍。

#縮寫回環地址:這條規則指定了數據包輸出過濾時,目標IPv6地址應為縮寫形式的回環地址::1
filter output ip6 daddr ::1#帶方括號的IPv6地址:這條規則指定了在IPv6地址轉換的預路由階段,如果TCP目標端口為20000,則將其目的地址轉換為[1df::d0],并指定目標端口為22。方括號的使用確保了1df::d0被正確解析為IPv6地址,而不是與端口號混淆
ip6 nat prerouting tcp dport 20000 dnat to [1df::d0]:22

BOOLEAN TYPE(布爾類型)?

NameKeywordSizeBase type
Booleanboolean1 bitinteger

布爾類型(boolean)在用戶空間中是一個語法輔助類型,主要用于在(通常是隱式的)關系表達式的右側,將左側表達式轉換為布爾檢查(通常用于檢查存在性)。盡管布爾類型在底層實現上可能占用更多的存儲空間(比如一個字節或更多),但在邏輯上它被視為1位大小,即只能存儲兩個值:0(假)或1(真)。在大多數上下文中,布爾類型被映射到整數類型,其中0表示假,非0值(如1)表示真。

關鍵字與值

KeywordValue
exists表示存在,對應值為1(真)1
missing表示不存在,對應值為0(假)0

表達式支持布爾比較(boolean comparison)

表達式(expressions)支持布爾比較(boolean comparison)是一種非常常見且重要的特性。布爾比較允許你根據兩個或多個值之間的關系來評估表達式的結果為真(true)或假(false)。這種機制在條件語句(如if語句)、循環控制(如while循環)以及很多其他需要基于條件邏輯進行決策的場景中都是不可或缺的。

ExpressionBehaviour
fib檢查路由是否存在。這通常用于過濾規則中,以確定數據包是否匹配特定的路由。
exthdr檢查IPv6擴展頭是否存在。這允許在IPv6流量中根據擴展頭的存在性來過濾數據包。
tcp option檢查TCP選項頭是否存在。這允許基于TCP選項(如時間戳選項)的存在性來過濾TCP數據包。
#匹配存在的路由:這條規則表示如果輸入的數據包存在匹配的路由(即fib daddr表達式為真),并且指定的入接口(iif)和出接口(oif)也匹配,則該數據包將被匹配。注意這里的exists關鍵字用于將fib daddr的結果轉換為布爾值。
filter input fib daddr . iif oif exists#僅匹配IPv6非分片數據包:這條規則表示如果輸入的數據包是IPv6數據包,并且沒有分片擴展頭(即frag擴展頭不存在),則該數據包將被匹配。
filter input exthdr frag missing#匹配包含TCP時間戳選項的數據包:這條規則表示如果輸入的數據包是TCP數據包,并且包含時間戳選項(即tcp option timestamp存在),則該數據包將被匹配。這允許基于TCP數據包的特定選項來過濾流量
filter input tcp option timestamp exists

ICMP TYPE TYPE(ICMP類型)

NameKeywordSizeBase type
ICMP Typeicmp_type8 bitinteger

ICMP(Internet Control Message Protocol,互聯網控制消息協議)類型是一個用于方便指定ICMP頭部類型字段的類型。ICMP是IP網絡中的一個重要協議,用于發送控制消息,如錯誤報告、路由信息請求等。ICMP類型字段定義了ICMP消息的具體類型,每種類型都有其特定的用途和含義。

KeywordValue解釋
echo-reply0表示ICMP回顯應答消息,通常是對echo-request(ping請求)的響應
destination-unreachable3表示目的不可達消息,用于通知發送方數據包無法到達其目的地
source-quench4已廢棄,原用于擁塞控制,但現在已被新的機制所取代
redirect5表示重定向消息,用于指導發送方將數據包發送到更好的路由
echo-request8表示ICMP回顯請求消息,通常用于生成ping請求
router-advertisement9路由器通告消息,用于動態地通知主機有關路由器的信息
router-solicitation10路由器請求消息,用于請求路由器發送其通告。
time-exceeded11表示生存時間(TTL)超過消息,用于通知發送方數據包在到達目的地之前已被丟棄,因為其TTL已減至0
parameter-problem12表示參數問題消息,用于通知發送方其數據包中的某個字段有錯誤
timestamp-request13時間戳請求消息,用于請求接收方記錄并返回數據包的接收時間
timestamp-reply14時間戳應答消息,是對timestamp-request的響應,包含接收時間
info-request15用于請求關于網絡或主機的特定信息
info-reply16是對info-request(信息請求)消息的響應。它包含了請求方所請求的信息
address-mask-request17信息請求消息,用于請求有關地址掩碼的信息(在某些實現中可能稱為地址掩碼請求)
address-mask-reply18信息應答消息,是對info-request的響應,包含請求的信息
#匹配ping數據包:這條規則表示匹配輸出方向上的ICMP數據包,其類型字段為echo-request(ping請求)或echo-reply(ping應答)。這通常用于允許或過濾ping操作,以測試網絡連通性或進行故障排查。
filter output icmp type { echo-request, echo-reply }

ICMP CODE TYPE(ICMP代碼類型)?

NameKeywordSizeBase type
ICMP Codeicmp_code8 bitinteger

ICMP(Internet Control Message Protocol,互聯網控制消息協議)代碼類型用于方便地指定ICMP頭部的代碼字段。ICMP消息不僅由類型字段標識其大致的類別,還通過代碼字段提供更具體的錯誤或信息類型。這使得接收方能夠更準確地了解發送ICMP消息的原因。

KeywordValue解釋
net-unreachable0表示網絡不可達。這通常意味著沒有到達目標網絡的路由
host-unreachable1表示主機不可達。這通常意味著目標主機在指定的網絡上不存在或無法訪問
prot-unreachable2表示協議不可達。這表示目標主機不支持發送方嘗試使用的協議
port-unreachable3表示端口不可達。這表示目標主機上的特定端口沒有監聽或無法訪問
frag-needed4表示需要分片但DF(Don't Fragment)位被設置。這通常發生在數據包太大而無法通過某個網絡段時,但發送方已請求不進行分片
net-prohibited9表示網絡被禁止。這通常是由于設置的策略,阻止數據包進入或離開指定的網絡
host-prohibited10表示主機被禁止。這通常表示目標主機已明確拒絕接收數據包,可能是出于安全或配置的原因
admin-prohibited13表示管理禁止。這是一個更通用的“被禁止”代碼,可能用于表示由于管理策略而阻止數據包傳遞的多種情況

ICMP代碼的作用

ICMP代碼與ICMP類型字段結合使用,提供了關于ICMP消息的更詳細信息。這有助于接收方理解為什么發送了ICMP消息,并據此采取相應的行動。例如,如果接收到一個destination-unreachable(類型3)和port-unreachable(代碼3)的ICMP消息,接收方就知道數據包無法到達目標端口,并可能嘗試使用不同的端口或協議重新發送數據包。

注意事項

  • 并非所有ICMP類型都有對應的代碼字段。有些ICMP類型可能只使用類型字段,而不使用代碼字段。
  • ICMP代碼的具體含義可能因不同的系統和網絡實現而異。因此,在編寫依賴于特定ICMP代碼的邏輯時,需要仔細考慮這些因素。
  • ICMP消息本身并不攜帶原始數據包的全部內容,而是包含有關原始數據包的一些關鍵信息(如IP頭部和至少前8個字節的數據)。這有助于接收方了解哪些數據包遇到了問題,但可能不足以完全重建原始數據包。

ICMPv6 TYPE TYPE(ICMPv6 類型)

NameKeywordSizeBase type
ICMPv6 Typeicmpx_code8 bitinteger

ICMPv6(Internet Control Message Protocol version 6)類型用于方便地指定ICMPv6頭部的類型字段。ICMPv6是IPv6協議棧中的一部分,用于發送控制消息,如錯誤報告、信息請求和響應等。與ICMPv4相比,ICMPv6在消息類型和目的上有所擴展,以支持IPv6網絡的特定需求。

KeywordValue解釋
destination-unreachable1表示目的不可達消息,用于通知發送方數據包無法到達其目的地
packet-too-big2表示數據包太大,無法通過網絡段而不進行分片。這通常與路徑MTU發現過程相關
time-exceeded3表示生存時間(TTL)或跳數限制(Hop Limit)超過,數據包在到達目的地之前已被丟棄
parameter-problem4表示ICMPv6頭部中的某個字段存在錯誤
echo-request128表示ICMPv6回顯請求消息,通常用于生成ping請求
echo-reply129表示ICMPv6回顯應答消息,是對echo-request的響應
mld-listener-query130組播偵聽器發現(Multicast Listener Discovery, MLD)查詢消息,用于發現網絡上的組播偵聽器
mld-listener-report131組播偵聽器報告消息,由組播偵聽器發送以響應MLD查詢或主動報告其存在
mld-listener-done132mld-listener-done?和?mld-listener-reduction:均標記為132,但mld-listener-reduction可能是對mld-listener-done的一個補充或特定用途的變體,用于指示組播偵聽器數量的減少
mld-listener-reduction132
nd-router-solicit133鄰居發現(Neighbor Discovery, ND)路由器請求消息,用于請求路由器發送其通告
nd-router-advert134鄰居發現路由器通告消息,包含有關網絡配置的信息
nd-neighbor-solicit135鄰居發現鄰居請求消息,用于請求鄰居的鏈路層地址
nd-neighbor-advert136鄰居發現鄰居通告消息,包含鄰居的鏈路層地址
nd-redirect137鄰居發現重定向消息,用于指導發送方將數據包發送到更好的路由
router-renumbering138路由器重編號消息,用于在IPv6網絡中重新分配地址
ind-neighbor-solicit141無組播鄰居發現協議中的鄰居請求報文
ind-neighbor-advert142無組播鄰居發現協議中的鄰居通告報文
mld2-listener-report143MLD2 協議中的監聽器報告
#匹配ICMPv6 ping數據包:這條規則表示匹配輸出方向上的ICMPv6數據包,其類型字段為echo-request(ICMPv6 ping請求)或echo-reply(ICMPv6 ping應答)。這通常用于允許或過濾ICMPv6 ping操作,以測試IPv6網絡的連通性或進行故障排查。
filter output icmpv6 type { echo-request, echo-reply }

ICMPv6 CODE TYPE(ICMPv6代碼類型)

NameKeywordSizeBase type
ICMPv6 Codeicmpv6_code8 bitinteger

ICMPv6代碼(Code)類型用于方便地指定ICMPv6頭部的代碼字段。這個字段提供了關于ICMPv6消息類型的進一步細分,以更精確地指示發生了什么問題或需要什么樣的響應。

KeywordValue解釋
no-route0表示沒有到目標地址的路由。這通常是由于路由表中沒有匹配的條目導致的
admin-prohibited1表示由于管理策略,數據包被禁止傳輸。這通常是由網絡管理員設置的規則所觸發的
addr-unreachable3表示目標地址不可達。這可能是因為目標地址不存在于鏈路上,或者地址是一個多播地址但當前沒有偵聽器
port-unreachable4表示目標端口不可達。這意味著數據包已到達目標主機,但目標端口沒有監聽或無法訪問
policy-fail5表示由于路由策略失敗,數據包被丟棄。這可能與路由策略、流量工程或安全策略有關
reject-route6表示數據包被拒絕,因為存在一條明確拒絕該數據包的路由。這通常是為了防止某些類型的數據包進入網絡而設置的

ICMPv6代碼的作用

ICMPv6代碼與ICMPv6類型字段結合使用,為接收方提供了關于為什么發送ICMPv6消息的詳細信息。這有助于接收方理解數據包未能成功傳輸的原因,并據此采取相應的行動。例如,如果接收到一個destination-unreachable(類型1)和no-route(代碼0)的ICMPv6消息,接收方就知道數據包無法到達其目的地,因為沒有到目標地址的路由。

CONNTRACK TYPES

在Linux網絡子系統中,conntrack(連接跟蹤)是一個重要的組件,用于跟蹤和記錄通過網絡接口進出的網絡連接。這有助于實現如NAT(網絡地址轉換)、防火墻規則等網絡功能。您提供的表格概述了conntrack表達式和語句中使用的幾種類型及其關鍵字和值。

conntrack 類型

NameKeywordSizeBase type解釋
conntrack statect_state4 bytebitmask表示連接的狀態,如新建、已建立、相關等
conntrack directionct_dir8 bitinteger表示數據包的方向,是原始數據包還是回復數據包
conntrack statusct_status4 bytebitmask提供有關連接狀態的額外信息,如是否已確認、是否進行了NAT等
conntrack event bitsct_event4 bytebitmask標記連接跟蹤過程中的事件,如新建連接、連接銷毀等
conntrack labelct_label128 bitbitmask用于給連接分配標簽,這些標簽可以在運行時從配置文件中讀取

conntrack state (ct_state)

KeywordValue解釋
invalid1連接無效或已過期
established2連接已建立
related4連接與已建立的連接相關(如FTP數據連接)
new8新建的連接
untracked64連接未被跟蹤(可能由于配置或策略)

conntrack direction (ct_dir)

KeywordValue解釋
original0原始數據包的方向(從客戶端到服務器)
reply1原始數據包的方向(從客戶端到服務器)

conntrack status (ct_status)

KeywordValue解釋
expected1預期中的連接(如FTP主動模式下的數據連接)
seen-reply2?已看到回復數據包
assured4連接已得到保證
confirmed8連接已確認
snat16?進行了源地址NAT
dnat32進行了目標地址NAT
dying512連接正在消亡(如超時后)

conntrack event bits (ct_event)

這些事件位用于在連接跟蹤過程中標記不同的事件

KeywordValue解釋
new1?新建連接事件
related2相關連接事件
destroy4連接銷毀事件
reply8回復數據包事件
assured16?連接得到保證的事件
protoinfo32協議信息更新事件
helper64使用了連接跟蹤輔助模塊的事件
mark128連接被標記的事件
seqadj256序列號調整事件(如TCP序列號調整)
secmark512安全標記更新事件
label1024連接標簽更新事件

conntrack label (ct_label)

ct_label?允許給連接分配一個或多個標簽,這些標簽可以在運行時從配置文件中讀取,如?/etc/connlabel.conf。這對于基于標簽的過濾和策略實施非常有用。

這些conntrack類型和關鍵字是網絡編程和系統管理中的重要工具,它們允許開發者和管理員更精細地控制網絡流量的處理和路由。

DCCP PKTTYPE TYPE

NameKeywordSizeBase type
DCCP packet typedccp_pkttype4 bitinteger

在DCCP(Datagram Congestion Control Protocol,數據報擁塞控制協議)中,包類型(Packet Type)是一個4位的字段,用于指示DCCP數據包的不同類型和目的。這個字段位于DCCP頭部中,并根據RFC 4340標準定義了不同的值。這些值幫助網絡中的節點理解和處理不同類型的DCCP數據包。

KeywordValue解釋
request0表示這是一個連接請求包,用于初始化一個新的DCCP連接
response1是對request包的響應,表示接受或拒絕連接請求
data2包含應用層數據,但不包含確認信息
ack3是一個純確認包,不包含應用層數據,僅用于確認收到的數據
dataack4同時包含應用層數據和確認信息,用于減少網絡中的包數量
closereq5用于請求關閉一個已經建立的DCCP連接
close6是對closereq包的響應,表示同意關閉連接
reset7用于異常終止一個DCCP連接,比如當檢測到嚴重錯誤時
sync8用于在連接建立時或連接過程中同步雙方的狀態信息
syncack9是對sync包的確認,表示收到了同步信息并準備繼續

值得注意的是,值10到15是保留的,根據RFC 4340,這些值不應該被使用。在iptables中,這些保留值被標記為INVALID,意味著如果匹配到這些值,將被視為無效或不被識別的DCCP包類型。而在nftables中,你可以直接匹配這些數值范圍(即10-15),但通常不推薦這樣做,因為它們沒有定義的具體用途。

總結

以上就是我們介紹的一些主要的數據類型,通過數據類型和表達式相互配合,可以幫助用戶根據特定的需求構建和評估規則集,從而實現對數據包的精確控制和處理。通過結合不同類型的表達式,用戶可以更靈活地管理網絡流量和執行各種網絡操作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43604.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43604.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43604.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

二. Linux內核

一. Linux內核源碼目錄分析 arch 包含與體系結構相關的代碼,用于支持不同硬件體系結構的實現。這個目錄下會根據不同的架構(如x86、arm、mips等)進一步細分。 block 用于處理塊設備的子系統,包含與塊設備驅動和I/O調度相關的代碼。…

力扣--滑動窗口最大值

給你一個整數數組 nums,有一個大小為 k 的滑動窗口從數組的最左側移動到數組的最右側。你只可以看到在滑動窗口內的 k 個數字。滑動窗口每次只向右移動一位。 返回 滑動窗口中的最大值 。 示例 1: 輸入:nums [1,3,-1,-3,5,3,6,7], k 3 輸…

Vue核心 — Vue2響應式原理和核心源碼解析(核心中的核心)

一、前置知識 1、Vue 核心概念 Vue 是什么? Vue 是一款用于構建用戶界面的 JavaScript 框架。它基于標準 HTML、CSS 和 JavaScript 構建,并提供了一套聲明式的、組件化的編程模型,幫助你高效地開發用戶界面。 Vue 核心特點是什么? 響應式數據綁定:…

docker安裝tomcat容器

docker安裝tomcat容器 1、拉取鏡像 docker pull tomcat:8.5.46-jdk8-openjdk2、運行 docker run -d --name tomcat tomcat:8.5.46-jdk8-openjdk ? docker cp tomcat:/usr/local/tomcat/conf /data/tomcat/ ? docker rm -f tomcat ? docker run -d --name tomcat -p 8…

絕區捌--將GPT幻覺的發生率從20%以上降低到2%以下

總結:我們沒有使用微調,而是結合使用提示鏈和預處理/后處理來將幻覺發生率降低一個數量級,但這確實需要對 OpenAI 進行 3-4 倍的調用。還有很大的改進空間! 使用 GPT 等大型語言模型面臨的最大挑戰之一是它們傾向于捏造信息。 這…

from functools import partial有什么用

functools.partial 是 Python 的 functools 模塊中的一個非常有用的函數,它用于部分應用一個函數。這意味著你可以創建一個新的函數,這個新函數是原函數的一個子集,即預先填充了原函數的一些參數,并返回這個新函數。這樣&#xff…

使用Python繪制QQ圖并分析數據

使用Python繪制QQ圖并分析數據 在這篇博客中,我們將探討如何使用Python中的pandas庫和matplotlib庫來繪制QQ圖(Quantile-Quantile Plot),并分析數據文件中的內容。QQ圖是一種常用的統計圖表,用于檢查一組數據是否服從…

VUE+Spring Flux實現SSE長連接

VUE代碼 // 初始化EventSourceinitEventSource(url) {const token getAccessToken();const eventSource new EventSourcePolyfill(url, {headers: {Authorization: Bearer ${token},tenant-id: getTenantId(),}});eventSource.onerror (e) > {console.log("SSE連接錯…

C# 下sendmessage和postmessage的區別詳解與示例

文章目錄 1、SendMessage2、PostMessage3、兩者的區別: 總結 在C#中,SendMessage和PostMessage是兩個用于Windows編程的API,它們用于向窗口發送消息。這兩個方法都位于System.Windows.Forms命名空間中,通常用于自動化Windows應用程…

GitHub:現代軟件開發的協作平臺

引言 在現代軟件開發中,協作工具的選擇至關重要。GitHub作為全球最大的代碼托管平臺,已經成為開發者們不可或缺的工具。自2008年成立以來,GitHub不僅改變了代碼托管和協作的方式,還在開源軟件的發展中扮演了重要角色。本文將詳細…

科普文:分布式系統的架構設計模式

一、分布式架構基本概念 分布式架構是一種計算機系統設計方法,它將一個復雜的系統劃分為多個自治的組件或節點,并通過網絡進行通信和協作。每個組件或節點在功能上可以相互獨立,但又能夠通過消息傳遞或共享數據來實現協同工作。分布式架構主要…

值傳遞與引用傳遞:深入理解Java中的變量賦值和參數傳遞機制

在Java中,理解值傳遞(值拷貝)與引用傳遞(地址拷貝)之間的區別對于正確處理數據結構和對象至關重要。本文將通過示例代碼深入探討這兩種機制,并解釋它們如何影響程序的行為。 值傳遞(值拷貝&…

獲取腳本執行時間

在運行一些腳本時,時間會過期,這時就需要重新更新token,下面做了一個demo判斷時間是否過期 import datetime import time starttimedatetime.datetime.now() # 時間進行格式化 starttimestarttime.strftime("%Y-%m-%d %H:%M:%S") …

高效利用iCloud指南

高效利用 iCloud 需要了解其各種功能和最佳實踐,以充分發揮其云存儲和同步能力。以下是詳細的指南: ### 1. 設置和管理 iCloud 存儲 **初始設置** - 確保在所有設備(iPhone、iPad、Mac)上使用同一 Apple ID 登錄 iCloud。 - 在設…

iPaaS丨企業應用及數據集成的重要性和挑戰

在激烈的市場競爭中,企業服務總線和數據總線扮演著企業神經網絡的角色,它們將不同的業務部門、系統以及數據緊密相連,保障信息流通無阻,實現資源的高效分配。這樣的集成不僅提高了企業的運營效率,還增強了企業的適應性…

虛擬機因斷電進入./#狀態解決辦法

現象: 解決:先查看錯誤日志:journalctl -p err -b查看自己虛擬機中標黃部分的名字 之后運行:xfs_repair -v -L /dev/sda #這里sda用你自己標黃的 最后重啟 reboot 即可。

使用Dockerfile和ENTRYPOINT運行Python 3腳本

在Docker中運行Python 3腳本是一種常見的部署應用程序的方式。通過使用Dockerfile,我們可以定義一個包含Python環境和應用程序的Docker鏡像。在Dockerfile中,我們可以使用ENTRYPOINT指令來指定當容器啟動時應該運行的命令。 **一、創建Dockerfile** 首先…

在Linux上運行macOS:深度解析OSX-KVM項目

在Linux上運行macOS:深度解析OSX-KVM項目 在現代開發和測試環境中,能夠在不同操作系統之間無縫切換是至關重要的。對于開發者而言,如何在Linux系統上運行macOS一直是一個挑戰。然而,OSX-KVM項目為我們提供了一種高效的解決方案&a…

R包:ggsci期刊配色

介紹 不同期刊配色大多數時候不一樣,為了更好符合期刊圖片顏色的配色,有人開發了ggsci這個R包。它提供以下函數: scale_color_palname() scale_fill_palname() 對應不同期刊的color和fill函數。 導入數據R包 library("ggsci")…

如何一起解壓縮多個小壓縮包unzip multiprt zip file

這個問題有兩種解讀,一種是需要解壓這個文件夾里面的所有zip文件。另一個是壓縮文件時候存成了多個part,需要一起解壓縮。 環境 Ubuntu22.04 解決方法 解壓當前文件夾所有zip文件 unzip your/folder/*.zip解壓同一壓縮文件的多個part sudo apt ins…