溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

幾個常用命令:df、dd、du、locate、find

發(fā)布時間:2020-06-21 06:14:47 來源:網絡 閱讀:4792 作者:正經的青年 欄目:數(shù)據(jù)庫

df命令:

df - report file system disk space usage

df [OPTION]... [FILE]...

-h, --human-readble:單位轉換

-l, --local:只顯示本地文件系統(tǒng),不顯示網絡文件系統(tǒng)

-i, --inodes:顯示inode使用狀態(tài)

-T, --print-type:顯示文件系統(tǒng)類型

-P, --portability:使用POSIX輸出格式,更易于閱讀


    使用這個命令可以顯示當前系統(tǒng)中的磁盤使用信息,使用的是默認的單位KB

[root@localhost ~]# df
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/mapper/vg_localhost-lv_root
                  51475068   6523056  42330572  14% /
tmpfs                1857540      72  1857468   1% /dev/shm
/dev/sda1              487652    43139   418913  10% /boot
/dev/mapper/vg_localhost-lv_home
                 424688000    93992 403014440   1% /home
[root@localhost ~]#


    因為只使用df命令顯示出來的單位是KB,不易我們查看,所以可以加上“-h”選項,將顯示的單位改為易讀的單位:

[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_localhost-lv_root
                    50G  6.3G  41G  14% /
tmpfs                1.8G   72K 1.8G   1% /dev/shm
/dev/sda1             477M   43M  410M 10% /boot
/dev/mapper/vg_localhost-lv_home
                   406G   92M  385G  1% /home
[root@localhost ~]#


    在日常的使用過程中,有的時候需要知道分區(qū)的文件系統(tǒng),此時可以使用“-T”選項:

[root@localhost ~]# df -Th
Filesystem           Type   Size  Used Avail Use% Mounted on
/dev/mapper/vg_localhost-lv_root
                  ext4   50G  6.3G   41G  14% /
tmpfs              tmpfs  1.8G   72K  1.8G   1% /dev/shm
/dev/sda1            ext4  477M   43M  410M  10% /boot
/dev/mapper/vg_localhost-lv_home
                 ext4  406G   92M  385G   1% /home
[root@localhost ~]#


    如果只想查看文件系統(tǒng)類型為ext4的分區(qū),可以使用“-t”或者“--type=ext4”選項:

[root@localhost ~]# df -t ext4
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/mapper/vg_localhost-lv_root
                   51475068   6523088 42330540  14% /
/dev/sda1              487652    43139  418913  10% /boot
/dev/mapper/vg_localhost-lv_home
                 424688000    93992 403014440   1% /home
[root@localhost ~]#




    以上的選項都是對塊進行顯示,也可以使用這個命令來顯示inode的使用情況,用法是加上“-i”選項:

[root@localhost ~]# df -i
Filesystem             Inodes  IUsed    IFree IUse% Mounted on
/dev/mapper/vg_localhost-lv_root
                      3276800 119567  3157233    4% /
tmpfs                  464385      3   464382    1% /dev/shm
/dev/sda1              128016     39   127977    1% /boot
/dev/mapper/vg_localhost-lv_home
                     26976256    534 26975722    1% /home
[root@localhost ~]#


    在上面的例子中,我們可以發(fā)現(xiàn)格式并沒有完全的按照表格來,所以顯得有些亂,此時可以使用“-P”選項:

[root@localhost ~]# df -hTP
Filesystem                       Type   Size  Used Avail Use% Mounted on
/dev/mapper/vg_localhost-lv_root ext4    50G  6.3G   41G  14% /
tmpfs                            tmpfs  1.8G   72K  1.8G   1% /dev/shm
/dev/sda1                        ext4   477M   43M  410M  10% /boot
/dev/mapper/vg_localhost-lv_home ext4   406G   92M  385G   1% /home
[root@localhost ~]#






dd命令:convert and copy a file

  我認為這個命令對我最大的幫助就是可以讓我隨意的創(chuàng)建一個任意大小的文件

    dd [OPERAND]...

    dd OPTION


    常見的OPERAND:

dd if=/PATH/FROM/SRC of=/PATH/TO/DEST

bs=BYTES:block size, 復制單元大小

count=N:復制多少個bs

of=FILE:寫到所命名的文件而不是到標準輸出

if=FILE:從所命名文件讀取而不是從標準輸入

ibs=BYTES:一次讀size個byte

obs=BYTES:一次寫size個byte

skip=BLOCKS:從開頭忽略blocks個ibs大小的塊

seek=BLOCKS:從開頭忽略blocks個obs大小的塊

conv=conversion[,conversion...]:用指定的參數(shù)轉換文件。

轉換參數(shù):

ascii:轉換EBCDIC為ASCII。

ebcdic:轉換ASCII為EBCDIC。

block:把每一行轉換為長度為cbs的記錄,不足部分用空格填充。

unblock:使每一行的長度都為cbs,不足部分用空格填充。

lcase:把大寫字符轉換為小寫字符。

ucase:把小寫字符轉換為大寫字符。

swab:交換輸入的每對字節(jié)。

noerror:讀取出錯時繼續(xù)讀取。

notrunc:不截短輸出文件。

sync:把每個輸入塊填充到ibs個字節(jié),不足部分用空(NULL)字符補齊



一些常用的方法如下:

磁盤拷貝:

~]# dd if=/dev/sda of=/dev/sdb

