識別文件系統(tǒng)和設備
目標
完成本節(jié)后菠隆,您能夠識別文件系統(tǒng)層次結構中的目錄以及將其存儲在哪個設備上朋魔。
儲存管理概念
Linux服務器上的文件通過文件系統(tǒng)層次結構(目錄的單個倒置樹)進行訪問久信。 該文件系統(tǒng)層次結構是由系統(tǒng)可用存儲設備提供的文件系統(tǒng)組裝而成的冷冗。 每個文件系統(tǒng)都是一個已格式化以存儲文件的存儲設備吱窝。
從某種意義上說若厚,Linux的文件系統(tǒng)層次結構展示了一個獨立的存儲設備上的文件系統(tǒng)集合拦英,就好像是一個巨大的存儲設備上的一組文件,你可以在一個巨大的存儲設備上瀏覽测秸。很多時候疤估,你不需要知道特定的文件在哪個存儲設備上,你只需要知道該文件所在的目錄霎冯。
但是铃拇,有時它可能很重要。 您可能需要確定存儲設備的容量以及文件系統(tǒng)層次結構中的哪些目錄受到影響沈撞。 存儲設備的日志中可能存在錯誤慷荔,并且您需要知道哪些文件系統(tǒng)受到威脅。 您可能只想在兩個文件之間創(chuàng)建硬鏈接缠俺,并且需要知道它們是否在同一文件系統(tǒng)上显晶,以確定是否可能。
但是壹士,有時候磷雇,這可能是很重要的。你可能需要確定一個存儲設備有多滿躏救,以及文件系統(tǒng)層次結構中的哪些目錄受到影響倦春。存儲設備的日志中可能會有錯誤,你需要知道哪些文件系統(tǒng)有風險。你可能只是想在兩個文件之間建立一個硬連接睁本,你需要知道它們是否在同一個文件系統(tǒng)中尿庐,以確定是否有可能。
文件系統(tǒng)和掛載點
要使文件系統(tǒng)的內容在文件系統(tǒng)層次結構中可用呢堰,必須將其掛載在一個空目錄上抄瑟。這個目錄被稱為掛載點。掛載后枉疼,如果使用ls來列出該目錄皮假,就會看到掛載的文件系統(tǒng)的內容,可以正常訪問和使用這些文件骂维。許多文件系統(tǒng)是在啟動過程中自動掛載的惹资。
如果你只使用過Microsoft Windows的驅動器字母,這是個本質上不同的概念航闺。它有點類似于NTFS掛載文件夾的功能褪测。
文件系統(tǒng)、存儲和塊設備
在Linux中潦刃,對存儲設備的低級訪問是由一種稱為塊設備的特殊類型的文件提供的侮措。這些塊設備必須用文件系統(tǒng)格式化,然后才能掛載乖杠。
塊設備文件和其他設備文件一起存儲在/dev目錄下分扎。設備文件是由操作系統(tǒng)自動創(chuàng)建的。在Red Hat Enterprise Linux中胧洒,檢測到的第一個SATA/PATA畏吓、SAS、SAS卫漫、SCSI或USB硬盤驅動器被稱為/dev/sda庵佣,第二個是/dev/sdb,以此類推汛兜。這些名稱代表了整個硬盤驅動器。
其他類型的存儲會有其他形式的命名通今。
塊設備命名
TYPE OF DEVICE | DEVICE NAMING PATTERN |
---|---|
SATA/SAS/USB-attached storage | /dev/sda, /dev/sdb ... |
virtio-blk paravirtualized storage (some virtual machines) | /dev/vda, /dev/vdb ... |
NVMe-attached storage (many SSDs) | /dev/nvme0, /dev/nvme1 ... |
SD/MMC/eMMC storage (SD cards) | /dev/mmcblk0, /dev/mmcblk1 ... |
磁盤分區(qū)
通常情況下粥谬,你不會把整個存儲設備做成一個文件系統(tǒng),將存儲設備分為稱為分區(qū)的較小塊辫塌。
分區(qū)允許您對磁盤進行分區(qū):不同的分區(qū)可以被格式化為不同的文件系統(tǒng)或用于不同的目的漏策。例如,一個分區(qū)可以包含用戶主目錄臼氨,而另一個分區(qū)可以包含系統(tǒng)數(shù)據(jù)和日志掺喻。如果用戶用數(shù)據(jù)填滿了主目錄分區(qū),系統(tǒng)分區(qū)可能仍有可用空間。
分區(qū)本身就是塊設備感耙。在SATA連接的存儲上褂乍,第一個磁盤上的第一個分區(qū)是/dev/sda1。第二個磁盤上的第三個分區(qū)是/dev/sdb3即硼,依此類推逃片。半虛擬化存儲設備具有類似的命名系統(tǒng)。
連接NVMe的SSD設備以不同的方式命名其分區(qū)只酥。在這種情況下褥实,第一個磁盤上的第一個分區(qū)是/dev/nvme0p1。第二個磁盤上的第三個分區(qū)是/dev/nvme1p3裂允,依此類推损离。SD卡或MMC卡有類似的命名系統(tǒng)。
主機上的/ dev / sda1設備文件的一長串列出了其特殊的文件類型b绝编,表示塊設備:
[user@host ~]$ ls -l /dev/sda1
brw-rw----. 1 root disk 8, 1 Feb 22 08:00 /dev/sda1
邏輯卷
另一種組織磁盤和分區(qū)的方法是使用邏輯卷管理(LVM)僻澎。使用LVM,一個或多個塊設備可以聚合到稱為卷組的存儲池中瓮增。然后怎棱,卷組中的磁盤空間被分配到一個或多個邏輯卷,這些邏輯卷的功能相當于物理磁盤上的一個分區(qū)绷跑。
LVM系統(tǒng)在創(chuàng)建時為卷組和邏輯卷分配名稱拳恋。LVM會在/dev中創(chuàng)建一個與組名相匹配的目錄,然后在這個新目錄中創(chuàng)建一個與邏輯卷同名的符號鏈接砸捏。然后這個邏輯卷文件就可以被掛載谬运。例如,如果一個卷組被稱為myvg垦藏,而其中的邏輯卷被稱為mylv梆暖,那么邏輯卷設備文件的完整路徑名就是/dev/myvg/mylv。
檢查文件系統(tǒng)
要了解本地和遠程文件系統(tǒng)設備的概況以及可用空間的數(shù)量掂骏,請運行 df 命令轰驳。當運行 df 命令沒有參數(shù)時,它會報告總的磁盤空間弟灼、已使用的磁盤空間级解、可用的磁盤空間,以及所有掛載的常規(guī)文件系統(tǒng)上使用的總磁盤空間的百分比田绑。它可以報告本地和遠程文件系統(tǒng)勤哗。下面的例子顯示了主機上的文件系統(tǒng)和掛載點。
[user@host ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 912584 0 912584 0% /dev
tmpfs 936516 0 936516 0% /dev/shm
tmpfs 936516 16812 919704 2% /run
tmpfs 936516 0 936516 0% /sys/fs/cgroup
/dev/vda3 8377344 1411332 6966012 17% /
/dev/vda1 1038336 169896 868440 17% /boot
tmpfs 187300 0 187300 0% /run/user/1000
主機系統(tǒng)上的分區(qū)顯示兩個物理文件系統(tǒng)掩驱,分別掛載在/和/boot上芒划。這在虛擬機中很常見冬竟。tmpfs和devtmpfs設備是系統(tǒng)內存中的文件系統(tǒng)。所有寫入tmpfs或devtmpfs的文件都會在系統(tǒng)重啟后消失民逼。
為了提高輸出尺寸的可讀性泵殴,有兩個不同的可讀選項。-h 或 -H缴挖。這兩個選項之間的區(qū)別在于 -h 以 KiB袋狞、MiB 或 GiB為單位,而 -H 選項則以SI單位報告:KB映屋、MB 或 GB苟鸯。硬盤制造商在宣傳其產品時通常使用SI單位。
顯示主機系統(tǒng)上的文件系統(tǒng)報告棚点,并將所有單位轉換為人類可讀格式:
[user@host ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 892M 0 892M 0% /dev
tmpfs 915M 0 915M 0% /dev/shm
tmpfs 915M 17M 899M 2% /run
tmpfs 915M 0 915M 0% /sys/fs/cgroup
/dev/vda3 8.0G 1.4G 6.7G 17% /
/dev/vda1 1014M 166M 849M 17% /boot
tmpfs 183M 0 183M 0% /run/user/1000
要了解某個目錄樹所使用的空間的更多詳細信息早处,請使用du命令。du命令有-h和-H選項瘫析,可以將輸出轉換為人類可讀的格式砌梆。du命令可以遞歸顯示當前目錄樹中所有文件的大小。
顯示主機上的/usr/share目錄的磁盤使用情況報告:
[root@host ~]# du /usr/share
...output omitted...
176 /usr/share/smartmontools
184 /usr/share/nano
8 /usr/share/cmake/bash-completion
8 /usr/share/cmake
356676 /usr/share
以人類可讀格式顯示主機上的/usr/share目錄的磁盤使用情況報告:
[root@host ~]# du -h /var/log
...output omitted...
176K /usr/share/smartmontools
184K /usr/share/nano
8.0K /usr/share/cmake/bash-completion
8.0K /usr/share/cmake
369M /usr/share
掛載和卸載文件系統(tǒng)
目標
完成此部分后贬循,您能夠通過在文件系統(tǒng)層次結構中添加和刪除文件系統(tǒng)來訪問文件系統(tǒng)的內容咸包。
手動掛載文件系統(tǒng)
要訪問可移動存儲設備上的文件系統(tǒng),需要安裝該文件系統(tǒng)杖虾。mount命令允許根用戶手動掛載文件系統(tǒng)烂瘫。mount命令的第一個參數(shù)指定要裝入的文件系統(tǒng)。第二個參數(shù)指定了要在文件系統(tǒng)層次結構中使用的目錄作為掛載點奇适。
有兩種常用方法可以將磁盤分區(qū)上的文件系統(tǒng)指定給mount命令:
- 在/ dev中包含文件系統(tǒng)的設備文件名坟比。
- 將UUID寫入文件系統(tǒng),是一個通用的唯一標識符嚷往。
掛載設備相對簡單葛账。您需要確定您要安裝的設備,確保安裝點的存在皮仁,并將設備安裝到安裝點上籍琳。
識別塊設備
熱插拔式存儲設備,無論是硬盤驅動器(HDD)還是服務器盒中的固態(tài)設備(SSD)贷祈,或者是USB存儲設備趋急,每次連接到系統(tǒng)時,都可能會被插入不同的端口付燥。
使用 lsblk 命令可以列出指定塊設備或所有可用設備的詳細信息。
[root@host ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 12G 0 disk ├─vda1 253:1 0 1G 0 part /boot
├─vda2 253:2 0 1G 0 part [SWAP]
└─vda3 253:3 0 11G 0 part /
vdb 253:16 0 64G 0 disk
└─vdb1 253:17 0 64G 0 part
如果你知道你剛剛添加了一個64GB的存儲設備和一個分區(qū)愈犹,那么你可以從前面的輸出中猜到/dev/vdb1就是你要掛載的分區(qū)键科。
通過塊設備名稱掛載
下面的示例將文件系統(tǒng)/dev/vdb1分區(qū)掛載在目錄/mnt/ data上闻丑。
[root@host ~]# mount /dev/vdb1 /mnt/data
要掛載一個文件系統(tǒng),目標目錄必須已經(jīng)存在勋颖。默認情況下嗦嗡,/mnt目錄已經(jīng)存在,是作為臨時掛載點使用的饭玲。
你可以使用 /mnt 目錄侥祭,或者最好是創(chuàng)建一個 /mnt 的子目錄作為臨時掛載點,除非你有很好的理由將其掛載在文件系統(tǒng)層次結構中的特定位置茄厘。
這種方法在短期內效果不錯矮冬。但是,如果設備被添加到系統(tǒng)中或從系統(tǒng)中刪除次哈,操作系統(tǒng)檢測磁盤的順序就會改變胎署。這將改變與該存儲設備相關的設備名稱。更好的方法是通過文件系統(tǒng)中的一些特性來加載窑滞。
按文件系統(tǒng)UUID掛載
與文件系統(tǒng)相關聯(lián)的一個穩(wěn)定的標識符是其UUID琼牧,這是一個非常長的十六進制數(shù)字,作為一個通用的唯一標識符哀卫。這個UUID是文件系統(tǒng)的一部分巨坊,只要文件系統(tǒng)沒有被重新創(chuàng)建,這個UUID就會保持不變此改。
lsblk -fp 命令列出了設備的完整路徑趾撵、UUUID 和掛載點,以及分區(qū)中的文件系統(tǒng)類型带斑。如果文件系統(tǒng)沒有掛載鼓寺,掛載點將是空白。
[root@host ~]# lsblk -fp
NAME FSTYPE LABEL UUID MOUNTPOINT
/dev/vda
├─/dev/vda1 xfs 23ea8803-a396-494a-8e95-1538a53b821c /boot
├─/dev/vda2 swap cdf61ded-534c-4bd6-b458-cab18b1a72ea [SWAP]
└─/dev/vda3 xfs 44330f15-2f9d-4745-ae2e-20844f22762d /
/dev/vdb
└─/dev/vdb1 xfs 46f543fd-78c9-4526-a857-244811be2d88
通過文件系統(tǒng)的UUID掛載文件系統(tǒng):
[root@host ~]# mount UUID="46f543fd-78c9-4526-a857-244811be2d88" /mnt/data
可移動存儲設備的自動掛載
如果你登錄并使用圖形化桌面環(huán)境勋磕,當插入任何可移動存儲介質時妈候,它將自動掛載任何可移動存儲介質。
可移動存儲設備被掛載在/run/media/USERNAME/LABEL挂滓,其中USERNAME是登錄到圖形環(huán)境的用戶名稱苦银,LABEL是一個標識符,通常是創(chuàng)建文件系統(tǒng)時給文件系統(tǒng)的名稱赶站,如果有的話幔虏,通常是給文件系統(tǒng)的名稱。
移除設備前贝椿,應先手動卸載設備想括。
卸載文件系統(tǒng)
關機和重啟程序會自動解除所有文件系統(tǒng)的掛載。作為這個過程的一部分烙博,任何緩存在內存中的文件系統(tǒng)數(shù)據(jù)都會被刷新到存儲設備上瑟蜈,從而確保文件系統(tǒng)不會發(fā)生數(shù)據(jù)損壞烟逊。
要解除文件系統(tǒng)的掛載,umount命令需要掛載點作為參數(shù)铺根。
[root@host ~]# umount /mnt/data
如果掛載的文件系統(tǒng)正在使用中宪躯,則無法解除掛載。為了使umount命令成功位迂,所有進程需要停止訪問掛載點下的數(shù)據(jù)访雪。
在下面的例子中,umount失敗的原因是文件系統(tǒng)正在使用中(shell使用的是/mnt/data作為當前的工作目錄)掂林,產生了一個錯誤消息臣缀。
[root@host ~]# cd /mnt/data
[root@host data]# umount /mnt/data
umount: /mnt/data: target is busy.
lsof命令會列出所有打開的文件以及在提供的目錄中訪問這些文件的進程。這對于識別當前阻止文件系統(tǒng)成功卸載的進程是非常有用的党饮。
[root@host data]# lsof /mnt/data
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1593 root cwd DIR 253,17 6 128 /mnt/data
lsof 2532 root cwd DIR 253,17 19 128 /mnt/data
lsof 2533 root cwd DIR 253,17 19 128 /mnt/data
一旦確定了進程肝陪,就可以采取相應的行動,比如等待進程完成刑顺,或者向進程發(fā)送SIGTERM或SIGKILL信號氯窍。在這種情況下,只需將當前工作目錄改為掛載點以外的目錄即可蹲堂。
[root@host data]# cd
[root@host ~]# umount /mnt/data
在系統(tǒng)上定位文件
目標
完成這一部分后狼讨,你能夠使用find和locate定位來搜索掛載文件系統(tǒng)中的文件。
查找文件
系統(tǒng)管理員需要工具來搜索文件系統(tǒng)中符合特定條件的文件柒竞。本節(jié)將討論兩個可以搜索文件系統(tǒng)層次結構中的文件的命令政供。
- locate命令可以在預生成的索引中搜索文件名或文件路徑,并立即返回結果朽基。
- find命令通過遍歷文件系統(tǒng)層次結構來實時搜索文件布隔。
按名稱查找文件
locate命令根據(jù)文件的名稱或路徑來查找文件。它的速度很快稼虎,因為它可以從mlocate數(shù)據(jù)庫中查找這些信息衅檀。但是,這個數(shù)據(jù)庫不是實時更新的霎俩,必須經(jīng)常更新才能保證結果的準確性哀军。這也意味著locate 將無法找到上次數(shù)據(jù)庫更新后創(chuàng)建的文件。
locate數(shù)據(jù)庫每天都會自動更新打却。但是杉适,根用戶可以隨時發(fā)出updatedb命令來強制立即更新。
[root@host ~]# updatedb
locate命令限制了非權限用戶的搜索結果柳击。為了查看結果的文件名猿推,用戶必須擁有文件所在目錄的搜索權限。
在主機上的用戶可讀的目錄樹中搜索目錄名或路徑中帶有passwd的文件捌肴。
[user@host ~]$ locate passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd
/usr/bin/grub2-mkpasswd-pbkdf2
/usr/bin/lppasswd
/usr/bin/passwd
...output omitted...
即使文件名或路徑僅與搜索查詢部分匹配蹬叭,也將返回結果毯侦。
[root@host ~]# locate image
/etc/selinux/targeted/contexts/virtual_image_context
/usr/bin/grub2-mkimage
/usr/lib/sysimage
/usr/lib/dracut/dracut.conf.d/02-generic-image.conf
/usr/lib/firewalld/services/ovirt-imageio.xml
/usr/lib/grub/i386-pc/lnxboot.image
...output omitted...
-i 選項執(zhí)行不區(qū)分大小寫的搜索。使用該選項具垫,所有可能的大寫和小寫字母的組合都可以匹配搜索。
[user@host ~]$ locate -i messages
...output omitted...
/usr/share/vim/vim80/lang/zh_TW/LC_MESSAGES
/usr/share/vim/vim80/lang/zh_TW/LC_MESSAGES/vim.mo
/usr/share/vim/vim80/lang/zh_TW.UTF-8/LC_MESSAGES
/usr/share/vim/vim80/lang/zh_TW.UTF-8/LC_MESSAGES/vim.mo
/usr/share/vim/vim80/syntax/messages.vim
/usr/share/vim/vim80/syntax/msmessages.vim
/var/log/messages
選項 -n 限制了 locate 命令返回的搜索結果的數(shù)量试幽。下面的例子將locate命令返回的搜索結果限制在前五個匹配的結果筝蚕。
[user@host ~]$ locate -n 5 snow.png
/usr/share/icons/HighContrast/16x16/status/weather-snow.png
/usr/share/icons/HighContrast/22x22/status/weather-snow.png
/usr/share/icons/HighContrast/24x24/status/weather-snow.png
/usr/share/icons/HighContrast/256x256/status/weather-snow.png
/usr/share/icons/HighContrast/32x32/status/weather-snow.png
實時搜索文件
find命令通過在文件系統(tǒng)層次結構中進行實時搜索來定位文件。它比locate慢铺坞,但更準確起宽。它還可以根據(jù)文件名以外的標準來搜索文件,例如文件的權限济榨、文件類型坯沪、文件大小、修改時間等擒滑。
find命令使用執(zhí)行搜索的用戶帳戶來查看文件系統(tǒng)中的文件腐晾。調用查找命令的用戶必須具有讀取和執(zhí)行目錄的權限,才能檢查其內容丐一。
find命令的第一個參數(shù)是要搜索的目錄藻糖。如果省略了目錄參數(shù),find將在當前目錄中開始搜索库车,并在任何子目錄中尋找匹配的目錄巨柒。
要通過文件名搜索文件,請使用 -name FILENAME 選項柠衍。使用這個選項洋满,find會返回與FILENAME匹配的文件路徑。例如珍坊,要搜索從 / 目錄開始的名為 sshd_config 的文件牺勾,請運行以下命令。
[root@host ~]# find / -name sshd_config
/etc/ssh/sshd_config
通配符可用于搜索文件名垫蛆,并返回所有部分匹配的結果禽最。使用通配符時,一定要引用要查找的文件名袱饭,以防止終端解釋通配符川无。
在下面的例子中,搜索以/目錄中以.txt結尾的文件虑乖。
[root@host ~]# find / -name '*.txt'
/etc/pki/nssdb/pkcs11.txt
/etc/brltty/brl-lt-all.txt
/etc/brltty/brl-mb-all.txt
/etc/brltty/brl-md-all.txt
/etc/brltty/brl-mn-all.txt
...output omitted...
要搜索/etc/目錄中包含單詞 "pass"的文件懦趋,請運行以下命令。
[root@host ~]# find /etc -name '*pass*'
/etc/security/opasswd
/etc/pam.d/passwd
/etc/pam.d/password-auth
/etc/passwd-
/etc/passwd
/etc/authselect/password-auth
要對指定的文件名進行大小寫敏感的搜索疹味,請使用 -iname 選項仅叫,后面是要搜索的文件名帜篇。要搜索主機上的/目錄中的文件名中的大小寫敏感文本 messages,請運行以下命令诫咱。
[root@host ~]# find / -iname '*messages*'
...output omitted...
/usr/share/vim/vim80/lang/zh_CN.UTF-8/LC_MESSAGES
/usr/share/vim/vim80/lang/zh_CN.cp936/LC_MESSAGES
/usr/share/vim/vim80/lang/zh_TW/LC_MESSAGES
/usr/share/vim/vim80/lang/zh_TW.UTF-8/LC_MESSAGES
/usr/share/vim/vim80/syntax/messages.vim
/usr/share/vim/vim80/syntax/msmessages.vim
根據(jù)所有權或權限搜索文件
find命令可以根據(jù)文件的所有權或權限來搜索文件笙隙。按所有者搜索時,有用的選項是 -user 和 -group坎缭,按名稱搜索竟痰,以及 -uid 和 -gid,按 ID 搜索掏呼。
在主機上的/home/user目錄下搜索用戶擁有的文件坏快。
[user@host ~]$ find -user user
.
./.bash_logout
./.bash_profile
./.bashrc
./.bash_history
在主機上的/home/user目錄下搜索組用戶所擁有的文件。
[user@host ~]$ find -group user .
./.bash_logout
./.bash_profile
./.bashrc
./.bash_history
在主機上的/home/user目錄下搜索用戶ID 1000擁有的文件憎夷。
[user@host ~]$ find -uid 1000 .
./.bash_logout
./.bash_profile
./.bashrc
./.bash_history
在主機的/ home / user目錄中搜索組ID 1000擁有的文件莽鸿。
[user@host ~]$ find -gid 1000 .
./.bash_logout
./.bash_profile
./.bashrc
./.bash_history
當文件所有者和群組所有者不同時, -user 和 -group 選項可以一起使用拾给,以搜索文件所有者和群組所有者不同的文件祥得。下面的例子列出了由用戶根目錄下的文件和群組郵件所屬的文件。
[root@host ~]# find / -user root -group mail
/var/spool/mail
...output omitted...
-perm 選項用于查找具有特定權限的文件蒋得。權限可以用八進制值來描述啃沪,讀取、寫入和執(zhí)行的權限可以是4窄锅、2和1的組合创千。權限可以用/或-符號表示。
以/為前綴的數(shù)字權限可以匹配至少有一個用戶入偷、組或其他權限集的文件追驴。一個權限為r--r--r--r--的文件不匹配/222,但一個權限為rw--r--r--的文件匹配疏之。權限前的-號意味著該位的三個實例都必須是開啟的殿雪,所以前面的例子都不匹配,但是像rw-rw-rw->這樣的文件會匹配锋爪。
用一個更復雜的例子丙曙,下面的命令可以匹配任何用戶有讀寫和執(zhí)行權限的文件,組內成員有讀寫權限其骄,其他成員有只讀權限亏镰。
[root@host ~]# find /home -perm 764
要匹配用戶至少有寫權限和執(zhí)行權限的文件,組內至少有寫權限拯爽,其他人至少有讀權限的文件索抓。
[root@host ~]# find /home -perm -324
要匹配用戶有讀取權限的文件,或者組至少有讀取權限,或者其他人至少有寫入權限的文件逼肯。
[root@host ~]# find /home -perm /442
當與/或-一起使用時耸黑,值為0就像通配符一樣,因為它意味著至少沒有什么權限篮幢。
要匹配/home/user目錄中的任何文件大刊,而其他人至少在主機上有讀取權限,請運行:
[user@host ~]$ find -perm -004
在/home/user目錄中找到所有在主機上有寫權限的文件三椿。
[user@host ~]$ find -perm -002
根據(jù)大小搜索文件
find 命令可以查找與 -size 選項指定的大小相匹配的文件奈揍,后面是一個數(shù)值和單位。使用下面的列表作為 -size 選項的單位赋续。
- k,代表千字節(jié)
- M另患,表示兆字節(jié)
- G纽乱,代表千兆字節(jié)
下面的例子顯示了如何搜索大小為10兆字節(jié)的文件,四舍五入昆箕。
[user@host ~]$ find -size 10M
要搜索大小超過10GB的文件鸦列。
[user@host ~]$ find -size +10G
要列出所有大小小于10KB的文件。
[user@host ~]$ find -size -10k
根據(jù)修改時間搜索文件
-mmin選項鹏倘,后面的時間(以分鐘為單位)可以搜索所有在過去n分鐘前內容發(fā)生變化的文件薯嗤。文件的時間戳總是四舍五入。當使用范圍(+n和-n)時纤泵,它也支持小數(shù)值骆姐。
要查找120分鐘前主機上所有文件內容發(fā)生變化的文件,請運行捏题。
[root@host ~]# find / -mmin 120
分鐘數(shù)前面的+修改器可以查找所有在/中被修改超過n分鐘的文件玻褪。在這個例子中,超過200分鐘前被修改的文件被列出公荧。
[root@host ~]# find / -mmin +200
修改器會改變搜索方式带射,將/目錄中所有被修改過的文件都在n分鐘以內。在這個例子中循狰,被修改過的文件在150分鐘內被列出窟社。
[root@host ~]# find / -mmin -150
根據(jù)文件類型搜索文件
find命令中的-type選項將搜索范圍限制在指定的文件類型。使用下面的列表傳遞所需的標志來限制搜索范圍绪钥。
- f灿里,用于普通文件
- d,用于目錄
- l程腹,用于軟鏈接
- b钠四,用于塊狀裝置
搜索主機上/etc目錄中的所有目錄。
[root@host ~]# find /etc -type d
/etc
/etc/tmpfiles.d
/etc/systemd
/etc/systemd/system
/etc/systemd/system/getty.target.wants
...output omitted...
搜索主機上的所有軟鏈接。
[root@host ~]# find / -type l
生成主機上/dev目錄中所有塊設備的列表缀去。
[root@host ~]# find /dev -type b
/dev/vda1
/dev/vda
-links選項后面的數(shù)字可以查找所有具有一定的硬鏈接數(shù)的文件侣灶。這個數(shù)字前面可以用+修改器來查找硬鏈接數(shù)大于給定的硬鏈接數(shù)的文件。如果數(shù)字前面有-修飾符缕碎,搜索將被限制在所有硬鏈接數(shù)小于給定數(shù)字的文件褥影。
在主機上搜索所有一個以上硬鏈接的常規(guī)文件。
[root@host ~]# find / -type f -links +1
總結
存儲設備用一種特殊的文件類型來表示咏雌,稱為塊設備凡怎。
df命令報告所有掛載的常規(guī)文件系統(tǒng)的總磁盤空間、已使用的磁盤空間和可用的磁盤空間赊抖。
mount命令允許root用戶手動掛載文件系統(tǒng)统倒。
所有進程需要停止訪問掛載點,才能成功卸載設備氛雪。
使用圖形環(huán)境時房匆,可移動存儲設備被安裝在/run/media目錄下。
find 命令在本地文件系統(tǒng)中執(zhí)行實時搜索报亩,根據(jù)搜索條件查找文件浴鸿。