本文将会对Linux文件与目录结构进行介绍,示例为红帽centos7我们可以先来看一下他的默认文件目录结构
[root@hadoop102 /]# cd /
[root@hadoop102 /]# ll
total 88
lrwxrwxrwx. 1 root root 7 May 18 2022 bin -> usr/bin
dr-xr-xr-x. 6 root root 4096 May 18 2022 boot
drwxr-xr-x. 19 root root 3180 Mar 5 08:02 dev
drwxr-xr-x. 81 root root 4096 Mar 5 08:02 etc
drwxr-xr-x. 3 root root 4096 May 18 2022 home
lrwxrwxrwx. 1 root root 7 May 18 2022 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 May 18 2022 lib64 -> usr/lib64
drwx------. 2 root root 16384 May 18 2022 lost+found
drwxr-xr-x. 2 root root 4096 Apr 11 2018 media
drwxr-xr-x. 2 root root 4096 Apr 11 2018 mnt
drwxr-xr-x. 4 root root 4096 May 18 2022 opt
dr-xr-xr-x. 93 root root 0 Mar 5 08:02 proc
dr-xr-x---. 3 root root 4096 Mar 3 01:36 root
drwxr-xr-x. 23 root root 580 Mar 5 08:02 run
lrwxrwxrwx. 1 root root 8 May 18 2022 sbin -> usr/sbin
drwxr-xr-x. 2 root root 4096 Apr 11 2018 srv
dr-xr-xr-x. 13 root root 0 Mar 5 08:02 sys
drwxr-xr-x. 2 root root 4096 Feb 21 20:59 text
drwxrwxrwt. 10 root root 24576 Mar 5 08:02 tmp
drwxr-xr-x. 13 root root 4096 May 18 2022 usr
drwxr-xr-x. 19 root root 4096 May 18 2022 var
[root@hadoop102 /]#
上图我们可以看出Linux的系统文件目录还是很庞杂的,图示cetos7系统我们可以看到默认的系统文件夹很多,接下来我们把他们来拆分开来看
- bin与sbin
用于存放用户的可执行文件,脚本,命令等
-rwxr-xr-x. 1 root root 801 Oct 2 2020 yum -rwxr-xr-x. 1 root root 1941 Apr 11 2018 zcat -rwxr-xr-x. 1 root root 1760 Apr 11 2018 zcmp -rwxr-xr-x. 1 root root 5768 Apr 11 2018 zdiff -rwxr-xr-x. 1 root root 123 Apr 11 2018 zegrep -rwxr-xr-x. 1 root root 123 Apr 11 2018 zfgrep -rwxr-xr-x. 1 root root 2144 Apr 11 2018 zforce -rwxr-xr-x. 1 root root 6132 Apr 11 2018 zgrep -rwxr-xr-x. 1 root root 2041 Apr 11 2018 zless -rwxr-xr-x. 1 root root 136176 Sep 27 2019 zlib_decompress -rwxr-xr-x. 1 root root 2859 Apr 11 2018 zmore -rwxr-xr-x. 1 root root 5343 Apr 11 2018 znew lrwxrwxrwx. 1 root root 6 May 18 2022 zsoelim -> soelim
如上图所示,从存放于/bin目录下的文件的详细信息显示可以看到,其文件普遍都具有"x"的属性,而"x"的意义就是为可执行的,下文将提到。而在工作中我们常常将一些编写的脚本放到该/bin目录下面以便于全局调用。
而sbin则直译s为super,就是超级管理员的命令,本质上和/bin一样,但是多了许多只有root用户才能使用的命令,如"poweroff"关机这样重要的命令就在其中。这种一般情况只能是超级管理员才能够有权限使用的
-
boot
boot里面装的我们的系统必备的引导文件(开机与核心文档),简单来说就是系统开机时需要加载他,在日常的开发或维护中我们基本上不会进去改动这些文件,所有没必要做过度研究
-
dev
此文件目录下存档着我们的所有外接设备文件,Linux中我们所有的装置和所有接口设备都是以文件的方式存在系统中的,这也印证了"Linux中一切皆文件"的说法
-
etc
此文件目录下存放了我们配置文件,在这个文件夹中的文件普通用户是无法修改的。
例如我们常用的默认网卡配置文件就存放在/etc/sysconfig/network-scripts/ifcfg-ens33 目录中。如图中的ifcfg-ens33文件就记载了一张叫做"ens33"的网卡的网关,IP地址和DNS等网络配置信息[root@hadoop102 bin]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=d6fd328e-6101-4be1-9fe9-285ca79f02d8 DEVICE=ens33 ONBOOT=yes IPADDR=192.168.188.0 GATEWAY=192.168.1.2 DNS1=192.168.1.2
-
home
home直译就为"家"的意思,我们也称之为"家目录"。Linux是一个多用户操作系统,而这个目录存放的是我们普通用户文件的目录。在我们在执行命令时可以用"~"来快速定位到该目录下,而超级管理员的用户家目录为"/",这也取决于我们通常将root和"/"放在同一磁盘分区槽以便于操作
-
lib与lib64
lib和lib64这两个目录我们放在一起,他们的区别我们直接从字面意思理解。ib64就是64位,lib那就是32位。他们存放很多二进制函式库,至于什么叫函式库,而他们有什么作用,简单来说就是一些命令的"依赖",没有他们系统命令无法顺利完成
-
media
media直译就为"流媒体",像我们日常使用的音乐,录音或者视频之类的文件可以放在里面,我们日常开发维护一般可能使用他作为挂载目录。而默认情况下这里面也没有什么东西的。[root@hadoop102 media]# ll total 0
-
mnt
这个目录是为我们挂载设备使用的,如我们日常使用的U盘,硬盘和CD等设备接入系统就会挂入此目录。使用mount等命令可以对挂载设备进行操作
-
opt
opt是我们日常使用频率很多的目录,他的主要用途是安装我们的软件。这就类似于我们win10中的Program Files文件夹,如楼主就安装了几个开发环境的软件在里面方便统一管理[root@hadoop102 module]# ls /opt/module/ flume-1.9.0 hadoop-3.1.3 hive jdk1.8.0_212 mysql zookeeper-3.5.7
-
proc
proc是存放进程的目录,此处注意区分进程和线程的概念。这里Linux所有的进程也以虚拟文件的形式存储,除此之外我们也可以通过"ps"和"top"命令来查看有关进程的信息[root@hadoop102 proc]# pwd /proc [root@hadoop102 proc]# ls 1 19 245 354 473 768 bus fs locks scsi version 10 2 247 386 494 769 cgroups interrupts mdstat self vmallocinfo 1031 20 248 4 5 770 cmdline iomem meminfo slabinfo vmstat 11 21 250 41 520 797 consoles ioports misc softirqs zoneinfo 1129 22 254 43 527 798 cpuinfo irq modules stat 1138 23 255 437 529 8 crypto kallsyms mounts swaps 1142 232 256 44 530 9 devices kcore mpt sys 13 233 276 441 531 95 diskstats keys mtrr sysrq-trigger 14 234 277 445 535 990 dma key-users net sysvipc 15 235 30 448 543 996 driver kmsg pagetypeinfo timer_list 16 24 31 45 6 acpi execdomains kpagecount partitions timer_stats 17 243 32 47 60 asound fb kpageflags sched_debug tty 18 244 33 472 7 buddyinfo filesystems loadavg schedstat uptime
-
run
用于存放系统开机后所产生的各项信息,如我们的系统变量常量信息都存放在此处
-
var与tmp
var和tmp目录我们放在一起谈论,因为他们在本质上基本相同作用是存放一些临时文件。
不同点就是tmp关机重启时会被清理,而var不会被主动清理仅此而已。临时文件内容大都数情况都是一些日志之类的东西
-
srv
服务启动需要的数据支撑是"service"的缩写
-
root
超级管理员的家目录,类似于普通用户的home目录,我们通常将root和"/"放在同一磁盘分区槽以便于我们操作,所以我们也常常称"/"目录为超级管理员的家目录
-
sys
系统内核相关信息,记录了系统内核与重要硬件信息
-
在开发看来,Linux的系统目录结构是一种非线性数据结构,"/"目录是所有的系统目录的前驱节点Root(数据结构中也有称节点父子关系的),所有的系统目录下面还有无数个子节点Branch,如果是目录,目录下面还可能有目录,像"俄罗斯套娃"一样。至于为什么使用这种结构呢,因为他的查找删除插入时间复杂度可以为O(lgn)这是比较可观的效率!
-
接下来我们用一张简图来总结一下Linux的树型目录结构吧