備份MBR:

~]# dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

破壞MBR中的bootloader:

~]# dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446

有二進制文件fileA,size>2K?,F(xiàn)在想從第64個字節(jié)位置開始讀取,需要讀取的大小是128Byts。又有fileB, 想把上面讀取到的128Bytes寫到第32個字節(jié)開始的位置,替換128Bytes,請問如何實現(xiàn)?

~]# dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc

備份:

將本地的/dev/sdx整盤備份到/dev/sdy

~]# dd if=/dev/sdx of=/dev/sdy

將/dev/sdx全盤數(shù)據(jù)備份到指定路徑的p_w_picpath文件

~]# dd if=/dev/sdx of=/path/to/p_w_picpath

備份/dev/sdx全盤數(shù)據(jù),并利用gzip工具進行壓縮,保存到指定路徑

~]# dd if=/dev/sdx | gzip >/path/to/p_w_picpath.gz


恢復:

將備份文件恢復到指定盤

~]# dd if=/path/to/p_w_picpath of=/dev/sdx

將壓縮的備份文件恢復到指定盤

~]# gzip -dc /path/to/p_w_picpath.gz | dd of=/dev/sdx


拷貝內存資料到硬盤

將內存里的數(shù)據(jù)拷貝到root目錄下的mem.bin文件

~]# dd if=/dev/mem of=/root/mem.bin bs=1024


從光盤拷貝iso鏡像

拷貝光盤數(shù)據(jù)到root文件夾下,并保存為cd.iso文件

~]# dd if=/dev/cdrom of=/root/cd.iso


銷毀磁盤數(shù)據(jù)

利用隨機的數(shù)據(jù)填充硬盤,在某些必要的場合可以用來銷毀數(shù)據(jù)。執(zhí)行此操作以后,/dev/sda1將無法掛載,創(chuàng)建和拷貝操作無法執(zhí)行。

~]# dd if=/dev/urandom of=/dev/sda1


得到最恰當?shù)腷lock size

通過比較dd指令輸出中所顯示的命令執(zhí)行時間,即可確定系統(tǒng)最佳的block size大小

~]# dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
~]# dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
~]# dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
~]# dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file


測試硬盤讀寫速度

通過上兩個命令輸出的執(zhí)行時間,可以計算出測試硬盤的讀/寫速度

~]# dd if=/root/1Gb.file bs=64k | dd of=/dev/null
~]# dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000


修復硬盤

當硬盤較長時間(比如1,2年)放置不使用后,磁盤上會產生消磁點。當磁頭讀到這些區(qū)域時會遇到困難,并可能導致I/O錯誤。當這種情況影響到硬盤的第一個扇區(qū)時,可能導致硬盤報廢。上邊的命令有可能使這些數(shù)據(jù)起死回生。且這個過程是安全,高效的。

~]# dd if=/dev/sda of=/dev/sda







du命令,這個命令的功能和df類似,也是查看使用空間,但是這個命令是針對文件和目錄來進行查看,df命令是針對磁盤來進行查看:

du - estimate file space usage

du [OPTION]... [FILE]...

-s, sumary,:顯示整個目錄匯總的文件大小

-h, human-readble:單位轉換

-a或-all 顯示目錄中個別文件的大小。 

-b或-bytes 顯示目錄或文件大小時,以byte為單位。 

