1.1 相對路徑與絕對路徑
1.2 目錄的相關操做: cd, pwd, mkdir, rmdir
1.3 關於運行檔路徑的變量: $PATHphp
相對路徑與絕對路徑 。。。 目錄的相關操做 cd(change directory):變換目錄 . 表明此層目錄 .. 表明上層目錄 - 表明前一個工做目錄 ~ 表明當前用戶身份所在的家目錄 ~account 表明account這個用戶的家目錄 pwd(print working directory):顯示當前目錄 pwd [-P] -P:顯示出確實的路徑,而非使用連接(link)路徑
mkdir(make directory):創建新目錄 -m XXX:配置文件案的權限,直接設定,不準要看預設權限(umask)的臉色 注:若是沒有加上-m來強制設定屬性,系統會使用默認屬性 -p:幫助你直接將所需的目錄(包含上層目錄)遞歸的創建起來,如 mkdir test1/test2/test3將出錯,而mkdir -p test1/test2/test3將遞歸的建立這兩個目錄,而且若是test2原本就存在,系統也不會報錯 注:命令 mkdir -p -m 744 test3/test4 只會將test4的權限設爲744,而test3的權限將由系統默認屬性決定
rmdir:刪除一個空目錄 -p:連同上層[空的]目錄一塊兒刪除 注:目錄須要一層一層的刪除,並且被刪除的目錄裏面一定不能存在其餘的目錄或檔案。 注:命令rmdir -p test1/test2/test3 ,若是三個目錄都是空的,則能夠所有刪除,如果其中有一個文件夾內有文件,則只能刪除到該文件夾,如test1中由其餘文件,以下 hong@PC:/tmp$ mkdir -p test1/test2/test3 hong@PC:/tmp$ cd test1 hong@PC:/tmp/test1$ touch file1 hong@PC:/tmp/test1$ cd .. hong@PC:/tmp$ rmdir -p test1/test2/test3/ rmdir: failed to remove directory ‘test1’: Directory not empty hong@PC:/tmp$ cd test1/ hong@PC:/tmp/test1$ ls file1
關於執行文件路徑的變量:$PATH 當咱們在執行一個指令的時候,如ls,系統會按照PATH的設定無每一個PATH定義的目錄下 echo $PATH:查看PATH的設定 不一樣身份使用者預設的PATH不一樣,默認可以隨意執行的命令也不一樣(如root和vbird) PATH是能夠修改的,因此通常使用者仍是能夠透過修改PATH來執行某些位於/sbin或/usr/sbin下的指令來查詢 使用絕對路徑或相對路徑直接指定某個指令的文件名來執行,會比搜尋PATH來的正確 指令應該放置到正確的目錄下,執行纔會比較方便 本目錄(.)最好不要放在PATH當中 注:對於PATH更詳細的說明
2.1 文件與目錄的檢視: ls
2.2 複製、刪除與移動: cp, rm, mv
2.3 取得路徑的文件名稱與目錄名稱html
文件與目錄的檢視:ls [root@www ~]# ls [-aAdfFhilnrRSt] 目錄名稱 [root@www ~]# ls [--color={never,auto,always}] 目錄名稱 [root@www ~]# ls [--full-time] 目錄名稱 選項與參數: -a :所有的文件,連同隱藏檔( 開頭爲 . 的文件) 一塊兒列出來(經常使用) -A :所有的文件,連同隱藏檔,但不包括 . 與 .. 這兩個目錄 -d :僅列出目錄自己,而不是列出目錄內的文件數據(經常使用) -f :直接列出結果,而不進行排序 (ls 默認會以檔名排序!) -F :根據文件、目錄等資訊,給予附加數據結構,例如: *:表明可運行檔; /:表明目錄; =:表明 socket 文件; |:表明 FIFO 文件; -h :將文件容量以人類較易讀的方式(例如 GB, KB 等等)列出來; -i :列出 inode 號碼,inode 的意義下一章將會介紹; -l :長數據串列出,包含文件的屬性與權限等等數據;(經常使用) -n :列出 UID 與 GID 而非使用者與羣組的名稱 (UID與GID會在賬號管理提到!) -r :將排序結果反向輸出,例如:本來檔名由小到大,反向則爲由大到小; -R :連同子目錄內容一塊兒列出來,等於該目錄下的全部文件都會顯示出來; -S :以文件容量大小排序,而不是用檔名排序; -t :依時間排序,而不是用檔名。 --color=never :不要依據文件特性給予顏色顯示; --color=always :顯示顏色 --color=auto :讓系統自行依據配置來判斷是否給予顏色 --full-time :以完整時間模式 (包含年、月、日、時、分) 輸出 --time={atime,ctime} :輸出 access 時間或改變權限屬性時間 (ctime),而非內容變動時間 (modification time) 當你只有下達 ls 時,默認顯示的只有:非隱藏檔的檔名、 以檔名進行排序及檔名錶明的顏色顯示如此而已。
複製、刪除、移動 cp! [root@www ~]# cp [-adfilprsu] 來源檔(source) 目標檔(destination) [root@www ~]# cp [options] source1 source2 source3 .... directory 選項與參數: -a :至關於 -pdr 的意思,至於 pdr 請參考下列說明;(經常使用) -d :若來源檔爲連結檔的屬性(link file),則複製連結檔屬性而非文件自己; -f :爲強制(force)的意思,若目標文件已經存在且沒法開啓,則移除後再嘗試一次; -i :若目標檔(destination)已經存在時,在覆蓋時會先詢問動做的進行(經常使用) -l :進行硬式連結(hard link)的連結檔建立,而非複製文件自己; -p :連同文件的屬性一塊兒複製過去,而非使用默認屬性(備份經常使用); -r :遞迴持續複製,用於目錄的複製行爲;(經常使用) -s :複製成爲符號連結檔 (symbolic link),亦即『捷徑』文件; -u :若 destination 比 source 舊才升級 destination ! 最後須要注意的,若是來源檔有兩個以上,則最後一個目的檔必定要是『目錄』才行! 複製(cp)這個命令是很是重要的,不一樣身份者運行這個命令會有不一樣的結果產生,尤爲是那個-a, -p的選項, 對於不一樣身份來講,差別則很是的大! 範例一:用root身份,將家目錄下的 .bashrc 複製到 /tmp 下,並改名爲 bashrc [root@www ~]# cp ~/.bashrc /tmp/bashrc [root@www ~]# cp -i ~/.bashrc /tmp/bashrc cp: overwrite `/tmp/bashrc'? n <==n不覆蓋,y爲覆蓋 # 重複做兩次動做,由於 /tmp 底下已經存在 bashrc 了,加上 -i 選項後, # 則在覆蓋前會詢問使用者是否肯定!能夠按下 n 或者 y 來二次確認呢! 範例二:變換目錄到/tmp,並將/var/log/wtmp複製到/tmp且觀察屬性: [root@www ~]# cd /tmp [root@www tmp]# cp /var/log/wtmp . <==想要複製到目前的目錄,最後的 . 不要忘 [root@www tmp]# ls -l /var/log/wtmp wtmp -rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp -rw-r--r-- 1 root root 96384 Sep 24 14:06 wtmp # 注意上面的特殊字體,在不加任何選項的狀況下,文件的某些屬性/權限會改變; # 這是個很重要的特性!要注意喔!還有,連文件建立的時間也不同了! # 那若是你想要將文件的全部特性都一塊兒複製過來該怎辦?能夠加上 -a 喔!以下所示: [root@www tmp]# cp -a /var/log/wtmp wtmp_2 [root@www tmp]# ls -l /var/log/wtmp wtmp_2 -rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp -rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 wtmp_2 # 了了吧!整個數據特性徹底如出一轍ㄟ!真是不賴~這就是 -a 的特性! 通常來講,咱們若是去複製別人的數據 (固然,該文件你必需要有 read 的權限才行啊! ^_^) 時, 老是但願複製到的數據最後是咱們本身的,因此,在默認的條件中, cp 的來源檔與目的檔的權限是不一樣的,目的檔的擁有者一般會是命令操做者自己。 由於具備這個特性,所以當咱們在進行備份的時候,某些須要特別注意的特殊權限文件, 例如密碼檔 (/etc/shadow) 以及一些配置檔,就不能直接以 cp 來複制,而必需要加上 -a 或者是 -p 等等能夠完整複製文件權限的選項才行!另外,若是你想要複製文件給其餘的使用者, 也必需要注意到文件的權限(包含讀、寫、運行以及文件擁有者等等), 不然,其餘人仍是沒法針對你給予的文件進行修訂的動做喔!注意注意! 範例三:複製 /etc/ 這個目錄下的全部內容到 /tmp 底下 [root@www tmp]# cp /etc/ /tmp cp: omitting directory `/etc' <== 若是是目錄則不能直接複製,要加上 -r 的選項 [root@www tmp]# cp -r /etc/ /tmp # 仍是要再次的強調喔! -r 是能夠複製目錄,可是,文件與目錄的權限可能會被改變 # 因此,也能夠利用『 cp -a /etc /tmp 』來下達命令喔!尤爲是在備份的狀況下! 範例四:將範例一複製的 bashrc 建立一個連結檔 (symbolic link) [root@www tmp]# ls -l bashrc -rw-r--r-- 1 root root 176 Sep 24 14:02 bashrc <==先觀察一下文件狀況 [root@www tmp]# cp -s bashrc bashrc_slink [root@www tmp]# cp -l bashrc bashrc_hlink [root@www tmp]# ls -l bashrc* -rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc <==與原始文件不太同樣了! -rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc_hlink lrwxrwxrwx 1 root root 6 Sep 24 14:20 bashrc_slink -> bashrc 範例五:若 ~/.bashrc 比 /tmp/bashrc 新才複製過來 [root@www tmp]# cp -u ~/.bashrc /tmp/bashrc # 這個 -u 的特性,是在目標文件與來源文件有差別時,纔會複製的。 # 因此,比較常被用於『備份』的工做當中喔! ^_^ 範例六:將範例四形成的 bashrc_slink 複製成爲 bashrc_slink_1 與bashrc_slink_2 [root@www tmp]# cp bashrc_slink bashrc_slink_1 [root@www tmp]# cp -d bashrc_slink bashrc_slink_2 [root@www tmp]# ls -l bashrc bashrc_slink* -rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc lrwxrwxrwx 1 root root 6 Sep 24 14:20 bashrc_slink -> bashrc -rw-r--r-- 1 root root 176 Sep 24 14:32 bashrc_slink_1 <==與原始文件相同 lrwxrwxrwx 1 root root 6 Sep 24 14:33 bashrc_slink_2 例題: 你可否使用vbird的身份,完整的複製/var/log/wtmp文件到/tmp底下,並改名爲vbird_wtmp呢? 答: 實際作看看的結果以下: [vbird@www ~]$ cp -a /var/log/wtmp /tmp/vbird_wtmp [vbird@www ~]$ ls -l /var/log/wtmp /tmp/vbird_wtmp -rw-rw-r-- 1 vbird vbird 96384 9月 24 11:54 /tmp/vbird_wtmp -rw-rw-r-- 1 root utmp 96384 9月 24 11:54 /var/log/wtmp 由於vbird的身份並不能隨意修改文件的擁有者與羣組,所以雖然可以複製wtmp的相關權限與時間等屬性, 可是與擁有者、羣組相關的,本來vbird身份沒法進行的動做,即便加上 -a 選項,也是沒法達成完整複製權限的-> bashrc <==是連結檔! # 這個例子也是頗有趣喔!本來複制的是連結檔,可是卻將連結檔的實際文件複製過來了 # 也就是說,若是沒有加上任何選項時,cp複製的是原始文件,而非連結檔的屬性! # 若要複製連結檔的屬性,就得要使用 -d 的選項了!如 bashrc_slink_2 所示。 範例七:將家目錄的 .bashrc 及 .bash_history 複製到 /tmp 底下 [root@www tmp]# cp ~/.bashrc ~/.bash_history /tmp # 能夠將多個數據一次複製到同一個目錄去!最後面必定是目錄 注:在複製時,你必需要清楚的瞭解到: 是否須要完整的保留來源文件的資訊? 來源文件是否爲連結檔 (symbolic link file)? 來源檔是否爲特殊的文件,例如 FIFO, socket 等? 來源檔是否爲目錄?
rm (移除文件或目錄) [root@www ~]# rm [-fir] 文件或目錄 選項與參數: -f :就是 force 的意思,忽略不存在的文件,不會出現警告信息; -i :互動模式,在刪除前會詢問使用者是否動做 -r :遞迴刪除啊!最經常使用在目錄的刪除了!這是很是危險的選項!!! 範例一:將剛剛在 cp 的範例中建立的 bashrc 刪除掉! [root@www ~]# cd /tmp [root@www tmp]# rm -i bashrc rm: remove regular file `bashrc'? y # 若是加上 -i 的選項就會主動詢問喔,避免你刪除到錯誤的檔名! 範例二:透過萬用字節*的幫忙,將/tmp底下開頭爲bashrc的檔名統統刪除: [root@www tmp]# rm -i bashrc* # 注意那個星號,表明的是 0 到無窮多個任意字節喔!很好用的東西! 範例三:將 cp 範例中所建立的 /tmp/etc/ 這個目錄刪除掉! [root@www tmp]# rmdir /tmp/etc rmdir: etc: Directory not empty <== 刪不掉啊!由於這不是空的目錄! [root@www tmp]# rm -r /tmp/etc rm: descend into directory `/tmp/etc'? y ....(中間省略).... # 由於身份是 root ,默認已經加入了 -i 的選項,因此你要一直按 y 纔會刪除! # 若是不想要繼續按 y ,能夠按下『 [ctrl]-c 』來結束 rm 的工做。 # 這是一種保護的動做,若是肯定要刪除掉此目錄而不要詢問,能夠這樣作: [root@www tmp]# \rm -r /tmp/etc # 在命令前加上反斜線,能夠忽略掉 alias 的指定選項喔!至於 alias 咱們在bash再談! 範例四:刪除一個帶有 - 開頭的文件 [root@www tmp]# touch ./-aaa- <==touch這個命令能夠建立空文件! [root@www tmp]# ls -l -rw-r--r-- 1 root root 0 Sep 24 15:03 -aaa- <==文件大小爲0,因此是空文件 [root@www tmp]# rm -aaa- Try `rm --help' for more information. <== 由於 "-" 是選項嘛!因此係統誤判了! [root@www tmp]# rm ./-aaa- 其實還有一種方法,那就是『 rm -- -aaa- 』也能夠啊!
mv(移動檔案與目錄,或改名) [root@www ~]# mv [-fiu] source destination [root@www ~]# mv [options] source1 source2 source3 .... directory 選項與參數: -f :force 強制的意思,若是目標文件已經存在,不會詢問而直接覆蓋; -i :若目標文件 (destination) 已經存在時,就會詢問是否覆蓋! -u :若目標文件已經存在,且 source 比較新,纔會升級 (update) 範例一:複製一文件,建立一目錄,將文件移動到目錄中 [root@www ~]# cd /tmp [root@www tmp]# cp ~/.bashrc bashrc [root@www tmp]# mkdir mvtest [root@www tmp]# mv bashrc mvtest # 將某個文件移動到某個目錄去,就是這樣作! 範例二:將剛剛的目錄名稱改名爲 mvtest2 [root@www tmp]# mv mvtest mvtest2 <== 這樣就改名了!簡單~ # 其實在 Linux 底下還有個有趣的命令,名稱爲 rename , # 該命令專職進行多個檔名的同時改名,並不是針對單一檔名變動,與mv不一樣。請man rename。 範例三:再建立兩個文件,再所有移動到 /tmp/mvtest2 當中 [root@www tmp]# cp ~/.bashrc bashrc1 [root@www tmp]# cp ~/.bashrc bashrc2 [root@www tmp]# mv bashrc1 bashrc2 mvtest2 # 注意到這邊,若是有多個來源文件或目錄,則最後一個目標檔必定是『目錄!』 # 意思是說,將全部的數據移動到該目錄的意思!
取得路徑的文件名稱與目錄名稱 [root@www ~]# basename /etc/sysconfig/network network <== 很簡單!就取得最後的檔名~ [root@www ~]# dirname /etc/sysconfig/network /etc/sysconfig <== 取得的變成目錄名了!
3.1 直接檢視文件內容: cat, tac, nl
3.2 可翻頁檢視: more, less
3.3 數據擷取: head, tail
3.4 非純文字檔: od
3.5 修改文件時間與建置新檔: touchnode
cat 由第一行開始顯示文件內容 tac 從最後一行開始顯示,能夠看出 tac 是 cat 的倒著寫! nl 顯示的時候,順道輸出行號! more 一頁一頁的顯示文件內容 less 與 more 相似,可是比 more 更好的是,他能夠往前翻頁! head 只看頭幾行 tail 只看尾巴幾行 od 以二進位的方式讀取文件內容!
直接檢查文件內容*************************************************************** cat(concatenate): 正向列示 [root@www ~]# cat [-AbEnTv] 選項與參數: -A :至關於 -vET 的整合選項,可列出一些特殊字符而不是空白而已; -b :列出行號,僅針對非空白行作行號顯示,空白行不標行號! -E :將結尾的斷行字節 $ 顯示出來; -n :列印出行號,連同空白行也會有行號,與 -b 的選項不一樣; -T :將 [tab] 按鍵以 ^I 顯示出來; -v :列出一些看不出來的特殊字符 tac(反向列示) 由最後一行到第一行反向在屏幕上顯示出來 nl(添加行號列印) [root@www ~]# nl [-bnw] 文件 選項與參數: -b :指定行號指定的方式,主要有兩種: -b a :表示不管是否爲空行,也一樣列出行號(相似 cat -n); -b t :若是有空行,空的那一行不要列出行號(默認值);(相似cat -b) -n :列出行號表示的方法,主要有三種: -n ln :行號在螢幕的最左方顯示; -n rn :行號在本身欄位的最右方顯示,且不加 0 ; -n rz :行號在本身欄位的最右方顯示,且加 0 ; -w :行號欄位的佔用的位數。 範例一:用 nl 列出 /etc/issue 的內容 [root@www ~]# nl /etc/issue 1 CentOS release 5.3 (Final) 2 Kernel \r on an \m # 注意看,這個文件其實有三行,第三行爲空白(沒有任何字節), # 由於他是空白行,因此 nl 不會加上行號喔!若是肯定要加上行號,能夠這樣作: [root@www ~]# nl -b a /etc/issue 1 CentOS release 5.3 (Final) 2 Kernel \r on an \m 3 # 呵呵!行號加上來羅~那麼若是要讓行號前面自動補上 0 呢?可這樣 [root@www ~]# nl -b a -n rz /etc/issue 000001 CentOS release 5.3 (Final) 000002 Kernel \r on an \m 000003 # 嘿嘿!自動在本身欄位的地方補上 0 了~默認欄位是六位數,若是想要改爲 3 位數? [root@www ~]# nl -b a -n rz -w 3 /etc/issue 001 CentOS release 5.3 (Final) 002 Kernel \r on an \m 003 # 變成僅有 3 位數羅~ 注:nl 能夠將輸出的文件內容自動的加上行號!其默認的結果與 cat -n 有點不太同樣, nl 能夠將行號作比較多的顯示設計,包括位數與是否自動補齊 0 等等的功能呢。 可翻頁檢視 more 空白鍵 (space):表明向下翻一頁; Enter :表明向下翻『一行』; /字串 :表明在這個顯示的內容當中,向下搜尋『字串』這個關鍵字; :f :馬上顯示出檔名以及目前顯示的行數; q :表明馬上離開 more ,再也不顯示該文件內容。 b 或 [ctrl]-b :表明往回翻頁,不過這動做只對文件有用,對管線無用。 輸入了 / 以後,光標就會跑到最底下一行,而且等待你的輸入, 你輸入了字串並按下[enter]以後,嘿嘿! more 就會開始向下搜尋該字串羅~而重複搜尋同一個字串, 能夠直接按下 n 便可啊! less(一頁一頁翻動)(less更強一點) 空白鍵 :向下翻動一頁; [pagedown]:向下翻動一頁; [pageup] :向上翻動一頁; /字串 :向下搜尋『字串』的功能; ?字串 :向上搜尋『字串』的功能; n :重複前一個搜尋 (與 / 或 ? 有關!) N :反向的重複前一個搜尋 (與 / 或 ? 有關!) q :離開 less 這個程序; 注:由於man這個命令就是呼叫 less 來顯示說明文件的內容的! 如今你是否以爲 less 很重要呢? ^_^
數據擷取*************************************************** head(取出前面幾行) [root@www ~]# head [-n number] 文件 選項與參數: -n :後面接數字,表明顯示幾行的意思 [root@www ~]# head /etc/man.config # 默認的狀況中,顯示前面十行!若要顯示前 20 行,就得要這樣: [root@www ~]# head -n 20 /etc/man.config 範例:若是後面100行的數據都不列印,只列印/etc/man.config的前面幾行,該如何是好? [root@www ~]# head -n -100 /etc/man.config tail(取出後面幾行) [root@www ~]# tail [-n number] 文件 選項與參數: -n :後面接數字,表明顯示幾行的意思 -f :表示持續偵測後面所接的檔名,要等到按下[ctrl]-c纔會結束tail的偵測 [root@www ~]# tail /etc/man.config # 默認的狀況中,顯示最後的十行!若要顯示最後的 20 行,就得要這樣: [root@www ~]# tail -n 20 /etc/man.config 範例一:若是不知道/etc/man.config有幾行,卻只想列出100行之後的數據時? [root@www ~]# tail -n +100 /etc/man.config 範例二:持續偵測/var/log/messages的內容 [root@www ~]# tail -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 行之間的內容了! 可是裏面涉及到管線命令,須要在第三篇的時候纔講的到! 注:也可以使用命令 tail -n +11 /etc/man.config | head -n 10
非純文字檔:od ***************************************************** [root@www ~]# od [-t TYPE] 文件 選項或參數: -t :後面能夠接各類『類型 (TYPE)』的輸出,例如: a :利用默認的字節來輸出; c :使用 ASCII 字節來輸出 d[size] :利用十進位(decimal)來輸出數據,每一個整數佔用 size bytes ; f[size] :利用浮點數值(floating)來輸出數據,每一個數佔用 size bytes ; o[size] :利用八進位(octal)來輸出數據,每一個整數佔用 size bytes ; x[size] :利用十六進位(hexadecimal)來輸出數據,每一個整數佔用 size bytes ; 範例一:請將/usr/bin/passwd的內容使用ASCII方式來展示! [root@www ~]# od -t c /usr/bin/passwd 0000000 177 E L F 001 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \0 0000020 002 \0 003 \0 001 \0 \0 \0 260 225 004 \b 4 \0 \0 \0 0000040 020 E \0 \0 \0 \0 \0 \0 4 \0 \0 \a \0 ( \0 0000060 035 \0 034 \0 006 \0 \0 \0 4 \0 \0 \0 4 200 004 \b 0000100 4 200 004 \b 340 \0 \0 \0 340 \0 \0 \0 005 \0 \0 \0 .....(後面省略).... # 最左邊第一欄是以 8 進位來表示bytes數。以上面範例來講,第二欄0000020表明開頭是 # 第 16 個 byes (2x8) 的內容之意。 範例二:請將/etc/issue這個文件的內容以8進位列出儲存值與ASCII的對照表 [root@www ~]# od -t oCc /etc/issue 0000000 103 145 156 164 117 123 040 162 145 154 145 141 163 145 040 065 C e n t O S r e l e a s e 5 0000020 056 062 040 050 106 151 156 141 154 051 012 113 145 162 156 145 . 2 ( F i n a l ) \n K e r n e 0000040 154 040 134 162 040 157 156 040 141 156 040 134 155 012 012 l \ r o n a n \ m \n \n 0000057 # 如上所示,能夠發現每一個字節能夠對應到的數值爲什麼! # 例如e對應的記錄數值爲145,轉成十進位:1x8^2+4x8+5=101。 利用這個命令,能夠將 data file 或者是 binary file 的內容數據給他讀出來喔! 雖然讀出的來數值默認是使用非文字檔,亦便是 16 進位的數值來顯示的, 不過,咱們仍是能夠透過 -t c 的選項與參數來將數據內的字節以 ASCII 類型的字節來顯示, 雖然對於通常使用者來講,這個命令的用處可能不大,可是對於工程師來講, 這個命令能夠將 binary file 的內容做一個大體的輸出,他們能夠看得出東西的啦~ ^_^
修改文件時間或新建文檔***************************************** 每一個文件在linux底下都會記錄許多的時間參數, 實際上是有三個主要的變更時間,那麼三個時間的意義是什麼呢: modification time (mtime): 當該文件的『內容數據』變動時,就會升級這個時間!內容數據指的是文件的內容,而不是文件的屬性或權限喔! status time (ctime): 當該文件的『狀態 (status)』改變時,就會升級這個時間,舉例來講,像是權限與屬性被更改了,都會升級這個時間啊。 (?文件的屬性包括哪些?所屬組,所屬用戶?) access time (atime): 當『該文件的內容被取用』時,就會升級這個讀取時間 (access)。舉例來講,咱們使用 cat 去讀取 /etc/man.config , 就會升級該文件的 atime 了。 注:在ubuntu 14.04下,cat不會更新atime,但在centos 6.6中,cat會更新atime [root@www ~]# ls -l /etc/man.config -rw-r--r-- 1 root root 4617 Jan 6 2007 /etc/man.config [root@www ~]# ls -l --time=atime /etc/man.config -rw-r--r-- 1 root root 4617 Sep 25 17:54 /etc/man.config [root@www ~]# ls -l --time=ctime /etc/man.config -rw-r--r-- 1 root root 4617 Sep 4 18:03 /etc/man.config 在默認的狀況下,ls 顯示出來的是該文件的 mtime ,也就是這個文件的內容上次被更動的時間。 注:文件的時間是很重要的,由於,若是文件的時間誤判的話,可能會形成某些程序沒法順利的運行。 OK!那麼萬一我發現了一個文件來自將來,該如何讓該文件的時間變成『如今』的時刻呢? 很簡單啊!就用『touch』這個命令便可! [root@www ~]# touch [-acdmt] 文件 選項與參數: -a :僅修訂 access time; -c :僅修改文件的時間,若該文件不存在則不建立新文件; -d :後面能夠接欲修訂的日期而不用目前的日期,也可使用 --date="日期或時間" -m :僅修改 mtime ; -t :後面能夠接欲修訂的時間而不用目前的時間,格式爲[YYMMDDhhmm] 範例一:新建一個空的文件並觀察時間 [root@www ~]# cd /tmp [root@www tmp]# touch testtouch [root@www tmp]# ls -l testtouch -rw-r--r-- 1 root root 0 Sep 25 21:09 testtouch # 注意到,這個文件的大小是 0 呢!在默認的狀態下,若是 touch 後面有接文件, # 則該文件的三個時間 (atime/ctime/mtime) 都會升級爲目前的時間。若該文件不存在, # 則會主動的建立一個新的空的文件喔!例如上面這個例子! 範例二:將 ~/.bashrc 複製成爲 bashrc,假設複製徹底的屬性,檢查其日期 [root@www tmp]# cp -a ~/.bashrc bashrc [root@www tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc -rw-r--r-- 1 root root 176 Jan 6 2007 bashrc <==這是 mtime -rw-r--r-- 1 root root 176 Sep 25 21:11 bashrc <==這是 atime -rw-r--r-- 1 root root 176 Sep 25 21:12 bashrc <==這是 ctime 注:數據的內容與屬性是被複制過來的,所以文件內容時間(mtime)與原文件相同,可是因爲這個文件是剛被建立的,因此狀態時間(ctime)與讀取時間就便呈如今的時間了。 範例三:修改案例二的 bashrc 文件,將日期調整爲兩天前 [root@www tmp]# touch -d "2 days ago" bashrc [root@www tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc -rw-r--r-- 1 root root 176 Sep 23 21:23 bashrc -rw-r--r-- 1 root root 176 Sep 23 21:23 bashrc -rw-r--r-- 1 root root 176 Sep 25 21:23 bashrc # 跟上個範例比較看看,原本是 25 日的變成了 23 日了 (atime/mtime)~ # 不過, ctime 並無跟著改變喔! 範例四:將上個範例的 bashrc 日期改成 2007/09/15 2:02 [root@www tmp]# touch -t 0709150202 bashrc [root@www tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc -rw-r--r-- 1 root root 176 Sep 15 2007 bashrc -rw-r--r-- 1 root root 176 Sep 15 2007 bashrc -rw-r--r-- 1 root root 176 Sep 25 21:25 bashrc # 注意看看,日期在 atime 與 mtime 都改變了,可是 ctime 則是記錄目前的時間! 由以上的案例可知:即便咱們複製一個文件時,複製全部的屬性,但也沒有辦法複製ctime這個屬性的。ctime能夠記錄這個文件最近的狀態(status)被改變的時間。 不管如何, touch 這個命令最常被使用的狀況是: 建立一個空的文件; 將某個文件日期修訂爲目前 (mtime 與 atime)
4.1 文件默認權限:umask
4.2 文件隱藏屬性: chattr, lsattr
4.4 文件特殊權限:SUID, SGID, SBIT, 權限配置
4.3 觀察文件類型:filelinux
文件的默認權限******************************************************** 注:文件的屬性有:讀寫運行(rwx)等基本權限、是否爲目錄(d)、是否爲文件(-)或是鏈接檔(l)等等的屬性,(未完待續) 在Linux的Ext2/Ext3文件系統下,還能夠配置其餘的系統隱藏屬性,這部分可由chattr來配置,以lsattr來查看。最重要的屬性是配置其不可修改的特性,讓連文件的擁有者都不能進行修改!!! umask,用來制定目前使用者在建立文件或目錄時的權限默認值 umask的查閱方式: [root@www ~]# umask 0022 <==與通常權限有關的是後面三個數字! [root@www ~]# umask -S u=rwx,g=rx,o=rx 在默認權限的屬性上,目錄與文件是不同的。從第六章咱們知道 x 權限對於目錄是很是重要的! 可是通常文件的建立則不該該有運行的權限,由於通常文件一般是用在於數據的記錄嘛!固然不須要運行的權限了。 所以,默認的狀況以下: 若使用者建立爲『文件』則默認『沒有可運行( x )權限』,亦即只有 rw 這兩個項目,也就是最大爲 666 分,默認權限以下: -rw-rw-rw- 若使用者建立爲『目錄』,則由於 x 與是否能夠進入此目錄有關,所以默認爲全部權限均開放,亦即爲 777 分,默認權限以下: drwxrwxrwx 若是以上面的例子來講明的話,由於 umask 爲 022 ,因此 user 並無被拿掉任何權限,不過 group 與 others 的權限被拿掉了 2 (也就是 w 這個權限),那麼當使用者: 建立文件時:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r-- 建立目錄時:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x umask的利用與重要性:專題製做 配置umask [root@www ~]# umask 002 [root@www ~]# touch test3 [root@www ~]# mkdir test4 [root@www ~]# ll -rw-rw-r-- 1 root root 0 Sep 27 00:36 test3 drwxrwxr-x 2 root root 4096 Sep 27 00:36 test4 umask 對於新建文件與目錄的默認權限是頗有關係的!這個概念能夠用在任何服務器上面, 尤爲是將來在你架設文件服務器 (file server) ,舉例來講, SAMBA Server 或者是 FTP server 時, 都是很重要的觀念!這牽涉到你的使用者是否可以將文件進一步利用的問題喔!不要等閒視之! 例題: 假設你的 umask 爲 003 ,請問該 umask 狀況下,建立的文件與目錄權限爲? 答: umask 爲 003 ,因此拿掉的權限爲 --------wx,所以: 文件: (-rw-rw-rw-) - (--------wx) = -rw-rw-r-- 目錄: (drwxrwxrwx) - (--------wx) = drwxrwxr-- 注:(!!!)有的書籍或者是 BBS 上面的朋友,喜歡使用文件默認屬性 666 與目錄默認屬性 777 來與 umask 進行相減的計算~這是很差的喔!以上面例題來看, 若是使用默認屬性相加減,則文件變成:666-003=663,亦便是 -rw-rw--wx ,這但是徹底不對的喔! 想一想看,本來文件就已經去除 x 的默認屬性了,怎麼可能忽然間冒出來了? 因此,這個地方得要特別當心喔! 最好用符號的方式來計算,清晰不易出錯 在默認的狀況中, root 的 umask 會拿掉比較多的屬性,root 的 umask 默認是 022 , 這是基於安全的考量啦~至於通常身份使用者,一般他們的 umask 爲 002 ,亦即保留同羣組的寫入權力! 關於默認 umask 的配置能夠參考 /etc/bashrc 這個文件的內容,不過,不建議修改該文件, 你能夠參考第十一章 bash shell 提到的環境參數配置檔 (~/.bashrc) 的說明!
文件的隱藏屬性*************************************** 不過要先強調的是,底下的chattr命令只能在Ext2/Ext3的文件系統上面生效, 其餘的文件系統可能就沒法支持這個命令了。 chatter(配置文件的隱藏屬性)change file attributes on a Linux file system [root@www ~]# chattr [+-=][ASacdistu] 文件或目錄名稱 選項與參數: + :添加某一個特殊參數,其餘本來存在參數則不動。 - :移除某一個特殊參數,其餘本來存在參數則不動。 = :配置必定,且僅有後面接的參數 A :當配置了 A 這個屬性時,若你有存取此文件(或目錄)時,他的存取時間 atime 將不會被修改,可避免I/O較慢的機器過分的存取磁碟。這對速度較慢的計算機有幫助 S :通常文件是非同步寫入磁碟的(原理請參考第五章sync的說明),若是加上 S 這個 屬性時,當你進行任何文件的修改,該更動會『同步』寫入磁碟中。 a :當配置 a 以後,這個文件將只能添加數據,而不能刪除也不能修改數據,只有root 才能配置這個屬性。 c :這個屬性配置以後,將會自動的將此文件『壓縮』,在讀取的時候將會自動解壓縮, 可是在儲存的時候,將會先進行壓縮後再儲存(看來對於大文件彷佛蠻有用的!) d :當 dump 程序被運行的時候,配置 d 屬性將可以使該文件(或目錄)不會被 dump 備份 i :這個 i 可就很厲害了!他可讓一個文件『不能被刪除、更名、配置連結也沒法 寫入或新增數據!』對於系統安全性有至關大的助益!只有 root 能配置此屬性 s :當文件配置了 s 屬性時,若是這個文件被刪除,他將會被徹底的移除出這個硬盤 空間,因此若是誤刪了,徹底沒法救回來了喔! u :與 s 相反的,當使用 u 來配置文件時,若是該文件被刪除了,則數據內容其實還 存在磁碟中,可使用來救援該文件喔! 注意:屬性配置常見的是 a 與 i 的配置值,並且不少配置值必需要身爲 root 才能配置 範例:請嘗試到/tmp底下建立文件,並加入 i 的參數,嘗試刪除看看。 [root@www ~]# cd /tmp [root@www tmp]# touch attrtest <==建立一個空文件 [root@www tmp]# chattr +i attrtest <==給予 i 的屬性 [root@www tmp]# rm attrtest <==嘗試刪除看看 rm: remove write-protected regular empty file `attrtest'? y rm: cannot remove `attrtest': Operation not permitted <==操做不準可 # 看到了嗎?呼呼!連 root 也沒有辦法將這個文件刪除呢!趕忙解除配置! 範例:請將該文件的 i 屬性取消! [root@www tmp]# chattr -i attrtest 這個命令是很重要的,尤爲是在系統的數據安全上面! 注:vbird認爲,最終要的當屬+i和+a這個屬性了,+i可讓一個文件沒法被更動 注:若是是log file這種文檔,就更須要+a這個能夠添加但不能修改舊有的數據與刪除的參數了。 lsattr(顯示文件隱藏屬性)list file attributes on a Linux second extend file system [root@www ~]# lsattr [-adR] 文件或目錄 選項與參數: -a :將隱藏檔的屬性也秀出來; -d :若是接的是目錄,僅列出目錄自己的屬性而非目錄內的檔名; -R :連同子目錄的數據也一併列出來! [root@www tmp]# chattr +aij attrtest [root@www tmp]# lsattr attrtest ----ia---j--- attrtest
文件的特殊權限********************************************* [root@www ~]# ls -ld /tmp ; ls -l /usr/bin/passwd drwxrwxrwt 7 root root 4096 Sep 27 18:23 /tmp -rwsr-xr-x 1 root root 22984 Jan 7 2007 /usr/bin/passwd 由於 s 與 t 這兩個權限的意義與系統的賬號 (第十四章)及系統的程序(process, 第十七章)較爲相關, 因此等到後面的章節談完後你纔會比較有概念! Set UID 當 s 這個標誌出如今文件擁有者的 x 權限上時,例如剛剛提到的 /usr/bin/passwd 這個文件的權限狀態:『-rwsr-xr-x』,此時就被稱爲 Set UID,簡稱爲 SUID 的特殊權限。基本上SUID有這樣的限制與功能: 一、SUID 權限僅對二進位程序(binary program)有效; 二、運行者對於該程序須要具備 x 的可運行權限; 三、本權限僅在運行該程序的過程當中有效 (run-time); 四、運行者將具備該程序擁有者 (owner) 的權限。 舉個例子來講:Linux系統中,全部帳號的密碼都記錄在/etc/shadow這個文件裏面,vbird帳號不具備w權限,但能夠修改這個文件內的密碼,由於 vbird 對於 /usr/bin/passwd 這個程序來講是具備 x 權限的,表示 vbird 能運行 passwd; passwd 的擁有者是 root 這個賬號; vbird 運行 passwd 的過程當中,會『暫時』得到 root 的權限; /etc/shadow 就能夠被 vbird 所運行的 passwd 所修改。 注意:SUID 僅可用在binary program 上, 不可以用在 shell script 上面!這是由於 shell script 只是將不少的 binary 運行檔叫進來運行而已!因此 SUID 的權限部分,仍是得要看 shell script 呼叫進來的程序的配置, 而不是 shell script 自己。固然,SUID 對於目錄也是無效的~這點要特別留意。 Set GID 當 s 標誌在文件擁有者的 x 項目爲 SUID,那 s 在羣組的 x 時則稱爲 Set GID, SGID 羅! [root@www ~]# ls -l /usr/bin/locate (ubuntu 14.04 不一樣)(centos 6.6 中,符合) 注:因爲ubuntu 14.04 與 centos 6.6 關於文件的權限配置方面差異很大,因此,絕對實驗儘可能在 centos 6.6 上進行 -rwx--s--x 1 root slocate 23856 Mar 15 2007 /usr/bin/locate 與 SUID 不一樣的是,SGID 能夠針對文件或目錄來配置! 若是是對文件來講, SGID 有以下的功能: SGID 對二進位程序有用; 程序運行者對於該程序來講,需具有 x 的權限; 運行者在運行的過程當中將會得到該程序羣組的支持! 舉例來講,上面的 /usr/bin/locate 這個程序能夠去搜尋 /var/lib/mlocate/mlocate.db 這個檔案的內容,mlocate.db的權限以下 [root@www ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db -rwx--s--x 1 root slocate 23856 Mar 15 2007 /usr/bin/locate -rw-r----- 1 root slocate 3175776 Sep 28 04:02 /var/lib/mlocate/mlocate.db 除了 binary program 以外,SGID也可以用在目錄上,當一個目錄設定了 SGID 的權限後,他將具備以下功能: 用戶若對此目錄具備r與x的權限時,該用戶可以進入此目錄; 用戶在此目錄下的有效組(effective group) 將會變成該目錄的羣組; 用途:若用戶在此目錄下具備 w 的權限(能夠新建檔案),則使用者所創建的新檔案,該檔案的羣組與此目錄的羣組相同 注:SGID對於項目開發來講是很是重要的,由於這涉及羣組權限的問題,參考本章後續情境模擬的案例 Stick Bit SBIT 目前只針對目錄有效,對於檔案沒有效果。 SBIT對於目錄的做用是: 當用戶對於此目錄具備w、x權限,亦即具備寫入的權限時; 當用戶在該目錄下簡歷檔案或目錄時,僅由本身與root才由權利刪除該檔案 換句話說:當甲這個用戶於A目錄具備羣組或其餘人的身份,而且擁有該目錄的w權限,這表示甲用戶對該目錄內任何人創建的目錄或檔案都可進行刪除、改名、搬移等動做,若是將A目錄加上了SBIT的權限項目時,則甲只可以針對本身創建的檔案或目錄進行刪除、改名、搬移等動做,而沒法刪除他人的檔案 舉例來講,咱們的/tmp自己的權限是 drwxrwxrwt ,在這樣的權限內容下,任何人均可以在 /tmp 內新增、修改文件,但僅有該文件/目錄建立者與 root 可以刪除本身的目錄或文件。 注:由於 SUID/SGID/SBIT 牽涉到程序的概念,所以再次強調,這部份的數據在您讀完第十七章關於程序方面的知識後,要再次的回來瞧瞧喔! SUID/SGID/SBIT 權限配置 數字法: 4 爲 SUID 2 爲 SGID 1 爲 SBIT Tips: 注意:底下的範例只是練習而已,因此鳥哥使用同一個文件來配置,你必須瞭解 SUID 不是用在目錄上,而 SBIT 不是用在文件上的喔! [root@www ~]# cd /tmp [root@www tmp]# touch test <==建立一個測試用空檔 [root@www tmp]# chmod 4755 test; ls -l test <==加入具備 SUID 的權限 -rwsr-xr-x 1 root root 0 Sep 29 03:06 test [root@www tmp]# chmod 6755 test; ls -l test <==加入具備 SUID/SGID 的權限 -rwsr-sr-x 1 root root 0 Sep 29 03:06 test [root@www tmp]# chmod 1755 test; ls -l test <==加入 SBIT 的功能! -rwxr-xr-t 1 root root 0 Sep 29 03:06 test [root@www tmp]# chmod 7666 test; ls -l test <==具備空的 SUID/SGID 權限 -rwSrwSrwT 1 root root 0 Sep 29 03:06 test 最後一個例子就要特別當心啦!怎麼會出現大寫的 S 與 T 呢?不都是小寫的嗎? 由於 s 與 t 都是取代 x 這個權限的,可是你有沒有發現阿,咱們是下達 7666 喔!也就是說, user, group 以及 others 都沒有 x 這個可運行的標誌( 由於 666 嘛 ),因此,這個 S, T 表明的就是『空的』啦!怎麼說? SUID 是表示『該文件在運行的時候,具備文件擁有者的權限』,可是文件 擁有者都沒法運行了,哪裏來的權限給其餘人使用?固然就是空的啦! ^_^ 符號法: SUID 爲 u+s SGID 爲 g+s SBIT 爲 o+t
觀察文件類型:fiile 若是你想要知道某個文件的基本數據,例如是屬於 ASCII 或者是 data 文件,或者是 binary , 且其中有沒有使用到動態函式庫 (share library) 等等的資訊,就能夠利用 file 這個命令來檢閱喔! [root@www ~]# file ~/.bashrc /root/.bashrc: ASCII text <==告訴咱們是 ASCII 的純文字檔啊! [root@www ~]# file /usr/bin/passwd /usr/bin/passwd: setuid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped # 運行檔的數據可就多的不得了!包括這個文件的 suid 權限、兼容於 Intel 386 # 等級的硬件平臺、使用的是 Linux 核心 2.6.9 的動態函式庫連結等等。 [root@www ~]# file /var/lib/mlocate/mlocate.db /var/lib/mlocate/mlocate.db: data <== 這是 data 文件! 透過這個命令,咱們能夠簡單的先判斷這個文件的格式爲什麼喔!
5.1 命令檔名的搜尋:which
5.2 文件檔名的搜尋:whereis, locate, findshell
命令檔名的搜尋:數據庫
which(尋找運行檔) 咱們經常須要知道那個文件放在哪裏,纔可以對該文件進行一些修改或維護等動做。 有些時候某些軟件配置檔的檔名是不變的,可是各 distribution 放置的目錄則不一樣。 此時就得要利用一些搜尋命令將該配置檔的完整檔名捉出來,這樣才能修改嘛! [root@www ~]# which [-a] command 選項或參數: -a :將全部由 PATH 目錄中能夠找到的命令均列出,而不止第一個被找到的命令名稱 範例一:分別用root與通常賬號搜尋 ifconfig 這個命令的完整檔名 [root@www ~]# which ifconfig /sbin/ifconfig <==用 root 能夠找到正確的運行檔名喔! [root@www ~]# su - vbird <==切換身份成爲 vbird 去! [vbird@www ~]$ which ifconfig /usr/bin/which: no ifconfig in (/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin :/home/vbird/bin) <==見鬼了!居然通常身份賬號找不到! # 由於 which 是根據使用者所配置的 PATH 變量內的目錄去搜尋可運行檔的!因此, # 不一樣的 PATH 配置內容所找到的命令固然不同啦!由於 /sbin 不在 vbird 的 # PATH 中,找不到也是理所固然的啊!了乎? [vbird@www ~]$ exit <==記得將身份切換回本來的 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 的啊! 由於 cd 是『bash 內建的命令』。 可是 which 默認是找 PATH 內所規範的目錄,因此固然必定找不到的啊!咱們能夠透過 type 這個命令喔! 關於 type 的用法咱們將在 第十一章的 bash 再來談!
文件檔名的搜尋:ubuntu
一般 find 不很經常使用的!由於速度慢以外, 也很操硬盤!一般咱們都是先使用 whereis 或者是 locate 來檢查,若是真的找不到了,才以 find 來搜尋呦! 爲何呢?由於 whereis 與 locate 是利用數據庫來搜尋數據,因此至關的快速,並且並無實際的搜尋硬盤, 比較省時間啦!centos
whereis (尋找特定文件) [root@www ~]# whereis [-bmsu] 文件或目錄名 選項與參數: -b :只找 binary 格式的文件 -m :只找在說明檔 manual 路徑下的文件 -s :只找 source 來源文件 -u :搜尋不在上述三個項目當中的其餘特殊文件 範例一:請用不一樣的身份找出 ifconfig 這個檔名 [root@www ~]# whereis ifconfig ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz [root@www ~]# su - vbird <==切換身份成爲 vbird [vbird@www ~]$ whereis ifconfig <==找到一樣的結果喔! ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz [vbird@www ~]$ exit <==迴歸身份成爲 root 去! # 注意看,明明 which 通常使用者找不到的 ifconfig 卻可讓 whereis 找到! # 這是由於系統真的有 ifconfig 這個『文件』,可是使用者的 PATH 並無加入 /sbin # 因此,將來你找不到某些命令時,先用文件搜尋命令找找看再說! 範例二:只找出跟 passwd 有關的『說明文件』檔名(man page) [root@www ~]# whereis -m passwd passwd: /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz find 是很強大的搜尋命令,但時間花用的很大!由於 find 是直接搜尋硬盤。 whereis 搜尋的速度比 find 快不少Linux 系統會將系統內的全部文件都記錄在一個數據庫文件裏面, 而當使用 whereis 或者是底下要說的 locate 時,都會以此數據庫文件的內容爲準, 所以,有的時後你還會發現使用這兩個運行檔時,會找到已經被殺掉的文件! 並且也找不到最新的剛剛建立的文件呢!
locate [root@www ~]# locate [-ir] keyword 選項與參數: -i :忽略大小寫的差別; -r :後面可接正規表示法的顯示方式 範例一:找出系統中全部與 passwd 相關的檔名 [root@www ~]# locate passwd /etc/passwd /etc/passwd- /etc/news/passwd.nntp /etc/pam.d/passwd ....(底下省略).... locate使用簡單,速度快,可是也有限制,即他是經由數據庫來搜尋的,而數據庫的建立默認是天天運行一次(每一個發行版不一樣),因此當你新建立起來的文件, 卻還在數據庫升級以前搜尋該文件,那麼 locate 會告訴你『找不到!』呵呵!由於必需要升級數據庫呀! 注: updatedb:根據 /etc/updatedb.conf 的配置去搜尋系統硬盤內的檔名,並升級 /var/lib/mlocate 內的數據庫文件; locate:依據 /var/lib/mlocate 內的數據庫記載,找出使用者輸入的關鍵字檔名
find [root@www ~]# find [PATH] [option] [action] 選項與參數: 1. 與時間有關的選項:共有 -atime, -ctime 與 -mtime ,以 -mtime 說明 -mtime n :n 爲數字,意義爲在 n 天以前的『一天以內』被更動過內容的文件; -mtime +n :列出在 n 天以前(不含 n 天自己)被更動過內容的文件檔名; -mtime -n :列出在 n 天以內(含 n 天自己)被更動過內容的文件檔名。 -newer file :file 爲一個存在的文件,列出比 file 還要新的文件檔名 範例一:將過去系統上面 24 小時內有更動過內容 (mtime) 的文件列出 [root@www ~]# find / -mtime 0 # 那個 0 是重點!0 表明目前的時間,因此,從如今開始到 24 小時前, # 有變更過內容的文件都會被列出來!那若是是三天前的 24 小時內? # find / -mtime 3 有變更過的文件都被列出的意思! 範例二:尋找 /etc 底下的文件,若是文件日期比 /etc/passwd 新就列出 [root@www ~]# find /etc -newer /etc/passwd # -newer 用在分辨兩個文件之間的新舊關係是頗有用的! ![](https://images0.cnblogs.com/blog2015/731538/201503/182142220481384.gif) +4表明大於等於5天前的檔名:ex> find /var -mtime +4 -4表明小於等於4天內的文件檔名:ex> find /var -mtime -4 4則是表明4-5那一天的文件檔名:ex> find /var -mtime 4 很是有趣吧!你能夠在 /var/ 目錄下搜尋一下,感覺一下輸出文件的差別喔! 選項與參數: 2. 與使用者或羣組名稱有關的參數: -uid n :n 爲數字,這個數字是使用者的賬號 ID,亦即 UID ,這個 UID 是記錄在 /etc/passwd 裏面與賬號名稱對應的數字。這方面咱們會在第四篇介紹。 -gid n :n 爲數字,這個數字是羣組名稱的 ID,亦即 GID,這個 GID 記錄在 /etc/group,相關的介紹咱們會第四篇說明~ -user name :name 爲使用者賬號名稱喔!例如 dmtsai -group name:name 爲羣組名稱喔,例如 users ; -nouser :尋找文件的擁有者不存在 /etc/passwd 的人! -nogroup :尋找文件的擁有羣組不存在於 /etc/group 的文件! 當你自行安裝軟件時,極可能該軟件的屬性當中並無文件擁有者, 這是可能的!在這個時候,就可使用 -nouser 與 -nogroup 搜尋。 範例三:搜尋 /home 底下屬於 vbird 的文件 [root@www ~]# find /home -user vbird # 這個東西也頗有用的~當咱們要找出任何一個使用者在系統當中的全部文件時, # 就能夠利用這個命令將屬於某個使用者的全部文件都找出來喔! 範例四:搜尋系統中不屬於任何人的文件 [root@www ~]# find / -nouser # 透過這個命令,能夠輕易的就找出那些不太正常的文件。 # 若是有找到不屬於系統任何人的文件時,不要太緊張, # 那有時候是正常的~尤爲是你曾經以原始碼自行編譯軟件時。 若是你想要找出某個使用者在系統底下建立了啥咚咚,使用上述的選項與參數,就可以找出來啦! 選項與參數: 3. 與文件權限及名稱有關的參數: -name filename:搜尋文件名稱爲 filename 的文件; -size [+-]SIZE:搜尋比 SIZE 還要大(+)或小(-)的文件。這個 SIZE 的規格有: c: 表明 byte, k: 表明 1024bytes。因此,要找比 50KB 還要大的文件,就是『 -size +50k 』 -type TYPE :搜尋文件的類型爲 TYPE 的,類型主要有:通常正規文件 (f), 裝置文件 (b, c), 目錄 (d), 連結檔 (l), socket (s), 及 FIFO (p) 等屬性。 -perm mode :搜尋文件權限『恰好等於』 mode 的文件,這個 mode 爲相似 chmod 的屬性值,舉例來講, -rwsr-xr-x 的屬性爲 4755 ! -perm -mode :搜尋文件權限『必需要所有囊括 mode 的權限』的文件,舉例來講, 咱們要搜尋 -rwxr--r-- ,亦即 0744 的文件,使用 -perm -0744, 當一個文件的權限爲 -rwsr-xr-x ,亦即 4755 時,也會被列出來, 由於 -rwsr-xr-x 的屬性已經囊括了 -rwxr--r-- 的屬性了。 -perm +mode :搜尋文件權限『包含任一 mode 的權限』的文件,舉例來講,咱們搜尋 -rwxr-xr-x ,亦即 -perm +755 時,但一個文件屬性爲 -rw------- 也會被列出來,由於他有 -rw.... 的屬性存在! 範例五:找出檔名爲 passwd 這個文件 [root@www ~]# find / -name passwd # 利用這個 -name 能夠搜尋檔名啊! 範例六:找出 /var 目錄下,文件類型爲 Socket 的檔名有哪些? [root@www ~]# find /var -type s # 這個 -type 的屬性也頗有幫助喔!尤爲是要找出那些怪異的文件, # 例如 socket 與 FIFO 文件,能夠用 find /var -type p 或 -type s 來找! 範例七:搜尋文件當中含有 SGID 或 SUID 或 SBIT 的屬性 [root@www ~]# find / -perm +7000 # 所謂的 7000 就是 ---s--s--t ,那麼只要含有 s 或 t 的就列出, # 因此固然要使用 +7000 ,使用 -7000 表示要含有 ---s--s--t 的全部三個權限, # 所以,就是 +7000 ~了乎? 假設我想要找出來 /bin, /sbin 這兩個目錄下, 只要具備 SUID 或 SGID 就列出來該文件,你能夠這樣作: [root@www ~]# find /bin /sbin -perm +6000 注: find 後面能夠接多個目錄來進行搜尋!另外, find 原本就會搜尋次目錄,這個特點也要特別注意喔! 選項與參數: 4. 額外可進行的動做: -exec command :command 爲其餘命令,-exec 後面可再接額外的命令來處理搜尋到 的結果。 -print :將結果列印到螢幕上,這個動做是默認動做! 範例八:將上個範例找到的文件使用 ls -l 列出來~ [root@www ~]# find / -perm +7000 -exec ls -l {} \; # 注意到,那個 -exec 後面的 ls -l 就是額外的命令,命令不支持命令別名, # 因此僅能使用 ls -l 不可使用 ll 喔!注意注意! 範例九:找出系統中,大於 1MB 的文件 [root@www ~]# find / -size +1000k find 的特殊功能就是可以進行額外的動做(action)。咱們將範例八的例子以圖解來講明以下: ![](https://images0.cnblogs.com/blog2015/731538/201503/182142490632803.gif) 該範例中特殊的地方有 {} 以及 \; 還有 -exec 這個關鍵字,這些東西的意義爲: {} 表明的是『由 find 找到的內容』,如上圖所示,find 的結果會被放置到 {} 位置中; -exec 一直到 \; 是關鍵字,表明 find 額外動做的開始 (-exec) 到結束 (\;) ,在這中間的就是 find 命令內的額外動做。 在本例中就是『 ls -l {} 』羅! 由於『 ; 』在 bash 環境下是有特殊意義的,所以利用反斜線來跳脫。 find 還能夠利用萬用字節來找尋檔名呢!舉例來講,你想要找出 /etc 底下檔名包含 httpd 的文件, 那麼你就能夠這樣作: [root@www ~]# find /etc -name '*httpd*' 不過由於 find 在尋找數據的時後至關的操硬盤!因此沒事情不要使用 find 啦!
在這一章咱們介紹了不少文件系統的管理命令,第六章則介紹了不少文件權限的意義。在這個小節當中, 咱們就將這二者結合起來,說明一下什麼命令在什麼樣的權限下才可以運行吧!^_^安全
1、讓使用者能進入某目錄成爲『可工做目錄』的基本權限爲什麼:
可以使用的命令:例如 cd 等變換工做目錄的命令;
目錄所需權限:使用者對這個目錄至少須要具備 x 的權限
額外需求:若是使用者想要在這個目錄內利用 ls 查閱檔名,則使用者對此目錄還須要 r 的權限。bash
2、使用者在某個目錄內讀取一個文件的基本權限爲什麼?
可以使用的命令:例如本章談到的 cat, more, less等等
目錄所需權限:使用者對這個目錄至少須要具備 x 權限;
文件所需權限:使用者對文件至少須要具備 r 的權限才行!
3、讓使用者能夠修改一個文件的基本權限爲什麼?
可以使用的命令:例如 nano 或將來要介紹的 vi 編輯器等;
目錄所需權限:使用者在該文件所在的目錄至少要有 x 權限;
文件所需權限:使用者對該文件至少要有 r, w 權限
4、讓一個使用者能夠建立一個文件的基本權限爲什麼?
目錄所需權限:使用者在該目錄要具備 w,x 的權限,重點在 w 啦!
5、讓使用者進入某目錄並運行該目錄下的某個命令之基本權限爲什麼?
目錄所需權限:使用者在該目錄至少要有 x 的權限;
文件所需權限:使用者在該文件至少須要有 x 的權限
例題: 讓一個使用者 vbird 可以進行『cp /dir1/file1 /dir2』的命令時,請說明 dir1, file1, dir2 的最小所需權限爲什麼? 答: 運行 cp 時, vbird 要『可以讀取來源檔,而且寫入目標檔!』因此應參考上述第二點與第四點的說明! 所以各文件/目錄的最小權限應該是: •dir1 :至少須要有 x 權限; file1:至少須要有 r 權限; dir2 :至少須要有 w, x 權限。 例題: 有一個文件全名爲 /home/student/www/index.html ,各相關文件/目錄的權限以下: drwxr-xr-x 23 root root 4096 Sep 22 12:09 / drwxr-xr-x 6 root root 4096 Sep 29 02:21 /home drwx------ 6 student student 4096 Sep 29 02:23 /home/student drwxr-xr-x 6 student student 4096 Sep 29 02:24 /home/student/www -rwxr--r-- 6 student student 369 Sep 29 02:27 /home/student/www/index.html 請問 vbird 這個賬號(不屬於student羣組)可否讀取 index.html 這個文件呢? 答: 雖然 www 與 index.html 是可讓 vbird 讀取的權限,可是由於目錄結構是由根目錄一層一層讀取的, 所以 vbird 可進入 /home 可是卻不可進入 /home/student/ ,既然連進入 /home/student 都不準了, 固然就讀不到 index.html 了!因此答案是『vbird不會讀取到 index.html 的內容』喔! 那要如何修改權限呢?其實只要將 /home/student 的權限修改成最小 711 ,或者直接給予 755 就能夠羅! 這但是很重要的概念喔!
情境模擬題一:假設系統中有兩個賬號,分別是 alex 與 arod ,這兩我的除了本身羣組以外還共同支持一個名爲 project 的羣組。假設這兩個用戶須要共同擁有 /srv/ahome/ 目錄的開發權,且該目錄不準其餘人進入查閱。 請問該目錄的權限配置應爲什麼?請先以傳統權限說明,再以 SGID 的功能解析。
目標:瞭解到爲什麼專案開發時,目錄最好須要配置 SGID 的權限!
前提:多個賬號支持同一羣組,且共同擁有目錄的使用權!
需求:須要使用 root 的身份來進行 chmod, chgrp 等幫用戶配置好他們的開發環境才行! 這也是管理員的重要任務之一!
首先咱們得要先製做出這兩個賬號的相關數據,賬號/羣組的管理在後續咱們會介紹, 您這裏先照著底下的命令來製做便可:
[root@www ~]# groupadd project <==添加新的羣組
[root@www ~]# useradd -G project alex <==建立 alex 賬號,且支持 project
[root@www ~]# useradd -G project arod <==建立 arod 賬號,且支持 project
[root@www ~]# id alex <==查閱 alex 賬號的屬性
uid=501(alex) gid=502(alex) groups=502(alex),501(project) <==確實有支持!
[root@www ~]# id arod
uid=502(arod) gid=503(arod) groups=503(arod),501(project)
而後開始來解決咱們所須要的環境吧!
1.首先建立所須要開發的專案目錄:
[root@www ~]# mkdir /srv/ahome
[root@www ~]# ll -d /srv/ahome
drwxr-xr-x 2 root root 4096 Sep 29 22:36 /srv/ahome
2.從上面的輸出結果可發現 alex 與 arod 都不能在該目錄內建立文件,所以須要進行權限與屬性的修改。 由於其餘人均不可進入此目錄,所以該目錄的羣組應爲project,權限應爲770才合理。
[root@www ~]# chgrp project /srv/ahome
[root@www ~]# chmod 770 /srv/ahome
[root@www ~]# ll -d /srv/ahome
drwxrwx--- 2 root project 4096 Sep 29 22:36 /srv/ahome
//從上面的權限結果來看,由於 alex/arod 均支持 project,所以彷佛沒問題了!
3.實際分別以兩個使用者來測試看看,狀況會是如何?先用 alex 建立文件,而後用 arod 去處理看看。
[root@www ~]# su - alex <==先切換身份成爲 alex 來處理
[alex@www ~]$ cd /srv/ahome <==切換到羣組的工做目錄去
[alex@www ahome]$ touch abcd <==建立一個空的文件出來!
[alex@www ahome]$ exit <==離開 alex 的身份
[root@www ~]# su - arod
[arod@www ~]$ cd /srv/ahome
[arod@www ahome]$ ll abcd
-rw-rw-r-- 1 alex alex 0 Sep 29 22:46 abcd
//仔細看一下上面的文件,由於羣組是 alex ,arod並不支持!
//所以對於 abcd 這個文件來講, arod 應該只是其餘人,只有 r 的權限而已啊!
[arod@www ahome]$ exit
由上面的結果咱們能夠知道,若單純使用傳統的 rwx 而已,則對剛剛 alex 建立的 abcd 這個文件來講, arod 能夠刪除他,可是卻不能編輯他!這不是咱們要的樣子啊!趕忙來從新規劃一下。
4.加入 SGID 的權限在裏面,並進行測試看看:
[root@www ~]# chmod 2770 /srv/ahome
[root@www ~]# ll -d /srv/ahome
drwxrws--- 2 root project 4096 Sep 29 22:46 /srv/ahome
測試:使用 alex 去建立一個文件,而且查閱文件權限看看:
[root@www ~]# su - alex
[alex@www ~]$ cd /srv/ahome
[alex@www ahome]$ touch 1234
[alex@www ahome]$ ll 1234
-rw-rw-r-- 1 alex project 0 Sep 29 22:53 1234
//沒錯!這纔是咱們要的樣子!如今 alex, arod 建立的新文件所屬羣組都是 project,
//由於兩人均屬於此羣組,加上 umask 都是 002,這樣兩人才能夠互相修改對方的文件!
因此最終的結果顯示,此目錄的權限最好是『2770』,所屬文件擁有者屬於root便可,至於羣組必需要爲兩人共同支持的project 這個羣組才行!