上次提过关于文件系统的话题,还真来了。
GoboLinux,重新定义了文件系统 hierarchy,引入了些新概念,比方不再需要 package manager,因为,这个文件系统就可以扮演 package manager 的角色;再就是每个程序有自己的目录,比方 /Programs/Xorg/7.1/,/Programs/KDE-Libs/3.5.3……听起来是不是 Windows 早就这么干了?
当然,不是所有目录都能这么处理,所以 /etc 这样的放到了 /usr/share/something/ 或者 /another 下。
网站上提供的例子:
ls 一下 /:
Programs
Users
System
Files
Mount
Depot
所有--所有--程序都会放到 /Programs 下,比如:
AfterStep E2FSProgs Htop NTP Subversion
ALSA-Driver Ed HTTPD OpenOffice Sudo
ALSA-Lib Eject Hydrogen OpenSSH Swfdec
ALSA-OSS Elinks IBM-Java2 OpenSSL Synaptics
ALSA-Utils Ethereal ID3Lib Pango SysFSUtils
Ardour Expat IEEE80211 Patch Sysklogd
Audacity File IMLib2 Perl TCL
Aumix Firefox InetUtils Pkgconfig TeTeX
Autoconf Flac Intltool PodXTPro Texinfo
Automake Flex IpodSlave Popt TIFF
Bash Fontconfig Iptables PPP TiMidity++
所有该程序的文件都在其程序的目录下,看看在 /Programs 下用 find Bash 命令的输出:
Bash
Bash/3.0
Bash/3.0/bin
Bash/3.0/bin/sh
Bash/3.0/bin/bash
Bash/3.0/bin/bashbug
Bash/3.0/info
Bash/3.0/info/bash.info
Bash/3.0/man
Bash/3.0/man/man1
Bash/3.0/man/man1/bash.1
维护同一程序的不同版本,常规方法,没什么特别:
/Programs] ls -l OpenOffice
total 8
drwxr-xr-x 9 root root 4096 2005-09-22 01:07 1.1.4
drwxr-xr-x 3 root root 4096 2005-09-23 04:36 2.0
lrwxrwxrwx 1 root root 5 2005-09-23 04:36 Current -> 2.0
/Programs] ls -l GTK+
total 12
drwxr-xr-x 10 root root 4096 2005-10-02 01:39 1.2.10
drwxr-xr-x 9 root root 4096 2005-08-21 05:48 2.6.7
lrwxrwxrwx 1 root root 6 2005-10-02 01:39 Current -> 2.6.7
drwxr-xr-x 4 root root 4096 2005-10-02 01:39 Settings
自然,最重要的问题是,这样的变化如何能适配现代发行版中的各程序以及习惯用法。答案由多部分组成,先是这里的一堆符号连接:
/System/Links/Libraries] ls -l | cut -b 49-
...
libgtk-1.2.so.0 -> /Programs/GTK+/1.2.10/lib/libgtk-1.2.so.0.9.1
libgtk-1.2.so.0.9.1 -> /Programs/GTK+/1.2.10/lib/libgtk-1.2.so.0.9.1
libgtk.a -> /Programs/GTK+/1.2.10/lib/libgtk.a
libgtk.la -> /Programs/GTK+/1.2.10/lib/libgtk.la
libgtk.so -> /Programs/GTK+/1.2.10/lib/libgtk-1.2.so.0.9.1
libgtk-x11-2.0.la -> /Programs/GTK+/2.6.7/lib/libgtk-x11-2.0.la
libgtk-x11-2.0.so -> /Programs/GTK+/2.6.7/lib/libgtk-x11-2.0.so.0.600.7
libgtk-x11-2.0.so.0 -> /Programs/GTK+/2.6.7/lib/libgtk-x11-2.0.so.0.600.7
libhfs.a -> /Programs/CDRTools/2.01/lib/libhfs.a
libhistory.a -> /Programs/Readline/5.0/lib/libhistory.a
libhistory.so -> /Programs/Readline/5.0/lib/libhistory.so.5.0
libhistory.so.5 -> /Programs/Readline/5.0/lib/libhistory.so.5.0
ld.so.conf 的内容有:
/System/Links/Libraries
$PATH 是
/System/Links/Executables
等等
老程序的兼容性也不会被破坏,因为还有这些:
~] ls -l /dev/null | cut -b 45-
/dev/null
~] ls -l /bin/sh | cut -b 45-
sh -> /Programs/Bash/3.0/bin/bash
~] ls -l /usr/include/stdio.h | cut -b 45-
stdio.h -> /Programs/Glibc/2.3.6/include/stdio.h
/bin 是到 /System/Links/Executables 的符号连接。当然也就有 /usr/bin,/usr/sbin 等等。当然,问题是,这有可能让 GoboLinux 的文件系统看上去更复杂,^_^……
为了部分解决这个问题,GoboLinux 的开发者用了 GoboHide 这个 kernel extension,比方最开始 ls / 的输出就看不到 /bin 之类的目录。这纯粹是为了美学目的,也是可选的,用标准 kernel 也是毫无问题的。
想试试?Live CD 伺候。
从 GoboLinux 推测--当然只是我自己的推测--到底现在 FS 的结构好不好用,至少各个圈子的用户心里还是有个定量判断的,改变不如意的东西,世界才能变化,变化,变化。
[tags]gobolinux, linux, filesystem[/tags]