Filesystem 結構:為什麼這樣分

Linux 的目錄結構不是隨機的,每個目錄有明確的用途:

目錄用途常見內容
/etc系統設定檔nginx.conf, postgresql.conf, /etc/hosts
/var可變資料(程式寫入的)/var/log, /var/lib/postgresql
/tmp暫存(重開機清除)socket file, temp files
/usr/bin用戶程式的執行檔python3, git, node
/usr/local手動安裝的程式homebrew 安裝的工具
/home用戶 home 目錄/home/ubuntu, /home/user
/rootroot 用戶的 home
/proc虛擬目錄,代表系統狀態/proc/1/status(PID 1 的狀態)

開發者最常碰到

  • App 設定放 /etc/myapp/
  • App log 寫到 /var/log/myapp/
  • Unix socket 放 /tmp/myapp.sock

Process 管理

# 查看所有 process
ps aux          # 包含所有用戶和完整指令
ps aux | grep nginx  # 找特定 process
 
# 即時監控
top             # 實時更新,按 q 退出
htop            # 更友善的 top(需要安裝)
 
# Process 關係
ps auxf         # 顯示 process tree(parent/child 關係)
pstree          # 更清楚的 tree 視圖
 
# 找到特定 port 的 process
lsof -i :3000   # 誰在用 port 3000
lsof -ti:3000   # 只輸出 PID(方便 pipe 到 kill)
 
# 結束 process
kill <pid>      # SIGTERM(請 process 自己清理後退出)
kill -9 <pid>   # SIGKILL(強制立刻殺死)
killall nginx   # 殺掉所有名為 nginx 的 process
 
# 背景執行
nohup ./script.sh &          # 背景執行,登出後繼續
nohup ./script.sh > out.log 2>&1 &  # 輸出到檔案

File Permissions

-rw-r--r-- 1 alice dev 1024 Apr 27 12:00 config.yml
│├─┤├─┤├─┤
│ │  │  └── others 的權限(r-r:只讀)
│ │  └───── group(dev)的權限(r-r:只讀)
│ └──────── owner(alice)的權限(rw-:讀寫)
└────────── 檔案類型(-: file, d: directory, l: symlink)

r = 4, w = 2, x = 1(八進位的來源)

# 常用權限設定
chmod 644 file.txt       # rw-r--r--(一般檔案)
chmod 755 script.sh      # rwxr-xr-x(可執行)
chmod 600 id_rsa         # rw-------(private key,只有 owner 讀寫)
chmod -R 755 directory/  # 遞迴設定目錄
 
# 為什麼不用 chmod 777?
# 777 = rwxrwxrwx = 所有人可讀寫執行
# 對 private key:任何人都能讀 → SSH 直接拒絕你用這個 key
# 對 web server:任何人都能寫入 → 安全漏洞
 
# 改擁有者
chown alice file.txt        # 改 owner
chown alice:dev file.txt    # 改 owner + group
chown -R www-data /var/www/ # 遞迴(常見於 web server 設定)

為什麼開發者要懂這些

Debug Docker:容器裡 permission denied,可能是 chown 問題或 container user 和 volume mount 的 ownership 不符。

CI/CD./deploy.sh: Permission denied——忘了 chmod +x,或 git 沒有保留執行權限(git update-index --chmod=+x)。

Log 設定:app 要寫 /var/log/myapp/,但這個目錄屬於 root,app 跑在 www-data 用戶——需要 chown 或在 directory 上設正確的 group 權限。