# 第五堂課,為了活用shell script所以繼續來說linux 在上個禮拜,我們學習了bash的一些基本命令,但實際上它並不是設計出來解決apcs題目的(apcs也不收)。它設計的用途是為了我們方便做系統管理,所以這次我們就來看看它與一般程式語言的不同處吧。 ## 在檔案系統中遨遊 ``` [john@localnet ~]$ ``` 在命令行的這個提示字元裡有一個「~」,這個就是你現在所在的目錄,會隨著你在檔案系統中移動而有所改變。 而上一次我們有說「~」代表的是家目錄,其他還有一些代表目錄的特殊字元如下: \. #代表此層目錄 .\. #代表上一層目錄 \- #代表前一個工作目錄 \~ #代表『目前使用者身份』所在的家目錄 \~account #代表 account 這個使用者的家目錄(account是個帳號名稱) 對於目錄來說有重要幾個指令:ls(檢視檔案與目錄)、cd(變換目錄)、pwd(顯示目前的目錄)、mkdir(建立一個新的目錄)和rmdir(刪除一個空的目錄)。他們的用法如下: ``` ls [-aAdfFhilnrRSt] 檔名或目錄名稱.. -a :全部的檔案,連同隱藏檔( 開頭為 . 的檔案) 一起列出來(常用) -A :全部的檔案,連同隱藏檔,但不包括 . 與 .. 這兩個目錄 -d :僅列出目錄本身,而不是列出目錄內的檔案資料(常用) -f :直接列出結果,而不進行排序 (ls 預設會以檔名排序!) -F :根據檔案、目錄等資訊,給予附加資料結構,例如: *:代表可執行檔; /:代表目錄; =:代表 socket 檔案; |:代表 FIFO 檔案; -h :將檔案容量以人類較易讀的方式(例如 GB, KB 等等)列出來(常用); -l :長資料串列出,包含檔案的屬性與權限等等資料;(常用) -r :將排序結果反向輸出,例如:原本檔名由小到大,反向則為由大到小; -R :連同子目錄內容一起列出來,等於該目錄下的所有檔案都會顯示出來; -S :以檔案容量大小排序,而不是用檔名排序; -t :依時間排序,而不是用檔名。 ``` 所以說,我們比較常會碰到的是: ``` ls -alh #列出檔案和目錄 或 ls -aldh #列出現在所在的目錄本身 [john@localnet ~]$ ls -alh drwx------ 31 john john 4.0K 5月 2 15:24 . drwxr-xr-x 3 root root 4.0K 1月 25 21:33 .. drwxr--r-- 2 john john 4.0K 1月 25 22:02 .att_backups -rw------- 1 john john 12K 4月 28 08:01 .bash_history -rw-r--r-- 1 john john 21 12月 21 02:44 .bash_logout -rw-r--r-- 1 john john 57 12月 21 02:44 .bash_profile -rw-r--r-- 1 john john 7.0K 1月 25 21:51 .bashrc -rw-r--r-- 1 john john 141 12月 21 02:44 .bashrc-old drwxr-xr-x 43 john john 4.0K 5月 2 17:13 .cache drwxr-xr-x 3 john john 4.0K 3月 28 13:24 .cargo drwx------ 2 john john 4.0K 5月 2 17:31 .chewing drwxr-xr-x 48 john john 4.0K 5月 2 17:24 .config ... ``` 知道了現在所在位置可見的檔案和目錄,我們就能使用cd: ``` cd [相對路徑(ls輸出結果,現在所在位置當起點的目錄,如.cache)] 或 cd [絕對路徑(根目錄當起點的目錄,如/home/john/.cache)] [john@localnet ~]$ cd .cache/ [john@localnet .cache]$ ``` 而pwd相當簡單: ``` [john@localnet .cache]$ pwd /home/john/.cache ``` 而mkdir也是很直覺: ``` mkdir [-mp] 目錄名稱 選項與參數: -m :設定檔案的權限喔!直接設定,不需要看預設權限 (umask) 的臉色~ -p :幫助你直接將所需要的目錄(包含上層目錄)遞迴建立起來! [john@localnet 下載]$ mkdir test1 [john@localnet 下載]$ mkdir -p test3/test4 [john@localnet 下載]$ ls -alh drwxr-xr-x 4 john john 4.0K 5月 2 17:47 . drwx------ 31 john john 4.0K 5月 2 15:24 .. drwxr-xr-x 2 john john 4.0K 5月 2 17:47 test1 drwxr-xr-x 3 john john 4.0K 5月 2 17:47 test3 [john@localnet 下載]$ cd test3/ [john@localnet test3]$ ls -alh drwxr-xr-x 3 john john 4.0K 5月 2 17:47 . drwxr-xr-x 4 john john 4.0K 5月 2 17:47 .. drwxr-xr-x 2 john john 4.0K 5月 2 17:47 test4 ``` 而用rmdir刪除的目錄裡面不能存在其他的目錄或檔案: ``` rmdir [-p] 目錄名稱 選項與參數: -p :連同『上層』『空的』目錄也一起刪除 [john@localnet 下載]$ rmdir test1 [john@localnet 下載]$ ls -alh drwxr-xr-x 4 john john 4.0K 5月 2 17:47 . drwx------ 31 john john 4.0K 5月 2 15:24 .. drwxr-xr-x 3 john john 4.0K 5月 2 18:00 test3 [john@localnet 下載]$ rmdir -p test3/test4 或 [john@localnet 下載]$ rmdir test3/test4 [john@localnet 下載]$ rmdir test3 的結果都是一樣的 [john@localnet 下載]$ ls -alh drwxr-xr-x 4 john john 4.0K 5月 2 17:47 . drwx------ 31 john john 4.0K 5月 2 15:24 .. ``` ## 關於檔案 對於檔案來說有重要幾個指令:cp(複製檔案或目錄)、rm (移除檔案或目錄)、和mv(移動檔案與目錄,或更名)。他們的用法如下: ``` cp [-adfilprsu] 來源檔(source) 目標檔(destination) 選項與參數: -a :相當於 -dr --preserve=all 的意思,也就是保留包含存取更改時間和權限等所有 屬性的完全複製;(常用) -d :若來源檔為連結檔的屬性(link file),則複製連結檔屬性而非檔案本身; -f :為強制(force)的意思,若目標檔案已經存在且無法開啟,則移除後再嘗試一次; -i :若目標檔(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用) -l :進行硬式連結(hard link)的連結檔建立,而非複製檔案本身; -p :連同檔案的屬性(權限、用戶、時間)一起複製過去,而非使用預設屬性(備份常用); -r :遞迴持續複製,用於目錄的複製行為;(常用) -s :複製成為符號連結檔 (symbolic link),亦即『捷徑』檔案; [john@localnet 下載]$ cp test.txt text3 [john@localnet 下載]$ cd test3/ [john@localnet test3]$ ls -alh drwxr-xr-x 3 john john 4.0K 5月 2 18:26 . drwxr-xr-x 5 john john 4.0K 5月 2 18:26 .. drwxr-xr-x 2 john john 4.0K 5月 2 18:00 test4 -rw-r--r-- 1 john john 2 5月 2 18:26 test.txt [john@localnet test3]$ cd .. [john@localnet 下載]$ cp -r test3 test5 [john@localnet 下載]$ cd test5/ [john@localnet test5]$ ls -alh drwxr-xr-x 3 john john 4.0K 5月 2 18:29 . drwxr-xr-x 5 john john 4.0K 5月 2 18:29 .. drwxr-xr-x 2 john john 4.0K 5月 2 18:29 test4 -rw-r--r-- 1 john john 2 5月 2 18:29 test.txt [john@localnet test5]$ cd .. [john@localnet 下載]$ cp -ra test3 test6 [john@localnet 下載]$ cd test6/ [john@localnet test6]$ ls -alh drwxr-xr-x 3 john john 4.0K 5月 2 18:26 . drwxr-xr-x 6 john john 4.0K 5月 2 18:31 .. drwxr-xr-x 2 john john 4.0K 5月 2 18:00 test4 -rw-r--r-- 1 john john 2 5月 2 18:26 test.txt ``` rm ``` rm [-fir] 檔案或目錄 選項與參數: -f :就是 force 的意思,忽略不存在的檔案,不會出現警告訊息; -i :互動模式,在刪除前會詢問使用者是否動作 -r :遞迴刪除啊!最常用在目錄的刪除了,這是非常危險的選項 [john@localnet 下載]$ sudo rm -r / #刪掉你的整個系統(超好玩) [john@localnet 下載]$ rm test.txt [john@localnet 下載]$ ls -alh drwxr-xr-x 6 john john 4.0K 5月 2 18:39 . drwx------ 31 john john 4.0K 5月 2 15:24 .. drwxr-xr-x 2 john john 4.0K 5月 2 17:47 test1 -rw-r--r-- 1 john john 2 5月 2 18:39 test1.txt -rw-r--r-- 1 john john 2 5月 2 18:39 test2.txt drwxr-xr-x 3 john john 4.0K 5月 2 18:26 test3 drwxr-xr-x 3 john john 4.0K 5月 2 18:29 test5 drwxr-xr-x 3 john john 4.0K 5月 2 18:26 test6 [john@localnet 下載]$ rm test* rm: 無法刪除 'test1': 是個目錄 rm: 無法刪除 'test3': 是個目錄 rm: 無法刪除 'test5': 是個目錄 rm: 無法刪除 'test6': 是個目錄 [john@localnet 下載]$ ls -alh drwxr-xr-x 6 john john 4.0K 5月 2 18:40 . drwx------ 31 john john 4.0K 5月 2 15:24 .. drwxr-xr-x 2 john john 4.0K 5月 2 17:47 test1 drwxr-xr-x 3 john john 4.0K 5月 2 18:26 test3 drwxr-xr-x 3 john john 4.0K 5月 2 18:29 test5 drwxr-xr-x 3 john john 4.0K 5月 2 18:26 test6 ``` mv ``` mv [-fiu] source destination 選項與參數: -f :force 強制的意思,如果目標檔案已經存在,不會詢問而直接覆蓋; -i :若目標檔案 (destination) 已經存在時,就會詢問是否覆蓋! -u :若目標檔案已經存在,且 source 比較新,才會更新 (update) [john@localnet 下載]$ mv test.txt test1 [john@localnet 下載]$ cd test1/ [john@localnet test1]$ ls -alh drwxr-xr-x 2 john john 4.0K 5月 2 18:45 . drwxr-xr-x 6 john john 4.0K 5月 2 18:45 .. -rw-r--r-- 1 john john 2 5月 2 18:45 test.txt [john@localnet test1]$ cd .. [john@localnet 下載]$ mv test1 test2 [john@localnet 下載]$ ls -alh drwxr-xr-x 6 john john 4.0K 5月 2 18:47 . drwx------ 31 john john 4.0K 5月 2 15:24 .. drwxr-xr-x 2 john john 4.0K 5月 2 18:45 test2 drwxr-xr-x 3 john john 4.0K 5月 2 18:26 test3 [john@localnet 下載]$ mv test1.txt test2.txt test2 [john@localnet 下載]$ cd test2/ [john@localnet test2]$ ls -alh drwxr-xr-x 2 john john 4.0K 5月 2 18:49 . drwxr-xr-x 6 john john 4.0K 5月 2 18:49 .. -rw-r--r-- 1 john john 2 5月 2 18:48 test1.txt -rw-r--r-- 1 john john 2 5月 2 18:48 test2.txt -rw-r--r-- 1 john john 2 5月 2 18:45 test.txt ``` ### 參考資料&延伸學習 http://linux.vbird.org/linux_basic/0220filemanager.php#cprmmv ## 練習:來看看PKGBUILD吧!
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up