文件的7种类型,文件属性引入, 如何判断文件的类型 (文件属性)【linux】(n)

文件属性引入

我们通过ls查到的就是文件属性,只不过ls只显示了部分文件属性。

操作文件属性的各种OS API,比如获取文件的读写权限、文件的大小、文件的创建时间等。
我们在文件属性里面主要说明:

stat、fstat、lstat 获取文件属性
Umask 修改文件掩码
chmod、fchmod 修改文件属性
chown,fchown,lchown 修改文件属主
link,unlink,remove,rename 链接文件
symlink和readlink
chdir、和getcwd 获取当前工作路径

这些函数,都与我们常用的cd、ls、chmod、chown、pwd等命令息息相关,读者之前就已经熟悉了这些命令,

文件的7种类型

Linux一切皆文件,文件一共分为7类分别是- d c s p l b。

普通文件(regular file:-)

通过命令查看:
在这里插入图片描述

普通文件根据存放的内容的不同,又分为如下两种:

文本文件

存放的都是文字编码,文本编辑器打开后,会将这些文字编码翻译为文字图形,以供人识别。

纯二进制文件(机器码)

比如经过编译后得到的可执行文件,里面放的是cpu执行的纯二进制机器码,由于文编编辑器只认识文字编码,所以用文本编辑器打开后,显示的内容无法是错乱的,无法辨识。其实不管存放的是文字编码,还是机器码,在计算机中存储时,其实都是以二进制形式存放的,只不过我们这里可刻意的把机器码这类非文字编码的数据,特意强调为了二进制数据。

扫描二维码关注公众号,回复: 9056862 查看本文章

我们打开一个二进制文件进行查看:(查看一个可执行程序文件)
在这里插入图片描述

我们可以看到打开之后是乱码,其中有一部分能看懂的,有一部分是字符串形式,就是字符编码。

以存储5为例
以‘5’存储:在文件中存放的是’5’的ASCII码为53(??00110101?),在计算机中实际存放的是?00110101?。

以整数5存储:文件中实际存放是整数5(00000101),在计算机中实际存放的是00000101。
对linux内核而言,这两种文件并无区别,至于文件中的数据如何解释,则由处理这些数据的应用程序(比如文本编辑器)来决定。不管是文字编码数据,还是纯二进制数据,应用程序调用read、write读写文件时,没有任何区别。

目录文件(director file:d)

目录是一种特殊的文件,专门用于管理其它文件。

字符设备文件(character special file:c)

字符设备文件,就是字符设备驱动程序,在上层的表现形式。
当应用程序调用底层字符设备驱动程序,实现对某个字符设备进行读写时,上层就需要对接底层的字符驱动程序,字符设备驱动在上层,会以“字符设备文件”的形式表现出来,我们通过open、read、write去读写字符设备文件,就实现了和底层字符设备驱动程序的交互。以字节为单位操作数据。

块设备文件(block special file:b):对应块设备(如磁盘等)

1)块设备文件,是块设备驱动程序在上层的表现形式。
2)字符设备与块设备的区别

(a)字符设备
以字节为单位来操作数据。
比如:键盘、鼠标、显示器都等是字符设备。
字符设备的驱动程序,就称为“字符设备驱动程序”。

(b)块设备
块设备存储的数据量往往非常大,为了提高读写效率,都是以块(1024字节)为单位来操作数据。
比如:电脑硬盘、移动硬盘、u盘等,凡是涉及大量数据存储的,都是以块为单位来操作数据的,都是块设备。块设备的驱动程序,就称为“块设备驱动程序”。

管道文件(fifo:p)

用于实现不同进程(程序)之间的通信,管道是OS提供的一种纯代码层面的通信机制。
在这里插入图片描述
后面到进程间通信时,会具体说明。

套接字文件(socket:s)

专门用于网络通信的文件。

符号连接(symbolic link:l)

一种快捷图标,背后指向了另外一个文件。

如何判断文件的类型

一、s查看- d c l b s p符号来区分

二、使用file命令来查看
查看普通文件

  1. 如果查看的是文本文件会提醒你,它是文字编码格式的文件。
    我们查看一个txt文件:
    在这里插入图片描述
    提示是一个ASCII编码的文本文件。
    2.如果你查看的是纯二进制文件(机器码)会提示你,这是一个可以运行的可执行文件。
    我们查看一个可执行文件:
    在这里插入图片描述

我们可看到:
main: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2,forGNU/Linux3.2.0,BuildID[sha1]=1a046440f144c98b3fd88caf41b6c0885acab0da, not stripped

ELF:Linux下可执行文件的格式,Windows下的可执行文件是PE格式对应格式的可执行文件,只能在对应的OS下运行。

64-bit:文件里面的机器指令是64位的

LSB:小端序,C语言里面有详细介绍大小端序

executable:明确告诉你,该文件是一个可执行文件

x86-64:运行的是intel的i386的、64位的cpu

dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2 :程序使用的库是动态链接库,库名叫/lib64/ld-linux-x86-64.so.2

2,forGNU/Linux3.2.0:运行的系统是Linux3.2.02

not strippe:程序没有被瘦身,里面包含有各种用于调试用的信息,当这个程序最终发布时,会使用strip命令为程序瘦身,去除里面的无用信息,让程序变的更小。

小结

我们这里只是提出7种文件类型,并没有展开说明,详细说明会在后续博客体现,关于详细文件类型的解读,读者可以通过验证自己电脑上的其他文件进行巩固。

发布了84 篇原创文章 · 获赞 71 · 访问量 9105

猜你喜欢

转载自blog.csdn.net/qq_43648751/article/details/104179515