文件目录结构
闲话篇:
linux我也是最近才开始学,写随笔是为分享学习经验的同时也留着供自己以后来参考。因为linux一切皆文件的基本哲学思想。所以我决定从文件目录开始写。
正文:
首先linux文件系统格式为ext3/4(ext是extended的缩写,意为扩展,全称linux扩展文件系统),这个简单提下。
然后linux文件系统是树状结构,所有的文件皆在一个叫 / 的目录下,所以这个 / 也叫做根目录。
而根目录(/)下的一级文件目录大多也是规定好的,由下图这几个关键目录(骨干)组成,这些目录(文件夹)下各自存放了用于完成不同工作的文件,下图截取自fhs文档,感兴趣的可以访问这个网站查看并下载最新的fhs的pdf文档http://www.pathname.com/fhs/ ,这个文档是专门讲linux文件系统的,最权威
下面就是我的翻译工作:
/bin :存放基本的二进制指令文件,一般我们在Linux命令行里输的命令都是来自于/bin目录下
/boot :存放系统的开机引导文件,内核会根据/boot分区下的文件配置一步步加载磁盘内的文件开机,相当于Windows的引导分区,占用空间不大,一般几百M
/dev :存放访问硬件设备的文件,用来访问硬盘,内存等各个硬件
/etc :存放系统配置文件,开机登陆界面,命令行字符格式,用户管理都在这个目录下可以改,相当于Windows下的注册表
/lib :存放静态库文件,应该是给开发程序调用的,相当于Windows下的system32目录
/media :作为可移动存储设备的挂载点,用来访问u盘,cd光盘的内容
/mnt :作为暂时访问其他文件系统的挂载点,应该访问windows分区或其他文件格式的设备用的,fhs文档里对他就四行讲解,所以我觉得不重要(其实是我没怎么理解)
/opt :存放附加程序安装包的,也就是后来自己想下的软件安装包可以放这里,我就理解了这些,要求挺多的,详见fhs文档3.13处,感觉不重要
/sbin :存放给系统还有root用户调用的基本二进制文件,许多时候普通用户执行命令提示权限不足的命令大多放在这个文件目录下,还有就是在/usr/sbin目录下
/srv :存放系统服务产生的数据,但我在centos7系统上查看了它里面的内容,结果连个隐藏文件都没有,结合fhs文档所言,这个文档具体做什么没明确规定(可能是我翻译问题,但感觉这个不重要)
/tmp :存放临时数据的文件,这个目录可以,一般我想做什么实验都在这个目录,做完实验就把文件清了,所以是垃圾文件集中地,一般存储空间不够就问他要点比较安全
/usr :存放共用的可读文件(不可写,也就是里面文件内容大多不能改的),linux文件系统第二重要的目录(第一重要的目录被我扔了不好意思),它里面的/bin子目录下存放了大多数用户使用的命令,/include子目录下放了c语言的头文件,/lib子目录下放了库文件,还有/local,/sbin,/share这些子目录都相当于工具包,可以理解为Windows下program文件夹,里面有各类软件还有软件用到的库文件,头文件,总之对这个目录能去用里面的工具但不能去乱改里面的内容
/var :存放变量数据,跟/tmp目录差不多,也是临时数据,但它里面放的不是垃圾文件,它更倾向于记录,它里面记录了所有程序的日志还有系统日志等,当然这些日志文件也是可以删的,当然要空间首选还是/tmp目录
与第三方系统比较:
许多基于linux底层的第三方系统都继承了一个好习惯,如下图,左图是我的虚拟机装的centos7系统下执行tree命令看到的根目录结构,可以跟右图对比:一个不漏
甚至还多了/home目录,这个目录挺重要,相当于Windows下的user目录,所有用户的文件都在这个目录下,简单提下
如果你也有装有centos系统的主机可以执行以下命令查看
1. 安装tree软件,一般默认可能没安装,可以先在命令行里输个tree看看找不找得到这个命令,没有就执行下面这条命令安装tree,如果提示权限不足的话命令前面加个sudo
yum -y install tree
2.tree的用法,下面的命令是查看根目录 / 下的一级目录,这里-L 后面跟的1就是查看一级目录,2就是二级目录
tree -L 1 /
3.查看tree的所有用法的帮助,下面两种命令都可以查看这个命令的细致用法
man tree
tree --help
玩法很多,自行体验咯
奇怪的地方:
既然都看到这里了,我就再写点linux文件系统里神奇的地方吧,就在我们提过的/dev目录下,有三个特殊的子目录,如下图所示,还有神奇的英语介绍
下面又是我的奇怪翻译:
/dev/null :所有写到这个设备(目录)下的数据都是被删除的,从这里读数据只会返回EOF状态,其实就是回收站,你可以把不要的垃圾文件mv(move,移动命令)到这里。
/dev/zero :这个设备是用来输出0的,任何写到这个设备的数据都会被扔掉,只能从这个设备里读取数值0,但这有什么用呢,如果你要测试硬盘性能,可以从这个设备里读数据0写到文件里看看用了多少时间。如下面的命令就是从zero设备里读取0写到我们要测试的boot分区里的1gb文件,bs设置块大小1m,count也就是写入块的个数为1024,那么总共就是写入1个g的内容然后会返回测试数据,多大的数据用了多久完成,速度是xxxM/s
dd if=/dev/zero of=/boot/1gb.file bs=1M count=1024
/dev/tty :这个设备相当于终端进程,一旦这个设备打开,所有读写操作都会像实际打开的终端一样在它上面实现(显示),也就是你打开tty,就能控制对应tty窗口的输入输出,终端(terminal)你可以理解成Windows下的桌面,现在windows10可以开多个桌面,而linux也有多个终端可以输入输出显示。
互动环节:
最后想请教各位,linux文件系统里第一重要的目录是哪个?还有那些我感觉不重要的目录是不是我遗忘了什么?写了随笔才发现原来自己还是挺多不清楚的。有问题还望大家及时指出,别让我坑害了像我一样的新人。