零基礎新手小白快速了解掌握服務集群與自動化運維(二)Linux Journalctl命令、Journalctl日志持久化存儲

Linux提供了一個強大的日志系統,它可以跟蹤和記錄系統的各種活動。在這個系統中,journalctl是一個非常重要的工具,用于查詢和操作由systemd進程管理的日志。

本文將深入探討journalctl命令,介紹其基本使用、高級選項及示例等內容。

1. Journalctl簡介

Systemd是Linux發行版的初始化系統,負責啟動系統后的所有服務,并監視它們在系統運行期間的狀態。Journal是Systemd的一部分,主要負責收集和存儲日志數據。

journalctl是Journal的主要接口,提供豐富的功能來檢索和顯示日志條目。它能從磁盤上的二進制文件或者其他傳輸目標(如syslog)獲取日志。

2. Journalctl基礎使用

下面是一些基本的journalctl命令。

查看所有日志: (分頁輸出)

journalctl

或者: (不分頁輸出)

journalctl --no-pager

按時間倒序查看所有日志:

journalctl -r

查看最新的10條日志:

journalctl -n 10

實時查看新添加的日志條目:

journalctl -f

3. 過濾日志條目

journalctl提供了多種方式來過濾和查找特定的日志條目。

以下是一些過濾日志的例子:

根據服務名稱過濾:

journalctl -u nginx

根據進程ID過濾:

journalctl _PID=2001

根據優先級過濾(0-7,0表示最重要):

journalctl -p err -b

4. 時間戳和日志輪轉

對于大型系統,日志文件可能會非常大。為了解決這個問題,journalctl提供了日志輪轉和時間戳功能。

日志輪轉是一個過程,其中舊的日志條目被刪除以釋放空間給新的日志條目。默認情況下,Journal將根據配置在/var/log/journal中保存日志文件,并在磁盤空間不足時執行日志輪轉。

時間戳允許你查找特定時間范圍內的日志條目。例如:

journalctl --since="2021-07-01" --until="2021-07-31 03:00"

5. 高級應用

盡管journalctl提供了豐富的功能,但在某些情況下,你可能需要更高級的工具或技術。例如,你可能需要將日志發送到遠程服務器,或者在多個系統上集中處理日志。

對于這些需求,你可以考慮使用像Logstash、Graylog或Fluentd這樣的日志聚合工具,它們可以與journalctl結合使用,提供更強大的功能。

6. journalctl --help指令文檔

