Linux下查看文件和文件夹大小命令linux操作系统

2024-06-24

Linux下查看文件和文件夹大小命令linux操作系统(精选11篇)

篇1:Linux下查看文件和文件夹大小命令linux操作系统

在linux中查看文件大小我们可以使用df命令来实现,如果要查看文件夹大小我们直接使用du命令即可实现了,有需要了解的朋友可参考,、

df命令可以显示目前所有文件系统的可用空间及使用情形,请看下列这个例子:

以下是代码片段:

代码如下复制代码[yayug@yayu ~]$ df -h

FilesystemSizeUsed Avail Use% Mounted on

/dev/sda13.9G300M3.4G8% /

/dev/sda7100G188M95G1% /data0

/dev/sdb1133G80G47G64% /data1

/dev/sda67.8G218M7.2G3% /var

/dev/sda57.8G166M7.2G3% /tmp

/dev/sda39.7G2.5G6.8G27% /usr

tmpfs2.0G02.0G0% /dev/shm

Df命令是linux系统以磁盘分区为单位查看文件系统,可以加上参数查看磁盘剩余空间信息,命令格式:

代码如下复制代码df -hl

显示格式为:

文件系统容量 已用 可用 已用% 挂载点

代码如下复制代码FilesystemSize Used Avail Use% Mounted on

/dev/hda245G19G24G 44% /

/dev/hda1494M19M 450M4% /boot

/dev/hda64.9G 2.2G 2.5G 47% /home

/dev/hda59.7G 2.9G 6.4G 31% /opt

none1009M0 1009M0% /dev/shm

/dev/hda39.7G 7.2G 2.1G 78% /usr/local

/dev/hdb275G75G0 100% /

/dev/hdb275G75G0 100% /

以上面的输出为例,表示的意思为:

HD硬盘接口的第二个硬盘(b),第二个分区(2),容量是75G,用了75G,可用是0,因此利用率是100%, 被挂载到根分区目录上(/),

下面是相关命令的解释:

df -hl 查看磁盘剩余空间

df -h 查看每个根路径的分区大小

du -sh [目录名] 返回该目录的大小

du -sm [文件夹] 返回该文件夹总M数

更多功能可以输入一下命令查看:

df --help

du --help

du:查询文件或文件夹的磁盘使用空间

如果当前目录下文件和文件夹很多,使用不带参数du的命令,可以循环列出所有文件和文件夹所使用的空间。这对查看究竟是那个地方过大是不利的,所以得指定深入目录的层数,参数:--max-depth=,这是个极为有用的参数!如下,注意使用“*”,可以得到文件的使用空间大小.

提醒:一向命令比linux复杂的FreeBSD,它的du命令指定深入目录的层数却是比linux简化,为 -d。

以下是代码片段:

代码如下复制代码

[root@bsso yayu]# du -h --max-depth=1 work/testing

27Mwork/testing/logs

35Mwork/testing

[root@bsso yayu]# du -h --max-depth=1 work/testing/*

8.0Kwork/testing/func.php

27Mwork/testing/logs

8.1Mwork/testing/nohup.out

8.0Kwork/testing/testing_c.php

12Kwork/testing/testing_func_reg.php

8.0Kwork/testing/testing_get.php

8.0Kwork/testing/testing_g.php

8.0Kwork/testing/var.php

[root@bsso yayu]# du -h --max-depth=1 work/testing/logs/

27Mwork/testing/logs/

[root@bsso yayu]# du -h --max-depth=1 work/testing/logs/*

24Kwork/testing/logs/errdate.log_show.log

8.0Kwork/testing/logs/pertime_show.log

27Mwork/testing/logs/show.log

篇2:Linux下查看文件和文件夹大小命令linux操作系统

代码如下复制代码

find /dir -size +100M -exec ls -lh {} \;

如果想直接删除大于50M的文件,使用命令

代码如下复制代码

find /var/mail/ -size +50M -exec rm {} \;

如果要清空一些文本文件类的东西,可以使用

代码如下复制代码

echo “” >/www.111cn.net /xxx.log

此命令能与“echo >/var/log/big.log”达到相同效果,不过,命令执行后,需要用“Ctrl + d”结束

代码如下复制代码

clear >/opt/log/big.log

此命令会把big.log文件内容清空,而不删除文件

同样的效果,用true、flase、“:”等也能实现清空文件内容,而不删除文件的效果

代码如下复制代码

true >/opt/log/big.log

flase >/opt/log/big.log

: >/opt/log/big.log

若想删除文件,只需利用rm命令即可

代码如下复制代码

rm -f /opt/log/big.log

如果想排序文件夹和文件,可以使用

代码如下复制代码

du -s * | sort -nr | head

补充两个好用简单的方法

代码如下复制代码

cat /dev/null >要清空的文件

>要清空的文件

篇3:Linux下查看文件和文件夹大小命令linux操作系统

关键词:Linux,文件I/O操作,系统调用,标准库函数

1、Linux的文件与系统调用

Linux环境中的文件提供了面向系统服务和硬件设备简单而又统一的接口。Linux里的一切事物都是文件, 程序可以像对待普通文件那样对待磁盘、串行口、打印机等设备。系统通过函数就可以实现对文件和设备的访问和控制, 而这些函数就被称作系统调用。

系统调用提供了用户程序与操作系统之间的接口。系统调用的本质上就是用程序请求OS内核完成某项功能时的过程调用。C标准I/O库函数便是通过系统调用把I/O操作从用户空间传给内核, 然后让内核去做I/O操作, 关系如图1所示:

Linux为统一对文件和设备的操作, 提供了create、open、close、read、write、lseek等系统调用, 并使用文件描述符来实现对文件的操作。

2、文件相关的系统调用

2.1 creat () 系统调用

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

int creat (const char*pathname, mode_t mode) ;

