您好,登錄后才能下訂單哦!
df命令:
df - report file system disk space usage
df [OPTION]... [FILE]...
-h, --human-readble:單位轉換
-l, --local:只顯示本地文件系統,不顯示網絡文件系統
-i, --inodes:顯示inode使用狀態
-T, --print-type:顯示文件系統類型
-P, --portability:使用POSIX輸出格式,更易于閱讀
使用這個命令可以顯示當前系統中的磁盤使用信息,使用的是默認的單位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 ~]#
在日常的使用過程中,有的時候需要知道分區的文件系統,此時可以使用“-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 ~]#
如果只想查看文件系統類型為ext4的分區,可以使用“-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 ~]#
在上面的例子中,我們可以發現格式并沒有完全的按照表格來,所以顯得有些亂,此時可以使用“-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
我認為這個命令對我最大的幫助就是可以讓我隨意的創建一個任意大小的文件
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...]:用指定的參數轉換文件。
轉換參數:
ascii:轉換EBCDIC為ASCII。
ebcdic:轉換ASCII為EBCDIC。
block:把每一行轉換為長度為cbs的記錄,不足部分用空格填充。
unblock:使每一行的長度都為cbs,不足部分用空格填充。
lcase:把大寫字符轉換為小寫字符。
ucase:把小寫字符轉換為大寫字符。
swab:交換輸入的每對字節。
noerror:讀取出錯時繼續讀取。
notrunc:不截短輸出文件。
sync:把每個輸入塊填充到ibs個字節,不足部分用空(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。現在想從第64個字節位置開始讀取,需要讀取的大小是128Byts。又有fileB, 想把上面讀取到的128Bytes寫到第32個字節開始的位置,替換128Bytes,請問如何實現?
~]# 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全盤數據備份到指定路徑的p_w_picpath文件
~]# dd if=/dev/sdx of=/path/to/p_w_picpath
備份/dev/sdx全盤數據,并利用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
拷貝內存資料到硬盤
將內存里的數據拷貝到root目錄下的mem.bin文件
~]# dd if=/dev/mem of=/root/mem.bin bs=1024
從光盤拷貝iso鏡像
拷貝光盤數據到root文件夾下,并保存為cd.iso文件
~]# dd if=/dev/cdrom of=/root/cd.iso
銷毀磁盤數據
利用隨機的數據填充硬盤,在某些必要的場合可以用來銷毀數據。執行此操作以后,/dev/sda1將無法掛載,創建和拷貝操作無法執行。
~]# dd if=/dev/urandom of=/dev/sda1
得到最恰當的block size
通過比較dd指令輸出中所顯示的命令執行時間,即可確定系統最佳的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
測試硬盤讀寫速度
通過上兩個命令輸出的執行時間,可以計算出測試硬盤的讀/寫速度
~]# 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年)放置不使用后,磁盤上會產生消磁點。當磁頭讀到這些區域時會遇到困難,并可能導致I/O錯誤。當這種情況影響到硬盤的第一個扇區時,可能導致硬盤報廢。上邊的命令有可能使這些數據起死回生。且這個過程是安全,高效的。
~]# 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 以一開始處理時的文件系統為準,若遇上其它不同的文件系統目錄則略過。
-L<符號鏈接>或--dereference<符號鏈接> 顯示選項中所指定符號鏈接的源文件大小。
-S或--separate-dirs 顯示個別目錄的大小時,并不含其子目錄的大小。
-X<文件>或--exclude-from=<文件> 在<文件>指定目錄或文件。
--exclude=<目錄或文件> 略過指定的目錄或文件。
-D或--dereference-args 顯示指定符號鏈接的源文件大小。
-H或--si 與-h參數相同,但是K,M,G是以1000為換算單位。
-l或--count-links 重復計算硬件鏈接的文件。
使用這個命令可以統計文件的大小,比如統計根目錄“/”的大小(如果沒有“-s”選項,則會將根目錄下的所有目錄進行統計):
[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 ~]#
在最后一行顯示的一串數字就是根目錄的大小,但是這樣不方便我們進行觀察,所以可以加上“-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”字母的文件顯示出來。這個命令基于專用的數據庫進行查找,數據庫應該事先創建,并且定期更新,我們可以使用updatedb命令手動更新locate數據庫。由于不用去遍歷目錄,而只需要查找數據庫,所以查找速度非常快,但是查找精確度非常有限,因為如果新創建了一個文件,卻沒有在數據庫中更新,那么就查不到這個文件,只有當更新數據庫后才能查到,使用的方法是直接在命令后跟上要查找文件的名字:locate fileName。所以如果要使用這個命令就需要定期更新,可以使用updatedb命令手動更新locate數據庫。
find命令:和locate命令相對的是find命令,這個命令是精確查找,在指定的位置進行文件名或文件屬性的遍歷掃描,所以強烈不建議對根目錄進行find操作,因為查找的時間會特別長,而這個命令是實時查找,因此就會面臨一個問題,當執行了查找操作時如果另外一個用戶登陸,將這個文件刪掉了,那么就會查找出錯了,所以在使用這個命令的時候斷網查找。在使用find命令時只能搜索當前用戶具有讀取和執行權限的目錄,就像一個普通用戶是不能訪問系統配置文件一樣。find命令的具體用法如下:
find命令:
find - search for files in a directory hierarchy
find [OPTIONS...] [查找路徑] [查找條件] [處理動作]
查找路徑:默認為當前工作目錄,可以指定具體的目錄路徑;
查找條件:進行本次搜索的標準,可以是文件名、文件大小、文件類型、文件權限等等;默認是指定目錄中的所有文件;
處理動作:對于符合條件的文件進行某個處理操作;默認將查找結果輸出到顯示器;
根據文件名查找:
-name 文件名稱,支持使用Globbing,(*, ?, [], [^])
-iname 文件名稱,忽略字母大小寫,支持使用Globbing,(*, ?, [], [^])
根據文件的inode編號查找:
-inum inode編號:通過給定的inode編號查找對應的文件名及路徑;
-samefile name:通過給定的文件名查找對應的inode編號,進而確定所有具有該inode編號的文件名及路徑;
-links n:查找鏈接數為n的所有文件;
根據正則表達式查找:
-regex pattern:以pattern匹配整個文件路徑字符串,而不僅僅是給定文件的名稱;
根據文件的屬主和屬組進行查找:
-user uname:根據屬主為指定用戶的用戶名進行查找
-uid UID:根據屬主為某個UID進行查找
-group gname:
-gid GID:
-nogroup:在文件的屬組上沒有組對應的組名;
-nouser:在文件的屬主上沒有用戶對應的用戶名;
根據文件的類型查找:
-type 文件類型:
b:塊設備
c:字符設備
d:目錄文件
f:普通文件
l:符號鏈接文件
p:管道文件
s:套接字文件
-xtype 文件類型:符號鏈接文件的匹配需要配合其他的選項;
根據時間戳進行查找:
以天為單位:
-atime [+|-]n:根據訪問時間查找
-ctime [+|-]n:根據改變時間查找
-mtime [+|-]n:根據修改時間查找
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
根據文件的大小進行查找:
-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
根據權限查找:
-perm [/|-]mode
mode:精確匹配指定的權限
/mode:隱含了邏輯或的關系,任何一個權限位的權限中只要能有一個權限匹配,即可滿足條件;
-mode:隱含了邏輯與的關系,每一個權限位的權限中都必須同時包含指定權限位,才能滿足條件;
所有都有 取反 任意一個沒有
! ( a與b與c ) = !a 或 !b 或 !c
所有都沒有 取反 任意一個有
! ( !a與!b與!c ) = a 或 b 或 c
處理動作:
-print:輸出到顯示屏幕,默認的動作;
-ls:對與查找到的結果執行ls -li命令顯示;
-exec COMMAND {} \;:
-ok COMMAND {} \;:
對于查找到的結果執行COMMAND命令;
區別:
-exec是非交互式的;
-ok是交互式的;
{}:占位符,用來引用被find命令查找到的所有的文件的路徑信息;
-exec和-ok的取代執行操作:
chmod a-r $(find -perm -444 -type f)
find -perm -444 -type f | xargs chmod a-r
注意:管道輸送的是純字符串信息,所以如果管道之后的命令不是處理字符串的命令,需要使用xargs命令將其轉換成能夠被后面命令處理的參數;
下面是來自: http://man.linuxde.net/find的一些例子:
根據文件或者正則表達式進行匹配
列出當前目錄及子目錄下所有文件和文件夾
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\)$"
否定參數
找出/home下不是以.txt結尾的文件
find /home ! -name "*.txt"
根據文件類型進行搜索
find . -type
類型參數
類型參數列表:
f 普通文件
l 符號連接
d 目錄
c 字符設備
b 塊設備
s 套接字
p Fifo
基于目錄深度搜索
向下最大深度限制為3
find . -maxdepth 3 -type f
搜索出深度距離當前目錄至少2個子目錄的所有文件
find . -mindepth 2 -type f
根據文件時間戳進行搜索
find . -type f
時間戳
UNIX/Linux文件系統每個文件都有三種時間戳:
訪問時間(-atime/天,-amin/分鐘):用戶最近一次訪問時間。
修改時間(-mtime/天,-mmin/分鐘):文件最后一次修改時間。
變化時間(-ctime/天,-cmin/分鐘):文件數據元(例如權限等)最后一次修改時間。
搜索最近七天內被訪問過的所有文件
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
根據文件大小進行匹配
find . -type f -size
文件大小單元:
b —— 塊(512字節)
c —— 字節
w —— 字(2字節)
k —— 千字節
M —— 兆字節
G —— 吉字節
搜索大于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
根據文件權限/所有權進行匹配
當前目錄下搜索出權限為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行為一樣,不過它會給出提示,是否執行相應的操作。
查找當前目錄下所有.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參數中無法使用多個命令,以下方法可以實現在-exec之后接受多條命令
-exec ./text.sh {} \;
搜索但跳出指定的目錄
查找當前目錄或者子目錄下所有.txt文件,但是跳過子目錄sk
find . -path "./sk" -prune -o -name "*.txt" -print
find其他技巧收集
要列出所有長度為零的文件
find . -empty
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。