Linux 基本指令備忘

由 匿名使用者 在 週五, 2012/02/24 - 14:48 發表

資料來源:鳥哥私房菜

僅供個人參考備查

特別說明:

先說明一下,基本上雖然 Linux 目前對於圖形界面的使用已經支援的相當的不錯,但是對於一些比較細微的設定方面,畢竟是比不上使用傳統的文字介面來的有效!並且,使用文字介面來設定對於瞭解 Linux 有一定的幫助,畢竟 Linux 與 MS 的咚咚是不太相同的!鳥哥特別建議大家使用文字介面來解決問題!

除此之外,使用文字介面登入 Linux 對於系統資源的損耗也比較少,相對的,就有比較多的資源可以做為網路的用途,進而增加 Linux 的效能。尤其,在我們這個網頁中,基本上是以一般被淘汰的 586 系列電腦做為主機,因此對於記憶體與 CPU 的效能要求並不高,所以能有效的減少系統資源的浪費就盡量的減少一些容易耗掉系統資源的廢物吧!

底下我們會分門別類的將各個比較常用的指令給搬上來,你可以參考一下。另外一個最重要的地方是,在 Linux 主機上,已經內建各個指令的說明內容了,而且是很詳細的線上說明,你可以使用: 
 

[root@tsai  root]#  man  command <=== command 為你欲查詢的指令名稱
[root@tsai  root]#  info  command 

 

在上表中,針對 command 這個指令你可以使用 man 或者是 info 來查詢他的功能與說明,例如你要查尋 ls 這個指令時,你可以輸入: man  ls或  info  ls 來查詢一下!適當的利用線上查詢對於你的英文及相關的指令功能有一定程度的幫助喔!



登入與登出(開機與關機)

telnet
這套軟體在 Windows 及 Linux 系統中都存在,只是介面有點不很相同就是了。基本上,這個程式是 user 端用來連線登入遠端主機的。例如鳥哥人在台南,但是我可以在台南使用可以連上 Internet 的電腦,經由 telnet 連線上家裡的 Linux 主機,而進行設定!感覺上就好像在家裡玩自己的 Linux 主機一樣!
一般來說,如果你是使用 Winodows 系統,則你可以在『開始』-->『執行』後,輸入  telnet  xxx.yyy.zzz.qqq ,其中, xxx.yyy.zzz.qqq 為 IP 位址,則可以連上主機(或者是 BBS )囉。當然,如果您是在 Linux 系統下,亦可直接輸入 telnet xxx.yyy.zzz.qqq 來連上主機或BBS喔!
語法: telnet 主機位址(或主機名稱)
login
登入系統的指令,在遠端進入系統時,程式會自動執行。假設你所要登入的系統主機為 sun.os.test.com ,則你可以在 Windows 底下的 Telnet 軟體,或其他軟體上,執行:
 
telnet  sun.os.test.com
 
則會出現如下的畫面:
SunOS  5.7

login:  username 
Password:

sun# _

 
你只要有 username 及 pass word 就可以登入系統啦!在你登入系統後, sun# 是提示字元,相當於古早的  C:\> 的意思!
exit
這是離開 Linux 系統的指令,相當於 login out 的意思。
sun#  exit

shutdown

Linux 用來關機的指令,這個指令只有 root 才有權力下! shutdown 的用法如下: 
 

[root@tsai  root]#   shutdown  <==系統在兩分鐘後關機,並傳送訊息給在線上的人 
[root@tsai  root]#   shutdown  -h  now  <==系統立刻關機 
[root@tsai  root]#   shutdown  -r  now  <==系統立刻重新開機 
[root@tsai  root]#   shutdown  -h  20:30  <==系統在今天的 20:30 分關機 
[root@tsai  root]#   shutdown  -h  +10   <==系統在 10 分鐘後關機

reboot

這是鳥哥最常用來重新開機的指令(或關機),可以配合寫入緩衝資料的 sync 指令動作,如下: 
 

[root@tsai  root]# sync; sync; sync; reboot



Linux 多人多工與背景執行功能

多人多工

Linux 最為人所稱道的即是其多人多工的能力,你可以在任何時刻連線上來你的 Linux 主機,並且同時做很多的工作,例如同時執行 http 的 Web 功能,同時進行 fortran 等程式語言的編輯,並同時上網聊天!你會懷疑, Windows 98 也可以做到這樣的地步呀!不過,不要忘了,在 Linux 的系統下,你所做的任何工作都是獨立的,你可以隨時將你所不要的工作給殺掉,而且,當其中某一個程式當掉的時候, Linux 並不會當機,只要你在其他的視窗再開啟一個終端介面,然後查出當機的那一個指令的 process (過程),然後將之殺掉就可以了!根本不用再重新開機!也因為這種多人多工的強大能力,因此, Linux 系統一般來說是很少當機的,並且,由於其記憶體的管理功能完善,因此也不容易有 CPU 過熱的情況發生(如果只是做為一般伺服器使用)。

在你的 Linux 主機中,可以支援七個終端視窗介面,你可以按[Alt]+[F1].....[F7]來切換不同的終端機介面!所以當其中一個終端機介面當機的時候,你可以在另外一個終端機登入,然後查出錯誤的所在(使用 ps -aux 的功能),再以 kill 將錯誤的地方殺掉即可!

背景執行

另外一個功能,就是『背景執行』的功夫了。當你輸入 
 

[root@tsai  root]#  cp  file1  file2  &

 

這一串指令的時候,表示將 file1 這個檔案複製為 file2 ,且放置於背景中執行,也就是說執行這一個命令之後,在這一個終端介面仍然可以做其他的工作!而當這一個指令( cp  file1  file2 )執行完畢之後,系統將會在您的終端介面顯示完成的消息!很便利喔!

多人多工的問題

多人多工確實有很多的好處,但其實也有管理上的困擾,因為使用者越來越多,將導致你管理上的困擾哩!另外,由於使用者日盛,當使用者達到一定的人數後,通常你的機器便需要升級了,因為 CPU 的運算與 RAM 的大小可能就會不敷使用!

