Linux運維學習歷程-第五天-Linux文件系統與管理

本章內容


文件系統

 文件和目錄被組織成一個單根倒置樹結構從根目錄下開始,用“/” 表示根文件系統(rootfs) :root filesystem,用路徑分隔的 /;遵循FHS: (Filesystem Hierarchy Standard)

 文件系統分層結構:LSB Linux Standard Base

wKioL1ed_THCijGZAABYcittwCg867.jpg

文件系統結構

/boot :引導文件存放目錄,內核文件(vmlinuz) 、引導加載器(bootloader, grub) 都存放於此目錄

/bin :供所有用戶使用的基本命令;不能關聯至獨立分區,OS 啓動即會用到的程序

/sbin :管理類的基本命令;不能關聯至獨立分區,OS 啓動即會用到的程序

/lib :啓動時程序依賴的基本共享庫文件以及內核模塊文件(/lib/modules)

/lib64 :專用於x86_64 系統上的輔助共享庫文件存放位置

/etc :配置文件目錄

/home/ USERNAME :普通用戶家目錄

/root :管理員的家目錄

/media :便攜式移動設備掛載點

  /mnt :臨時文件系統掛載點

/dev :設備文件及特殊文件存儲位置

       b: block device ,隨機訪問, 有緩存、物理

       c: character device ,線性訪問,無緩存、邏輯

/opt :第三方應用程序的安裝位置

/srv :系統上運行的服務用到的數據

/tmp:臨時文件存儲位置

      空設備:/dev/null  

  /usr: universal shared, read-only data   

    bin:  保證系統擁有完整功能而提供的應用程序

    sbin:

    lib :32 位使用

    lib64 :只存在64 位系統

    include: C 程序的頭文件(header files)

    share :結構化獨立的數據,例如doc, man等 等

    local :第三方應用程序的安裝位置

    bin, sbin, lib, lib64, etc, share    

 /var: variable data files

    cache:  應用程序緩存數據目錄

    lib:  應用程序狀態信息數據

    local :專用於爲/usr/local 下的應用程序存儲可變數據;

    lock:  鎖文件

    log:  日誌目錄及文件

    opt:  專用於爲/opt 下的應用程序存儲可變數據;

    run:  運行中的進程相關數據;通常用於存儲進程pid 文件

    spool:  應用程序數據池

    tmp: 保存系統兩次重啓之間產生的臨時數據 

 /proc:  用於輸出內核與進程信息相關的虛擬文件系統

/sys :用於輸出當前系統上硬件設備相關信息虛擬文件系統

/selinux: security enhanced Linux ,selinux 相關的安全策略等信息的存儲位置

 /misc    centos6中存在  可用/misc/cd掛載光驅

      /net   涉及到網絡服務  

RHEL7  目錄變化

 /bin 和 和 /usr/bin

/sbin 和 和 /usr/sbin

/lib  和/usr/lib

/lib64 和 和 /usr/lib64

   

 

文件有兩類數據:

    元數據:metadata   包括大小、時間、所屬主、組、權限等

    數據:data       文件的內容

文件名規則

 除了斜槓和NUL, 所有字符都有效. 但使用特殊字符的目錄名和文件不推薦使用,有些字符需要用引號來引用它們。

   包括路徑在內文件名稱最長4095 個字節,用/ 分隔的路徑不能超過255 個字節。

 標準Linux 文件系統(如ext4 ),文件名稱大小寫敏感。例如:MAIL, Mail, mail, mAiL,但是linxu在FAT文件系統下大小寫不敏感,例如掛載的U盤(FAT文件系統)所以說linux大小寫敏感是基於文件系統的


Linux 下的文件類型

    以文件權限開頭區分

     - :普通文件            灰色    文本、二進制文件等     

             可執行文件     綠色    .ELF等

              壓縮文件      紅色    .tar等

     d:  目錄文件           深藍色   

     b:  塊設備    隨機訪問   亮×××   有緩存  物理設備

     c:  字符設備   順序訪問   亮×××   無緩存  邏輯設備 

     l:  符號鏈接文件        淺藍色

     p:  管道文件pipe        ×××

     s:  套接字文件socket      粉色    用於進程間通訊


