到這個階段﹐遊戲就比較複雜了。學完這些東西﹐您就可以說﹐我懂一些 Linux 的東西 ;-)
檔案和目錄都有允許權(Permission) (即 VMS 上的 `protections') 和所有權(ownership), 這個觀念不難理解﹐因為 VMS 上也有。如果您不能執行一隻程式﹐或是您不能修改某一檔案﹐ 或是不能進入某目錄﹐這是因為您沒有被賦予使用這些資源的權力的關係(沒有允許權)﹐ 或者是這個檔案的根本就不屬於您的(沒有所有權)﹐ 讓我們看看下面的例子吧:
$ ls -l /bin/ls
-rwxr-xr-x 1 root bin 27281 Aug 15 1995 /bin/ls*
第一個欄位顯示出這個檔案的使用權限 ls
(擁有者(owner) 是 root,
群組(group) 是 bin). 擁有權可以分成三種模式: 擁有者(owner), 群組(group), 和 其他使用者(others)。
(和 VMS 的 owner, group, world 相似);有三種不同的允許權(permissions):
讀(read), 寫(write) (包含移除(delete)), 和執行(execute).
從左到右﹐-
是檔案模式 (-
= 一般檔案(ordinary file), d
= 目錄(directory), l
= 連結(link), 等); rwx
是允許檔案擁有者可以對該檔案作讀﹐寫﹐和執行的動作;
r-x
是允許群組使用者可以對該檔案作讀和執行的動作﹐但是不可以作寫的動作。;
r-x
是限制其他的使用者對該檔案只有讀和執行的權限﹐卻沒有寫的權限。
如何改變檔案的使用權限:
$ chmod <whoXperm> <file>
其中 who 是 u
(user(使用者), 即檔案的擁有者), g
(群組 group), o
(其他 other),
X 表示可以為 +
或 -
, perm 可以為 r
(讀 read), w
(寫 write), 或是
x
(可執行 execute).
舉例說明:
$ chmod u+x file
這是針對該檔案﹐開放可執行的權限給該檔案的擁有者。可縮寫成:
chmod +x file
.
$ chmod go-wx file
這是對該檔案﹐移除群組使用者和其他使用者對該檔案的“寫”的權限和“執行”的權限。
$ chmod ugo+rwx file
這是開放該檔案的讀﹐寫﹐和執行的權限給所有的使用者。
另一個快速表示法為使用一組數字:rwxr-xr-x
可以用 755 來表示 (每一位數字對應一個控制位元: ---
表是 0,
--x
表示 1, -w-
表示 2...).
所以﹐rwx = 4+2+1 = 7﹐r-x = 4+0+1 = 5﹐所以﹐rwxr-xr-x
可以用 755 來表示。
對目錄而言﹐rx
表示您可以切換到該目錄: cd
, 而
w
表示您可以刪除該目錄的檔案(當然需要視該檔案的使用權限而定), 或是目錄本身.
這些還只是冰山的一角而已﹐想要知道更多---RMP.
如何改變檔案的擁有權:
$ chown username file
我整理成下表:
VMS Linux Notes
------------------------------------------------------------------------------
SET PROT=(O:RW) file.txt $ chmod u+rw file.txt
$ chmod 600 file.txt
SET PROT=(O:RWED,W) file $ chmod u+rwx file
$ chmod 700 file
SET PROT=(O:RWED,W:RE) file $ chmod 755 file
SET PROT=(O:RW,G:RW,W) file $ chmod 660 file
SET FILE/OWNER_UIC=JOE file $ chown joe file
SET DIR/OWNER_UIC=JOE [.dir] $ chown joe dir/
欲執行很多程式﹐在 Linux 上沒有所謂的 `batch queues' ; 多工其實以非常不一樣的手法處理。 以下是一般常見的命令列:
$ command -s1 -s2 ... -sn par1 par2 ... parn < input > output &
其中 -s1
, ..., -sn
是該程式的參數(switch),
par1
, ..., parn
是程式的輸入變數(parameters).
現在讓我們來看看在 Linux 上如何多工。程序(processes)是一隻不論在前景或是背景被執行的程式。
$ progname [-switches] [parameters] [< input] [> output] &
[1] 234
shell 會提示您該程序(process)的工作號碼(`job number') (第一個數字; 請看下文)
和該程序的程序識別碼 PID (Process IDentifier). 每一個程序都有一組獨一無二的 PID.
$ ps -ax
這會輸出一大串正在執行的程序(processes)。
$ kill <PID>
如果您不知道要如何正確的終止某一個程序﹐這時您可能就要手動把程序給殺死喔!... ;-).
有些時候﹐一個程序只能被下列一個指令殺死:
$ kill -15 <PID>
$ kill -9 <PID>
附帶一提﹐Sell 允許您停止或是暫時停止一個程序﹐將程序送到背景工作﹐或是將程序從背景帶到前景。 在這裡﹐程序(processes)我們稱之為工作(`jobs').
$ jobs
工作(jobs)是由 Shell 給的工作號碼(job number)來作區別﹐注意﹐不是 PID 喔.
$ CTRL-C
(不一定每一次奏效)
$ CTRL-Z
(同上)
$ bg <job>
$ fg <job>
$ kill <%job>
更多有關檔案的訊息。
stdin
:通常為鍵盤)﹐
輸出結果到所謂標準輸出的檔案(stdout
:通成為螢幕)﹐而錯誤輸出也是輸出到一個檔案﹐
我們稱之為 stderr
(通常也是螢幕).
使用 <
和 >
﹐您可以將輸出和輸入重新導向到另外一個檔案。
然而﹐ >>
是將結果附加到檔案的檔尾﹐而不是覆蓋原來的檔案。;
2>
重導錯誤訊息(stderr); 2>&1
重導錯誤訊息到標準輸出, 而 1>&2 則是重導標準輸出到錯誤輸出。
有一個黑洞(`black hole')叫做 /dev/null
: 所有導到這個檔案的東西﹐
都將消失的無影無蹤。
*
' 有相同的功能。用法: * 符合所有檔案﹐除了隱藏檔以外。
.* 符合所有隱藏檔; *.* 符合只有一個點 '.' 在中間的檔案。跟隨著其他字元:
p*r 表示 `peter' 或是 `piper' 都有可能; *c* 可能符合 `picked' 或是 `peck'。
'%
' 換成 '?
'。 還有另外一種萬用字元:[]
. 用法: [abc]*
表示檔案必須以字元 a, b, c 最為開頭;
*[I-N,1,2,3]
表示檔案名稱由 I, J, K, L, M, N, 1, 2, 3 作為結尾。
mv
(重新命名
) 不可以一次多個檔案。即 mv *.xxx *.yyy
將不會執行成功;
cp -i
和 mv -i
可以提醒您是否要覆蓋以存在的檔案。
就像 VMS ﹐列印工作會先被放到佇列當中(queues)﹐當您下列印指令的時候﹐您或許會指定列表機的名稱。 例如:
$ lpr file.txt # 這將指用到預設的列表機
$ lpr -Plaser file.ps # 這將使用名為 'laser' 的列表機
處理列印佇列(print queues), 您可能需要下列指令:
VMS Linux
------------------------------------------------------------------------------
$ PRINT file.ps $ lpr file.ps
$ PRINT/QUEUE=laser file.ps $ lpr -Plaser file.ps
$ SHOW QUEUE $ lpq
$ SHOW QUEUE/QUEUE=laser $ lpq -Plaser
$ STOP/QUEUE $ lprm <item>