0319文件和目錄管理(二)

2.17 隱藏權限lsattr/chattrphp

2.18 特殊權限set_uidhtml

2.19 特殊權限set_gidnode

2.20 特殊權限stick_bitlinux

2.21 軟連接文件web

2.22 硬鏈接文件shell

2.23/2.24/2.25 find命令數據庫

2.26 文件名後綴windows

2.27linux和windows互傳文件瀏覽器

 

rename 文件的時候爲何 ctime 會改變?緩存

https://blog.steamedfish.org/blog/post/steamedfish/why-ctime-will-change-when-rename-a-file

inode詳解: http://www.ruanyifeng.com/blog/2011/12/inode.html

 

1、隱藏權限lsattr 與 chattr

chattr 設置隱藏權限 

查看用法:  man chattr

參數或選項描述:

-R:遞歸處理,將指定目錄下的全部文件及子目錄一併處理。
-V:顯示詳細過程有版本編號。
-v:設定文件或目錄版本(version)o
+:在原有參數設定基礎上,追加參數。
-:在原有參數設定基礎上,移除參數。
=:更新爲指定參數設定。
A:文件或目錄的atime (access time)不可被修改(modified),能夠有效預防例如手提電腦磁盤I/O錯誤的發生。
S:硬盤I/O同步選項,功能相似sync
a:即append,設定該參數後,只能向文件中添加數據,而不能刪除,多用於服務器日誌文件安全,只有root才能設定這個屬性。
c:即compresse,設定文件是否經壓縮後再存儲。讀取時須要通過自動解壓操做。
d:即no dump,設定文件不能成爲dump程序的備份目標。
i:設定文件不能被刪除、更名、設定連接關係,同時不能寫入或新增內容。i參數對於文件
j:即journal,設定此參數使得當經過mount參數:data=ordered或者data=writeback掛載的文件系統,文件在寫入時會先被記錄(在journal中)。若是filesystem被設定參數爲data=journal,則該參數自動失效。
s:保密性地刪除文件或目錄,即硬盤空間被所有收回。
u:與s相反,當設定爲u時,數據內容其實還存在磁盤中,能夠用於undeletion.
各參數選項中經常使用到的是a和i。a選項強制只可添加不可刪除,多用於日誌系統的安全設定。而i是更爲嚴格的安全設定,只有 superuser (root)或具備CAP_LINUX_IMMUTABLE處理能力(標識)的進程可以施加該選項。

 

+i 的使用狀況:不容許任何人對文件進行操做

chattr +i 1.txt 給文本1.txt加附加權限

chattr -i 1.txt 給文本1.txt去掉附加權限

 

能夠經過lsattr 1.txt查看隱藏權限

此時沒法對文件進行編輯

 

head -n 2 /etc/passwd > 1.txt 當把passwd前兩行給1.txt寫入時,也沒法寫入

 

mv 1.txt 2.txt 更名時,也沒法操做

 

rm 1.txt 刪除時,也不容許

 

在vi時,會自動建立一個緩存文件1.txt~,在保存退出後,會把寫入的內容覆蓋原來的文件,此文件刪除,若是加了隱藏權限,會致使原文件沒法保存,就會保存一個緩存文件

 

touch 1.txt 在touch時,也沒法操做,touch會更改文件的建立時間

 

chattr +a 1.txt a權限只能在文件末尾追加內容還有touch,不能刪除、更改、移動

head -n 2 /etc/passwd >> 1.txt 追加內容

 

查看123目錄的隱藏權限

lsattr 123/ 查看的是123目錄下面的子目錄和子文件

lsattr -d 123 經過-d 查看目錄自己

lsattr命令的用法:

參數或選項說明:
-R:遞歸列示目錄及文件屬性。
-V:顯示程序版本號。
-a:顯示全部文件屬性,包括隱藏文件(.)、當時目錄(./)及上層目錄(../)。
-d:僅列示目錄屬性。
-l:(此參數目前沒有任何做用)。
-v:顯示文件或目錄版本。

lsattr能夠查看目錄下面的子目錄和文件,不能查看目錄自己

chattr +i 123/ 給目錄 加 i 權限,加上以後和給文件加 i 權限是同樣的效果

 