Linux 上的應用程序的組成部分

二進制程序:/bin, /sbin, /usr/bin, /usr/sbin,/usr/local/bin, /usr/local/sbin

庫文件:/lib, /lib64, /usr/lib, /usr/lib64,/usr/local/lib, /usr/local/lib64

配置文件:/etc, /etc/DIRECTORY, /usr/local/etc

幫助文件:/usr/share/man, /usr/share/doc,/usr/local/share/man, /usr/local/share/doc

    

顯示當前工作目錄

    每個shell 和系統進程都有一個當前的工作目錄CWD:current work directory

    顯示當前shell CWD 的絕對路徑

      #pwd: printing working directory


絕對和相對路徑名

 絕對路徑:以正斜槓開始,完整的文件的位置路徑,可用於任何想指定一個文件名的時候

 相對路徑:不以斜線,開始指定相對當前的工作目錄位置,可以作爲一個簡短的形式指定一個文件名


更改目錄

cd:改變當前shell工作目錄

  cd [-L|[-P [-e]]] [dir]

    -p 如果要切換到的目標目錄是一個符號連接,直接切換到符號連接指向的目標目錄 

    -L 如果要切換的目標目錄是一個符號的連接,直接切換到字符連接名代表的目錄,而非符號連接所指向的目標目錄。 - 當僅實用"-"一個選項時,當前工作目錄將被切換到環境變量"OLDPWD"所表示的目錄。