-c或--total 除了顯示個別目錄或文件的大小外,同時也顯示所有目錄或文件的總和。 

-k或--kilobytes 以KB(1024bytes)為單位輸出。 -m或--megabytes 以MB為單位輸出。 

-s或--summarize 僅顯示總計,只列出最后加總的值。 -h或--human-readable 以K,M,G為單位,提高信息的可讀性。 

-x或--one-file-xystem 以一開始處理時的文件系統(tǒng)為準,若遇上其它不同的文件系統(tǒng)目錄則略過。 

-L<符號鏈接>或--dereference<符號鏈接> 顯示選項中所指定符號鏈接的源文件大小。 

-S或--separate-dirs 顯示個別目錄的大小時,并不含其子目錄的大小。 

-X<文件>或--exclude-from=<文件> 在<文件>指定目錄或文件。 

--exclude=<目錄或文件> 略過指定的目錄或文件。 

-D或--dereference-args 顯示指定符號鏈接的源文件大小。 

-H或--si 與-h參數(shù)相同,但是K,M,G是以1000為換算單位。 

-l或--count-links 重復計算硬件鏈接的文件。


    使用這個命令可以統(tǒng)計文件的大小,比如統(tǒng)計根目錄“/”的大?。ㄈ绻麤]有“-s”選項,則會將根目錄下的所有目錄進行統(tǒng)計):

[root@localhost ~]# du -s /
du: 無法訪問"/proc/3895/task/3895/fd/4": 沒有那個文件或目錄
du: 無法訪問"/proc/3895/task/3895/fdinfo/4": 沒有那個文件或目錄
du: 無法訪問"/proc/3895/fd/4": 沒有那個文件或目錄
du: 無法訪問"/proc/3895/fdinfo/4": 沒有那個文件或目錄
6533337/
[root@localhost ~]#

    在最后一行顯示的一串數(shù)字就是根目錄的大小,但是這樣不方便我們進行觀察,所以可以加上“-h”選項:

[root@localhost ~]# du -sh /
du: 無法訪問"/proc/3884/task/3884/fd/4": 沒有那個文件或目錄
du: 無法訪問"/proc/3884/task/3884/fdinfo/4": 沒有那個文件或目錄
du: 無法訪問"/proc/3884/fd/4": 沒有那個文件或目錄
du: 無法訪問"/proc/3884/fdinfo/4": 沒有那個文件或目錄
6.3G/
[root@localhost ~]#



        locate命令:在使用Linux的時候,有的時候想不起來一個文件放在哪里,那么就可以使用查找操作來找到想要的文件。查找的命令有很多,第一個說一說locate命令,這個命令是模糊查找,也可以說是貪婪模式下的查找,會找到所有匹配到的內容,比如想要找“a”這個文件,但是使用這個命令之后會將所有包含“a”字母的文件顯示出來。這個命令基于專用的數(shù)據(jù)庫進行查找,數(shù)據(jù)庫應該事先創(chuàng)建,并且定期更新,我們可以使用updatedb命令手動更新locate數(shù)據(jù)庫。由于不用去遍歷目錄,而只需要查找數(shù)據(jù)庫,所以查找速度非???,但是查找精確度非常有限,因為如果新創(chuàng)建了一個文件,卻沒有在數(shù)據(jù)庫中更新,那么就查不到這個文件,只有當更新數(shù)據(jù)庫后才能查到,使用的方法是直接在命令后跟上要查找文件的名字:locate fileName。所以如果要使用這個命令就需要定期更新,可以使用updatedb命令手動更新locate數(shù)據(jù)庫。

        find命令:和locate命令相對的是find命令,這個命令是精確查找,在指定的位置進行文件名或文件屬性的遍歷掃描,所以強烈不建議對根目錄進行find操作,因為查找的時間會特別長,而這個命令是實時查找,因此就會面臨一個問題,當執(zhí)行了查找操作時如果另外一個用戶登陸,將這個文件刪掉了,那么就會查找出錯了,所以在使用這個命令的時候斷網查找。在使用find命令時只能搜索當前用戶具有讀取和執(zhí)行權限的目錄,就像一個普通用戶是不能訪問系統(tǒng)配置文件一樣。find命令的具體用法如下:


find命令:

find - search for files in a directory hierarchy

find [OPTIONS...] [查找路徑] [查找條件] [處理動作]