chattr +a 123/ 給目錄 a 權限,只能追加

chattr +i 123/ 給目錄 i 權限 ,不能再該目錄下新建文件,可是能夠給目錄下已經存在的文件寫入內容

touch 123/2.txt 在123目錄下建立子文件也至關於追加

head -n 2 /etc/passwd >> 123/2.txt 能夠把passwd的前兩行直接寫入到2.txt

 

lsattr -R 123 查看123目錄下的子目錄和子目錄下面的文件

不在-R只顯示一層目錄

 

lsattr -a /root/ -a 能夠查看目錄下的隱藏文件和目錄

 

2、特殊權限set_uid

set_uid -> s 小s 目錄也能夠設置,可是沒有意義

只有此處有set_uid權限

建立set_uid權限,是爲了讓通常用戶在執行某些程序的時候,可以暫時具備該程序擁有者的權限。例如,帳號和密碼的存放文件實際上是/etc/passwd與/etc/shadow,它們的擁有者是root。在這個權限中,僅有root能夠強制寫入。一個普通用戶 webgod去更新本身的密碼時,使用的就是/usr/bin/passwd程序,卻能夠更新成功,而/usr/bin/passwd的擁有者是 root。
那麼,就是說webgod這個普通用戶能夠訪問/etc/shadow密碼文件這既是由於有s權限的幫助。當s權限在user的x時(注意下圖的/usr/bin/passwd的相關屬性),此處是-rwsr-xr-x,稱爲Set UID,簡稱SUID,這個UID表示User的ID,而User 表示這個程序(/usr/bin/passwd)的擁有者(root)。因此,當webgod用戶執行/sur/bin/passwd時,他就暫時獲取文件擁有者root的權限。
SUID僅可用在二進制文件(binary file),並且對目錄無效。舉個栗子:#passwd root修改root用戶密碼,passwd的權 限是:

這時候第一權限位是rws,而不是咱們常見的rwx,這裏的s=set_uid。
set_uid權限意味着,除了這個文件的全部者以外,其餘所屬組、其餘用戶在執行此命令那一瞬間,擁有全部者的權限。例如更改密碼,普通用戶應該是不可以更改密碼的,可是passwd命令擁有s權限,全部者是root。那麼普通用戶在執行 passwd命令修改密碼時,那一瞬間他將擁有root的權限。要賦予文件set_uid權限,那麼此文件必需要二進制可執行的, 例如ls、passwd、vi

做用: 保障普通用戶臨時擁有該命令全部者的身份,文件的前提是二進制的可執行文件。除了全部者以外的其餘用戶,當執行帶有set_uid命令時,在執行的一瞬間就會被臨時賦予該命令的全部者的身份 。

 

使用su - user1 切換到user1用戶

 

使用root用戶給ls設置一個set_uid權限, chmod u+s /usr/bin/ls

去掉set_uid ,chmod u-s /usr/bin/ls

 

到user1用戶中查看,此時user1用戶可使用ls命令,而且root目錄權限沒有變更,由於給了ls命令set_uid 權限,才能夠看到,臨時擁有了root用戶的權限

 

使用另外一個方法添加小s(set_uid)權限,chmod u=rws /usr/bin/ls

此時這裏的權限是S(大S),是由於沒有x 權限,加上x權限,就變成小s了,若是是S(大S),user1普通用戶也不受影響

 

3、特殊權限set_gid

能夠應用在文件上一樣能夠做用在目錄上。設置在文件上和set_uid相似,前提這個文件必須是可執行的二進制文件。設置set_gid後,執行該文件的用戶會臨時以該文件所屬組的身份執行。若目錄被設置這個權限後,任何用戶在此目錄下建立的文件或者目錄都具備和該目錄所屬組相同的組。

此權限位做用在 ‘組’ 權限位上,也是小 s

chmod g+s /usr/bin/ls set_gid和set_uid做用在文件的時候,功能基本相同,只是角色不一樣,set_uid 是普通用戶臨時擁有全部者的身份,set_gid是普通用戶臨時擁有所屬組的身份,所屬組是root下面的用戶的權限

 

set_gid 還能夠做用在目錄上,看成用在文件上時,和set_uid的做用相似

 

