なんとBashが起動していた!

LiveCDの端末ウィンドウを開いてまず驚かされるのが、シェルがBashになっていることです。さらに、各種基本コマンドの多くが、GNU版に置き換わっており、GNU主体のコマンドライン環境となっています。具体的には、ls、cp、rmなどの基本コマンドを含むGNU coreutils(core utilities)ほか、GNU tarやGNU grepなど、多くのGNUコマンドがインストールされています。マニュアルについても同様で、たとえば「man ls」を実行すると、GNU版のlsコマンドのマニュアルが表示されます。

従来のSolaris版のコマンドも共存してインストールされており、GNU版とSolaris版とは、ディレクトリ分けとPATH設定により、うまい具合に調整されています。具体的には、bash、md5sum、seqなどのように、Solaris版に同名のコマンドがないものについては直接/usr/binにインストールされ、ls、date、tarなどのように同名コマンドが存在する場合は、GNU版は/usr/gnu/binにインストールされています。ただし、gtarのように、コマンド名の頭にgを付けて使用することがあるコマンドについては、/usr/binにはコマンド名gtarでインストールされ、/usr/gnu/binにはコマンド名tarのシンボリックリンクが配置されています。結局、コマンド名gtarでもtarでも、GNU tarが実行されます。

PATHは、実行例1のように/usr/gnu/binが先頭になるように設定されており、これによってGNU版のコマンドが優先して実行されます。PATHから/usr/gnu/binを外すと、従来のSolaris版のコマンド環境になります。なお、従来/usr/ccs/binに配置されていたas、ld、sizeなどのコマンド群は/usr/bin以下に移動され、/usr/ccs/binにはシンボリックリンクが残った状態となっているため、/usr/ccs/binにPATHを通す必要はありません。

ところで、シェルはコマンド名shで起動した場合でも、/usr/gnu/bin/shのシンボリックリンク経由で/usr/bin/bashが起動します。一方、フルパスの/bin/shで起動した場合は、/sbin/shへのシンボリックリンクを経由して、/usr/bin/i86/ksh93が起動するようになっています。

そのほか、LiveCDのコマンドライン上で各種コマンドを実行してみた様子を実行例1に示します。ファイルシステムには、lofiによるイメージファイルのループバックマウントが利用され、約700MBのCDにもかかわらず、2GB程度の容量が実現されていることがわかります。

実行例1 LiveCD上のコマンドライン環境

jack@opensolaris:~$ uname -a   ← システム情報を表示
SunOS opensolaris 5.11 snv_86 i86pc i386 i86pc Solaris
jack@opensolaris:~$ echo $LANG ← 環境変数LANGの値を表示
ja_JP.UTF-8
jack@opensolaris:~$ df -a      ← ファイルシステムの状況を表示
Filesystem           1K-blocks      Used Available Use% Mounted on
/devices/ramdisk:a      170535    163756      6779  97% /
/devices                     0         0         0   -  /devices
/dev                         0         0         0   -  /dev
ctfs                         0         0         0   -  /system/contract
proc                         0         0         0   -  /proc
mnttab                       0         0         0   -  /etc/mnttab
swap                    669668       748    668920   1% /etc/svc/volatile
objfs                        0         0         0   -  /system/object
sharefs                      0         0         0   -  /etc/dfs/sharetab
/devices/pci@0,0/pci-ide@1f,1/ide@1/sd@0,0:a
                        702234    702234         0 100% /.cdrom
/dev/lofi/1            1917028   1917028         0 100% /usr
/dev/lofi/2             142584    142584         0 100% /mnt/misc
/usr/lib/libc/libc_hwcap1.so.1
                       1917028   1917028         0 100% /lib/libc.so.1
/mnt/misc/opt           142584    142584         0 100% /opt
fd                           0         0         0   -  /dev/fd
swap                    668932        12    668920   1% /tmp
swap                    668952        32    668920   1% /var/run
swap                    668920         0    668920   0% /root
swap                    669432       512    668920   1% /jack
/dev/dsk/c4t0d0s2       702234    702234         0 100% /media/OpenSolaris-2008-05
jack@opensolaris:~$ lofiadm /dev/lofi/1   ← イメージファイル1の状況を表示
/.cdrom/solaris.zlib
jack@opensolaris:~$ lofiadm /dev/lofi/2   ← イメージファイル2の状況を表示
/.cdrom/solarismisc.zlib
jack@opensolaris:~$ echo $BASH_VERSION    ← シェル変数BASH_VERSIONの値を表示
3.2.25(1)-release
jack@opensolaris:~$ grep '^jack:' /etc/passwd      ← jackのログインシェルは、
jack:x:65432:10:Default User:/jack:/usr/bin/bash   ← /usr/bin/bashになっている
jack@opensolaris:~$ sh --version                   ← コマンド名shでも、
GNU bash, version 3.2.25(1)-release (i386-pc-solaris2.11)  ← bashが実行される
Copyright (C) 2005 Free Software Foundation, Inc.
jack@opensolaris:~$ echo $PATH                       ← PATHは、
/usr/gnu/bin:/usr/bin:/usr/X11/bin:/usr/sbin:/sbin   ← GNU優先の設定
jack@opensolaris:~$ echo $MANPATH                    ← マニュアルも、
/usr/gnu/share/man:/usr/share/man:/usr/X11/share/man ← GNU優先の設定