最終更新:2007/11/2


FreeBSDの起動と終了、基本コマンド

インストールが終ってマシンを再起動すると、 デバイスの認識メッセージなどが表示された後に

login:

という状態になります。これがログインプロンプトで入力待ちの状態を表します。

まずはインストール時に作ったIDとパスワードでログインしてみましょう。 ログインが成功すると、Welcome to FreeBSD!のメッセージと共にFreeBSD tipsがランダムで表示されます。 通常はメッセージが長いのでスクロールして画面外に行ってしまいます。 そのような場合はScrollLockキーを押してカーソルキーの上下かPageUp/Downで過去の表示が見れます。 元に戻るにはもう一度ScrollLockキーを押します。

ここで画面下にある「>」というのがコマンド入力待ちの状態を表すプロンプトです。 終了するにはexitコマンドを使います。

> exit

エンターキーで入力を確定すると、login:に戻ってきます。 もう一度ログインして今度は管理者になってみましょう。 管理者になるにはsuコマンドを使います。

> su
Password:

ここで管理者用パスワードを入力します。 正しく入力されると、プロンプトが管理者用に変更されます。

aquarius# 

aquariusはインストール時に設定したホスト名です。 「#」が管理者権限で動いている場合のプロンプトです。 これ以降の説明ではホスト名は省略して書きます。 ログインした最初に起動するプログラムをログインシェルといいます。 プロンプトはこのログインシェルが表示しているものになります。

マシンを再起動したり終了するにはshutdownコマンドを使います。

# shutdown -r now

このように入力してみます。意味は -r でリブート(再起動) now で今すぐ。 shutdownに限らずコマンドにはいろいろなオプションが用意されています。 それらについて知りたい場合は、manコマンドを利用します。 たとえばshutdownについて知りたい場合は

> man shutdown

と入力します。カーソルキーの上下やPageUp/Down、スペースキーなどで表示を進めることができます。 戻るにはQキーを押すか、最後の行まで表示すると終了します。 表示に使われているコマンドはmore(中身はlessの機能限定版)なので詳細は

> man more

と入力すると表示されます。 このように表示を制御してファイルの内容を見るコマンドの事をページャと呼びます。 ファイルの内容を確認したい場合はこのコマンドを利用します。

たとえば起動時に表示されるデバイスの認識メッセージなどは/var/run/dmesg.bootに保存されています。 このファイルを見るにはプロンプトから

> less /var/run/dmesg.boot

と実行します。プロンプトに戻ってくるにはQキーを使います。

ファイルの編集を行うにはエディタコマンドを利用します。 FreeBSDではeeというコマンドが標準で用意されていますのでまずはこれを利用します。 お好みのエディタは後ほどportsから入れることができます。 ※インストール直後は日本語対応のエディタは用意されていませんので半角英数で入力します。

> ee sample.txt

eeコマンドを起動すると、上部に基本的なキー割り当てが表示されて編集画面になります。

this file is a sample.

と入力してエンターで改行してから保存して終了します。 入力を間違えたらBSキー(BackSpaceもしくは←の表示があります)で戻って修正します。 保存と終了はメニューから行います。 ESCキーでメニューを出して「a) leave editor」を選択します。 leave menu が出ます。「a) save changes」を選択して保存&終了します。 編集内容を破棄する場合は「b) no save」を選択して終了します。

ファイルの内容を確認するには先ほどのlessコマンドを利用します。

> less sample.txt

入力した内容がきちんと表示されましたか?

インストールの際に使ったインストーラは/usr/sbin/sysinstallにあります。 これをrootユーザで実行することでインストールの設定が再度行えるようになります。

> su
Password:
# /usr/sbin/sysinstall

設定を追加したり変更するにはConfigureを選択します。 これは後ほど利用するとして、今はExit Installを選択して終了しておきます。

rootユーザから通常のユーザに戻るには「#」の状態でログインシェルを終了させるexitコマンドを実行します。

# exit
>

ネットワークを正しく設定していれば、LANやインターネットにもつながっているはずです。 基本的なpingコマンドで外部のマシンに反応があるか試してみます。 終了するにはCtrl+Cを押します。

> ping ntp.peach.ne.jp
PING ntp.peach.ne.jp (203.141.151.2): 56 data bytes
64 bytes from 203.141.151.2: icmp_seq=0 ttl=53 time=16.643 ms
64 bytes from 203.141.151.2: icmp_seq=1 ttl=53 time=17.127 ms
64 bytes from 203.141.151.2: icmp_seq=2 ttl=53 time=16.997 ms
64 bytes from 203.141.151.2: icmp_seq=3 ttl=53 time=17.137 ms
64 bytes from 203.141.151.2: icmp_seq=4 ttl=53 time=16.530 ms
64 bytes from 203.141.151.2: icmp_seq=5 ttl=53 time=16.389 ms
^C
--- ntp.peach.ne.jp ping statistics ---
6 packets transmitted, 6 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 16.389/16.804/17.137/0.296 ms
>

もし、上記のような表示が帰ってこない場合はネットワークの設定が正しくありません。 よく見直してください。 ネットワークの設定は/usr/sbin/sysinstallのConfigure > Networking > Interfacesで再び行えます。

