当前位置:   article > 正文

Linux下的文件类型和属性 以及 对文件的一些基本操作_简述linux系统中支持的七种文件类型的不同作用和含义

简述linux系统中支持的七种文件类型的不同作用和含义

Linux下的文件

本文介绍了Linux下的文件类型,包括普通文件、目录、链接文件、块设备文件、字符设备文件、套接字文件和管道文件。对于每种文件类型,都给出了详细的解释和示例。此外,还介绍了文件的基本操作和文件的元数据属性。

目录

Linux下的文件

七种基本文件

普通文件

 补充说明易错点

 链接文件

 软链接和硬链接的区别:

块设备文件

字符设备

套接字文件

管道文件

 对文件的基本操作

文件有哪些属性?

 元数据

元数据各属性的含义

修改文件的时间戳信息

1. touch修改:

 2.touch -a 修改:

 3.touch -m修改:

4.touch -at ,touch -mt修改:


七种基本文件

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命令查看文件的元数据信息。

元数据各属性的含义
  • Inode:文件的节点号,文件的唯一标识;
  • Access:(0644/-rw-r--r--):文件的权限;
  • Links:文件的硬链接数,表示指向这个文件名的路径名的个数;
  • Uid:文件的所有者;
  • Gid:文件所属的组;
  • Size:文件的大小,以字节为单位;
  • File:文件的名字;
  • Blocks:文件所占块数量;
  • IO Blocks:文件所占的每个块的大小为4096字节;
  • regular file:表示此文件为普通文件(表示文件的类型);
  • Device:表示硬件,即文件在硬盘上的哪个柱面;
  • Modify:文件数据内容的修改时间;
  • Change:文件元数据的修改时间;
  • Access:文件的最后一次访问时间。

修改文件的时间戳信息

Linux文件有三个时间:

atime:access time,即文件的访问时间。
mtime:modify time,即文件的数据内容修改时间。
ctime:change time,即文件的元数据修改时间。

修改文件的时间有以下几种方法:

1. touch修改:

直接使用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


 2.touch -a 修改:

使用touch -a或touch --time=access或atime修改文件的atime时间为当前时间。

touch -a Eyler_Plan
touch --time=access/atime Eyler_Plan

 3.touch -m修改:

使用touch -m或touch --time=modify或mtime修改文件的mtime时间为当前时间。

touch -m YYYYMMDDhhmm.SS /data/passwd.txt
touch --time=modify或mtime YYYYMMDDhhmm.SS /data/passwd.txt

 与上一种方式无异,不再举例。

4.touch -at ,touch -mt修改:

touch -at YYYYMMDDhhmm.SS /data/passwd.txt->使用指定时间修改文件的atime
touch -mt YYYYMMDDhhmm.SS /data/passwd.txt->使用指定时间修改文件的mtime

 值得一提的是,为了防止别人修改电脑文件时间,只有root或者sudo组用户可以任意修改文件的时间。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/256327?site
推荐阅读
相关标签
  

闽ICP备14008679号