這禮拜的第四堂課真的是超--展開
一口氣補回落後的進度,上完第二章跟第三章前半
所以這次的筆記量也是目前以來最多的
不過抓圖量並沒有比第一次多(因為有不少是不用抓圖的知識)

前幾次的筆記我知道某些地方有遺漏跟小錯誤
不過因為最近真的很忙...所以也沒時間回去修改
我會在期中考之前把前面的筆記問題給補完的

‧取得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
不過很奇怪我只要加入就會出錯或是沒反應
下次再問問同學要怎麼改吧

arrow
arrow
    全站熱搜

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