在Solaris系统中,文件系统的目录结构并非随意堆砌,而是有着清晰的设计哲学。理解了这些目录各自扮演的角色,你就能更好地驾驭这个系统,尤其是在排查问题或进行性能调优时。下面,我们就来逐一剖析几个核心模块。
/dev:设备文件的集散地
在Unix世界里,“一切皆文件”的理念在/dev目录下体现得淋漓尽致。这里存放着所有硬件和虚拟设备的访问入口,也就是设备文件。我们来快速捋一遍几个关键角色:
/dev/cua 用于UUCP和PPP这类古老的“拨出”设备,现在可能不常见了,但在历史项目中或许还能遇到。而 /dev/dsk 和 /dev/rdsk 则分别代表着块设备和原始(raw)磁盘设备。块设备有缓存,适合文件系统操作;原始设备则直接读写,常用于数据库或底层工具。如果你在做图形界面或视频处理,/dev/fbs 就是帧缓冲设备文件的地盘。/dev/fd 是文件描述符的入口,/dev/md 则是逻辑卷管理(比如Disk Suite)会用到的元磁盘设备。远程登录或终端窗口对应的是 /dev/pts 下的伪终端设备。备份、磁带操作离不开 /dev/rmt,而 /dev/sound 管理着音频和视频设备。至于串行设备,它们都归于 /dev/term 门下。
可以这样说,所有你需要与之交互的硬件,在/dev里都有一个对应的“袋里人”。
/etc:系统的“中枢神经”
如果说/dev是硬件接口,那么/etc就是系统的配置中心和神经中枢。它几乎掌管着系统启动、运行、服务等方方面面的配置信息。这里的子目录分工极其明确:
记账系统的配置藏在 /etc/acct 里;定时任务(cron)的配置则在 /etc/cron.d。/etc/default 存放着各种默认程序参数的初始值。网络服务的灵魂——配置文件,都集中在 /etc/inet。你想知道系统启动时服务如何启停?看 /etc/init.d 里的脚本就知道了。如果 /usr 文件系统还没挂载,系统就需要 /etc/lib 下的动态链接库来支撑。/etc/lp 管理打印子系统,/etc/mail 则掌管着邮件服务。NFS服务器相关日志配置放在 /etc/nfs。安装的可选软件包(第三方应用)配置在 /etc/opt。系统运行级别切换脚本放在 /etc/rc#.d。新用户创建时的默认环境,比如说shell初始化文件,都来自 /etc/skel。到了Solaris 10,引入了服务管理工具SMF,其数据库和日志文件存放在 /etc/svc;而Zone(容器)的初始化文件则放在 /etc/zones。
总而言之,/etc身上的担子不轻,它负责把系统的各项功能串联并配置好。
/usr:用户与程序的“大仓库”
/usr 是系统中体积最大、内容最丰富的目录之一,它就像一个巨大的仓库,存放着用户和系统管理员日常使用的程序、库和文档。
常用标准命令就在 /usr/bin 里。如果你是C语言开发者,编译器和相关库在 /usr/ccs。学习示例代码和数据在 /usr/demo。CDE桌面环境的软件则挂在 /usr/dt 下。C语言头文件全部位于 /usr/include。Ja va开发环境,包括程序和库,在 /usr/ja va。平台无关的内核模块(启动过程中不会用的那些)放在 /usr/kernel。/usr/lib 里存放着各种程序库和架构相关的数据库。/usr/opt 同样用于可选包的配置信息。系统管理命令,比如一些高级工具,放在 /usr/sbin。值得注意的是,/usr/spool 现在是一个指向 /var/spool 的符号链接,这是一种历史演变的结果。
可以说,/usr 提供了系统运行和开发所需的大部分“软件资源”。
/var:动态数据的“档案馆”
/var 目录专门用于存放那些会动态变化的数据,比如日志、缓存、数据库文件等。它的内容随着系统运行而不断变化。
/var/adm 是系统日志和记账数据的老家,比如syslog。如果系统不幸崩溃了,生成的转储文件(crash dump)会存放在 /var/crash 里,这是事后分析问题的宝贵资料。各种假脱机(spool)任务,像邮件、打印作业、软件包安装记录等,都汇聚在 /var/spool 下。SMF(服务管理工具)的控制文件和日志则在 /var/svc。最后,/var/tmp 是一个特殊的地方:系统重启后,钟临时文件并不会被清除,这与 /tmp 的行为不同,需要注意。
监控和清理 /var 目录下的文件,是系统管理员的常规工作之一。
/kernel:系统的“擎天柱”
/kernel 目录是Solaris操作系统的心脏,它包含了内核本身以及各种核心模块。/kernel/drv 是硬件驱动的配置文件和驱动模块的所在地。虽然很多驱动在启动时就会被加载,但理解它们存放在这里,对于解决硬件驱动问题很有帮助。
这个目录的结构相对简洁,但其重要性不言而喻——它直接关系到硬件是否能被系统正确识别和驱动。
