學習Linux旅途--Day Four--

Linux文件和目錄管理


一、目錄相關命令:mkdir、rmdir、rm -r、cp -r、mv


    mkdir:(make directory,創建目錄),如果文件已存在,則無法創建(一切皆文件)

    -p選項:可以級聯的去創建    mkdir -p 123/234/345

    -v選項:可視化的顯示


    rmdir:(remove directory,刪除目錄),它只能刪除一個空目錄,非空不能刪(有限制,不常用)

    -p選項:級聯的刪除目錄,但是有限制,比如說rmdir -p 123/234/345,如果最後一個目錄,就是345目錄如果是空目錄的話,可以級聯的刪掉全部


    rm:既可以刪除文件,也可以刪除目錄

    rm filename:刪除文件

    rm -r:刪除目錄

    -f選項:強制(force)刪除,不提示,刪除一個不存在的目錄也不會有任何提示


    cp:複製文件

    -r選項:複製目錄,如果拷貝的源目錄,在目標目錄已存在,那麼會覆蓋並且不會提示


    mv:重命名或者移動

    在同級目錄下,mv就是重命名

    在不同的目錄,mv就是移動或者覆蓋


二、文件相關命令:cat、tac、more、less、head、tail

    cat:查看文件內容

    -A:查看同時顯示結尾符


    tac:逆序查看,與tac相反


    more、less:按頁查看文件內容,more只能向下翻,卻不能往回看,常用的還是less

    more:空格,下一屏;b,上一屏

    less 快捷鍵:

        g:文件首

        G:文件尾

        j:下一行(鍵盤上鍵也行)

        k:上一行(鍵盤下鍵也行)

        b:上一屏(page up)

        f:下一屏(page down)

    當然less也可以查找字符,“/word”:然後按n就可以查看下一個查找的,“?word”按n會往上查看


    head:默認查看前10行

        -n 20:查看前20行,可以指定


    tail:默認查看末尾10行

        -f:可以動態的去查看文件,顯示文件最新追加的內容,用於查看一些日誌文件


三、文件或者目錄的屬性

    ls -l命令可查看文件屬性與權限:

    被分爲9位:

    第一個被佔位表示意思:

        -:普通文件

        d:目錄

        l:鏈接文件

        b:塊設備文件

        c:字符文件

        p:管道文件

        s:套接字文件

    接下來每三位爲一段,分爲三段:第一段是文件的所有者(user)的權限,第二段是文件的所屬組(group)的權限,第三段是文件的其他用戶的權限。

        r:表示可讀

        w:表示可寫

        x:表示可執行

    但是rwx對於目錄和文件概念是不一樣的

        r:對於文件來說是否可以查看這個文件內容,對於目錄來說是否可以看到這目錄下面的內容

        w:對於文件來說是否可以修改這個文件內容,對於目錄來說是否可以創建以及刪除此目錄下的內容

        x:對於文件來說是否可以執行這個文件,對於目錄來說是否可以進入到此目錄,就是是否可以cd命令過去

    若用數字表示:r:4、w:2、x:1,目錄的最高權限是777,也就是drwxrwxrwx,而文件是666