root用戶去建立文件或目錄時,全部者和所屬組都是root,不動系統的前提下,當給目錄設置了set_gid時,建立的子文件和子目錄的所屬組會跟着父級目錄(set_gid權限的目錄)保持一致

 

4、特殊權限stick_bit

SBit—般用於目錄上,對文件的意義不大。SBit對目錄的做用是:在具備SBit的目錄下,用戶若在該目錄下具備w及x權限,則當用戶在該目錄下創建文件或目錄時,只有文件擁有者與root纔有權利刪除。SBit能夠理解爲防刪除位。若是但願用戶可以添加文件但同時不能刪除文件,則能夠對文件使用SBit位。設置該位後,就算用戶對該文件的父目錄具備寫權限,也不能刪除文件。

這裏的t 就是stick_bit權限,也叫防刪除位,此權限靠父級目錄設置的

stick_bit做用:防止別人刪除本身的文件,root用戶除外

 

使用user2建立目錄user2,並給777權限,不設置stick_bit刪除位,user1能夠在user2目錄下建立目錄和文件,也能夠刪除user2目錄下的文件和目錄,由於user2目錄是777的權限而且沒有設置stick_bit刪除位

 

inode


一、inode是什麼?

理解inode,要從文件儲存提及。文件儲存在硬盤上,硬盤的最小存儲單位叫作"扇區」(Sector)。每一個扇區儲存512字 節(至關於0.5KB)。操做系統讀取硬盤的時候,不會一個個扇區地讀取,這樣效率過低,而是一次性連續讀取多個扇區,即一次性讀取一個"塊」(block)。這種由多個扇區組成的〃塊」,是文件存取的最小單位。"塊"的大小,最多見的是4KB,即連續八個sector組成一個block。

文件數據都儲存在"塊"中,那麼很顯然,咱們還必須找到一個地方儲存文件的元信息,好比文件的建立者、文件的建立日期、文件的大小等等。這種儲存文件元信息的區域就叫作inode,中文譯名爲「索引節點〃 。每個文件都有對應的 inode,裏面包含了與該文件有關的一些信息。

2.inode的內容 

inode包含文件的元信息,具體來講有如下內容:

文件的字節數
文件擁有者的User ID
文件的Group ID
文件的讀、寫、執行權限
文件的時間戳,共有三個:ctime指inode上一次變更的時間,mtime指文件內容上一次變更的時間,atime指文件上一次打開的時間。
連接數,即有多少文件名指向這個inode
文件數據block的位置


能夠用stat命令,查看某個文件的inode信息:

stat example.txt

總之,除了文件名之外的全部文件信息,都存在inode之中。至於爲何沒有文件名,下文會有詳細解釋。
3.inode的大小

inode也會消耗硬盤空間,因此硬盤格式化的時候,操做系統自動將硬盤分紅兩個區域。一個是數據區,存放文件數據;另外一個是inode區(inode table),存放inode所包含的信息。
每一個inode節點的大小,通常是128字節或256字節。inode節點的總數,在格式化時就給定,通常是每1KB或每2KB就設置一個inode。假定在一塊1GB的硬盤中,每一個inode節點的大小爲128字節,每1KB就設置一個inode,那麼inode table的大小就會達到128MB,佔整塊硬盤的12.8%。
查看每一個硬盤分區的inode總數和已經使用的數量,可使用df命令。


# df -i查看每一個inode節點的大小,能夠用以下命令:

# dumpe2fs -h /dev/hda | grep "Inode size"


因爲每一個文件都必須有一個inode,所以有可能發生inode已經用光,可是硬盤還未存滿的狀況。這時,就沒法在硬盤上建立新文件。


4.inode號

每一個inode都有一個號碼,操做系統用inode號碼來識別不一樣的文件。這裏值得重複一遍,Unix/Linux系統內部不使用文件名,而使用inode號碼來識別文件。對於系統來講,文件名只是inode號碼便於識別的別稱或者綽號。表面上,用戶經過文件名,打開文件。實際上,系統內部這個過程分紅三步:首先,系統找到這個文件名對應的inode號碼;其次,經過inode 號碼,獲取inode信息;最後,根據inode信息,找到文件數據所在的block,讀出數據。


