扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Linux使用树状的目录结构组织文件,简单来说就是在一个目录中放置子目录和文件,子目录中可以继续放置子目录和文件,以此类推,形似一棵树的分支。Linux的这种文件结构的起始点为“根目录”,就是“/”,是一切文件的起点。FHS(文件系统层次标准)定义了在根目录下的主要目录和每个目录内应该放置的文件。请注意在Linux中,“文件”是一种很宽泛的概念,一切皆文件。所以不管是目录还是设备,都是一种文件,或者说,只要是在系统中可以看到的都是文件。
一、文件类型
用户可以通过“ls -al 目录”显示文件类型。通过ls -al 显示出来每行每个文件或者目录信息的第一字符,来判断文件类型。
第一字符为[d],代表是一个目录。
第一字符为[-],代表是一个文件。
名称为 . ,代表当前目录;为..,代表当前目录的上一级目录(这和Windows相同)
文件名以.开始,如下图中的.bash_logout代表是一个隐藏文件或目录。
相比Windows下的文件,Linux的文件类型,除了常规文件(纯文本文件、二进制文件、数据文件等)外,还有以下文件:
输入命令 ls -al /dev (显示/dev下的所有文件的详细信息)
区块设备文件:第一个属性字符为[b],一般是代表一些存储设备。如sda代表第一块SATA或者SCSI硬盘,hda代表第一块IDE硬盘。
字符设备文件:第一个属性字符为[c],一般是一些串行端口的接口设备,如鼠标键盘。
链接文件:第一个属性字符为[l]的文件,它又区分为软链接和硬链接。
数据接口文件:第一属性字符为[s],这种类型的文件通常被用在网络上的交换数据。
(输入命令 ls -al /run | grep ^s
数据输送文件(FIFO,pipe):一种特殊的文件类型,主要用来解决多个程序同时读写一个文件所造成的错误问题,FIFO是先进先出(first in first out)的缩写,即管道。
2、文件扩展名
基本上,Linux没有所谓扩展名的概念,这一点和Windows有很大差别。在Windows下,.com .exe .bat 通常代表可执行文件,还有.dll等类型文件。但在Linux下,一个文件是否能被执行,它主要由两方面决定:一是它的内容是否是可执行代码,二是用户否具有可执行权限。跟它是否有扩展名、扩展名为什么无关。
当然Linux也通过一些特定的扩展名来区分一些特殊类型的文件,
*.sh:代表脚本或批处理文件
*.Z,*.tar *.tar.gz *.zip *.tga:代表经过打包的压缩文件
*.html *.php:网页文件。
3、文件名的限制
单一文件或目录大容许文件名为255个字符,英文大255个字符长度,汉字大约128个之间。
由于有些特殊字符在命令模式有特殊意义,所以* ? < . ; & ! { } | \ ' '" ` ( ) { } 等字符不能在文件名中存在。
4、目录配置依据(FHS)
由于Linux开源,为了保证规范,Linux逐渐形成了的软件开发商、操作系统制作者、以及想要维护系统的使者,都能够遵循的目标配置依据FHS(文件系统层次化标准).
事实上,FHS针对目录树架构仅定义出三层目录下面应该放置什么数据而已,分别是:
/ (root, 根目录):与开机系统有关;
根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录也与开机/还原/系统修复等动作有关。 由于系统开机时需要特定的开机软件、核心文件、开机所需程序、函数库等等文件数据,若系统出现错误时,根目录也必须要包含有能够修复文件系统的程序才行。 因为根目录是这么的重要,所以在FHS的要求方面,他希望根目录不要放在非常大的分区内, 因为越大的分区你会放入越多的数据,如此一来根目录所在分区就可能会有较多发生错误的机会。因此FHS标准建议:根目录(/)所在分区应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。 如此不但性能较佳,根目录所在的文件系统也较不容易发生问题。
/usr (unix software resource):与软件安装/执行有关;
/var (variable):与系统运行过程有关。
根目录(/)FHS要求必须要存在的目录
根目录(/)FHS建议可以存在的目录
/home:是系统默认的使用者主文件夹(home directory)。在用户新增一个一般使用者帐号时, 默认的使用者主文件夹都会规范到这里来。比较重要的是,主文件夹有两种代号喔:~:代表目前这个使用者的主文件夹 ~fromheart :则代表fromheart 的主文件夹。
/lib
/root:系统管理员(root)的主文件夹。之所以放在这里,是因为如果进入单用户维护模式而仅挂载根目录时,该目录就能够拥有root的主文件夹,所以用户会希望root的主文件夹与根目录放置在同一个分区中。
/usr/下FHS要求必须要存在的目录
/usr/bin/:所有一般用户能够使用的指令都放在这里!目前新的 CentOS 7 已经将全部的使用者指令放置于此,而使用链接文件的方式将 /bin 链接至此!也就是说, /usr/bin 与 /bin 是一模一样了!另外,FHS 要求在此目录下不应该有子目录。
/usr/lib/: 基本上,与 /lib 功能相同,所以 /lib 就是链接到此目录中的。
/usr/local/:系统管理员在本机自行安装自己下载的软件(非distribution默认提供者),建议安装到此目录, 这样会比较便于管理。
/usr/sbin/:非系统正常运行所需要的系统指令。最常见的就是某些网络服务器软件的服务指令(daemon),不过基本功能与 /sbin 也差不多, 因此目前 /sbin 就是链接到此目录中的。
/usr/share/:主要放置只读架构的数据文件,当然也包括共享文件。在这个目录下放置的数据几乎是不分硬件架构均可读取的数据, 因为几乎都是文字文件,在此目录下常见的还有这些次目录:/usr/share/man:线上说明文档;/usr/share/doc:软件杂项的文件说明 /usr/share/zoneinfo:与时区有关的时区文件
/usr下FHS建议可以存在的目录
/usr/games/: 与游戏比较相关的数据放置处。
/usr/include/:c/c++等程序语言的文件。
/usr/libexec/:某些不被一般使用者惯用的可执行文件或脚本(script)等等,都会放置在此目录中。例如大部分的 X 窗口下面的操作指令, 很多都是放在此目录下的。
/usr/lib
/usr/src/:一般源代码建议放置到这里。至于核心源代码则建议放置到/usr/src/linux/目录下。
/var/下FHS要求必须要存在的目录
/var/cache/: 应用程序本身运行过程中会产生的一些暂存盘;
/var/lib/:程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。 举例来说,MySQL的数据库放置到/var/lib/mysql/而rpm的数据库则放到/var/lib/rpm去!
/var/lock/:某些设备或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该设备时, 就可能产生一些错误的状况,因此就得要将该设备上锁(lock),以确保该设备只会给单一软件所使用。
/var/log/:日志文件目录,里面比较重要的文件如/var/log/messages, /var/log/wtmp(记录登陆者的信息)等。
/var/mail/:放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中! 通常这两个目录是互为链接文件。
/var/run/:某些程序或者是服务启动后,会将他们的PID放置在这个目录下。与 /run 相同,这个目录链接到 /run去了!
/var/spool/:这个目录通常放置一些队列数据。
其他重要目录
/lost+found:这个目录是使用标准的ext2/ext3/ext4文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时, 将一些遗失的片段放置到这个目录下。不过如果使用的是 xfs 文件系统的话,就不会存在这个目录了!
/proc:这个目录本身是一个“虚拟文件系统(virtual filesystem)”。他放置的数据都是在内存当中, 例如系统核心、行程信息(process)、周边设备的状态及网络状态等等。因为这个目录下的数据都是在内存当中, 所以本身不占任何硬盘空间啊!比较重要的文件例如:/proc/cpuinfo, /proc/dma,/proc/interrupts, /proc/ioports, /proc/net/* 等等。
/sys:这个目录其实跟/proc非常类似,也是一个虚拟的文件系统,主要也是记录核心与系统硬件信息较相关的信息。 包括目前已载入的核心模块与核心侦测到的硬件设备信息等等。这个目录同样不占硬盘容量。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流