目次
主にコンソールからシステムを設定や管理する基本的なティップを次に記します。
screen(1) は、ネットワーク接続中断をサポートするので信頼性が低く断続的な接続経由でリモートサイトをアクセスする人にとっては非常に有用なツールです。
表9.1 ネットワーク切断の中断をサポートするプログラムのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
screen *
|
V:10, I:32 | 952 | VT100/ANSI ターミナルエミュレーションを使ってのターミナルマルチプレクサ |
screen(1) は複数のプロセスを1つのターミナルウィンドウでうまく動作させるのみならず、接続が中断してもリモートシェルプロセスを生き延びさせる事もできます。screen(1) の使われ方の典型的シナリオは次です。
リモート機器にログインします。
単一のコンソール上で screen
を起動します。
^A c
("Control-A" に続いて "c") によって作られた
screen
のウィンドウ中で複数のプログラムを実行します。
^A n
("Control-A" に続いて "n") によって、複数の
screen
のウィンドウ間を切り替えます。
突然ターミナルを離れる必要ができたけれども、接続を継続してあなたが実行中の作業を失いたくありません。
次のようないかなる方法ででも、screen
のセッションをデタッチできます。
暴力的にネットワーク接続を引き抜く
^A d
("Control-A" に続いて "d") とタイプしてリモート接続から手動でログアウト
^A DD
("Control-A" に続いて "DD") とタイプして
screen
をデタッチしてログアウト
同じリモート機器に (たとえ異なるターミナルからでも) 再びログインします。
screen
を"screen -r
" として起動します。
screen
は全アクティブなプログラムが実行されている過去の全
screen
ウィンドウを魔法のようにリアタッチします。
![]() |
ティップ |
---|---|
|
screen
セッションではコマンドキーストローク以外の全てのキーボード入力は現在のウィンドウに送られます。全ての
screen
コマンドキーストロークは ^A
("Control-A")
と単一キー [プラス何らかのパラメーター] をタイプすることによって入力されます。次に覚えておくべき重要なコマンドキーストロークを記します。
表9.2 screen キーバインディングのリスト
キーバインディング | 意味 |
---|---|
^A ?
|
ヘルプスクリーンを表示 (キーバインディングを表示) |
^A c
|
新規ウィンドウを作成しそれに切り替える |
^A n
|
次のウィンドウに切り替える |
^A p
|
前のウィンドウに切り替える |
^A 0
|
0番のウィンドウに切り替える |
^A 1
|
1番のウィンドウに切り替える |
^A w
|
ウィンドウのリストを表示 |
^A a
|
Ctrl-A を現在のウィンドウにキーボード入力として送る |
^A h
|
現在のウィンドウのハードコピーをファイルに書く |
^A H
|
現在のウィンドウのファイルへのロギングを開始/終了する |
^A ^X
|
ターミナルをロック (パスワードで保護) |
^A d
|
ターミナルから screen のセッションをデタッチ |
^A DD
|
screen のセッションをデタッチしてログアウト |
詳細は screen(1) を参照下さい。
多くのプログラムは "/var/log/
" ディレクトリーの下にそれぞれの活動を記録します。
カーネルログデーモン: klogd(8)
システムログデーモン: rsyslogd(8)
「システムメッセージ」と「カーネルメッセージ」を参照下さい。
注目すべきログアナライザー
(aptitude(8)
で"~Gsecurity::log-analyzer
") を次に記します。
表9.3 システムログアナライザーのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
logwatch *
|
V:2, I:2 | 1795 | 綺麗な出力の Perl で書かれたログアナライザー |
fail2ban *
|
V:5, I:6 | 672 | 複数回の認証エラーを発生させる IP を使用禁止にします |
analog *
|
V:1.0, I:15 | 4524 | ウェッブサーバーのログアナライザー |
awstats *
|
V:1.9, I:3 | 3101 | 強力で機能の多いウェッブサーバーのログアナライザー |
sarg
*
|
V:1.5, I:1.6 | 944 | squid の分析レポートジェネレター |
pflogsumm *
|
V:0.2, I:0.6 | 160 | Postfix ログ項目サマライザー |
syslog-summary *
|
V:0.19, I:1.2 | 84 | syslog ログファイルの内容をまとめる |
lire
*
|
V:0.10, I:0.12 | 5304 | 機能豊富なログアナライザーとレポートジェネレター |
fwlogwatch *
|
V:0.07, I:0.17 | 440 | ファイアウォールログアナライザー |
squidview *
|
V:0.08, I:0.5 | 193 | squid の access.log ファイルのモニターと分析 |
visitors *
|
V:0.07, I:0.2 | 228 | ウェッブサーバーの高速ログアナライザー |
swatch *
|
V:0.05, I:0.2 | 112 | 正規表現マッチ、ハイライト、フック機能付きログファイルビューワー |
crm114 *
|
V:0.04, I:0.14 | 1336 | 制御可能な正規表現切断機とスパムフィルター (CRM114) |
icmpinfo *
|
V:0.04, I:0.2 | 84 | ICMP メッセージの解釈 |
![]() |
注記 |
---|---|
CRM114 はTRE 正規表現ライブラリーを使うファジーなフィルターを書く言語インフラを提供します。そのよくある応用はスパムメールのフィルターですが、ログアナライザーとしても使えます。 |
単に script(1) を使ってシェル活動を記録すると (「シェル活動の記録」参照)、コントロール文字の入ったファイルが生成されます。このような事は次のようにして col(1) を使うことで避けられます。
$ script Script started, file is typescript
何なりとします … そして script
から脱出するために Ctrl-D
を押します。
$ col -bx <typescript >cleanedfile $ vim cleanedfile
(例えば、initramfs 中のブートプロセスの途中のように) script
が無い場合には、その代わりに次のようにすれば良いです。
$ sh -i 2>&1 | tee typescript
![]() |
ティップ |
---|---|
|
![]() |
ティップ |
---|---|
screen(1)
を" |
![]() |
ティップ |
---|---|
emacs(1)
を" |
more(1) や less(1) 等のページャーツール (「ページャー」参照) や、ハイライトやフォーマット用のカスタムツール (「プレーンテキストデーターをハイライトとフォーマット」参照) はテキストデーターを綺麗に表示できますが、汎用エディター (「テキストエディター」参照) が最も汎用性がありカスタム化が可能です。
![]() |
ティップ |
---|---|
vim(1)
やそのページャーモードのエリアス
view(1)
では、" |
"ls -l
" コマンドによる時間と日付のデフォールトの表示形式はロケール (値は「タイムスタンプ」を参照)
に依存します。"$LANG
" 変数が最初に参照され、それを
"$LC_TIME
" 変数によりオーバーライドする事ができます。
実際の各ロケールでのデフォールトの表示形式は使われた標準 C ライブラリー (libc6
パッケージ)
のバージョンに依存します。つまり Debian の異なるリリースは異なるデフォールトです。
ロケール以上にこの時間や日付の表示フォーマットをカスタム化したいと真摯に望むなら、"--time-style
"
引数か "$TIME_STYLE
" 値を使って時間スタイル値を設定するべきです
(ls(1)
と
date(1)
と "info coreutils 'ls invocation'
" を参照下さい)。
表9.4 lenny
での "ls -l
" コマンドによる時間と日付の表示例
時間スタイル値 | ロケール | 時間と日付の表示 |
---|---|---|
iso
|
any |
01-19 00:15
|
long-iso
|
any |
2009-01-19 00:15
|
full-iso
|
any |
2009-01-19 00:15:16.000000000 +0900
|
locale
|
C
|
Jan 19 00:15
|
locale
|
en_US.UTF-8
|
2009-01-19 00:15
|
locale
|
es_ES.UTF-8
|
ene 19 00:15
|
+%d.%m.%y %H:%M
|
any |
19.01.09 00:15
|
+%d.%b.%y %H:%M
|
C または en_US.UTF-8
|
19.Jan.09 00:15
|
+%d.%b.%y %H:%M
|
es_ES.UTF-8
|
19.ene.09 00:15
|
![]() |
ティップ |
---|---|
例えば " |
![]() |
ティップ |
---|---|
このような iso フォーマットは ISO 8601 に準拠しています。 |
殆どの現代的なターミナルへのシェル出力は ANSI
エスケープコードを使って着色化できます
("/usr/share/doc/xterm/ctlseqs.txt.gz
" を参照)。
例えば、次を試してみて下さい:
$ RED=$(printf "\x1b[31m") $ NORMAL=$(printf "\x1b[0m") $ REVERSE=$(printf "\x1b[7m") $ echo "${RED}RED-TEXT${NORMAL} ${REVERSE}REVERSE-TEXT${NORMAL}"
着色化されたコマンドは対話環境で出力を検査するのに便利です。私は、私の "~/.bashrc
"
に次を含めています。
if [ "$TERM" != "dumb" ]; then eval "`dircolors -b`" alias ls='ls --color=always' alias ll='ls --color=always -l' alias la='ls --color=always -A' alias less='less -R' alias ls='ls --color=always' alias grep='grep --color=always' alias egrep='egrep --color=always' alias fgrep='fgrep --color=always' alias zgrep='zgrep --color=always' else alias ll='ls -l' alias la='ls -A' fi
エリアスを使うことで色効果を対話コマンド使用時に限定します。こうすると
less(1)
等のページャープログラムの下でも色を見られるので、環境変数 "export
GREP_OPTIONS='--color=auto'
"
をエキスポートするより都合が良いです。他のプログラムにパイプする際に色を使いたくないなら、先ほどの
"~/.bashrc
" 例中で代わりに "--color=auto
"
とします。
![]() |
ティップ |
---|---|
このような着色するエリアスは、対話環境でシェルを " |
複雑な反復のためにエディターでの活動を記録できます。
Vim の場合以下のようにします。
"qa
": 名前付きレジスタ "a
" にタイプした文字の記録を開始。
… エディターでの活動
"q
": タイプした文字の記録を終了。
"@a
": レジスター "a
" の内容を実行。
Emacs の場合は以下のようにします。
"C-x (
": キーボードマクロの定義開始。
… エディターでの活動
"C-x )
": キーボードマクロの定義終了。
"C-x e
": キーボードマクロの実行。
xterm
の表示を含めた、X アプリケーションの画像イメージを記録するにはいくつか方法があります。
表9.5 画像の操作ツールのリスト
パッケージ | ポプコン | サイズ | コマンド |
---|---|---|---|
xbase-clients *
|
I:43 | 59 | xwd(1) |
gimp
*
|
V:13, I:46 | 13042 | GUI メニュー |
imagemagick *
|
V:23, I:46 | 207 | import(1) |
scrot
*
|
V:0.3, I:1.4 | 80 | scrot(1) |
DVCS システムを使って設定ファイルの変更を記録する専用ツールがあります。
表9.6 VCS 中に設定の履歴を記録するパッケージのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
etckeeper *
|
V:1.4, I:1.9 | 240 | Git (デフォールト) か Mercurial か Bazaar を使って設定ファイルとそのメタデーターを保存 (新規) |
changetrack *
|
V:0.07, I:0.09 | 148 | RCS を使って設定ファイルを保存 (旧式) |
git(1)
which put entire "/etc
" 全てを VCS
のコントロール下に置くように、git(1)
とともに etckeeper
パッケージを使うことをお薦めします。そのインストール案内とチュートリアルは
"/usr/share/doc/etckeeper/README.gz
" にあります。
本質的に "sudo etckeeper init
"
を実行すると、"/etc
" に関する git
レポジトリーが、徹底的な手順を踏む特別のフックスクリプト付きでちょうど「設定履歴記録のための Git」と同様に初期化されます。
あなたが設定を変える毎に、普通に git(1) を使って記録できます。パッケージ管理コマンドを使うと、変更に関して上手に毎回自動記録もします。
![]() |
ティップ |
---|---|
" |
Linux のlive CDs とかレスキューモードで debian-installer CDs であなたのシステムをブートすることでブートデバイス上のデーターストレージの再設定が簡単にできるようになります。「バイナリーデーター」も参照下さい。
ディスク空間使用状況は coreutils
パッケージが提供するプログラムで評価できます:
mount(8) はマウントされたファイルシステム(ディスク)すべてを報告します。
df(8) はファイルシステムのディスク空間使用状況を報告します。
du(8) はディレクトリーツリーのディスク空間使用状況を報告します。
![]() |
ティップ |
---|---|
du(8)
の出力を
xdu(1x)
に " |
ディスクのパーティションの設定に関して、fdisk(8) は標準と考えられてきていますが、parted(8) も注目に値します。"ディスクパーティションデーター" や "パーティションテーブル" や "パーティションマップ" や "ディスクラベル" は全て同意語です。
殆どの PC では、ディスクのパーティションデーターが最初のセクターつまり LBA セクター 0 (512バイト) に保持される、古典的なマスターブートレコード (MBR) 方式が使われています。
![]() |
注記 |
---|---|
新規の Intel ベースの Mac のような拡張ファームウェアインターフェイス (EFI) 付きの一部 PC では、ディスクパーティションデーターをセクターの最初以外に保持する GUID Partition Table (GPT) 方式が使われています。 |
fdisk(8) はディスクパーティションツールの標準でしたが、parted(8) がそれを置き換えつつあります。
表9.7 ディスクパーティション管理パッケージのリスト
パッケージ | ポプコン | サイズ | GPT | 説明 |
---|---|---|---|---|
util-linux *
|
V:90, I:99 | 1700 | 非サポート | fdisk(8) と cfdisk(8) を含む雑多なシステムユーティリティー |
parted *
|
V:1.2, I:10 | 240 | サポート | GNU Parted ディスクパーティションとリサイズのプログラム |
gparted *
|
V:2, I:20 | 4945 | サポート |
libparted ベースの GNOME パーティションエディター
|
qtparted *
|
V:0.03, I:0.4 | NOT_FOUND | サポート |
libparted ベースの KDE パーティションエディター
|
gptsync *
|
V:0.01, I:0.2 | 72 | サポート | 古典的 MBR パーティションテーブルを GPT パーティションテーブルと同期 |
kpartx *
|
V:1.0, I:1.9 | 132 | サポート | パーティション用のデバイスマッピングを作成するプログラム |
![]() |
注意 |
---|---|
parted(8) はファイルシステムを生成やリサイズも出きるということですが、そのようなことは mkfs(8) (mkfs.msdos(8) と mkfs.ext2(8) と mkfs.ext3(8) と…) とか resize2fs(8) 等の最もよくメンテされている専用ツールを使って行う方がより安全です。 |
![]() |
注記 |
---|---|
GPT と MBR
間で切り替えるには、ディスクの最初数ブロックの内容を直接消去し (「ファイル内容の消去」参照)、" |
あなたのパーティションの再設定やリムーバブルストレージメディアの起動順序はパーティションの名前を変えることになるかもしれませんが、それに首尾一貫してアクセスできます。もしディスクが複数ありあなたの BIOS がそれに首尾一貫したデバイス名をつけない時にも、これは役に立ちます。
"-U
" オプションを使って
mount(8)
を実行すると "/dev/sda3
" のようなファイル名を使うのではなく UUID を使ってブロックデバイスをマウントできます。
"/etc/fstab
"
(fstab(5)
参照) は UUID を使えます。
ブートローダー (「2段目: ブートローダー」) もまた UUID を使えます。
![]() |
ティップ |
---|---|
ブロックスペシャルデバイスの UUID はblkid(8) を使って見極められます。 |
![]() |
ティップ |
---|---|
リムーバブルストレージメディア等のデバイス名は、必要なら udev rules を使って静的になります。「udev システム」を参照下さい。 |
ext3 ファイルシステム用に e2fsprogs
パッケージは次を提供します。
mkfs(8)
と
fsck(8)
コマンドは各種ファイルシステム依存プログラム (mkfs.fstype
や
fsck.fstype
) のフロントエンドとして e2fsprogs
により提供されています。ext3
ファイルシステム用は、mkfs.ext3(8)
と
fsck.ext3(8)
で、それぞれ
mke2fs(8)
と
e2fsck(8)
にハードリンクされています。
類似コマンドが Linux によってサポートされる各ファイルシステム用にあります。
表9.8 ファイルシステム管理用パッケージのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
e2fsprogs *
|
V:60, I:99 | 2372 | ext2/ext3/ext4 ファイルシステムのためのユーティリティー |
reiserfsprogs *
|
V:1.4, I:5 | 1200 | Reiserfs ファイルシステムのためのユーティリティー |
dosfstools *
|
V:4, I:46 | 162 | FAT ファイルシステムのためのユーティリティー (Microsoft: MS-DOS, Windows) |
xfsprogs *
|
V:2, I:9 | 3135 | XFS ファイルシステムのためのユーティリティー (SGI: IRIX) |
ntfsprogs *
|
V:3, I:28 | 676 | NTFS ファイルシステムのためのユーティリティー (Microsoft: Windows NT, …) |
jfsutils *
|
V:0.4, I:2 | 1888 | JFS ファイルシステムのためのユーティリティー (IBM: AIX, OS/2) |
reiser4progs *
|
V:0.08, I:0.6 | 1296 | Reiser4 ファイルシステムのためのユーティリティー |
hfsprogs *
|
V:0.10, I:0.9 | 280 | HFS と HFS Plus ファイルシステムのためのユーティリティー (Apple: Mac OS) |
btrfs-tools *
|
V:0.6, I:1.4 | 2128 | btrfs ファイルシステムのためのユーティリティー |
zerofree *
|
V:0.12, I:1.0 | 56 | ext2/3 ファイルシステムのフリーブロックをゼロにセットするプログラム |
![]() |
ティップ |
---|---|
Ext3 ファイルシステムは Linux
システムのデフォールトのファイルシステムなので、特段使わない理由が無い限りそれを使うことを強くお薦めします。Linux カーネル 2.6.30
(Debian |
![]() |
警告 |
---|---|
まだ新しいので ext4 を使うと色々制約があるかもしれません。例えば、ext4 パーティションのサイズ変更をするには Linux カーネルが 2.6.30 以降でなければいけません。 |
![]() |
ティップ |
---|---|
一部のツールはファイルシステムへのアクセスを Linux カーネルのサポート無しでも可能にします (「ディスクをマウントせずに操作」参照)。 |
mkfs(8) コマンドは Linux システム上でファイルシステムを生成します。fsck(8) コマンドは Linux システム上でファイルシステムの整合性チェックと修理機能を提供します。
![]() |
注意 |
---|---|
一般的に |
![]() |
ティップ |
---|---|
ブートスクリプトから実行される
fsck(8)
コマンドの結果を " |
![]() |
ティップ |
---|---|
" |
ファイルシステムのパーフォーマンスや性格はそれに使われるマウントオプションによって最適化できます (fstab(5) と mount(8) 参照)。
"defaults
" オプションはデフォールトのオプションが次の意味です:
"rw,suid,dev,exec,auto,nouser,async
"。(一般的)
"noatime
" もしくは "relatime
"
オプションは読出しアクセスを高速化するのに非常に効果的です。(一般的)
"user
" オプションは通常ユーザーがファイルシステムをマウント出来るようにします。このオプションは
"noexec,nosuid,nodev
" オプションの組み合わせの意味です。(一般的、CD や floppy
に使用)
"noexec,nodev,nosuid
" オプションの組み合わせはセキュリティーの強化に使われます。(一般的)
"noauto
" オプションは明示的操作のみにマウントを制限します。(一般的)
ext3fs への "data=journal
"
オプションは、書込み速度を犠牲ににしますが、停電時のデーター整合性を強化します。
![]() |
ティップ |
---|---|
ルートファイルシステムに非デフォールトのジャーナルモードを設定するには、例えば
" |
tune2fs(8) コマンドを用いてファイルシステムのスーパーブロックによってファイルシステムを最適化できます。
"sudo tune2fs -l /dev/hda1
"
を実行するとそのファイルシステムスーパーブロックを表示します。
"sudo tune2fs -c 50 /dev/hda1
" を実行するとファイルシステムのチェック
(ブートアップ時の fsck
実行) の頻度を50回のブート毎に変更します。
"sudo tune2fs -j /dev/hda1
" の実行は ext2 から ext3
へとファイルシステム変換してファイルシステムにジャーナリングの機能を追加します。(アンマウントしたファイルシステムに対して実行します。)
"sudo tune2fs -O extents,uninit_bg,dir_index /dev/hda1 &&
fsck -pf /dev/hda1
" の実行はファイルシステムを ext3
から ext4 に変換します。(アンマウントしたファイルシステムに対して実行します。)
![]() |
警告 |
---|---|
ext4 ファイルシステムへのブートデバイスのファイルシステム変換は GRUB ブートローダーが ext4 ファイルシステムをよくサポートしインストールされた Linux カーネルバージョンが 2.6.30 以降となるまではしないでおくべきです。 |
![]() |
警告 |
---|---|
ハードディスクの設定はデーターの整合性にとって非常に危険な事なので、その設定をさわる前にお使いのハードウエアーをチェックし hdparam(8) のマンページをチェックします。 |
例えば "/dev/hda
" に対して "hdparm -tT
/dev/hda
" とするとハードディスクのアクセス速度をテストできます。(E)IDE
を使って接続された一部のハードディスクでは、"(E)IDE 32ビット I/O サポート" を有効にし "using_dma フラグ" を有効にし
"interrupt-unmask フラグ" を設定し "複数16セクター I/O" を設定するように、"hdparm -q -c3
-d1 -u1 -m16 /dev/hda
" とすると高速化できます (危険です!)。
例えば "/dev/sda" に対して "hdparm -W /dev/sda
"
とするとハードディスクの書込みキャッシュ機能をテストできます。"hdparm -W 0 /dev/sda
"
とするとハードディスクの書込みキャッシュ機能を無効にできます。
不良プレスの CDROM を現代的な高速 CD-ROM ドライブで読むには、"setcd -x 2
"
としてそれを減速して使えば読めるかもしれません。
smartd(8) デーモンを使うと SMART に文句を言うハードディスクの監視と記録ができます。
smartmontools
パッケージをインストールします。
df(1) を使ってリストすることであなたのハードディスクを識別します。
監視対象のハードディスクを "/dev/hda
" と仮定します。
SMART 機能が実際に有効となっているかを "smartctl -a
/dev/hda
" のアウトプットを使ってチェックします。
もし有効でない場合には、"smartctl -s on -a /dev/hda
" として有効にします。
次のようにして smartd(8) デーモンを実行します。
"/etc/default/smartmontools
" ファイル中の
"start_smartd=yes
" をアンコメントします。
"sudo /etc/init.d/smartmontools restart
" として
smartd(8)
デーモンを再実行します。
![]() |
ティップ |
---|---|
smartd(8)
デーモンは、警告の通知の仕方を含めて |
インストール時に論理ボリュームマネージャー (LVM) (Linux 機能) 上に作られたパーティションは、大掛かりなシステムの再設定無しに複数のストレージデバイスにまたがる LVM 上のエクステントを継ぎ足したりその上のエクステントを切り捨てることで簡単にサイズ変更が出きます。
![]() |
注意 |
---|---|
現行の LVM システムを採用すると、ハードディスクの書込みキャッシュ機能を無効にしてパーフォーマンスを犠牲にしないと、ext3fs 等のジャーナルファイルシステムによって提供されるファイルシステムの破壊に対する保証を劣化させるかもしれません。 |
空のパーティションがあれば (例えば "/dev/sdx
")、それを
mkfs.ext3(1)
を使ってフォーマットし、それをあなたが空間をより必要とするディレクトリーに
mount(8)
することができます。(元来あったデーター内容はコピーする必要があります。)
$ sudo mv work-dir old-dir $ sudo mkfs.ext3 /dev/sdx $ sudo mount -t ext3 /dev/sdx work-dir $ sudo cp -a old-dir/* work-dir $ sudo rm -rf old-dir
![]() |
ティップ |
---|---|
上記の代わりに、空のディスクイメージファイル (「空のディスクイメージ作成」参照) をループデバイスとしてマウントする (「ディスクイメージファイルをマウント」参照) 事もできます。実際のディスク使用は実際にデーターを溜め込むとともに成長します。 |
使える空間がある他のパーティション中に空のディレクトリーがあれば (例えば
"/path/to/emp-dir
")、そのディレクトリーを --bind
"
オプションを使って、空間を必要としているディレクトリー (例えば
"work-dir
")にマウントすることができます。
$ sudo mount --bind /path/to/emp-dir work-dir
![]() |
ティップ |
---|---|
本方法はお薦めできません。できれば 「他ディレクトリをバインドマウントする使用可能なストレージ空間の拡張」 で代用しましょう。 |
使える空間がある他のパーティション中に空のディレクトリーがあれば (例えば
"/path/to/emp-dir
")、そのディレクトリーへ
ln(8)
を使ってシムリンクを作成することができます。
$ sudo mv work-dir old-dir $ sudo mkdir -p /path/to/emp-dir $ sudo ln -sf /path/to/emp-dir work-dir $ sudo cp -a old-dir/* work-dir $ sudo rm -rf old-dir
![]() |
警告 |
---|---|
"ディレクトリーへのシムリンク" を " |
![]() |
注意 |
---|---|
一部のプログラムは "ディレクトリーへのシムリンク" ではうまく機能しないかもしれません。 |
他のパーティション中に使える空間があれば (例えば "/path/to/
")、その中にディレクトリーを作り
aufs を使って空間を必要とするディレクトリー上に積み重ねることができます。
$ sudo mv work-dir old-dir $ sudo mkdir work-dir $ sudo mkdir -p /path/to/emp-dir $ sudo mount -t aufs -o br:/path/to/emp-dir:old-dir none work-dir
![]() |
注意 |
---|---|
aufs を長期間のデーターのストレージに使うのは、まだ開発中でそのデザイン変更が問題を引き起こすかもしれないので感心しません。 |
あなたの PC への物理的アクセスがあると、誰でも簡単に root 特権を獲得できあなたの PC の全てのファイルにアクセスできます (「root パスワードのセキュリティー確保」参照)。これが意味するところは、あなたの PC が盗まれた場合にログインのパスワードではあなたのプライベートでセンシティブなデーターを守れないと言うことです。それを達成するにはデーターの暗号化技術を適用しなければいけません。GNU プライバシーガード (「データーセキュリティーのインフラ」参照) はファイルを暗号化できますが、少々手間がかかります。
dm-crypt と eCryptfs は最小限のユーザー努力でできる自動的なデーターの暗号化を Linux のカーネルモジュールその物を使って提供します。
表9.9 データー暗号化ユーティリティーのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
cryptsetup *
|
V:4, I:6 | 740 | 暗号化されたブロックデバイス (dm-crypt / LUKS) のためのユーティリティー |
cryptmount *
|
V:0.3, I:0.5 | 323 | ノーマルユーザーによるマウント/アンマウントに焦点を当てた暗号化されたブロックデバイス (dm-crypt / LUKS) のためのユーティリティー |
ecryptfs-utils *
|
V:0.3, I:0.4 | 372 | 暗号化されたスタックドファイルシステム (eCryptfs) のためのユーティリティー |
Dm-crypt は device-mapper を使う暗号学的ファイルシステムです。Device-mapper は1つのブロックデバイスをもう1つのブロックデバイスにマップします。
eCryptfs はスタックドファイルシステムを使うもう1つのファイルシステムです。スタックドファイルシステムはマウントされたファイルシステム上の既存のディレクトリーの上に重ね合わせます。
![]() |
注意 |
---|---|
データーの暗号化には CPU 時間等の負担がかかります。その利益と負担の両天秤をします。 |
![]() |
注記 |
---|---|
debian-installer (lenny 以降) を使うと、dm-crypt/LUKS と initramfs を使って、全 Debian システムを暗号化したディスク上にインストールできます。 |
![]() |
ティップ |
---|---|
ユーザー空間での暗号化ユーティリティーに関しては「データーセキュリティーのインフラ」を参照下さい: GNU プライバシーガード。 |
例えば "/dev/sdx
" にある USB メモリースティックのようなリムーバブルストレージデバイスの内容を
dm-crypt/LUKS
を使って暗号化できます。それを単に次のようにフォーマットします。
# badblocks -c 10240 -s -w -t random -v /dev/sdx # shred -v -n 1 /dev/sdx # fdisk /dev/sdx ... "n" "p" "1" "return" "return" "w" # cryptsetup luksFormat /dev/sdx1 ... # cryptsetup luksOpen /dev/sdx1 sdx1 ... # ls -l /dev/mapper/ total 0 crw-rw---- 1 root root 10, 60 2008-10-04 18:44 control brw-rw---- 1 root disk 254, 0 2008-10-04 23:55 sdx1 # mkfs.vfat /dev/mapper/sdx1 ... # cryptsetup luksClose sdx1
こうすると暗号化されたディスクは、現代的な GNOME のようなデスクトップ環境では
gnome-mount(1)
を使ってパスワードを聞く以外は通常のディスクと同様に "/media/<disk_label>
"
にマウントできます (「リムーバブルストレージデバイス」参照)。全て書込まれるデーターが暗号化されている点が相違点です。上記と違い、例えば
"mkfs.ext3 /dev/sdx1
" を使って ext3
等の異なったフォーマットで記録メディアをフォーマットしても良いです。
![]() |
注記 |
---|---|
もしデーターのセキュリティーが本当に偏執狂的に気になるなら、上記例で複数回の重ね書きをする必要があるかもしれません。でもこの操作は非常に時間がかかります。 |
オリジナルの "/etc/fstab
" が次の内容と仮定します。
/dev/sda7 swap sw 0 0
dm-crypt を使って swap パーティションの暗号化を次のようにして有効にします
# aptitude install cryptsetup # swapoff -a # echo "cswap /dev/sda7 /dev/urandom swap" >> /etc/crypttab # perl -i -p -e "s/\/dev\/sda7/\/dev\/mapper\/cswap/" /etc/fstab # /etc/init.d/cryptdisks restart ... # swapon -a
eCryptfs と ecryptfs-utils
パッケージを使うことで、"~/Private/
" の下に書かれるファイルを自動的に暗号化できます。
ecryptfs-setup-private(1)
を実行してプロンプトに従って "~/Private/
" を設定します。
ecryptfs-mount-private(1)
を実行して "~/Private/
" を有効にします。
センシティブなデーターファイルを "~/Private/
" に移動し、必要に応じてシムリンクを作成します。
候補:
"~/.fetchmailrc
"、"~/.ssh/identity
"、"~/.ssh/id_rsa
"、"~/.ssh/id_dsa
"、"go-rwx
"
を持つ他のファイル
センシティブなデーターディレクトリーを "~/Private/
"
中のサブディレクトリーに移動し、必要に応じてシムリンクを作成します。
候補: "~/.gnupg
"、"go-rwx
" を持つ他のディレクトリー
デスクトップ操作がしやすいように "~/Desktop/Private/
" から
"~/Private/
" までのシムリンクを作成します。
ecryptfs-umount-private(1)
を実行して "~/Private/
" を無効にします。
暗号化されたデーターが必要な際に "ecryptfs-mount-private
" を実行して
"~/Private/
" を有効にします。
もしあなたのログインパスワードを暗号化キーを包むのに使っている場合には、"/etc/pam.d/common-auth
"
中の "pam_permit.so
" のすぐ前に次に記す行があるようにすることで PAM (プラグ可能な認証モジュール: Pluggable
Authentication Modules) を使って eCryptfs を自動的にマウントできます。
"/etc/pam.d/common-auth
" の
"pam_permit.so
" の直前に次の行を挿入します。
auth required pam_ecryptfs.so unwrap
"/etc/pam.d/common-session
" の最後に次の行を挿入します。
session optional pam_ecryptfs.so unwrap
"/etc/pam.d/common-password
" の最初の有効行に次の行を挿入します。
password required pam_ecryptfs.so
これは非常に便利です。
![]() |
注意 |
---|---|
もしあなたのログインパスワードを暗号化キーを包むのに使っている場合には、あなたの暗号化されたデーターのセキュリティーはあなたのユーザーログインパスワードと同程度です (「良好なパスワード」参照)。注意深く強力なパスワードを設定していないと、あなたのラップトップを誰かが盗んだ後にパスワード破りソフトを実行すれば、あなたのデーターは危険にさらされます (「root パスワードのセキュリティー確保」参照)。 |
プログラム活動は専用ツールを用いて監視と制御できます。
表9.10 プログラム活動の監視と制御のツールのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
coreutils *
|
V:90, I:99 | 13477 | nice(1): スケジューリングの優先順位の変更してプログラムを実行 |
bsdutils *
|
V:80, I:99 | 200 | renice(1): 実行中プロセスのスケジューリングの優先順位を変更 |
procps *
|
V:85, I:99 | 575 |
"/proc " ファイルシステムのユーティリティー:
ps(1)
と
top(1)
と
kill(1)
と
watch(1)
等
|
psmisc *
|
V:50, I:92 | 688 |
"/proc " ファイルシステムのユーティリティー:
killall(1)
と
fuser(1)
と
pstree(1)
と
pstree(1)
|
time
*
|
V:7, I:86 | 152 | time(1): 時間に関するシステムリソース使用状況を報告するためにプログラムを実行 |
sysstat *
|
V:6, I:9 | 1225 | sar(1)、iostat(1)、mpstat(1)、…: Linux 用のシステムパーフォーマンスツール |
isag
*
|
V:0.05, I:0.8 | 126 | sysstat の対話型システムアクティビティーグラフ化ソフト |
lsof
*
|
V:16, I:91 | 444 |
lsof(8):
"-p " を使い実行中のプロセスが開いているファイルをリスト
|
strace *
|
V:4, I:29 | 404 | strace(1): システムコールやシグナルを追跡 |
ltrace *
|
V:0.3, I:2 | 188 | ltrace(1): ライブラリーコールを追跡 |
xtrace *
|
V:0.02, I:0.14 | 400 | xtrace(1): X11 のクライアントとサーバーの間の通信を追跡 |
powertop *
|
V:0.8, I:16 | 380 | powertop(1): Intel を使ったラップトップのシステムの電力情報 |
cron
*
|
V:90, I:99 | 284 | cron(8) デーモンからバックグランドでスケジュール通りプロセスを実行 |
anacron *
|
V:43, I:48 | 120 | 1日24時間動作でないシステム用の cron 類似のコマンドスケジューラー |
at
*
|
V:51, I:86 | 140 | at(1) と batch(1) コマンド: 特定の時間や特定のロードレベル以下でジョブを実行 |
![]() |
ティップ |
---|---|
|
コマンドが起動したプロセスにより使われた時間を表示します。
# time some_command >/dev/null real 0m0.035s # 壁時計の時間 (実経過時間) user 0m0.000s # ユーザーモードの時間 sys 0m0.020s # カーネルモードの時間
ナイス値はプロセスのスケジューリングのプライオリティーを制御するのに使われます。
表9.11 スケジューリングのプライオリティーのためのナイス値のリスト
ナイス値 | スケジューリングのプライオリティー |
---|---|
19 | 最低優先順位プロセス (ナイス) |
0 | ユーザーにとっての非常に高優先順位プロセス |
-20 | rootにとっての非常に高優先順位プロセス (非ナイス) |
# nice -19 top # 非常にナイス # nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # 非常に高速
極端なナイス値はシステムに害を与えるかもしれません。本コマンドは注意深く使用下さい、
Debian 上の ps(1) コマンドは BSD と SystemV 機能の両方をサポートしプロセスの活動を静的に特定するのに有用です。
ゾンビ (動作していない) 子プロセスに関して、"PPID
" フィールドで識別される親プロセス ID
を使ってプロセスを停止できます。
pstree(1) コマンドはプロセスの木 (ツリー) を表示します。
Debian 上の top(1) は機能が豊で、どのプロセスがおかしな動きをしているかを動的に識別することに役立ちます。
表9.13 top のコマンドのリスト
コマンドキー | レスポンスの説明 |
---|---|
h か ?
|
ヘルプの表示 |
f
|
ディスプレーフィールドのセットとリセット |
o
|
表示フィールドの順番変更 |
F
|
ソートキーフィールドの設定 |
k
|
プロセスを停止 |
r
|
プロセスのナイス値を変更 |
q
|
top コマンドを終了
|
プロセス ID (PID)、例えば1を使うプロセスによって開かれている全ファイルは次のようにしてリストできます。
$ sudo lsof -p 1
PID=1 は通常 init
プログラムです。
プラグラムの活動状況は、システムコールとシグナルは strace(1) で、ライブラリーコールは ltrace(1) で、X11 のクライアントとサーバーの通信は xtrace(1) でプラグラムの活動状況を追跡できます。
ls
コマンドのシステムコールを次のようにして追跡できます。
$ sudo strace ls
例えば "/var/log/mail.log
" 等のファイルを使っているプロセスは
fuser(1)
によって次のようにして識別できます。
$ sudo fuser -v /var/log/mail.log USER PID ACCESS COMMAND /var/log/mail.log: root 2946 F.... rsyslogd
"/var/log/mail.log
" ファイルが
rsyslogd(8)
コマンドによって書込みのために開かれている事が分かります。
例えば "smtp/tcp
" 等のソケットを使っているプロセスは
fuser(1)
によって次のようにして識別できます。
$ sudo fuser -v smtp/tcp USER PID ACCESS COMMAND smtp/tcp: Debian-exim 3379 F.... exim4
SMTP ポート (25) への TCP 接続を処理するためにあなたのシステムでは exim4(8) が実行されている事がこれで分かります。
watch(1) はプログラムを一定間隔で反復実行しながらフルスクリーンでその出力を表示します。
$ watch w
こうすると2秒毎更新でシステムに誰がログオンしているかを表示します。
例えばグロブパターン "*.ext
"
へのマッチ等の何らかの条件にマッチするファイルに関してループしながらコマンドを実行する方法がいくつかあります。
シェルの for-loop 法 (「シェルループ」参照):
for x in *.ext; do if [ -f "$x"]; then command "$x" ; fi; done
find(1) と xargs(1) の組み合わせ:
find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 command
コマンド付きの "-exec
" オプションを使って
find(1):
find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;
短いシェルスクリプト付きの "-exec
" オプションを使って
find(1):
find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "command '{}' && echo 'successful'" \;
上記の例はスペースを含む等の変なファイル名でも適正に処理できるように書かれています。find(1) に関する上級の使用法の詳細は「ファイル選択の慣用句」を参照下さい。
グラフィカルユーザーインターフェース (GUI) からプロセスをスタートできるように設定できます。
GNOME デスクトップ環境下では、ローンチャアイコンを ダブルクリックしたり、ファイルアイコンをローンチャアイコンへドラッグアンドドロップしたり、ファイルアイコンを右クリックで "Open with …" メニューとしたりしてプログラムを適正な引数とともにスタートできます。KDE でも同様の事ができます。
次は gnome-terminal(1) 中で mc(1) をスタートさせるローンチャアイコンを作る GNOME 下での例です。
実行可能プログラム "mc-term
" を次のように作成。
# cat >/usr/local/bin/mc-term <<EOF #!/bin/sh gnome-terminal -e "mc \$1" EOF # chmod 755 /usr/local/bin/mc-term
ディレクトリーを次のように作成します。
デスクトップを右クリックして "Create Launcher …
" を選択
"Type" を"Application
" と設定します。
"Name" を"mc
" と設定します。
"Command" を"mc-term %f
" と設定します。
"OK" をクリックします。
open-with との関連付けを作成します。
フォルダを右クリックして "Open with Other Application …
" を選択します。
"Use a custom command" ダイアログをクリックして開き、"mc-term %f
"
を入力します。
"Open" をクリックします。
![]() |
ティップ |
---|---|
ローンチャとは " |
一部のプログラムは他のプログラムを自動的にスタートします。このプロセスをカスタム化する上でのチェックポイントを次に記します。
アプリケーション設定メニュー:
GNOME デスクトップ: "System" → "Preferences" → "Preferred Application"
KDE デスクトップ: "K" → "Control Center" → "KDE Components" → "Component Chooser"
Iceweasle ブラウザー: "Edit" → "Preferences" → "Applications"
mc(1):
"/etc/mc/mc.ext
"
"$BROWSER
" や "$EDITOR
" や
"$VISUAL
" や "$PAGER
" といった環境変数
(eviron(7)
参照)
"editor
" や "view
" や
"x-www-browser
" や "gnome-www-browser
"
や "www-browser
" 等のプログラムに関する
update-alternatives(8)
システム (「デフォールトのテキストエディターの設定」参照)
MIME
タイプとプログラムと関係づける、"~/.mailcap
" や
"/etc/mailcap
" ファイルの内容
(mailcap(5)
参照)
ファイル拡張子と MIME
タイプとプログラムと関係づける、"~/.mime.types
" や
"/etc/mime.types
" ファイルの内容
(run-mailcap(1)
参照)
![]() |
ティップ |
---|---|
update-mime(8)
は" |
![]() |
ティップ |
---|---|
|
![]() |
ティップ |
---|---|
X の下で |
# cat /usr/local/bin/mutt-term <<EOF #!/bin/sh gnome-terminal -e "mutt \$@" EOF chmod 755 /usr/local/bin/mutt-term
kill(1) を使ってプロセス ID を使ってプロセスを停止 (プロセスへシグナルを送信) します。
killall(1) や pkill(1) プロセスコマンド名や他の属性を使ってプロセスを停止 (プロセスへシグナルを送信) します。
at(1) コマンドを次のように実行して1回だけのジョブをスケジュールします。
$ echo 'command -args'| at 3:40 monday
cron(8) コマンドを実行して定期的タスクをスケジュールします。crontab(1) と crontab(5) を参照下さい。
例えば foo
というノーマルユーザーとして "crontab -e
"
コマンドを使って "/var/spool/cron/crontabs/foo
" という
crontab(5)
ファイルを作成することでプロセスをスケジュールして実行する事ができます。
crontab(5) ファイルの例を次に記します。
# use /bin/sh to run commands, no matter what /etc/passwd says SHELL=/bin/sh # mail any output to paul, no matter whose crontab this is MAILTO=paul # Min Hour DayOfMonth Month DayOfWeek command (Day... are OR'ed) # run at 00:05, every day 5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1 # run at 14:15 on the first of every month -- output mailed to paul 15 14 1 * * $HOME/bin/monthly # run at 22:00 on weekdays(1-5), annoy Joe. % for newline, last % for cc: 0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%% 23 */2 1 2 * echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1" 5 4 * * sun echo "run at 04:05 every Sunday" # run at 03:40 on the first Monday of each month 40 3 1-7 * * [ "$(date +%a)" == "Mon" ] && command -args
![]() |
ティップ |
---|---|
連続的に稼働していないシステムでは、機器のアップタイム上可能な限り指定間隔に近く定期的にコマンドをスケジュールするために
|
![]() |
ティップ |
---|---|
スケジュールされたシステムメインテナンススクリプトは、そのようなスクリプトを
" |
システム異常に対する保険はカーネルコンパイルオプションの "マジック SysRq キー" (SAK キー) によって提供されます。現在の Debian カーネルではこれがデフォールトです。Alt-SysRq に続いて次のキーの中から1つを押すことでシステムのコントロールを救済するマジックが起きます。
表9.15 SAK コマンドキーのリスト
Alt-SysRq に続くキー | アクションの説明 |
---|---|
r
|
X クラッシュの後でキーボードを raw (生コード発生) モードから復旧 |
0
|
エラーメッセージを減らすべくコンソールログレベルを 0 と変更 |
k
|
全ての現仮想ターミナル上の全てのプロセスを停止 (Kll) |
e
|
init(8) 以外の全てのプロセスに、SIGTERM を送信 |
i
|
init(8) 以外の全てのプロセスに、SIGKILL を送信 |
s
|
全てのマウントされたファイルシステムを同期 (Sync) |
u
|
全てのマウントされたファイルシステムを読出し専用で再マウント (アンマウント、umount) |
b
|
同期することもアンマウントする事も無しに、システムをリブート (Reboot) |
"Alt-SysRq s" と "Alt-SysRq u" と "Alt-SysRq r" の組み合わせは、非常に悪い状況からの脱出に有効です。
"/usr/share/doc/linux-doc-2.6.*/Documentation/sysrq.txt.gz
"
を参照下さい。
![]() |
注意 |
---|---|
Alt-SysRq 機能があることはユーザーに root
特権機能をアクセスさせることになるのでセキュリティーリスクと考える事もできます。" |
![]() |
ティップ |
---|---|
SSH ターミナルなどからは、" |
だれがシステム上にいるかは、次のようにしてチェックできます。
who(1) は、誰がログオンしているかを表示します。
w(1) は、誰がログオンしていて何をしているかを表示します。
last(1) は、最後にログインしたユーザーのリストを表示します。
lastb(1) は、最後にログイン失敗したユーザーのリストを表示します。
![]() |
ティップ |
---|---|
" |
wall(1) を使うと、次のようにしてシステムにログオンしている全員にメッセージを送れます。
$ echo "We are shutting down in 1 hour" | wall
PCI 的デバイス (AGP、PCI-Express、CardBus、ExpressCard、等) では、 (きっと "-nn
"
オプションとともに使う)
lspci(8)
がハードウエアー識別の良いスタート点です。
この代わりに、"/proc/bus/pci/devices
"
の内容を読むか、"/sys/bus/pci
"
の下のディレクトリーツリーを閲覧することでハードウエアーの識別ができます (「procfs と sysfs」参照)。
表9.16 ハードウエアー識別ツールのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
pciutils *
|
V:18, I:95 | 936 | Linux PCI ユーティリティー: lspci(8) |
usbutils *
|
V:29, I:94 | 628 | Linux USB ユーティリティー: lsusb(8) |
pcmciautils *
|
V:4, I:16 | 92 | Linux 2.6 のための PCMCIA ユーティリティー: pccardctl(8) |
scsitools *
|
V:0.16, I:0.9 | 424 | SCSI ハードウエアー管理のためのツール集: lsscsi(8) |
pnputils *
|
V:0.02, I:0.14 | 108 | Plug and Play BIOS のためのユーティリティー: lspnp(8) |
procinfo *
|
V:0.3, I:2 | 164 |
"/proc " から得られるシステム情報:
lsdev(8)
|
lshw
*
|
V:1.2, I:8 | 656 | ハードウエアー設定に関する情報: lshw(1) |
discover *
|
V:5, I:52 | 120 | ハードウエアー識別システム: discover(8) |
GNOME や KDE のような現代的な GUI のデスクトップ環境ではほとんどのハードウエアー設定が付随する GUI 設定ツールを通じて管理できますが、それらの設定の基本的手法を知っておくのは良い事です。
表9.17 ハードウエアー設定ツールのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
hal
*
|
V:24, I:32 | 1516 | ハードウエアーアブストラクションレイヤー: lshal(1) |
console-tools *
|
V:24, I:49 | 956 | Linux コンソールのフォントとキーテーブルユーティリティー |
x11-xserver-utils *
|
V:36, I:54 | 544 | X サーバーユーティリティー: xset(1)、xmodmap(1) |
acpid
*
|
V:53, I:93 | 165 | Advanced Configuration and Power Interface (ACPI) によって起こるイベントの管理のためのデーモン |
acpi
*
|
V:5, I:61 | 92 | ACPI デバイス上の情報を表示するユーティリティー |
apmd
*
|
V:1.5, I:14 | 252 | Advanced Power Management (APM) によって起こるイベントの管理のためのデーモン |
noflushd *
|
V:0.03, I:0.06 | 248 | ハードディスクをスピンダウンできるようにするデーモン |
sleepd *
|
V:0.06, I:0.08 | 148 | 非使用状況のときにラップトップをスリープさせるデーモン |
hdparm *
|
V:12, I:52 | 304 | ハードディスクアクセスの最適化 (「ハードディスクの最適化」参照) |
smartmontools *
|
V:7, I:23 | 1324 | S.M.A.R.T. を使ってストレージシステムを制御監視 |
setserial *
|
V:1.2, I:2 | 116 | シリアルポートの管理ツール集 |
memtest86+ *
|
V:0.3, I:6 | 2342 | メモリーハードウエアー管理のためのツール集 |
scsitools *
|
V:0.16, I:0.9 | 424 | SCSI ハードウエアー管理のためのツール集 |
tpconfig *
|
V:0.2, I:0.6 | 220 | タッチパッドデバイス設定ユーティリティー |
setcd
*
|
V:0.04, I:0.2 | 28 | コンパクトデバイスアクセス最適化 |
big-cursor *
|
I:0.15 | 68 | X のための大きなマウスカーソール |
上記で、ACPI はAPM より新しい電力管理システムの枠組みです。
![]() |
ティップ |
---|---|
最近のシステム上の CPU フリーケンシースケーリングは |
以下はシステムとハードウエアーの時間を MM/DD hh:mm, CCYY (月/日 時:分, 年) に設定します。
# date MMDDhhmmCCYY # hwclock --utc --systohc # hwclock --show
Debian システムでは時間は通常地域の時間が表示されますが、ハードウエアーとシステムの時間は通常 UT (GMT) を使います。
ハードウエアー (BIOS) 時間が UT に設定されている場合は、"/etc/default/rcS
"
の中の設定を "UTC=yes
" と変更します。
ネットワーク経由でシステムの時間を更新したい場合には、ntp
や
ntpdate
や chrony
等のパッケージを使って NTP サービスを利用することを考えます。
次を参照下さい。
ntp-doc
パッケージ
![]() |
ティップ |
---|---|
|
文字コンソールと ncurses(3) システム機能を設定するのはいくつかの要素があります。
"/etc/terminfo/*/*
" ファイル
(terminfo(5))
"$TERM
" 環境変数
(term(7))
setterm(1)、stty(1)、tic(1)、toe(1)
もし xterm
用の terminfo
エントリーが非 Debian
のxterm
でうまく機能しない場合には、リモートから Debian
システムにログインする時にターミナルタイプ、"$TERM
"、を
"xterm
" から "xterm-r6
"
のような機能限定版に変更します。詳細は "/usr/share/doc/libncurses5/FAQ
"
を参照下さい。"dumb
" は"$TERM
" の最低機能の共通項です。
現在の Linux 2.6 のためのサウンドカードのためのデバイスドライバーは Advanced Linux Sound Architecture (ALSA) で提供されています。ALSA は過去の Open Sound System (OSS) と互換性のためのエミュレーションモードを提供します。
"dpkg-reconfigure linux-sound-base
"
を実行し、カーネルモジュールをブラックリストすることで ALSA を使うように選択します。非常に新しいサウンドハードウエアーをお持ちで無ければ udev
インフラがあなたのサウンドシステムを設定します。
![]() |
ティップ |
---|---|
" |
![]() |
ティップ |
---|---|
音が出ない場合ですが、あなたのスピーカーが消音された出力につながっているかもしれません。現代的なサウンドシステムには多くの出力があります。 |
アプリケーションソフトはサウンドデバイスに直接アクセスするようにばかりでなく標準的なサウンドサーバーシステム経由で間接的にアクセスするように設定されているかもしれません。
表9.18 サウンドパッケージのリスト
各ポピュラーなデスクトップ環境では普通共通のサウンドエンジンがあります。アプリケーションに使われるそれぞれのサウンドエンジンはそれと異なるサウンドサーバーにつなぐようにもできます。
スクリーンセーバーを無効にするには、次のコマンドを使います。
表9.19 スクリーンセーバーを無効にするコマンドのリスト
環境 | コマンド |
---|---|
Linux コンソール |
setterm -powersave off
|
X Window (スクリーンセーバー消去) |
xset s off
|
X Window (dpms 無効) |
xset -dpms
|
X Window (スクリーンセーバーの GUI 設定) |
xscreensaver-command -prefs
|
PC スピーカーのコネクタを外すとブザー音は確実に無効にできます。pcspkr
カーネルモジュールを削除すると同じ事ができます。
次のようにすると
bash(1)
が使う
readline(3)
プログラムが "\a
" (ASCII=7) に出会った際にブザー音を発生するのを防げます。
$ echo "set bell-style none">> ~/.inputrc
"/var/log/dmesg
"
中にあるカーネルブートメッセージに使えるメモリーの正確な全サイズが書かれています。
free(1) や top(1) は稼働中システムのメモリーリソース情報を表示します。
# grep '\] Memory' /var/log/dmesg [ 0.004000] Memory: 990528k/1016784k available (1975k kernel code, 25868k reserved, 931k data, 296k init) $ free -k total used free shared buffers cached Mem: 997184 976928 20256 0 129592 171932 -/+ buffers/cache: 675404 321780 Swap: 4545576 4 4545572
![]() |
ティップ |
---|---|
" |
1GB=1048576k の DRAM (video システムがこのメモリーの一部を使用) が付いている私の MacBook では次のようになっています。
表9.20 レポートされるメモリーサイズのリスト
報告 | サイズ |
---|---|
dmesg 中の全サイズ (Total) | 1016784k = 1GB - 31792k |
dmesg 中の未使用 (free) | 990528k |
shell 下での全 (total) | 997184k |
shell 下での未使用 (free) | 20256k (しかし実質は 321780k) |
ダメなシステム管理をするとあなたのシステムを外界からの攻撃にさらすことになるかもしれません。
システムのセキュリティーと整合性のチェックには、次の事から始めるべきです。
debsums
パッケージ、debsums(1)
と 「トップレベルの "Release" ファイルと信憑性」を参照
chkrootkit
パッケージ、chkrootkit(1)
参照
clamav
パッケージ類、clamscan(1)
と
freahclam(1)
参照
表9.21 システムセキュリティーや整合性確認のためのツールリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
logcheck *
|
V:2, I:3 | 284 | システムログの異常を管理者にメールするデーモン |
debsums *
|
V:2, I:4 | 324 | MD5 チェックサムを使ってインストールされたパッケージファイルを検証するユーティリティー |
chkrootkit *
|
V:1.9, I:5 | 808 | ルートキット検出ソフト |
clamav *
|
V:2, I:9 | 584 | Unix 用アンチウィルスユーティリティー - コマンドラインインターフェース |
tiger
*
|
V:0.8, I:0.9 | 3016 | システムセキュリティーの脆弱性を報告 |
tripwire *
|
V:0.6, I:0.7 | 9456 | ファイルやディレクトリーの整合性チェックソフト |
john
*
|
V:0.6, I:2 | 472 | アクティブなパスワードクラッキングツール |
aide
*
|
V:0.2, I:0.3 | 1240 | 先進的進入検出環境 - 静的ライブラリー |
bastille *
|
V:0.08, I:0.2 | 1960 | セキュリティー強化ツール |
integrit *
|
V:0.07, I:0.14 | 440 | ファイル整合性確認プログラム |
crack
*
|
V:0.02, I:0.2 | 204 | パスワード推定プログラム |
次のシンプルなスクリプトを使うと、典型的な間違いの全員書込み可のファイルパーミッションをチェックできます。
# find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \)
![]() |
注意 |
---|---|
|
Debian はモジュール化された Linux カーネルをサポートされるアーキテクチャに対してパッケージとしてディストリブートしています。
Linux カーネル 2.4 と比較して特記すべき Linux カーネル 2.6 の機能がいくつかあります。
デバイスは udev システムで生成されます (「udev システム」参照)。
IDE CD/DVD デバイスへの読出し/書込みアクセスは ide-scsi
モジュールを使用しません。
ネットワークのパケットフィルター機能は iptable
カーネルモジュールを使います。
多くの Linux の機能はカーネル変数を使い次のように設定されます。
ブートローダーにより初期化されたカーネル変数 (「2段目: ブートローダー」参照)
実行時に sysfs によりアクセスできるカーネル変数に関して syscrl(8) を用い変更されたカーネル変数 (「procfs と sysfs」参照)
モジュールが起動された際の modprobe(8) の引数により設定されるモジュール変数 (「ディスクイメージファイルをマウント」参照)
linux-doc-2.6.*
パッケージで供給される Linux カーネル文書
("/usr/share/doc/linux-doc-2.6.*/Documentation/filesystems/*
")
中の "kernel-parameters.txt(.gz)
" や関連する他の文書を参照下さい。
ほとんどの普通のプログラムはカーネルヘッダーを必要としませんし、コンパイルするのにそれらを直接用いるとコンパイルがうまくいかないかもしれません。普通のプログラムは
Debian システム上では (glibc
ソースパッケージから生成される)
libc6-dev
パッケージが提供する
"/usr/include/linux
" や
"/usr/include/asm
" 中のヘッダを使ってコンパイルするべきです。
![]() |
注記 |
---|---|
外部ソースからのカーネルモジュールやオートマウンターデーモン ( |
Debian にはカーネルと関連モジュールをコンパイルする独自の方法があります。
表9.22 Debian システム上でカーネルの再コンパイルためにインストールする重要パッケージのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
build-essential *
|
I:47 | 48 |
Debian パッケージをビルドする上で不可欠なパッケージ:
make 、gcc 、…
|
bzip2
*
|
V:55, I:80 | 132 | bz2 ファイルのための圧縮と解凍ユーティリティー |
libncurses5-dev *
|
V:5, I:22 | 1192 | ncurses のためのデベロッパ用ライブラリーと文書 |
git
*
|
V:10, I:35 | 10625 | git: Linux カーネルによって使われている分散型リビジョンコントロールシステム |
fakeroot *
|
V:6, I:44 | 369 | パッケージを非 root としてビルドするための fakeroot 環境を提供 |
initramfs-tools *
|
V:44, I:98 | 456 | initramfs をビルドするツール (Debian 固有) |
kernel-package *
|
V:1.3, I:10 | 2316 | Linux カーネルパッケージをビルドするツール (Debian 固有) |
module-assistant *
|
V:2, I:15 | 564 | モジュールパッケージをビルドするツール (Debian 固有) |
dkms
*
|
V:7, I:17 | 452 | 動的カーネルモジュールサポート (DKMS) (汎用) |
devscripts *
|
V:2, I:9 | 1499 | Debian パッケージメンテナ用ヘルパースクリプト (Debian 固有) |
linux-tree-2.6.*
|
N/A | N/A | Linux カーネルのソースツリーのメタパッケージ (Debian 固有) |
「2段目: ブートローダー」 中で initrd
を使う場合、initramfs-tools(8)
と
update-initramfs(8)
と
mkinitramfs(8)
と
initramfs.conf(5)
中の関連情報をしっかり読んで下さい。
![]() |
警告 |
---|---|
Linux カーネルソースをコンパイルする時にソースツリー中のディレクトリー (例えば
" |
![]() |
注記 |
---|---|
Debian の |
![]() |
注記 |
---|---|
動的カーネルモジュールサポート (DKMS)
は、カーネル全体を変えること無く個別カーネルモジュールをアップグレードできるようにする新しいディストリビューションに依存しない枠組みです。これに
|
カスタムカーネルパッケージを作るためにカーネルソースをコンパイルする Debian の標準手法は
make-kpkg(1)
を使います。正式の文書は "/usr/share/doc/kernel-package/README.gz
"
(最後の部分) にあります。カスタム化は
kernel-pkg.conf(5)
と
kernel-img.conf(5)
を参照下さい。
amd64 システムの例を次に記します。
# aptitude install linux-tree-<version> $ cd /usr/src $ tar -xjvf linux-source-<version>.tar.bz2 $ cd linux-source-<version> $ cp /boot/config-<oldversion> .config $ make menuconfig ... $ make-kpkg clean $ fakeroot make-kpkg --append_to_version -amd64 --initrd --revision=1.0 kernel_image modules_image $ cd .. # dpkg -i linux-image*.deb
"shutdown -r now
" としてリブートし、新しいカーネルへ移行します。
![]() |
注意 |
---|---|
1台の機器のためだけにコンパイルされた非モジュール化したカーネルを作りたい際には、initrd を使わないので
|
カスタムカーネルパッケージのためのカスタムモジュールパッケージを生成しインストールする Debian 標準手法は
module-assistant(8)
と module ソースパッケージを使います。例えば次のようにすると、unionfs
カーネルモジュールがビルドされ、それがインストールされます。
$ sudo aptitude install module-assistant ... $ sudo aptitude install unionfs-source unionfs-tools unionfs-utils $ sudo m-a update $ sudo m-a prepare $ sudo m-a auto-install unionfs ... $ sudo apt-get autoremove
加工されていないソースからの Linux カーネルを今でも古典的手法でビルドできます。システムの設定の詳細は手動で面倒を見る必要があります。
$ cd /usr/src $ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-<version>.tar.bz2 $ tar -xjvf linux-<version>.tar.bz2 $ cd linux-<version> $ cp /boot/config-<version> .config $ make menuconfig ... $ make dep; make bzImage $ make modules # cp ./arch/x86_64/boot/bzImage /boot/vmlinuz-<version> # make modules_install # depmod -a # update-initramfs -c -k <version>
ブートローダーは次のように設定します。
lilo
を使う場合には、"/etc/lilo.conf
"
を編集し、"/sbin/lilo
" を実行します。
grub
を使う場合には、"/boot/grub/menu.lst
"
を編集します。
"shutdown -r now
" としてリブートし、新しいカーネルへ移行します。
ほとんどのハードウエアードライバーはフリーソフトウエアーとして入手でき Debian システムの一部となっていますが、あなたのシステム上の Winmodem のような一部の non-free の外部ドライバーをロードする必要があるかもしれません。
該当リソースをチェックします。
http://en.wikipedia.org/wiki/Comparison_of_open_source_wireless_drivers
"Linmodem" というキーワードを使い、Google か他のサーチエンジン。
http://madwifi-project.org (free ドライバーを含む ath5k があります)
仮想化されたシステムを利用すると単一ハード上で同時に複数のシステムのインスタンスを実行することが加能となります。
![]() |
ティップ |
---|---|
Debian には、単純な chroot ではない仮想化やエミュレーション関連のパッケージがあります。一部のパッケージはあなたがそのような環境をセットアップする事を援助します。
表9.23 仮想化ツールのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
schroot *
|
V:0.9, I:1.3 | 2676 | Debian バイナリーパッケージを chroot 中で実行する専用ツール |
sbuild *
|
V:0.10, I:0.3 | 564 | Debian ソースから Debian バイナリーパッケージをビルドするツール |
pbuilder *
|
V:0.5, I:2 | 1320 | Debian パッケージの個人的なパッケージビルドソフト |
debootstrap *
|
V:1.5, I:10 | 224 | 基本的な Debian システムのブートストラップ (sh で書かれている) |
cdebootstrap *
|
V:0.2, I:1.7 | 71 | Debian システムのブートストラップ (C で書かれている) |
rootstrap *
|
V:0.02, I:0.17 | 156 | 完全な Linux ファイルシステムイメージをビルドするツール |
virt-manager *
|
V:0.6, I:2 | 5225 | 仮想マシンマネージャー: 仮想マシンを管理するデスクトップアプリケーション |
libvirt-bin *
|
V:1.9, I:3 | 3379 | libvirt ライブラリー用のプログラム |
user-mode-linux *
|
V:0.05, I:0.3 | 20800 | User-mode Linux (kernel) |
bochs
*
|
V:0.03, I:0.2 | 2944 | Bochs: IA-32 PC エミュレーター |
qemu
*
|
I:5 | 344 | QEMU: 高速で汎用のプロセッサエミュレーター |
qemu-system *
|
V:3, I:5 | 58043 | QEMU: フルシステムエミュレーションのバイナリ |
qemu-user *
|
V:0.5, I:5 | 40909 | QEMU: ユーザーモードエミュレーションのバイナリ |
qemu-utils *
|
V:0.8, I:6 | 1238 | QEMU: ユーティリティー |
qemu-kvm *
|
V:2, I:3 | 4290 | KVM: ハードウエア補助仮想化を利用する x86 ハードウエア上のフル仮想化 |
virtualbox-ose *
|
V:1.2, I:4 | 117 | VirtualBox: i386 と amd64 上での x86 仮想化解決策 |
xen-tools *
|
V:0.2, I:1.7 | 1228 | Debian XEN 仮想サーバーの管理ツール |
wine
*
|
V:1.1, I:11 | 96 | Wine: Windows API の実装 (標準スイート) |
dosbox *
|
V:0.5, I:2 | 2568 | DOSBox: Tandy/Herc/CGA/EGA/VGA/SVGA グラフィクス、サウンド、DOS 付きの x86 エミュレーター |
dosemu *
|
V:0.2, I:1.0 | 5944 | DOSEMU: Linux 用 DOS エミュレーター |
vzctl
*
|
V:0.7, I:1.0 | 769 | OpenVZ サーバー仮想化策 - コントロールツール |
vzquota *
|
V:0.7, I:1.0 | 204 | OpenVZ サーバー仮想化策 - クオータツール |
lxc
*
|
V:0.12, I:0.5 | 438 | Linux コンテナ - ユーザースペースツール |
異なるプラットフォーム仮想化策の詳細な比較は Wikipedia の記事 Comparison of platform virtual machines を参照下さい。
![]() |
注記 |
---|---|
ここに記載された機能の一部は |
![]() |
注記 |
---|---|
|
仮想化のための典型的な業務フローにはいくつかの段階があります。
空のファイルシステムの作成 (ファイルツリーもしくはディスクイメージ)。
ファイルツリーは "mkdir -p /path/to/chroot
" として作成できる。
raw ディスクイメージファイルは dd(1) を使って作れます (「ディスクイメージの作成」と「空のディスクイメージ作成」参照)。
qemu-img(1) はQEMU によりサポートされたディスクイメージの作成や変換に使えます。
raw と VMDK ファイルフォーマットは仮想ツール間の共通フォーマットとして使えます。
mount(8) を使ってディスクイメージをファイルシステムにマウントする (任意)。
raw のディスクイメージファイルに関しては、loop デバイスまたはデバイスマッパーデバイス (「ディスクイメージファイルをマウント」参照) としてマウント。
QEMU がサポートするディスクイメージファイルに関しては、ネットワークブロックデバイス (「仮想ディスクイメージファイルをマウント。」参照) としてマウント。
必要なシステムデーターを用いて対象のファイルシステムを充足。
debootstrap
や cdebootstrap
のようなプログラムがこのプロセスを援助します (「Chroot システム」参照)。
OS のインストーラーをフルシステムエミュレーション下で利用。
仮想化環境下でプログラムを実行。
chroot は、仮想環境の中でプログラムのコンパイルやコンソールアプリケーションの実行やデーモンの実行等をするのに十分な基本的仮想環境を提供します。
QEMU: クロスプラットフォームの CPU エミュレーションを提供
KVM と共の QEMU はハードウエア補助仮想化によるフルシステムエミュレーションを提供します。
VirtualBox はハードウエア補助仮想化の有無によらず i386 と amd64 上でのフルシステムエミュレーションを提供します。
raw ディスクイメージファイルに関しては、「ディスクイメージ」を参照下さい。
他の仮想ディスクイメージに関しては、qemu-nbd(1)
を使ってネットワークブロックデバイスプロトコルを用いてそれらをエクスポートし
nbd
カーネルモジュールを使ってそれらをマウントできます。
qemu-nbd(1) はQEMU がサポートする次のディスクフォーマットをサポートします: raw、qcow2、qcow、vmdk、vdi、bochs、cow (user-mode Linux の copy-on-write)、parallels、dmg、cloop、vpc、vvfat (virtual VFAT)、host_device。
ネットワークブロックデバイスはloop デバイスと同様の方法でパーティションをサポートします (「ディスクイメージファイルをマウント」参照)。"image.img
"
の最初のパーティションは次のようにするとマウントできます。
# modprobe nbd max_part=16 # qemu-nbd -v -c /dev/nbd0 disk.img ... # mkdir /mnt/part1 # mount /dev/nbd0p1 /mnt/part1
![]() |
ティップ |
---|---|
qemu-nbd(8)
に" |
chroot(8) を使うのは、GNU/Linux 環境の異なったインスタンスをリブートすることなく単一システム上で同時に実行する最も基本的な手法です。
![]() |
注意 |
---|---|
次の例は親システムと chroot システムが同じ CPU アーキテクチャを共有していると仮定しています。 |
pbuilder(8) プログラムを script(1) の下で次のように実行すると chroot(8) の設定と使い方が学べます。
$ sudo mkdir /sid-root $ sudo pbuilder --create --no-targz --debug --buildplace /sid-root
"sid-root
" の下に sid
環境のためのシステムデーターをどのようにして充足するかは
debootstrap(8)
か
cdebootstrap(1)
を見ると分かります。
![]() |
ティップ |
---|---|
この debootstrap(8) と cdebootstrap(1) は、Debian インストーラーが Debian をインストールするのに使われています。これらは Debian のインストールディスクを使わず他の GNU/Linux ディストリビューションから Debian をインストールするのにも使えます。 |
$ sudo pbuilder --login --no-targz --debug --buildplace /sid-root
どのようにして sid
環境下で実行されるシステムシェルが作られるかが次で観察できます。
ローカル設定のコピー ("/etc/hosts
" と
"/etc/hostname
" と "/etc/resolv.conf
")
"/proc
" ファイルシステムのマウント
"/dev/pts
" ファイルシステムのマウント
常に101でプログラム終了する "/usr/sbin/policy-rc.d
" を作成
"chroot /sid-root bin/bash -c 'exec -a -bash bin/bash'
"
を実行
![]() |
注記 |
---|---|
プログラムによっては機能するために chroot の下で |
![]() |
注記 |
---|---|
" |
![]() |
ティップ |
---|---|
|
![]() |
ティップ |
---|---|
類似の |
仮想化を使って複数のデスクトップシステムを安全に実行するには、Debian
安定版 (stable
) システム上で QEMU か
VirtualBox
を使うことをお勧めします。これらを使うと通常ありがちなリスクに晒されずに Debian テスト版
(testing
) や不安定版 (unstable
)
システムのデスクトップアプリケーションを実行できるようになります。
純粋な QEMU は非常に遅いので、ホストシステムがサポートする際には KVM を使って加速することをお勧めします。
QEMU 用の Debian システムを含む仮想ディスクイメージ
"virtdisk.qcow2
" はdebian-installer: 小さな CD
を使って次のように作成できます。
$ wget http://cdimage.debian.org/debian-cd/5.0.3/amd64/iso-cd/debian-503-amd64-netinst.iso $ qemu-img create -f qcow2 virtdisk.qcow2 5G $ qemu -hda virtdisk.qcow2 -cdrom debian-503-amd64-netinst.iso -boot d -m 256 ...
更なるティップに関しては Debian wiki: QEMU を参照下さい。
VirtualBox はQt の GUI ツールとして提供され非常に直感的に理解できます。その GUI とコマンドラインツールは VirtualBox User Manual と VirtualBox User Manual (PDF) で説明されています。