使用ls-i命令,能夠看到文件名對應的inode號碼:

ls -i example.txt


5 .目錄文件
Unix/Linux系統中,目錄(directory)也是一種文件。打開目錄,實際上就是打開目錄文件。

目錄文件的結構很是簡單,就是一系列目錄項(dirent)的列表。每一個目錄項,由兩部分組成:所包含文件的文件名,以及該文件名對應的inode號碼。
ls命令只列出目錄文件中的全部文件名:

# ls /etc

ls-i命令列出整個目錄文件,即文件名和inode號碼:

# ls -i /etc

若是要查看文件的詳細信息,就必須根據inode號碼,訪問inode節點,讀取信息。ls -l命令列出文件的詳細信息。

# ls -l /etc

理解了上面這些知識,就能理解目錄的權限。目錄文件的讀權限(r)和寫權限(w),都是針對目錄文件自己(即不一樣用戶能以什麼權限訪問操做對該目錄文件,例如這裏不一樣用戶對tmp目錄文件(d能夠查出tmp是目錄文件,d表示directory,即目錄)分別爲rwxr-xr-x,第一組的三個字符,即rwx,表示文件擁有者用戶的對該文件的讀寫權限,第二組的三個字符,即r-x,表示文件擁有者用戶所在的用戶組裏的其餘用戶對該文件的讀寫權限,第三組的三個字符,即r-x,表示文件擁有者用戶所在的用戶組之外的用戶對該文件的讀寫權限。

一個某個用戶下運行的進程訪問操做該目錄文件只能以該用戶所具備的對該目錄文件的權限進行操做).因爲目錄文件內只有文件名和inode號碼,因此若是隻有讀權限,只能獲取文件名,沒法獲取其餘信息,由於其餘信息都儲存在inode節點中,而讀取inode節點內的信息須要目錄文件的執行權限(x) 。

6.inode特殊做用


因爲inode號碼與文件名分離,這種機制致使了一些Unix/Linux系統特有的現象。

1.有時,文件名包含特殊字符,沒法正常刪除。這時,直接刪除inode節點,就能起到刪除文件的做用。
2.移動文件或重命名文件,只是改變文件名,不影響inode號碼。
3.打開一個文件之後,系統就以inode號碼來識別這個文件,再也不考慮文件名。所以,一般來講,系統沒法從inode號碼得知文件名。

第3點使得軟件更新變得簡單,能夠在不關閉軟件的狀況下進行更新,不須要重啓。由於系統經過inode號碼,識別運行中的文件,不經過文件名。更新的時候,新版文件以一樣的文件名,生成一個新的inode,不會影響到運行中的文件。等到下一次運行這個軟件的時候,文件名就自動指向新版文件,舊版文件的inode則被回收。

5、軟連接文件

除了硬連接之外,還有一種特殊狀況。文件A和文件B的inode號碼雖然不同,可是文件A的內容是文件B的路徑。讀取文件A時,系統會自動將訪問者導向文件B。所以,不管打開哪個文件,最終讀取的都是文件B.這時,文件A就稱爲文件B 的"軟連接"(soft link)或者"符號連接(symbolic link) 

這意味着,文件A依賴於文件B而存在,若是刪除了文件B,打開文件A就會報錯:〃 No such file or directory"。這是軟連接與硬連接最大的不一樣:文件A指向文件B的文件名,而不是文件B的inode號碼,文件B的inode」連接數"不會所以發生變化。軟連接相似於Windows的快捷方式。

軟連接:路徑越長,軟鏈接文件的大小就越大,軟鏈接作絕對路徑

軟鏈接建立

ln -s /tmp/yum.log /root/123/yum.log ( ln -s 源文件即內存大的    軟鏈接文件即目標地址,名字能夠更改)

 

軟鏈接還能夠連接目錄

 

設置相對路徑的軟鏈接:ln -s tobe tobe2    (不建議使用,作軟鏈接儘可能使用絕對路徑)

注意:刪除軟連接目錄時,後面不要加/

df -h 查看磁盤分區

當磁盤或分區容量快滿時,能夠作軟鏈接解決

6、硬連接