& 與 [Ctrl]+[z]

如前所述,背景執行可以提供你在同一個終端機介面(命令模式)當中同時做很多的事情,你可以使用 & 或 [Ctrl]+[z] 來將指令放置背景中執行。例如執行 find  "/"  -name  httpd & 這一行命令,表示將尋找 httpd 這個檔案的指令放置到背景中執行的意思。另外,當你執行一個需要長時間的程式,例如執行 ftp 程式時,在程式進行當中,也可以經由按下 [Ctrl]+[z] 來將程式放置於背景中。那如何由背景中將程式在叫回螢幕上呢?請參考下一個指令 fg

fg

fg 是將程式再叫回螢幕上顯示的一個指令,在終端模式中輸入 fg 即可。當然,如果你當時並沒有程式在執行的話,系統會告訴你,並無執行中程式(no such job)。

ps       -aux

這是察看執行中的程式的一個指令,你可以配合其參數  -aux  來執行,如下: 
 

[root@tsai  root]#  ps  -aux

則系統將會列出連同系統服務的程式,在輸出的第一列中會出現 『PID』字樣,在那一欄中的咚咚就是每一個程式執行的代碼。例如下面的輸出畫面。 
 

[root@tsai  root]#  ps  -aux 
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND 
root         1  0.0  0.1  1324  532 ?        S    Jul16   0:14 init [3] 
root         2  0.0  0.0     0    0 ?        SW   Jul16   0:05 [kflushd] 
root         3  0.0  0.0     0    0 ?        SW   Jul16   0:29 [kupdate] 
root         4  0.0  0.0     0    0 ?        SW   Jul16   0:00 [kpiod] 
root         5  0.0  0.0     0    0 ?        SW   Jul16   0:00 [kswapd]

 

在上圖中, init 這個程式的 PID 為 1 。

kill

這是用來殺掉執行中程式的指令,需配合 ps 這個指令,當你執行一個 ftp 程式,但是他有點當當的時候,你可以 ps  -aux 這個指令查出  ftp  這個程式的代碼(PID),假設其 PID 為 110 ,然後輸入: 
 

[root@tsai  root]# kill  110

即可殺掉這個 ftp 程式。



檔案與目錄管理

cd

這是用來變換工作路徑的指令。一登入 Linux 系統後,root 會在 /root 下,至於使用者會在預設的 /home/username 底下,例如鳥哥的 ID 為 vbird ,則以 vbird 的身份登入後,會到 /home/vbird 這個路徑下。OK!那回到上一層可以用 cd .. 而到相對路徑可到 cd ../bird,至於絕對路徑則是 cd /usr/sbin !注意喔,在前面的提示字元會改變路徑名稱! 
 

[root@tsai /root]#  cd ..       <== 回到上一層 
[root@tsai /]#  cd          <== 回到使用者目錄 
[root@tsai root]#  cd /usr/bin  <== 到 /usr/bin 這一個目錄 
[root@tsai bin]#                <== 看吧!到 bin 這個目錄下囉!

pwd

這是顯示目前所在目錄的指令,例如在上個表格最後的目錄是 /usr/bin 這個目錄,但是提示字元僅顯示 bin ,如果你想要知道目前所在的目錄,可以輸入 pwd 即可: 
 

[root@tsai bin]#  pwd 
/usr/bin  <== 顯示路徑囉! 
[root@tsai bin]# 

ls

這是用來顯示檔案名稱與內容的指令,檔案的內容說明已經在 這裡 說明過了,在此不再重複! ls 的語法為: 
 

[root@tsai bin]# ls --color 以彩色顯示檔案資料 
[root@tsai bin]# ls -l     詳細列出檔案系統結構 
[root@tsai bin]# ls -a     顯示隱藏檔 (以"."開頭的檔案) 
[root@tsai bin]# ls -al    同時顯示隱藏檔與詳細資料 
[root@tsai bin]# ls -al|more 將檔案內容以一頁一頁顯示

cat

這是將檔案內容列出的指令。例如在 /root 下有一個檔名為 .bashrc (這是系統預設的檔案,是隱藏檔),你可以按下 cd 回到 /root 目錄後,執行: 
 

[root@tsai /root]# cat .bashrc 
# .bashrc

# User specific aliases and functions

alias rm='rm -i' 
alias cp='cp -i' 
alias mv='mv -i' 
alias ll='ls -l' 
alias lm='ls -al|more'

上面顯示的就是 .bashrc 這個檔案的內容啦!基本上,cat 與 DOS 下的 type 是相同的!

more

是否覺得 cat 在讀取較大的檔案的時候會有看不到的資訊呢(如果檔案太大的話),這時候你可以用 more 來一頁頁讀取喔!另外, more 也可以與其他的程式合併使用,例如 ls !(如下表中,『|』就是分隔號,可以將兩個指令放在一起執行!) 
 

[root@tsai /root]# more .bashrc 
[root@tsai /root]# ls -al|more

mkdir

建立新的目錄!例如我們要建立一個 test 的目錄,你可以這樣下指令: 
 

[root@tsai /root]# mkdir test 
[root@tsai /root]# ls -l

再執行了 ls -l 之後,你就可以看到 test 這個目錄啦!

rm    -irf

這是移除的指令,相當於 dos 下的 del 指令!這裡要注意的是,通常在 Linux 系統下,為了怕檔案被誤殺,所以都已經有 -i 這個參數, -i 是指每個檔案被殺掉之前都會確認一次。而如果要連目錄下的東西都一起殺掉的話,就要使用 -rf 這個參數了!你可以用下面這個例子來試試看有什麼不同的現象! 
 

[root@tsai /root]# rm test 
[root@tsai /root]# rm -rf test

rmdir

mkdir 是建立目錄,而 rmdir 就是移除目錄的指令。不過,若是欲移除的目錄裡頭有檔案或其他目錄存在,就無法移除,這時就要用剛剛的 rm -rf 來移除啦!

mv

這是移動檔案或目錄的指令,例如我們要將 .bashrc 這個檔案移動至根目錄下,則: 
 

