linux 獲取磁碟空間大小
15M ./package
16K ./.fontconfig
4.0K ./.cache
5.1M ./.rpmdb
20M .
3.8G ftp/sanya/doc
3.8G ftp/sanya
4.0K ftp/testftp/doc
1.4M ftp/testftp
875M ftp/platform/doc/002-錄影
27M ftp/platform/doc/001-PDF
5.2M ftp/platform/doc/BBFlash
1.2G ftp/platform/doc/003-錄音
2.1G ftp/platform/doc
2.1G ftp/platform
4.0K ftp/pmo/doc
20K ftp/pmo
36M ftp/uf/doc/innovate-201207
36M ftp/uf/doc
36M ftp/uf
446M ftp/code/doc
446M ftp/code
6.3G ftp
184K ./package/compat-libstdc++-33-3.2.3-69.el6.x86_64.rpm
6.3G ftp
用法:du [選項]... [檔案]...
或:du [選項]... --files0-from=F
計算每個檔案的磁碟用量,目錄則取總用量。
長選項必須使用的引數對於短選項時也是必需使用的。
-a, --all 輸出所有檔案的磁碟用量,不僅僅是目錄
--apparent-size 顯示錶面用量,而並非是磁碟用量;雖然表面用量通常會
小一些,但有時它會因為稀疏檔案間的"洞"、內部碎
片、非直接引用的塊等原因而變大。
-B, --block-size=大小 使用指定位元組數的塊
-b, --bytes 等於--apparent-size --block-size=1
-c, --total 顯示總計資訊
-D, --dereference-args 解除命令列中列出的符號連線
--files0-from=F 計算檔案F 中以NUL 結尾的檔名對應占用的磁碟空間
如果F 的值是"-",則從標準輸入讀入檔名
-H 等於--dereference-args (-D)
-h, --human-readable 以可讀性較好的方式顯示尺寸(例如:1K 234M 2G)
--si 類似-h,但在計算時使用1000 為基底而非1024
-k 等於--block-size=1K
-l, --count-links 如果是硬連線,就多次計算其尺寸
-m 等於--block-size=1M
-L, --dereference 找出任何符號連結指示的真正目的地
-P, --no-dereference 不跟隨任何符號連結(預設)
-0, --null 將每個空行視作0 位元組而非換行符
-S, --separate-dirs 不包括子目錄的佔用量
-s, --summarize 只分別計算命令列中每個引數所佔的總用量
-x, --one-file-system 跳過處於不同檔案系統之上的目錄
-X, --exclude-from=檔案 排除與指定檔案中描述的模式相符的檔案
--exclude=PATTERN 排除與PATTERN 中描述的模式相符的檔案
--max-depth=N 顯示目錄總計(與--all 一起使用計算檔案)
當N 為指定數值時計算深度為N;
--max-depth=0 等於--summarize
--time 顯示目錄或該目錄子目錄下所有檔案的最後修改時間
--time=WORD 顯示WORD 時間,而非修改時間:
atime,access,use,ctime 或status
--time-style=樣式 按照指定樣式顯示時間(樣式解釋規則同"date"命令):
full-iso,long-iso,iso,+FORMAT
--help 顯示此幫助資訊並退出
--version 顯示版本資訊並退出
[大小]可以是以下的單位(單位前可加上整數):
kB 1000,K 1024,MB 1000000,M 1048576,還有 G、T、P、E、Z、Y。
請向報告du 的錯誤
GNU coreutils 專案主頁:<http://www.gnu.org/software/coreutils/>
GNU 軟體一般性幫助:<http://www.gnu.org/gethelp/>
請向<http://translationproject.org/team/zh_CN.html> 報告du 的翻譯錯誤
df -h
Df命令是linux系統以磁碟分割槽為單位檢視檔案系統,可以加上引數檢視磁碟剩餘空間資訊,命令格式:
df -hl
顯示格式為:
檔案系統 容量 已用 可用 已用% 掛載點
Filesystem Size Used Avail Use% Mounted on
/dev/hda2 45G 19G 24G 44% /
/dev/hda1 494M 19M 450M 4% /boot
/dev/hda6 4.9G 2.2G 2.5G 47% /home
/dev/hda5 9.7G 2.9G 6.4G 31% /opt
none 1009M 0 1009M 0% /dev/shm
/dev/hda3 9.7G 7.2G 2.1G 78% /usr/local
/dev/hdb2 75G 75G 0 100% /
/dev/hdb2 75G 75G 0 100% /
以上面的輸出為例,表示的意思為:
HD硬碟介面的第二個硬碟(b),第二個分割槽(2),容量是75G,用了75G,可用是0,因此利用率是100%, 被掛載到根分割槽目錄上(/)。
下面是相關命令的解釋:
df -hl 檢視磁碟剩餘空間
df -h 檢視每個根路徑的分割槽大小
du -sh [目錄名] 返回該目錄的大小
du -sm [資料夾] 返回該資料夾總M數
更多功能可以輸入一下命令檢視:
df --help
du --help
(責任編輯:admin)#include <sys/vfs.h> /* 或者 <sys/statfs.h> */
int statfs(const char *path, struct statfs *buf);
int fstatfs(int fd, struct statfs *buf);
引數:
path: 位於需要查詢資訊的檔案系統的檔案路徑名(不是裝置名,是掛載點名稱)。
fd: 位於需要查詢資訊的檔案系統的檔案描述詞。
buf:以下結構體的指標變數,用於儲存檔案系統相關的資訊
struct statfs
{
long f_type; /* 檔案系統型別 */
long f_bsize; /* 經過優化的傳輸塊大小 */
long f_blocks; /* 檔案系統資料塊總數 */
long f_bfree; /* 可用塊數 */
long f_bavail; /* 非超級使用者可獲取的塊數 */
long f_files; /* 檔案結點總數 */
long f_ffree; /* 可用檔案結點數 */
fsid_t f_fsid; /* 檔案系統標識 */
long f_namelen; /* 檔名的最大長度 */
};
***************************************************************
返回說明:
成功執行時,返回0。失敗返回-1,errno被設為以下的某個值
EACCES: (statfs())檔案或路徑名中包含的目錄不可訪問
EBADF : (fstatfs()) 檔案描述詞無效
EFAULT: 記憶體地址無效
EINTR : 操作由訊號中斷
EIO : 讀寫出錯
ELOOP : (statfs())解釋路徑名過程中存在太多的符號連線
ENAMETOOLONG:(statfs()) 路徑名太長
ENOENT:(statfs()) 檔案不存在
ENOMEM: 核心記憶體不足
ENOSYS: 檔案系統不支援呼叫
ENOTDIR:(statfs())路徑名中當作目錄的元件並非目錄
EOVERFLOW:資訊溢位
**********************************************************************
相關的檔案系統型別有:
ADFS_SUPER_MAGIC 0xadf5
AFFS_SUPER_MAGIC 0xADFF
BEFS_SUPER_MAGIC 0x42465331
BFS_MAGIC 0x1BADFACE
CIFS_MAGIC_NUMBER 0xFF534D42
CODA_SUPER_MAGIC 0x73757245
COH_SUPER_MAGIC 0x012FF7B7
CRAMFS_MAGIC 0x28cd3d45
DEVFS_SUPER_MAGIC 0x1373
EFS_SUPER_MAGIC 0x00414A53
EXT_SUPER_MAGIC 0x137D
EXT2_OLD_SUPER_MAGIC 0xEF51
EXT2_SUPER_MAGIC 0xEF53
EXT3_SUPER_MAGIC 0xEF53
HFS_SUPER_MAGIC 0x4244
HPFS_SUPER_MAGIC 0xF995E849
HUGETLBFS_MAGIC 0x958458f6
ISOFS_SUPER_MAGIC 0x9660
JFFS2_SUPER_MAGIC 0x72b6
JFS_SUPER_MAGIC 0x3153464a
MINIX_SUPER_MAGIC 0x137F /* orig. minix */
MINIX_SUPER_MAGIC2 0x138F /* 30 char minix */
MINIX2_SUPER_MAGIC 0x2468 /* minix V2 */
MINIX2_SUPER_MAGIC2 0x2478 /* minix V2, 30 char names */
MSDOS_SUPER_MAGIC 0x4d44
NCP_SUPER_MAGIC 0x564c
NFS_SUPER_MAGIC 0x6969
NTFS_SB_MAGIC 0x5346544e
OPENPROM_SUPER_MAGIC 0x9fa1
PROC_SUPER_MAGIC 0x9fa0
QNX4_SUPER_MAGIC 0x002f
REISERFS_SUPER_MAGIC 0x52654973
ROMFS_MAGIC 0x7275
SMB_SUPER_MAGIC 0x517B
SYSV2_SUPER_MAGIC 0x012FF7B6
SYSV4_SUPER_MAGIC 0x012FF7B5
TMPFS_MAGIC 0x01021994
UDF_SUPER_MAGIC 0x15013346
UFS_MAGIC 0x00011954
USBDEVICE_SUPER_MAGIC 0x9fa2
VXFS_SUPER_MAGIC 0xa501FCF5
XENIX_SUPER_MAGIC 0x012FF7B4
XFS_SUPER_MAGIC 0x58465342
_XIAFS_SUPER_MAGIC 0x012FD16D
**********************************************************************
statfs結構中可用空間塊數有兩種f_bfree和 f_bavail,前者是硬碟所有剩餘空間,後
者為非root使用者剩餘空間,ext3檔案系統給root使用者分有5%的獨享空間,所以這裡是不
同的地方。這裡要強調的是每塊的大小一般是4K(×這句話錯誤,不一定都是4k,正確做法是:總大小= sfs.f_blocks×f_bsize,即塊數×每塊的大小,單位是bytes,也就是要/1024/1024/1024才是GB單位,另外要注意的問題是sfs.f_blocks×f_bsize資料過大溢位,可以sfs.f_blocks/1024×f_bsize/1024=MB單位)。因此,要實現與df結果一致的就得在
獲得塊數上乘以4,這樣已用、可用、總塊數就可以實現。如果還要實現百分比一致,
那麼要注意的是,df命令獲得是整數百分比,沒有小數,這裡使用的進一法,而不是四
舍五入法。所以在程式裡直接+1取整。
disk_size = sfs.f_blocks/1024*sfs.f_bsize/1024;//MB總大小
avilable =sfs.f_bavail/1024*sfs.f_bsize/1024;//MB可以空間大小
double all=sfs.f_blocks - sfs.f_bfree + sfs.f_bavail;
if(0!=all)
percent = (sfs.f_blocks - sfs.f_bfree ) * 100 / all + 1;可用百分比
下面是實現的一個例子:(home目錄為一個獨立分割槽)
#include <stdio.h>
#include <sys/vfs.h>
int main()
{
struct statfs sfs;
int i = statfs("/home", &sfs);
int percent = (sfs.f_blocks - sfs.f_bfree ) * 100 / (sfs.f_blocks -
sfs.f_bfree + sfs.f_bavail) + 1;
printf("/dev/sda11 %ld %ld %ld %d%% /home/n",
4*sfs. f_blocks, 4*(sfs.f_blocks - sfs.f_bfree),
4*sfs.f_bavail, percent);
system("df /home ");
return 0;
}
執行結果:
leave@LEAVE:~/test$ gcc -o df df.c
leave@LEAVE:~/test$ ./df
/dev/sda11 42773008 540356 40059864 2% /home
檔案系統 1K-塊 已用 可用 已用% 掛載點
/dev/sda11 42773008 540356 40059864 2% /home
leave@LEAVE:~/test$
/home/work $ df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/mmc1 19444 9804 9640 50% /boot
/dev/mmc2 11678 78 11600 1% /setting
/dev/mmc5 160730 126767 25665 83% /home
/dev/mmc6 1758860 35492 1634020 2% /storage
/dev/sdb1 312568828 42536564 270032264 14% /c2-media/usb/USB2
4.獲得檔案大小需要用到2個函式:fseek() , ftell()
fseek()函式:
原型:intfseek(FILE *stream, long offset, int fromwhere);
引數:
stream: 第一個引數stream為檔案指標
offset : 第二個引數offset為偏移量,正數表示正向偏移,負數表示負向偏移
fromwhere: 第三個引數origin設定從檔案的哪裡開始偏移,可能取值為:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 檔案開頭
SEEK_CUR: 當前位置
SEEK_END: 檔案結尾
其中SEEK_SET,SEEK_CUR和SEEK_END依次為0,1和2.
簡言之:
fseek(fp,100L,0);把檔案內部指標移動到離檔案開頭100位元組處;
fseek(fp,100L,1);把檔案內部指標移動到離檔案當前位置100位元組處;
fseek(fp,-100L,2);把檔案內部指標退回到離檔案結尾100位元組處。
參考文章:百度百科,fseek(),http://baike.baidu.com/view/656696.htm
ftell()函式:
原型: longftell(FILE *stream);
功能:返回當前檔案位置,也就是說返回FILE指標當前位置。(也就是偏離檔案首字元個數)
參考文章:百度百科,ftell(),http://baike.baidu.com/view/656699.htm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#include
<stdio.h> #include
<stdlib.h> //exit(0); int main() { FILE
*fp =NULL; long n
= 0 ; if ((fp
= fopen( "Q.txt" , "r" ))
== NULL) { printf( "檔案開啟失敗.\n" ); exit( 0 ); } fseek(fp, 0 , 2 ); //指標:移動到檔案尾部 n
= ftell(fp); //返回指標偏離檔案頭的位置(即檔案中字元個數) printf( "%ld\n" ,n); return 0 ; }</stdlib.h></stdio.h>
|
相關文章
- PHP 獲取伺服器磁碟空間PHP伺服器
- 檢視磁碟使用空間和檔案大小
- 如何獲取 PostgreSQL 資料庫中的表大小、資料庫大小、索引大小、模式大小、表空間大小、列大小SQL資料庫索引模式
- 獲取表空間DDL
- linux檢視剩餘磁碟空間Linux
- linux檢視mysql佔用磁碟空間LinuxMySql
- Linux 磁碟掛載和swap空間管理Linux
- 磁碟空間不足
- Linux磁碟空間佔滿問題快速排雷Linux
- Linux檢查Docker映象,容器的磁碟空間LinuxDocker
- 學習下Linux 如何檢視磁碟空間Linux
- 如何獲取 Linux 中的目錄大小Linux
- linux建立新分割槽擴充套件磁碟空間Linux套件
- 如何解決Linux磁碟空間過大或不足?Linux
- 獲取bitmap大小
- 如何檢查Mac磁碟空間,mac磁碟空間其他怎麼清理Mac
- Linux空間不足怎麼辦?Linux磁碟滿了怎麼清理?Linux
- Linux中各資料夾所佔空間大小技巧Linux
- win10 如何修改磁碟空間 win10修改磁碟空間方法Win10
- Centos Linux 清理磁碟佔用空間:/dev/xvda1CentOSLinuxdev
- Linux空間不足怎麼辦?磁碟滿了如何清理?Linux
- 更改undo表空間大小
- Oracle 擴充磁碟空間Oracle
- Linux時間的獲取與使用Linux
- lvm 擴充邏輯卷空間(linux的磁碟擴容)LVMLinux
- Linux系統檢視磁碟可用空間的5個命令Linux
- ubuntu 擴充套件磁碟空間Ubuntu套件
- docker磁碟空間清理辦法Docker
- [20230201]磁碟空間爆滿.txt
- windows10磁碟空間不足怎麼清理_win10磁碟空間清理的方法WindowsWin10
- C. VMware下LINUX的虛擬機器增加磁碟空間Linux虛擬機
- linux限定使用者或組對磁碟空間的使用Linux
- Linux伺服器磁碟空間佔用情況分析與清理指南Linux伺服器
- 獲取Linux系統中目錄檔案大小的方法Linux
- PHP 獲取不帶名稱空間的類名PHP
- ORACLE ASM磁碟組空間溢位OracleASM
- [20201104]磁碟空間消耗在哪裡.txt
- 沒有磁碟空間 No space left on devicedev
- WSL 回收未使用的磁碟空間