プロンプトとコマンドの使い方がわかったところでFreeBSDを終了してみます。 当然ですがいきなり電源スイッチで切ってはいけません。 ディスクキャッシュにあってまだ書き込みしていないファイルは消失してしまいます。 いきなり電源を遮断されるとfsck(Windowsでいうとchkdsk)が次回実行される事になります。

ユーザのグループがoperatorに属していない場合はsuでrootユーザになります。 operatorグループであればそのまま実行します。

> shutdown -p now

とオプションを付けて実行します。-p は電源切断をするオプションです。 しばらくした後、Uptime(起動していた時間)を表示して終了します。 Virtual PCの場合はそのまま電源が落ちますので、ウィンドウ自体が消えて、 Virtual PC コンソールで「実行していません」になります。

※ACPIもAPMもサポートしていない旧式マシンの場合はshutdown -pで電源自体は切れません。 shutdownコマンド実行後に手動で電源を切る必要があります。


仮想マシン内のFreeBSD 6.2の調整

仮想マシン内でFreeBSDを快適に使うには調整した方がよいパラメータがあります。

カーネルの割り込み周期:

標準では1000Hzになっています。 つまり1秒間に1000回の割り込みを要求します。 これを100Hzにすることにより1秒間に100回に減るので、 アイドル時のCPU使用率上昇を抑えることができます。 また、割り込みを取りこぼす可能性が低くなります。

タイマーの設定:

カーネルは起動時に内蔵時計から時間を読み取り、 それを元にタイマー割り込みにより時間を調整するのですが、 仮想マシン内では割り込みが定期的に発生する保障はありません。 同時刻にWindowsアプリがCPUを利用しているかもしれない。 また、仮想CPUに常時CPU利用率100%が与えられているわけではないので、 想定外の低クロックで動いているかもしれない。 などなど、複数の要因により正常に動かない事があります。

FreeBSDがVirtual PC内で利用できるタイマーとしては、
ACPIによる固定周波数のタイマー
i8254による設定可能なタイマー
TSC(CPU内蔵カウンタ)によるタイマー
があります。

本来であればACPIがCPUに依存せず固定でカウントできるので精度が良いのですが、 仮想マシンではそもそも物理的なハードが存在しませんので固定にはなりません。 i8254は精度に難があるもののどのマシンでも利用できる万能型です。 TSCはPentium以降に搭載されたもので、入力されたクロック周波数によってカウントされる内部タイマーです。 SMP構成のマシンでは各CPUのタイマーが同期していないとずれるなどの問題があるようです。

このなかで仮想マシンで一番正確なのは何かと言うと、シングルプロセッサではTSCになります。 入力クロック周波数(実際の稼動クロックではありません)が一定であれば アプリケーションの影響をまったく受けず固定的にカウントされていきます。 もちろん周波数を変更するアプリケーションを利用するとFSBが変化するので入力クロックが変動します。 TSCで正確なタイマーを利用したい場合はFSBの変更を行うアプリを併用しないようにします。 お手軽に使うならi8254でもいいでしょう。


仮想マシンでTSCを利用するには、 自分のCPUがどのくらいのクロックで動いているか調べる必要があります。 これを簡単に測定する機能がHDBENCHというソフトについていますので利用します。

http://www.hdbench.net/software/hdbench/index.html

執筆時点では、HDBENCH Ver3.40 beta6が最新のようです。 HDBENCHを起動して、上部メニューのSystemを選択します。 数秒間の測定の後に周波数が表示されます。

vpcfbs70

このマシンでは2400.00MHzで動いているのがわかります。 この値はマザーボードの個体差、温度条件によって変動しますので、 そんなに正確に測定する必要はないです。仮想マシンでなくても誤差は発生します。 たとえばWindowsの時間がいつのまにかずれている事はありませんか?それと同じ事です。 この誤差はNTPという時刻合わせによって補正する事ができます。

計測した値はMHzなのでこれをHzに変換します。 1MHz=1000kHz=1000000Hzの事ですから、Hz単位に変換すると、 2400.00MHz=2400000000Hzになります。

もしもFreeBSDが認識する実測値がみたいならば、 実際のマシンでCDから起動してみると、起動時にTSCの実測値が表示されます。 インストーラが起動したら、ScrollLockキーで画面表示を一時停止して、 カーソルキーやPageUp/Downで過去の表示を見ると、
Timecounter "TSC" frequency 2400012216 Hz quality 800
こんな感じの行があります。 これはGA-G33-DS3RとCore2QuadQ6600のデータですが、 起動する毎に値が変化してしまいます。 このマシンでは2回目は2400014583Hz、3回目は2400011883Hzになりました。


TSCの周期がわかったところで設定してみます。 カーネルの割り込み周期は/boot/loader.confというファイルに書きます。 タイマーの設定は/etc/sysctl.confに書きます。設定したら再起動します。

/boot/loader.conf
kern.hz="100"
/etc/sysctl.conf(TSCを利用する場合、tsc_freqは測定した自分の周波数を書く)
kern.timecounter.hardware=TSC
machdep.tsc_freq=2400000000
/etc/sysctl.conf(i8254を利用する場合)
kern.timecounter.hardware=i8254