很快的Linux程式設計來到了第二堂課了
這個禮拜老師為了顧及後來才加選進來的同學
所以前半部又簡單講解了一次Virtual Box的相關操作
因此這禮拜的進度可說比上禮拜還要少...
這次上課的主要目標在熟悉Xubuntu的終端機操作
由於我們還是Linux作業系統的初學者
要是有高手"路過"至此,請別笑我"怎麼這麼簡單的東西也要筆記"

《 上次筆記補充 》
第一篇安裝CodeBlock的部份,有兩行新指令需要補上(原文已修改)

wget http://lgp203.free.fr/public.key
apt-key add public.key


這兩行的意思是到網路上去下載更新文件的public key
由於我們下載完全都是照著該網站所提供文件的下載網址
要是該文件經過黑客竄改,就有可能下載到木馬或是病毒
所以加上這個public key,可以保證下載文件是由該網站提供的

《 將虛擬硬碟帶著走 》
上次我們學到了如何使用Virtual Box跟安裝Xubuntu
但我每到有還原卡的學校電腦,難道都得從頭裝一次嗎?
其實不用這麼麻煩
我們只要把之前產生的虛擬硬碟給打包帶走就行了

首先,把上次產生的vdi檔帶走
由於我們產生的虛擬硬碟主要只裝了Xubuntu跟CodeBlock
所以硬碟有大半部是空的
可以用壓縮軟體把該檔案壓縮起來
根據老師壓縮的結果,可以把4 GB的檔案壓到剩8XX MB
這樣的檔案大小,就可以放到隨身碟或燒到DVD光碟裡了

到了一個新的地方後,先安裝好Virtual Box
然後[檔案]-[虛擬磁碟管理器]-[硬碟]
上次選擇"新增",這次請選擇"加入",選取該vdi檔
請注意如果你把檔案燒在光碟上,最好是複製到硬碟
因為該檔案會一直存取,光碟上無法寫入可能會有錯誤



接著跟上次新增虛擬電腦一樣
除了硬碟部份要選擇剛剛加入的那顆,其他選項皆相同
這樣就會得到一個已經裝好Xubuntu的虛擬電腦了
省下許多重裝的時間

我們學校本身也有裝Ubuntu,裡面一樣有終端機,一樣有gedit
懶得把vdi複製到硬碟的話也可以直接使用Ubuntu來寫程式

《 編譯C程式 》
終於要開始寫程式了
如果上次有裝gedit的話,他放在[公用程式]-[文字編輯器]
我們先隨便打一段程式來測試



咦?為什麼不是Hello World?因為Hello World我已經看膩了(  ̄ ﹀ ̄)y-~
高興的話改成Hello Moto(你好機車)也可以,這不重要。

存到根目錄後(檔名我設為hello.c)
他會根據副檔名自動將Highlight Mode改成C語言
不過這個配色實在是...

現在開啟終端機,輸入gcc hello.c開始編譯
然後就會出現error了(如 錯誤: stdio.h:沒有此一檔案或目錄)

會這樣並不是因為我寫錯,而是因為Xubuntu並沒有內含C語言函式庫檔案
無法編譯的話,請在終端機輸入以下兩行指令,安裝函式庫
安裝完後就可以正常編譯了

apt-get install build-essential
apt-get install libncurses5-dev




編譯程式有以下四種方法
1. gcc hello.c
2. gcc -o hello hello.c
3. Create Makefile, 使用make
4. 使用 codeblocks

第一種直接編譯的話,檔名預設是a.out
想改編譯的檔名的話,請用第二種方式,後面接上-o跟檔名
如果使用CodeBlock的話,就不用記這些東西了

要執行程式的話,請輸入./a.out(注意前面一定要加./
另外在編譯時後面接著此行指令可以編譯後馬上執行,如gcc hello.c; ./a.out
以下是執行結果



《 終端機操作雜項 》

‧如果開啟Xubuntu時進到文字介面,要切換成圖形介面的話請輸入startx

‧終端機後面的符號為$代表一般使用者,#代表最高使用者

‧終端機清除畫面指令為clear(MSDOS則為cls

‧終端機輸入free可看使用記憶體狀態

 

‧上次用root權限打開的sources.list是shell script
要語法高亮度請按[View]-[Highlight Mode]-[Scripts]-[sh]
前面的#代表為註解

 

‧終端機輸入man printf看有關printf的說明時
卻發現這個說明不是C語言的printf語法而是指令

 

原來上面顯示PRINTF(1)代表這是printf的第一份說明
先輸入man -wa printf會顯示所有同名語法,發現有1跟3兩種
所以我們輸入man 3 printf,就是正常的說明了
再提醒一次,離開說明畫面請按Q

‧ls是檔案列表指令,會列出目前位置的所有檔案跟目錄
綠色代表檔案,藍紫色代表目錄
以下列幾個比較常用到的參數(其餘請參考man ls
1. ls -l  詳細資料
2. ls -a 顯示隱藏檔
3. ls -F 目錄後面加/

‧每次要顯示詳細資料都要打ls -l很麻煩
所以可以自己建立快速指令(類似批次檔)
alias ll='ls -l' - 輸入ll的時候就等於輸入ls -l
unalias ll - 將ll這個指令拿掉
cat .bashrc - 可以看alias的所有紀錄

 

mkdir class - 建立名為class的目錄
mv hello.c class/ - 原本是改名,但這樣是將hello.c搬動到class目錄
mv指令必須要有root權限,mkdir卻不用...

《 練習更改檔案權限 》

請先用gedit新增一個檔案輸入以下兩行存檔
檔名可叫「showtime」(不是好戲上場的意思)

echo 現在時間為:
date


輸入./showtime執行,卻會出現錯誤訊息:
bash: ./showtime 拒絕不符權限的操作
即使已經有root權限依然沒用
所以我們要修改檔案的屬性
輸入chmod +x showtime修改屬性
再輸入./showtime即可看到成果

 

《 常用套件管理命令 》
1. apt-get update - 檢查套件是否有更新
2. apt-get install 套件名稱s - 安裝套件(可接複數個)
3. apt-get remove 套件名稱s - 移除套件
4. apt-cache search 套件名稱 - 搜尋套件
5. dpkg -l - 列出目前安裝所有套件
6. apt-get dist-upgrade - 將所有套件更新至最新版

範例:
apt-cache search music
會搜尋所有跟music相關的套件

 

《 關於檔案編譯 》

objdump a.out
- 可看所有能對他下的指令

 

objdump -d a.out - 看該檔的組合語言

 

strip a.out - 幫檔案減肥
由下圖可發現原本的6.3 kb變成2.9 kb,一下縮減了53%的容量
這招對於硬碟容量小的嵌入式系統(手機、PDA)來說是很重要的

strip -R .comment a.out - 拿掉檔案的comment
拿掉comment後程式還是可以正常執行沒問題
至於有什麼東西是可以拿掉的...就要憑經驗了

gcc -o staticExec -s hello.c -static - 將檔案用靜態連結編譯
讓需要動態連結的檔案都包進來編譯
好處是如果需要動態連結的檔案壞掉了,一樣可以執行
壞處是檔案會暴增非常多(495 kb,是動態連結的78倍

 

gcc -S hello.c - 編譯成組合語言
同目錄下會產生hello.s檔,內容為hello.c的組合語言

arrow
arrow
    全站熱搜

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