文件属性

1. 本章引言
上一章通过学习文件io,知道了如何使用文件io来打开文件,对文件进行读写等操作,那么我们这一章将换一个角度,专门围绕文件属性进行相关的讨论。

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

1.2 本章讲什么
本章专门介绍操作文件属性的各种OS API,比如获取文件的读写权限、文件的大小、文件的创建时间等。

1.3 本章的意义
本章操作文件属性的OS API,使用的不像文件io的OS API那样频繁,但是学习本章可以让你深入的理解有关文件这个东西,所以非常希望大家能够认真对待本章内容。

1.4 本章涉及到的OS API有哪些?
stat、fstat、lstat

umask

chmod、fchmod

chown,fchown,lchown

link,unlink,remove,rename
symlink和readlink

chdir、和getcwd

看起来很多,不过每一行都是一组,只要理解其中一个,其它的都很好理解。
而且这些函数,都与我们常用的cd、ls、chmod、chown、pwd等命令息息相关,大家之前就已经熟悉了这些命令,
所以开解这些函数时,并不会觉得困难。

同样的,对于这些函数,不要去记,关键是理解,如果用到时,你能够查阅man手册后者资料,快速的把它用起来,就说明你学明白了。

2. 回顾文件7种类型

之前将Linux基础的时候说过,在Linux下一切皆是文件,从应用层(应用程序层)看待底层机制时,皆以文件的方式来看待这些机制。

但是不同的底层机制,毕竟是不同的,比如底层驱动程序,就分为字符设备驱动和块设备驱动,根据底层机制的不同,文件被分
为了7种类型。

2.1 文件的7种类型

我们在学习《Linux基础初级》时讲过,Linux一切皆文件,文件一共分为7类分别是- d c s p l b。

(1)普通文件(regular file:-)

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

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

(b)纯二进制文件(机器码)
比如经过编译后得到的可执行文件,里面放的是cpu执行的纯二进制机器码,由于文编编辑器只认识文字编码,所以
用文本编辑器打开后,显示的内容无法是错乱的,无法辨识。

其实不管存放的是文字编码,还是机器码,在计算机中存储时,其实都是以二进制形式存放的,只不过我们这里可刻
意的把机器码这类非文字编码的数据,特意强调为了二进制数据。

2)以存储5为例

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

对linux内核而言,这两种文件并无区别,至于文件中的数据如何解释,则由处理这些数据的应用程序(比如文本编辑器)
来决定。

不管是文字编码数据,还是纯二进制数据,应用程序调用read、write读写文件时,没有任何区别。

(2)目录文件(director file:d)
目录是一种特殊的文件,专门用于管理其它文件。

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

字符设备文件,就是字符设备驱动程序,在上层的表现形式。

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

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

1)块设备文件,是块设备驱动程序在上层的表现形式。

2)字符设备与块设备有什么区别?

(a)字符设备
以字节为单位来操作数据。

比如:键盘、鼠标、显示器都等是字符设备。
字符设备的驱动程序,就称为“字符设备驱动程序”。

(b)块设备
块设备存储的数据量往往非常大,为了提高读写效率,都是以块(1024字节)为单位来操作数据。

比如:电脑硬盘、移动硬盘、u盘等,凡是涉及大量数据存储的,都是以块为单位来操作数据的,都是块设备。

块设备的驱动程序,就称为“块设备驱动程序”。

(5)FIFO(fifo:p)
管道文件,用于实现不同进程(程序)之间的通信,管道是OS提供的一种纯代码层面的通信机制。

数据 数据
A进程 ————————> 管道文件 ————————>B进程

后面讲进程间通信时,会具体讲到管道这个东西。

(6)套接字文件(socket:s)
专门用于网络通信的文件。

讲到网络编程时,再来具体介绍。

(7)符号连接(symbolic link:l):
我们在Linux基础中讲过了,其实就是一种快捷图标,背后指向了另外一个文件。

这7类文件,其中普通文件数量最多,其次是目录文件,然后才是其它类的文件。

2.2 如何判断文件的类型
(1)ls查看- d c l b s p符号来区分

(2)可以使用file命令来查看

1)查看普通文件

(a)如果查看的是文本文件
会提醒你,它是文字编码格式的文件。

(b)如果你查看的是纯二进制文件(机器码)

会提示你,这是一个可以运行的可执行文件。

a.out: ELF 64-bit LSB executable, x86-64, dynamically linked,
/lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, not strippe

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

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

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

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

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

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

· for GNU/Linux 2.6.32:运行的系统是Linux系统(ubuntu),Linu x 2.6.32是ubuntu所用Linux内核的版本号

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

2.3 如何对这些文件进行IO操作

在我们整个课程中,这7类文件都会涉及到,对文件进行IO操作时,使用的都是第1章讲的各种文件io函数,从这里也可以看出,
所以第1章的内容很重要。