英文
journalctl [OPTIONS...] [MATCHES...]Query the journal.Options:--system                Show the system journal--user                  Show the user journal for the current user-M --machine=CONTAINER     Operate on local container-S --since=DATE            Show entries not older than the specified date-U --until=DATE            Show entries not newer than the specified date-c --cursor=CURSOR         Show entries starting at the specified cursor--after-cursor=CURSOR   Show entries after the specified cursor--show-cursor           Print the cursor after all the entries--cursor-file=FILE      Show entries after cursor in FILE and update FILE-b --boot[=ID]             Show current boot or the specified boot--list-boots            Show terse information about recorded boots-k --dmesg                 Show kernel message log from the current boot-u --unit=UNIT             Show logs from the specified unit--user-unit=UNIT        Show logs from the specified user unit-t --identifier=STRING     Show entries with the specified syslog identifier-p --priority=RANGE        Show entries with the specified priority--facility=FACILITY...  Show entries with the specified facilities-g --grep=PATTERN          Show entries with MESSAGE matching PATTERN--case-sensitive[=BOOL] Force case sensitive or insenstive matching-e --pager-end             Immediately jump to the end in the pager-f --follow                Follow the journal-n --lines[=INTEGER]       Number of journal entries to show--no-tail               Show all lines, even in follow mode-r --reverse               Show the newest entries first-o --output=STRING         Change journal output mode (short, short-precise,short-iso, short-iso-precise, short-full,short-monotonic, short-unix, verbose, export,json, json-pretty, json-sse, json-seq, cat,with-unit)--output-fields=LIST    Select fields to print in verbose/export/json modes--utc                   Express time in Coordinated Universal Time (UTC)-x --catalog               Add message explanations where available--no-full               Ellipsize fields-a --all                   Show all fields, including long and unprintable-q --quiet                 Do not show info messages and privilege warning--no-pager              Do not pipe output into a pager--no-hostname           Suppress output of hostname field-m --merge                 Show entries from all available journals-D --directory=PATH        Show journal files from directory--file=PATH             Show journal file--root=ROOT             Operate on files below a root directory--namespace=NAMESPACE   Show journal data from specified namespace--interval=TIME         Time interval for changing the FSS sealing key--verify-key=KEY        Specify FSS verification key--force                 Override of the FSS key pair with --setup-keysCommands:-h --help                  Show this help text--version               Show package version-N --fields                List all field names currently used-F --field=FIELD           List all values that a specified field takes--disk-usage            Show total disk usage of all journal files--vacuum-size=BYTES     Reduce disk usage below specified size--vacuum-files=INT      Leave only the specified number of journal files--vacuum-time=TIME      Remove journal files older than specified time--verify                Verify journal file consistency--sync                  Synchronize unwritten journal messages to disk--relinquish-var        Stop logging to disk, log to temporary file system--smart-relinquish-var  Similar, but NOP if log directory is on root mount--flush                 Flush all journal data from /run into /var--rotate                Request immediate rotation of the journal files--header                Show journal header information--list-catalog          Show all message IDs in the catalog--dump-catalog          Show entries in the message catalog--update-catalog        Update the message catalog database--setup-keys            Generate a new FSS key pairSee the journalctl(1) man page for details.
中文
journalctl [選項...] [匹配項...]查詢日志。選項:--system                顯示系統日志--user                  顯示當前用戶的用戶日志-M --machine=CONTAINER     對本地容器進行操作-S --since=DATE            顯示不早于指定日期的條目-U --until=DATE            顯示不晚于指定日期的條目-c --cursor=CURSOR         從指定的游標開始顯示條目--after-cursor=CURSOR   顯示指定游標之后的條目--show-cursor           在所有條目后打印游標--cursor-file=FILE      顯示文件中游標后的條目并更新文件-b --boot[=ID]             顯示當前啟動或指定的啟動--list-boots            顯示有關記錄啟動的簡潔信息-k --dmesg                 顯示當前啟動的內核消息日志-u --unit=UNIT             顯示指定單元的日志--user-unit=UNIT        顯示指定用戶單元的日志-t --identifier=STRING     顯示具有指定syslog標識符的條目-p --priority=RANGE        顯示具有指定優先級的條目--facility=FACILITY...  顯示具有指定設施的條目-g --grep=PATTERN          顯示與PATTERN匹配的MESSAGE的條目--case-sensitive[=BOOL] 強制進行大小寫敏感或不敏感的匹配-e --pager-end             在分頁器中立即跳到末尾-f --follow                跟蹤日志-n --lines[=INTEGER]       要顯示的日志條目數量--no-tail               即使在跟蹤模式下也顯示所有行-r --reverse               先顯示最新的條目-o --output=STRING         改變日志輸出模式 (short, short-precise,short-iso, short-iso-precise, short-full,short-monotonic, short-unix, verbose, export,json, json-pretty, json-sse, json-seq, cat,with-unit)--output-fields=LIST    在verbose/export/json模式下選擇要打印的字段--utc                   以協調世界時(UTC)表示時間-x --catalog               在可用的地方添加消息解釋--no-full               縮略字段-a --all                   顯示所有字段,包括長和不可打印的-q --quiet                 不顯示信息消息和權限警告--no-pager              不將輸出管道輸出到分頁器--no-hostname           抑制主機名字段的輸出-m --merge                 顯示所有可用日志的條目-D --directory=PATH        顯示來自目錄的日志文件--file=PATH             顯示日志文件--root=ROOT             在根目錄下操作文件--namespace=NAMESPACE   顯示指定命名空間的日志數據--interval=TIME         更改FSS密封鍵的時間間隔--verify-key=KEY        指定FSS驗證鍵--force                 使用--setup-keys覆蓋FSS密鑰對
命令:-h --help                  顯示此幫助文本--version               顯示包版本-N --fields                列出當前使用的所有字段名稱-F --field=FIELD           列出指定字段采取的所有值--disk-usage            顯示所有日志文件的總磁盤使用量--vacuum-size=BYTES     將磁盤使用量減少到指定大小以下--vacuum-files=INT      只保留指定數量的日志文件--vacuum-time=TIME      刪除早于指定時間的日志文件--verify                驗證日志文件的一致性--sync                  將未寫入的日志消息同步到磁盤--relinquish-var        停止記錄到磁盤,記錄到臨時文件系統--smart-relinquish-var  類似,但如果日志目錄在根掛載上,則無操作--flush                 將所有日志數據從 /run 刷新到 /var--rotate                請求立即旋轉日志文件--header                顯示日志頭信息--list-catalog          在目錄中顯示所有消息ID--dump-catalog          顯示消息目錄中的條目--update-catalog        更新消息目錄數據庫--setup-keys            生成新的FSS密鑰對有關詳細信息,請參閱 journalctl(1) 手冊頁。

