最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux?mmap內(nèi)存映射機制:從底層原理、API?到實戰(zhàn)開發(fā)(圖文附代碼)

 更新時間:2026年04月11日 11:27:03   作者:草莓熊Lotso  
本文全面解析Linux?mmap內(nèi)存映射機制,涵蓋核心原理、API參數(shù)詳解、MAP_SHARED/MAP_PRIVATE?區(qū)別、三大實戰(zhàn)案例(文件寫入/讀取/模擬?malloc),以及避坑指南、性能對比與未來趨勢,所有代碼可直接運行,適合系統(tǒng)開發(fā)者進階

前言:

大家好,我是深耕 Linux 內(nèi)核與系統(tǒng)開發(fā)的博主。在 Linux 高性能開發(fā)中,mmap是一個極具魔力的系統(tǒng)調(diào)用 —— 它能讓我們直接通過內(nèi)存操作讀寫文件,省去傳統(tǒng)read/write的內(nèi)核態(tài)與用戶態(tài)數(shù)據(jù)拷貝開銷,還能實現(xiàn)進程間共享內(nèi)存、自定義內(nèi)存分配等高級功能。本文從核心原理、API 參數(shù)、實戰(zhàn)代碼到避坑指南全覆蓋,所有代碼均可直接編譯運行,兼顧學(xué)習(xí)理解與工業(yè)級開發(fā)參考。

一. mmap 到底是什么?

mmap全稱memory map,即內(nèi)存映射 ,是 Linux 提供的系統(tǒng)調(diào)用,核心能力是:將一個文件或設(shè)備的內(nèi)容,直接映射到進程的虛擬地址空間中。
映射完成后,進程對這段虛擬內(nèi)存的讀寫操作,會被內(nèi)核自動同步到對應(yīng)的文件 / 設(shè)備上,無需再調(diào)用傳統(tǒng)的read/write系統(tǒng)調(diào)用。

1.1 核心優(yōu)勢

  • 零拷貝高效訪問 :傳統(tǒng)read/write需要先把數(shù)據(jù)從磁盤拷貝到內(nèi)核緩沖區(qū),再拷貝到用戶態(tài)內(nèi)存;而mmap直接建立文件與用戶虛擬地址的映射,只需要一次拷貝(當(dāng)發(fā)生缺頁異常時從磁盤加載到內(nèi)存),大幅提升大文件讀寫效率。
  • 統(tǒng)一訪問形式 :操作文件就像操作內(nèi)存一樣,直接通過指針讀寫,無需繁瑣的文件偏移操作(如lseek)。
  • 天然支持共享內(nèi)存 :多個進程映射同一個文件,可直接實現(xiàn)進程間數(shù)據(jù)共享,是 Linux 進程間通信(IPC)的經(jīng)典實現(xiàn)方式。
  • 靈活的內(nèi)存管理 :可實現(xiàn)匿名映射,用于自定義內(nèi)存分配,替代malloc的部分場景。

?? 術(shù)語解釋 - 零拷貝(Zero-copy):指數(shù)據(jù)在傳輸過程中,CPU 無需將數(shù)據(jù)從一塊存儲區(qū)復(fù)制到另一塊存儲區(qū)。傳統(tǒng) read/write 涉及兩次拷貝(磁盤→內(nèi)核緩沖區(qū)→用戶緩沖區(qū)),而 mmap 只在內(nèi)核態(tài)完成一次磁盤→內(nèi)存的拷貝(通過缺頁中斷按需加載),用戶態(tài)直接訪問,因此常被稱為“零拷貝”技術(shù)之一。

1.2 映射的內(nèi)存布局

在進程的虛擬地址空間中,mmap的映射區(qū)域位于堆區(qū)和棧區(qū)之間的共享區(qū)(mmap 區(qū)域) ,和動態(tài)庫的加載區(qū)域一致。具體分布從低地址到高地址依次為:代碼段、數(shù)據(jù)段、堆區(qū)、內(nèi)存映射區(qū)(mmap 區(qū)域)、棧區(qū)、內(nèi)核空間。