Linux下文件的七种类型的更多相关文章

  1. Linux下文件的三种时间戳

    Linux下文件的三种时间标记 三种时间对应关系表 column column column 访问时间 Access atime 修改时间 Modify mtime 状态改动时间 Change cti ...

  2. Linux下文件的三种时间标记(atime ctime mtime)

    在windows下,一个文件有:创建时间.修改时间.访问时间. 在Linux下,一个文件有:状态改动时间.修改时间.访问时间. 1)查看文件(或文件夹)的三种时间标记 (stat 命令) Access ...

  3. Linux下文件的三种时间标记:访问时间、修改时间、状态改动时间 (转载)

    在windows下,一个文件有:创建时间.修改时间.访问时间. 而在Linux下,一个文件也有三种时间,分别是:访问时间.修改时间.状态改动时间. 两者有此不同,在Linux下没有创建时间的概念,也就 ...

  4. Linux 文件的几种类型

    文件的几种类型:    1.普通文件   普通文件就是一般意义上的文件,它们作为数据存储在系统磁盘中,可以随机访问文件的内容.Linux系统中的文件是面向字节的,文 件的内容以字节为单位进行存储与访问 ...

  5. linux系统中文件的几种类型

    Linux系统是以文件的形式来进行管理的.Linux文件类型常见的有:普通文件.目录.字符设备文件.块设备文件.符号链接文件等,如果想了解这方面知识的弟兄,就进来了解了解. Linux系统不同于win ...

  6. Linux下文件的权限

    一.Linux下查看文件属性 命令为: [root@localhost ~]# ls -al 结果: ls是『list』的意思,重点在显示文件的文件名与相关属性.而选项『-al』则表示列出所有的文件详 ...

  7. Windows与Linux下文件操作监控的实现

    一.需求分析: 随着渲染业务的不断进行,数据传输渐渐成为影响业务时间最大的因素.究其原因就是因为数据传输耗费较长的时间.于是,依托于渲染业务的网盘开发逐渐成为迫切需要解决的需求.该网盘的实现和当前市场 ...

  8. LINUX下文件编译

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  9. linux下文件结束符

    linux下文件结束符,我试过了所有的linux,发现其文件的结束符都是以0a即LF结束的,这个是操作系统规定的,windows下是\r\n符结束,希望可以帮助大家. -------------转:来 ...

随机推荐

  1. spring cloud微服务快速教程之(七) Spring Cloud Alibaba--nacos(一)、服务注册发现

    0.前言 什么是Spring Cloud Alibaba? Spring Cloud Alibaba 是阿里开源的,致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便 ...

  2. git-gitlab-github集合

    git-gitlab-github集合 git(一):     git简介 git(二):     git安装和简单使用 git(三):     git的分支管理 git(四):     git的远程 ...

  3. [Linux]curl 获取本服务器公网IP

    curl ifconfig.me curl icanhazip.com curl curlmyip.com curl ip.appspot.com curl ipinfo.io/ip curl ipe ...

  4. vue.extend 拓展

    https://www.w3cplus.com/vue/vue-extend.html https://jspang.com/post/vue2-2.html https://blog.csdn.ne ...

  5. Explain执行计划与索引优化实践

    一.何为explain执行计划? 使用explain关键字可以模拟优化器执行SQL语句,从而知道MySQL是如何使用索引来处理你的SQL查询语句以及连接表,可以分析查询语句或是结构的性能瓶颈,帮助我们 ...

  6. 【USACO】JZOJ,Luogu P2690 接苹果 (dp-线性动规)

    同步于CSDN:戳这里QAQ 来源:Luogu P2690,JZOJ 题目描述 很少有人知道奶牛爱吃苹果.农夫约翰的农场上有两棵苹果树(编号为 \(1\) 和 \(2\)), 每一棵树上都长满了苹果. ...

  7. LINUX下EFIBOOTMGR的使用,删除UEFI主板多余启动项和添加启动项

    用uefi装了几次次archlinux,搞的uefi启动选项下多出来好多启动项..这东西重格硬盘也是不好用的.发现以下方法可以解决. efibootmgr   //显示efi的启动项 删除一个引导项 ...

  8. KVM-virsh 创建虚拟网络

    创建网络 创建配置文件 vim /etc/libvirt/qemu/networks/nfsnobody.xml #创建一个名为nfsnobody的虚拟网络 <network> <n ...

  9. C语言再学习part3—算法

    君子远庖厨,万物皆备于我.—孟子 这篇文章主要总结程序的主要要素,以及程序的构成是什么样子的.最后说说我学到的一种奇特的表示算法的方式—伪代码. 让我们开始吧! 一个程序应该包括以下两个主要要素: 1 ...

  10. spring cloud微服务快速教程之(八) Spring Cloud Alibaba--nacos(二)、配置中心

    0-前言 上一篇我们介绍了nacos作为服务注册发现组件的功能,nacos还具有配置中心的功能,而且支持热加载: 在此之前,配置中心有Spring Cloud Config,实际上,用这个有很多风险和 ...