如何在Linux中查看文件和目录的大小?如果使用df -m,那么它会显示所有目录在顶层的大小,但是,对于目录内的目录和文件,我如何检查大小?


当前回答

您必须区分文件大小和磁盘使用情况。两者之间的主要区别在于文件被“切割成碎片”并存储在块中。

现在的块大小是4KiB,所以文件将使用4KiB的多个磁盘空间,不管它们有多小。

如果你使用stat命令,你可以看到两个数字并排。

stat file.c

如果您想要一个更紧凑的目录视图,您可以使用ls -ls,这将为您提供1KiB单位的使用量。

ls -ls dir

du也会给出真实的磁盘使用情况,单位为1KiB,或者带有-u标志的dutree。

例如:1字节文件的使用情况

$ echo "" > file.c

$ ls -l file.c
-rw-r--r-- 1 nacho nacho 1 Apr 30 20:42 file.c

$ ls -ls file.c
4 -rw-r--r-- 1 nacho nacho 1 Apr 30 20:42 file.c

$ du file.c
4 file.c

$ dutree file.c
[ file.c 1 B ]

$ dutree -u file.c
[ file.c 4.00 KiB ]

$ stat file.c
 File: file.c
 Size: 1 Blocks: 8 IO Block: 4096 regular file
Device: 2fh/47d Inode: 2185244 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ nacho) Gid: ( 1000/ nacho)
Access: 2018-04-30 20:41:58.002124411 +0200
Modify: 2018-04-30 20:42:24.835458383 +0200
Change: 2018-04-30 20:42:24.835458383 +0200
 Birth: -

此外,在现代文件系统中,我们可以使用快照、稀疏文件(其中有漏洞的文件),这进一步使情况复杂化。

您可以在本文中了解更多细节:了解Linux中的文件大小

其他回答

使用ls -s来列出文件大小,或者如果您更喜欢ls -sh来列出人类可读的大小。

对于目录,使用du,对于人类可读的大小,同样使用du -h。

文件使用ls命令,目录使用du命令。

检查文件大小

ls -l filename   #Displays Size of the specified file
ls -l *          #Displays Size of All the files in the current directory
ls -al *         #Displays Size of All the files including hidden files in the current directory
ls -al dir/      #Displays Size of All the files including hidden files in the 'dir' directory

Ls命令不会列出目录的实际大小(为什么?)为此,我们使用du。

检查目录大小

du -sh directory_name    #Gives you the summarized(-s) size of the directory in human readable(-h) format
du -bsh *                #Gives you the apparent(-b) summarized(-s) size of all the files and directories in the current directory in human readable(-h) format

在上述任何命令中包含-h选项(例如:ls -lh *或du -sh)将以人类可读的格式给出大小(kb, mb,gb,…)

有关更多信息,请参阅man ls和man du

您可以使用下面的命令以易于人类阅读的格式获取文件列表。

ls -lrtsh

您所需要的只是-l和——block-size标志

工作目录下所有文件和目录的大小(以mb为单位)

ls -l --block-size=M

工作目录下所有文件和目录的大小(单位:gb)

ls -l --block-size=G

指定文件或目录的大小

ls -l --block-size=M my_file.txt
ls -l --block-size=M my_dir/

ls——帮助 -l使用长列表格式 ——block-size=SIZE:在打印之前按SIZE缩放大小;例如, '——block-size=M'以。为单位打印大小 1048576个字节;参见下面的SIZE格式 “SIZE”为可选单位,取值为整型。例如:10M为10*1024*1024。 单位为K, M, G, T, P, E, Z, Y(1024的幂)或KB, MB,… (1000的幂)。


ls -l——block-size=M将给出一个很长的格式列表(需要实际查看文件大小),并将文件大小四舍五入到最近的MiB。

如果你想要MB(10^6字节)的单位而不是MiB(2^20字节)的单位,使用——block-size=MB代替。

如果你不希望文件大小附加M后缀,你可以使用——block-size=1M。感谢Stéphane Chazelas的建议。

这在ls的手册页中描述;男人和搜索大小。它还允许使用MB/MiB以外的单位,并且从它的外观(我没有尝试过)来看,它还允许任意块大小(因此,如果您愿意,您可以将文件大小视为412字节块的数量)。

注意——block-size参数是在Open Group的ls之上的GNU扩展,所以如果你没有GNU用户区(大多数Linux安装都有),这个参数可能不起作用。GNU coreutils 8.5中的ls支持如上所述的——块大小。