《UNIX教程》讀書筆記 一

2021-04-19 18:56:43 字數 4312 閱讀 8494

《unix教程》讀書筆記

part i    unix shell

1 檔案型別

2 該變許可權位

chmod命令的一般格式為:

chmod [who] operator [permission] filename

w h o的含義是:

u 檔案屬主許可權。

g 同組使用者許可權。

o 其他使用者許可權。

a 所有使用者(檔案屬主、同組使用者及其他使用者)。

o p e r a t o r的含義:

+ 增加許可權。

- 取消許可權。

= 設定許可權。

p e r m i s s i o n的含義:

r 讀許可權。

w 寫許可權。

x 執行許可權。

s 檔案屬主和組s e t - i d。

t 粘性位*。

l 給檔案加鎖,使其他使用者無法訪問。

u,g,o 針對檔案屬主、同組使用者及其他使用者的操作。

chmod命令絕對模式的一般形式為:

chmod [mode] file

其中m o d e是乙個八進位制數。

3 目錄

目錄的讀許可權位意味著可以列出其中的內容。寫許可權位意味著可以在該目錄中建立檔案,如果不希望其他使用者在你的目錄中建立檔案,可以取消相應的寫許可權位。執行許可權位則意味著搜尋和訪問該目錄。

如果把同組使用者或其他使用者針對某一目錄的許可權設定為- - x,那麼他們將無法列出該目錄中的檔案。如果該目錄中有乙個執行位置位的指令碼或程式,只要使用者知道它的路徑和檔名,仍然可以執行它。使用者不能夠進入該目錄並不妨礙他的執行。

目錄的許可權將會覆蓋該目錄中檔案的許可權。

4 suid/guid

suid 意味著如果某個使用者對屬於自己的shell指令碼設定了這種許可權,那麼其他使用者在執行這一指令碼時也會具有其屬主的相應許可權。於是,如果根使用者的某乙個指令碼設 置了這樣的許可權,那麼其他普通使用者在執行它的期間也同樣具有根使用者的許可權。同樣的原則也適用於guid,執行相應指令碼的使用者將具有該檔案所屬使用者組中使用者 的許可權。

有相當一些u n i x命令也設定了s u i d和g u i d。如果想找出這些命令,可以進入/ b i n或/ s b i n目

錄,執行下面的命令:

$ ls -l | grep '^...s'

上面的命令是用來查詢s u i d檔案的;

$ ls -l | grep '^...s..s'

上面的命令是用來查詢s u i d和g u i d的。

如果希望設定s u i d,那麼就將相應的許可權位之前的那一位設定為4;如果希望設定g u i d,那麼就將相應的許可權

位之前的那一位設定為2;如果希望兩者都置位,那麼將相應的許可權位之前的那一位設定為4+2。

一旦設定了這一位,乙個s將出現在x的位置上。記住:在設定s u i d或g u i d的同時,相應的

執行許可權位必須要被設定。例如,如果希望設定g u i d,那麼必須要讓該使用者組具有執行許可權。

如果想要對檔案l o g i n設定s u i d,它當前所具有的許可權為rwx rw- r-- (741),需要在使用

c h m o d命令時在該許可權數字的前面加上乙個4,即chmod 4741,這將使該檔案的許可權變為rws

rw- r - -。

$ chmod 4741 logit

還可以使用符號方式來設定s u i d / g u i d。如果某個檔案具有這樣的許可權: rwx r-x r- x,那麼

可以這樣設定其s u i d:

chmod u+s

於是該檔案的許可權將變為: rws r-x r-x

在查詢設定了s u i d的檔案時,沒準會看到具有這樣許可權的檔案:rws r-x r- x,其中s為大寫。

它表示相應的執行許可權位並未被設定,這是一種沒有什麼用處的s u i d設定,可以忽略它的存在。

在改變乙個檔案的所有權時,相應的suid也將被清除,這是出於安全性的考慮。

5 chown和chgrp

chown命令的一般形式為:

chmod -r -h owner file

-r選項意味著對所有子目錄下的檔案也都進行同樣的操作。- h選項意味著在改變符號鏈結檔案的屬主時不影響該鏈結所指向的目標檔案。

c h g r p命令和c h o w n命令的格式差不多.

如果你希望知道自己屬於哪些使用者組,可以用group或id命令。如果要檢視其他使用者所屬於的組,可以用命令group ***,***是某個使用者名稱。

6 umask

umask命令確定了你建立檔案的預設模式.一般來說,u m a s k命令是在/ e t c / p r o f i l e檔案中設定的,每個使用者在登入時都會引用這個文