[root@tsai /root]# mv .bashrc / 
[root@tsai /root]# mv /.bashrc .

而將檔案移動至目前的工作目錄,則加上 "." 這個字!

語法: mv 來源檔(或目錄) 目的檔(或目錄)

cp

就是 copy 的意思。例如我們要將 .bashrc 這個檔案複製到 /home 底下,可以: 
 

[root@tsai /root]# cp .bashrc /home

語法: cp 來源檔 目的檔

ln

 ln  -s  真實目錄或檔案   連結的目錄或檔案:這是連結檔案或目錄的指令,通常我們都會加 -s 這個參數,例如我們將 /usr/bin 這個目錄連接到 /root 底下,可以這樣輸入: 
 

[root@tsai /root]# ln -s /usr/bin bin

不過請注意喔,在你的 /root 底下的 bin 這個目錄中的所有檔案其實都是 /usr/bin 裡面的東西,所以你如果進入 /root/bin 內亂殺東西的話,等於是將 /usr/bin 內的檔案殺掉喔!

語法: ln -s 來源檔(或目錄) 目的檔(或目錄)

find

尋找檔案的指令,會將欲尋找的檔案找出來,例如下面的例子: 
 

[root@tsai /root]# find / -name bin

上面的意思為:在 / 目錄(根目錄)下尋找檔名(-name)為 bin 的檔案,要注意的是,因為 Linux 的檔案很多,如果你的電腦比較舊,可能會找很久...

語法: find 路徑 -name 檔名

whereis

相對於 find ,你也可以使用 whereis 這個指令來下達找尋的檔案,whereis 利用曾經找過的系統資訊內的資料去找檔案,所以速度會很快,不過,如果 whereis 找不到的話,並不代表該檔案真的不存在!這個要小心! 
 

[root@tsai /root]# whereis bin 
bin: /usr/bin

chmod

這是變更檔案屬性的指令,通常鳥哥都是以數字作為改變屬性的依據;在檔案的屬性中, r 為4分、w 為2分, x 為1分,如果你想要讓你剛建立的一個檔案,讓大家都看到的話,即你需要『-rw-r--r--』,這是你的三個群組的分數分別是 r+w=6, r=4, r=4,所以可以下達: 
 

[root@tsai /root]# chmod 644 .bashrc 
[root@tsai /root]# ls -al .bashrc 
-rw-r--r--   1 root     root          216 Apr  8 13:54 .bashrc

chown

記得檔案有『擁有人』及『擁有群組』吧,這個 chown 就是在改變擁有者的指令。例如你 copy 一個檔案給 vbird ,但是因為你的身份是 root ,所以你 copy 過去的檔案 vbird 可能不能使用,因此你需要將檔案的擁有人改成 vbird 才可以!如下: 
 

[root@tsai /root]# cp .bashrc /home/vbird 
[root@tsai /root]# cd /home/vbird 
[root@tsai vbird]# chown vbird .bashrc

那如果想要將整個目錄下的檔案都改變擁有者與擁有群組呢?可以下達 
chown  -R  username:groupname  directory  (ex> chown -R root:root /root) 
即可喔!

chgrp

作用與 chown 相似,只是在改變檔案或目錄的『擁有群組』。

df

這是用來察看硬碟空間的指令。由於我們目前將檔案都建立在根目錄『/』下,所以只要沒有空間,則所有檔案都無法複製進來系統。不過,若你規劃出多的硬碟,則可以察看你的硬碟空間資訊,如下所示: 
 

[root@tsai /root]# df 
Filesystem     1k-blocks      Used Available Use% Mounted on 
/dev/hda5         964312     87648    827680  10% / 
/dev/hdb5        2150420    745500   1295680  37% /home 
/dev/hdb1        2016016   1419708    493896  74% /usr 
/dev/hda1        1022080    349880    672200  34% /win98

上面說,Filesystem 是硬碟所在的劃分表, Used 是指使用掉的硬碟空間(KB),Available是剩下空間,Mounted on則是這顆硬碟代表哪一個目錄。如上所示,根目錄(/)在 hda5 這顆硬碟,總空間有 964312 KB,剩下可用空間為 827680KB,至於 /win98 則在 hda1 中,且全部空間有 1022080 KB。

如果要將資料型態以 MB 數顯示的話,可以輸入 df -m 來達成。

du

這是用來察看目錄內所有檔案使用掉的空間的情況,如下所示: 
 

[root@tsai /root]# du -m

其中, du 預設的檔案輸出資料為 KB,以參數 -m 使檔案資料顯示為 MB。



磁碟與硬體管理

mount

這是將硬碟或者是光碟、軟碟接掛上系統的指令!之前有提過,在 Linux 下面,每一個裝置都是一個檔案(或目錄),而每一種裝置的檔案型態都不相同,因此對於 mount 後面加的參數就很重要囉:例如: 
 

[root@tsai /root]# mount -t iso9660 /dev/cdrom /mnt/cdrom <=光碟 
[root@tsai /root]# mount -t vfat /dev/fd0 /mnt/floppy     <=軟碟(windows 系統檔) 
[root@tsai /root]# mount -t ext2 /dev/fd0 /mnt/floppy     <=軟碟(Linux 系統檔) 
[root@tsai /root]# mount -t ext2 /dev/hdc1 /mnt/harddisk  <=硬碟

光碟裝置檔=/dev/cdrom、軟碟裝置檔=/dev/fd0、硬碟裝置檔=/dev/hdxx。 
如上表所示, -t 是參數,至於 iso9660, vfat, ext2則是這些裝置的檔案型態!後面接的則是這個裝置所在的目錄!千萬記得,這些目錄需要是早已存在的,而且最好是空的目錄,不然目錄裡面原本存在的檔案會不見去! 
另外,注意喔!當你 mount 上光碟機或軟碟的時候,請不要輕易的拿出磁片(而且光碟片也不會被你退出),因為會造成系統讀取的錯誤!你應該用 umount 來退出!指令為 
umount  /mnt/cdrom  (umount  裝置所在目錄)