?? 知識普及 - 虛擬地址空間:每個 Linux 進程都擁有獨立的虛擬地址空間(通常 32 位系統(tǒng)為 4GB,64 位系統(tǒng)更大)。mmap 操作的本質(zhì)是在這個虛擬空間中申請一塊區(qū)域,并將其與某個物理內(nèi)存或文件頁框建立映射關(guān)系,實際物理內(nèi)存的分配發(fā)生在首次訪問時(缺頁異常)。

二. mmap 與 munmap API 全解析

2.1 函數(shù)原型

#include <sys/mman.h>
// 創(chuàng)建內(nèi)存映射
void *mmap(void *addr, size_t length, int prot, int flags,
           int fd, off_t offset);
// 解除內(nèi)存映射
int munmap(void *addr, size_t length);

2.2 mmap 參數(shù)介紹


參數(shù)詳細(xì)說明:

參數(shù)含義常見取值與注意事項
addr映射起始地址(提示)通常設(shè)為 NULL,由內(nèi)核自動選擇合適地址;若指定地址,需保證頁對齊且未被占用
length映射長度(字節(jié))必須大于 0,建議為頁大小的整數(shù)倍;內(nèi)核實際以頁為單位進行映射
prot內(nèi)存保護模式PROT_READ / PROT_WRITE / PROT_EXEC / PROT_NONE,可組合(如 PROT_READ \| PROT_WRITE)
flags映射類型與控制行為MAP_SHARED / MAP_PRIVATE / MAP_ANONYMOUS / MAP_FIXED 等
fd文件描述符映射文件時需打開的文件描述符;匿名映射時設(shè)為 -1
offset文件偏移量必須是頁大小的整數(shù)倍,通常從 0 開始

2.3 返回值說明

  • mmap成功:返回指向映射區(qū)域起始地址的指針;
  • mmap失敗:返回MAP_FAILED(即(void *)-1),并設(shè)置errno指示錯誤原因;
  • munmap成功:返回 0;
  • munmap失?。悍祷?- 1,并設(shè)置errno。

?? 專家建議:調(diào)用 mmap 后務(wù)必檢查返回值是否為 MAP_FAILED,不要用 NULL 作為失敗判斷(因為合法映射地址可能為 0)。同時,munmap 時建議將指針置為 NULL,避免野指針誤用。

2.4 核心標(biāo)志位深度辨析:MAP_SHARED vs MAP_PRIVATE

這是mmap最核心的兩個標(biāo)志位,決定了映射的行為模式,必須分清:

特性MAP_SHARED(共享映射)MAP_PRIVATE(私有映射)
修改同步對內(nèi)存的修改會同步到底層文件修改不會同步到文件,觸發(fā)寫時拷貝
多進程可見對其他映射同一文件的進程可見對其他進程不可見,修改僅當(dāng)前進程有效
適用場景進程間共享內(nèi)存、大文件讀寫修改只讀文件映射、私有內(nèi)存分配、不希望修改源文件的場景

額外補充:MAP_SHARED_VALIDATE 與 MAP_SYNC
對于支持 DAX(Direct Access,如持久內(nèi)存)的文件系統(tǒng),Linux 還提供了 MAP_SHARED_VALIDATE 和 MAP_SYNC 標(biāo)志,允許應(yīng)用確保寫操作同步到持久化設(shè)備,適用于數(shù)據(jù)庫日志等場景。

三. mmap 實戰(zhàn)開發(fā)(PDF 完整代碼復(fù)刻 + 詳細(xì)注釋)

3.1 實戰(zhàn) 1:基于 mmap 的文件寫入

該示例通過mmap映射文件,直接向映射內(nèi)存寫入數(shù)據(jù),無需 write 系統(tǒng)調(diào)用,數(shù)據(jù)會自動同步到文件。

關(guān)鍵注意事項:

  • 要實現(xiàn)寫入映射,文件必須以O(shè)_RDWR模式打開(讀寫模式);
  • 空文件無法直接映射,必須通過ftruncate設(shè)置文件大小,保證映射的長度有對應(yīng)的文件存儲空間;
  • 映射長度必須是頁大小整數(shù)倍(雖然內(nèi)核會自動圓整,但明確對齊更安全)。
