linux-basic(7)linux文件与目录管理
生活随笔
收集整理的這篇文章主要介紹了
linux-basic(7)linux文件与目录管理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【7.1】目錄與路徑
【7.1.2】目錄相關操作
1)特殊目錄列表:
(1)
2)目錄操作命令,底下我們就來談一談幾個常見的處理目錄的命令吧:
cd:變換目錄
pwd:顯示目前的目錄
mkdir:創建一個新的目錄
rmdir:刪除一個空的目錄
【荔枝】pwd 顯示當前目錄 == print working directory
pwd [-P] 顯示當前路徑,而非使用連接link路徑;
(2)
因為 /var/mail 是連結檔,連結到 /var/spool/mail?
# 所以,加上 pwd -P 的選項后,會不以連結檔的數據顯示,而是顯示正確的完整路徑啊!
【荔枝】mkdir [mp] 目錄名稱
-m :配置文件的權限喔!直接配置,不需要看默認權限 (umask) 的臉色~
-p :幫助你直接將所需要的目錄(包含上一級目錄)遞歸創建起來!
(3)
(4)
【荔枝】rmdir [-p] 目錄名稱, 刪除目錄
-p 連同上層的空目錄一起刪除;
(5)
rmdir 僅能刪除空的目錄;
【7.1.3】關于執行文件路徑的變量: $PATH
1)打印$PATH 變量
(6)
2)一般身份用戶無法使用 ifconfig eth0;但使用? /sbin/ifconfig eth0 可以執行;
3)把 ls 移動到 /root 目錄下,ls 無法執行了,因為ls文件不在 $PATH 路徑下: ls是 root目錄下的可執行文件;故 /root/ls 可以執行;
(7)
如果想要 root 目錄下ls可以執行, 那就將 /root 目錄加入到 PATH 中;
PATH="$PATH":/root
(8)
【總結】
不同身份使用者默認的PATH不同,默認能夠隨意運行的命令也不同(如root與vbird);
PATH是可以修改的,所以一般使用者還是可以透過修改PATH來運行某些位於/sbin或/usr/sbin下的命令來查詢;
使用絕對路徑或相對路徑直接指定某個命令的檔名來運行,會比搜尋PATH來的正確;
命令應該要放置到正確的目錄下,運行才會比較方便;
本目錄(.)最好不要放到PATH當中。
【7.2】文件與目錄管理
【7.2.1】查看文件與目錄: ls
(9)
【荔枝1】將主文件夾下的所有文件列出來
(10)
(11)
【荔枝3】完整的呈現文件的修改時間 *(modification time)
(12)
【7.2.2】復制,刪除與移動: cp, rm , mv
【荔枝1】cp-復制文件或目錄
(13)
1)-i: 若目標檔(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用)
(14)
2)-a:相當於 -pdr 的意思,至於 pdr 請參考下列說明;(常用) 把文件的整個屬性復制過來;
(15)
(16)
3)復制 /etc/ 目錄下的所有內容到 /tmp 下面
(17)
4)利用cp 創建一個符號鏈接文件和硬鏈接文件
(18)
補充1)符號鏈接 == 快捷方式;
補充2)硬鏈接和軟鏈接:(https://blog.csdn.net/qq_32907349/article/details/51510593)
硬鏈接:若一個 inode 號對應多個文件名,則稱這些文件為硬鏈接。換言之,硬鏈接就是同一個文件使用了多個別名(見 圖 2.hard link 就是 file 的一個別名,他們有共同的 inode)。硬鏈接可由命令 link 或 ln 創建。
軟連接:若文件用戶數據塊中存放的內容是另一文件的路徑名的指向,則該文件就是軟連接。軟鏈接就是一個普通文件,只是數據塊內容有點特殊。軟鏈接有著自己的 inode 號以及用戶數據塊
5)若~/.bashrc 比 /tmp/bashrc 新才復制過來;(cp -u 參數 常用于備份)
(19)
6)-d 若來源檔為連結檔的屬性(link file),則復制連結檔屬性而非文件本身;
(20)
cp復制的是源文件,而非鏈接文件的屬性;-d參數可以復制鏈接文件的屬性;
7)將多個文件復制到一個目錄下
(21)
8)-a? :相當於 -pdr 的意思,至於 pdr 請參考下列說明;(常用)?
-a可以復制完整權限;
(22)
【cp復制指令總結】在復制時,你必須要清楚的了解到:
是否需要完整的保留來源文件的資訊?
來源文件是否為連結檔 (symbolic link file)?
來源檔是否為特殊的文件,例如 FIFO, socket 等?
來源檔是否為目錄?
【荔枝2】rm-移除文件或目錄
(23)
1)-i 詢問是否刪除:
(24)
2)-r刪除目錄, rmdir僅能刪除空目錄(沒有文件的目錄)
(25)
(26)
3)\rm 可以忽略掉 alias的指定參數;在命令前加上反斜線,可以忽略掉 alias 的指定選項喔!
(27)
4)刪除一個帶有 - 開頭的文件
【荔枝3】mv-移動文件(1804022214)
?(28)
(29)
【荔枝】通過 rename來更改文件名
經試驗,rename根本就不起任何作用;
【7.2.3】取得路徑的文件名與目錄名稱
(30)
(31)
【7.3】文件內容查閱
1)文件內容查閱命令列表:
cat:由第一行開始顯示文件內容;
tac:從最后一行開始顯示,可以看出 tac 是 cat 的倒著寫;
nl:顯示的時候,順道輸出行號;
more:一頁一頁的顯示文件內容;
less 與 more 類似:但是比 more 更好的是,他可以往前翻頁;
head:只看頭幾行;
tail:只看尾巴幾行;
od:以二進位的方式讀取文件內容;
【7.3.1】直接查看文件內容
1)直接查閱一個文件的內容可以使用 cat/tac/nl 這幾個命令啊!
(32)
(33)
【荔枝】cat -A :可列出一些特殊字符而不是空白而已;
(34)
補充1)如果加上 -n 或 -b的話,每一行前面還會加上行號;
補充2)鳥哥很少用cat:畢竟當文件內容行數超過40行時,屏幕根本無法顯示完全;
【荔枝】tac:反向顯示
(35)
【荔枝】nl:添加行號打印
(36)
(37)
【7.3.2】可翻頁查看
1)nl, cat, tac 都是一次性打印出文本內容;
2)翻頁查看:more 或 less?
3)more命令:一頁一頁翻動(空白鍵)或一行一行翻動(回車)
空白鍵 (space):代表向下翻一頁;
Enter? ? ? ? ?:代表向下翻『一行』;
/字串? ? ? ? ?:代表在這個顯示的內容當中,向下搜尋『字串』這個關鍵字;
:f? ? ? ? ? ? :立刻顯示出檔名以及目前顯示的行數;
q? ? ? ? ? ? ?:代表立刻離開 more ,不再顯示該文件內容。
b 或 [ctrl]-b :代表往回翻頁,不過這動作只對文件有用,對管線無用。
(38)
補充)/輸入查詢的字符;重復查詢同一個字符串,可以直接按 n 即可;
【荔枝】less(一頁一頁翻動,可前向(空白鍵或pagedown鍵)也可后向翻頁(pageup鍵))
空白鍵? ? :向下翻動一頁;
[pagedown]:向下翻動一頁;
[pageup]? :向上翻動一頁;
/字串? ? ?:向下搜尋『字串』的功能;
?字串? ? ?:向上搜尋『字串』的功能;
n? ? ? ? ?:重復前一個搜尋 (與 / 或 ? 有關!)
N? ? ? ? ?:反向的重復前一個搜尋 (與 / 或 ? 有關!)
q? ? ? ? ?:離開 less 這個程序;
(39)
【7.3.3】數據選取
1)head:取出前面幾行;
選項與參數:
-n? :后面接數字,代表顯示幾行的意思
(40)
(41)
補充) head -n 負數:不顯示后面的負數行;如 head -n -100 不顯示第100行到最后的內容;
(42)
2)tail:取出后面幾行;
(43)
(44)
補充)-n +正整數 文件名: 列出正整數之后的數據行;tail -n +100 /etc/man.config 列出100行以后的數據;
(45)
【補充】tail -f /var/log/messages: 持續監測 /var/log/messages 的內容;直到輸入 ctrl + c 之后才會離開 tail這個命令的執行;
(46)
假如我想要顯示 /etc/man.config 的第 11 到第 20 行呢?
答:這個應該不算難,想一想,在第 11 到第 20 行,那么我取前 20 行,再取后十行,所以結果就是:『 head -n 20 /etc/man.config | tail -n 10 』,這樣就可以得到第 11 到第 20 行之間的內容了! 但是里面涉及到管線命令,需要在第三篇的時候才講的到!
(47)
【7.3.4】純文本文件:od 查看二進制文件
(48)
荔枝1)將/usr/bin/passwd的內容使用ASCII方式來展現!
(49)
荔枝2)將/etc/issue這個文件的內容以8進位列出儲存值與ASCII的對照表
(50)
【7.3.5】修改文件時間或創建新文件:touch
1)每個文件在linux底下都會記錄許多的時間參數, 其實是有三個主要的變動時間,那么三個時間的意義是什么呢?
(51)
【荔枝】touch參數列表
(52)
選項與參數:
(53)
荔枝2)將 ~/.bashrc 復制成為 bashrc,假設復制完全的屬性,檢查其日期
(54)
補充1)ll == ls -l ;其中 ll 是 ls -l 的命令別名;
補充2)分號; : 代表連續命令的下達啦!你可以在一行命令當中寫入多重命令, 這些命令可以『依序』運行。
補充3)至於運行的結果當中,我們可以發現數據的內容與屬性是被復制過來的,因此文件內容時間(mtime)與原本文件相同。 但是由於這個文件是剛剛被創建的,因此狀態(ctime)與讀取時間就便呈現在的時間啦! 那如果你想要變更這個文件的時間呢?可以這樣做:
【荔枝】修改文件的時間;
(55)
補充)atime mtime 改變了, 但ctime沒有改變;
【荔枝2】將bashrc的日期改為 2017/09/15 0202 如下:
(56)
補充)日期在 atime 與 mtime 都改變了,但是 ctime 則是記錄目前的時間!
【總結1】touch命令總結:
透過 touch 這個命令,我們可以輕易的修訂文件的日期與時間。并且也可以創建一個空的文件喔! 不過,要注意的是,即使我們復制一個文件時,復制所有的屬性,但也沒有辦法復制 ctime 這個屬性的。 ctime 可以記錄這個文件最近的狀態 (status)(即屬性和權限) 被改變的時間。無論如何,還是要告知大家, 我們平時看的文件屬性中,比較重要的還是屬於那個 mtime 啊!我們關心的常常是這個文件的『內容』 是什么時候被更動的說~了乎?
【總結2】touch 這個命令最常被使用的情況是:
創建一個空的文件;
將某個文件日期修訂為目前 (mtime 與 atime)
【7.4】文件與目錄的默認權限與隱藏權限
1)配置文件的隱藏屬性:除了基本r, w, x權限外,在Linux的Ext2/Ext3文件系統下,我們還可以配置其他的系統隱藏屬性, 這部份可使用 chattr 來配置,而以 lsattr 來查看,最重要的屬性就是可以配置其不可修改的特性!
例題1)root 雖然可以將這個文件復制給 dmtsai,不過這個文件在 dmtsai 的家目錄中卻可能讓 dmtsai 沒有辦法讀寫(因為該文件屬於 root 的嘛!而 dmtsai 又不能使用 chown 之故)。 此外,我們又擔心覆蓋掉 dmtsai 自己的 .bashrc 配置檔,因此,我們可以進行如下的動作喔:
復制文件: cp ~/.bashrc ~dmtsai/bashrc
修改屬性: chown dmtsai:users ~dmtsai/bashrc
例題2)因為除了 dmtsai 之外,其他人不能修改該目錄下的文件,所以整個目錄的權限應該是 drwxr-xr-x 才對! 因此你應該這樣做:
創建目錄: mkdir /tmp/chapter7_1
修改屬性: chown -R dmtsai:users /tmp/chapter7_1
修改權限: chmod -R 755 /tmp/chapter7_1
【7.4.1】文件默認權限:umask
1)umask 就是:指定 『目前使用者在創建文件或目錄時候的權限默認值』, 那么如何得知或配置 umask 呢?他的指定條件以底下的方式來指定:?
2)umask表示的是:該默認值需要減掉的權限;(干貨——umask)
(57)
-S == Symbolic(符號的)
補充1)怎么 umask 會有四組數字啊?不是只有三組嗎?是沒錯啦。第一組是特殊權限用的,我們先不要理他,所以先看后面三組即可。
補充2)默認的情況如下:
若使用者創建為『文件』則默認『沒有可運行( x )權限』,亦即只有 rw 這兩個項目,也就是最大為 666 分,默認權限如下: -rw-rw-rw-;又由于需要減去的權限umask=0022 ==? 022 == ----w--w- ,所以新建文件最后得到的權限是 -rw-r--r-- ;如上例所示;
若使用者創建為『目錄』,則由於 x 與是否可以進入此目錄有關,因此默認為所有權限均開放,亦即為 777 分,默認權限如下:drwxrwxrwx;又由于需要減去的權限umask=0022 ==? 022 == ----w--w- ,所以新建文件最后得到的權限是 drwxr-xr-x ;如上例所示;
總結如下)
創建文件時:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--
創建目錄時:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x
3)如何設置umask?直接在 umask 后面輸入 002 就好了!
(58)
例題)假設你的 umask 為 003 ,請問該 umask 情況下,創建的文件與目錄權限為?
答:
umask 為 003 ,所以拿掉的權限為 --------wx,因此:
文件: (-rw-rw-rw-) - (--------wx) = -rw-rw-r--
目錄: (drwxrwxrwx) - (--------wx) = drwxrwxr--
umask總結)在默認的情況中, root 的 umask 會拿掉比較多的屬性,root 的 umask 默認是 022 , 這是基於安全的考量啦~至於一般身份使用者,通常他們的 umask 為 002 ,亦即保留同群組的寫入權力!?
【7.4.2】文件隱藏屬性 chattr lsattr
1)不過要先強調的是:底下的chattr命令只能在Ext2/Ext3的文件系統上面生效, 其他的文件系統可能就無法支持這個命令了。
2)底下我們就來談一談如何配置與檢查這些隱藏的屬性吧!
(59)
補充)注意:屬性配置常見的是 a 與 i 的配置值,而且很多配置值必須要身為 root 才能配置;
a? :當配置 a 之后,這個文件將只能添加數據,而不能刪除也不能修改數據,只有root?
? ? ?才能配置這個屬性。?
i? :這個 i 可就很厲害了!他可以讓一個文件『不能被刪除、改名、配置連結也無法
? ? ?寫入或新增數據!』對於系統安全性有相當大的助益!只有 root 能配置此屬性;
(60)
3)lsattr (顯示文件隱藏屬性)
(61)
(62)
怎么會是 -rwsr-xr-x; s 表示什么?
1)Set UID == SUID(針對文件的權限)
當 s 這個標志出現在文件擁有者的 x 權限上時,例如剛剛提到的 /usr/bin/passwd 這個文件的權限狀態:『-rwsr-xr-x』,此時就被稱為 Set UID,簡稱為 SUID 的特殊權限。 1.1)那么SUID的權限對於一個文件的特殊功能是什么呢?基本上SUID有這樣的限制與功能:
? ● SUID 權限僅對二進位程序(binary program)有效;
? ● 運行者對於該程序需要具有 x 的可運行權限;
? ● 本權限僅在運行該程序的過程中有效 (run-time);
? ● 運行者將具有該程序擁有者 (owner) 的權限。
1.2)SUID荔枝(非常重要的荔枝):我們的 Linux 系統中,所有帳號的密碼都記錄在 /etc/shadow 這個文件里面,這個文件的權限為:『-r-------- 1 root root』,意思是這個文件僅有root可讀且僅有root可以強制寫入而已。 既然這個文件僅有 root 可以修改,那么鳥哥的 vbird 這個一般帳號使用者能否自行修改自己的密碼呢? 你可以使用你自己的帳號輸入『passwd』這個命令來看看,嘿嘿!一般使用者當然可以修改自己的密碼了!
1.3)藉由上述的功能說明,我們可以知道:
? ● vbird 對於 /usr/bin/passwd 這個程序來說是具有 x 權限的,表示 vbird 能運行 passwd;
? ● passwd 的擁有者是 root 這個帳號;
? ● vbird 運行 passwd 的過程中,會『暫時』獲得 root 的權限;
? ● /etc/shadow 就可以被 vbird 所運行的 passwd 所修改。
2.0)當 s 標志在文件擁有者的 x 項目為 SUID,那 s 在群組的 x 時則稱為 Set GID, SGID 羅!是這樣沒錯!^_^。 舉例來說,你可以用底下的命令來觀察到具有 SGID 權限的文件喔:?
(64)
2.1)如果是對文件來說, SGID 有如下的功能:
? ● SGID 對二進位程序有用;
? ● 程序運行者對於該程序來說,需具備 x 的權限;
? ● 運行者在運行的過程中將會獲得該程序群組的支持!
【荔枝】舉例來說,你可以用底下的命令來觀察到具有 SGID 權限的文件喔:
(65)
2.2)當一個目錄配置了 SGID 的權限后,他將具有如下的功能:
? ● 使用者若對於此目錄具有 r 與 x 的權限時,該使用者能夠進入此目錄;
? ● 使用者在此目錄下的有效群組(effective group)將會變成該目錄的群組;
? ● 用途:若使用者在此目錄下具有 w 的權限(可以新建文件),則使用者所創建的新文件,該新文件的群組與此目錄的群組相同。
3)Sticky Bit: 這個 Sticky Bit, SBIT 目前只針對目錄有效,對於文件已經沒有效果了。 SBIT 對於目錄的作用是:
? ● 當使用者對於此目錄具有 w, x 權限,亦即具有寫入的權限時;
? ● 當使用者在該目錄下創建文件或目錄時,僅有自己與 root 才有權力刪除該文件;
4)換句話說:當甲這個使用者於 A 目錄是具有群組或其他人的身份,并且擁有該目錄 w 的權限, 這表示『甲使用者對該目錄內任何人創建的目錄或文件均可進行 "刪除/更名/搬移" 等動作。』 不過,如果將 A 目錄加上了 SBIT 的權限項目時, 則甲只能夠針對自己創建的文件或目錄進行刪除/更名/移動等動作,而無法刪除他人的文件。
【荔枝】舉例來說,我們的 /tmp 本身的權限是『drwxrwxrwt』, 在這樣的權限內容下,任何人都可以在 /tmp 內新增、修改文件,但僅有該文件/目錄創建者與 root 能夠刪除自己的目錄或文件。這個特性也是挺重要的啊!你可以這樣做個簡單的測試:
? ● 以 root 登陸系統,并且進入 /tmp 當中;
? ● touch test,并且更改 test 權限成為 777 ;
? ● 以一般使用者登陸,并進入 /tmp;
? ● 嘗試刪除 test 這個文件!
5)SUID/SGID/SBIT 權限配置:如何配置文件使成為具有 SUID 與 SGID 的權限呢?
那么如果在這三個數字之前再加上一個數字的話,最前面的那個數字就代表這幾個權限了!
4 為 SUID
2 為 SGID
1 為 SBIT
【荔枝】 假設要將一個文件權限改為『-rwsr-xr-x』時,由於 s 在使用者權限中,所以是 SUID ,因此, 在原先的 755 之前還要加上 4 ,也就是:『 chmod 4755 filename 』來配置!此外,還有大 S 與大 T 的產生喔!參考底下的范例啦!
注意:你必須了解 SUID 不是用在目錄上,而 SBIT 不是用在文件上的喔!
【荔枝】SUID SGID權限操作
(66)
補充1)chmod 7666 test; ls -l test : user, group 以及 others 都沒有 x 這個可運行的標志( 因為 666 嘛 ),所以,這個 S, T 代表的就是『空的』啦!怎么說? SUID 是表示『該文件在運行的時候,具有文件擁有者的權限』,但是文件 擁有者都無法運行了,哪里來的權限給其他人使用?當然就是空的啦! ^_^
補充2)s 和 t 權限 是基于 x 權限的;如果文件的 user, group 或 others 沒有x權限,則其對應的s和t權限是空的,即大S 或 大T;
6)以透過符號法來處理喔!其中 SUID 為 u+s ,而 SGID 為 g+s ,SBIT 則是 o+t 羅!來看看如下的范例:
(67)
(68)
【7.4.4】查看文件類型:file
1)如果你想要知道某個文件的基本數據,例如是屬於 ASCII 或者是 data 文件,或者是 binary , 且其中有沒有使用到動態函式庫 (share library) 等等的資訊,就可以利用 file 這個命令來檢閱喔!
(69)
【7.5】命令與文件的查詢
【7.5.1】腳本文件名的查詢
1)命令的完整文件名放置在哪里? 通過 which 或 type來查找;
2)which:尋找執行文件;
(70)
【荔枝】如下:
(71)
補充1)which命令是根據『PATH』這個環境變量所規范的路徑,去搜尋『運行檔』的檔名~ 所以,重點是找出『運行檔』而已!且 which 后面接的是『完整檔名』喔!若加上 -a 選項,則可以列出所有的可以找到的同名運行檔,而非僅顯示第一個而已!
補充2)怎么 cd 這個常用的命令竟然找不到啊!為什么呢? 這是因為 cd 是『bash 內建的命令』啦! 但是 which 默認是找 PATH 內所規范的目錄,所以當然一定找不到的啊!那怎辦?沒關系!我們可以透過 type 這個命令喔!
【7.5.2】文件名的查找
1)通常我們都是先使用 whereis 或者是 locate 來檢查,如果真的找不到了,才以 find 來搜尋呦!
2)文件名查找命令列表:
(72)
【荔枝】如下:
(73)
(74)
補充) 因為 Linux 系統會將系統內的所有文件都記錄在一個數據庫文件里面, 而當使用 whereis 或者是底下要說的 locate 時,都會以此數據庫文件的內容為準, 因此,有的時后你還會發現使用這兩個運行檔時,會找到已經被殺掉的文件! 而且也找不到最新的剛剛創建的文件呢!這就是因為這兩個命令是由數據庫當中的結果去搜尋文件的所在啊! 數據庫中的文件記錄 與 實際磁盤的文件記錄信息不一致。
2.2)locate(搜索速度快,利用數據庫來搜尋數據)
(75)
? ● (76)
? ● 補充1)因為 locate 尋找的數據是由『已創建的數據庫 /var/lib/mlocate/』 里面的數據所搜尋到的,所以不用直接在去硬盤當中存取數據,呵呵!當然是很快速羅!
? ● 補充2)那么有什么限制呢?? 就是因為他是經由數據庫來搜尋的,而數據庫的創建默認是在每天運行一次 (每個 distribution 都不同,CentOS 5.x 是每天升級數據庫一次!),所以當你新創建起來的文件, 卻還在數據庫升級之前搜尋該文件,那么 locate 會告訴你『找不到!』呵呵!因為必須要升級數據庫呀!
? ● 補充3)那能否手動升級數據庫哪? 升級 locate 數據庫的方法非常簡單,直接輸入『 updatedb 』就可以了!?
? ● 補充4)updatedb:根據 /etc/updatedb.conf 的配置去搜尋系統硬盤內的檔名,并升級 /var/lib/mlocate 內的數據庫文件;
? ● 補充5)locate:依據 /var/lib/mlocate 內的數據庫記載,找出使用者輸入的關鍵字檔名。
2.3)find(搜索速度慢,直接搜索硬盤)
(77)
荔枝1)將過去系統上面 24 小時內有更動過內容 (mtime) 的文件列出:
(78)
荔枝2)尋找 /etc 底下的文件,如果文件日期比 /etc/passwd 新就列出:
(79)
+4代表大於等於5天前的檔名:ex> find /var -mtime +4
-4代表小於等於4天內的文件檔名:ex> find /var -mtime -4
4則是代表4-5那一天的文件檔名:ex> find /var -mtime 4
2.3.1)find的其他用法:
(81)
(82)
荔枝1)搜尋 /home 底下屬於 pacoson 的文件:
(83)
荔枝2)搜尋系統中不屬於任何人的文件:
(84)
荔枝1)找出檔名為 passwd 這個文件
(86)
荔枝2)找出 /var 目錄下,文件類型為 Socket 的檔名有哪些?
(87)
荔枝3)搜尋文件當中含有 SGID 或 SUID 或 SBIT 的屬性;
(88)
荔枝4)我想要找出來 /bin, /sbin 這兩個目錄下, 只要具有 SUID 或 SGID 就列出來該文件,你可以這樣做:
(89)
補充)因為 SUID 是 4 分,SGID 2 分,總共為 6 分,因此可用 +6000 來處理這個權限! 至於 find 后面可以接多個目錄來進行搜尋!
2.3.3)find的其他用法3:
(90)
(91)
荔枝1)將上個范例找到的文件使用 ls -l 列出來~
(92)
荔枝2)找出系統中,大於 1MB 的文件
(93)
補充1)find 的特殊功能就是能夠進行額外的動作(action):圖解如下:
(94)
補充2)該范例中特殊的地方有 {} 以及 \; 還有 -exec 這個關鍵字,這些東西的意義為:?
? ● {} 代表的是『由 find 找到的內容』,如上圖所示,find 的結果會被放置到 {} 位置中;
? ● -exec 一直到 \; 是關鍵字,代表 find 額外動作的開始 (-exec) 到結束 (\;) ,在這中間的就是 find 命令內的額外動作。 在本例中就是『 ls -l {} 』羅!
? ● 因為『 ; 』在 bash 環境下是有特殊意義的,因此利用反斜線來跳脫。
補充3)如果你要找的文件是具有特殊屬性的,例如 SUID 、文件擁有者、文件大小等等, 那么利用 locate 是沒有辦法達成你的搜尋的!此時 find 就顯的很重要啦! 另外,find 還可以利用通配符來找文件名呢!
荔枝)舉例來說,你想要找出 /etc 底下檔名包含 httpd 的文件, 那么你就可以這樣做:
(95)
一、讓使用者能進入某目錄成為『可工作目錄』的基本權限為何:
? ● 可使用的命令:例如 cd 等變換工作目錄的命令;
? ● 目錄所需權限:使用者對這個目錄至少需要具有 x 的權限;
? ● 額外需求:如果使用者想要在這個目錄內利用 ls 查閱檔名,則使用者對此目錄還需要 r 的權限。
二、使用者在某個目錄內讀取一個文件的基本權限為何?
? ● 可使用的命令:例如本章談到的 cat, more, less等等;
? ● 目錄所需權限:使用者對這個目錄至少需要具有 x 權限;
? ● 文件所需權限:使用者對文件至少需要具有 r 的權限才行!
三、讓使用者可以修改一個文件的基本權限為何?
? ● 可使用的命令:例如 nano 或未來要介紹的 vi 編輯器等;
? ● 目錄所需權限:使用者在該文件所在的目錄至少要有 x 權限;
? ● 文件所需權限:使用者對該文件至少要有 r, w 權限。
四、讓一個使用者可以創建一個文件的基本權限為何?
? ● 目錄所需權限:使用者在該目錄要具有 w,x 的權限,重點在 w 啦!
五、讓使用者進入某目錄并運行該目錄下的某個命令之基本權限為何?
? ● 目錄所需權限:使用者在該目錄至少要有 x 的權限;
? ● 文件所需權限:使用者在該文件至少需要有 x 的權限。
例題)讓一個使用者 pacoson 能夠進行『cp /dir1/file1 /dir2』的命令時,請說明 dir1, file1, dir2 的最小所需權限為何?
答:
運行 cp 時, pacoson 要『能夠讀取來源檔,并且寫入目標檔!』 因此各文件/目錄的最小權限應該是:
dir1 :至少需要有 x 權限;
file1:至少需要有 r 權限;
dir2 :至少需要有 w, x 權限。
【7.7】linux文件與目錄管理重點回顧
? ● 絕對路徑:『一定由根目錄 / 寫起』;相對路徑:『不是由 / 寫起』
? ● 特殊目錄有:., .., -, ~, ~account需要注意;
? ● 與目錄相關的命令有:cd, mkdir, rmdir, pwd 等重要命令;
? ● rmdir 僅能刪除空目錄,要刪除非空目錄需使用『 rm -r 』命令;
? ● 使用者能使用的命令是依據 PATH 變量所規定的目錄去搜尋的;
? ● 不同的身份(root 與一般用戶)系統默認的 PATH 并不相同。差異較大的地方在於 /sbin, /usr/sbin ;
? ● ls 可以檢視文件的屬性,尤其 -d, -a, -l 等選項特別重要!
? ● 文件的復制、刪除、移動可以分別使用:cp, rm , mv等命令來操作;
? ● 檢查文件的內容(讀檔)可使用的命令包括有:cat, tac, nl, more, less, head, tail, od 等
? ● cat -n 與 nl 均可顯示行號,但默認的情況下,空白行會不會編號并不相同;
? ● touch 的目的在修改文件的時間參數,但亦可用來創建空文件;
? ● 一個文件記錄的時間參數有三種,分別是 access time(atime), status time (ctime), modification time(mtime),ls 默認顯示的是 mtime。
? ● 除了傳統的rwx權限之外,在Ext2/Ext3文件系統中,還可以使用chattr與lsattr配置及觀察隱藏屬性。 常見的包括只能新增數據的 +a 與完全不能更動文件的 +i 屬性。
? ● 新建文件/目錄時,新文件的默認權限使用 umask 來規范。默認目錄完全權限為drwxrwxrwx, 文件則為-rw-rw-rw-。
? ● 文件具有SUID的特殊權限時,代表當使用者運行此一binary程序時,在運行過程中使用者會暫時具有程序擁有者的權限
? ● 目錄具有SGID的特殊權限時,代表使用者在這個目錄底下新建的文件之群組都會與該目錄的群組名稱相同。
? ● 目錄具有SBIT的特殊權限時,代表在該目錄下使用者創建的文件只有自己與root能夠刪除!
? ● 觀察文件的類型可以使用 file 命令來觀察;
? ● 搜尋命令的完整檔名可用 which 或 type ,這兩個命令都是透過 PATH 變量來搜尋檔名;
? ● 搜尋文件的完整檔名可以使用 whereis 或 locate 到數據庫文件去搜尋,而不實際搜尋文件系統;
? ● 利用 find 可以加入許多選項來直接查詢文件系統,以獲得自己想要知道的檔名。
【7.1.2】目錄相關操作
1)特殊目錄列表:
(1)
2)目錄操作命令,底下我們就來談一談幾個常見的處理目錄的命令吧:
cd:變換目錄
pwd:顯示目前的目錄
mkdir:創建一個新的目錄
rmdir:刪除一個空的目錄
【荔枝】pwd 顯示當前目錄 == print working directory
pwd [-P] 顯示當前路徑,而非使用連接link路徑;
(2)
因為 /var/mail 是連結檔,連結到 /var/spool/mail?
# 所以,加上 pwd -P 的選項后,會不以連結檔的數據顯示,而是顯示正確的完整路徑啊!
【荔枝】mkdir [mp] 目錄名稱
-m :配置文件的權限喔!直接配置,不需要看默認權限 (umask) 的臉色~
-p :幫助你直接將所需要的目錄(包含上一級目錄)遞歸創建起來!
(3)
(4)
【荔枝】rmdir [-p] 目錄名稱, 刪除目錄
-p 連同上層的空目錄一起刪除;
(5)
rmdir 僅能刪除空的目錄;
【7.1.3】關于執行文件路徑的變量: $PATH
1)打印$PATH 變量
(6)
2)一般身份用戶無法使用 ifconfig eth0;但使用? /sbin/ifconfig eth0 可以執行;
3)把 ls 移動到 /root 目錄下,ls 無法執行了,因為ls文件不在 $PATH 路徑下: ls是 root目錄下的可執行文件;故 /root/ls 可以執行;
(7)
如果想要 root 目錄下ls可以執行, 那就將 /root 目錄加入到 PATH 中;
PATH="$PATH":/root
(8)
【總結】
不同身份使用者默認的PATH不同,默認能夠隨意運行的命令也不同(如root與vbird);
PATH是可以修改的,所以一般使用者還是可以透過修改PATH來運行某些位於/sbin或/usr/sbin下的命令來查詢;
使用絕對路徑或相對路徑直接指定某個命令的檔名來運行,會比搜尋PATH來的正確;
命令應該要放置到正確的目錄下,運行才會比較方便;
本目錄(.)最好不要放到PATH當中。
【7.2】文件與目錄管理
【7.2.1】查看文件與目錄: ls
(9)
【荔枝1】將主文件夾下的所有文件列出來
(10)
【荔枝2】承上題,不顯示顏色,但在檔名末顯示出該檔名代表的類型(type)
(11)
【荔枝3】完整的呈現文件的修改時間 *(modification time)
(12)
【7.2.2】復制,刪除與移動: cp, rm , mv
【荔枝1】cp-復制文件或目錄
(13)
1)-i: 若目標檔(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用)
(14)
2)-a:相當於 -pdr 的意思,至於 pdr 請參考下列說明;(常用) 把文件的整個屬性復制過來;
(15)
(16)
3)復制 /etc/ 目錄下的所有內容到 /tmp 下面
(17)
4)利用cp 創建一個符號鏈接文件和硬鏈接文件
(18)
補充1)符號鏈接 == 快捷方式;
補充2)硬鏈接和軟鏈接:(https://blog.csdn.net/qq_32907349/article/details/51510593)
硬鏈接:若一個 inode 號對應多個文件名,則稱這些文件為硬鏈接。換言之,硬鏈接就是同一個文件使用了多個別名(見 圖 2.hard link 就是 file 的一個別名,他們有共同的 inode)。硬鏈接可由命令 link 或 ln 創建。
軟連接:若文件用戶數據塊中存放的內容是另一文件的路徑名的指向,則該文件就是軟連接。軟鏈接就是一個普通文件,只是數據塊內容有點特殊。軟鏈接有著自己的 inode 號以及用戶數據塊
5)若~/.bashrc 比 /tmp/bashrc 新才復制過來;(cp -u 參數 常用于備份)
(19)
6)-d 若來源檔為連結檔的屬性(link file),則復制連結檔屬性而非文件本身;
(20)
cp復制的是源文件,而非鏈接文件的屬性;-d參數可以復制鏈接文件的屬性;
7)將多個文件復制到一個目錄下
(21)
8)-a? :相當於 -pdr 的意思,至於 pdr 請參考下列說明;(常用)?
-a可以復制完整權限;
(22)
【cp復制指令總結】在復制時,你必須要清楚的了解到:
是否需要完整的保留來源文件的資訊?
來源文件是否為連結檔 (symbolic link file)?
來源檔是否為特殊的文件,例如 FIFO, socket 等?
來源檔是否為目錄?
【荔枝2】rm-移除文件或目錄
(23)
1)-i 詢問是否刪除:
(24)
2)-r刪除目錄, rmdir僅能刪除空目錄(沒有文件的目錄)
(25)
(26)
3)\rm 可以忽略掉 alias的指定參數;在命令前加上反斜線,可以忽略掉 alias 的指定選項喔!
(27)
4)刪除一個帶有 - 開頭的文件
【荔枝3】mv-移動文件(1804022214)
?(28)
(29)
【荔枝】通過 rename來更改文件名
經試驗,rename根本就不起任何作用;
【7.2.3】取得路徑的文件名與目錄名稱
(30)
(31)
【7.3】文件內容查閱
1)文件內容查閱命令列表:
cat:由第一行開始顯示文件內容;
tac:從最后一行開始顯示,可以看出 tac 是 cat 的倒著寫;
nl:顯示的時候,順道輸出行號;
more:一頁一頁的顯示文件內容;
less 與 more 類似:但是比 more 更好的是,他可以往前翻頁;
head:只看頭幾行;
tail:只看尾巴幾行;
od:以二進位的方式讀取文件內容;
【7.3.1】直接查看文件內容
1)直接查閱一個文件的內容可以使用 cat/tac/nl 這幾個命令啊!
(32)
(33)
【荔枝】cat -A :可列出一些特殊字符而不是空白而已;
(34)
補充1)如果加上 -n 或 -b的話,每一行前面還會加上行號;
補充2)鳥哥很少用cat:畢竟當文件內容行數超過40行時,屏幕根本無法顯示完全;
【荔枝】tac:反向顯示
(35)
【荔枝】nl:添加行號打印
(36)
(37)
【7.3.2】可翻頁查看
1)nl, cat, tac 都是一次性打印出文本內容;
2)翻頁查看:more 或 less?
3)more命令:一頁一頁翻動(空白鍵)或一行一行翻動(回車)
空白鍵 (space):代表向下翻一頁;
Enter? ? ? ? ?:代表向下翻『一行』;
/字串? ? ? ? ?:代表在這個顯示的內容當中,向下搜尋『字串』這個關鍵字;
:f? ? ? ? ? ? :立刻顯示出檔名以及目前顯示的行數;
q? ? ? ? ? ? ?:代表立刻離開 more ,不再顯示該文件內容。
b 或 [ctrl]-b :代表往回翻頁,不過這動作只對文件有用,對管線無用。
(38)
補充)/輸入查詢的字符;重復查詢同一個字符串,可以直接按 n 即可;
【荔枝】less(一頁一頁翻動,可前向(空白鍵或pagedown鍵)也可后向翻頁(pageup鍵))
空白鍵? ? :向下翻動一頁;
[pagedown]:向下翻動一頁;
[pageup]? :向上翻動一頁;
/字串? ? ?:向下搜尋『字串』的功能;
?字串? ? ?:向上搜尋『字串』的功能;
n? ? ? ? ?:重復前一個搜尋 (與 / 或 ? 有關!)
N? ? ? ? ?:反向的重復前一個搜尋 (與 / 或 ? 有關!)
q? ? ? ? ?:離開 less 這個程序;
(39)
【7.3.3】數據選取
1)head:取出前面幾行;
選項與參數:
-n? :后面接數字,代表顯示幾行的意思
(40)
(41)
補充) head -n 負數:不顯示后面的負數行;如 head -n -100 不顯示第100行到最后的內容;
(42)
2)tail:取出后面幾行;
(43)
(44)
補充)-n +正整數 文件名: 列出正整數之后的數據行;tail -n +100 /etc/man.config 列出100行以后的數據;
(45)
【補充】tail -f /var/log/messages: 持續監測 /var/log/messages 的內容;直到輸入 ctrl + c 之后才會離開 tail這個命令的執行;
(46)
- 補充1)當下達『tail -n +100 /etc/man.config』 代表該文件從100行以后都會被列出來,同樣的,在man.config共有141行,因此第100~141行就會被列出來啦! 前面的99行都不會被顯示出來喔!
- 補充2) 至於范例二中,由於/var/log/messages隨時會有數據寫入,你想要讓該文件有數據寫入時就立刻顯示到螢幕上, 就利用 -f 這個選項,他可以一直偵測/var/log/messages這個文件,新加入的數據都會被顯示到螢幕上。 直到你按下[crtl]-c才會離開tail的偵測喔!
假如我想要顯示 /etc/man.config 的第 11 到第 20 行呢?
答:這個應該不算難,想一想,在第 11 到第 20 行,那么我取前 20 行,再取后十行,所以結果就是:『 head -n 20 /etc/man.config | tail -n 10 』,這樣就可以得到第 11 到第 20 行之間的內容了! 但是里面涉及到管線命令,需要在第三篇的時候才講的到!
(47)
【7.3.4】純文本文件:od 查看二進制文件
(48)
荔枝1)將/usr/bin/passwd的內容使用ASCII方式來展現!
(49)
荔枝2)將/etc/issue這個文件的內容以8進位列出儲存值與ASCII的對照表
(50)
【7.3.5】修改文件時間或創建新文件:touch
1)每個文件在linux底下都會記錄許多的時間參數, 其實是有三個主要的變動時間,那么三個時間的意義是什么呢?
- modification time (mtime):當該文件的『內容數據』變更時,就會升級這個時間!內容數據指的是文件的內容,而不是文件的屬性或權限喔!
- status time (ctime):當該文件的『狀態 (status)』改變時,就會升級這個時間,舉例來說,像是權限與屬性被更改了,都會升級這個時間啊。?
- access time (atime):當『該文件的內容被取用』時,就會升級這個讀取時間 (access)。舉例來說,我們使用 cat 去讀取 /etc/man.config , 就會升級該文件的 atime 了。
(51)
【荔枝】touch參數列表
(52)
選項與參數:
- -a? :僅修訂 access time;
- -c? :僅修改文件的時間,若該文件不存在則不創建新文件;
- -d? :后面可以接欲修訂的日期而不用目前的日期,也可以使用 --date="日期或時間"
- -m? :僅修改 mtime ;
- -t? :后面可以接欲修訂的時間而不用目前的時間,格式為[YYMMDDhhmm]
(53)
荔枝2)將 ~/.bashrc 復制成為 bashrc,假設復制完全的屬性,檢查其日期
(54)
補充1)ll == ls -l ;其中 ll 是 ls -l 的命令別名;
補充2)分號; : 代表連續命令的下達啦!你可以在一行命令當中寫入多重命令, 這些命令可以『依序』運行。
補充3)至於運行的結果當中,我們可以發現數據的內容與屬性是被復制過來的,因此文件內容時間(mtime)與原本文件相同。 但是由於這個文件是剛剛被創建的,因此狀態(ctime)與讀取時間就便呈現在的時間啦! 那如果你想要變更這個文件的時間呢?可以這樣做:
【荔枝】修改文件的時間;
(55)
補充)atime mtime 改變了, 但ctime沒有改變;
【荔枝2】將bashrc的日期改為 2017/09/15 0202 如下:
(56)
補充)日期在 atime 與 mtime 都改變了,但是 ctime 則是記錄目前的時間!
【總結1】touch命令總結:
透過 touch 這個命令,我們可以輕易的修訂文件的日期與時間。并且也可以創建一個空的文件喔! 不過,要注意的是,即使我們復制一個文件時,復制所有的屬性,但也沒有辦法復制 ctime 這個屬性的。 ctime 可以記錄這個文件最近的狀態 (status)(即屬性和權限) 被改變的時間。無論如何,還是要告知大家, 我們平時看的文件屬性中,比較重要的還是屬於那個 mtime 啊!我們關心的常常是這個文件的『內容』 是什么時候被更動的說~了乎?
【總結2】touch 這個命令最常被使用的情況是:
創建一個空的文件;
將某個文件日期修訂為目前 (mtime 與 atime)
【7.4】文件與目錄的默認權限與隱藏權限
1)配置文件的隱藏屬性:除了基本r, w, x權限外,在Linux的Ext2/Ext3文件系統下,我們還可以配置其他的系統隱藏屬性, 這部份可使用 chattr 來配置,而以 lsattr 來查看,最重要的屬性就是可以配置其不可修改的特性!
例題1)root 雖然可以將這個文件復制給 dmtsai,不過這個文件在 dmtsai 的家目錄中卻可能讓 dmtsai 沒有辦法讀寫(因為該文件屬於 root 的嘛!而 dmtsai 又不能使用 chown 之故)。 此外,我們又擔心覆蓋掉 dmtsai 自己的 .bashrc 配置檔,因此,我們可以進行如下的動作喔:
復制文件: cp ~/.bashrc ~dmtsai/bashrc
修改屬性: chown dmtsai:users ~dmtsai/bashrc
例題2)因為除了 dmtsai 之外,其他人不能修改該目錄下的文件,所以整個目錄的權限應該是 drwxr-xr-x 才對! 因此你應該這樣做:
創建目錄: mkdir /tmp/chapter7_1
修改屬性: chown -R dmtsai:users /tmp/chapter7_1
修改權限: chmod -R 755 /tmp/chapter7_1
【7.4.1】文件默認權限:umask
1)umask 就是:指定 『目前使用者在創建文件或目錄時候的權限默認值』, 那么如何得知或配置 umask 呢?他的指定條件以底下的方式來指定:?
2)umask表示的是:該默認值需要減掉的權限;(干貨——umask)
(57)
-S == Symbolic(符號的)
補充1)怎么 umask 會有四組數字啊?不是只有三組嗎?是沒錯啦。第一組是特殊權限用的,我們先不要理他,所以先看后面三組即可。
補充2)默認的情況如下:
若使用者創建為『文件』則默認『沒有可運行( x )權限』,亦即只有 rw 這兩個項目,也就是最大為 666 分,默認權限如下: -rw-rw-rw-;又由于需要減去的權限umask=0022 ==? 022 == ----w--w- ,所以新建文件最后得到的權限是 -rw-r--r-- ;如上例所示;
若使用者創建為『目錄』,則由於 x 與是否可以進入此目錄有關,因此默認為所有權限均開放,亦即為 777 分,默認權限如下:drwxrwxrwx;又由于需要減去的權限umask=0022 ==? 022 == ----w--w- ,所以新建文件最后得到的權限是 drwxr-xr-x ;如上例所示;
總結如下)
創建文件時:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--
創建目錄時:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x
3)如何設置umask?直接在 umask 后面輸入 002 就好了!
(58)
例題)假設你的 umask 為 003 ,請問該 umask 情況下,創建的文件與目錄權限為?
答:
umask 為 003 ,所以拿掉的權限為 --------wx,因此:
文件: (-rw-rw-rw-) - (--------wx) = -rw-rw-r--
目錄: (drwxrwxrwx) - (--------wx) = drwxrwxr--
umask總結)在默認的情況中, root 的 umask 會拿掉比較多的屬性,root 的 umask 默認是 022 , 這是基於安全的考量啦~至於一般身份使用者,通常他們的 umask 為 002 ,亦即保留同群組的寫入權力!?
【7.4.2】文件隱藏屬性 chattr lsattr
1)不過要先強調的是:底下的chattr命令只能在Ext2/Ext3的文件系統上面生效, 其他的文件系統可能就無法支持這個命令了。
2)底下我們就來談一談如何配置與檢查這些隱藏的屬性吧!
(59)
補充)注意:屬性配置常見的是 a 與 i 的配置值,而且很多配置值必須要身為 root 才能配置;
a? :當配置 a 之后,這個文件將只能添加數據,而不能刪除也不能修改數據,只有root?
? ? ?才能配置這個屬性。?
i? :這個 i 可就很厲害了!他可以讓一個文件『不能被刪除、改名、配置連結也無法
? ? ?寫入或新增數據!』對於系統安全性有相當大的助益!只有 root 能配置此屬性;
(60)
3)lsattr (顯示文件隱藏屬性)
(61)
(62)
【7.4.3】文件特殊權限:SUID, SGID, SBIT
【荔枝】看看 那個 /usr/bin/passwd 的隱藏權限, 如下:
(63)怎么會是 -rwsr-xr-x; s 表示什么?
1)Set UID == SUID(針對文件的權限)
當 s 這個標志出現在文件擁有者的 x 權限上時,例如剛剛提到的 /usr/bin/passwd 這個文件的權限狀態:『-rwsr-xr-x』,此時就被稱為 Set UID,簡稱為 SUID 的特殊權限。 1.1)那么SUID的權限對於一個文件的特殊功能是什么呢?基本上SUID有這樣的限制與功能:
? ● SUID 權限僅對二進位程序(binary program)有效;
? ● 運行者對於該程序需要具有 x 的可運行權限;
? ● 本權限僅在運行該程序的過程中有效 (run-time);
? ● 運行者將具有該程序擁有者 (owner) 的權限。
1.2)SUID荔枝(非常重要的荔枝):我們的 Linux 系統中,所有帳號的密碼都記錄在 /etc/shadow 這個文件里面,這個文件的權限為:『-r-------- 1 root root』,意思是這個文件僅有root可讀且僅有root可以強制寫入而已。 既然這個文件僅有 root 可以修改,那么鳥哥的 vbird 這個一般帳號使用者能否自行修改自己的密碼呢? 你可以使用你自己的帳號輸入『passwd』這個命令來看看,嘿嘿!一般使用者當然可以修改自己的密碼了!
1.3)藉由上述的功能說明,我們可以知道:
? ● vbird 對於 /usr/bin/passwd 這個程序來說是具有 x 權限的,表示 vbird 能運行 passwd;
? ● passwd 的擁有者是 root 這個帳號;
? ● vbird 運行 passwd 的過程中,會『暫時』獲得 root 的權限;
? ● /etc/shadow 就可以被 vbird 所運行的 passwd 所修改。
【注意】SUID 僅可用在binary program 上, 不能夠用在 shell script 上面!SUID權限對于目錄也是無效的;
2.0)當 s 標志在文件擁有者的 x 項目為 SUID,那 s 在群組的 x 時則稱為 Set GID, SGID 羅!是這樣沒錯!^_^。 舉例來說,你可以用底下的命令來觀察到具有 SGID 權限的文件喔:?
(64)
2.1)如果是對文件來說, SGID 有如下的功能:
? ● SGID 對二進位程序有用;
? ● 程序運行者對於該程序來說,需具備 x 的權限;
? ● 運行者在運行的過程中將會獲得該程序群組的支持!
【荔枝】舉例來說,你可以用底下的命令來觀察到具有 SGID 權限的文件喔:
(65)
2.2)當一個目錄配置了 SGID 的權限后,他將具有如下的功能:
? ● 使用者若對於此目錄具有 r 與 x 的權限時,該使用者能夠進入此目錄;
? ● 使用者在此目錄下的有效群組(effective group)將會變成該目錄的群組;
? ● 用途:若使用者在此目錄下具有 w 的權限(可以新建文件),則使用者所創建的新文件,該新文件的群組與此目錄的群組相同。
3)Sticky Bit: 這個 Sticky Bit, SBIT 目前只針對目錄有效,對於文件已經沒有效果了。 SBIT 對於目錄的作用是:
? ● 當使用者對於此目錄具有 w, x 權限,亦即具有寫入的權限時;
? ● 當使用者在該目錄下創建文件或目錄時,僅有自己與 root 才有權力刪除該文件;
4)換句話說:當甲這個使用者於 A 目錄是具有群組或其他人的身份,并且擁有該目錄 w 的權限, 這表示『甲使用者對該目錄內任何人創建的目錄或文件均可進行 "刪除/更名/搬移" 等動作。』 不過,如果將 A 目錄加上了 SBIT 的權限項目時, 則甲只能夠針對自己創建的文件或目錄進行刪除/更名/移動等動作,而無法刪除他人的文件。
【荔枝】舉例來說,我們的 /tmp 本身的權限是『drwxrwxrwt』, 在這樣的權限內容下,任何人都可以在 /tmp 內新增、修改文件,但僅有該文件/目錄創建者與 root 能夠刪除自己的目錄或文件。這個特性也是挺重要的啊!你可以這樣做個簡單的測試:
? ● 以 root 登陸系統,并且進入 /tmp 當中;
? ● touch test,并且更改 test 權限成為 777 ;
? ● 以一般使用者登陸,并進入 /tmp;
? ● 嘗試刪除 test 這個文件!
5)SUID/SGID/SBIT 權限配置:如何配置文件使成為具有 SUID 與 SGID 的權限呢?
那么如果在這三個數字之前再加上一個數字的話,最前面的那個數字就代表這幾個權限了!
4 為 SUID
2 為 SGID
1 為 SBIT
【荔枝】 假設要將一個文件權限改為『-rwsr-xr-x』時,由於 s 在使用者權限中,所以是 SUID ,因此, 在原先的 755 之前還要加上 4 ,也就是:『 chmod 4755 filename 』來配置!此外,還有大 S 與大 T 的產生喔!參考底下的范例啦!
注意:你必須了解 SUID 不是用在目錄上,而 SBIT 不是用在文件上的喔!
【荔枝】SUID SGID權限操作
(66)
補充1)chmod 7666 test; ls -l test : user, group 以及 others 都沒有 x 這個可運行的標志( 因為 666 嘛 ),所以,這個 S, T 代表的就是『空的』啦!怎么說? SUID 是表示『該文件在運行的時候,具有文件擁有者的權限』,但是文件 擁有者都無法運行了,哪里來的權限給其他人使用?當然就是空的啦! ^_^
補充2)s 和 t 權限 是基于 x 權限的;如果文件的 user, group 或 others 沒有x權限,則其對應的s和t權限是空的,即大S 或 大T;
6)以透過符號法來處理喔!其中 SUID 為 u+s ,而 SGID 為 g+s ,SBIT 則是 o+t 羅!來看看如下的范例:
(67)
(68)
【7.4.4】查看文件類型:file
1)如果你想要知道某個文件的基本數據,例如是屬於 ASCII 或者是 data 文件,或者是 binary , 且其中有沒有使用到動態函式庫 (share library) 等等的資訊,就可以利用 file 這個命令來檢閱喔!
(69)
【7.5】命令與文件的查詢
【7.5.1】腳本文件名的查詢
1)命令的完整文件名放置在哪里? 通過 which 或 type來查找;
2)which:尋找執行文件;
(70)
【荔枝】如下:
(71)
補充1)which命令是根據『PATH』這個環境變量所規范的路徑,去搜尋『運行檔』的檔名~ 所以,重點是找出『運行檔』而已!且 which 后面接的是『完整檔名』喔!若加上 -a 選項,則可以列出所有的可以找到的同名運行檔,而非僅顯示第一個而已!
補充2)怎么 cd 這個常用的命令竟然找不到啊!為什么呢? 這是因為 cd 是『bash 內建的命令』啦! 但是 which 默認是找 PATH 內所規范的目錄,所以當然一定找不到的啊!那怎辦?沒關系!我們可以透過 type 這個命令喔!
【7.5.2】文件名的查找
1)通常我們都是先使用 whereis 或者是 locate 來檢查,如果真的找不到了,才以 find 來搜尋呦!
2)文件名查找命令列表:
- whereis:搜索速度快,利用數據庫來搜尋數據;
- locate:搜索速度快,利用數據庫來搜尋數據;
- find:搜索速度慢,直接搜索硬盤;
(72)
【荔枝】如下:
(73)
(74)
補充) 因為 Linux 系統會將系統內的所有文件都記錄在一個數據庫文件里面, 而當使用 whereis 或者是底下要說的 locate 時,都會以此數據庫文件的內容為準, 因此,有的時后你還會發現使用這兩個運行檔時,會找到已經被殺掉的文件! 而且也找不到最新的剛剛創建的文件呢!這就是因為這兩個命令是由數據庫當中的結果去搜尋文件的所在啊! 數據庫中的文件記錄 與 實際磁盤的文件記錄信息不一致。
2.2)locate(搜索速度快,利用數據庫來搜尋數據)
(75)
? ● (76)
? ● 補充1)因為 locate 尋找的數據是由『已創建的數據庫 /var/lib/mlocate/』 里面的數據所搜尋到的,所以不用直接在去硬盤當中存取數據,呵呵!當然是很快速羅!
? ● 補充2)那么有什么限制呢?? 就是因為他是經由數據庫來搜尋的,而數據庫的創建默認是在每天運行一次 (每個 distribution 都不同,CentOS 5.x 是每天升級數據庫一次!),所以當你新創建起來的文件, 卻還在數據庫升級之前搜尋該文件,那么 locate 會告訴你『找不到!』呵呵!因為必須要升級數據庫呀!
? ● 補充3)那能否手動升級數據庫哪? 升級 locate 數據庫的方法非常簡單,直接輸入『 updatedb 』就可以了!?
? ● 補充4)updatedb:根據 /etc/updatedb.conf 的配置去搜尋系統硬盤內的檔名,并升級 /var/lib/mlocate 內的數據庫文件;
? ● 補充5)locate:依據 /var/lib/mlocate 內的數據庫記載,找出使用者輸入的關鍵字檔名。
2.3)find(搜索速度慢,直接搜索硬盤)
(77)
荔枝1)將過去系統上面 24 小時內有更動過內容 (mtime) 的文件列出:
(78)
荔枝2)尋找 /etc 底下的文件,如果文件日期比 /etc/passwd 新就列出:
(79)
【補充】find 相關的時間參數意義:
(80)+4代表大於等於5天前的檔名:ex> find /var -mtime +4
-4代表小於等於4天內的文件檔名:ex> find /var -mtime -4
4則是代表4-5那一天的文件檔名:ex> find /var -mtime 4
2.3.1)find的其他用法:
(81)
(82)
荔枝1)搜尋 /home 底下屬於 pacoson 的文件:
(83)
荔枝2)搜尋系統中不屬於任何人的文件:
(84)
2.3.2)find的其他用法2:
(85)荔枝1)找出檔名為 passwd 這個文件
(86)
荔枝2)找出 /var 目錄下,文件類型為 Socket 的檔名有哪些?
(87)
荔枝3)搜尋文件當中含有 SGID 或 SUID 或 SBIT 的屬性;
(88)
荔枝4)我想要找出來 /bin, /sbin 這兩個目錄下, 只要具有 SUID 或 SGID 就列出來該文件,你可以這樣做:
(89)
補充)因為 SUID 是 4 分,SGID 2 分,總共為 6 分,因此可用 +6000 來處理這個權限! 至於 find 后面可以接多個目錄來進行搜尋!
2.3.3)find的其他用法3:
(90)
(91)
荔枝1)將上個范例找到的文件使用 ls -l 列出來~
(92)
荔枝2)找出系統中,大於 1MB 的文件
(93)
補充1)find 的特殊功能就是能夠進行額外的動作(action):圖解如下:
(94)
補充2)該范例中特殊的地方有 {} 以及 \; 還有 -exec 這個關鍵字,這些東西的意義為:?
? ● {} 代表的是『由 find 找到的內容』,如上圖所示,find 的結果會被放置到 {} 位置中;
? ● -exec 一直到 \; 是關鍵字,代表 find 額外動作的開始 (-exec) 到結束 (\;) ,在這中間的就是 find 命令內的額外動作。 在本例中就是『 ls -l {} 』羅!
? ● 因為『 ; 』在 bash 環境下是有特殊意義的,因此利用反斜線來跳脫。
補充3)如果你要找的文件是具有特殊屬性的,例如 SUID 、文件擁有者、文件大小等等, 那么利用 locate 是沒有辦法達成你的搜尋的!此時 find 就顯的很重要啦! 另外,find 還可以利用通配符來找文件名呢!
荔枝)舉例來說,你想要找出 /etc 底下檔名包含 httpd 的文件, 那么你就可以這樣做:
(95)
【7.6】權限與命令間的關系(非常重要)(1804040012)
說明一下什么命令在什么樣的權限下才能夠運行吧!^_^一、讓使用者能進入某目錄成為『可工作目錄』的基本權限為何:
? ● 可使用的命令:例如 cd 等變換工作目錄的命令;
? ● 目錄所需權限:使用者對這個目錄至少需要具有 x 的權限;
? ● 額外需求:如果使用者想要在這個目錄內利用 ls 查閱檔名,則使用者對此目錄還需要 r 的權限。
二、使用者在某個目錄內讀取一個文件的基本權限為何?
? ● 可使用的命令:例如本章談到的 cat, more, less等等;
? ● 目錄所需權限:使用者對這個目錄至少需要具有 x 權限;
? ● 文件所需權限:使用者對文件至少需要具有 r 的權限才行!
三、讓使用者可以修改一個文件的基本權限為何?
? ● 可使用的命令:例如 nano 或未來要介紹的 vi 編輯器等;
? ● 目錄所需權限:使用者在該文件所在的目錄至少要有 x 權限;
? ● 文件所需權限:使用者對該文件至少要有 r, w 權限。
四、讓一個使用者可以創建一個文件的基本權限為何?
? ● 目錄所需權限:使用者在該目錄要具有 w,x 的權限,重點在 w 啦!
五、讓使用者進入某目錄并運行該目錄下的某個命令之基本權限為何?
? ● 目錄所需權限:使用者在該目錄至少要有 x 的權限;
? ● 文件所需權限:使用者在該文件至少需要有 x 的權限。
例題)讓一個使用者 pacoson 能夠進行『cp /dir1/file1 /dir2』的命令時,請說明 dir1, file1, dir2 的最小所需權限為何?
答:
運行 cp 時, pacoson 要『能夠讀取來源檔,并且寫入目標檔!』 因此各文件/目錄的最小權限應該是:
dir1 :至少需要有 x 權限;
file1:至少需要有 r 權限;
dir2 :至少需要有 w, x 權限。
【7.7】linux文件與目錄管理重點回顧
? ● 絕對路徑:『一定由根目錄 / 寫起』;相對路徑:『不是由 / 寫起』
? ● 特殊目錄有:., .., -, ~, ~account需要注意;
? ● 與目錄相關的命令有:cd, mkdir, rmdir, pwd 等重要命令;
? ● rmdir 僅能刪除空目錄,要刪除非空目錄需使用『 rm -r 』命令;
? ● 使用者能使用的命令是依據 PATH 變量所規定的目錄去搜尋的;
? ● 不同的身份(root 與一般用戶)系統默認的 PATH 并不相同。差異較大的地方在於 /sbin, /usr/sbin ;
? ● ls 可以檢視文件的屬性,尤其 -d, -a, -l 等選項特別重要!
? ● 文件的復制、刪除、移動可以分別使用:cp, rm , mv等命令來操作;
? ● 檢查文件的內容(讀檔)可使用的命令包括有:cat, tac, nl, more, less, head, tail, od 等
? ● cat -n 與 nl 均可顯示行號,但默認的情況下,空白行會不會編號并不相同;
? ● touch 的目的在修改文件的時間參數,但亦可用來創建空文件;
? ● 一個文件記錄的時間參數有三種,分別是 access time(atime), status time (ctime), modification time(mtime),ls 默認顯示的是 mtime。
? ● 除了傳統的rwx權限之外,在Ext2/Ext3文件系統中,還可以使用chattr與lsattr配置及觀察隱藏屬性。 常見的包括只能新增數據的 +a 與完全不能更動文件的 +i 屬性。
? ● 新建文件/目錄時,新文件的默認權限使用 umask 來規范。默認目錄完全權限為drwxrwxrwx, 文件則為-rw-rw-rw-。
? ● 文件具有SUID的特殊權限時,代表當使用者運行此一binary程序時,在運行過程中使用者會暫時具有程序擁有者的權限
? ● 目錄具有SGID的特殊權限時,代表使用者在這個目錄底下新建的文件之群組都會與該目錄的群組名稱相同。
? ● 目錄具有SBIT的特殊權限時,代表在該目錄下使用者創建的文件只有自己與root能夠刪除!
? ● 觀察文件的類型可以使用 file 命令來觀察;
? ● 搜尋命令的完整檔名可用 which 或 type ,這兩個命令都是透過 PATH 變量來搜尋檔名;
? ● 搜尋文件的完整檔名可以使用 whereis 或 locate 到數據庫文件去搜尋,而不實際搜尋文件系統;
? ● 利用 find 可以加入許多選項來直接查詢文件系統,以獲得自己想要知道的檔名。
總結
以上是生活随笔為你收集整理的linux-basic(7)linux文件与目录管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 空间模板怎么删除(空间模板怎么删除文件)
- 下一篇: df、du和fdisk命令的区别