fdformat

這是用來『低階格式化』軟碟的指令。(注意:軟碟的裝置檔為 /dev/fd0 )不必將軟碟 mount 就可以格式化了,指令內容為: 
 

[root@tsai /root]# fdformat /dev/fd0H1440

注意喔!在上面的裝置檔案為 /dev/fd0H1440 ,其中加在 /fd0 之後的 H1440 為表示 1.44MB 的軟碟容量!在低階格式化之後,還要將軟碟的檔案格式化為 Linux 的 ext2 之型態,則需要使用 mke2fs 指令!

fdisk

這是對硬碟(也可以對軟碟喔)做分割的程式。基本的用法為=> fdisk 裝置檔案,假設您有一顆硬碟要重新規劃,而這顆硬碟為 hdc ,則你可以輸入: 
 

[root@tsai /root]# fdisk /dev/hdc

然後,按下 m 會出現 help 的選單,要知道的大概只有兩個子指令,一個是刪除 partition 按 d ,一個是增加 partition 按 n,假設你要增加一個 primary partition,按下 n 再按 p 再按你要的 primary partition 號碼(1-4)就可以了。假設你的 hdc 需要規劃成為一個硬碟(即 hdc1)則在輸入 fdisk /dev/hdc 後,需要按: 
n(增加) -> p(primary partition) -> 1(partition 1) -> w (儲存寫入) -> q (離開) 
同樣的,分割完硬碟(或軟碟)後,要以 mke2fs 格式化!

mke2fs

這是用來將磁碟格式化成 Linux 系統檔的指令。基本上,只要寫入對的裝置檔案就可以了。例如我們要格式化軟碟的話,或是新的硬碟 hdc1 ,則可以如此寫: 
 

[root@tsai /root]# mke2fs -c /dev/fd0 
[root@tsai /root]# mke2fs -c /dev/hdc1

要記得的是,在你做這個格式化的動作時,軟碟與硬碟均不可 mount 到 Linux 的系統中。

mkbootdisk

這是製作開機磁片的指令。指令很簡單: 
 

[root@tsai /root]# mkbootdisk --device /dev/fd0 `uname -r`

其中, `uname -r` 是目前 Linux 系統所使用的核心版本,如果你有多個核心版本的話,你以可以直接輸入核心版本。例如在這個網頁中所使用的核心有兩個版本,一個是 2.2.12-20,另一個是 2.2.18,若要以 2.2.18 設定開機的話,可以使用: mkbootdisk  --device  /dev/fd0  2.2.18 

badblocks

這是用來檢查硬碟或軟碟有沒有壞軌的指令,你可以用底下的方式來下達: 
 

[root@tsai /root]# badblocks  -svw  /dev/hdc1

fsck

這是用來檢查與修正硬碟錯誤的指令。注意:通常只有身為 root 且你的系統有問題的時候才使用這個指令,否則在正常狀況下使用此一指令,可能會造成對檔案的危害! 
 

[root@tsai /root]#  fsck  /dev/hdc1

通常使用這個指令的場合都是在系統出現極大的問題,導致你在 Linux 開機的時候得進入單人單機模式下進行維護的行為時,才必須使用此一指令!

rpm

這是一個安裝或者是解安裝 RedHat 軟體的指令,在 RedHat 中已經有設定了一些有點像 Windows 的軟體安裝功能,這就是 rpm 這套軟體了!而 rpm 所安裝的軟體又分為兩種形式,因此你可以分別使用下面兩種參數對不同的檔案進行安裝: 
 

[root@tsai /root]# rpm  -ivh  xxxxx.rpm  <==將 xxxxx.rpm 檔案安裝於 Linux 系統中 
[root@tsai /root]# rpm  -ivh  --nodeps xxxxx.rpm  <==將 xxxxx.rpm 檔案『強制』安裝於 Linux 系統中 
[root@tsai /root]# rpm  -Uvh  xxxxx.rpm  <==將 xxxxx.rpm 升級 
[root@tsai /root]# rpm  -e    xxxxx.rpm  <==將 xxxxx.rpm 解除安裝 
[root@tsai /root]# rpm  -q    squid  <==察看 squid 這一個軟體的版本 
[root@tsai /root]# rpm  --recompile  yyyyy.src.rpm  <==安裝檔名為 .src.rpm 的檔案!

這裡要注意的是, rpm 的檔案主要有兩種形式,一種是已經經過編譯的 i386.rpm 檔案,令一種是未經編譯的 .src.rpm 檔案,兩種檔案形式的安裝參數是不一樣的,請小心注意!



系統管理員

su

這是一個用來轉換你身份成為 super user (系統管理員)的指令,任何人只要知道 root 的密碼,就可以成為 super user,所以密碼可千萬不要外流呀!由於 RedHat 在主機之外的終端機上,無法以 root 的身份直接連線,所以你需要以一般身份的 user 連線之後,再以 su 指令來成為 super user: 
 

[vbird@tsai vbird]# su  <==輸入指令 
Password:       <==在這裡輸入 root 的密碼 
[root@tsai vibrd]#      <==看,使用者名稱變囉!

clear

這是用來清除螢幕畫面用的,沒有什麼太大的用處。通常是你覺得畫面太亂的時候輸入用的!直接輸入 clear 就可以了!

dmesg

在開機的時候你會發現有很多的訊息出現吧,例如 CPU 的形式、硬碟、光碟型號及硬碟分割表等等。但是訊息都是『刷』的一聲就跑過去了!這些訊息有時候對於系統管理員是很重要的,因為他提供了系統的資訊呀!要看這些訊息你可以用 dmesg 這個指令來觀看! 
 

[root@tsai /root]# dmesg|more

加上 |more 的原因是因為訊息太多了,所以可以加入這個管線指令來使畫面暫停!

groupadd

這是用來增加群組的指令,通常鳥哥都不用這個指令的,因為有更容易使用的指令 /bin/userconf 可以使用哩(注意,在 RedHat 7.0 以後的版本,就要使用 /sbin/userconf 哩)!