#include<iostream>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
const int PAGE_SIZE = 4096; // 其實最后最小都是 4096,一定要是4096的倍數(shù),否則會報錯
// write_mmap filename
int main(int argc, char* argv[])
{
    if(argc != 2)
    {
        std::cerr << "Usage: " << argv[0] << " filename" << std::endl;
        return 1;
    }
    // 1.打開目標(biāo)文件, mmap需要自己先打開文件
    int fd = ::open(argv[1], O_RDWR | O_CREAT | O_TRUNC, 0666);
    if(fd < 0)
    {
        std::cerr << "Failed to open file: " << argv[1] << std::endl;
        return 2;
    }
    // 2. 我們需要手動調(diào)整一個文件的大小,方便我們進行合法的mmap
    if(::ftruncate(fd, PAGE_SIZE) < 0)
    {
        std::cerr << "Failed to ftruncate file: " << argv[1] << std::endl;
        return 3;
    }
    // 3. 進行mmap操作
    char *shmaddr = (char*)::mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    if(shmaddr == MAP_FAILED)
    {
        std::cerr << "Failed to mmap file: " << argv[1] << std::endl;
        return 4;
    }
    // 4. 正在進行文件操作
    for (char c = 'a'; c <= 'z'; c++) 
    {
        shmaddr[c - 'a'] = c;
        sleep(1);
    }
    // 5. 關(guān)閉文件映射
    if(::munmap(shmaddr, PAGE_SIZE) == -1)
    {
        std::cerr << "Failed to munmap file: " << argv[1] << std::endl;
        return 5;
    }
    // 6. 關(guān)閉文件描述符
    ::close(fd);
    return 0;
}



?? 代碼擴展解釋:上述示例中,ftruncate(fd, 4096) 將文件擴展到 4KB(一頁大小)。如果省略這一步,映射成功后寫入數(shù)據(jù)會觸發(fā) SIGBUS 總線錯誤(因為磁盤上沒有對應(yīng)的存儲空間)。此外,msync 雖未調(diào)用,但內(nèi)核會定期刷臟頁;若需強制落盤,可在 munmap 前調(diào)用 msync(ptr, 4096, MS_SYNC)。

3.2 實戰(zhàn) 2:基于 mmap 的文件讀取

該示例通過mmap映射已有文件,直接讀取映射內(nèi)存即可獲取文件內(nèi)容,無需read系統(tǒng)調(diào)用。

#include<iostream>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
const int PAGE_SIZE = 4096; // 其實最后最小都是 4096,一定要是4096的倍數(shù),否則會報錯
// read_mmap filename
int main(int argc, char* argv[])
{
    if(argc != 2)
    {
        std::cerr << "Usage: " << argv[0] << " filename" << std::endl;
        return 1;
    }
    // 1.打開目標(biāo)文件, mmap需要自己先打開文件
    int fd = ::open(argv[1], O_RDONLY);
    if(fd < 0)
    {
        std::cerr << "Failed to open file: " << argv[1] << std::endl;
        return 2;
    }
    // 2. 獲取文件的大小
    struct stat st;
    if(::fstat(fd, &st) < 0)
    {
        std::cerr << "Failed to fstat file: " << argv[1] << std::endl;
        return 3;
    }
    // 3. 進行mmap操作
    char *shmaddr = (char*)::mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
    if(shmaddr == MAP_FAILED)
    {
        std::cerr << "Failed to mmap file: " << argv[1] << std::endl;
        return 4;
    }
    // 4. 正在進行文件操作
    std::cout << shmaddr << std::endl;
    // 5. 關(guān)閉文件映射
    if(::munmap(shmaddr, st.st_size) == -1)
    {
        std::cerr << "Failed to munmap file: " << argv[1] << std::endl;
        return 5;
    }
    // 6. 關(guān)閉文件描述符
    ::close(fd);
    return 0;
}


哎,為啥沒讀到我們后面之前填充的那些東西呢,因為那些是用的0值填充