四、更改權限、屬主、屬組

    chmod:更改文件/目錄權限

    可以使用數字來表示權限,或者用rwx來更改權限

    chmod 755 file    //意思是將文件的設置爲-rwxr-xr-x,這些數字分別是“r:4、w:2、x:1”

    也可以使用符號的方式:chmod u=rwx,g=rx,o=rx  -c file

                          chmod a=r file    //這表示將u、g、o的權限都加上r的權限

        -R:級聯的更改屬性

        -c:更改權限後將會反饋信息,與-v選項類似


    chown:更改目錄/文件所屬主和所屬組,中間用冒號隔開

        chown user1:user2 file    //將file的所屬主設置爲user1,將所屬組設置爲user2

        chown user1    //設置所屬主

        chown :user2    //設置所屬組

    -R:級聯的更改

    -c:更改後收到反饋信息


    chgrp:更改文件或者目錄的所屬組,組名可以是用戶組ID,也可以是用戶組的組名,不過chown也可以完成,所有這個命令不常用


    umask:用來限定新建目錄或者文件權限的掩碼,默認是0022

    umask 後面跟數字:umask 001

        作用:umask在每次進入系統時就被執行了,用來限定用戶在創建新文件時,有最初的限定掩碼來決定,比如說:umask 001,目錄的最大權限是777,文件是666

      目錄:      drwxrwxrwx            文件:      -rw-rw-rw-

             減去 ---------x                   減去 ---------x

            ---------------------            -----------------------

                  drwxrwxrw-   ==> 776              -rw-rw-rw-    ==> 666

    對於上面的文件可能有疑問,目錄777-001=776沒問題,文件666-001爲什麼還是666,那是因爲權限不能單純的用減法去對待,上面的文件本身就沒有x權限,減去有何意義?

    umask的權限使用命令設置後只會在當前終端生效,永久生效修改配置文件/ect/profile。

    

    chattr:更改文件的隱藏權限

     -R:級聯

     +<屬性>:開啓文件或目錄的該項屬性

     -<屬性>:關閉文件或目錄的該項屬性

     =<屬性>:指定文件或目錄的該項屬性

        有兩個較爲常用的屬性:

     a:只能增加數據,不能刪除數據,也不能修改數據,不能重命名

     i:不能刪除、改名、寫數據,也不能重命名


    lsattr:顯示文件的隱藏權限

     -R:級聯

     -a:顯示全部,包括隱藏文件

     -d:查看目錄

    

    特殊權限:SUID、SGID、SBIT

    SUID:setgid,設置屬主標識符,設置此特殊權限後,允許執行者以文件所有者的身份來執行

        1、僅對二進制文件有效

        2、執行者必須有該文件的執行權限(x)【否則顯示的是大寫S,-rwSrwxrwx】,否則根本無意


    命令:chmod u+s file


    SGID:setgid,設置屬組標識符,設置此特殊權限後,允許執行者以文件所屬組的身份來執行

        1、對目錄和二進制均有效

        2、必須擁有該文件或者目錄的執行權限(x)

    對目錄設置時:在該目錄下創建的子目錄,將繼承父目錄的所屬組的權限,對於該目錄下創建的文件也有效果

    對二進制文件設置時:允許執行者以文件所屬組的身份來執行

    命令:chmod g+s file


    SBIT:sticky bit,粘滯位

        1、僅對目錄有效

        2、需要有該目錄的執行權限

    作用:當用戶在該目錄下創建文件或者目錄後,只有文件的所有者或者root纔有權限刪除、更改

    SUID、SUID、SBIT可以用數字表示權限,分別是4、2、1,也就是umask的第一位

    chmod 4755 file    //將file的權限改爲drwsr-xr-x


五、命令、文件的搜索

    which:用於查找"命令"的位置,會在$PATH下的路徑查找,所以有侷限性

    用法:which "COMMAND"


    type:顯示一個命令的類型,判斷出是內置命令還是外部命令

        類型有:alias,別名

                bulitin,內置命令

                function:函數,SHELL的函數

                file:文件,磁盤文件,外部命令

                keyword:關鍵字,SHELL保留字

                unfound:未找到

    type cd,會提示你這是一個bulitin,內置命令


    whereis:它可以搜索到命令的二進制文件、源代碼文件和man幫助文檔等相關文件的路徑

        顯示的信息比which命令更爲詳細,什麼選項也不加,則會顯示所有信息

    -b:只搜索命令的二進制文件路徑

    -m:只搜索命令的man文檔路徑

    -s:只搜索命令的源代碼路徑