useradd

這是用來增加使用者的指令,鳥哥通常不使用這個指令,你可以使用 /bin/userconf 這個指令,更簡單易用喔(是視窗介面的喔!)(注意,在 RedHat 7.0 以後的版本,就要使用 /sbin/userconf 哩)

userconf

這是用來增加使用者、群組等,且以視窗為介面的一個指令!如果你是以遠端登入,並使用 su 指令成為 super user 的話,直接輸入 userconf 可能會找不到這個指令,你可以輸入: /bin/userconf 來啟動這個指令!(注意,在 RedHat 7.0 以後的版本,就要使用/sbin/userconf 哩),由於這個指令的圖示較多,請到這裡來看看!

passwd

這是用來更改密碼的指令,很簡單,只要在提示字元下輸入 passwd ,然後輸入目前的密碼,再輸入兩次欲修改成的新密碼,就修改OK了!不過要注意,密碼的形式:不能與帳號相同,且需要 8 個字元以上,另外,帳號也不能太簡單!否則系統會不接受! 
 

[vbird@tsai vbird]# passwd 
Changing password for vbird 
(current) UNIX password:      <==這裡輸入目前的密碼 
New UNIX password:     <==這裡輸入新的密碼 
Retype new UNIX password:     <==這裡再輸入新的密碼一次 
passwd: all authentication tokens updated successfully

who

這是用來視察目前在系統上的使用者指令,你也可以使用 w 這個指令來下達動作。 
 

[root@tsai /root]# who 
root     pts/0    Aug  2 20:43

[root@tsai /root]# w 
  8:48pm  up 4 days,  5:08,  1 user,  load average: 0.00, 0.00, 0.00 
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT 
root     pts/0    192.168.1.2       8:43pm  0.00s  0.38s   ?     -

基本上,who 與 w 的功能是相同的,只是 who 僅列出使用者名稱與登入時間,至於 w 則會列出使用者的

  • 來源位址(IP):就是 FROM 那一項即是IP;
  • 登入時間:即是 LOGIN@ 那一項;
  • 工作項目:就是 WHAT 那一項!

whoami

這是用來確認你目前的身份的指令,由於你可能會有幾個身份在你的機器上,所以需要以這個指令來確認你的身份,不過由於 Linux 會將使用者名稱寫在提示字元上,所以這個指令目前比較少用到了。

top

這是用來指示目前系統的服務項目的動態資料。 
 

[root@tsai /root]# top 
 10:14pm  up 4 days,  6:34,  1 user,  load average: 0.01, 0.01, 0.00 
40 processes: 39 sleeping, 1 running, 0 zombie, 0 stopped 
CPU states:  0.5% user,  0.3% system,  0.0% nice, 99.0% idle 
Mem:   63124K av,  60844K used,   2280K free,  23604K shrd,  35648K buff 
Swap: 104380K av,   1684K used, 102696K free                 10788K cached

  PID USER     PRI  NI  SIZE  RSS SHARE STAT  LIB %CPU %MEM   TIME COMMAND 
 3121 root      20   0  1016 1016   820 R       0  0.9  1.6   0:47 top 
    1 root       0   0   380  368   320 S       0  0.0  0.5   0:04 init 
    2 root       0   0     0    0     0 SW      0  0.0  0.0   0:00 kflushd 
    3 root       0   0     0    0     0 SW      0  0.0  0.0   0:00 kupdate 
    4 root       0   0     0    0     0 SW      0  0.0  0.0   0:00 kpiod 
    5 root       0   0     0    0     0 SW      0  0.0  0.0   0:00 kswapd 
    6 root     -20 -20     0    0     0 SW<     0  0.0  0.0   0:00 mdrecoveryd 
  366 bin        0   0   308  288   228 S       0  0.0  0.4   0:00 portmap 
  382 root       0   0   392  376   328 S       0  0.0  0.5   0:00 apmd 
  435 root       0   0   488  480   388 S       0  0.0  0.7   0:00 syslogd 
  446 root       0   0   688  676   316 S       0  0.0  1.0   0:00 klogd

輸入 top 之後,會出現類似上面的顯示情況。上圖中說明了你的記憶體有63124K,而下方的面版說明了目前正在執行中的工作內容!

free

這是用來察看記憶體的指令。 
 

[root@tsai /root]# free 
             total       used       free     shared    buffers     cached 
Mem:         63124      60732       2392      23136      35648      10796 
-/+ buffers/cache:      14288      48836 
Swap:       104380       1684     102696

如上圖中,說明總記憶體容量為 63124K,而使用了 60732K,另外,虛擬記憶體(Swap)共有 104380K(亦即共有 100MB 的虛擬記憶體)。

quotacheck, edquota

這些檔案是用來限制使用者在 Linux 主機上的硬碟使用容量。例如,有十個人同時分享一個 2G 的硬碟空間,但是有一個使用者就用了 1.5 GB 的容量,那相對的,其他人可使用的空間就只有剩下 0.5G 啦!不公平對不對,而且也怕被使用者填充大量的垃圾,而使用系統資源被瓜分掉!因此就有 Quota 這個咚咚的出現啦!由於執行的步驟較為繁瑣,所以額外寫了一個頁面,請到這裡來看看。



壓縮指令

compress

這是用來壓縮及解壓縮檔名為 .Z 的壓縮檔。要注意的是,用 compress 壓縮的時候,會將原檔案殺掉而變成檔名為 .Z 的檔案,例如你壓縮一個名為 bird.test 的檔案,則壓縮完成後只會剩下 bird.test.Z 這個壓縮檔!當然,解壓縮的時候也是一樣的,壓縮檔不見了,只有剩下被解壓縮的檔案。指令如下: 
 

[root@tsai /root]# compress xxxxx        <==將 xxxxx 檔案壓縮成為 xxxxx.Z 檔名 
[root@tsai /root]# compress -d xxxxx.Z   <==將 xxxxx.Z 解壓縮成 xxxxx

上表中,解壓縮也可以用 uncompress xxxxx.Z 來達成!

gzip