7. 補充

清空所有日志

清除所有的系統日志,可使用 journalctl--vacuum-time--vacuum-size 選項。

  1. 清除所有日志:

sudo journalctl --vacuum-time=1s

這將會刪除所有時間戳早于現在的日志條目,基本上等同于清空所有日志。

journalctl --vacuum-time 命令通常接受一個相對時間值,如 “1year”, “2months”, “3weeks”, “4days”, “1s” 等。這個命令會刪除所有在指定時間長度之前的日志。

? ? 2.清除超過特定大小的日志:

journalctl --vacuum-size=1

這將刪除所有日志,直到系統日志的總大小降到1(單位為BYTE)。

可以使用journalctl --disk-usage查看日志占用空間大小。

3.如果以上兩個都沒有效果,可以采用暴力方式直接刪除日志文件。

  1. 這將刪除所有日志,直到系統日志的總大小降到1(單位為BYTE)。

    可以使用journalctl --disk-usage查看日志占用空間大小。

  2. 如果以上兩個都沒有效果,可以采用暴力方式直接刪除日志文件。

  1. 暴力刪除有風險,使用需謹慎。

過濾掉某個服務日志

比如systemd服務日志太多太煩雜,可以過濾掉它:

journalctl | grep -v systemd

注意事項

  • journal日志不會將程序輸出的空行顯示,日志會被壓縮得滿滿當當。

  • journal日志不會自動持久化,重啟系統后,歷史日志將被清除。可參考journal日志持久化配置。

總結

journalctl是一個強大而靈活的工具,可以幫助你管理和查詢Linux系統的日志。通過學習和理解journalctl的各種功能和選項,你將能夠更有效地管理你的系統,并在出現問題時快速找到原因。

二、Systemd Journalctl日志持久化存儲

在此文章中,我們將詳細探討systemd journalctl日志的持久化配置。本文將首先簡單介紹systemd和journalctl,然后深入探討如何配置和使用journalctl來實現日志的持久化。

1. systemd和journalctl概述

Systemd是Linux系統的一個初始化系統和服務管理器,它負責啟動系統后的所有服務。其中,Journal是systemd的一個組成部分,用于收集和存儲系統日志。

Journalctl是一種工具,可以方便地從systemd的journal中檢索日志信息。默認情況下,這些日志數據是易失的,也就是說,每次重啟系統后,它們都會被清除。

# 查看所有日志條目
journalctl

2. journalctl日志持久化的重要性

日志持久化的主要優點在于,它可以幫助我們保存重啟后的日志信息,以便在需要時進行查閱和分析。這對于故障排除、安全審計以及性能監測等場景非常有價值。

3. 配置journalctl日志持久化

