Linux目录标准:FHS
我们使用的Linux服务器,虽然有很多不同的发行版,但他们的文件目录都有一些相似性。Linux目录配置的依据是FHS(https://www.pathname.com/fhs/)标准。FHS建议根目录最好单独分区,尤其与安装的应用程序分开,这样根目录所在的文件系统不容易发生问题。
FHS标准里主要定义了 1:根目录/ 2:/usr 3:/var 三个目录应该放置的内容。下面分别列举三个目录下比较常用的目录及存放的文件内容,详情还请参照FHS官方文档:
一:根目录 / 下必须存在的目录及作用
二:/usr目录下必须存在的目录
三:/var目录:主要存放一些经常变动的文件,比如MySQL、Redis数据库文件
文件目录查看:ls [-alSt]
切换目录:cd 目录
显示当前目录:pwd
创建目录:mkdir 目录
删除目录:rmdir 目录
复制:cp [-rip] 源文件 目标文件
删除:rm [-fr] 目录/文件
移动:mv [-fi] 源文件 目标文件
查看文件内容:
显示全部文件内容:cat [-n] 文件
n:打印行号
查看前n行文件:head [-n 数值] 文件
-n 数值:前n行,默认是10行
查看倒数前n行:tail [-n 数值] 文件
-n 数值:前n行,默认是10行
创建文件:touch [-m] 文件
m:修改文件的mtime(上次被修改的时间)
文件打包tar命令:
打包并压缩:tar [-z|-j|-J] [cv] [-f 打包完的文件名] 需要压缩的目录/文件
解压缩:tar [-z|-j|-J] [xv] [-f 需要解压的文件] -C 目录
查看:tar [-z|-j|-J] [tv] [-f 需要查看的压缩文件]
z,j,J代表三种压缩方式,分别为:z:gzip j:bzip2 J:xz
bzip2的压缩比通常优于gzip,xz的压缩比又优于bzip2,但是xz的压缩效率很低,很小的文件要比较久的时间才能生成压缩包
这么多参数有时候不好记忆,其实用的最多的就是:
查找执行文件:which [-a] command
a: 将所有由PATH目录中找到的命令都列出,默认只列出第一个
查找命令:whereis [-l] 文件或目录名
l:列出查找了多少目录
查找命令:local [-ir] 文件/目录
i:忽略大小写差异
r:文件/目录可以写正则表达式
查找命令:find [目录] [option] [action]
eg:
说明:find命令是从磁盘上直接查找文件会比较耗时。whereis只是查找系统中的特定目录,local从系统的数据库中查找所以这两个命令会比较快。但是系统的文件存储信息数据库并不是实时更新的,所以local查询的文件结果可能没那么准确。
磁盘在使用之前需要进行“挂载”,挂载就是把磁盘和目录建立联系。
挂载的具体命令是:mount
依照/etc/fstab的配置挂载所有磁盘:mount -a
查看当前的挂载信息:mount
挂载某个目录:
mount --bind 目录1 目录2:把目录1挂载到目录2下,挂载的是目录而不是文件系统,此时目录1和目录2链接到了同一个inode。
取消挂载:umount [-fnl] 设备文件名/目录
df [-ahi] [目录/文件]
du [-sham] 文件/目录
eg:du -sm /*:仅列出根目录下孩子目录的容量,不统计孙子目录
补充说明下/proc目录:/proc是进程文件系统,proc目录下的内容都是存储在内存中的,不占用磁盘(https://zh.wikipedia.org/wiki/Procfs)
我们执行free命令,会看到有一栏是Swap,swap是一个特殊的分区,称为内存交换分区,当系统内存不足的时候,可以当内存使用。其实对于绝大多数互联网的服务端开发场景,机器的内存配置往往很充足,再就是可以以来cgroups去分配合适的内存,swap可能没那么有必要了。
如果有的业务场景,不追求速率,只要进程不挂慢慢跑就可以,这种的话就可以设置swap。
如果排查swap开启之后,是否影响性能,可以使用vmstat 2命令,查看 si so 来观察对性能的影响,这两个值越大,对性能影响越严重。
总结:其实关于“Linux的目录和磁盘”需要学习的地方还有很多,这里仅仅列出来了一些常用的知识点,需要系统的了解的话,可以通过官网、源码、技术书籍等途径去学习。