RHCE7認證學習筆記15——訪問檔案系統

luashin發表於2016-03-14

1、檢視分割槽和裝置檔案

    /dev路徑下面儲存了系統的裝置檔案

    檢視系統已經掛載分割槽:

(1)
[root@linuxidc ~]# cat /proc/partitions 
major minor  #blocks  name
  2        0          4 fd0
  8        0  20971520 sda
  8        1    512000 sda1
  8        2  20458496 sda2
  11        0    3655680 sr0
 253        0  18358272 dm-0
 253        1    2097152 dm-1

    (2)
[root@linuxidc ~]# df  -hTP
Filesystem            Type      Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root xfs        18G  3.1G  15G  18% /
devtmpfs              devtmpfs  485M    0  485M  0% /dev
tmpfs                tmpfs    494M  80K  494M  1% /dev/shm
tmpfs                tmpfs    494M  7.1M  487M  2% /run
tmpfs                tmpfs    494M    0  494M  0% /sys/fs/cgroup
/dev/sda1            xfs      497M  119M  379M  24% /boot

    檢視檔案系統的UUID,UUID標記的是檔案系統,而非分割槽,使用UUID標記的好處是在分割槽發生錯位的情況下,比如sda5,sda6,sda7:如 果sda5被刪除了,則sda6變成sda6,sda7變成sda6,那麼在檔案/etc/fstab掛載中,如果還是寫sda6,sda7,則掛載會出 現問題;所以最好再fstab裡面掛載時寫UUID
[root@linuxidc ~]# blkid
/dev/sda1: UUID="64d32c15-8708-44a2-893a-a437c0f43156" TYPE="xfs"
/dev/sda2: UUID="4Ice1U-52dB-jxhY-80pW-vWus-rv1n-MVBJQ5" TYPE="LVM2_member"
/dev/sr0: UUID="2014-05-07-03-58-46-00" LABEL="RHEL-7.0 Server.x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/rhel-root: UUID="6e18526c-e4fa-4854-adcd-d2e463a53bf9" TYPE="xfs"
/dev/mapper/rhel-swap: UUID="b4476c9f-7681-48d8-8cba-3904f4ebce61" TYPE="swap"

2、掛載檔案系統
    檢視資料夾大小,而不是內容:
[root@linuxidc ~]# ls -ld /boot/
dr-xr-xr-x. 3 root root 4096 Dec 26 15:33 /boot/

    檢視資料夾內容的大小使用du命令:
[root@linuxidc ~]# du -h /boot/
0/boot/grub2/themes/system
0/boot/grub2/themes
2.4M/boot/grub2/i386-pc
3.3M/boot/grub2/locale
2.5M/boot/grub2/fonts
8.1M/boot/grub2
94M/boot/
 
[root@linuxidc ~]# du -hs /boot/
94M/boot/

    使用mount命令掛載檔案系統:

        常用選項:

    -o: 選項1,選項2...  檔案系統  掛載點

          ro:只讀選項;
            remount:重新掛載

 

[root@linuxidc ~]# mount /dev/cdrom /iso/
mount: /dev/sr0 is write-protected, mounting read-only

[root@linuxidc ~]# mount UUID="2014-05-07-03-58-46-00" /iso/

    當掛載點掛載一個檔案系統的時候,那麼掛載點裡面原有的東西都會被隱藏;

    解除安裝檔案系統:umount ;

    解除安裝檔案系統的時候,如果檔案系統被某個程式佔用,則解除安裝會提示系統繁忙,無法解除安裝:

 [root@linuxidc iso]# umount /iso/
umount: /iso: target is busy.
        (In some cases useful info about processes that use
        the device is found by lsof(8) or fuser(1))

    這時候使用fuser命令,檢視佔用的程式,然後kill命令殺死,再解除安裝即可:

[root@linuxidc iso]# fuser -mv /iso/
                    USER        PID ACCESS COMMAND
/iso:                root    kernel mount /iso
                    root      6256 ..c.. bash

 [root@linuxidc ~]# kill -9 6256

    輸入mount命令可以檢視所有的掛載選項:

3、開機自動掛載檔案系統
    編輯/etc/fstab檔案,編輯開機自動掛載檔案系統:

   
  9 /dev/mapper/rhel-root  /                      xfs    defaults        1 1
 10 UUID=64d32c15-8708-44a2-893a-a437c0f43156 /boot                  xfs    defaults        1 2
 11 /dev/mapper/rhel-swap  swap                    swap    defaults        0 0

        檔案系統                          掛載點        檔案系統        掛載選項    dump    fsck檢查(一般寫0)


    配置完成fstab後,使用mount -a 命令掛載檔案系統;

4、檔案的軟硬連結

    分割槽的每個block預設大小是4K,一個block只能儲存一個檔案;inode相當於分割槽的索引,記錄了檔案的屬性資訊;

    硬連結,檔案的inode相同,實質上指的是相同的檔案,相當於一個檔案兩個名稱,修改其中的一個檔案,另一個也會改變,刪除其中一個檔案,不會影響另一個檔案:
1234 [root@linuxidc tmp]# touch aa 
[root@linuxidc tmp]# ln aa bb
[root@linuxidc tmp]# ls -i aa bb
102819918 aa  102819918 bb

 inode只能記錄本分割槽的block資訊,硬連結不能跨分割槽

建立一個資料夾,預設就會有2個硬連結,一個是資料夾本身,另一個是資料夾的".":, “..” 返回上一層目錄也是一個硬連結:
 ”[root@linuxidc tmp]# mkdir aa
[root@linuxidc tmp]# ls -ld aa/
drwxr-xr-x. 2 root root 6 Jan 14 16:32 aa/

