cd [目錄路徑]
不帶參數時,預設切換到當前用戶家目錄($HOME)。
cd /var/www/html
cd /etc/nginx/conf.d
以 / 開頭,從根目錄開始,最明確、不易出錯。
cd projects/laravel # 進入當前目錄下的子目錄
cd ../.. # 回到上兩級目錄
cd ../../logs # 回兩級再進 logs
. 當前目錄,.. 父目錄,可組合。
cd
cd ~
cd $HOME
三種效果相同,~ 在 Bash 中自動展開為 $HOME。
cd -
在兩個目錄間來回切換極其高效。底層讀取 OLDPWD 環境變數。
mkdir -p /var/www/project/{public,storage,config}
cd !$ # 等同於 cd /var/www/project/config
!$ 代表上一條命令的最後一個參數。配合 mkdir、tar、scp 等極其好用。
cd ~nginx
cd ~mysql
前提是該用戶存在於 /etc/passwd 且有家目錄。
PROJECT_ROOT="/opt/myapp"
cd "$PROJECT_ROOT"
cd "$(dirname $(which php))" # 進入 php 執行檔所在目錄
雙引號包裹變數防止空格路徑拆分。
cd /var/w[TAB] # 自動補全為 /var/www/
cd /var/www/h[TAB] # 補全為 /var/www/html/
習慣多按 Tab,減少輸入錯誤、加速操作。
pushd /etc/nginx # 當前目錄入棧,切換到 /etc/nginx
pushd /var/log # 再入棧
dirs -v # 顯示棧內容
popd # 彈出棧頂,回到 /etc/nginx
popd # 再彈出,回到原目錄
適合在多個深層目錄間頻繁跳轉,比 cd - 支援更多層級。
(cd /tmp && pwd) # 子 Shell 中切換,不影響父 Shell 當前目錄
cd /tmp && pwd # 當前 Shell 切換,永久生效
腳本中使用 (cd dir && cmd) 可避免污染主流程工作目錄。
shopt -s cdspell # 寫入 ~/.bashrc 永久生效
cd /var/wb # 自動修正為 /var/www
# ~/.bashrc
alias cdh='cd ~'
alias cdw='cd /var/www'
alias cdl='cd /var/log'
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
# 安裝 fzf 後,Ctrl+R 搜尋歷史命令,Alt+C 模糊搜尋子目錄並 cd
# ~/.bashrc
cd() {
builtin cd "$@" && ls -hF --color=auto
}
| 錯誤 | 原因 | 解決 |
|---|---|---|
| bash: cd: 太多參數 | 路徑含空格未加引號 | cd "My Documents" 或 cd My\ Documents |
| 權限被拒絕 | 目錄執行權限不足 | chmod +x 目錄 或 sudo cd(不推薦) |
| 非目錄 | 目標是檔案而非目錄 | 確認路徑正確 |
| 符號連結循環 | 軟連結指向自身父目錄 | 用 cd -P 使用物理路徑 |
| 變數 | 含義 | 示例 |
|---|---|---|
| PWD | 當前工作目錄 | /home/user/projects |
| OLDPWD | 上一個工作目錄 | /home/user |
| HOME | 當前用戶家目錄 | /home/user |
| CDPATH | cd 相對路徑搜尋路徑列表 | .:/var/www:/opt |
CDPATH 設定後,cd project 會依序在 ./project、/var/www/project、/opt/project 中尋找。
cd 看似簡單,實則是終端機操作效率的基石。掌握 cd -、!$、pushd/popd、Tab 補全、cdspell、fzf 等技巧,能讓你在目錄樹中如履平地。建議將常用別名、shopt -s cdspell、CDPATH 加入 ~/.bashrc,一次配置,終身受益。