件,所以如果希望改變所有使用者的u m a s k,可以在該檔案中加入相應的條目。如果希望永久性

地設定自己的u m a s k值,那麼就把它放在自己$ h o m e目錄下的. p r o f i l e或. b a s h _ p r o f i l e檔案中。

表1-8 umask值與許可權

umask     檔案    目錄

0             6         7

1             6         6

2             4         5

3             4         4

4             2         3

5             2         2

6             0         1

7             0         0

7 符號鏈結(軟連線)

該命令的一般形式為:

ln [-s] source_path target_path

其中的路徑可以是目錄也可以是檔案。

8 find命令

find命令的一般形式為:

find pathname -options [-print -exec -ok]

讓我們來看看該命令的引數:

pathname find命令所查詢的目錄路徑。例如用.來表示當前目錄,用/來表示系統根目錄。

-print find命令將匹配的檔案輸出到標準輸出。

-exec find命令對匹配的檔案執行該引數所給出的s h e l l命令。相應命令的形式為' command' {} /;,注意和/;之間的空格。

-ok 和- exec的作用相同,只不過以一種更為安全的模式來執行該引數所給出的shell命令,

在執行每乙個命令之前,都會給出提示,讓使用者來確定是否執行。

find命令有很多選項或表示式,每乙個選項前面跟隨乙個橫槓-。

-name 按照檔名查詢檔案。

-perm 按照檔案許可權來查詢檔案。在使用這一選項的時候,最好使用八進位制的許可權表示法。$ find . -perm 755 -print

-prune 使用這一選項可以使f i n d命令不在當前指定的目錄中查詢,如果同時使用了-depth選項,那麼-prune選項將被find命令忽略。

-user 按照檔案屬主來查詢檔案。

-group 按照檔案所屬的組來查詢檔案。

-mtime -n +n 按照檔案的更改時間來查詢檔案, - n表示檔案更改時間距現在n天以內,+ n表示檔案更改時間距現在n天以前。find命令還有-atime和-ctime選項,但它們都和-mtime選項相似,所以我們在這裡只介紹 -mtime選項。

-nogroup 查詢無有效所屬組的檔案,即該檔案所屬的組在/etc/groups中不存在。

-nouser 查詢無有效屬主的檔案,即該檔案的屬主在/etc/passwd中不存在。

-newer file1 ! file2 查詢更改時間比檔案f i l e 1新但比檔案f i l e 2舊的檔案。

-type 查詢某一型別的檔案,諸如:

b - 塊裝置檔案。

d - 目錄。

c - 字元裝置檔案。

p - 管道檔案。

l - 符號鏈結檔案。

f - 普通檔案。

-size n[c] 查詢檔案長度為n塊的檔案,帶有c時表示檔案長度以位元組計。

-depth 在查詢檔案時,首先查詢當前目錄中的檔案,然後再在其子目錄中查詢。

-fstype 查詢位於某一型別檔案系統中的檔案,這些檔案系統型別通常可以在配置檔案/etc/fstab中找到,該配置檔案中包含了本系統中有關檔案系統的資訊。

-mount 在查詢檔案時不跨越檔案系統m o u n t點。

-follow 如果f i n d命令遇到符號鏈結檔案,就跟蹤至鏈結所指向的檔案。

-cpio 對匹配的檔案使用c p i o命令,將這些檔案備份到磁帶裝置中。

UNIX讀書筆記 UNIX基礎知識

目錄 unix體系結構 登入 shell 檔案和目錄 1 檔案系統 2 檔名 3 路徑名 4 工作目錄 輸入輸出 1 檔案描述符 file descriptor 2 標準輸入 標準輸出和標準錯誤 3 不帶緩衝的io 4 標準i o 程式和程序 1 程式 2 程序和程序id 3 程序控制 4 執行緒和...

Unix環境高階程式設計 讀書筆記一

unix 基礎知識 這一章主要是unix系統的概論以及一些概念的介紹,主要分為10個小節 1 登陸 2 檔案和目錄 3 輸入和輸出 4 程式和程序 5 ansi c 6 出錯處理 7 使用者標識 8 訊號 9 unix時間值 10 系統呼叫和庫函式 這個都比較簡單,就不再重複敘述了。在標頭檔案中定義...

Unix網路程式設計讀書筆記(二)

套接字位址結構 typedef uint32 t in addr t struct in addr struct sockaddr in 在使用結構前總是把整個結構置零,是由於sin zero欄位沒有任何作用,只需置零即可。為了是套接字函式在處理位址時具有一定的通用性,套接字函式還定義了通用套接字位...