查找路徑:默認為當前工作目錄,可以指定具體的目錄路徑;

查找條件:進行本次搜索的標準,可以是文件名、文件大小、文件類型、文件權限等等;默認是指定目錄中的所有文件;

處理動作:對于符合條件的文件進行某個處理操作;默認將查找結果輸出到顯示器;


根據(jù)文件名查找:

-name 文件名稱,支持使用Globbing,(*, ?, [], [^])

-iname 文件名稱,忽略字母大小寫,支持使用Globbing,(*, ?, [], [^])


根據(jù)文件的inode編號查找:

-inum inode編號:通過給定的inode編號查找對應的文件名及路徑;

-samefile name:通過給定的文件名查找對應的inode編號,進而確定所有具有該inode編號的文件名及路徑;

-links n:查找鏈接數(shù)為n的所有文件;


根據(jù)正則表達式查找:

-regex pattern:以pattern匹配整個文件路徑字符串,而不僅僅是給定文件的名稱;


根據(jù)文件的屬主和屬組進行查找:

-user uname:根據(jù)屬主為指定用戶的用戶名進行查找

-uid UID:根據(jù)屬主為某個UID進行查找

-group gname:

-gid GID:


-nogroup:在文件的屬組上沒有組對應的組名;

-nouser:在文件的屬主上沒有用戶對應的用戶名;


根據(jù)文件的類型查找:

-type 文件類型:

b:塊設備

c:字符設備

d:目錄文件

f:普通文件

l:符號鏈接文件

p:管道文件

s:套接字文件

-xtype 文件類型:符號鏈接文件的匹配需要配合其他的選項;


根據(jù)時間戳進行查找:

以天為單位:

-atime [+|-]n:根據(jù)訪問時間查找

-ctime [+|-]n:根據(jù)改變時間查找

-mtime [+|-]n:根據(jù)修改時間查找

n:[n,n+1)

+n:[n+1,+∞)

-n:[now,n)

以分鐘為單位:

-amin [+|-]n

-cmin [+|-]n

-mmin [+|-]n


例子:

5-28-11-18 

-mtime -3

5-25-11-18

-mtime 3

5-24-11-18

-mtime +3


根據(jù)文件的大小進行查找:

-size [+|-]n[cwbkMG]

n:(n-1,n]

-n:[0,n-1]

+n:(n,+∞)


例子:

find -size +2k

當前目錄下所有大于2KB的文件;

find -size 2k

當前目錄下所有1KB-2KB之間的文件;

find -size -2k

當前目錄下所有小于1KB的文件;


組合條件:

-a:邏輯與,默認可以省略;

-o:邏輯或

-not, !:邏輯非


邏輯組合條件遵循德摩根定律:

非(A 與 B) == 非A 或 非B

非(A 或 B) == 非A 與 非B


根據(jù)權限查找:

-perm [/|-]mode

mode:精確匹配指定的權限

/mode:隱含了邏輯或的關系,任何一個權限位的權限中只要能有一個權限匹配,即可滿足條件;

-mode:隱含了邏輯與的關系,每一個權限位的權限中都必須同時包含指定權限位,才能滿足條件;


所有都有 取反 任意一個沒有 

! ( a與b與c ) = !a 或 !b 或 !c

所有都沒有 取反 任意一個有

! ( !a與!b與!c ) = a 或 b 或 c


處理動作:

-print:輸出到顯示屏幕,默認的動作;

-ls:對與查找到的結果執(zhí)行l(wèi)s -li命令顯示;

-exec COMMAND {} \;:

-ok COMMAND {} \;:

對于查找到的結果執(zhí)行COMMAND命令;

區(qū)別:

-exec是非交互式的;

-ok是交互式的;

{}:占位符,用來引用被find命令查找到的所有的文件的路徑信息;


-exec和-ok的取代執(zhí)行操作:

chmod a-r $(find -perm -444 -type f)

find -perm -444 -type f | xargs chmod a-r


注意:管道輸送的是純字符串信息,所以如果管道之后的命令不是處理字符串的命令,需要使用xargs命令將其轉換成能夠被后面命令處理的參數(shù);




下面是來自: http://man.linuxde.net/find的一些例子:


根據(jù)文件或者正則表達式進行匹配 

列出當前目錄及子目錄下所有文件和文件夾 

find .

在/home目錄下查找以.txt結尾的文件名 