這個也是一個壓縮指令,與 compress 很相似,指令的用法也相同!只是壓縮的檔名為 .gz 罷了! 
 

[root@tsai /root]# gzip  xxxxx         <==這是壓縮指令 
[root@tsai /root]# gzip  -d  xxxxx.gz  <==這是解壓縮指令

tar

這是一個很棒的壓縮指令,這個指令可以配合 gzip 來進行整個目錄的壓縮!例如有一個名為 bird 的目錄要被你整合成一個檔案,你可以使用:tar  -xvf  *.tar  *(其中 * 為你所要整合的目錄名稱)。 
 

[root@tsai /root]# tar  -cvf  bird.tar  bird  <==只有將目錄轉成一個檔案,沒有壓縮 
[root@tsai /root]# tar  -zcvf  bird.tar.gz  bird <==壓縮一整個目錄成為 .tar.gz 檔案

上面這個例子的 bird.tar 只是將 bird 這個目錄整個拷貝成為一個檔案而已,並沒有壓縮,而 bird.tar.gz 則是將 bird 這個目錄壓縮成為一個檔案!基本上,我們都是使用 -zxvf 來壓縮一整個目錄的!而如果是要解壓縮呢?由於有沒有壓縮所下的參數並不相同,所以針對兩種檔案也是有兩種參數的組合: 
 

[root@tsai /root]# tar  -xvf  bird.tar 
[root@tsai /root]# tar  -zxvf  bird.tar.gz

上面則是解壓縮的參數! 
注意了,用 compress 及 gzip 壓縮及解壓縮的時候,會將原檔案取代掉!而使用 tar 來壓縮及解壓縮的時候,原檔案將會與產生檔案同時存在!通常我們都是使用 tar 來進行壓縮或解壓縮的!(當然,你還是可以使用 compress 及 gzip 來壓縮一個大的檔案!)



一些網路功能

ifconfig

這是用來查詢目前我們這個系統的網路卡的狀況的指令,可以查詢 IP、子遮罩網路及網路卡的硬體資訊等等。例如: 
 

[root@tsai /root]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:50:FC:20:F1:4D 
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
          RX packets:7651977 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:7467862 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:961 txqueuelen:100 
          Interrupt:10 Base address:0x6100

eth1      Link encap:Ethernet  HWaddr 00:80:C8:5A:87:01 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
          RX packets:7492497 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:7617653 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:289 txqueuelen:100 
          Interrupt:9 Base address:0x6200

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0 
          UP LOOPBACK RUNNING  MTU:3924  Metric:1 
          RX packets:512 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:512 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:0

ppp0      Link encap:Point-to-Point Protocol 
          inet addr:211.74.249.38  P-t-P:172.16.11.8  Mask:255.255.255.255 
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1 
          RX packets:7469726 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:7617651 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:10

由於上面的例子是使用兩張網路卡,因此會有 eth0 及 eth1 兩個介面,至於 lo 是系統內設的遞迴網路,這是一定會有的咚咚,而且其 inet addr(IP)一定是 127.0.0.1!另外, ppp0 則是 ADSL 撥接之後所產生的虛擬介面(對外的介面!)。在這個例子中,鳥哥使用了兩張網路卡, eth0 用在內部網路, eth1 用在 ADSL 撥接,所以 eth1 就沒有 address。至於第一張網路卡的網路位址是虛擬的 192.168.1.2。而真正的對外聯繫是 ppp0 這一個撥接介面,其 internet 是 211.74.249.38!

route

這是用來看你的網路通訊包傳送的路由情況的指令。由於通信包是藉由一個一個的路由表來傳遞的,所以觀察你的路由表,對於網路除錯(debuge)就很重要啦! 
 

[root@tsai /root]# route 
Kernel IP routing table 
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface 
192.168.1.2     *               255.255.255.255 UH    0      0        0 eth0 
172.16.11.8     *               255.255.255.255 UH    0      0        0 ppp0 
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0 
127.0.0.0       *               255.0.0.0       U     0      0        0 lo 
default         172.16.11.8     0.0.0.0         UG    0      0        0 ppp0

例如上表中,所有的通訊都是藉由 ppp0 這一個介面卡(Iface)並且其通訊閘(Gateway)為 172.16.11.8 這一個!另外,在虛擬 IP (內部網路)則是藉由 eth0 (192.168.1.2)這一塊網卡來連線的!

另外,你也可以使用 route 來加入你的路由表,假如你要將一個網路為 192.56.76.XXX 且子網路為 255.255.255.0 的位置加入你的 eth0 這個網路卡的連線處理中,就可以使用如下的語法: 
 

[root@tsai /root]# route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0

 

netstat

這也是用來觀察網路狀況的指令。 
 

[root@tsai /root]# netstat 
Active Internet connections (w/o servers) 
Proto Recv-Q Send-Q Local Address           Foreign Address         State 
tcp        0    126 swks249-38.adsl.:telnet 192.168.1.15:1341     ESTABLISHED 
Active UNIX domain sockets (w/o servers) 
Proto RefCnt Flags       Type       State         I-Node Path 
unix  2      [ ]         DGRAM                    87643  /dev/log 
unix  0      [ ]         STREAM     CONNECTED     116    @00000012

在上表黃色的部分,由於鳥哥是在另一部電腦連線進入的,所以網路位址就會不同囉!

hostname

這只是用來觀看你的主機名稱而已。 
 

[root@tsai /root]# hostname 
tsai.adsldns.org

ping

這是用來察看對方網路是否有動作的指令,這個指令亦可以在 windows 上面執行! 
 

[root@tsai /root]# ping www.kimo.com.tw 
PING www.kimo.com.tw (202.1.237.21) from 211.74.249.38 : 56(84) bytes of data. 
64 bytes from 202.1.237.21: icmp_seq=0 ttl=245 time=56.7 ms 
64 bytes from 202.1.237.21: icmp_seq=1 ttl=245 time=58.0 ms 
64 bytes from 202.1.237.21: icmp_seq=2 ttl=245 time=58.7 ms 
64 bytes from 202.1.237.21: icmp_seq=3 ttl=245 time=52.0 ms 
64 bytes from 202.1.237.21: icmp_seq=4 ttl=245 time=72.2 ms 
--- www.kimo.com.tw ping statistics --- 
5 packets transmitted, 5 packets received, 0% packet loss 
round-trip min/avg/max = 52.0/59.5/72.2 ms

