天天看點

鳥哥的私房菜-基礎篇學習-檔案與目錄管理-2-1

檔案與目錄的預設權限與隐藏權限

umask指令:

umask :顯示檔案預設權限;

umask -S :以字元形式顯示檔案的預設權限;

umask 0000 :修改建立檔案的權限為777

經測試,在普通使用者下umask值為0002,在root使用者下umask值為0022;

将umask值該為0000之後為什麼建立的檔案屬性還為666呢???(在普通使用者和root使用者下都是這樣的!)

<a href="http://blog.51cto.com/attachment/201212/212624196.png" target="_blank"></a>

檔案的隐藏屬性:

chattr 指令(常用的參數為-a -i):

chattr +i ss :為檔案增加隐藏屬性i ;

chattr -i ss :為檔案去掉隐藏屬性i ;

a :當配置a 之後,這個檔案将隻能添加資料,而不能删除也不能修改資料,隻有root

才能配置這個屬性。

c :這個屬性配置之後,将會自動的将此檔案『壓縮』,在讀取的時候将會自動解壓縮,

但是在儲存的時候,将會先進行壓縮後再儲存(看來對於大檔案似乎蠻有用的!)

d :當dump 程式被運作的時候,配置d 屬性将可使該檔案(或目錄)不會被dump 備份

i :這個i 可就很厲害了!他可以讓一個檔案『不能被删除、改名、配置連結也無法

寫入或新增資料!』對於系統安全性有相當大的助益!隻有root 能配置此屬性

s :當檔案配置了s 屬性時,如果這個檔案被删除,他将會被完全的移除出這個硬碟

空間,是以如果誤删了,完全無法救回來了喔!(這個比較強大)

u :與s 相反的,當使用u 來配置檔案時,如果該檔案被删除了,則資料内容其實還

存在磁碟中,可以使用來救援該檔案喔!

注意:屬性配置常見的是a 與i 的配置值,而且很多配置值必須要身為root 才能配置

lsattr :是擦看檔案隐藏屬性的指令

lsattr ss :檢視檔案ss的隐藏屬性

<a href="http://blog.51cto.com/attachment/201212/212703932.png" target="_blank"></a>

檔案的特殊權限(SUID,SGID,SBIT):

Set UID(SUID:擁有者的特殊權限)

當s 這個标志出現在檔案擁有者的x 權限上時,例如剛剛提到的/usr/bin/passwd 這個檔案的權限狀态:『-rwsr-xr-x』,此時就被稱為Set UID,簡稱為SUID 的特殊權限。 那麼SUID的權限對於一個檔案的特殊功能是什麼呢?基本上SUID有這樣的限制與功能:

SUID 權限僅對二進位程式(binary program)有效;

運作者對於該程式需要具有x 的可運作權限;

本權限僅在運作該程式的過程中有效(run-time);

運作者将具有該程式擁有者(owner) 的權限。

當init指令有擁有者特殊權限的時候,普通使用者即可使用init指令來關機,重新開機!

修改init指令擁有特殊權限,chmod u+s /sbin/init

然後切換到zhangsp使用者下,即可使用init指令。

<a href="http://blog.51cto.com/attachment/201212/212731180.png" target="_blank"></a>

SGID的用法:

當一個目錄擁有SGID權限時,user1和user2在該檔案夾下建立的檔案所述群組為user1和user2公共的群組user;

否則,隻能通過chgrp user 222或者111來修改檔案所屬的群組(在沒有SGID下也可以)

<a href="http://blog.51cto.com/attachment/201212/212757917.png" target="_blank"></a>

關于查找指令:which 、file、 find 、whereis 、locate;

<b>再來談一談怎麼搜尋檔案吧!在Linux </b><b>底下也有相當優異的搜尋指令呦!通常find </b><b>不很常用的!因為速度慢之外, </b><b>也很操硬碟!通常我們都是先使用whereis </b><b>或者是locate </b><b>來檢查,如果真的找不到了,才以find </b><b>來搜尋呦!</b><b>為什麼呢?因為whereis </b><b>與locate </b><b>是利用資料庫來搜尋資料,是以相當的快速,而且并沒有實際的搜尋硬碟, </b><b>比較省時間啦!</b>

<b></b>

which :(專門來查詢指令所在位置的,不是很常用到)

which [-a] command

選項或參數:

-a :将所有由PATH 目錄中可以找到的指令均列出,而不止第一個被找到的指令名稱

範例一:分别用root與一般帳号搜尋ifconfig 這個指令的完整檔名

which ifconfig

/sbin/ifconfig  &lt;==用root 可以找到正确的運作檔名!

su - zhangsp &lt;==切換身份成為vbird 去!

/usr/bin/which: no ifconfig in