爲絕對或相對路徑:

        cd /home/joshua/work

        cd project/docs

    cd 進入用戶主目錄; 

    cd ~ 進入用戶主目錄; 

    cd - 返回進入此目錄之前所在的目錄; 

    cd .. 返回上級目錄(若當前目錄爲“/“,則執行完後還在“/";".."爲上級目錄的意思); 

    cd ../.. 返回上兩級目錄; 

    cd !$ 把上個命令的參數作爲cd參數使用。

相關的環境變量:

    PWD :保存了當前目錄路徑;

    OLDPWD :上一次所在目錄路徑;


列出目錄內容

 列出當前目錄的內容或指定目錄

用法:

ls [options] [files_or_dirs]

Example:

    ls -a  包含隱藏文件

    ls -l  顯示額外的信息

    ls -R 目錄遞歸通過

    ls -ld 目錄和符號鏈接信息

    ls -1 文件分行顯示

    ls –S  按從大到小排序

    ls –u 配合-t 選項,顯示並按atime  從新到舊排序

    ls –U 不排序按目錄存放順序顯示


glob文件通配符

*        匹配零個或多個字符

?        匹配任何單個字符

~        當前用戶家目錄          

~username   用戶家目錄   

~+        當前工作目錄

~-        前一個工作目錄          

[0-9]      匹配一個數字範圍

[1-3]      1到3    [^1a3]或非1或非a或非3

[a-z]      大寫和小寫字母

[A-Z]      大寫字母

[wxc]      匹配列表中的任何的一個字符[^wxc]     匹配列表中的所有字符以外的字符


預定義的字符類:#man 7 glob

    [:digit:] :任意數字,相當於0-9

    [:lower:] :任意小寫字母

    [:upper:]:  任意大寫字母

    [:alpha:]:  任意大小寫字母

    [:alnum:] :任意數字 或 字母

    [:blank:] :水平空白字符

    [:space:] :水平或垂直空白字符

    [:punct:]: : 標點符號

    [:print:] :可打印字符

    [:cntrl:] :控制(非打印)字符

    [:graph:] :圖形字符

    [:xdigit:]:十六進制字符


查看文件狀態

   stat

    文件:metadata, data

    三個時間戳:

    access time:訪問時間,atime,讀取文件內容    因爲relattime的原因:atime>一天或atime<mtime時更新

    modify time: 修改時間, mtime,改變文件內容(數據)

    change time: 改變時間, ctime,元數據發生改變


touch 命令:創建空文件和刷新時間

    touch [OPTION]... FILE...

        -a: 變 僅改變 atime

        -m: 變 僅改變 mtime

        -t :STAMP:[[CC]YY]MMDDhhmm[.ss]

        -c: 如果文件不存在,則不予創建


複製文件和目錄cp

cp [OPTION]... [-T] SOURCE DEST

cp [OPTION]... SOURCE... DIRECTORY

cp [OPTION]... -t DIRECTORY SOURCE...

cp SRC DEST

    SRC 是文件:

    如果目標不存在:新建DEST ,並將SRC 中內容填充至DEST中   實質是:複製並改名

    如果目標存在: 

        如果DEST 是文件:將SRC 中的內容覆蓋至DEST中;基於安全,建議爲cp 命令使用-i 選項

        如果DEST 是目錄:在DEST下新建與原文件同名的文件,並將SRC中內容填充至新文件中

cp SRC... DEST

     SRC... :多個文件

     DEST 必須存在,且爲目錄,其它情形均會出錯;

cp SRC DEST

     SRC是目錄:此時使用選項:-r

     如果DEST 不存在:則創建指定目錄,複製SRC目錄中所有文件至DEST中;

     如果DEST存在:

          如果DEST是文件:報錯

          如果DEST目錄:在DEST下新建與原目錄同名的目錄,並將SRC中內容複製至新目錄中

                如果DEST目錄下的內容和複製目錄內的相同,則會連同複製目錄本身也複製過來作爲DEST目錄的子目錄,如果再次複製則會產生覆蓋此子目錄的操作    

         -a, --archive      等於-dR --preserve=all

                --backup[=CONTROL   爲每個已存在的目標文件創建備份

            -b        類似--backup 但不接受參數

                --copy-contents   在遞歸處理是複製特殊文件內容

            -d        等於--no-dereference --preserve=links

            -f, --force     如果目標文件無法打開則將其移除並重試(當 -n 選項

                    存在時則不需再選此項)

            -i, --interactive   覆蓋前詢問(使前面的 -n 選項失效)

            -H        跟隨源文件中的命令行符號鏈接

            -l, --link      鏈接文件而不復制

            -L, --dereference   總是跟隨符號鏈接

            -n, --no-clobber    不要覆蓋已存在的文件(使前面的 -i 選項失效)

            -P, --no-dereference    不跟隨源文件中的符號鏈接

            -p        等於--preserve=模式,所有權,時間戳

                --preserve[=屬性列表  保持指定的屬性(默認:模式,所有權,時間戳),如果可能保持附加屬性:環境、鏈接、xattr 等

            -c  same as --preserve=context

                --sno-preserve=屬性列表 不保留指定的文件屬性

                --parents     複製前在目標目錄創建來源文件路徑中的所有目錄

            -R, -r, --recursive   遞歸複製目錄及其子目錄內的所有內容

                --reflink[=WHEN]    控制克隆/CoW 副本。請查看下面的內如。

                --remove-destination  嘗試打開目標文件前先刪除已存在的目的地

                    文件 (相對於 --force 選項)

                --sparse=WHEN   控制創建稀疏文件的方式

                --strip-trailing-slashes  刪除參數中所有源文件/目錄末端的斜槓

            -s, --symbolic-link   只創建符號鏈接而不復制文件

            -S, --suffix=後綴   自行指定備份文件的後綴

            -t,  --target-directory=目錄  將所有參數指定的源文件/目錄複製至目標目錄

            -T, --no-target-directory 將目標目錄視作普通文件

命令別名

顯示當前shell 進程所有可用的命令別名

#alias

定義別名NAME ,其相當於執行命令VALUE; ;

#alias NAME='VALUE'

在命令行中定義的別名,僅對當前shell 進程有效

如果想永久有效,要定義在配置文件中

僅對當前用戶:~/.bashrc

對所有用戶有效:/etc/bashrc


編輯配置給出的新配置不會立即生效;

bash 進程重新讀取配置文件:

    source /path/to/config_file

    . /path/to/config_file

撤消別名:unalias

    unalias [-a] name [name ...]

如果別名同原命令同名,如果要執行原命令,可使用

“\COMMAND”

’COMMAND’

/PATH/COMMAND   絕對路徑


mv:移動(重命名)文件   

      source表示源文件或目錄,target表示目標文件或目錄。

      mv命令可以用來將源文件移至一個目標文件中,或將一組文件移至一個目標目錄中。

      源文件被移至目標文件有兩種不同的結果: 

            1、如果目標文件是到某一目錄文件的路徑,源文件會被移到此目錄下,且文件名不變。 

            2、如果目標文件不是目錄文件,則源文件名(只能有一個)會變爲此目標文件名,並覆蓋己存在的同名文件。

            3、如果源文件和目標文件在同一個目錄下,mv的作用就是改文件名。當目標文件是目錄文件時,源文件或目錄參數可以有多個,則所有的源文件都會被移至目標文件中。所有移到該目錄下的文件都將保留以前的文件名。 注意事項:mv與cp的結果不同,mv好像文件“搬家”,文件個數並未增加。而cp對文件進行復制,文件個數增加了。

        mv [OPTION]... [-T] SOURCE DEST

        mv [OPTION]... SOURCE... DIRECTORY

        mv [OPTION]... -t DIRECTORY SOURCE...

      長選項必須使用的參數對於短選項時也是必需使用的。

              --backup[=CONTROL]       爲每個已存在的目標文件創建備份

              -b                           類似--backup 但不接受參數

              -f, --force                  覆蓋前不詢問

              -i, --interactive            覆蓋前詢問

              -n, --no-clobber             不覆蓋已存在文件,如果您指定了-i、-f、-n 中的多個,僅最後一個生效。

                  --strip-trailing-slashes  去掉每個源文件參數尾部的斜線

              -S, --suffix=SUFFIX           替換常用的備份文件後綴

              -t, --target-directory=DIRECTORY      將所有參數指定的源文件或目錄

                                                    移動至 指定目錄

              -T, --no-target-directory     將目標文件視作普通文件處理

              -u, --update                  只在源文件文件比目標文件新,或目標文件

                                            不存在時才進行移動

              -v, --verbose         詳細顯示進行的步驟

              備份文件的後綴爲"~",除非以--suffix選項或是SIMPLE_BACKUP_SUFFIX環境變量指定。版本控制的方式可通過--backup選項或VERSION_CONTROL 環境變量來選擇。以下是可用的變量值:

                                                none, off       不進行備份(即使使用了--backup 選項)

                                                numbered, t     備份文件加上數字進行排序

                                                existing, nil   若有數字的備份文件已經存在則使用數字,否則使用普通方式備份

                                                simple, never   永遠使用普通方式備份


rm:刪除文件或目錄

     rm [OPTION]... FILE...

          -f, --force           強制刪除。忽略不存在的文件,不提示確認

          -d:直接把欲刪除的目錄的硬連接數據刪除成0,刪除該目錄

          -i                    在刪除前需要確認

          -I                    在刪除超過三個文件或者遞歸刪除前要求確認。此選項比-i 提

                                示內容更少,但同樣可以阻止大多數錯誤發生

              --interactive[=WHEN]      根據指定的WHEN 進行確認提示:never,once (-I),

                                        或者always (-i)。如果此參數不加WHEN 則總是提示

              --one-file-system         遞歸刪除一個層級時,跳過所有不符合命令行參

                                        數的文件系統上的文件

              --no-preserve-roo 不特殊對待"/"

              --preserve-root   不允許刪除"/"(默認)

          -r, -R, --recursive   遞歸刪除目錄及其內容

          -v, --verbose         詳細顯示進行的步驟

    注意:

        默認時,rm 不會刪除目錄。使用--recursive(-r 或-R)選項可刪除每個給定的目錄,以及其下所有的內容。

        要刪除第一個字符爲"-"的文件 (例如"-foo"),請使用以下方法之一:

          rm -- -foo

          rm ./-foo

        請注意,如果使用rm 來刪除文件,通常仍可以將該文件恢復原狀。如果想保證該文件的內容無法還原,請考慮使用shred。

         對於鏈接文件,只是刪除整個鏈接文件,而原有文件保持不變。 

         注意:使用rm命令要格外小心。因爲一旦刪除了一個文件,就無法再恢復它。所以在刪除文件之前,最好再看一下文件的內容,確定是否真要刪除。

         rm命令可以用-i選項,這個選項在使用文件擴展名字符刪除多個文件時特別有用。使用這個選項,系統會要求你逐一確定是否要刪除。這時,必須輸入y並按Enter鍵,才能刪除文件。如果僅按Enter鍵或其他字符,文件不會被刪除。


目錄操作

tree默認系統中沒有安裝,需要手動安裝

tree  顯示目錄樹

      -a 顯示所有文件和目錄。

      -A 使用ASNI繪圖字符顯示樹狀圖而非以ASCII字符組合。

      -C 在文件和目錄清單加上色彩,便於區分各種類型。

      -d 顯示目錄名稱而非內容。

      -D 列出文件或目錄的更改時間。

      -f 在每個文件或目錄之前,顯示完整的相對路徑名稱。

      -F 在執行文件,目錄,Socket,符號連接,管道名稱名稱,各自加上"*","/","=","@","|"號。

      -g 列出文件或目錄的所屬羣組名稱,沒有對應的名稱時,則顯示羣組識別碼。

      -i 不以階梯狀列出文件或目錄名稱。

      -I 不顯示符合範本樣式的文件或目錄名稱。

      -l 如遇到性質爲符號連接的目錄,直接列出該連接所指向的原始目錄。

      -L 層級顯示

      -n 不在文件和目錄清單加上色彩。

      -N 直接列出文件和目錄名稱,包括控制字符。

      -p 列出權限標示。

     -P 只顯示符合範本樣式的文件或目錄名稱。

      -q 用"?"號取代控制字符,列出文件和目錄名稱。

      -s 列出文件或目錄大小。

      -t 用文件和目錄的更改時間排序。

      -u 列出文件或目錄的擁有者名稱,沒有對應的名稱時,則顯示用戶識別碼。

      -x 將範圍侷限在現行的文件系統中,若指定目錄下的某些子目錄,其存放於另一個文件系統上,則將該子目錄予以排除在尋找範圍外。

mkdir  創建目錄

     長選項必須使用的參數對於短選項時也是必需使用的。

                -m, --mode=模式       設置權限模式(類似chmod),而不是rwxrwxrwx 減umask

                -p, --parents         需要時創建目標目錄的上層目錄,但即使這些目錄已存在也不當作錯誤處理

                -v, --verbose         每次創建新目錄都顯示信息

                -Z, --context=CTX     將每個創建的目錄的SELinux 安全環境設置爲CTX

                    --version         顯示版本信息並退出

       注意:該命令創建由dirname命名的目錄。如果在目錄名的前面沒有加任何路徑名,則在當前目錄下創建由dirname指定的目錄;如果給出了一個已經存在的路徑,將會在該目錄下創建一個指定的目錄。在創建目錄時,應保證新建的目錄與它所在目錄下的文件沒有重名。

rmdir  刪除空目錄

   rmdir [OPTION]... DIRECTORY...

   -p或--parents:刪除指定目錄後,若該目錄的上層目錄已變成空目錄,則將其一併刪除;

   --ignore-fail-on-non-empty:此選項使rmdir命令忽略由於刪除非空目錄時導致的錯誤信息; 

    -v或-verboes:顯示命令的詳細執行過程; 

    --version:顯示命令的版本信息。


在Nautilus 中移動和複製

 拖曳及放下

拖動:移動在同一文件系統,在不同的文件系統複製

拖動+ Ctrl鍵 鍵  :始終複製

拖動+ Alt鍵 鍵  :詢問是否複製,移動或創建符號鏈接(別名)

上下文菜單

        右鍵單擊要重命名,剪切,複製或粘貼

索引節點

inode (index node )表中包含文件系統所有文件列表

一個節點(索引節點)是在一個表項,包含有關文件的信息

( 元數據  ),包括:

    文件類型,權限,UID ,GID

    鏈接數(指向這個文件名路徑名稱個數)

    該文件的大小和不同的時間戳

    指向磁盤上文件的數據塊指針

    有關文件的其他數據

同一分區下inode編號唯一,不同分區可以一樣,每個分區都有各自的分區表inode table

元數據:存放在 inode table

數據內容:存放在 數據block

    指針佔據4個字節空間

    直接指針:12個  直接能找到低於12*4k數據

     間接指針:指向一指針數據塊

    一般inode表會佔用文件系統磁盤空間的1%,一個目錄文件的內容就是一個該目錄項的列表


目錄

 文件引用一個是 inode號

 人是通過文件名來引用一個文件

 一個目錄是目錄下的文件名和文件inode號之間的映射


cp 和inode

在 在 CP的 的  命令:

分配一個空閒的inode 號,在inode 表中生成新條目在目錄中創建一個目錄項,將名稱與inode 編號關聯,拷貝數據生成新的文件


rm和inode

rm命令:

鏈接數遞減,從而釋放的inode 號可以被重用,把數據塊放在空閒列表中,刪除目錄項,數據實際上不會馬上被刪除,但當另一個文件使用數據塊時將被覆蓋。


mv 和inode

 如果mv 命令的目標和源在相同的文件系統,作爲mv

      命令用新的文件名創建對應新的目錄項

      刪除舊目錄條目對應的舊的文件名

      不影響inode 表(除時間戳)或磁盤上的數據位置:沒有數據被移動!

    如果目標和源在一個不同的文件系統, mv 相當於cp 和rm

  硬鏈接(一個文件多個名字)

         創建硬鏈接會增加額外的記錄項以引用文件

         對應於同一文件系統上一個物理文件

         每個目錄引用相同的inode號

         創建時鏈接數遞增

注意:

   硬連接不能跨分區;不能對目錄操作

    centos6中   inode=2的都是分區的根

            inode=1的都是虛擬目錄

    centos7中   inode=128都是分區的根

 


刪除文件時:

rm 命令遞減計數的鏈接

文件要存在,至少有一個鏈接數

當鏈接數爲零時,該文件被刪除

 不能跨越驅動器或分區

 語法 :

  ln filename [linkname ]


  符號(或軟)鏈接

 一個符號鏈接指向另一個文件

 ls - l的 的  顯示鏈接的名稱和引用的文件

 一個符號鏈接的內容是它引用文件的名稱

 可以對目錄進行

 可以跨分區

 指向的是另一個文件的路徑;其大小爲指向的路徑字符串的長度;不增加或減少目標文件inode 的引用計數;

 語法:

    ln -s filename [linkname]

            原始文件路徑   軟鏈接

     軟鏈接文件:

     路徑

     原始文件相對路徑:相當於軟鏈接文件路徑,而不是相對於當前工作目錄



確定文件內容

文件可以包含多種類型的數據

檢查文文件類型,然後確定適當的開放命令或應用程序使用

file [options] <filename>...

    Option:

-b 列出文件辨識結果時,不顯示文件名稱。

-c 詳細顯示指令執行過程,便於排錯或分析程序執行形

-f 列出文件中文件名的文件類型

-F 使用指定分隔符號替換輸出文件名後默認的”:” 分隔符

-i 輸出mime類型的字符串

-L 查看對應軟鏈接對應文件的文件類型

-z 嘗試去解讀壓縮文件的內容

--help顯示命令在線幫助


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