這個禮拜的筆記比往常晚了一天來寫,因為這次上課其實有點爭議
我覺得老師上課比以往快,內容比較雜
但也有同學覺得他跟以前「UNIX系統管理」來比算教的很慢了
不管如何,這次筆記我抄的比前兩次更亂
所以我這次把同類別的內容稍微做了整理,跟老師上課順序會有點不同
《終端機使用指南》
‧快速鍵 alt+1,2,3切換分頁,F11全螢幕
‧Ctrl+U - 清除輸入的指令(不用BackSpace狂按了)
‧cd - change directory 改變目錄指令(跟MSDOS相同)
‧file - 觀看目錄下檔案的類型
舉例來說,輸入cd /bin進入bin目錄(路徑前加/代表是目錄最底層)
再輸入file *就能觀看目錄底下所有檔案的類型
範例二,輸入cd /sbin進入sbin目錄(sbin=system binary)
輸入file * | most 能以分頁方式觀看
輸入file * | grep -i script 只顯示script類型的檔案
‧連到系上電腦請用ssh指令
ssh -l 帳號 sun.cis.scu.edu.tw
再輸入密碼(身分證字號)即可登入
觀看信件似乎是老師才有的權限
‧觀看操作的歷史紀錄,請輸入history
‧ls -lR /usr/include/ - 觀看目錄底下所有檔案
‧ls -lR /usr/include/ | wc - 顯示檔案總數??
‧cd /usr/include/
grep -n EXIT * - 找尋該目錄底下內容包含EXIT字串的檔案
grep -i EXIT * - 跟上面一樣,但關鍵字不分大小寫
《用7zip解壓縮檔案》
老師做的Xubuntu中含了書本教學檔
我們來用很醜的免費的開放式壓縮軟體7zip來解壓縮
不懂解壓縮語法的話,請輸入7z --help | most觀看說明
從說明會看到x: eXtract files with full paths,就決定是它了
7z x 檔名 - 解壓縮檔案到此處
終端機有個好用的功能,打檔名時只要打第一個字再按Tab
就會幫你打入後面的檔名了
如檔名為linux-up-4th-code.7z,只需打入l再按Tab即可填完後面的字
直接輸入cd按Enter會回到根目錄
再輸入ls -lR | most可以檢查檔案是不是解壓縮完成了
R代表檢視包含子目錄的檔案
《Linux文字編輯器》
1. vim, gvim - 老師愛用
2. xemacs - 美國都在用
3. scite - 學生適合用
4. gedit - 學生適合用
5. codeblocks
vim為純指令式編輯軟體,gvim則加了視窗介面
我應該會用4或5寫吧...
《Linux程式相關》
Linux程式分為以下兩類
1. executables - 各種程式語言,需經過編譯,如C、JAVA
2. scripts - 都是文字的形式,沒有經過編譯,如shell script
因為老師的xubuntu把hello.c給註解掉了
請先輸入gedit hello.c
直接用gedit開啟檔案消掉註解
再用gcc -o hello hello.c編譯成執行檔
輸入ls會看到hello*,後面的*代表可以執行的意思
有上前兩次課就知道,直接打hello會無法執行
正確的打法應該為./hello
為什麼咧?為什麼咧?
原來前面不加路徑的話他會去搜尋$PATH所記錄的所有地點
看看有沒有相符的指令,但是並沒有,所以就顯示錯誤了
《PATH全記錄》
輸入echo $PATH能看到目前系統紀錄的所有PATH
正常情況應該會顯示這樣
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
冒號:的意思是分隔兩個路徑
也就是說,輸入hello後他會去找上方七個路徑
假如有兩個路徑都有此檔案會執行哪個呢?
答案是路徑較前面的那個
我知道你一定在想,MSDOS要執行檔案根本就不用加什麼./
Xubuntu還得加,真是太麻煩了
有沒有辦法讓它可以不要加./就能直接進行
方法當然有,但是很不建議這樣作
輸入PATH=$PATH:.
再用echo $PATH看一次,會發現最後被加了:.了
其實這段語法就跟A=A+B相同,B就是你要加上去的字串
當然,也可以改成PATH=.:$PATH
這樣就會把.:加在前面,好處是第一個就會去找原目錄,速度較快
修改過PATH後再輸入一次hello看看,是不是可以跑了呢?
說了這麼多,到底缺點在哪裡呢?
我們來當個駭客你就知道了
1.先產生一個測試用的目錄test,輸入mkdir test
2.打開gedit,並輸入以下字串
echo "我將整個硬碟刪除了,哈哈哈!"
rm -fr test
echo是顯示後面的字串
-f代表強迫執行(不詢問你),-r代表移除底下所有檔案
這段意思就是直接把test這個目錄移除掉
請存檔,檔名請存ls,沒錯就是ls不要懷疑
註:如果中文輸入法不對打不出字的話
請執行[Application]-[設定]-[scim輸入法設定]更改
3.這段程式還不能執行,請輸入chmod +x ls改變他的權限
4.輸入hash -r重新rehash一次,這段應該可不作
5.最重要的一步,輸入前面說過的PATH=.:$PATH
好了,我們來看看這樣會發生什麼事
今天有個駭客在你的根目錄下放了ls這個檔案
當你輸入ls要看目錄時,因為PATH先找了根目錄
所以就執行了ls這支程式
很好,你的test目錄就這樣消失了
了解了嗎?如果先去搜尋目前目錄的話
有可能執行跟系統指令相同的檔案
所以一般不會把目前目錄加到底下
剛剛修改了PATH,現在來試試還原
其實很簡單,先用echo $PATH把原來的字串複製
再用PATH=新的字串就回復了
不過這並不算是正統的回復方式
‧請輸入以下指令
AA=aaa
BB=bb
export AA(AA會傳遞下去,繼承對外公開???)
bash
ps
最後發現bash被執行了兩次??
但這代表什麼意思呢?我也不知道╮( ̄▽ ̄")╭
因為老師那時候實在是操作太~快~了~
‧輸入stty -a,能看到所有terminal line設定
這是啥我還是不知道...
‧最後我們來大玩特玩$PATH
AA=zzzzzzzzzzz
BB=yyyyyyyyyyyyy
PATH=$PATH:.:dsffsdnjusnhgnwer
把這群指令改這麼亂,要怎麼復原咧?
其實只要輸入一個指令exit
就能把之前輸入的東西還原了
這才是正統的回復PATH的方式
‧我們還可以更狠一點
PATH=dsjiofnodif
echo $PATH
結果連ls指令都不能下了,因為PATH被改光了
別擔心,輸入exit,又復原了
《Linux程式相關教學》
打開gedit,輸入以下的程式碼,存成hellosin.c
#include <stdio.h>
#include <math.h>
int main()
{
float sin1;
sin1=sin(1);
printf("Hello\n");
printf("sin 1=%f\n", sin1);
return 0;
}
再來用gcc -o hellosin hellosin.c編譯
結果竟然沒辦法編譯了!!
很麻煩的,我們必須要把math這個靜態library(函式庫)給含進來才行
將指令改成這樣
gcc -o hellosin hellosin.c /usr/lib/libm.a
‧副檔名為*.a是傳統的靜態library,*.so是shared library
‧ls -l hello* - 列出檔名有hello的檔案
‧file hello* - 看檔名有hello檔案的類型
‧ldd ./hello - 觀看執行檔的動態連結需要哪些library
其他指令上一次已經介紹過了,為了篇幅就不多加敘述了
不懂gcc的話,可以輸入man gcc或info gcc觀看說明
(gcc的說明竟然有一萬多行...我的天啊...)
留言列表