- 課本(pdf): Introduction to Linux
- 課本(html): Introduction to Linux
- complexity v.s. simplicity (figure from "Starting Forth")
- 課本 第二章 概述
- 課本 第三章指令簡表
- summary of shell programming
- snippet of bash man page
- demo sh script
- demo awk scripts
- summary of awk man page
- GNU document for
make
make.
- GNU document for
bash
- GNU document for
sed
- GNU document for
awk
- GNU document for
GNU core utils
- note of tar and gzip
- vi 的參考資料
- unix commands vs python
- 作業一: finding files which contain your account name
- 從 /var/tmp/exercise-one 找出含有你帳號的檔案
- 每人的帳號會出現二次, 因此極大機率會出現在二檔案中
- 將找到的檔案名字寫到一個檔案中, 每個名字一行.
如為 /var/tmp/exercise-one/Sam/likes/a-duck
則只需輸入 Sam/likes/a-duck 即可. 注意大小寫.
此檔案必須置於 ~/unix-1051/exer1 底下.
- 編輯器可用 joe, nano, pico, or vi
- deadline: 2016 Sep 30, 00:05 am
- 作業二: cloning files and directories
從 /var/tmp/exercise-two 目錄底下找出自己的目錄及檔案,
並複製到 ~/unix-1051/exer2 下. 如果有以下目錄及檔案
/var/tmp/exercise-two/Alice/likes/an-ox <---- a file
/var/tmp/exercise-two/Emily/has-bought/a-horse <---- a file
/var/tmp/exercise-two/Gary/has-bought/a-rhino <---- a directory
/var/tmp/exercise-two/Gary/has-bought/a-rhino/less <---- a file
/var/tmp/exercise-two/Gary/has-bought/a-rhino/is <---- a file
/var/tmp/exercise-two/Gary/has-bought/a-rhino/more <---- a file
/var/tmp/exercise-two/Mary/is/a-snake <---- a file
則在你的 exer2 下建立如下對應的結構.
~/unix-1051/exer2/
|---Alice/
| `---likes/
| `---an-ox
|---Emily/
| `---has-bought/
| `---a-horse
|---Gary/
| `---has-bought/
| `---a-rhino/
| |---is
| |---less
| `---more
`---Mary/
`---is/
`---a-snake
注意: 若是檔案的話, 內容必須一樣, 也就是說要用複製的.
deadline: 2016 Oct 7, 00:05 am
- 作業三: cloning a directory
在 ~/unix-1051/exer3 建出一個目錄結構, 使其與
/var/tmp/exercise-three 一樣
也就是說除了最上層的目錄不同外, ~/unix-1051/exer3 與
/var/tmp/exercise-three 要一模一樣. (當然 owner 不可能一樣)
- 若目錄或檔名開頭為 ex-, 則新目錄名或檔名為移除 ex- 後剩餘部分.
- 若為 file, 內容必須一樣.
- 若為 hard link, 則新建出的檔案間的關係也是 hard link.
- 若為 soft link, 則新建出的檔案間的關係也是 soft link, 而
且 link file 的 內容也必須一樣.
deadline: 2016 Oct 14, 00:05 am
- 作業四: at and crontab
- 用 at 在 11/04 01:00 至 03:00 間執行一個程式. 時間自選, 作一次即可.
輸出的第一行要包含當時執行的時間.
- 設定 crontab, 在一小時內執行二次程式, 時間任選,
注意是每一時都要執行二次, 不是只有在某一小時作二次.
這二次的程式不一定要一樣.
第一次的輸出會新增或蓋掉既有的檔案, 第二次則會接到前一次的後面.
每次輸出的第一行要包含當時執行的時間.
- at 及 crontab 所需的程式及輸出檔案皆放在 ~/unix-1051/exer4 下.
- 請參閱 ~/unix-1051/EADME-exer4.
deadline: 2016 Nov 04, 00:05 am
- 作業五: shell programming(for, if)
deadline: 2016 Nov 25, 00:05 am
- 作業六: figure out the average and the max three (sh programming)
寫一個 sh 的 program, 算出所有數字的平均及最大的三個數
數字從檔案讀入(若有給檔名的話),
或是從 keyboard 讀入(即 stdin, 若沒給檔名的話).
平均數要算到小數第二位.
若數字的個數小於三個, 則補 0.
$ cat k1
10 20 30
8 7
2
$ ./ex6.sh k1
the max three are: 30 20 10
the average is : 12.83
$ cat k2
888 2
30
11 222
$ ./ex6.sh k1 k2
the max three are: 888 222 30
the average is : 111.81
$ ./ex6.sh
1 2 3
4
5 6
the max three are: 6 5 4
the average is : 3.50
$
deadline: 2016 Dec 02 00:05 am
- 作業七: figure out the average for each user(sh programming)
$ cat ex7-k1
klim 10 20 30 milk 199
oak 100 red 200 10
joe 199 20 marry 20 julie 2000
$ ./ex7.sh < ex7-k1
klim = 20.00
milk = 199.00
oak = 100.00
red = 105.00
joe = 109.50
marry = 20.00
julie = 2000.00
$
deadline: 2016 Dec 16, 00:05 am
- 作業八: figure out the average and the max three (awk programming)
跟作業六一樣, 但改用 awk 來寫.
請全用 awk 來寫, 不要混用 sh 或 sed.
請寫成一個 script file, 並設定成可執行.
input 的 data 內可能有 comment.
$ cat k1
10 20 30 #this is a comment
8 7
# this is also a comment
2
$ ./ex8.awk k1
the max three are: 30 20 10
the average is : 12.83
$
deadline: 2016 Dec 23 00:05 am
- 作業九: figure out the average for each user(awk programming)
與作業七相同, 但改用 awk 來作. input 的 data 中的 name 可能會重複出現.
$ cat ex9-k1
klim 10 20 milk 199 joe 20
# klim is appeared again!
oak 100 red 200 10 klim 30
joe 199 marry 20 julie 2000 #joe joe
$ ./ex9.awk < ex9-k1
klim = 20.00
milk = 199.00
oak = 100.00
red = 105.00
joe = 109.50
marry = 20.00
julie = 2000.00
$
deadline: 2016 Dec 30, 00:05 am