App 開發基礎講義

給初學者的應用程式開發基礎知識

命令列 CLI

  • Command Line Interface (CLI) 和 Graphical user interface (GUI) 有什麼差別? 為什麼 geeks 們要用 CLI ?
  • Mac 和 Linux 都是 UNIX-like 作業系統,這也是為什麼 Web Developer 愛用 Mac 的原因,因為作業系統架構和 CLI 指令跟 Linux 伺服器類似,因此可以跑在 Linux 上的開源軟體(特別是 Web 後端用到的軟體,例如各種資料庫、網站伺服器、Ruby/Python/PHP 程式語言等等) 也都支援 Mac,反而 Windows 支援比較差。
  • Unix 哲學: Do One Thing Well:指令只做一件事,但可以透過串接來達成複雜的操作

history

  • 名詞釋疑: Terminal, Console 和 Shell
    • Terminal 是指 CLI 的輸入輸出介面程式,例如 mac 內建的 Terminal,或是另外裝的 iTerm2。使用 Terminal 時會需要設定要用哪一種 Shell。
    • Shell 是指和電腦溝通的指令,有分很多種,Unix 上常見使用 Bash Shell、Windows 則是用 PowerShell。Shell 可以只當作是 Shell command 用,但也可以當作 Shell script 使用,就像程式語言一樣。
    • Console 指某特定的指令語言環境,例如 mysql console (輸入 SQL 指令)、irb console (輸入 Ruby 程式)、rails console (輸入 rails 程式)

Terminal 視窗

一些 Mac/Linux 通用指令

  • date
  • uname -a
  • hostname
  • history
  • bash --version
  • uptime 查電腦開機多久了
  • man 查指令的文件
    • 按 q 可以離開
  • which 查詢執行檔的確切位置

檔案目錄結構和操作

  • 分成檔案 file 和目錄 directory
  • 檔名不能有 /
  • 檔名之中如果有空白 !$#()[]%&; 等特殊字元,用的使用需要加上 ‘quotes’ 或用 \進行脫逸
  • / 切隔目錄名,不同於 windows 用 \,例如 C:\
  • * 表示萬用字元、用 ? 表示單一萬用字元、,例如 ls *.png
  • absolute path 和 relative path,後者相對於 working directory
    • . 表示 current working directory
    • .. 表示上一層
    • ~ 表示你的 home directory
  • The Filesystem Tree
    • / root directory
    • 家目錄:Mac 上是 /Users/your_username、Linux 上是 /home/your_username
    • /usr/local 放自行安裝的系統軟體的目錄
    • /usr/local/bin 放上述執行檔的地方
    • /etc/ 系統設定檔
    • /var/ 系統 Log
    • /tmp 暫存檔案
    • ~/Desktop Mac 的桌面
    • ~/Download Mac 的下載目錄
  • 檔案不一定需要附檔名,例如 README、LICENSE 等等檔案
  • . 開頭的檔案,指的是隱藏檔,輸入 ls 時不會顯示出來,需要用 ls -a
  • pwd 顯示目前所在的 working directory
  • cd 變更目前的 working directory
    • cd ..
    • cd ~
    • cd /
  • lsls -la
    • l 代表顯示更多資訊、a 代表顯示隱藏檔
  • cat 顯示檔案全部內容
  • tail 顯示檔案最後面的內容
  • tail -n 500 filename 最後500行
  • tail -f filename 掛著顯示,可用來一直觀察 log
  • mv 移動或改名
  • cp 複製
  • mkdir 新增目錄
  • rmdir 刪除空目錄
  • rm 刪除檔案
    • rm -rf 強制刪除整個目錄
  • touch 新增一個空檔案
  • df -h 檢查硬碟空間
  • grep 搜尋檔案內容
  • sed 替換體案內容
  • targzip 打包目錄和解壓縮

竟然有人真的實驗看看 rm -fr / 會怎麼樣,原來下場這樣…… 是蠻慘的

  • ln -s 連結檔案,例如 ln -s original_file_name link_name

檔案編輯器

  • nano
  • vi 或 vim

使用者權限和檔案權限

  • 每個檔案和目錄可以設定屬於哪一個用戶、哪一個群組
  • 每個檔案和目錄都有權限設定:(你自己, 群組, 全部使用者) x (讀取, 寫入, 可執行) 共有九碼
  • 檔案目錄權限
    • Read(可讀) r 4
    • Read,Write,eXcute rwx 4+2+1=7
    • Read,eXcute r-x 4+1=5
    • Read,Write rw 4+2=6
  • chmod 可以變更 mod
  • chown 可以變更使用者和群組
  • root 和 sudo 指令
    • visudo 用來編輯誰有 sudo 權限
  • su 切換使用者

Process 管理

如同 Mac 上的 Activity Monitor

  • top
  • ps ax
  • kill -9

組合技

  • standard input (stdin)
  • standard output (stdout)
  • ; 可以分隔指令組成一行執行
  • > Redirection 可以變成 output,例如 echo "Hello World!" > test.txt 就把輸入寫到檔案了
  • >> 可以 append 到檔案後面,例如 echo "Hello World!" >> test.txt
  • | Pipe 一個 UNIX 指令的輸出,可以是另一個 UNIX 指令的輸入,例如 cat test.txt | moreps ax | grep "ruby"
  • sortuniq

https://robots.thoughtbot.com/input-output-redirection-in-the-shell

網路操作指令

環境變數與 Login Script

Mac only

補充資料

》回到頁首