為了使journalctl的日志持久化,我們需要創建一個名為/var/log/journal的目錄,并設置適當的權限。

# 創建日志目錄
mkdir -p /var/log/journal# 設置權限
systemd-tmpfiles --create --prefix /var/log/journal

另外,我們還需要在/etc/systemd/journald.conf文件中修改或添加以下配置:

[Journal]
Storage=persistent

然后,重新啟動systemd-journald服務來應用新的配置。

# 重新啟動服務
systemctl restart systemd-journald

4. 使用journalctl進行日志查詢

配置好日志持久化后,我們可以使用各種查詢選項來過濾和查找日志信息。例如:

# 查看指定時間段的日志
journalctl --since "2022-01-01" --until "2022-01-31"
?
# 查看指定服務的日志
journalctl -u nginx.service

5. 管理journalctl日志文件大小

雖然日志持久化很有用,但如果不加以管理,日志文件可能會占用大量磁盤空間。我們可以通過配置/etc/systemd/journald.conf文件來限制日志文件的大小。

[Journal]
# 日志文件最大占用空間
SystemMaxUse=500M

(注意這里SystemMaxUse是限制所有日志總占空間大小,SystemMaxFileSize是限制單個輪轉日志文件的大小;RuntimeMaxUse用于限制在 /run/log/journal/ 中的日志數據占用的空間大小,這是管理非持久性存儲的日志容量大小,已經設置了默認值,我們不用管)

配置后同樣要重新啟動服務:

# 重新啟動服務
systemctl restart systemd-journald

6. 查看日志文件,驗證持久化功能

ll /var/log/journal/

由于journal的二進制格式,不能直接使用文本編輯器(如vi或nano)打開和閱讀這些文件,還得使用journalctl命令進行查看。

我們來驗證一下是否成功實現日志持久化保存。我用journalctl -u ky_ai_ip_change.service查看我修改ip服務的日志。

然后我把SystemMaxUse改成1M重復上面步驟再來一遍:

重啟后查看日志:

Warning: journal has been rotated since unit was started, output may be incomplete.
-- Logs begin at Mon 2023-08-21 23:25:54 CST, end at Mon 2023-08-21 23:33:19 CST. --
-- No entries --

貌似是提示我說,我的修改ip服務的日志因為被輪轉(rotated),已經轉沒了。

是因為我們設置的日志總占空間,太小辣!才1M,會很容易被別的系統服務日志沖沒的。

還是改回500M。

7. 故障排除與最佳實踐

對于任何系統管理員來說,了解如何處理常見問題和遵循最佳實踐都是至關重要的。在使用journalctl時,我們應始終記住以下幾點:

  • 定期檢查和清理日志文件

  • 使用合適的查詢選項來精確查找日志

  • 及時更新并備份/etc/systemd/journald.conf文件

8. 結論

總的來說,journalctl日志持久化配置是一個強大而靈活的工具,可以幫助我們更好地管理和審計系統日志。通過正確的配置和使用,我們可以充分利用這個工具來提高我們的運維效率。

附錄