(/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin

:/home/vbird/bin)  &lt;==見鬼了!竟然一般身份帳号找不到!

# 因為which 是根據使用者所配置的PATH 變量内的目錄去搜尋可運作檔的!是以,

# 不同的PATH 配置内容所找到的指令當然不一樣啦!因為/sbin 不在zhangsp 的

# PATH 中,找不到也是理所當然的啊!了乎?

exit  &lt;==記得将身份切換回原本的root

範例二:用which 去找出which 的檔名為何?

[root@www ~]# which which

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot

'

/usr/bin/which

# 竟然會有兩個which ,其中一個是alias 這玩意兒呢!那是啥?

# 那就是所謂的『指令别名』,意思是輸入which 會等於後面接的那串指令啦!

# 更多的資料我們會在bash 章節中再來談的!

範例三:請找出cd 這個指令的完整檔名

[root@www ~]# which cd

/usr/bin/which: no cd in

(/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin

:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)

# 瞎密?怎麼可能沒有cd ,我明明就能夠用root 運作cd 的啊!

這個指令是根據『PATH』這個環境變量所規範的路徑,去搜尋『運作檔』的檔名~

whereis(一般用來搜指令):

選項和參數:

-b : 隻找binary格式的檔案

-m : 隻找在說明檔manual路徑下的檔案

-s :隻找sourse來源檔案

-u :搜尋不在上述三個項目當中的其他特殊檔案

locate (搜尋檔案比較快,在資料庫中搜尋檔案,不直接從磁盤中搜尋,不過必須寫完整的名字):

locate -i : 參數i來表示,忽略大小寫;

locate -r : 參數r後面可接正規表示法的顯示方式

<a href="http://blog.51cto.com/attachment/201212/212817221.png" target="_blank"></a>

find (最強大的搜尋指令,可以使用通配符,在磁盤搜尋,速度比較慢)

選項與參數:

與時間有關的選項:共有-atime, -ctime 與-mtime ,以-mtime 說明

-mtime n :n 為數字,意義為在n 天之前的『一天之内』被更動過内容的檔案;

-mtime +n :列出在n 天之前(不含n 天本身)被更動過内容的檔案檔名;

-mtime -n :列出在n 天之内(含n 天本身)被更動過内容的檔案檔名。

-newer file :file 為一個存在的檔案,列出比file 還要新的檔案檔名

[root@www ~]# find / -mtime 0

# 那個0 是重點!0 代表目前的時間,是以,從現在開始到24 小時前,

# 有變動過内容的檔案都會被列出來!那如果是三天前的24 小時内?

# find / -mtime 3 有變動過的檔案都被列出的意思!

範例二:尋找/etc 底下的檔案,如果檔案日期比/etc/passwd 新就列出

[root@www ~]# find /etc -newer /etc/passwd

# -newer 用在分辨兩個檔案之間的新舊關系是很有用的!

find的-size屬性:

find /etc -size +1500k -o -size 0 : 搜尋etc目錄下檔案大小大于1500k的檔案或者大小為0的檔案;

相對於-a(并且),那個-o 就是或(or) 的意思羅!

find /etc -size +50k -a -size -60k -exec ls -l {} \; :搜尋etc目錄下文檔大小在50k到60k之間的檔案;(注:-a表示并且,-exec 表示連接配接下一個指令的開始,ls -l為下一個指令,{}表示find之後搜尋到的内容,\表示結束連接配接指令;)

find /etc -size +50k -a ! -user root -type f -exec ls -l {} \;   :搜尋etc下大于50k且不屬于root使用者的文檔(注:這裡的;号不能少,而且ls -l不能寫成ll)

<a href="http://blog.51cto.com/attachment/201212/212842458.png" target="_blank"></a>

find /home -user zhangsp :列出為home目錄下為使用者zhangsp的檔案

find /var -name iou* :搜尋var目錄下以iou開頭的檔案。

find /var -type s : 搜尋var目錄下檔案類型為socket的檔名

find /var -type p :搜尋var目錄下檔案類型為FIFO的檔名

<a href="http://blog.51cto.com/attachment/201212/212855737.png" target="_blank"></a>

find /sbin -perm +7000 :搜尋etc目錄下權限為---s--s--t 的檔案(隻要含有s或t的就列出)

<a href="http://blog.51cto.com/attachment/201212/212927846.png" target="_blank"></a>

find /home/zhangsp -size +300k /M/G/c: 搜尋/home/zhangsp目錄下大于300k(大小或者M,或者為G或者為c)的檔案

<a href="http://blog.51cto.com/attachment/201212/212949557.png" target="_blank"></a>

本文轉自 murongqingqqq  51CTO部落格,原文連結:http://blog.51cto.com/murongqingqqq/1089661