linux中的文件类型与目录结构

来源:互联网 发布:linux 日志 时间格式 编辑:程序博客网 时间:2024/05/22 06:07

文章部分资料来源于网络,本人只是按个人习惯进行整理,如有疑问,可联系本人删除。以下为资料链接:

http://www.blackmoreops.com/2015/06/18/linux-file-system-hierarchy-v2-0/
http://vinsent.blog.51cto.com/13116656/1959522

linux中的文件类型与目录结构
一、文件类型
Linux的文件是什么?
对于UNIX系统来说(同样适用于Linux),以下便是对文件简单的描述:在UNIX系统中,一切皆为文件;若非文件,则为进程
这种定义是比较正确的,因为有些特殊的文件不仅仅是普通文件(比如命名管道和套接字),不过为了让事情变的简单,“一切皆为文件”也是一个可以让人接受的说法。Linux系统也像UNIX系统一样,将文件和目录视如同物,因为目录只是一个包含了其他文件名的文件而已。程序、服务、文本、图片等等,都是文件。对于系统来说,输入和输出设备,基本上所有的设备,都被当做是文件。
Linux的文件类型
普通文件regular file)就是一般存取的文件,他们包含普通数据,比如,文本、可执行文件、或者程序、程序的输入或输出等等。由ls -al显示出来的属性中,第一个属性为 [-],例如 [-rwxrwxrwx]。
依照文件的内容,又大致可以分为:
1、纯文本文件(ASCII):这是Unix系统中最多的一种文件类型,之所以称为纯文本文件,是因为内容可以直接读到的数据,例如数字、字母等等。设 置文件几乎都属于这种文件类型。举例来说,使用命令“cat ~/.bashrc”就可以看到该文件的内容(cat是将文件内容读出来)。
2、二进制文件(binary):系统其实仅认识且可以执行二进制文件(binary file)。Linux中的可执行文件(脚本,文本方式的批处理文件不算)就是这种格式的。举例来说,命令cat就是一个二进制文件。
3、数据格式的文件(data):有些程序在运行过程中,会读取某些特定格式的文件,那些特定格式的文件可以称为数据文件(data file)。举例来说,Linux在用户登入时,都会将登录数据记录在 /var/log/wtmp文件内,该文件是一个数据文件,它能通过last命令读出来。但使用cat时,会读出乱码。因为它是属于一种特殊格式的文件。虽然你可以认为“在Linux中,一切你看到的皆为文件”这个观点相当保险,但这里仍有着一些例外。
目录(directory:由其他文件组成的文件,就是目录,第一个属性为[d],例如 [drwxrwxrwx]。
特殊文件:用于输入和输出的途径。大多数特殊文件都储存在/dev中,我们将会在后面讨论这个问题。
链接文件link:让文件或者目录出现在系统文件树结构上多个地方的机制。类似Windows下面的快捷方式。第一个属性为[l],例如[lrwxrwxrwx]。
(域)套接字sockets:特殊的文件类型,和TCP/IP协议中的套接字有点像,提供进程间网络通讯,并受文件系统的访问控制机制保护。这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为[s],最常在 /var/run目录中看到这种文件类型。
命名管道(FIFO,pipe): 或多或少有点像sockets(套接字),提供一个进程间的通信机制,而不用网络套接字协议。FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为[p]。
设备与设备文件(device:与系统外设及存储等相关的一些文件,通常都集中在 /dev目录。通常又分为两种:
1.块设备文件就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是 /dev/hda1等文件。第一个属性为[b]。
2.字符设备文件即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为[c]。
二、文件结构
Linux 文件系统描述
文件系统的是用来组织和排列文件存取的,所以它是可见的,在Linux中,我们可以通过ls和tree等工具来查看其结构,在Linux系统中,我们见到的都是树形结构,正如我们熟悉的'MS-DOS'(磁盘操作系统)就是一个例子。;比如操作系统安装在一个文件系统中,他表现为由根“/”起始的树形结构。人们习惯把这些文件当做是硬盘上的有序的树状结构大的分枝包括更多的分枝,分枝的末梢是树的叶子或者普通的文件。现在我们将会以这树形图为例,但晚点我们会发现为什么这不是一个完全准确的一幅图。
Linux文件系统的特点
文件和目录被组织成一个单根倒置树结构
文件系统从根目录下开始,用“/”表示根文件系统(rootfs):root filesystem
文件名称区分大小写
以"."开头的文件为隐藏文件
路径分隔符 /
数据=metadata+data
元数据:metadata-->存储基本信息,可用stat filename来查看filename的元数据
数据:data-->真正存储在磁盘上的数据

Linux系统中文件命名规则
文件最长255个字节
包括路径在内文件名称最长4095个字节
标准linux文件系统,文件名大小写敏感(ext4)
Linux中定义了不同文件对应的颜色

Linux中文件颜色所代表的属性和颜色
绿色:可以执行程序
蓝色:目录文件   (用d表示)
黑色:文本文件
白色:一般性文件,如文本文件,配置文件,源码文件等   (用-表示)
绿色:可执行文件,可执行的程序    (/bin/sbin目录下)
黄色设备文件/dev目录下) (用bc表示,b表示的是物理设备;c表示的是字符终端设备)
红色:压缩文件或者包文件
浅蓝色(青色):链接文件,主要是使用ln命令建立的文件  (用l表示)
青黄色:管道文件  (用p表示)
灰色:其它文件;
粉红色:图片文件或是socket文件 (用s表示)
红色闪烁:链接的文件有问题了
//用dircolors -p看到缺省的颜色设置,包括各种颜色和“粗体”,下划线,闪烁等定义。 
//在环境变量$
LS_COLORS上修改就行

目录
描述
/
主层次的根,也是整个文件系统层次结构的根目录,所有的目录、文件、设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者。
/bin
二进制(binary)。存放系统所需要的那些命令位于此目录。所有用户都可用,不能关联至独立分区,在一般的系统当中,都可以在这个目录下找到linux常用的命令。如 cat、ls、cp等等
/boot
存放系统内核及引导程序目录,包含在启动时加载的静态文件,kernels、ramdisk、initrd、vmlinuz initrd.img 
和grub等。在一般情况下,GRUBLILO系统引导管理器也位于这个目录。
/dev
(devices)存放必要的设备文件及特殊文件,例如/dev/null 。在这个目录中包含了所有linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序。这一点和常用的windows,dos操作系统不一样。它实际上是一个访问这些外部设备的端口。可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。
/etc
存放主机系统管理时需用的系统级配置文件和子目录要用到的网络配置文件,文件系统,x系统配置文件,设备配置信息,设置用户信息等都在这个目录下。
其实这里有个关于它名字本身意义上的的争议。在贝尔实验室的UNIX实施文档的早期版本中,/etc表示是“其他(etcetera)目录”,因为从历史上看,这个目录是存放各种不属于其他目录的文件(然而,文件系统目录标准 FSH 限定 /etc 用于存放静态配置文件,这里不该存有二进制文件)。早期文档出版后,这个目录名又重新定义成不同的形式。近期的解释中包含着诸如“可编辑文本配置”或者“额外的工具箱”这样的重定义
/etc/opt
存储着新增包的配置文件 /opt/.
/etc/sgml
存放配置文件,比如 catalogs,用于那些处理SGML(译者注:标准通用标记语言)的软件的配置文件
/etc/X11
X Window 系统11版本的的配置文件
/etc/xml
配置文件,比如catalogs,用于那些处理XML(译者注:可扩展标记语言)的软件的配置文件
/home
用户的主目录,包括保存的文件,个人配置,等等,即如果建立一个用户,用户名是"xx",那么在/home目录下就默认有一个对应的/home/xx路径的家目录。
/lib
库(library),/bin/ 和 /sbin/中的二进制文件的必需的库文件,是系统基本共享库文件,以及内核模块文件。这个目录是用来存放系统动态连接共享库的。几乎所有的应用程序都会用到这个目录下的共享库。因此,千万不要轻易对这个目录进行什么操作,一旦发生问题,系统就不能工作了。
/lib<架构位数>
备用格式的必要的库文件。 这样的目录是可选的,但如果他们存在的话肯定是有需要用到它们的程序。 如:/lib64:专用x86_64系统上的辅助共享库文件存放位置
/media
便携式移动设备挂载点,挂载可移动的多媒体(如CD-ROMs、usb)、CD/DVD驱动器。(出现于 FHS-2.3)。
/mnt
存放临时挂载储存设备的挂载目录,比如有cdrom等目录。可以参看/etc/fstab的定义。
/opt
可选的应用程序软件包,第三方应用程序安装目录
/proc
可以在这个目录下获取系统信息以文件形式提供进程以及内核信息的虚拟文件系统,如存储pid号,在Linux中,对应进程文件系统(procfs )的挂载点。这些信息是在内存中,由系统自己产生的。
/root
管理员root用户的主目录
/sbin
必要的系统级二进制文件,存放系统管理员管理类基本命令,不能关联至独立分区,是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,这个目录和/usr/sbin; /usr/X11R6/sbin/usr/local/sbin目录是相似的,凡是目录sbin中包含的都是root权限才能执行的。
系统启动时便会用到的程序 ,比如, init, ip, mount
/srv
(service简写)服务类程序用到的中间数据(系统提供的站点特定数据),服务启动后,所需访问的数据目录,举个例子来说,www服务启动读取的网页数据就可以放在/srv/www
/tmp
存放不同程序执行时产生的临时文件 (另见 /var/tmp,和这个目录相似). 通常在系统重启后删除
/usr
UNIX Software Resoure UNIX操作系统软件资源存放位置。
二级层级存储用户的只读数据; 包含(多)用户主要的公共文件以及应用程序(软件资源),这是linux系统中占用硬盘空间最大的目录。在这个目录下,可以找到那些不适合放在/bin/etc目录下的额外的工具
/usr/bin
非必要的命令二进制文件 (在单用户模式中不需要用到的);用于所有用户
/usr/include
标准的包含文件
/usr/lib
库文件,用于/usr/bin/ 和 /usr/sbin/中的二进制文件
/usr/lib<架构位数>
备用格式库(可选的)
/usr/local
三级层次 用于本地数据,具体到该主机上的。通常会有下一个子目录, 比如, bin/lib/share/.这里主要存放那些手动安装的软件,即不是通过“新立得apt-get安装的软件。它和/usr目录具有相类似的目录结构。让软件包管理器来管理/usr目录,而把自定义的脚本(scripts)放到/usr/local目录下面、。
/usr/local/sbin
非必要系统的二进制文件,比如用于不同网络服务的守护进程
/usr/share
架构无关的 (共享) 数据。系统共用的东西存放地,比如 /usr/share/fonts 是字体目录,/usr/share/doc/usr/share/man帮助文件。
/usr/src
源代码,比如内核源文件以及与它相关的头文件
/usr/X11R6
X Window系统,版本号:11,发行版本:6
/var
各式各样的(Variable)文件,vary的缩写。一些随着系统常规操作而持续改变的文件就放在这里,比如日志文件,脱机文件,还有临时的电子邮件文件
/var/cache
应用程序缓存数据. 这些数据是由耗时的I/O(输入/输出)的或者是运算本地生成的结果。这些应用程序是可以重新生成或者恢复数据的。当没有数据丢失的时候,可以删除缓存文件
/var/ www
存放Apache服务器站点存放目录
/var/lib
存放库文件。这些信息随着程序的运行而不停地改变,比如,数据库,软件包系统的元数据等等
/var/lock
锁文件。这些文件用于跟踪正在使用的资源
/var/log
存放系统日志的目录,包含各种日志。
/var/mail
内含用户邮箱的相关文件
/var/opt
来自附加包的各种数据都会存储在 /var/opt/.
/var/run
存放当前系统上次启动以来的相关信息,例如当前登入的用户以及当前运行的daemons(守护进程).
/var/spool
该spool主要用于存放将要被处理的任务,比如打印队列以及邮件外发队列
/var/mail
过时的位置,用于放置用户邮箱文件
/var/tmp
存放重启后保留的临时文件
/sys
用于输出当前系统上硬件设备相关信息的虚拟文件系统,内核中硬件设备相关的信息映射
/selinux
selinux相关的安全策略等配置文件目录的存储位置,SElinux可以让linux更加安全。
/cdrom
这个目录在刚刚安装系统的时候是空的。可以挂载光驱文件系统到此目录下。例如:mount  /dev/cdrom /cdrom
/lost+found
在ext2ext3文件系统中,当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方式来修复,或移到文件到原来的位置上。

现实中的文件系统
对于大多数用户和常规系统管理任务而言,“文件和目录是一个有序的类树结构”是可以接受的。然而,对于电脑而言,它是不会理解什么是树,或者什么是树结构。
每个分区都有它自己的文件系统。想象一下,如果把那些文件系统想成一个整体,我们可以构思一个关于整个系统的树结构,不过这并没有这么简单。在文件系统中,一个文件代表着一个inode(索引节点),这是一种包含着构建文件的实际数据信息的序列号:这些数据表示文件是属于谁的,还有它在硬盘中的位置。
每个分区都有一套属于他们自己的inode,在一个系统的不同分区中,可以存在有相同inode的文件。
每个inode都表示着一种在硬盘上的数据结构,保存着文件的属性,包括文件数据的物理地址。当硬盘被格式化并用来存储数据时(通常发生在初始系统安装过程,或者是在一个已经存在的系统中添加额外的硬盘),每个分区都会创建固定数量的inode。这个值表示这个分区能够同时存储各类文件的最大数量。我们通常用一个inode去映射2-8k的数据块。当一个新的文件生成后,它就会获得一个空闲的inode。在这个inode里面存储着以下信息:
文件属主和组属主
文件类型(常规文件,目录文件......)
文件权限
创建、最近一次读文件和修改文件的时间
inode里该信息被修改的时间
文件的链接数(详见下一章)
文件大小
文件数据的实际地址


唯一不在inode的信息是文件名和目录。它们存储在特殊的目录文件。通过比较文件名和inode的数目,系统能够构造出一个便于用户理解的树结构。用户可以通过ls -i查看inode的数目。在硬盘上,inodes有他们独立的空间。
在Linux中包含不同功能的文件,有库文件、配置文件、可运行的二进制程序以及帮助文档等,只有明白了文件的用途,才能更好的查找或使用他们,他们都包含哪些文件呢?
二进制程序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
库文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
配置文件:/etc, /etc/DIRECTORY, /usr/local/etc
帮助文档:/usr/share/man, /usr/share/doc,  /usr/local/share/man, /usr/local/share/doc


上述的分类针对CentOS 7之前的系统;在CentOS 7中文件目录有了一些变化;分别是:
/bin---->/usr/bin
/sbin--->/user/sbin
/lib----->/usr/lib
/lib64--->/usr/lib64



原创粉丝点击