close

這個禮拜的筆記比往常晚了一天來寫,因為這次上課其實有點爭議
我覺得老師上課比以往快,內容比較雜
但也有同學覺得他跟以前「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 gccinfo gcc觀看說明
(gcc的說明竟然有一萬多行...我的天啊...)

arrow
arrow
    全站熱搜

    蕭雲 發表在 痞客邦 留言(1) 人氣()