Linux教程

Linux文件

本文主要是介绍Linux文件,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文件

文件类型

Linux 下所有的东西都可以看做文件,Linux 将文件分为以下几种类型:

  • 普通文件 ‘-’
  • 目录文件 ‘d’
  • 管道文件 ‘p’
  • 链接文件 ‘l’
  • 设备文件(块设备 ’b’ 、字符设备 ‘c’)
  • 套接字文件 ‘s’

Linux 上不以文件的扩展名区别文件类型,而是在文件属性中有一列专门记录文件类型。
在这里插入图片描述

权限

  • r 读权限 值: 4
  • w 写权限 值: 2
  • x 执行权限 值: 1
  • 无权限 值: 0
    在这里插入图片描述
    u : 表示文件属主的访问权限
    g : 表示文件同组用户的访问权限
    o : 表示其他用户的访问权限

chmod修改权限

文字设定法
u 表属主 g 同组人 o 其他人 a 所有人 “+”表示增加权限 “-”表示去掉权限
在这里插入图片描述
数字设定法
采用数字设定法时,权限通常由三位数字组成,每一位数字代表一种角色的权限。每个角色的数值由其所具有的权限对应的数值之和构成,如下图:
在这里插入图片描述

Linux文件结构

你可能会问:“为什么要在这里讨论文件结构呢?我早知道它了。”这么说吧,与UNIX一样,Linux环境中的文件具有特别重要的意义,因为它们为操作系统服务和设备提供了一个简单而一致的接口。在Linux中,一切(或几乎一切)都是文件。

这就意味着,通过程序完全可以像使用文件那样使用磁盘文件、串行口、打印机和其他设备。在大多数情况下,你只需要使用5个基本的函数——open、close、read、write和lioctl。

目录也是文件,但它是一种特殊类型的文件。在现代的UNIX(包括Linux)版本中,即使是超级用户可能也不再被允许直接对目录进行写操作了。所有用户通常都使用上层的opendir/readdir接口来读取目录,而无需了解特定系统中目录实现的具体细节。

可以这么说,Linux中的任何事物都可以用一个文件来表示,或者通过特殊的文件提供。虽然它们会与你熟悉的传统文件有一些细微的区别,但两者的基本原理是一致的。下面就让我们来看看到目前为止我们提到的一些特殊文件。

目录

文件,除了本身包含的内容以外,它还会有一个名字和一些属性,即“管理信息",包括文件的创建/修改日期和它的访问权限。这些属性被保存在文件的inode(节点)中,它是文件系统中的一个特殊的数据块,它同时还包含文件的长度和文件在磁盘上的存放位置。系统使用的是文件的inode编号,目录结构为文件命名仅仅是为了便于人们使用。

目录是用于保存其他文件的节点号和名字的文件。目录文件中的每个数据项都是指向某个文件节点的链接,删除文件名就等于删除与之对应的链接。

删除一个文件时,实质上是删除了该文件对应的目录项,同时指向该文件的链接数减1。该文件中的数据可能仍然能够通过其他指向同一文件的链接访问到。如果指向某个文件的链接数(即ls -l命令的输出中跟在访问权限后面的那个数字)变为零,就表示该节点以及其指向的数据不再被使用,磁盘上的相应位置就会被标记为可用空间。

文件被安排在目录中,目录中可能还包含子目录。这些构成了我们所熟悉的文件系统层次结构。用户(比如nei1)通常会将自己的文件保存在家目录中,这可能是目录/home/neil,该目录还将包含用于保存电子邮件、商业信函、工具程序等的子目录。注意,许多UNIX和Linux的shell都允许用户通过波浪线符号(~)直接进入自己的家目录。

如你所知,每个用户的家目录通常是一个上层目录的子目录,这个上层目录是专为此目的而创建的,在本例中,它就是/home目录。

注意,糟糕的是,标准库函数不能理解文件名参数中的shell波浪线速记符号,所以你必须始终在自己的程序中使用真实的文件名。

/home目录本身又是根目录/的一个子目录,根目录位于目录层次的最顶端,它在它的各级子目录中包含着系统中的所有文件。Linux 系统的目录结构是一颗倒状树。

  • /bin 存放常用命令(即二进制可执行程序)
  • /etc 存放系统配置文件
  • /home 所有普通用户的家目录
  • /root 管理员用户的家目录
  • /usr 存放系统应用程序及文档
  • /proc 虚拟文件系统目录,以进程为单位存储内存的映射
  • /dev 存放设备文件
  • /mnt 临时挂载点
  • /lib 存放库文件
  • /boot 系统内核及启动有关的文件
  • /tmp 存放各种临时文件,是所有用户均可访问的地点
  • /var存放系统运行中常改变的文件, 如系统日志

文件和设备

甚至硬件设备在Linux中通常也被表示(映射)为文件。

UNIX和Linux中比较重要的设备文件有3个:
/dev/console、/dev/tty和/dev/null

/dev/console

这个设备代表的是系统控制台。错误信息和诊断信息通常会被发送到这个设备。每个UNIX系统都会有一个指定的终端或显示屏用来接收控制台消息。过去,它可能是一台专用的打印终端。在现代的工作站和Linux上,它通常是“活跃”的虚拟控制台

/dev/tty

如果一个进程有控制终端的话,那么特殊文件/dev/tty就是这个控制终端(键盘和显示屏,或键盘和窗口)的别名(逻辑设备)。例如,由系统自动运行的进程和脚本就没有控制终端,所以它们不能打开/dev/tty。

在能够使用该设备文件的情况下,/dev/tty允许程序直接向用户输出信息,而不管用户具体使用的是哪种类型的伪终端或硬件终端。在标准输出被重定向时,这一功能非常有用。

注意,虽然/dev/console设备只有一个,但通过/dev/tty却能够访问许多不同的物理设备。

/dev/null

/dev/null文件是空(null)设备。所有写向这个设备的输出都将被丢弃,而读这个设备会立刻返回一个文件尾标志,所以在cp命令里可以把它用做复制空文件的源文件。人们常把不需要的输出重定向到/dev/null。

创建空文件的另一个方法是使用touch 命令,该命令的作用是改变文件的修改时间。如果指定的文件不存在,就创建它,但该命令并不会把有内容的文件变成空文件。

/dev目录中的其他设备包括:硬盘和软盘、通信端口、磁带驱动器、CD-ROM、声卡以及一些代表系统内部工作状态的设备。该目录中甚至还有/dev/zero设备,它可以作为创建空文件的null字节源。访问该目录中的某些设备需要具有超级用户权限,普通用户不能通过编写程序来直接访问如硬盘这样的底层设备。设备文件的名字会随系统的不同而不同。Linux发行版通常都提供了以超级用户身份运行的应用程序,用来管理那些以其他用户身份无法访问的设备。

设备被分为字符设备和块设备。两者区别在于访问设备时是否需要一次读写一整块。一般情况下,块设备是那些支持某些类型文件系统的设备,例如硬盘。

这篇关于Linux文件的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!