?? 原理解釋:當(dāng)我們用 MAP_PRIVATE 映射一個已有文件時,對映射內(nèi)存的修改不會寫回文件,而是采用“寫時復(fù)制”機制。但在上面的讀示例中,我們沒有修改映射內(nèi)容,只是讀取,所以能看到文件原始數(shù)據(jù)。而實戰(zhàn)1中向文件寫入數(shù)據(jù),用的是 MAP_SHARED,修改會同步回文件。

3.3 實戰(zhàn) 3:用 mmap 極簡模擬 malloc/free 實現(xiàn)

malloc的底層實現(xiàn),在分配大內(nèi)存時(通常超過 128KB),本質(zhì)就是通過mmap的匿名映射實現(xiàn)的。我們可以通過mmap+munmap,極簡模擬malloc和free的核心功能。

核心原理

  • 匿名映射 :通過MAP_PRIVATE | MAP_ANONYMOUS標(biāo)志創(chuàng)建,不關(guān)聯(lián)任何文件,僅分配一段私有的空白內(nèi)存;
  • my_malloc:調(diào)用mmap分配指定大小的內(nèi)存,返回內(nèi)存首地址;
  • my_free:調(diào)用munmap釋放映射的內(nèi)存。
#include<iostream>
#include <cstdio>
#include <cstring>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
// 極簡malloc實現(xiàn)
void* my_malloc(size_t size)
{
    if(size > 0)
    {
        void* addr = (void*)::mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
        if(addr == MAP_FAILED)
        {
            std::cerr << "Failed to mmap " << size << std::endl;
            return nullptr;
        }
        return addr;
    }
    return nullptr;
}
void my_free(void* start, size_t size)
{
    if(start != nullptr && size > 0)
    {
        int ret = ::munmap(start, size);
        if(ret == -1)
        {
            std::cerr << "Failed to munmap " << size << std::endl;
        }
    }
}
int main()
{
    char* p = (char*)my_malloc(1024);
    if(p == nullptr)
    {
        std::cerr << "Failed to malloc 1024 bytes" << std::endl;
        return 1;
    }
    // 使用分配的內(nèi)存,簡單打印指針值
    printf("Allocated memory at address: %p\n", p);
    // 在這里使用ptr指向的內(nèi)存
    memset(p, 'A', 1024);
    for(int i = 0; i < 1024; i++)
    {
        printf("%c ", p[i]);
        fflush(stdout);
        sleep(1);
    }
    // 釋放內(nèi)存
    my_free(p, 1024);
    return 0;
}


進階驗證:gdb 查看內(nèi)存映射
我們可以通過 gdb 調(diào)試,查看mmap前后進程的地址空間映射變化:

# 帶調(diào)試信息編譯
gcc -g my_malloc.c -o my_malloc
# gdb調(diào)試
gdb ./my_malloc

在 gdb 中執(zhí)行以下命令:

(gdb) info proc mappings
# 或使用
(gdb) shell cat /proc/<pid>/maps
# 在printf分配地址處打斷點
b 39
# 運行程序
r
# 查看映射前的地址空間
info proc mapping
# 單步執(zhí)行,完成mmap
n
# 再次查看地址空間,能看到新增的mmap匿名映射區(qū)域
info proc mapping






可以清晰看到,mmap 后進程的地址空間中,新增了一段匿名映射區(qū)域,就是我們分配的內(nèi)存。

?? 知識擴展 - 真實的 malloc 實現(xiàn):真正的 malloc 除了用 mmap 分配大塊內(nèi)存外,對于小塊內(nèi)存(<128KB)會使用 brk/sbrk 系統(tǒng)調(diào)用來調(diào)整堆頂。并且會維護內(nèi)存池、空閑鏈表等復(fù)雜數(shù)據(jù)結(jié)構(gòu),以提高內(nèi)存分配效率。我們這里的極簡模擬僅演示 mmap 的基本用法。