這個命令也比較侷限,因爲它會在固定的幾個目錄進行搜索:/bin、/sbin、/usr/bin、/usr/sbin、/usr/share/man/man1這幾個目錄搜索


    locate:用來查找文件或者目錄,相當於find -name,但是比find效率更高,因爲locate搜索源是一個數據庫/var/lib/mlocate/mlocate.db,而不是硬盤,這個數據庫會含有本地的所有文件

    默認centos沒有安裝:yum isntall -y mlocate,當這個命令安裝就會自動創建數據庫,首次使用這個數據庫文件爲空,需要使用命令來更新下,updatedb。


    find:在指定目錄下查找文件

        用法:find 路徑 表達式

    表達式:

        -type:類型搜索,f表示文件,d表示目錄,s表示套接字文件...

            舉例:find .-type f    //搜索當前目錄下的所有文件

        -name:具體名稱搜索

        -inum:以inode號來搜索

        -size:以文件的大小來搜索

        -atime/ctime/mtime:以時間戳來搜索

            舉例:find . -atime +/-10 

                +10:表示10天以前被訪問過的文件

                10:表示正好10天這一天的訪問的文件

                -10:表示10天以內被訪問過的文件

        -amin/cmin/mmim:單位爲分鐘,和上面類似

        -uid、gid:以用戶識別碼、羣組識別碼的方式來搜索

        -o:邏輯或

    find命令的選項還有很多,很強大,具體有需求可以查找man幫助文檔


    stat:查看文件的時間戳、inode號等信息


六、軟、硬鏈接

硬鏈接:

    一般情況下,文件名和inode號碼是“一 一對應”關係,每個inode號碼對應一個文件名,但是,Unix/Linux系統允許,多個文件名指向同一個inode號碼,這意味着,可以用不同的文件名訪問同樣的內容;對文件內容進行修改,會影響到所有相同inode的文件;但是,刪除一個文件名,不影響另一個文件名的訪問,這種情況就被稱爲“硬鏈接”(hard link)

    ln命令可以創建硬鏈接: ln 源文件 目標文件

    當創建硬鏈接後,源文件與目標文件的inode號碼相同,都會指向同一個inode。inode信息中有一項叫做“鏈接數”,記錄指向該inode的文件名總數,這回就會增加1,反過來,刪除一個文件名,就會使得inode節點中的“鏈接數”減1。當這個值減到0時,表明沒有文件名指向這個inode,系統就會回收這個inode號碼,以及其所對應的block區域。

    這裏順便說一下目錄文件的“鏈接數”。創建目錄時,默認會生成兩個目錄項:'.'和'..'  ,前者的inode號碼就是當前目錄的inode號碼,等同於當前目錄的”硬鏈接;後者的inode號碼就是當前目錄的父目錄的inode號碼,等同於父目錄的硬鏈接,所以,任何一個目錄的“硬鏈接”總數,總是等於2加上它的子目錄總數(含隱藏目錄),這裏的2是父目錄對其的“硬鏈接”和當前目錄下的“. 硬鏈接”。

軟鏈接:

    除了硬鏈接以外,還有一種特殊情況。文件A和文件B的inode號碼雖然不一樣,但是文件A的內容是文件B的路徑。讀取文件A時,系統會自動將訪問者導向文件B,因此,無論打開哪一個文件,最終讀取的都是一個文件。這時,文件A就稱爲文件B的“軟鏈接”(soft link)或者“符號鏈接”(symbolic link)。

    這就表示,文件A依賴於文件B而存在,如果刪除了文件B,打開文件A就會報錯:“No such fule or directory”.這是軟鏈接與硬鏈接最大的不同:文件A指向文件B的文件名,而不是文件B的inode號碼,文件B的inode“鏈接數
不會因此發生變化。

    ln -s 可以創建軟鏈接:ln -s 源文件或者源命令 目標文件或者目標目錄

總結 :  軟鏈接:對目錄和文件都有效,且支持跨分區(文件系統),源文件被刪除將會導致軟鏈接無法使用 

           硬鏈接:硬性規定不能對目錄進行硬鏈接,只對文件創建。不能跨文件系統,刪除源文件對硬鏈接無影響。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章