可执行文件格式
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也会有些帮助吧。