/etc/systemd/journald.conf原始文件及配置項解析(ubuntu20.04)

  • 原始文件

    cat /etc/systemd/journald.conf
    #  This file is part of systemd.
    #
    #  systemd is free software; you can redistribute it and/or modify it
    #  under the terms of the GNU Lesser General Public License as published by
    #  the Free Software Foundation; either version 2.1 of the License, or
    #  (at your option) any later version.
    #
    # Entries in this file show the compile time defaults.
    # You can change settings by editing this file.
    # Defaults can be restored by simply deleting this file.
    #
    # See journald.conf(5) for details.
    ?
    [Journal]
    #Storage=auto
    #Compress=yes
    #Seal=yes
    #SplitMode=uid
    #SyncIntervalSec=5m
    #RateLimitIntervalSec=30s
    #RateLimitBurst=10000
    #SystemMaxUse=
    #SystemKeepFree=
    #SystemMaxFileSize=
    #SystemMaxFiles=100
    #RuntimeMaxUse=
    #RuntimeKeepFree=
    #RuntimeMaxFileSize=
    #RuntimeMaxFiles=100
    #MaxRetentionSec=
    #MaxFileSec=1month
    #ForwardToSyslog=yes
    #ForwardToKMsg=no
    #ForwardToConsole=no
    #ForwardToWall=yes
    #TTYPath=/dev/console
    #MaxLevelStore=debug
    #MaxLevelSyslog=debug
    #MaxLevelKMsg=notice
    #MaxLevelConsole=info
    #MaxLevelWall=emerg
    #LineMax=48K
    #ReadKMsg=yes

  • 解析

    #  這個文件是 systemd 的一部分。
    #
    #  systemd 是自由軟件;你可以在 GNU 較小通用公共許可證的條款下重新發布和/或修改它
    #  該許可證由自由軟件基金會發布;可以選擇許可證的版本 2.1 或者
    #  (如果你愿意)任何后續版本。
    #
    # 此文件中的條目顯示了編譯時的默認設置。
    # 你可以通過編輯此文件來更改設置。
    # 只需刪除此文件,即可恢復默認設置。
    #
    # 詳細信息請參閱 journald.conf(5)。

    (就是說想要恢復默認設置,只需刪除此文件即可。)

    • Storage:定義日志數據應存儲在何處,例如 ‘volatile’(臨時文件系統)或 ‘persistent’(磁盤)。

    • Compress:定義是否應壓縮存儲在日志中的數據。

    • Seal:確定是否使用Forward Secure Sealing (FSS) 保護日志條目免受篡改。

    • SplitMode:定義如何拆分日志文件,例如根據用戶ID或登錄會話。

    • SyncIntervalSec:定義系統何時將日志數據從內存同步到磁盤。

    • RateLimitIntervalSecRateLimitBurst:定義日志消息的頻率限制,即在給定的時間間隔內可以接受的最大消息數。

    • SystemMaxUse, SystemKeepFree, SystemMaxFileSize, SystemMaxFiles:定義系統日志所能使用的磁盤空間,以及應保留多少空閑空間。

    • RuntimeMaxUse, RuntimeKeepFree, RuntimeMaxFileSize, RuntimeMaxFiles:定義運行時日志的大小和文件數量限制。

    • MaxRetentionSec:定義系統應保留舊日志條目的最長時間。

    • MaxFileSec:定義單個日志文件的最大生存時間。

    • ForwardToSyslog, ForwardToKMsg, ForwardToConsole, ForwardToWall:定義是否將日志消息轉發到syslog、內核消息日志、控制臺或所有登錄用戶。

    • TTYPath:定義寫入終端消息的TTY設備路徑。

    • MaxLevelStore, MaxLevelSyslog, MaxLevelKMsg, MaxLevelConsole, MaxLevelWall:定義各種日志目標的最大日志級別。

    • LineMax:定義日志條目的最大行長度。

    • ReadKMsg:定義是否從內核消息日志讀取并添加到系統日志。

    配置項的具體配置方法可參考官方文檔:https://www.freedesktop.org/software/systemd/man/journald.conf.html