5、檔案查詢
    whereis + 檔案   

    which  +  命令

    locate:利用資料庫來根據名字查詢檔案,查詢速度很快,但是資料庫一週更新一次;可以使用updatedb命令手工更新資料庫: 

    find: find + 目錄+屬性+值

    屬性值:

            1、name;

            2、size;

            3、user group;

            4、uid,gid;

            5、perm;查詢許可權    222完全匹配,-222至ugo分別少要含有相對應的許可權222,+222,/222或關係,ugo分別只要滿足其中一個許可權即可

            6、type;

            7、ctime/cminu;

            8、newer;

 

    find查詢出來的內容要執行命令,則按照以下兩種方式操作:

    [root@linuxidc tmp]# find -name "*" | xargs ls -l
    [root@linuxidc tmp]# find -ctime +1 -exec ls -l {} \;

   

6、find命令引數詳解
SYNOPSIS語法格式
      find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
    選項:

        -P:不查詢連結檔案內容,這是預設選項;

        -L:查詢連結檔案內容,如果檔案時連結檔案,那麼加入這個選項,命令將會檢視連結所指的檔案的內容:

            例如,2個連結檔案,一個指向檔案,一個指向目錄:
[root@linuxidc tmp]# ll bb cc
lrwxrwxrwx. 1 root root 12 Jan 15 14:59 bb -> /root/passwd
lrwxrwxrwx. 1 root root  5 Jan 15 15:11 cc -> /root

      不加-L選項時,查詢bb和cc檔案:
    [root@linuxidc tmp]# find bb cc -type f  沒有結果
        加入-L選項,將會查詢連結檔案指向的真正內容:
[root@linuxidc tmp]# find -L  bb cc -type f

        -H:這個選項和-L選項類似,不同的區別是,假如查詢的連結檔案是壞連結,則將會顯示連結檔案的資訊;

        -follow:這個選項後面的連結檔案也會被指向其連結的真正檔案;

        -D: 診斷資訊

            診斷選項:
help  Explain the debugging options
tree  Show the expression tree in its original and optimised form.
stat  Print  messages  as  files are examined with the stat and lstat system calls.  The find program tries to min?imise such calls.
opt    Prints diagnostic information relating to the optimisation of the expression tree; see the -O option.
rates  Prints a summary indicating how often each predicate succeeded or failed.

    -Olevel;最佳化層級
        0:

        1:預設層級

        2:

        3:

    表示式expression由三個部分組成,由運算子分隔開:

        選項option,所有選項返回true值:   

                常用選項

                    -d,-depth:處理目錄的內容的層級

                    -maxdepth:處理目錄的最大層級;

                    -noleaf:針對於CD-ROM,MS-DOS,AFS等不符合unix檔案系統規範的檔案;

        測試tests:

                -ctime;

                -atime:

                -perm:

                -iname:

                -path

                -mmin:

                -mtime:

                -newer:

                -name

                -size:檔案大小

                -type:檔案型別:b,c,d,f,l,p,s,d

                -uid:

                -gid:
                   

        操作actions:

                -delete:

                -exec command: 執行多個命令,直到遇到帶;的命令

                -exec comand {}  \; :

                -execdir command:

                -execdir comand {} \; :只執行查詢的檔案的當前目錄

                -fprint:

                -prune:修剪,只顯示檔案所所指向的目錄:

    find的運算子:
        (expr):               

            !:非

            not:

            expr1 expr2:並且

            expr1 -a expr:並且

            expr1 -and expr2:並且
            expr1 -o expr2:或者

            expr1 -or expr2:或者

    三種標準格式:POSIX,GNU,BSD

    環境變數:

        LANG:
        LC_ALL:
        PATH:
        POSIXLY_CORRECT: 設定了這個環境變數,那麼 -perm +zzz這樣的模式會出錯
Determines  the  block size used by -ls and -fls.  If POSIXLY_CORRECT is set, blocks are units of 512 bytes.  Other‐
              wise they are units of 1024 bytes.

When POSIXLY_CORRECT is not set, -perm +zzz is treated just like -perm /zzz if +zzz is not a  valid  symbolic  mode.
              When POSIXLY_CORRECT is set, such constructs are treated as an error.

    常見使用例子:

        找到檔名為core的檔案,並刪除:
find /tmp -name core -type f -print | xargs /bin/rm -f

 

    如果檔案或目錄含有單引號、雙引號、換行符,以下的find也能找到:
find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f

    找到當前目錄下面的檔案,並執行file命令:

    find . -type f -exec file '{}' \;
    或:find . -type f -exec file {} \;

    遍歷跟目錄,查詢setuid的檔案和目錄並儲存到/root/suid.txt,查詢大於100M的檔案並儲存到/root/big.txt,%#m=檔案許可權前面加特殊標記位,%u =UID,%p=檔名稱,%s=檔案大小:
    find / \( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \)  \
      \( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)

    查詢家目錄下面在最近24小時內修改的檔案:

find $HOME -mtime 0

    尋找sbin目錄下面可執行但是不可讀的檔案,!是非的意思,使用跳脫字元\進行轉義:
find /sbin /usr/sbin -executable \! -readable -print

    精確匹配:

find . -perm 664

find . -perm -664    至少包含644許可權

find . -perm /222    ugo的許可權位只要滿足一個條件即可

find . -perm /220
find . -perm /u+w,g+w
find . -perm /u=w,g=w

        find . -perm -444 -perm /222 ! -perm /111
        find . -perm -a+r -perm /a+w ! -perm /a+x

        find repo/ -exec test -d {}/.svn \; -or \
      -exec test -d {}/.git \; -or -exec test -d {}/CVS \; \
      -print -prune

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9034054/viewspace-2056757/,如需轉載,請註明出處,否則將追究法律責任。

相關文章