淺談 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