find /home -name "*.txt"

同上,但忽略大小寫 

find /home -iname "*.txt"

當前目錄及子目錄下查找所有以.txt和.pdf結尾的文件 

find . \( -name "*.txt" -o -name "*.pdf" \)

或 

find . -name "*.txt" -o -name "*.pdf"

匹配文件路徑或者文件 

find /usr/ -path "*local*"

基于正則表達式匹配文件路徑 

find . -regex ".*\(\.txt\|\.pdf\)$"

同上,但忽略大小寫 

find . -iregex ".*\(\.txt\|\.pdf\)$"



否定參數(shù) 

找出/home下不是以.txt結尾的文件 

find /home ! -name "*.txt"



根據(jù)文件類型進行搜索 

find . -type

類型參數(shù) 

類型參數(shù)列表: 

f 普通文件 

l 符號連接 

d 目錄 

c 字符設備 

b 塊設備 

s 套接字 

p Fifo 



基于目錄深度搜索 

向下最大深度限制為3 

find . -maxdepth 3 -type f

搜索出深度距離當前目錄至少2個子目錄的所有文件 

find . -mindepth 2 -type f



根據(jù)文件時間戳進行搜索 

find . -type f

時間戳 

UNIX/Linux文件系統(tǒng)每個文件都有三種時間戳: 

訪問時間(-atime/天,-amin/分鐘):用戶最近一次訪問時間。 

修改時間(-mtime/天,-mmin/分鐘):文件最后一次修改時間。 

變化時間(-ctime/天,-cmin/分鐘):文件數(shù)據(jù)元(例如權限等)最后一次修改時間。 

搜索最近七天內被訪問過的所有文件 

find . -type f -atime -7

搜索恰好在七天前被訪問過的所有文件 

find . -type f -atime 7

搜索超過七天內被訪問過的所有文件 

find . -type f -atime +7

搜索訪問時間超過10分鐘的所有文件 

find . -type f -amin +10

找出比file.log修改時間更長的所有文件 

find . -type f -newer file.log



根據(jù)文件大小進行匹配 

find . -type f -size

文件大小單元: 

b —— 塊(512字節(jié)) 

c —— 字節(jié) 

w —— 字(2字節(jié)) 

k —— 千字節(jié) 

M —— 兆字節(jié) 

G —— 吉字節(jié) 

搜索大于10KB的文件 

find . -type f -size +10k

搜索小于10KB的文件 

find . -type f -size -10k

搜索等于10KB的文件 

find . -type f -size 10k



刪除匹配文件 

刪除當前目錄下所有.txt文件 

find . -type f -name "*.txt" -delete



根據(jù)文件權限/所有權進行匹配 

當前目錄下搜索出權限為777的文件 

find . -type f -perm 777

找出當前目錄下權限不是644的php文件 

find . -type f -name "*.php" ! -perm 644

找出當前目錄用戶tom擁有的所有文件 

find . -type f -user tom

找出當前目錄用戶組sunk擁有的所有文件 

find . -type f -group sunk



借助-exec選項與其他命令結合使用 

找出當前目錄下所有root的文件,并把所有權更改為用戶tom 

find .-type f -user root -exec chown tom {} \;

上例中,{} 用于與-exec選項結合使用來匹配所有文件,然后會被替換為相應的文件名。 

找出自己家目錄下所有的.txt文件并刪除 

find $HOME/. -name "*.txt" -ok rm {} \;

上例中,-ok和-exec行為一樣,不過它會給出提示,是否執(zhí)行相應的操作。 

查找當前目錄下所有.txt文件并把他們拼接起來寫入到all.txt文件中 

find . -type f -name "*.txt" -exec cat {} \;> all.txt

將30天前的.log文件移動到old目錄中 

find . -type f -mtime +30 -name "*.log" -exec cp {} old \;

找出當前目錄下所有.txt文件并以“File:文件名”的形式打印出來 

find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;

因為單行命令中-exec參數(shù)中無法使用多個命令,以下方法可以實現(xiàn)在-exec之后接受多條命令 

-exec ./text.sh {} \;



搜索但跳出指定的目錄 

查找當前目錄或者子目錄下所有.txt文件,但是跳過子目錄sk 

find . -path "./sk" -prune -o -name "*.txt" -print



find其他技巧收集 

要列出所有長度為零的文件 

find . -empty


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

df dd du
AI