赞
踩
本文介绍了Linux下的文件类型,包括普通文件、目录、链接文件、块设备文件、字符设备文件、套接字文件和管道文件。对于每种文件类型,都给出了详细的解释和示例。此外,还介绍了文件的基本操作和文件的元数据属性。
目录
在Linux系统中,有七种基本的文件类型。它们是:
1.普通文件(Regular file):通常用来存储文本或二进制数据,如文本文件、图像文件等。
2.目录文件(Directory file):用来存储其他文件和目录的位置信息。
3.符号链接文件(Symbolic link file):类似于Windows系统中的快捷方式,它指向另一个文件或目录。
4.块设备文件(Block device file):用于存储数据的设备,如硬盘、U盘等。
5.字符设备文件(Character device file):用于传输字符流的设备,如键盘、鼠标等。
6.套接字文件(Socket file):用于进程间通信的文件。
7.管道文件(FIFO file):类似于套接字文件,也用于进程间通信,但是它只能用于相关进程之间的通信。
举例来说,一个普通文件可以是一个包含文本内容的txt文件;一个目录文件可以是一个存储其他文件和目录的位置信息的文件夹;一个符号链接文件可以是指向另一个文件或目录的快捷方式;一个块设备文件可以是用于存储数据的硬盘;一个字符设备文件可以是传输字符流的键盘;一个套接字文件可以是用于进程间通信的网络套接字;一个管道文件可以是用于进程间通信的管道。
目录文件在Linux中的文件类型占位符为 d
1.家目录不是/home目录:每个用户都有自己的家目录,除root的家目录在/root外,其他普通用户的家目录位于/home目录下面的以自己用户名为名的目录下。
2.PATH路径:准确的说,PATH是shell中的一个环境变量,在各种操作系统中都有,用以存储可执行文件所在的目录,当我们在shell里写入指令时,实际是在所有PATH路径里查找是否存在该可执行文件。
链接文件(符号链接,软链接)在Linux中的文件类型占位符为 l
1.软链接(soft link):一个新的文件,文件内容为原始文件的具体存储位置,跟Windows中的快捷方式一样;
2.硬链接(hard link):本质上是同一个文件,只是这个文件有了不止一个名字,相当于与一个具有双国籍的人,或者有两个户口的人,虽然名字,国籍,户口所在位置不同,但本质上还是同一个人。
与windows类别来说,软连接和windows中的快捷方式更像。而硬链接在本质上就是源文件。
块设备文件在Linux中的文件类型占位符为 b ,块设备是系统中用来存储数据的设备
块(block)的概念在操作系统中广泛存在,虽然所处的层,模块各不相同,但其本质思想是相通的。它指的是一段固定大小的连续内存或磁盘空间,用于数据存储和管理。块被用于以结构化和高效的方式组织和管理数据。它们将数据分解成更小、可管理的部分,从而使数据的访问、检索和修改更容易。这个概念被应用于操作系统的许多不同部分,从文件系统到输入/输出操作。
字符设备文件在Linux中的文件类型占位符为 c ,意为字符文件,它的特点是该文件中传递的数据为字符数据,构成字符流,同时数据是实时的,不能存储
常见的字符设备有鼠标,键盘,串口等等
套接字文件在Linux中的文件类型占位符为 s ,主要用在网络通信
套接字(socket)是应用层和运输层的接口,负责将应用层的数据,通过运输层的TCP或者UDP传输出去。Socket是网络编程中,发送和接收数据的唯一接口,发数据则往socket文件写,收数据则是从socket中读数据。
套接字有两个缓冲区:
1.接收缓冲区:也称为输入缓冲区,它存储来自网络的待读取应用程序的数据。
2.发送缓冲区:也称为输出缓冲区,它存储应用程序等待发送到网络的数据。
这些缓冲区用于临时存储数据,直到应用程序准备处理或发送到网络为止。这些缓冲区的大小可以使用各种套接字选项进行调整。
管道文件在Linux中的文件类型占位符为p ,管道文件,也称为命名管道,是Linux中用于进程间通信(IPC)的一种文件类型。
1.它允许两个或多个进程通过读写共享数据缓冲区来相互通信。管道文件类似于普通文件,但不同的是,它只存在于内存中,而不是存储在磁盘上。
2.管道文件有两个端口,一个用于写入,一个用于读取。
3.当一个进程向管道文件的写入端口写入数据时,数据将被存储在共享缓冲区中。另一个进程可以从管道文件的读取端口读取数据。数据按照写入的顺序读取,所以第一个写入的数据也是第一个读取的数据。
4.管道文件可用于在同时运行的进程之间传递数据。例如,一个进程可能生成需要由另一个进程处理的数据。第一个进程可以将数据写入管道文件,第二个进程可以从管道文件中读取数据并对其进行处理。
创建一个管道文件:mkfifo name
我们可以尝试开启两个终端,在第一个终端中创建一个管道文件:
接下来我们运行这样的指令:
echo "hello word" > p
你会发现终端进入了运行状态,此时输入的所有数据都会读入p中
这个命令的意思就是将“hello world”写入到p文件中,此时管道文件的共享存储区中保留下了这一串字符。接下来我们从另一个终端上运行cat指令:
cat p
此时,第一个终端就会退出运行状态,此时第二个终端就会读出“hello world”。
Linux下一切皆文件,系统中的一切设备,资源皆使用这七种基本文件表示,内核为上次应用程序提供了关于文件的系统调用(system calls)(本质是个接口,银行存款机或者柜台),这些文件处理的系统调用有:
open() - 用于打开文件并返回文件描述符,文件描述符是一个整数,用于在所有后续操作中标识文件。
函数原型:int open(const char* path, int flags, mode_t mode)
close() - 用于关闭与给定文件描述符关联的文件。
函数原型:int close(int fd);
read() - 用于从文件中读取数据。
函数原型:ssize_t read(int fd, void* buf, size_t count);
write() - 用于向文件中写入数据。
函数原型:ssize_t write(int fd, const void* buf, size_t count);
lseek() - 用于更改文件描述符的文件偏移量。
函数原型:off_t lseek(int fd, off_t offset, int whence);
unlink() - 用于删除一个文件。
函数原型:int unlink(const char* pathname);
mkdir() - 用于创建新目录。
函数原型:int mkdir(const char* pathname, mode_t mode);
rmdir() - 用于删除空目录。
函数原型:int rmdir(const char* pathname);
这些系统调用用于在Linux中操作文件。它们采用文件路径、文件描述符、缓冲区和模式等参数,执行它们各自的功能。
每个文件都有文件内容和它的不同属性,我们把文件的属性称为文件的元数据。
文件名
文件权限
文件所有者
文件所属组
文件类型
文件类型
文件创建时间
文件访问时间
文件修改时间
文件inode号
文件硬链接数
元数据,即是文件的属性信息,可以使用stat命令查看文件的元数据信息。
Linux文件有三个时间:
atime:access time,即文件的访问时间。
mtime:modify time,即文件的数据内容修改时间。
ctime:change time,即文件的元数据修改时间。
修改文件的时间有以下几种方法:
直接使用touch命令修改文件的三个时间信息,此时文件的时间变成当前时间。格式如下:
touch passwd.txt
详细操作步骤如下:
以文件Eyler_Plan为例:
先使用stat /data/Eyler_Plan命令查看文件的时间戳信息,可以看到文件的时间信息;
stat Eyler_Plan
然后使用touch /data/Eyler_Plan修改时间,屏幕会没有任何输出;
touch Eyler_Plan
最后再使用stat /data/Eyler_Plan查看文件的时间修改信息,它会变成当前时间。请看下图。
stat Eyler_Plan
使用touch -a或touch --time=access或atime修改文件的atime时间为当前时间。
touch -a Eyler_Plan
touch --time=access/atime Eyler_Plan
使用touch -m或touch --time=modify或mtime修改文件的mtime时间为当前时间。
touch -m YYYYMMDDhhmm.SS /data/passwd.txt
touch --time=modify或mtime YYYYMMDDhhmm.SS /data/passwd.txt
与上一种方式无异,不再举例。
touch -at YYYYMMDDhhmm.SS /data/passwd.txt->使用指定时间修改文件的atime
touch -mt YYYYMMDDhhmm.SS /data/passwd.txt->使用指定时间修改文件的mtime
值得一提的是,为了防止别人修改电脑文件时间,只有root或者sudo组用户可以任意修改文件的时间。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。