例如上表中,我們去觀察 www.kimo.com.tw 是否有啟動,看每一列的最後一行,會告訴你訊息回應的時間大約是 56ms!(10-3sec.)

nslookup

這是用來查詢或反查詢 DNS 的指令!例如我們要知道 奇摩 的網路位址,則可以如此查詢: 
 

[root@tsai /root]# nslookup www.kimo.com.tw 
Server:  ksdns.seed.net.tw 
Address:  139.175.10.20

Non-authoritative answer: 
Name:    www.kimo.com.tw 
Address:  202.1.237.21

系統會告訴你,我們使用的 DNS server 是 ksdns.seed.net.tw,而查詢到的網址是 202.1.237.21。如果需要更詳細的查詢,可以用下面的方式來查! 
 

[root@tsai /root]# nslookup 
Default Server:  ksdns.seed.net.tw 
Address:  139.175.10.20

> set type=any            <==告訴系統我們要詳細的資料! 
> www.kimo.com.tw 
Server:  ksdns.seed.net.tw 
Address:  139.175.10.20

Non-authoritative answer: 
www.kimo.com.tw internet address = 202.1.237.21

Authoritative answers can be found from: 
kimo.com.tw     nameserver = ns1.kimo.com.tw 
kimo.com.tw     nameserver = ns1.yahoo.com 
kimo.com.tw     nameserver = ns3.europe.yahoo.com 
kimo.com.tw     nameserver = ns5.dcx.yahoo.com 
ns1.kimo.com.tw internet address = 210.59.144.1 
ns1.yahoo.com   internet address = 204.71.200.33 
ns3.europe.yahoo.com    internet address = 217.12.4.71 
ns5.dcx.yahoo.com       internet address = 216.32.74.10

talk

這是用來交談的指令。

traceroute

這是用來追查通訊包傳送的情況,例如我們要從 seednet 的網路上查詢到成大的代理伺服器的通訊狀況,可以使用如下的指令: 
 

[root@tsai /root]# /usr/sbin/traceroute proxy.ncku.edu.tw 
traceroute to proxy.ncku.edu.tw (163.28.112.100), 30 hops max, 38 byte packets 
 1  172.16.11.8 (172.16.11.8)  128.378 ms  68.920 ms  118.313 ms 
 2  139.175.15.1 (139.175.15.1)  54.146 ms  38.557 ms  44.320 ms 
 3  R58-37.seed.net.tw (139.175.58.37)  61.339 ms  43.177 ms  39.548 ms 
 4  R56-162.seed.net.tw (139.175.56.162)  66.631 ms  43.182 ms  41.429 ms 
 5  203.72.191.222 (203.72.191.222)  65.538 ms  61.379 ms  38.887 ms 
 6  140.116.241.230 (140.116.241.230)  40.159 ms  46.107 ms  46.854 ms 
 7  proxy.tnrc.edu.tw (163.28.112.100)  38.641 ms  57.286 ms  46.380 ms

系統會告訴你,總共通過了7個路由,並列出了每一個路由的 Internet 位址。這個東西有個好處,可以告訴你,當網路出問題時,問題是在哪一個地方!

mail

這是用來收發信件的指令,詳細的流程我們會在 mail 架站中提及。



其他有的沒的

date

這是用來察看日期的指令。 
 

[root@tsai /root]# date 
Fri Aug  3 19:09:31 CST 2001

cal

這是用來叫出日曆的指令。 
 

[root@tsai /root]# cal 
     August 2001 
Su Mo Tu We Th Fr Sa 
          1  2  3  4 
 5  6  7  8  9 10 11 
12 13 14 15 16 17 18 
19 20 21 22 23 24 25 
26 27 28 29 30 31

grep

這是用來搜尋某些特定字元的指令。例如使用 ps -aux 查詢系統服務時,我們只需要知道 sendmail 是否有動作,則可以使用管線指令『|』來加入 grep 這個指令同時運作。 
 

[root@tsai /root]# ps -aux|grep sendmail 
root       443  0.0  1.0  2092  660 ?        S    Jul26   0:36 sendmail: accepti 
vbird     8387  0.0  0.7  1240  492 pts/1    S    19:11   0:00 grep sendmail

上表則表示 sendmail 有在運作了!



ftp 指令

ftp

FTP 這個功能不用再多談了吧?這是用來捉取網路上免費檔案的一套軟體。例如我們要連上交大的 FTP 站捉東西,可以如下: 
 

[root@tsai /root]#  ftp linux.cis.nctu.edu.tw 
Connected to linux.cis.nctu.edu.tw. 
220 ProFTPD 1.2.0rc3 Server (Linux.CIS FTP server) [linux.cis.nctu.edu.tw] 
Name (linux.cis.nctu.edu.tw:vbird): anonymous <==輸入 anonymous 匿名登入 
331 Anonymous login ok, send your complete email address as your password. 
Password:         <==輸入 name@server.xxx.xxx 型態的 mail-address 密碼 
230 Anonymous access granted, restrictions apply. 
Remote system type is UNIX. 
Using binary mode to transfer files. 
ftp> dir   <==檢查網站上的目錄 
200 PORT command successful. 
150 Opening ASCII mode data connection for file list. 
-rw-rw-rw-   1 linux    adm      39491400 Aug  3 21:00 00ls-lR 
-rw-rw-rw-   1 linux    adm       3091546 Aug  3 21:01 00ls-lR.gz 
-rw-r--r--   1 linux    wheel         232 Mar 15 22:00 00mirror.today 
drwxr-xr-x   5 linux    wheel        4096 Oct 29  2000 java 
drwxr-xr-x  14 linux    wheel        4096 Aug  2 19:31 kernel 
drwxr-xr-x   4 linux    wheel        4096 Sep 28  2000 mirrors 
226-Transfer complete. 
226 Quotas off 
ftp> cd kernel/v2.4 <==進入 kernel 底下的 v2.4 目錄 
250 CWD command successful. 
ftp> get linux-2.4.0.tar.bz2.sign <==捉下 linux-2.4.0.tar.bz.2.sign 這個檔 
local: linux-2.4.0.tar.bz2.sign remote: linux-2.4.0.tar.bz2.sign 
200 PORT command successful. 
150 Opening BINARY mode data connection for linux-2.4.0.tar.bz2.sign (248 bytes) 
. 
226 Transfer complete. 
248 bytes received in 0.014 secs (17 Kbytes/sec)