四. mmap 使用避坑指南(開發(fā)必看)

  • 必須保證頁大小對齊

    • length和offset必須是系統(tǒng)頁大小的整數(shù)倍,否則會調(diào)用失??;
    • 可通過sysconf(_SC_PAGESIZE)獲取系統(tǒng)真實頁大小,不要硬編碼 4KB。
    • 常見錯誤:offset 不是頁對齊會導(dǎo)致 EINVAL 錯誤。
  • 文件打開權(quán)限與映射權(quán)限必須匹配

    • 要設(shè)置PROT_WRITE可寫權(quán)限,文件必須以O(shè)_RDWR模式打開,僅O_WRONLY或O_RDONLY會映射失??;
    • 只讀映射PROT_READ,文件至少要有O_RDONLY權(quán)限。
    • 例外:MAP_PRIVATE 允許只讀文件映射為可寫(修改不寫回文件),但仍需文件可讀。
  • 空文件必須提前設(shè)置大小

    • 空文件大小為 0,直接映射會觸發(fā)總線錯誤(SIGBUS);
    • 必須通過ftruncate/lseek+write提前給文件分配足夠的空間,再進行映射。
    • 注意:ftruncate 擴展文件后,新空間讀取為 0(空洞),但寫入時才會真正分配磁盤塊。
  • 映射解除后禁止再訪問

    • 調(diào)用munmap后,映射區(qū)域會被回收,再訪問該地址會觸發(fā)段錯誤(SIGSEGV)。
    • 建議解除后將指針置為 NULL。
  • MAP_SHARED 修改同步時機

    • 共享映射的修改不會實時同步到磁盤,內(nèi)核會根據(jù)臟頁刷新策略自動同步;
    • 若需要強制同步,可調(diào)用msync函數(shù)主動刷盤(MS_SYNC 阻塞直到完成,MS_ASYNC 異步)。
    • 性能提示:頻繁調(diào)用 msync 會降低性能,應(yīng)合理使用。
  • 線程安全問題

    • 多個進程 / 線程同時修改共享映射的同一塊內(nèi)存,會出現(xiàn)競態(tài)條件,需要通過信號量、互斥鎖做同步。
    • 對于 MAP_SHARED 映射,原子操作(如 __sync_add_and_fetch)可以用于無鎖編程,但需注意 CPU 內(nèi)存屏障。
  • ?? 高級陷阱:文件截斷與 SIGBUS

    • 如果映射文件后被其他進程截斷(縮小長度),當(dāng)進程訪問超出新文件大小的映射區(qū)域時,會收到 SIGBUS 信號導(dǎo)致崩潰。
    • 解決方案:對文件進行引用計數(shù)或使用文件鎖,確保映射期間文件不被截斷。
  • ?? 地址空間碎片化

    • 頻繁映射/解除不同大小的區(qū)域,可能導(dǎo)致虛擬地址空間碎片化,尤其在 32 位系統(tǒng)上(地址空間僅 4GB)。
    • 建議:對于長期運行的服務(wù),可預(yù)先分配一塊大的映射池,自行管理子區(qū)域。

五. 傳統(tǒng) read/write vs mmap 怎么選?(僅供參考)

特性read/writemmap
數(shù)據(jù)拷貝2 次拷貝(磁盤→內(nèi)核緩沖區(qū)→用戶態(tài))1 次拷貝(磁盤→用戶內(nèi)存)
隨機訪問效率低,需要頻繁 lseek+read效率高,直接指針偏移訪問
大文件處理內(nèi)存占用低,適合流式讀寫性能優(yōu)勢極大,適合隨機讀寫
小文件處理開銷小,使用簡單有頁大小對齊的內(nèi)存浪費,優(yōu)勢不明顯
編程復(fù)雜度簡單,接口易用相對復(fù)雜,需要處理對齊、權(quán)限等問題
異常處理系統(tǒng)調(diào)用返回錯誤,不會直接崩潰非法訪問會觸發(fā) SIGBUS/SIGSEGV,直接終止進程

最佳選擇建議

  • ? 大文件隨機讀寫、頻繁修改文件內(nèi)容:優(yōu)先選mmap;
  • ? 進程間共享內(nèi)存、多進程通信:必須用mmap共享映射;
  • ? 自定義內(nèi)存分配、大塊內(nèi)存申請:用mmap匿名映射;
  • ? 小文件一次性流式讀寫、順序讀寫:用read/write更簡單;
  • ? 對程序穩(wěn)定性要求極高,不能接受崩潰的場景:優(yōu)先read/write,異常處理更可控。

