Linux学习笔记(二):根文件系统

可执行文件格式

Windows与Linux使用了不同的可执行文件格式。Windows使用Portable Executable(PE), 而Linux则使用Executable and Linkable Format(ELF)。

根文件系统

虽然Linux有着众多发行版,但使用了同样的标准File Hierarchy System(FHS),遵循着这个标准的规定,Linux有着相同的根文件系统目录,而不同的目录起着各自的作用。

/boot 系统文件

/boot目录下储存了系统启动相关的文件,包括内核,initrd以及grub(bootloader)。

# ls /boot
config-2.6.18-194.el5xen  grub  initrd-2.6.18-194.el5xen.img  message  symvers-2.6.18-194.el5xen.gz  System.map-2.6.18-194.el5xen  vmlinuz-2.6.18-194.el5xen  xen.gz-2.6.18-194.el5  xen-syms-2.6.18-194.el5

/dev 设备文件

Linux的核心思想为“一切接文件”,因此,系统的硬件设备在/dev下都有对应的文件。而设备又分为块设备与字符设备。
块设备:随机访问的设备,按数据块访问,比如磁盘;
字符设备:线性访问的设备,按字符为单位访问,比如键盘,鼠标,显示器;

# ls /dev -l
crw------- 1 root root 5, 1 Mar 16 04:17 console
lrwxrwxrwx 1 root root 11 Mar 16 04:05 core -> /proc/kcore
drwxr-xr-x 3 root root 60 Mar 16 04:05 disk
crw------- 1 root root 10, 63 Mar 16 04:05 evtchn
lrwxrwxrwx 1 root root 3 Mar 16 04:05 fb -> fb0
crw------- 1 root root 29, 0 Mar 16 04:05 fb0
lrwxrwxrwx 1 root root 13 Mar 16 04:05 fd -> /proc/self/fd
crw-rw-rw- 1 root root 1, 7 Mar 16 04:05 full
prw------- 1 root root 0 Mar 16 04:17 initctl
drwxr-xr-x 2 root root 120 Mar 16 04:05 input
crw------- 1 root root 1, 11 Mar 16 04:05 kmsg
srw-rw-rw- 1 root root 0 Mar 16 04:05 log
...

可以看到列出文件后,原来文件大小的位置显示了主设备号(Major)和次设备号(Minor)。

/etc 配置文件

字面意思,大部分为纯文本格式。

/home 用户的家目录

Linux下个各个用户都在/home下有自己的家目录,一般默认为/home/USERNAME。值得一提的是root用户,作为管理员,root用户的家目录在/root下。

/lib 库文件

Linux下个各种库文件都是储存在这。
静态库一般以.a为后缀名,而动态库则是.so(Shared Object),对应Windows下的.dll

/media与/mnt 挂载点目录

/media一般用于挂载移动设备,/mnt一般用于挂载临时的文件系统

/misc 杂项

用于放置一些不便归类的文件。

/opt 可选目录

早期用于安装第三方程序,比如早期的Oracle都安装在这个目录下,不过现在约定俗成放在/usr/local/下,因此现在一般没什么用。

/proc 内核映射文件

/proc其实是伪文件系统,目录下其实并没有文件,而是操作系统的内核映射文件,一般是内核的可调参数或者统计数据。

/sys 跟硬件设备的相关的属性映射文件

同样是伪文件系统,通常用于实现硬件设备管理

/tmp 临时文件

/var 可变的文件

/bin与/sbin 二进制可执行文件

这两个目录都用来储存可执行文件,不同的是/bin下一般是用户命令,而/sbin是管理命令

# ls /bin
arch                  dnsdomainname  kbd_mode         pgawk      sync
awk                   doexec         keyctl           ping       tar
basename              domainname     kill             ping6      taskset
bash                  dumpkeys       link             ps         touch
cat                   echo           ln               pwd        tracepath
chgrp                 ed             loadkeys         raw        
...

比如/bin下,就可以看到很多熟悉的命令。

/usr 全局共享只读文件

usr是universal shared read-only的缩写,用来存放全局共享只读文件,/usr也下有/bin,/sbin,/lib等目录,与根目录下的不同,/usr下的对应目录并非面向系统,而是其他所有登陆用户。
同时/usr/local则用来存放第三方软件,而其目录下的/usr/local/bin等目录,自然是面向第三方程序了。

话说很长一段时间内,我都以为/usr的名字由来是用户user的缩写,而并不明白其中意义,了解这些知识,对理解Linux也会有些帮助吧。