ncftp

在使用 FTP 功能的時候,因為只能一次捉一個檔案,所以要捉一群檔案的時候就會有困擾。這時我們可以使用更容易登入匿名 FTP 站的 ncftp 來執行 FTP 功能! 
 

[root@tsai /root]# ncftp linux.cis.nctu.edu.tw 
ncftp / > mget  -R  kernel  <==將 kernel 這個目錄的東西全捉下來!

加上了 mget -R 目錄 這個指令後,就可以將目錄下的東西完全捉下來!好用吧!

gftp

這是在 X-Windows 使用的圖形介面 FTP 咚咚!這個咚咚的使用方法就跟 CutFTP 很相似!



相關程式設定指令

set

這是用來設定或是觀看目前系統的設定的指令,若只打入 set 則僅會列出目前系統的參數。

uname

這是用來觀看系統名稱的指令,可以打入 -a 參數來列出所有資訊。 
 

[root@tsai /root]# uname -a 
Linux vbird.adsldns.org 2.2.12-20 #1 Mon Sep 27 10:25:54 EDT 1999 i586 unknown

setup

這個是常常使用來設定系統的一個指令,執行之後會有一個視窗出現,較常使用的是 System services 這一項,可用來設定開機的時候要開放的服務!

lilo

這是用來設定多重開機,或是開機選項的指令,詳細的流程請到這裡來看看!

Xconfigurator

這是用來簡易的設定 X-Windows 的指令,當你的 X-Windows 確定是可以跑的,而你想要改變一些設定,例如:解析度、色彩度等等,就直接使用這個指令啦!

xf86config

這是用來設定 X-Windows 的指令!這個指令會比 Xconfigurator 麻煩,不過當你的 X-Windows 沒有辦法跑的時候,這個咚咚是很好用的!



X-Window內的設定指令

startx

這是開始執行 X-Windows 的指令!

netconf

這是網路設定的指令!

netcfg

這也是網路設定的指令!

XF86Setup

這是在 X-Windows 下以圖形介面設定 解析度、色彩度 的設定指令。



本章問題討論:

  1. Q:在 Linux 上面都是一些線上的英文說明,有沒有中文說明,或更詳細的說明資料呢?

  2. A: 
    其實在網路上已經有一票高手在進行 Linux how to 的翻譯工作,這是一個很有意義的事情,因為可以讓新手或者是一些有需要使用 Linux 的人,有一個很好的學習文件。你可以來下面的網址看看: 
    中文How-to:http://www.linux.org.tw/CLDP/ 
    英文How-to:http://www.ibiblio.org/mdw/HOWTO/HOWTO-INDEX/howtos.html 
     

  3. Q:在 Linux 中如何加入新硬碟?

  4. A: 
    其實加入新硬碟的方法也是很簡單的:

  5. /dev/hda1               /                       ext2    defaults        1 1 
    /dev/hda5               swap                    swap    defaults        0 0 
    /dev/hdc1               /mnt/hdc1               ext2    defaults        1 1
    • 安裝硬碟:關掉 Linux 主機電源,調整 Hard Disk 的 Jump (master 或 slave),串接在 IDE 的介面,請注意,留意你增加的硬碟所串接的 IDE 介面為哪一個插槽,例如你插在 IDE2 的 Master ,則你的硬碟應為 hdc;
    • 新增硬體於BIOS:開啟電腦後,按 del 鍵進入 BIOS,選擇 IDE Hard Disk Detector 字樣的選項,讓BIOS去捉硬碟,然後再選擇 Save and Exit;
    • Linux 安裝:開機進入 Linux 的時候,系統會告訴你有捉到一個新的硬體,你可以按 『configure』 由系統直接安裝即可;
    • 格式化硬碟:以 root 的身份進入 Linux 後,執行以下兩個程式:
      • fdisk  /dev/hdc  <== hdc 與你的硬碟串接的IDE介面有關,關於這個指令的介紹請參考上面的指令說明;
      • mke2fs  -c  /dev/hdc1  <==假設硬碟全部配置成一個大硬碟,則硬碟應為 hdc1 ,以 mke2fs 將系統規劃為 Linux 的系統檔。
    • 開機自動載入:再來則是以 vi 修改 /etc/fstab 檔案,讓每次開機把這個硬碟直接掛入系統中。例如 hdc1 這顆硬碟掛在 /mnt/hdc1 中,則 fstab 的檔案有點像這樣:(/dev/hdc1 那一行是新加入的!)

    •  

    • 安裝完成:然後再重新開機就可以啦!
  6. Q:在 Linux 中如何增加新使用者呢?

  7. A: 
    無論是加入新使用者或者是加入新群組,都可以使用 /bin/userconf 這個程式來完成,使用這個程式,只要輸入 ID 及 pass word 就可以啦!(不過你必須是 root 的身份才可以執行!)詳細的執行請看上面的指令說明。 
     

  8. Q:在 Linux 中如何製作開機片?

  9. A: 
    無論何種系統,有個開機片總是比較安心的! Linux 也是一樣!雖然他很穩定,但是並不是說就不會有問題,因此製作可開機磁片以利解救 Linux 問題是一個好習慣!製作開機片的方法很簡單,只要下達:

  10. 就可以啦! 

Read more >>

關於EC ONE ECONE-top-right.png