淺談 Command Line Interface
CLI is a powerful tool
講者
講者
Peter
● 網路福利社CCCA 社長
● Julia Taiwan :
Experience deep learning with Knet.jl
●新竹 碼農 :
Google research 的 MultiModel
環境安裝
● Ubuntu on Windows
安裝要求: (OS Build: 14393.0 or higher)
● Unix like OS / OSX
終端機 ( Terminal )
SHELL
● Shell 即是使用者與OS的橋樑
圖形化介面(GUI)的 SHELL // UI (User interface)
SHELL
● Shell 即是使用者與OS的橋樑
命令列介面(CUI)的 SHELL
SHELL
常接觸到的 Shell
● bash
● csh / tcsh
● sh
● zsh
為何使用 CLI
與圖形化介面(GUI)相比
● 熟悉 CLI 後,操作較 GLI 來的迅速
● 可以將 CLI 指令編寫成強大的工具
● 可以執行較為底層的功能
● 使用強大的技巧 (EX : Pipe, && , ||
課程規劃
● 實用軟體/ 技巧 --45min
● 基本指令教學與練習 -- 45 min
基本指令教學與練習
cd
(1)移到特定的目錄下
● cd . 移到現在的目錄
● cd .. 移到父目錄(上一層)
● cd / 移到根目錄
cd
(1)移到特定的目錄下
● cd ./usr 移到 usr?
● cd /usr 移到 usr?
差別在哪裡?
cd
(1)移到特定的目錄下
● cd /usr
/
usr
usr
cd
(1)移到特定的目錄下
● cd ./usr
/
usr
usr
pwd
(1)回傳目前工作資料夾路徑
/
usr
usr
● pwd
/usr
pwd
(1)回傳目前工作資料夾路徑
/
usr
usr
● pwd
/usr/usr
ls
(1)顯示這個目錄下的檔案
/
usr
bin/
.var
etc
bin
etc/
usr/
● ls
ls
(2)ls - A 會顯示隱藏的檔案
/
usr
bin/
.var
etc
bin
etc/
usr/
.var/
● ls -A
ls
(3)ls - l 會顯示檔案資訊
drwxr-xr-x 52 root wheel 512 9月 25 01:00 bin/
.var
● ls -l
ls
(3)ls - l 會顯示檔案資訊
drwxr-xr-x 52 root wheel 512 9月 25 01:00 bin/
.var
↑ file mode
d : 資料夾 r : 讀 w : 寫 x : 執行
ls
(3)ls - l 會顯示檔案資訊
drwxr-xr-x 52 root wheel 512 9月 25 01:00 bin/
.var
↑owner
ls
(3)ls - l 會顯示檔案資訊
drwxr-xr-x 52 root wheel 512 9月 25 01:00 bin/
.var
↑owner group
ls
(3)ls - l 會顯示檔案資訊
drwxr-xr-x 52 root wheel 512 9月 25 01:00 bin/
.var
↑ file mode
d : 資料夾 r : 讀 w : 寫 x : 執行
ls
(3)ls - l 會顯示檔案資訊
drwxr-xr-x 52 root wheel 512 9月 25 01:00 bin/
.var
↑ file mode
rwx : owner
r-x : owner group
r-x : other user
ls
(3)ls - l 會顯示檔案資訊
drwxr-xr-x 52 root wheel 512 9月 25 01:00 bin/
.var
↑ number of link
下一層連結的數量(表示有合計 52 個 檔案/資料夾)
ls
(3)ls - l 會顯示檔案資訊
drwxr-xr-x 52 root wheel 512 9月 25 01:00 bin/
.var
↑ size of file
ls
(3)ls - l 會顯示檔案資訊
drwxr-xr-x 52 root wheel 512 9月 25 01:00 bin/
↑ last modified date
ls
(3)ls - l 會顯示檔案資訊
drwxr-xr-x 52 root wheel 512 9月 25 01:00 bin/
.var
path ↑
rm
最恐怖的指令沒有之一(O
● rm -rf / 工程師笑話
rm
(1)刪除檔案
● rm ./test 刪掉 test 這個檔案
rm
(1)刪除檔案
● rm ./OAO 刪掉 OAO ?
OAO
test
file
rm
(1)刪除檔案
● rm ./OAO
rm : OAO : is a directory
OAO
test
file
rm
(2)rm -r 刪除路徑下所有檔案
● rm -r ./OAO
OAO
test
file
rm
(1)刪除檔案
● rm ./not-yours
rm
(1)刪除檔案
● rm ./not-yours
override rwx------ root/wheel for not-yours?
rm
(3)rm -f 強制刪除檔案
● rm -f ./not-yours
加了 -f 這個參數後不會顯示任何確認
rm
最恐怖的指令沒有之一(O
● rm -rf / 現在看懂了嗎
touch
(1)新增一個檔案
●touch ./new 新增一個名為 new 的檔案
touch
(1)新增一個檔案
●touch 可以用來讓程式結束
touch
●touch ./old old 是一個已經存在的檔案
touch
●touch ./old
有發生什麼事嗎?
touch
(2)更新取存的時間
●touch ./old
使用剛剛學到的 ls -l 看看
發現 last modified date 變成現在的時間
touch
touch 更新存取時間有什麼用途
●可以用在備份相關的程式
●make (之後進階指令會提到)
cat
是一個傳說中的指令!
cat
只要想到 cat ...
cat
當然就是想到貓R (O
cat
當然不是R
cat
(1)把檔案印出來
● cat ./README
thank for your attention!
this is how it works.
cat
● cat 打個 cat
cat
● cat ?
cat
● cat ??
cat
● cat ???
cat
● cat 壞掉了嗎? 打個 help 好了
cat
● cat
help
cat
● cat 輸入"h" "e" "l" "p"
help 螢幕會顯示help
(2)輸出
cat
● cat
(2)輸出
cat + pipe/... (等等實用技巧會教到)
就是強大的 COMBO 技啦
echo
● echo
回音
echo
● echo 看這裡~
亂叫叫看好了
echo
● echo 看這裡~
亂叫叫看好了
看這裡~
echo
● echo 看這裡~
還真的是回音!
看這裡~
echo
● echo $
(1)輸出
$
echo
● echo $myname 可以用來確認變數
(1)輸出
peter
echo
● echo $path UNIX LIKE 常見的變數
(1)輸出
/sbin /bin /usr/sbin /usr/bin ...
cp
● cp ./COPYME ./NEW
(1)複製檔案
cp
● ls 用 ls 檢查一下
(1)複製檔案
COPYME DO_NOT_MISS/ NEW
cp
● cp DO_NOT_MISS ./CAUGHT_YOU
(1)複製檔案
cp : DO_NOT_MISS is a directory (not copied)
cp
● cp -R DO_NOT_MISS ./CAUGHT_YOU
(2)cp -R 複製整個資料夾
● ls
CAUGHT_YOU/ DO_NOT_MISS/
COPYME NEW
mkdir/rmdir
●mkdir DIRECTORY
(1)新建一個資料夾/刪除一個空資料夾
●rmdir DIRECTORY
mkdir
●mkdir a/_/l/o/t/_/o/f/_/D/I/R/E/C/T/O/R/I/E/S
新建一大串資料夾?
mkdir
●mkdir a/_/l/o/t/_/o/f/_/D/I/R/E/C/T/O/R/I/E/S
新建一大串資料夾?
mkdir : a/_/l/o/t/_/o/f/_/D/I/R/E/C/T/O/R/I/E/S :
No such file or directory
mkdir
●mkdir -p a/_/l/o/t/_/o/f/_/D/I/R/E/C/T/O/R/I/E/S
(2)mkdir -p建立中介需要的資料夾
mv
● mv ./MovemE ./HERE/
(1)移動
● cd ./HERE
● ls
MovemE
mv
● mv ./MovemE .
● ls
MovemE
移動到同一個目錄?
mv
可以改成 Moveme 嗎?
覺得 MovemE 那個 E 很奇怪
mv
●mv ./MovemE ./Moveme
(2)重新命名
mv
●mv ./Moveme ./THERE/So_far_away
(2)重新命名
可以邊移動邊重新命名
這樣 Moveme 不只移到 THERE 下
還重新命名了~
file
● file OAO.txt
(1)列出檔案格式
OAO.txt: ASCII text
more/less
●more small.txt
(1)輸出一個檔案
●less small.txt
more/less
●more big.txt
(1)輸出一個檔案 ? cat ?
●less big.txt
●cat big.txt
more/less
●more big.txt 讓你可以滾動
(1)輸出一個檔案 ? cat ?
●less big.txt 同上
●cat big.txt 一口氣輸出整個檔案
head/tail
● head FILE 預設輸出 10 行
(1)輸出 前半部/後半部
● tail FILE 預設輸出 10 行
上太快了啦~
你剛剛打了哪些指令?
history
● history
(1)列出你輸入過的指令
69 5:11 head FILE
70 5:12 tail FILE
66 4:58 more big.txt
67 4:59 less big.txt
68 5:00 cat big.txt
可以再說一次怎麼用這些指令嗎?
給你魚吃,不如教你怎麼釣魚
告訴你指令要怎麼用,不如教你怎麼查指令
man/help/info
● man cat
(1)列出指令用法
● help cat
● info cat
不同 Shell / OS 會些微差異
TIME FOR BREAK
實用軟體/ 技巧
pipe
● ls | less
(1)把輸出導到下一程序
grep
● ls |grep YOU
(1)搜尋 字串
● cat NCTU.txt |grep CCCA
redirects
>
>>
redirects
> : 將輸出導到一個檔案
● ls > file_list.txt (會複寫檔案
first_file
second_file
redirects
>> : 將輸出附加到一個檔案
● ls >> file_list.txt
first_file
second_file
first_file
second_file
redirects
>> : 將輸出附加到一個檔案
● ls >> file_list.txt
first_file
second_file
first_file
second_file
first_file
second_file
redirects
> : 將輸出導到一個檔案
● ls >> file_list.txt
first_file
second_file
find
● find ./ -name I_WANT_YOU
● find ./ -user ME
(1)找 我找 我找找找
locate
find 太複雜?
那 locate 幫你!
● locate I_WANT_YOU
locate
● locate "*.jpg" 找所有的 jpg 檔
(1)找特定檔案位置
tar
● tar -czf output.tar.gz source1 source2
(1)把檔案壓縮成壓縮檔
tar
● tar -tvf output.tar.gz
(2)列出壓縮檔內檔案
tar
● tar -xvf output.tar.gz
(3)解壓縮
wget
簡單下載東西的好幫手 (w
● wget -r http://www.hs.ntnu.edu.tw/
會把師大附中網頁 " 所有 " 檔案下載下來
wget
wget 是 GNU project 的一部分
特性
● 支援遞迴下載
● 恰當的轉換頁面中的連結
● 操作簡單
cURL
curl 是更為強大的工具
不單單是下載 上傳也沒有問題
● 支援多種協定 https, ftp, telnet ...
● 有其支援的 lib (函式庫)
Thank you
淺談CLI
By Hsien Zong Lin
淺談CLI
- 1,293