通常狀況下,文件名和inode號碼是"一一對應"關係,每一個inode號碼對應一個文件名。可是,Unix/Linux系統容許,多個文件名指向同一個inode號碼。
這意味着,能夠用不一樣的文件名訪問一樣的內容;對文件內容進行修改,會影響到全部文件名;可是,刪除一個文件名,不影響另外一個文件名的訪問。這種狀況就被稱爲硬連接(hard link)。
文件的inode號通常都爲1,表明沒有重複使用inode號的其餘文件。目錄的inode號比較特殊,下面有子目錄,因此會有相同的inode號。
硬連接:硬連接不支持對目錄作硬連接,只支持對文件作硬連接,並且不能跨分區

能夠對文件作硬連接,不支持對目錄作硬連接,不能跨分區

關於硬鏈接,總結以下幾點:

1.建立的一個新文件和另外一個文件inode號相同,那他們互爲硬連接。
2.硬連接不受源文件影響,即便源文件被刪除,依然有效。而軟連接就依賴與源文件。硬連接能夠有多個,可是至少要留有一個 inode號,不能所有刪除
3.硬連接不會佔用雙份空間,和源文件inode號相同,很少佔用內存。
4.分區有獨立的inode體系,硬連接不能夠跨分區,由於不一樣分區有相同的inode號
5.AB互爲硬連接,改了A以後,B會自動變化

特性:建立的文件inode號相同,這兩個相互的爲硬連接文件

ln 2.txt 2_heard.txt

當源文件刪除時,軟鏈接找不到源文件就出問題了,可是硬連接時沒問題的,inode號變成了1,真正的文件在inode

拓展知識點:

其中每一個dentry都有一個惟一的inode,而每一個inode則可能有多個dentry,這種狀況是由ln硬連接產生的。 

硬連接:其實就是同一個文件具備多個別名,具備相同inode,而dentry不一樣。
1.文件具備相同的inode和data block;
2.只能對已存在的文件進行建立;
3.不能交叉文件系統進行硬連接的建立
4.不能對目錄進行建立,只能對文件建立硬連接
5.刪除一個硬連接並不影響其餘具備相同inode號的文件;

軟連接:軟連接具備本身的inode,即具備本身的文件,只是這個文件中存放的內容是另外一個文件的路徑名。所以軟連接具備本身的inode號以及用戶數據塊。
1.軟連接有本身的文件屬性及權限等;
2.軟連接能夠對不存在的文件或目錄建立;
3.軟連接能夠交叉文件系統;
4.軟連接能夠對文件或目錄建立;
5.建立軟連接時,連接計數i_nlink不會增長;
6.刪除軟連接不會影響被指向的文件,但若指向的原文件被刪除,則成死連接,但從新建立指向的路徑便可恢復爲正常的軟連接,只是源文件的內容可能變了。

7、find命令

#find用來搜索文件和目錄,類似命令還有:

#which (選項)(參數)
語法:#whereis (選項)(參數)
選項:
-b:只查找二進制文件;
-B〈目錄〉:只在設置的目錄下查找二進制文件;
-f:不顯示文件名前的路徑名稱;
-m:只查找說明文件;
-M〈目錄〉:只在設置的目錄下查找說明文件;
-s:只查找原始代碼文件;
-S〈目錄〉只在設置的目錄下查找原始代碼文件;
-u:查找不包含指定類型的文件。

定義:命令只能用於程序名的搜索,並且只搜索二進制文件(參數-b)、man說明文件(參數-m)和源代碼文件(參數-s).若是省略參數,則返回全部信息。

和find相比,whereis查找的速度很是快,這是由於linux系統會將系統內的全部文件都記錄在一個數據庫文件中,當使用whereis和下面即將介紹的locate時,會從數據庫中查找數據,而不是像find命令那樣,經過遍歷硬盤來查找,效率天然會很高。可是該數據庫文件並非實時更新,默認狀況下時一星期更新一次,所以,咱們在用whereis和locate查找文件時,有時會找到已經被刪除的數據,或者剛剛創建文件,卻沒法查找到,緣由就是由於數據庫文件沒有被更新。

# locate 