creat () 系统调用创建一个名为pathname的文件。如果文件不存在, 则创建;如果文件已经存在, 则把它的内容清空, 文件长度设为0, 同时返回该文件的文件描述符。参数pathname为欲创建文件的文件名, m o d e为模式。

2.2 open () 系统调用

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

int open (const char*pathname, intflags) ;

int open (const char*pathname, intflags, mode_t mode) ;

open () 系统调用的作用是打开一个文件, 参数pathname给出了到文件的路径, 如果操作成功, 则返回一个文件描述符。参数flags为主要文件访问模式和可选模式的结合。flags参数可以使用如下的信息:

主要文件访问模式:

O_RDONLY以只读方式打开

O_WRONLY以只写方式打开

O_RDWR以读写方式打开

可选模式:

O_APPEND把写入数据追加在文件的末尾

O_TRUNC把文件长度设置为零, 丢弃已有的内容

O_CREAT如果需要, 就按照参数mode中给的访问模式来创建文件, 此时必须使用三地址格式的open系统调用

O_EXCL与O_CREAT一起使用, 确保调用者创建出文件

当使用带O_CREAT的open时必须使用三地址的open系统调用, mode是几个标志位使用按位操作或得到的, 主要用于确定文件的权限。此处我们不再详细介绍, 感兴趣的读者可以参考相关文献。例如:

open (“myfile”, O_CREAT, S_IRUSR|S_IXOTH) 创建名为myfile的文件, 文件属主拥有读权限, 其他用户拥有执行权限。

2.3 close系统调用

#include<unistd.h>

int close (int fd) ;

Close系统调用终止一个文件描述符和文件之间的关联, 文件描述符被释放, 从而可以被再次使用。调用成功返回0, 否则返回-1;

2.4 read系统调用

#include<unistd.h>

ssize_t read (int fd, void*buf, size_tcount) ;

函数将从fd所指向的文件读出count字节的数据并存入b u f指向的数据区里面, 如果执行成功, 返回实际读入的字节数, 可能会小于c o u n t。执行出错, 返回-1。如果返回0, 表示到达了文件尾。例如:

num=read (int 0, buf, 100) ;//0为标准输入的文件描述符

将标准输入的100个字节的字符读入b u f, 标准输入一般为键盘。

2.5 write系统调用

#include<unistd.h>

ssize_t write (int fd, const void*buf, size_t count) ;

fd为欲写入文件的文件描述符, buf存放欲写入的数据, count为欲写入的字节数。函数返回实际写入的字节数, 如果返回0, 表示未写入任何数据。如果返回-1, 表示执行出错。

2.6 Lseek系统调用

#include<sys/types.h>

#include<unistd.h>

off_t lseek (int fileds, off_t offset, int whence)

lseek函数通过offset来重定位文件读写位置。可以将offset参数理解为偏移量。参数whence表示文件偏移量的具体计算。可以使用如下的宏定义:

SEEK_SET:偏移量即为offset中的值。

S E E K_C U R:偏移量为当前位置上offset值。

S E E K_E N D:偏移量为文件大小加offset值。

执行成功则返回从文件开始位置最后的偏移量, 如果返回-1, 则执行出错。

3、实例分析

以下程序实现了对文件的复制, 输入格式为“filewrite source dest”。程序的功能类似于Linux系统中的cp命令。

#include<stdio.h>

#include<unistd.h>

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

int main (int argc, char*argv[]) {int fd1, fd2;

//fd1为打开源文件后得到的文件描述符

//fd2为打开目标文件后得到的文件描述符

char buffer[100];

//buffer作为存放从文件中读取的数据的缓冲区

int num;

//判断输入是否符合程序要求

if (argc!=3) {

printf ("Usage:%s source dest", argv[0]) ;

return 1;

}

//打开要复制的文件

if ( (fd1=open (argv[1], O_RDONLY) ) ==-1) {

perror ("Cannot open the file") ;

return 1;

}

//打开复制后的文件

if ( (fd2=open (argv[2], O_CREAT|O_WRONLY, 0777) ) ==-1) {

perror ("Cannot create the destinationfile") ;

return 1;

}

while ( (num=read (fd1, buffer, 100) ) >0) //从fd1中读取数据存放在buffer中

{

if (write (fd2, buffer, num) ==-1) //将buffer中的数据写入目标文件中{

perror ("Cannot write the file contentto the file") ;

return 1;

}

}

close (fd1) ;

close (fd2) ;

return 0;

}

使用gcc编译程序, 得到可执行文件filewrite:

$gcc filewrite.c–O filewrite

$./filewrite test dat

查看dat文件, 发现test上的内容已经完全复制到dat文件中了。

该程序首先使用open系统调用以只读方式 (O_R D O N L Y) 打开要读取的文件, 然后打开目标文件, 此时使用的是三地址格式的open系统调用 (O_CREAT和O_W R O N L Y) , 即如果目标文件不存在则创建并以只写方式打开。然后将数组buffer作为缓冲区, 使用read系统调用从源文件中读取100字节的数据, 读出的内容放在buffer指向的缓冲区里面, 最后调用write函数将buffer中的内容写入目标文件, 至此完成了从源文件到目标文件的内容的复制。

4、文件读写相关的库函数

由于系统调用比函数调用开销大而降低了计算机执行能力。在使用库函数时, 用户可以高效率地写任意长度的数据块, 库函数则在数据满足数据块长度要求的时候安排执行底层调用, 尽可能的减少了使用read和write调用的数量从而减少系统开销, 降低了系统调用的负面影响。

4.1 fopen/fclose

#include<stdio.h>

FILE*fopen (const char*path, constchar*mode) ;

path是文件的路径名, mode表示打开方式。如果文件打开成功, 就返回一个文件指针。以后调用其它函数对文件做读写操作都要提供这个指针。

4.2 数据块读写函数fread和fwtrite

C语言还提供了用于整块数据的读写函数。可用来读写一组数据, 如一个数组元素, 一个结构变量的值等。一般形式为:

fread (buffer, size, count, fp) ;

fwrite (buffer, size, count, fp) ;

其中, buffer是一个指针, 在fread函数中, 它表示存放输入数据的首地址。在fwrite函数中, 它表示存放输出数据的首地址。size表示数据块的字节数。count表示要读写的数据块块数。fp表示文件指针。例如:

fread (fa, 4, 5, fp) ;

意义是从fp所指的文件中, 每次读4个字节 (一个实数) 送入实数组fa中, 连续读5次, 即读5个实数到fa中。关于库函数平时使用比较频繁, 在此不再详细介绍。

结束语

本文简要的介绍了对文件I/O操作的系统调用, 并对系统调用和标准库函数之间的区别和联系进行了分析。希望读者能够通过本文对系统调用及文件操作有个整体认识。

参考文献

[1]W.Richard Stevens著.尤晋元译.UNIX环境高级编程[M].北京:机械工业出版社.2000:35-41

[2]杜华.Linux编程技术详解[M].北京:人民邮电出版社.2007.11:141-152

[3]李玉波、朱自强、郭军.Linux C编程[M].北京:清华大学出版社.2005.9:129-144

[4]孙琼等.嵌入式Linux应用程序开发详解[M].北京:人民邮电出版社.2006.7:166-200

篇4:Linux下查看文件和文件夹大小命令linux操作系统

关键词:嵌入式Linux;根文件系统;MTD;NAND Flash

中图分类号:TP311 文献标识码:A文章编号:1007-9599 (2010) 13-0000-01

The Construction of Root File System for the Embedded Linux&NAND flash

Cheng Jian

(School of Computer Science&Technology,Anhui University of Science and Technology,Huainan232001,China)

Abstract:The embedded Linux selecting a Nand Flash to save root file system generally,this paper explains some common file systemes and the feature of the NAND Flash firstly.Secondly it deatily states the principle of the MTD layer and the configurations procedure of a root file system through the example of constucting the YAFFS and Cramfs file systemes in the platform of Sumsang’s ARM9 2410s .

Keywords:The emdedded Linux;Root file system;MTD;NAND flash

近些年嵌入式系统的发展非常快。随着硬件技术的进步,越来越多的嵌入式设备使用Linux作为操作系统,可以实现功能更强的应用。Linux的内核在启动过程中会安装文件系统,是不可或缺的重要组成部分。本文以三星的ARM9 2410S为例,采用了Linux 2.6.24版本说明了如何在NAND flash 存储器上构建文件系统。

一、嵌入式Linux及文件系统

文件系统有两个含义。一个是磁盘和磁盘机制的文件系统即物理文件系统,另一个含义是用户能操作的逻辑文件系统。Linux的一个特点是它支持很多不同的文件系统如JFS、ext、ext2、NTFS、Cramfs等等。

文件系统都会被烧录在某一个存储设备上。嵌入式设备往往选用ROM、闪存(flash memory)等作为主要的存储设备。在嵌入式设备上选用哪种文件系统格式与闪存的特点是相关的。

目前在嵌入式设备上应用最广泛的flash是NOR和NAND flash。NOR的特點是可在芯片内执行,应用程序可直接在flash内运行,不必再把代码读到系统RAM中。NOR的传输效率很高,但写入和擦除的速度较低。而NAND结构能提供极高的单元密度,并且写入和擦除的速度也快,是高数据存储密度的最佳选择,但应用较复杂。不过很多操作系统包括Linux都支持NAND flash。在实际应用中,很多嵌入式设备厂家选用低容量但价格昂股的NOR flash存储启动引导程序和内核,而把文件系统放在NAND flash中。

二、MTD驱动层

要使用Cramfs或YAFFS文件系统,离不开MTD驱动层的支持。MTD(Memory Technology Device)是Liunx中的一个存储设备统一接口层,是专为基于Flash的设备而设计的。MTD包含很多特定类型Flash芯片的驱动程序。在使用MTD时首先要选择合适的Flash芯片驱动。Flash芯片驱动向上层提供读、写、擦除等基本的Flash操作方法。MTD对这些进行封装后向用户提供MTD char和MTD block类型的设备。MTD char类型的设备包括/dev/mtd0,/dev/ted1。它们提供对Flash的原始字符访问。MTD block类型的设备包括/dev/mtdblock0,/dev/mtdblock1等。MTD block将Flash模拟成快设备,这样就可以在Flash上创建Cramfs等格式的文件系统了。

另外,MTD支持CFI(Common Flash Ingerface)接口。利用它可以在一块Flash上创建多个Flash分区。每一个分区作为一个MTD block设备,这样可以把系统软件和数据等分配到不同的分区上,也可以在不同的分区上采用不同的文件系统。

在源代码arch/arm/mach-s3c2410/common-smdk.c文件下的函数“mtd_partition smdk_default_nand_part[]={}”中,可以看到默认的MTD分区,也可以根据需要进行个、修改。

三、MTD及文件系统的配置

(一)配置MTD 要使用Cramfs和YAFFS文件系统,首先要配置MTD。在Memory Technology Devices(MTD)-选项选中如下选项:

<*> Memory Technoloy Device (MTD)support /*MTD支持

[*] MTD Technology suppory/*MTD分区支持

<*>Direct char device access to MTD devices/*字符设备的支持

<*>Caching block device access to MTD devices/*块设备支持

NAND Flash Device Drivers -对NAND Flash的支持

<*>SMC Device support /*

<*>Simple Block Device for Nand Flash(BON FS)

<*>SMC device on S3C2410 SMDK

[*] Use MTD From SMC

(二)配置文件系统

<*> Kernel automounter version 4 support (also supports v3)/*文件系统自动挂载支持

<*>DOS FAT fs support/*对DOS/FAT文件系统的支持

<*>Yaffs filesystem on NAND /*对YAFFS文件系统的支持

<*>Compressed ROM file system support /*对Cramfs文件系统的支持

[*] Virtual memory file system support(former shm fs) /*对temfs 文件系统的支持

<*> Simple RAM-based file system support

[*] /proc file system support/*對/proc 和/dev设备文件系统的支持

[*]/dev file system support (EXPERIMENTAL)/*对/dev设备文件系统支持

[*] Automatiocally mount at boot/*启动时自动挂载的支持

[*] /dev/pts file system for Unix98 PTYs

Network File Systems-/*对NFS网络文件系统的支持

<*>NFS files system support

[*] Provid NFSv3 client support

四、总结

一个使用Linux内核的嵌入式系统中root文件系统必修包含支持完整Linux系统的全部东西,因此至少包含:基本文件系统结构如目录/dev、/proc、/bin、/etc、/lib、/usr;最基本的应用程序如sh 、ls、 cp、 mv等;最低限度的配置文件如inittab、fstab等;设备如/dev/null、/dev/console、/dev/tty*、/dev/ttys*、对应flash分区的设备节点等;基本程序运行所需的函数库等。但由于嵌入式系统资源相对紧缺,在构建时候要根据系统进行定制。

参考文献:

[1]Linux. http://www.linux-mtd.infradead.org

[2]北京博创.UP-CUP S2410 经典 Linux 指导书[M].北京:北京博创兴业科技有限公司,2009

[3]胡勇其,侯学锋.嵌入式Linux下NAND存储器系统的设计与实现[J].计算机工程,2006,32(4)

[4]查启鹏,姚国良.嵌入式Linux下大容量Flash的YAFFS文件系统构建[J].现代电子技术,2007,257(18)

[5]冯翔,李仁发.嵌入式Linux中闪存设备驱动程序开发[J].计算机科学与工程,2005,27(3)

作者简介:程建(1975.6-)男,安徽桐城人,硕士,讲师,主要从事嵌入式系统的研究与教学。

篇5:Linux下查看文件和文件夹大小命令linux操作系统

查看当前目录大小:

代码如下复制代码

[root@512m50G /]# du -sh

查看指定目录大小:

代码如下复制代码

[root@512m50G /]#du -sh /var/www.111cn.net/blog

查看当前目录文件总数:

代码如下复制代码

[root@512m50G /]#find . -type f |wc -l

查看指定目录文件总数:

代码如下复制代码

[root@512m50G /]#find /var/www.111cn.net/blog -type f |wc -l

查看当前目录的目录总数:

代码如下复制代码

[root@512m50G /]# find . -type d |wc -l

查看指定目录的目录总数:

代码如下复制代码

[root@512m50G /]# find /var/www.111cn.net/blog -type d |wc -l

du -sh 文件或目录名

用法:du [选项]... [文件]...

总结每个<文件>的磁盘用量,目录则取总用量。

长选项必须用的参数在使用短选项时也是必须的。

-a, --all write counts for all files, not just directories

-B, --block-size=SIZE use SIZE-byte blocks

-b, --bytes print size in bytes

-c, --total produce a grand total

-D, --dereference-args dereference FILEs that are symbolic links

-h, --human-readable 以容易理解的格式印出文件大小 (例如 1K 234M 2G)

-H, --si 类似 -h,但取 1000 的次方而不是 1024

-k 即 --block-size=1K

-l, --count-links 连硬链接的大小也计算在内

-L, --dereference 找出任何符号链接指示的真正目的地

-S, --separate-dirs 不包括子目录的占用量

-s, --summarize 只分别计算命令列中每个参数所占的总用量

-x, --one-file-system skip directories on different filesystems

-X FILE, --exclude-from=FILE Exclude files that match any pattern in FILE.

--exclude=PATTERN Exclude files that match PATTERN.

--max-depth=N print the total for a directory (or file, with --all)

only if it is N or fewer levels below the command

line argument; --max-depth=0 is the same as

篇6:Linux下查看文件和文件夹大小命令linux操作系统

1. ls 命令

这个命令就相当于 dos 下的dir 命令一样,也是Linux 控制台命令中最为重要几个命令之一.ls 最常用的参数有三个:-a、 -l 、和–F。

ls -a

Linux 系统上的文件以.开头的文件被系统视为隐藏文件,仅用ls 命令是看不到他们的。而用ls –a ,除了显示一般文件名外,连隐藏文件也会显示出来。

ls –l (这个参数是字母 L 的小写不是数字1)

这个命令可以使用长格式显示文件内容。 如果需要察看更详细的文件资料就要用到ls -l 这个指令。

ls –F

在列出的文件 (目录)名称后加一符号,例如可执行文件加”*”, 目录则加 “/”。

2. cd 命令

cd 这个命令是用来进出目录的,它的使用方法和在dos 下没什么两样,但和dos 不同的是Linux 的目录对大小写是敏感的,如果大小写拼写有误,你的cd操作是成功不了的。另外,cd 如果直接输入,cd 后面不加任何东西会回到使用者自己的Home 目录。假设如果是root 那就是回到/root, 这个功能同cd~是一样的。

3. mkdir rmdir

mkdir 命令用来建立新的目录,如输入如下命令:

mkdir work

将在当前目录下新建一个 work 目录。

rmdir 用来删除已建立的目录,如输入如下命令:

rmdir work

将删除已存在的空目录work

4. cp

cp 这个命令相当于dos 下面的copy 命令。具体用法是:

cp -r 源文件(source) 目的文件(target)

参数 r 是指连同源文件中的子目录一同拷贝,

5. rm

rm 这个命令是用来删除文件的,rm命令常用的参数有三个-i,-r,-f。

比如我现在要删除一个名字为 text 的一个文件,输入如下命令:

rm –i test

系统会询问我们是否要删除test 文件,敲了“y/n” 确认是否要删除test 文件:

rm –r 目录名:这个操作可以连同这个目录下面的子目录都删除,功能比上面讲到的rmdir 更强大,不仅可能删除指定的目录,而且可以删除该目录下所有文件和子目录。

rm –f 文件名这个操作可以不经确认强制删除文件。

6. mv

mv 这个命令的功能是移动目录或文件,引申的功能是给目录或文件重命名,

比如:

mv /tmp/xxx.tar /root

该命令将/tmp 目录下的xxx.tar 文件移动到/root 目录下。

而:

mv aaa.tar bbb.tar

则是将当前目录下的文件 aaa.tar 更名为bbb.tar。

7. cat

cat 这个命令是linux 中非常重要的一个命令,它的功能是显示或连结一般的ascii 文本文件、它的用法如下:

cat text

该命令显示text 这个文件的内容。

cat file1 file2

该命令依顺序显示file1,file2 的内容。

cat file1 file2>file3

该命令把file1,file2 的内容结合起来再重定向>到file3 文件中。

8. more

more 是显示一般文本文件的指令。如果一个文本文件太长了超过一个屏幕的画面,用cat 来看实在是不理想,就可以试试more ,用法如下:

more file1

9. pwd

篇7:Linux下查看文件和文件夹大小命令linux操作系统

文件及目录操作:

进入某目录:cd /目录名

返回上级目录:cd ..

返回上上级目录:cd ../..

删除文件: rm 文件名

删除目录:rmdir 目录名

移动或重命名文件:mv 旧路径 新路径

复制文件:cp 源文件路径 复制到的新文件路径

查找文件:find 文件名

查看目录内文件:ls 目录名

更改site文件夹目录所有者

chown -R www site

文件解压操作

tar.gz压缩与解压

解压filename.tar.gz

tar zxvf filename.tar.gz

解压filename.tar.gz到site目录

tar zxvf filename.tar.gz site

压缩site目录为filename.tar.gz

tar -zcvf filename.tar.gz site

压缩多个目录(site1 site2)为filename.tar.gz

tar -zcvf filename.tar.gz site site1 site2

zip压缩与解压

解压filename.zip

unzip filename.zip

解压filename.zip到site目录

unzip filename.zip site

删除操作

创建权限为755的demo文件夹

mkdir 755 demo

-r 就是向下递归,不管有多少级目录,一并删除

-f 就是直接强行删除,不作任何提示的意思

Llinux没有回收站,使用rm -rf的时候一定要格外小心

删除/home/site/文件夹(该目录以及其下所有文件、文件夹)

rm -rf /home/site/

删除filename.tar.gz文件

rm -f filename.tar.gz

这里介绍Linux下统计目录/文件夹大小的命令:du

如果想查看当前目录下,各个子目录的大小:

du -sh ./*

得到如下回显:

root@vm:/var# du -sh ./*

424K ./backups

8.2M ./cache

50M ./lib

4.0K ./local

8.0K ./lock

14M ./log

4.0K ./mail

4.0K ./opt

96K ./run

60K ./spool

4.0K ./tmp

8.0K ./www

上述结果表明lib目录占用了50M的磁盘空间,其次是log目录,占用了14M空间;

如果磁盘有多个分区,想查看每个分区的使用情况,则使用df命令:

df -hl

得到如下显示:

/dev/sda1 16G 662M 15G 5% /

tmpfs 252M 0 252M 0% /lib/init/rw

udev 247M 124K 247M 1% /dev

tmpfs 252M 0 252M 0% /dev/shm

说明sda1磁盘一共15G,使用了662M,只用了5%

再附一些函数

文件和目录操作的基本

命令有:cat、chgrp、xgnod、c

hown、clear、cmp、cp、cut、

diff、 du、emacs、 f

mkdir、 mikdir、 more、

grep、 file、 fmc、 grep、 h

ead、 ln、 less、 locate、 ls、

mv、 pico、 pwd、 rm

、 whatis、 whereis

、 sort、 stat、 strings、 t

篇8:Linux系统访问控制文件系统

关键词:可堆叠文件系统,访问控制,文件系统

1 引言

Linux系统拥有为人称道的安全性,在服务器领域占有不小的应用比例,但是它与Windows一样,存在提权漏洞。如果攻击者通过漏洞攻击获取了root权限,现有的用户权限访问控制机制就已经无法保护系统文件免遭篡改和破坏了。为进一步提高Linux系统安全性,有必要在系统中增加一道防线,增强其访问控制能力。利用可堆叠文件系统技术(stackable file system),可以在不修改系统内核的前提下,实现一个提供访问控制功能的特殊文件系统,它建立于实际存储数据的文件系统之上,具备良好的兼容性,可以应用于几乎所有Linux系统中,无论其使用的文件系统是早期的ext2,还是最新的btrfs。

2 可堆叠文件系统原理

可堆叠文件系统,顾名思义,就是可以在其他文件系统上叠加的文件系统。一个可堆叠文件系统自身并不存储任何数据,而使用其他文件系统来存储其数据。它的原理就是使自身对于上一层的VFS调用看来像是一个实际的文件系统,对于下层文件系统而言,像是VFS层,起到一个承上启下的作用。本文中称可堆叠文件系统为上层文件系统,把被它堆叠于其下的文件系统称为下层文件系统。

可堆叠文件系统(简称SFS)的意义在于可以在VFS层和具体的文件系统层之间加入一个实现所需附加功能的层次,在这一层可以加入安全控制、日志记录、行为审计、文件加解密等多种功能。以系统读取文件的流程为例,Linux系统中使用vfs(虚拟文件系统)来提供对各种不同文件系统的支持,常规的流程是系统调用sys_read()在VFS层触发vfs_read(),然后通过此方法中的file->f_op->read()调用具体文件系统的读取文件方法,例如ext4系统的do_sync_read()。加入SFS层后,VFS层会调用SFS层的sfs_read()方法,在这里可以实现安全控制、加密解密等各种功能,然后在sfs_read()方法中模拟vfs层来调用具体文件系统的read()方法。SFS层与其他层次结构的关系如图1所示。

3 访问控制文件系统的设计

VFS层通过vfs_read()、vsf_write()等统一的方法对实际文件系统进行访问,具体实现就是在以上方法中通过调用具体文件系统中f_op、i_op、i_fop、d_op等操作方法集中的read、write等函数指针所指向的实现读写操作的方法,例如:ext4文件系统下的do_sync_read()、do_sync_write()。根据以上特点,SFS具体的实现方式如下。

3.1 访问权限控制

通过一个根据访问控制列表来判断进程访问权限的方法,实现对特定文件的控制、保护。访问控制列表以链表的形式存储,内容可以包含uid,gid,路径信息等,能够根据不同的需求来进行添加、删除和修改。可以将完整的访问控制列表信息保存在一个配置文件中,便于获取和修改。

3.2 完成数据的传递

分别通过SFS层的super_block、dentry、inode、file结构中的私有域s_fs_info、d_fsdata、i_private、private_data来存储下层文件的中对应的结构的信息,建立上下层文件对象之间的对应关系。确保了在完成sfs层的访问权限判断操作后,能够顺利地将下层文件系统的对象数据发送给具体文件系统中的文件访问方法,以最终完成对文件的操作。本文建立了以下结构用于存储下层文件系统的各类对象指针:

(1)sfs_sb_info对象

用于存储下层文件系统的super_block对象,自身被储存在SFS层的super_block对象的s_fs_info私有域中。

(2)sfs_file_info对象

用于存储下层文件系统的file对象,自身被储存在SFS层的file对象的private_data私有域中。

(3)sfs_inode_info对象

用于存储下层文件系统的inode对象和SFS层的inode对象。

(4)sfs_dentry_info对象

用于存储下层文件系统的dentry、vfsmount对象,自身被储存在SFS层的dentry对象的d_fsdata私有域中。

3.3 文件访问方法

根据实际需要分别实现super_block结构中的s_d_op、dentry结构中的d_op、inode机构中的i_op等方法操作集的全部或者部分方法,使自身可以响应VFS层的vfs_read()、vsf_write()等方法,此为承上;在SFS的方法集的特定函数中,完成访问权限判断后,再决定是否调用vfs_read()、vsf_write()等方法,如果具备相应的权限,就将从VFS方法传递过来的关于下层文件系统的数据(如dentry、inode、path等结构的实例)传给这些函数,实现模拟VFS层对下层文件系统的访问,此为启下。通过这种当“中间人”的方式,SFS实现承上启下的功能。

4 访问控制文件系统的核心代码

4.1 访问控制函数

为了实现访问控制,必须在关键函数调用下层文件系统之前使用一个访问控制函数sfs_check_access()进行判断,如果操作不符合要求,就直接返回,从而起到阻止未授权的文件访问的作用。由于读写文件之前都必须首先打开文件,所以把sfs_check_access()放在sfs_open函数中,在初始化SFS层的file对象前进行访问权限判断,可以实现对文件系统中文件对象读写访问的拦截过滤操作。具体实现如下:

sfs_check_access()负责进行访问控制权限判断,此处可以通过current->gid,current->uid,current->comm等获取当前进程的用户组ID,用户ID,调用命令等信息,与设定的规则进行比对(规则信息存放在特定的文件中,在挂载访问控制文件系统时,读入数据,完成访问控制列表的初始化),确认其是否满足访问控制规则,并根据需要,对特定的操作进行日志记录。

4.2 文件的读写等操作

是根据函数定义所需的参数来获取适当的下层文件系统的对象,并将其传递给下层文件系统以完成磁盘读写操作。以sfs_read()为例,对其实现进行说明如下:

5 性能和稳定性考虑

要在Linux中实现可堆叠文件系统这一技术重点在于必须解决数据缓存、调用传递等重点问题。通过建立sfs_sb_Info,sfs_dentry_info,sfs_inode_info等对象的缓存,以此为准,不考虑下层文件系统自身的缓存内容,这样符合操作系统中认为上层缓存数据更加权威的理念,也解决了上下层文件系统缓存不一致的问题。Linux在3.0内核中已经加入了对可堆叠文件系统的支持,在fs/stack.c中提供了在编写可堆叠文件系统时常用的方法,如:fsstack_copy_inode_size和fsstack_copy_attr_all,分别用于从下层文件系统中复制索引节点的大小和复制索引节点的所有属性到上层文件系统的索引节点中。这为数据传递的顺利实现打下了良好的基础。还有一个必须注意的问题就是文件系统中各个对象的引用计数,一个对象在引用计数为0时将被内核释放。由于可堆叠文件系统在实际系统之上增加了一个层次,必须将需要使用到的下层文件系统的dentry、inode、file等对象的引用计数进行相应增加,防止引用下层文件系统时对象已经被释放导致空引用,造成内核崩溃。

6 结语

对如何使用可堆叠文件系统技术实现一个具备访问控制功能的文件系统进行了详细的阐述。文件系统由于在系统内核中增加了一个层次,带来了额外的开支,对读写速度有一定的影响,但经过测试,其最高系统读写性能损耗不超过10%,可以在提供更高安全性的同时满足大部分使用者对操作系统性能的需求。

参考文献

[1]Peter Jay Salzman,Ichael Burian,Ori Pomerantz.The LinuxKernel Module Programming Guide.http://www.tldp.org.2007-05-18.

[2]Bryan Henderson.Linux Loadable Kernel Module HOWTO.http://www.tldp.org.2006-09-24.

篇9:Linux下查看文件和文件夹大小命令linux操作系统

定义日志文件系统的方法有很多种,但是让我们抓住要点。日志文件系统就是专为那些厌倦了一直盯着启动时 fsck(即文件系统一致性检查)的人而设计的(日志文件系统同样适用于希望文件系统具有故障恢复能力的群体)。如果系统采用传统的未提供日志功能的文件系统,那么操作系统在检测到系统为非正常关机时,会使用 fsck 应用程序执行一致性检验。该应用程序会扫描文件系统(这要花费很长的时间),并修复任何可安全修复的问题。而在某些情况下,当文件系统损坏严重时,操作系统会启动到单用户模式,由用户进行进一步的修复。

那么现在您应该清楚日志文件系统针对的是哪类人群了,但是他们是如何取缔 fsck 的呢?笼统地说,日志文件系统就是通过维护一份日志来防止文件系统崩溃。所谓日志就是一种特殊的文件,它会在一个循环的缓冲区内记录文件系统的修改,然后 将其定期提交到文件系统。一旦系统发生崩溃,日志文件就会起到一个检查点的作用,用于恢复未保存的信息,防止损坏文件系统元数据。

总 之,日志文件系统就是一种具有故障恢复能力的文件系统,它利用日志来记录尚未提交到文件系统的修改,以防止元数据破坏(请参见图 1)。但是如众多其他 Linux 解决方案一样,日志文件系统有多种方案供您选择。下面就让我们一起简短回顾一下日志文件系统的历史,然后再看一看现行的几种文件系统,看看它们之间有什么 区别。

Linux 日志文件系统的历史

最 早的日志文件系统是 IBM? Journaled File System(JFS)。JFS 于 1990 年首次发行,而当前 Linux 支持的版本是后期开发的 JFS2。1994 年,Silicon Graphics 为 IRIX 操作系统引进了高性能的 XFS。XFS 于 2001 年被植入 Linux 系统中。1998 年开发的智能文件系统(SFS)起初是为 Amiga 开发的,但之后却在 GNU Lesser General Public License(LGPL)下发行,并于 2005 年获得了 Linux 的支持。最常用的日志文件系统 ext3fs (third extended file system)是 ext2 的扩展,它增加了记录日志的功能。从 2001 年起,Linux 系统中就开始支持 ext3fs。最终,ReiserFS 日志文件系统在其被引入之后,力压群雄,被广泛使用。但由于其原开发者的一些法律纠纷,ReiserFS 日志文件系统未能得到进一步的发展。

日志的几种变体

日志文件系统是使用日志来缓冲文件系统的修改(同时也可以应用于紧急故障恢复)的,但可以根据记录的时间与内容采取不同的策略。其中,三种常见的策略为:回写(writeback)、预定(ordered)和数据(data)。

在回写模式 中,仅有元数据被记录到日志,数据块则被直接写入到磁盘位置上。这样可以保存文件系统结构,防止崩溃,但却有可能发生数据崩溃(比如:在元数据记录到日志后,数据块写入磁盘前,系统崩溃)。要想解决这个问题,您可以使用预定模式。预定模式 只将元数据记录到日志,但是在此之前将数据写入到磁盘。这样就可以保证系统恢复后数据和文件系统的一致性。最后一种模式将数据也记录到了日志中。在数据模式 中,元数据和数据都被记录到日志中。这种模式可以最大限度地防止文件系统崩溃与数据丢失,但由于全部数据都写入了两次(先写入日志,再写入磁盘),系统性能可能会降低。

日志的提交也有很多种不同的策略。比如,是在日志将满时,还是在超时后?

日志文件系统的现状

如今,有几种日志文件系统应用非常广泛。每一种都有其自己的优缺点。下面介绍现存最普遍的四种日志文件系统。

JFS2

JFS2(又称 enhanced journaled file system)是最早期的日志文件系统,在植入 Linux 之前已被应用于 IBM AIX? 操作系统多年。它是 64 位的文件系统,虽然它是在原来的 JFS 的基础上开发的,但却较之有所改进,即:JFS2 具有更优的扩展性能,而且支持多处理器架构。

JFS2 支持预定的日志记录方式,可以提高较高的性能,并实现亚秒级文件系统恢复。JFS2 同时为提高性能提供了基于分区的文件分配(Extent-based allocation)。基于分区的分配 是指对一组连续的块而非单一的块进行分配。由于这些块在磁盘上是连续的,其读取和写入的性能就会更好。这种分配的另外一个优势就是可以将元数据管理最小化。按块分配磁盘空间就意味着要逐块更新元数据。而使用分区,元数据则仅需按照分区(可以代表多个块)更新。

JFS2 还使用了 B+ 树,以便更快地查找目录和管理分区描述符。JFS2 没有内部日志提交策略,而是在 kupdate 守护进程超时时提交。

XFS

XFS 是 Silicon Graphicsis 于 1995 年为 IRIX 操作系统开发的其他早期日志文件系统之一。它于 2001 年就已经被植入 Linux,因此,它已经成熟而且可靠。

XFS 支持 64 位全地址寻址,并以 B+ 树为目录和文件分配提供高性能。XFS 同样使用了基于分区的分配,支持可变的块大小(从 512 字节到 64KB )。除分区外,XFS 还采用延时分配,即等到块将被写入磁盘时,再为其分配磁盘空间。这样所需磁盘空间总数就一目了然,因此这个功能提高了分配连续磁盘块的可能性。

XFS 还有一些其他的有趣特性,它可以保证 rate 输入输出(I/O — 通过为文件系统用户保留带宽)和直接 I/O。其中,数据是直接在磁盘和用户空间缓冲区间拷贝的(而不是从多个缓冲区进入)。XFS 采用回写日志策略。

第三扩展文件系统(ext3fs)

第 三扩展文件系统(third extended file system,ext3fs)是最流行的日志文件系统,是由 ext2 文件系统演化而来。实际上,Ext3fs 可以与 ext2fs 兼容,这是因为 ext3fs 使用的结构与 ext2fs 相同,仅仅多了一个日志而已。我们甚至可以把 ext3fs 的一部分当作 ext2 文件系统挂载,或者将 ext2 文件系统转换成 ext3 文件系统(使用 tune2fs 实用程序)。

Ext3fs 允许用三种方式记录日志(回写,预定和数据),但预定模式为默认模式。日志提交策略也是可配置的,但是默认在日志填满 1/4 时或其中一个提交计时器超时时,提交日志。

ext3fs 主要的弊端之一就是它最初不是作为日志文件系统而设计的。它是在 ext2fs 的基础上开发的,因此缺少一些其他日志文件系统所具备的高级特性(例如分区)。它在性能方面较之 ReiserFS、JFS 以及 XFS 也尤为逊色,但它所需要的 CPU 和内存要比同类解决方案少。

ReiserFS

ReiserFS 是从一开始就按照记录日志的意图而开发的日志文件系统。ReiserFS 于 2001 年被引进到主流 2.4 内核(Linux 采用的第一个日志文件系统)。其默认的日志记录方法为预定,且支持以在线调整大小的方式扩展文件系统。ReiserFS 同时还具有 tail packing 功能,显着减少了磁盘碎片。在处理较小文件方面,ReiserFS 的速度要比 ext3f 快(当 tail packing 可用时)。

ReiserFS(又称 ReiserFS v3)具有很多先进的功能,如 B+ 树。该文件系统的基础格式建立在单一的 B+ 树的基础之上,这使得搜索的效率和可伸缩性增强。提交策略则取决于日志的大小,但是要以待提交的块的数量为基础。

ReiserFS 也遇到了几个问题 — 大多是最近出现的,这与其开发者遇到了一些法律纠纷有直接原因。

日志文件系统的未来

现在您已经了解了现行的(和过去的)日志文件系统,下面就让我们看一看它的发展趋势。

Reiser4

在成功地将 ReiserFS 合并到 Linux 内核,并被很多的 Linux 发行版采用之后,Namesys(开发 ReiserFS 的公司)便开始致力于新的日志文件系统的开发。Reiser4 被设计成为全新的日志文件系统,它拥有很多先进的功能。

Resier4 拟定通过 wandering 日志和延迟分配块直至日志提交(像在 XFS 中一样)的方式来实现更优秀的日志记录。Reiser4 还设计有灵活的插件架构(以支持诸如压缩和加密之类的功能),但是被 Linux 社区拒绝了,因为这些在虚拟文件系统(virtual file system,VFS)被当作是最好的功能。

由于 Namesys 的所有者的坚持,所有关于 Reiser4 的商业活动都停止了。

第四扩展文件系统

第 四扩展日志文件系统(fourth extended journaling file system,ext4fs)是由 ext3fs 演化而来。Ext4 文件系统被设计为具有向前和向后兼容性,但它具有许多新的高级特性(其中的一些特性破坏了兼容性)。这就意味着您可以将 ext4fs 的一部分作为 ext3fs 挂载,反之亦然。

首先,ext4fs 是 64 位文件系统,并被设计为可以支持很大的容量(1 exabyte)。它还可以使用分区,但是这样做将失去与 ext3fs 的兼容性。像 XFS 和 Reiser4 一样,ext4fs 还支持在必要时采取延时分配方式分配块(这样可以减少磁盘碎片)。日志的内容也已经执行过检查和(checksum),使日志更加可靠。ext4fs 并没有采用标准的 B+ 或者 B* 树,取而代之的是 B 树的一种变体,叫做 H 树,它支持更大的子目录(ext3 的上限为 32KB )。

虽然延时分配的方法可以减少磁盘碎片,但时间久了,一个大的文件系统可能会成为碎片。为解决这个问题,开发了在线磁盘碎片整理工具(e4defrag)。您可以使用这个工具来整理单个的文件或者整个文件系统。

ext3fs 与 ext4fs 间的另一个有趣的区别就在于文件的日期分辨率。在 ext3 中,时间戳的最小分辨率为 1 秒。而 Ext4fs 是面向未来的:那时处理器和接口的速度会持续加快,需要更高的分辨率。因此,ext4 中时间戳的最小分辨率为 1 纳秒。

Ext4fs 已被合并到自 2.6.19 以后的 Linux 内核中,但它还是不够稳定。下一代系统的开发将继续致力于此;辅之以上一代的优势, 它就会是下一代的 Linux 日志文件系统。

结束语

篇10:Linux下查看文件和文件夹大小命令linux操作系统

1、从服务器上下载文件

scp username@servername:/path/filename /var/www/local_dir(本地目录)

例如scp root@192.168.0.101:/var/www/test.txt把192.168.0.101上的/var/www/test.txt 的文件下载到/var/www/local_dir(本地目录)

2、上传本地文件到服务器

scp /path/filename username@servername:/path

例如scp /var/www/test.phproot@192.168.0.101:/var/www/把本机/var/www/目录下的test.php文件上传到192.168.0.101这台服务器上的/var/www/目录中

3、从服务器下载整个目录

scp -r username@servername:/var/www/remote_dir/(远程目录) /var/www/local_dir(本地目录)

例如:scp -r root@192.168.0.101:/var/www/test/var/www/

4、上传目录到服务器

scp-r local_dir username@servername:remote_dir

例如:scp -r testroot@192.168.0.101:/var/www/把当前目录下的test目录上传到服务器的/var/www/ 目录

篇11:Linux下查看文件和文件夹大小命令linux操作系统

1、查看文件指令,包括 cat ,tac, nl, mZ“www.2cto.com/kf/ware/vc/” target=“_blank” class=“keylink”>vcmUgLGxlc3MgLCBoZWFkICwgdGFpbCAsIG9kICwgdG91Y2ggPC9wPgo8cD48aW1nIHNyYz0=“www.2cto.com/uploadfile/Collfiles/1217/2013121708493230.jpg” alt=“”>

下面是more less 的具体操作表

2、查找特殊文件指令, 包括 which , whereis , locate , updatedb

3、移动文件相关命令,包括 mv , 以及提取路径命令, basename, dirname

4、显示目录命令 ls

5、文件拷贝命令 CP

上一篇:计算机等级考试必备(C语言最重要的知识点)下一篇:二年级品德下册知识点