這禮拜的第四堂課真的是超--展開
一口氣補回落後的進度,上完第二章跟第三章前半
所以這次的筆記量也是目前以來最多的
不過抓圖量並沒有比第一次多(因為有不少是不用抓圖的知識)
前幾次的筆記我知道某些地方有遺漏跟小錯誤
不過因為最近真的很忙...所以也沒時間回去修改
我會在期中考之前把前面的筆記問題給補完的
‧取得7zip的方式:在終端機上輸入apt-get install p7zip-full
‧Linux的快速鍵:複製 Ctrl+Insert、貼上 Shift+Insert
(真搞不懂為什麼要這樣設定,隔這麼遠很難按耶)
《Shell Program》
提供一個電腦跟人之間溝通的角色,負責把指令給適當的人去執行
Shell的程式稱為Shell Script
Windows也有類似的東西叫做Batch(批次檔)
‧$ - 輸入符號
‧| - 管線 (Pipline)
指令後面加上管線的話,執行的東西不會跑到螢幕上
而是傳給下一個指令(類似賽跑接棒)
ex. ls -al | more - 顯示所有隱藏檔並傳給more
‧more每顯示到一定行數就會停下來
按h能看說明,知道哪些按鍵可以使用,如空白鍵代表下一頁
‧總之,shell是介於你跟linux系統溝通的介面,允許你輸入指令給系統
目前的標準稱作bash
‧觀看bash版本,請輸入/bin/bash --version
兩個 - (dash)稱為long option
當然,bash版本越新越好
像下圖是連到學校伺服器來查看,就知道學校都用舊東西
‧輸入cat /etc/shells,來看你共有多少個shell
《ssh - Secure Shell》
這時不知為何老師又連到學校伺服器教學了= ="
輸入ssh -l 你的帳號 sun.cis.scu.edu.tw 進行連線
‧ssh指令通過port 22,有經過加密,就算訊息被截取也不怕被讀出來
Windows下最好的連線軟體是PieTTY,是自由軟體
‧輸入w能看線上有幾個同學(請參考上兩張的bash版本圖)
‧tcsh跟C語言很像,理論上可以改
但輸入cat /etc/shells後發現,要改的話權限不夠
‧grep 94b30 /etc/passwd - grep指令可以找尋有94b30的字串
《File Descriptor》
是一種代號,從0~65536
‧使用時會有三個會開啟
0 - 標準輸入(預設鍵盤)
1 - 標準輸出(預設螢幕)
2 - 標準錯誤(預設螢幕)
‧> - 把結果存到後面的檔案
>> - 把結果附加到後面的檔案(沒有該檔就產生新的)
ex. ls -l > aa - 將檔案列表存到檔案aa
ex. ps >> aa - 將process命令附加到檔案aa
ex. date > aa - 將目前時間存到檔案aa
ex. w >> aa - 將所有使用者的資訊附加到檔案aa
ex. df > aa - (disk printf) 檢查文件系統的磁碟空間佔用情況
‧MSDOS也有>這種指令
《ps - Process》
‧ps aux | more - 看所有正在執行的process
‧ps aux | grep vim - 找有vim名稱的process
‧我們可以送訊號給process
輸入kill -l 觀看所有訊號的意思
‧輸入man 7 signal 可以看說明
《Kill之關閉程式》
1. 開啟第二個分頁,輸入vim開啟程式
2. 跳回第一個分頁,輸入ps aux | grep vim查看vim的process代碼
3. 發現vim的process代碼為5310(每個人皆不同,不要直接照抄喔)
4. 前面可知signal的kill代碼為9
5. 輸入kill -9 5310,再跳回第二分頁,就會看到太陽公公...不是
是終端機符號出來了
‧kill -HUP 1234 > bb - 關閉代號1234的process並將結果輸入到bb檔案
當然1234是亂打的,不會這麼剛好開到這個process的
可是你會很神奇的發現螢幕上竟然還是出現訊息了
不是會輸入到bb檔案嗎?
回去看bb檔案,竟然是空的!?
原來我們輸入到檔案bb的只有正確訊息
要是出現錯誤的話,他會直接秀在螢幕上
所以請改輸入kill -HUP 1234 2> bb
錯誤訊息就會導向到bb上了
ex. kill -1 1234 >killouterr.txt 2>&1 - 將正確與錯誤訊息都導向到bb
ex. kill -1 1234 >/dev/null 2>&1 - 將訊息導向到dev/null,訊息不會被看到
《>的進階運用》
先隨便產生一個檔案,取名叫animal
mouse
ox
tiger
rabbit
dragon
snake
horse
goat
monkey
chicken
dog
pig
‧sort < animal > sorted - 將animal檔案讀進來sort之後輸入到sorted檔案
如下圖可以發現檔案已經被排序好了
‧使用vim排序文字檔
請先按下冒號:進入指令輸入模式
輸入%!sort - 排序每行內容
輸入q! - 離開程式
‧> 輸出導向,取名很麻煩
假設今天你打了一個驚天地泣鬼神的程式,取名叫test
去上廁所的途中,有人來用你電腦來測試老師教的輸出導向
輸入date > test等指令
你的心血就變成時間了...
所以一般都會使用set noclobber把輸出導向關起來
(不過我在家裡測試,> 仍然可用,不知原因在哪)
‧> 輸出導向,暫存檔很多
ps aux > psout.txt
sort < psout.txt > pssorted.txt
less pssorted.txt
總共會產生psout.txt, pssorted.txt兩個暫存檔
有沒有辦法寫的簡單一點又沒暫存檔呢?有
ex. ps aux | sort | less - 效果跟上面三行一樣
ex. cat animal | sort | cat -n | less
將前面的animal檔案排序加行號再用less方式顯示
‧以下部份因老師操作太快沒有抄到,不知道作用為何
nroff -man man.1 > man
column man | less
gzip -d -c /usr/share/man/man7/man.7.gz nroff -man | column | less
《又回到Shell Program》
‧shell的大括號{}代表兩個元素選一個(?)
‧#!不僅是註解,而是由後面指的程式檔來解譯他
‧執行shell script的方法有三
1. chmod +x 檔名 - 更改權限(老梗了)
chmod +x * - 改變所有檔案都可執行
2. PATH=$PATH:.
3. 輸入以下指令(假設檔名為first,請先換到root身分)
cp first /usr/local/bin
chown root /usr/local/bin/first
chgrp root /usr/local/bin/first
chmod 755 /usr/local/bin/first
chmod u=rwx,go=rx /usr/local/bin/first
不要問我為什麼這樣可以,我也不知道="=
‧Quote - 變數
要觀看變數內容,前面需加$
‧"$變數" - 顯示變數內容
'$變數' - 顯示變數名稱
請參考下圖即可了解
‧管線後的閱讀方式有三
set | more
set | less - 雖叫less可是比more好
set | most - 可上下跳轉更好用
~接下來都是script文法教學,請自行回去看講義~
《兩個有用的Commands》
find - 尋找特定指令
find [path] [options] [tests] [actions]
‧find / -name '*.c' - 找尋C語言檔案
如果想中途停止找尋請按Ctrl+C
‧find /usr/src -name '*.c' -print -exec rm '{}\;'
去/usr/src目錄找副檔名.c就全部執行rm刪除掉
但因為老師忘記語法,所以以上的指令是無法執行的,請安心
‧find / -name inter* - 找inter開頭的所有檔案
grep - 比find強大的指令
grep [options] PATTERN [FILES]
‧grep -i hello * - 找尋所有目錄中含有hello字串的檔案
-i - 不分大小寫
-n - 加上行號
‧Regular Expressions(正規運算式)
這部份請自行回去查閱
‧grep -n d.n * - 找內含dXn的檔案(如底下就是找到addon)
===
ch 3 檔案跟目錄怎麼去使用他們
===
標題無誤(爆
《mount》
‧mount /media/cdrom0 - 掛載目錄到光碟機
‧umount /media/cdrom0 - 停止掛載
‧mount /dev/scd0 testmount/ - 掛載到testmount目錄下
請記得要先把Virtual Box的光碟機打開
因為我平常都是關掉狀態,所以之前才會失敗="=
《write》
write指令很重要,請用man 2 write 觀看說明
ex. write(1, "Here is some data\n", 18)
write指令最後的參數18代表的是要顯示的字數
假設把中間的字隨便增加,最後也只會顯示前18個字
《time》
‧time ./simple_write - 看程式執行時間
‧執行範例的以下三個程式,會發現效果相同但是時間差很多
所以程式的效能是很重要的
time ./copy_system
time ./copy_block
time ./copy_stdio
《make》
編譯底下所有檔案為執行檔
而且再次輸入只會重新編譯改過的檔案,不會從頭開始編譯
要是不喜歡這種方式,可以直接用CodeBlock
不需要記要什麼指令
程式在[Applications]-[開發]-[Code::Blocks IDE]
編譯的畫面很小,老師說可以在
[Setting]-[Environment]-[Terminal to launch console programs]
加入以下指令讓編譯畫面變大
-fn 10x20 -bg white -fg black
不過很奇怪我只要加入就會出錯或是沒反應
下次再問問同學要怎麼改吧
好康道相報
※欲轉貼本站文章者,只要註明出處及網址即可,不需我同意了,謝謝您的配合
※留悄悄話的網友請注意:如果您非痞客邦會員(包含使用FB/Google+帳號),是看不到回覆的喔
※痞客邦會自動將疑似廣告留言隱藏,因此若留言後看不到,可能是被系統自動隱藏了,由於我現在很久才會開一次網誌,有看到時我才會將非廣告留言解開,敬請見諒
※留悄悄話的網友請注意:如果您非痞客邦會員(包含使用FB/Google+帳號),是看不到回覆的喔
※痞客邦會自動將疑似廣告留言隱藏,因此若留言後看不到,可能是被系統自動隱藏了,由於我現在很久才會開一次網誌,有看到時我才會將非廣告留言解開,敬請見諒
- Oct 05 Sun 2008 14:48
Linux程設學習筆記(四)
全站熱搜
留言列表
禁止留言