定義:locate命令實際上是"find -name"的另外一種寫法,可是要比後者快得多,緣由在於它不搜索具體目錄,而是搜索一 個數據庫(/var/lib/locatedb),這個數據庫中含有本地全部文件信息。Linux系統自動建立這個數據庫,而且天天自動更新一次,因此使用locate命令查不到最新變更過的文件。爲了不這種狀況,能夠在使用locate以前,先使用updatedb命令,手動更新數據庫。

locate+命令 (模糊搜索) 經過yum install -y mlocate安裝

此時須要updatedb,在使用locate+命令

快捷鍵:

Ctrl+u刪除光標前面的
Ctrl+d刪除光標後面的,一個一個刪除。
光標先後什麼都沒有,Ctrl+d退出終端
Ctrl+a 光標挪到最前面
Ctrl+e光標挪到最後

find:

find /etc/ -name "sshd_config"

find /etc/ -type d -name "sshd*" 根據文件類型是目錄的去搜索

find /etc/ -type f -name "sshd*" 根據文件類型是文件的去搜索

find /etc/ -type l 搜索軟鏈接文件 c類型,字符串設備.s類型socket文件。b類型,塊設備文件

類型參數列表:

f普通文件
1符號鏈接
d目錄
c字符設備
b塊設備
s套接字
p Fifo

stat 3.txtr 查看文件的具體信息

mtime:建立時間->最近更改(改內容)

ctime: 最近改動(改權限)

atime: -> 最近訪問

若是更改文件內容,ctime的時間必定會變

find /etc/ -type f -mtime -1 查看一天以內發生過更改的文件

find /etc/ -type f -mtime -1 -name "*.conf"     /etc/目錄下,類型是文件的而且醉經改動時間一天內的而且名字是.conf的文件,這裏都是而且的關係

find /etc/ -type f -o -mtime -1 -o -name "*.conf"     -o 表示或者

find / -inum 33583028 使用inum 加inode號,找文件的硬連接

find /root/ -type f -mmin -60 搜索60分鐘以內作過修改的文件

find /root/ -type f -mmin -60 -exec ls -l {} \; 搜索60分鐘以內作過修改的文件,並列出來;exec 是find的一個選項

find /root/ -type f -mmin -60 -exec mv {} {}.bak \; 把60分鐘內作過修改的文件查找出來,並把文件名更改,一個{}是一個文件,改爲後綴帶.bak

find /root/ -type f -size -10k -exec ls -lh {} \; 查找文件大小小於10k的文件,+10k找大於10k的文件,10後面必定要跟單位

find ./ -inum 38869041 | xargs cat

8、文件名後綴

經常使用的文件後綴名:

*.php ------是能用php語言解釋器進行解釋,能用瀏覽器打開的文件;
*.so -------這類是庫文件;
*.doc  *.obt --------這是OpenOffice 能打開的文件;

.bz2 ------bzip2的壓縮文件

.gz ------gzip的壓縮文件

.tar ------tar打包文件(是包文件不是壓縮文件)

.tbz------tar打包並用bzip壓縮文件

.tgz-----tar打包並用gzip壓縮的文件

.au -----audio文件

.gif -----gif圖象文件

.html/.htm-----HTML文件

.jpg-----JPEG圖象文件

.pdf------電子文檔(PDF格式的)

.png-----PNG圖象文件

.ps------postscinpt文件(打印格式文件)

.txt------純文本文件

.wav-----audio文件

.xpm-----圖象文件

.conf-------配置文件

.lock-------LOCK文件(用來判斷一個文件或設備是否被使用)

.rpm------REDHATPackage.Manager文件(套件包或軟件包)

.c -------C源程序代碼文件

.cpp------C++源程序代碼文件

.h -------C或C++程序的頭文件

.o------程序目標文件

.pl------perl腳本文件

.so-----類庫文件

9、Linux和windows互傳文件

yum install -y lrzsz 安裝好以後纔可使用sz和rz

xshell中使用sz命令把linux的文件傳到windows sz 3.txt.bak,使用rz命令能夠把windows的文件傳到linux,直接rz回車便可

 

 

本次操做中遇到的問題:

在操做時出現了亂碼的狀況,使用的是putty,由於客戶端字符集設置問題致使的,更改了字符集

自行百度解決~:https://jingyan.baidu.com/article/48a42057a057f7a9242504c5.html

 

相關文章
相關標籤/搜索