?? 擴展對比:mmap vs sendfile vs splice

特性mmap + writesendfilesplice
拷貝次數(shù)1次(缺頁加載)0次(完全內(nèi)核態(tài))0次
適用場景文件讀寫+共享內(nèi)存文件到 socket 傳輸任意兩個 fd 之間
用戶態(tài)訪問可直接讀寫內(nèi)存無法訪問數(shù)據(jù)無法訪問數(shù)據(jù)
實現(xiàn)復(fù)雜度中等簡單中等

對于 Web 服務(wù)器發(fā)送靜態(tài)文件,sendfile 比 mmap+write 更高效;但如果需要修改數(shù)據(jù)再發(fā)送,mmap 更合適。

六. mmap 的未來趨勢與發(fā)展

隨著 Linux 內(nèi)核的演進,mmap 及相關(guān)技術(shù)不斷優(yōu)化:

  1. io_uring 與 mmap 的結(jié)合:新一代異步 I/O 框架 io_uring 支持將注冊緩沖區(qū)與 mmap 配合使用,減少系統(tǒng)調(diào)用開銷。未來可能出現(xiàn)基于 io_uring 的文件映射直接操作。

  2. 持久內(nèi)存(PMEM)與 DAX:英特爾傲騰等持久內(nèi)存設(shè)備支持 DAX(Direct Access)模式,應(yīng)用程序可以通過 mmap 直接訪問持久內(nèi)存,無需經(jīng)過頁緩存,且寫入即持久化,大幅降低延遲。

  3. 大頁(Huge Pages)支持:通過 MAP_HUGETLB 標(biāo)志,mmap 可以使用 2MB 或 1GB 大頁,減少 TLB 缺失,提升大數(shù)據(jù)集訪問性能。

  4. 內(nèi)存壓縮與去重:內(nèi)核中的 KSM(Kernel Same-page Merging)允許不同進程的 mmap 共享相同內(nèi)容的物理頁,對虛擬化環(huán)境有益。

?? 專家觀點:未來十年,隨著存儲硬件(NVMe、PMEM)和內(nèi)存技術(shù)的變革,mmap 的角色將從“文件訪問優(yōu)化”升級為“通用內(nèi)存-存儲統(tǒng)一抽象”。開發(fā)者應(yīng)關(guān)注內(nèi)核新特性,如 MAP_SYNC 和 F_SEAL_* 文件密封機制,構(gòu)建更安全、高效的存儲系統(tǒng)。

結(jié)尾:

mmap 是 Linux 系統(tǒng)開發(fā)中極具威力的工具,它打破了 “文件操作” 和 “內(nèi)存操作” 的壁壘,既能實現(xiàn)高性能的文件讀寫,又能完成進程間共享內(nèi)存、自定義內(nèi)存管理等高級功能。本文完整覆蓋了 mmap 的核心原理、API、實戰(zhàn)代碼和避坑指南,無論是學(xué)習(xí)理解還是開發(fā)參考,都能直接使用。