20240228 openEuler20.03 journald.conf 原始文件

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See journald.conf(5) for details.
?
[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitIntervalSec=30s
#RateLimitBurst=10000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=no
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
#LineMax=48K
#ReadKMsg=yes
?
journal與logrotate日志管理工具的區別

systemd journallogrotate 都是用于管理日志文件的工具,但它們的工作方式和特性有一些區別。

  1. 日志格式:

    • systemd journal 存儲的日志是二進制格式,這使得它可以提供更豐富的查詢功能,例如按服務、優先級或時間范圍過濾日志。

    • logrotate 處理的通常是文本格式的日志,這種日志對人類來說更易讀,但對機器來說處理起來可能就不那么方便了。

  2. 日志切割:

    • systemd journal 會自動管理日志文件的大小,當日志達到一定大小時,它會自動刪除舊的日志來釋放空間。你可以通過配置選項(如 SystemMaxUseRuntimeMaxUse)來控制日志文件的最大大小。

    • logrotate 是通過定期運行(通常是每天)來進行日志切割的,它可以根據日志文件的大小、文件的年齡或者日期來決定何時進行切割。切割后的日志文件可以選擇壓縮以節省空間。

  3. 使用場景:

    • systemd journal 主要用于收集系統和服務的日志,它是 systemd 的一個組成部分,所以在使用 systemd 的系統上,無法避免使用 journal。

    • logrotate 更多的是用于應用程序的日志管理,尤其是那些還沒有采用 systemd 的系統或者那些產生大量日志的應用程序。

兩者都有各自的優點,也可以結合使用,比如讓 systemd journal 收集日志,然后使用 logrotate 來管理 journal 導出的文本格式日志。

20231017 發現日志達到設置上限了,日志并未自動刪除,新的日志也沒有儲存。一時半會找不到解決辦法,通過設置MaxRetentionSec=7day自動清理7天前的日志來臨時解決

今天調試ip修改服務,發現重啟后新的日志并未正常保存,重啟前日志倒是可以看到的

查看systemd-journald服務狀態:

systemctl status systemd-journald

root@nvidia:/ky/boot/journal_persistence# systemctl status systemd-journald
● systemd-journald.service - Journal ServiceLoaded: loaded (/lib/systemd/system/systemd-journald.service; static; vendor preset: enabled)Active: active (running) since Tue 2023-10-17 18:07:39 CST; 2h 36min ago
TriggeredBy: ● systemd-journald-audit.socket● systemd-journald-dev-log.socket● systemd-journald.socketDocs: man:systemd-journald.service(8)man:journald.conf(5)Main PID: 6899 (systemd-journal)Status: "Processing requests..."Tasks: 1 (limit: 8126)Memory: 1.8MCGroup: /system.slice/systemd-journald.service└─6899 /lib/systemd/systemd-journald
?
Oct 17 18:07:39 nvidia systemd-journald[6899]: Journal started
Oct 17 18:07:39 

發現上面有一句:(/var/log/journal/dbfef1aa0b064bcf9d30ec3ad0886edb) is 514.5M, max 500.0M, 0B free.

表明可能自動清理舊日志功能并未正常執行。

用下面命令查看journal日志占用大小,發現已經超了。:

journalctl --disk-usage

使用以下命令手動刪除超出限制的舊日志,但是并未發現有任何變化:

journalctl --vacuum-size=500M

使用以下命令手動刪除某個時間外的舊日志,發現刪除了一部分日志:

journalctl --vacuum-time=1d
配置刪除指定時間前的舊日志

一時半會找不到什么解決辦法,它超過容量限制居然不自動刪除,為了臨時解決這個問題,我可能要設置一個自動刪除指定日期前舊日志的選項才行。

將以下選項加入到/etc/systemd/journald.conf中:

MaxRetentionSec=7day

然后重啟systemd-journald服務:

systemctl restart systemd-journald

雖然空間已經清空了,但是重啟后,日志還是消失了(嘗試設置SyncIntervalSec=1s,每隔1秒從內存將日志同步到硬盤)

現在空間是足夠的。

分析可能是重啟時journal沒有把日志從內存同步到硬盤中去,因為默認同步時間幾分鐘一次的。

但是我們可以在/etc/systemd/journald.conf設置SyncIntervalSec=1s參數,這個參數將1秒鐘同步一次,我試試是否可行

設置完后重啟服務:systemctl restart systemd-journald

分析日志文件:

ll /var/log/journal/dbfef1aa0b064bcf9d30ec3ad0886edb/

存在日志跳躍,真的無語。。。

20231018 發現日志無法正常持久化了,重啟后不保留之前的日志,后來不知怎么又給弄好了。。。

我也不知道做了什么操作,發現又好了。

大概是以下操作之一:

  • 清空日志:

    journalctl --vacuum-time=1s
    journalctl --vacuum-size=1
  • 重新創建日志目錄(如果存在不重新創建)并正確配置權限:

    sudo mkdir -p /var/log/journal
    sudo systemd-tmpfiles --create --prefix /var/log/journal
    sudo systemctl restart systemd-journald

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

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

相關文章

【學習】【js】棧數據結構

棧 棧是一種遵從后進先出(LIFO)原則的有序集合。新添加或待刪除的元素都保存在棧的同一端,稱作棧頂,另一端就叫棧底。在棧里,新元素都靠近棧頂,舊元素都接近棧底。 基于數組的棧 時間復雜度O(n),占用較多的…

【Linux】基本指令 · 下

alias 指令起別名為什么 ls -l 指令等價于 ll 指令呢?指令就是可執行程序,和我們自己寫的代碼編譯好的程序,沒有本質區別! 指令在系統的某一個位置存在! 執行指令前,現在系統中查找對應的指令指令在根目錄下…

計算機視覺(opencv)實戰二十二——指紋圖像中提取特征點,計算兩兩指紋之間的相似度

指紋識別原理與代碼實現詳解指紋識別是一種常見的生物特征識別技術,廣泛應用于門禁系統、手機解鎖、考勤打卡、身份認證等場景。其核心思想是:從指紋圖像中提取特征點,計算兩幅指紋之間的相似度,并根據相似度判斷是否為同一人。本…

Linux基礎之部署mysql數據庫

文章目錄一、環境準備二、源碼解壓與依賴三、CMake 編譯配置四、配置 MySQL權限管理修改配置文件 /etc/my.cnf五、環境變量設置六、數據庫初始化七、服務管理八、賬號密碼管理一、環境準備 yum -y install gcc gcc-c ncurses ncurses-devel bison cmakegcc / gcc-c&#xff1a…

代碼審計-PHP專題原生開發文件上傳刪除包含文件操作監控Zend源碼解密1day分析

快速分析脆弱:1、看文件路徑2、看代碼里面的變量(可控)3、看變量前后的過濾文件安全挖掘點:1、腳本文件名2、應用功能點3、操作關鍵字文件上傳,文件下載(讀取),文件包含,文件刪除等emlog-文件上…

零基礎搭建 Hexo 博客:從本地到 GitHub Pages 全流程指南

零基礎搭建 Hexo 博客:從本地到 GitHub Pages 全流程指南 Hexo 是一個快速、簡潔且高效的博客框架,支持使用 Markdown 來編寫文章,并能快速生成靜態網頁,非常適合想要搭建個人博客的同學。本文將帶你從零開始,本地搭建…

Git 簡介

Git 是目前全球最流行的分布式版本控制系統(Distributed Version Control System, DVCS),核心作用是追蹤文件修改歷史、支持多人協同開發,并能高效管理代碼(或任何文本類文件)的版本迭代。它由 Linux 內核創…

后端Web實戰-Spring原理

目錄 1. 配置優先級 2. Bean管理 2.1 獲取Bean 2.2 Bean作用域 面試題:Lazy是如何解決循環依賴問題的? 2.3 第三方Bean 3. SpringBoot原理 3.1 起步依賴 3.2 自動配置 3.2.1 概述 3.2.2 自動配置的原理及常見方案 3.2.2.1 概述 3.2.2.2 方案…

在 Qoder 等 AI 二創 IDE 里用 VS Code Remote-SSH 的“曲線連接”實戰

目標:讓你在 Qoder 等在線/AI 輔助 IDE 中,也能像本地 VS Code 一樣通過 Remote-SSH 連接到自己的遠程服務器進行開發。 前提:只在你擁有或被授權的服務器上使用,遵守所用平臺的條款與限制。兩句話說清楚 先用本地 VS Code 正常連…

python發送請求SSL驗證設置

這個錯誤通常是由于SSL/TLS握手失敗導致的,可能原因包括證書驗證問題、不兼容的加密協議或網絡連接中斷。以下是幾種解決方案,按推薦順序排列: 方案一:臨時禁用SSL驗證(快速測試) response requests.get(u…

工廠自動化正從 “人工堆疊” 向 “設備替代” 快速轉變

?人工進行零件排列,雖在操作靈活性上有一定表現,但實際應用中存在明顯短板,對工廠自動化轉型形成制約。從成本來看,一名工人日均工資約數百元,若需 5-6 名工人協同作業,月均人力成本易突破萬元&#xff0c…

中標麒麟7.4部署gitlab-runner

1. 部署環境 本次部署環境完全斷網。需要離線下載gitlab-runner及其依賴。 本次部署環境為中標麒麟7.4。目前機器上部署了gitlab,安裝了maven。 2. 部署步驟 2.1 在外部下載好依賴 我首先在騰訊云上布置了一個centos7.9的虛擬機,沒有安裝任何東西。 …

在 IDEA 2024 創建 Vue 項目(保姆級)

目錄 一、 前后端分離 1. 簡介 2. 實現前后端分離的常用前端框架 3. 前后端分離和動靜分離 3.1 前后端分離: 3.2 動靜分離: 二、 Vue.js概述 1. 簡介 2. SPA介紹 2.1 優點 2.2 缺點 3. MVVM介紹 3.1 示例 三、 名詞解釋 1. Node.js 2. npm 3. webpack 4. Vue…

Coze源碼分析-資源庫-創建知識庫-后端源碼-應用/領域/數據訪問

3. 應用服務層 3.1 知識庫應用服務 文件位置: backend/application/knowledge/knowledge.go func (k *KnowledgeApplicationService) CreateKnowledge(ctx context.Context, req *dataset.CreateDatasetRequest) (*dataset.CreateDatasetResponse, error) {// 1. 轉換文檔類型d…

Shopify指紋手機矩陣:無限擴店,橫掃FB/GG廣告封號風險

一、 為什么需要為Shopify使用指紋手機?雖然Shopify不會因為你多開店而封號,但以下場景需要隔離環境:規避廣告平臺關聯:這是最核心的用途。你會用Facebook、Google、TikTok等廣告平臺為你的Shopify店鋪引流。這些廣告平臺嚴格禁止…

【Python】家庭用電數據分析Prophet預測

數據集:Household Electricity Consumption | Kaggle 目錄 數據集簡介 探索性分析 Prophet預測 Prophet模型 Prophet理念 Prophet優點 數據集簡介 240000-household-electricity-consumption-records數據集包含了一個家庭6個月的用電數據,收集于2…

信息系統運維管理

運行維護服務指的是采用信息技術手段及方法,依據客戶提出的服務要求,為其在使用信息系統過程中提出的需求提供的綜合服務是信息技術服務中的一種主要類型。運行維護服務對象是指信息系統工程建設項目交付的內容,包括機房基礎設施,…

系統編程完結整理以及補充

Shell(命令與腳本語法) 系統編程(一)shell的學習-CSDN博客 功能/概念語法/關鍵字參數/用法說明返回值/效果難易點注意事項示例/實驗提示定義函數func_name() { commands; }無參數或通過 $1 $2 ... 傳參函數執行參數傳遞、全局變…

第十四屆藍橋杯青少組C++選拔賽[2022.12.18]第二部分編程題(2、字符翻轉)

參考程序&#xff1a;#include <bits/stdc.h> using namespace std;int main() {string s;cin >> s; // 讀取輸入字符串&#xff0c;若無輸入則結束for (int i 0; i < (int)s.size(); i) {// i 從 0 開始&#xff0c;位置是 i1&#xff1b;如果 i 是奇數&#…

Django基礎環境入門

熟悉過程 搭建環境&#xff0c;運行起來基礎請求到服務接口跟java web對比 說明先不糾結細節先跑起來再說 1. 環境搭建 python已經安裝&#xff0c;使用conda管理 django安裝 django官方文檔 pip install django也可以命令創建 mkdir djangotutorial django-admin startp…