2026-01-06

[Mac] /tmp 目錄指向 RamDisk

這半年來, 持續用 claude and copilot 進行系統開發工作.  在過程中, ai tools 會運用很多 shell 工具或者 sed 等文字編輯工具, 將相關需要輸出的 log, 文件 or 檢查程式碼 寫到 /tmp 目錄去. 

查詢過 mac 對於 /tmp 目錄內檔案的處理模式, 預設是重新開機後, 會將 /tmp 內部資料清空. 但是我個人久久才會重新開機一次, 這樣導致我的 /tmp 被佔用了很多空間,  而且裡面的檔案我也不能一次清空. 

有個想法, 我可以把 /tmp 指向我開的 ramdisk 去嗎 ? 好處有

1. 檔案讀寫都是 ram base, 並不會佔用我的 SSD 存取

2. 如果要刪除, 手動刪除也容易. 


解決方式 : 

使用 zshrc 指向 TMPDIR 到我的 RamDisk.  而不是把整個 /tmp 指向過去, 這樣只有會用到 console 的應用程式, 會把 temp file 寫到 RamDisk 去. 

第一步:建立獨立腳本檔
將自定義腳本放在 ~/.dotfiles 。這裡我們建立一個名為 ~/.dotfile/zshrc/ramdisk_tmp.zsh 的檔案
zsh
# --- RamDisk TMPDIR 配置腳本 ---
# 2026 建議做法:使用環境變數而非修改系統連結

local RAMDISK_PATH="/Volumes/RamDisk"
local RAMDISK_TMP="$RAMDISK_PATH/tmp"

# 1. 檢查 RamDisk 卷軸是否已掛載
if [ -d "$RAMDISK_PATH" ]; then
    
    # 2. 如果 tmp 目錄不存在,則建立它
    if [ ! -d "$RAMDISK_TMP" ]; then
        mkdir -p "$RAMDISK_TMP"
        # 設定權限 700 僅限當前使用者存取,安全且符合 macOS 規範
        chmod 700 "$RAMDISK_TMP"
    fi

    # 3. 匯出環境變數
    export TMPDIR="$RAMDISK_TMP"
    
    # 選用:也將其指向常用變數以確保相容性
    export TEMP="$RAMDISK_TMP"
    export TMP="$RAMDISK_TMP"
    
    # 偵錯用(若想確認是否載入成功,可取消下一行註解)
    # echo "TMPDIR has been set to RamDisk: $TMPDIR"
fi
請謹慎使用程式碼。
第二步:在 .zshrc 中載入
編輯您的 ~/.zshrc 檔案,在末尾加入一行來讀取該檔案:
  1. 執行:nano ~/.zshrc
  2. 加入以下程式碼:
zsh
# 載入 RamDisk 暫存路徑設定
[[ -f ~/.ramdisk_tmp.zsh ]] && source ~/.ramdisk_tmp.zsh
請謹慎使用程式碼。
第三步:使設定生效
在終端機執行以下指令:
zsh
source ~/.zshrc