到此這篇關(guān)于Linux mmap內(nèi)存映射機制:從底層原理、API 到實戰(zhàn)開發(fā)(圖文附代碼)的文章就介紹到這了,更多相關(guān)Linux mmap內(nèi)存映射機制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • linux防火墻配置教程之訪問外網(wǎng)web實驗(3)

    linux防火墻配置教程之訪問外網(wǎng)web實驗(3)

    這篇文章主要為大家詳細(xì)介紹了linux防火墻配置教程之訪問外網(wǎng)web的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Ubuntu16.04根目錄磁盤擴容實現(xiàn)方式

    Ubuntu16.04根目錄磁盤擴容實現(xiàn)方式

    本文詳細(xì)介紹了如何在Ubuntu 16.04系統(tǒng)中使用gparted工具進行磁盤擴容和分區(qū)調(diào)整,包括安裝gparted、啟動工具、調(diào)整分區(qū)大小以及啟用交換空間等步驟
    2026-01-01
  • linux云主機安裝pdo詳細(xì)教程

    linux云主機安裝pdo詳細(xì)教程

    這篇文章主要介紹了linux云主機安裝pdo詳細(xì)教程,網(wǎng)上搜到一個幾個還算清晰的教程,但是沒加說明,很多站長按照做了,中途出現(xiàn)錯誤,便不知如何解決了,這里特整理一下方便需要的朋友
    2017-08-08
  • Linux VPS/服務(wù)器上輕松導(dǎo)入、導(dǎo)出MySQL數(shù)據(jù)庫的幾種方法

    Linux VPS/服務(wù)器上輕松導(dǎo)入、導(dǎo)出MySQL數(shù)據(jù)庫的幾種方法

    隨著網(wǎng)站的運行MySQL數(shù)據(jù)庫也越來越大,備份問題也日益凸顯,使用phpmyadmin導(dǎo)出或?qū)霑r可能會因為超時文件過大等原因無法導(dǎo)入或?qū)С觥?/div> 2010-12-12
  • linux NFS 服務(wù)安全加固方法

    linux NFS 服務(wù)安全加固方法

    NFS(Network File System)是 FreeBSD 支持的一種文件系統(tǒng),它允許網(wǎng)絡(luò)中的計算機之間通過 TCP/IP 網(wǎng)絡(luò)共享資源。不正確的配置和使用 NFS,會帶來安全問題,需要的朋友可以參考下
    2018-02-02
  • Linux文件服務(wù)器實戰(zhàn)詳解(匿名用戶)

    Linux文件服務(wù)器實戰(zhàn)詳解(匿名用戶)

    這篇文章主要介紹了Linux文件服務(wù)器實戰(zhàn)(匿名用戶),非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • Ubuntu系統(tǒng)SSH免密連接Github配置全過程

    Ubuntu系統(tǒng)SSH免密連接Github配置全過程

    文章介紹了在Ubuntu系統(tǒng)中配置Git并實現(xiàn)SSH免密連接GitHub的全過程,涵蓋環(huán)境檢查、Git安裝、SSH密鑰生成及添加、項目上傳等步驟,強調(diào)該方法提升開發(fā)效率與安全性,簡化代碼提交流程
    2025-08-08
  • Linux使用touch命令創(chuàng)建空文件的技巧分享

    Linux使用touch命令創(chuàng)建空文件的技巧分享

    在 Linux 操作系統(tǒng)中,touch 命令是一個看似簡單卻功能強大的工具,雖然它的主要用途是更新文件的時間戳,但它在創(chuàng)建空文件方面也扮演著至關(guān)重要的角色,本文將深入探討 touch 命令的各種用法,需要的朋友可以參考下
    2026-01-01
  • Linux下sftp登錄失敗的解決方案

    Linux下sftp登錄失敗的解決方案

    這篇文章主要介紹了Linux下sftp登錄失敗的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 如何從windows上傳數(shù)據(jù)到linux上

    如何從windows上傳數(shù)據(jù)到linux上

    本文介紹了如何使用WinSCP將數(shù)據(jù)從Windows上傳到Linux系統(tǒng),重點是Linux的基礎(chǔ)知識和實驗環(huán)境(Windows 11專業(yè)版,Kali Linux 2024),通過直接拖拽文件的方式,可以方便快捷地完成數(shù)據(jù)傳輸
    2024-12-12

最新評論

延长县| 同江市| 靖宇县| 瑞昌市| 石台县| 务川| 祁连县| 瓮安县| 通化县| 珠海市| 德阳市| 格尔木市| 白玉县| 洛川县| 克拉玛依市| 龙陵县| 遵义市| 竹山县| 龙岩市| 淮北市| 柘荣县| 双鸭山市| 冕宁县| 巩义市| 洪洞县| 洛南县| 邮箱| 乐至县| 南平市| 大田县| 集安市| 蕉岭县| 阳高县| 清丰县| 沐川县| 阳城县| 长葛市| 拉萨市| 静安区| 海盐县| 祥云县|