目次
主にコンソールからシステムを設定や管理する基本的なティップを次に記します。
screen(1) は、ネットワーク接続中断をサポートするので信頼性が低く断続的な接続経由でリモートサイトをアクセスする人にとっては非常に有用なツールです。
表9.1 ネットワーク切断の中断をサポートするプログラムのリスト
| パッケージ | ポプコン | サイズ | 説明 |
|---|---|---|---|
screen
|
V:185, I:284 | 987 | VT100/ANSI ターミナルエミュレーションを使ってのターミナルマルチプレクサ |
tmux
|
V:29, I:107 | 659 | terminal multiplexer alternative (Use "Control-B" instead) |
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/" ディレクトリーの下にそれぞれの活動を記録します。
システムログデーモン: rsyslogd(8)
「システムメッセージ」と「カーネルメッセージ」を参照下さい。
注目すべきログアナライザー
(aptitude(8)
で"~Gsecurity::log-analyzer") を次に記します。
表9.3 システムログアナライザーのリスト
| パッケージ | ポプコン | サイズ | 説明 |
|---|---|---|---|
logwatch
|
V:18, I:20 | 2214 | 綺麗な出力の Perl で書かれたログアナライザー |
fail2ban
|
V:97, I:108 | 1731 | 複数回の認証エラーを発生させる IP を使用禁止にします |
analog
|
V:5, I:125 | 3529 | ウェッブサーバーのログアナライザー |
awstats
|
V:11, I:18 | 6799 | 強力で機能の多いウェッブサーバーのログアナライザー |
sarg
|
V:5, I:5 | 429 | squid の分析レポートジェネレター |
pflogsumm
|
V:1, I:4 | 111 | Postfix ログ項目サマライザー |
syslog-summary
|
V:1, I:4 | 30 | syslog ログファイルの内容をまとめる |
fwlogwatch
|
V:0, I:0 | 474 | ファイアウォールログアナライザー |
squidview
|
V:0, I:1 | 192 | squid の access.log ファイルのモニターと分析 |
swatch
|
V:0, I:0 | 100 | 正規表現マッチ、ハイライト、フック機能付きログファイルビューワー |
crm114
|
V:0, I:0 | 1099 | 制御可能な正規表現切断機とスパムフィルター (CRM114) |
icmpinfo
|
V:0, I:0 | 39 | 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 wheezy での "ls -l" コマンドによる時間と日付の表示例
| 時間スタイル値 | ロケール | 時間と日付の表示 |
|---|---|---|
iso
|
不問 |
01-19 00:15
|
long-iso
|
不問 |
2009-01-19 00:15
|
full-iso
|
不問 |
2009-01-19 00:15:16.000000000 +0900
|
locale
|
C
|
Jan 19 00:15
|
locale
|
en_US.UTF-8
|
Jan 19 00:15
|
locale
|
es_ES.UTF-8
|
ene 19 00:15
|
+%d.%m.%y %H:%M
|
不問 |
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:49 | 46 | xwd(1) |
gimp
|
V:84, I:506 | 16413 | GUI メニュー |
imagemagick
|
V:64, I:560 | 205 | import(1) |
scrot
|
V:9, I:92 | 50 | scrot(1) |
DVCS システムを使って設定ファイルの変更を記録する専用ツールがあります。
表9.6 VCS 中に設定の履歴を記録するパッケージのリスト
| パッケージ | ポプコン | サイズ | 説明 |
|---|---|---|---|
etckeeper
|
V:25, I:29 | 153 | Git (デフォールト) か Mercurial か Bazaar を使って設定ファイルとそのメタデーターを保存 (新規) |
changetrack
|
V:0, I:0 | 62 | 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) を使って記録できます。パッケージ管理コマンドを使うと、変更に関して上手に毎回自動記録もします。
|
ヒント |
|---|---|
|
" |
プログラム活動は専用ツールを用いて監視と制御できます。
表9.7 プログラム活動の監視と制御のツールのリスト
| パッケージ | ポプコン | サイズ | 説明 |
|---|---|---|---|
coreutils
|
V:878, I:999 | 15016 | nice(1): スケジューリングの優先順位の変更してプログラムを実行 |
bsdutils
|
V:851, I:999 | 256 | renice(1): 実行中プロセスのスケジューリングの優先順位を変更 |
procps
|
V:813, I:999 | 695 |
"/proc" ファイルシステムのユーティリティー:
ps(1)
と
top(1)
と
kill(1)
と
watch(1)
等
|
psmisc
|
V:383, I:946 | 526 |
"/proc" ファイルシステムのユーティリティー:
killall(1)
と
fuser(1)
と
pstree(1)
と
pstree(1)
|
time
|
V:28, I:563 | 82 | time(1): 時間に関するシステムリソース使用状況を報告するためにプログラムを実行 |
sysstat
|
V:126, I:146 | 1454 | sar(1)、iostat(1)、mpstat(1)、…: Linux 用のシステムパーフォーマンスツール |
isag
|
V:0, I:4 | 109 | sysstat の対話型システムアクティビティーグラフ化ソフト |
lsof
|
V:193, I:947 | 440 | lsof(8):
"-p" オプションを使い実行中のプロセスが開いているファイルをリスト
|
strace
|
V:19, I:159 | 1399 | strace(1): システムコールやシグナルを追跡 |
ltrace
|
V:1, I:21 | 360 | ltrace(1): ライブラリーコールを追跡 |
xtrace
|
V:0, I:1 | 333 | xtrace(1): X11 のクライアントとサーバーの間の通信を追跡 |
powertop
|
V:6, I:236 | 612 | powertop(1): システムの電力消費情報 |
cron
|
V:875, I:997 | 251 | cron(8) デーモンからバックグランドでスケジュール通りプロセスを実行 |
anacron
|
V:453, I:539 | 106 | 1日24時間動作でないシステム用の cron 類似のコマンドスケジューラー |
at
|
V:333, I:579 | 149 | at(1) と batch(1) コマンド: 特定の時間や特定のロードレベル以下でジョブを実行 |
|
ヒント |
|---|---|
|
|
コマンドが起動したプロセスにより使われた時間を表示します。
# time some_command >/dev/null real 0m0.035s # 壁時計の時間 (実経過時間) user 0m0.000s # ユーザーモードの時間 sys 0m0.020s # カーネルモードの時間
ナイス値はプロセスのスケジューリングのプライオリティーを制御するのに使われます。
表9.8 スケジューリングのプライオリティーのためのナイス値のリスト
| ナイス値 | スケジューリングのプライオリティー |
|---|---|
| 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) は機能が豊富で、どのプロセスがおかしな動きをしているかを動的に識別することに役立ちます。
It is an interactive full screen program. You can get its usage help press by pressing the "h"-key and terminate it by pressing the "q"-key.
プロセス 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) に関する上級の使用法の詳細は「ファイル選択の慣用句」を参照下さい。
コマンドラインインターフェース (CLI)
の場合、$PATH
環境変数で指定されるディレクトリー中で最初にマッチした名前のプログラムが実行されます。「"$PATH" 変数」 を参照ください。
freedesktop.org スタンダード準拠の グラフィカルユーザーインターフェース (GUI)
の場合、/usr/share/applications/ ディレクトリ中の
*.desktop ファイルにより各プログラムの GUI
メニュー表示に必要なアトリビュートが提供されます。「Freedesktop.org メニュー」 参照ください。
例えば chromium.desktop ファイルは、プログラム名の "Name"
や、プログラムの実行パスと引数の "Exec" や、使用するアイコンの "Icon" 等の属性(Desktop Entry Specification 参照)を
"Chromium Web Browser" に関して以下のようにして定義します:
[Desktop Entry] Version=1.0 Name=Chromium Web Browser GenericName=Web Browser Comment=Access the Internet Comment[fr]=Explorer le Web Exec=/usr/bin/chromium %U Terminal=false X-MultipleArgs=false Type=Application Icon=chromium Categories=Network;WebBrowser; MimeType=text/html;text/xml;application/xhtml_xml;x-scheme-handler/http;x-scheme-handler/https; StartupWMClass=Chromium StartupNotify=true
これは簡略化しすぎた記述ですが、*.desktop ファイルは以下のようにしてスキャンされます。
デスクトップ環境は $XDG_DATA_HOME と
$XDG_DATA_DIR 環境変数を設定します。例えば GNOME 3 では:
$XDG_DATA_HOME が未定義。(デフォルト値の
$HOME/.local/share が使われます。)
$XDG_DATA_DIRS は
/usr/share/gnome:/usr/local/share/:/usr/share/ に設定されます。
以上により、ベースディレクトリー (XDG Base
Directory Specification 参照) や applications
ディレクトリーは以下となります。
$HOME/.local/share/ →
$HOME/.local/share/applications/
/usr/share/gnome/ →
/usr/share/gnome/applications/
/usr/local/share/ →
/usr/local/share/applications/
/usr/share/ → /usr/share/applications/
*.desktop ファイルはこれらの applications
ディレクトリーでこの順番でスキャンされます。
|
ヒント |
|---|---|
|
ユーザーによるカスタムの GUI メニュー項目は |
|
ヒント |
|---|---|
|
同様に、もしこれらのベースディレクトリーの下の |
|
ヒント |
|---|---|
|
同様に、もし |
一部のプログラムは他のプログラムを自動的にスタートします。このプロセスをカスタム化する上でのチェックポイントを次に記します。
アプリケーション設定メニュー:
GNOME デスクトップ: "Settings" → "System" → "Details" → "Default Applications"
KDE デスクトップ: "K" → "Control Center" → "KDE Components" → "Component Chooser"
Iceweasel ブラウザー: "Edit" → "Preferences" → "Applications"
mc(1):
"/etc/mc/mc.ext"
"$BROWSER" や "$EDITOR" や
"$VISUAL" や "$PAGER" といった環境変数
(eviron(7)
参照下さい)
The
update-alternatives(1)
system for programs such as "editor",
"view", "x-www-browser",
"gnome-www-browser", and "www-browser"
(see 「デフォールトのテキストエディターの設定」)
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.11 SAK コマンドキーのリスト
| Alt-SysRq に続くキー | アクションの説明 |
|---|---|
r
|
X クラッシュの後でキーボードを raw (生コード発生) モードから復旧 |
0
|
エラーメッセージを減らすべくコンソールログレベルを 0 と変更 |
k
|
全ての現仮想ターミナル上の全てのプロセスを停止 (Kll) |
e
|
init(8) 以外の全てのプロセスに、SIGTERM を送信 |
i
|
init(8) 以外の全てのプロセスに、SIGKILL を送信 |
s
|
データーが壊れないように全てのマウントされたファイルシステムをsync (同期)します。 |
u
|
全てのマウントされたファイルシステムを読出し専用で再マウント (アンマウント、umount) |
b
|
同期することもアンマウントする事も無しに、システムをリブート (Reboot) |
|
ヒント |
|---|---|
|
常軌を理解するためには、signal(7) と kill(1) と sync(1) のマンページを読みましょう。. |
"Alt-SysRq s" と "Alt-SysRq u" と "Alt-SysRq r" の組み合わせは、非常に悪い状況からの脱出しシステムを止めることなく使えるキーボドアクセスを回復するのに有効です。
"/usr/share/doc/linux-doc-3.*/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.12 ハードウエアー識別ツールのリスト
| パッケージ | ポプコン | サイズ | 説明 |
|---|---|---|---|
pciutils
|
V:175, I:993 | 1220 | Linux PCI ユーティリティー: lspci(8) |
usbutils
|
V:103, I:866 | 721 | Linux USB ユーティリティー: lsusb(8) |
pcmciautils
|
V:21, I:40 | 94 | Linux のための PCMCIA ユーティリティー: pccardctl(8) |
scsitools
|
V:0, I:4 | 365 | SCSI ハードウエアー管理のためのツール集: lsscsi(8) |
procinfo
|
V:1, I:15 | 122 |
"/proc" から得られるシステム情報:
lsdev(8)
|
lshw
|
V:9, I:86 | 671 | ハードウエアー設定に関する情報: lshw(1) |
discover
|
V:39, I:938 | 90 | ハードウエアー識別システム: discover(8) |
GNOME や KDE のような現代的な GUI のデスクトップ環境ではほとんどのハードウエアー設定が付随する GUI 設定ツールを通じて管理できますが、それらの設定の基本的手法を知っておくのは良い事です。
表9.13 ハードウエアー設定ツールのリスト
| パッケージ | ポプコン | サイズ | 説明 |
|---|---|---|---|
console-setup
|
V:330, I:945 | 438 | Linux コンソールのフォントとキーテーブルユーティリティー |
x11-xserver-utils
|
V:361, I:589 | 516 | X サーバーユーティリティー: xset(1)、xmodmap(1) |
acpid
|
V:346, I:628 | 143 | Advanced Configuration and Power Interface (ACPI) によって起こるイベントの管理のためのデーモン |
acpi
|
V:28, I:603 | 45 | ACPI デバイス上の情報を表示するユーティリティー |
apmd
|
V:0, I:7 | 132 | Advanced Power Management (APM) によって起こるイベントの管理のためのデーモン |
sleepd
|
V:0, I:0 | 79 | 非使用状況のときにラップトップをスリープさせるデーモン |
hdparm
|
V:345, I:567 | 246 | ハードディスクアクセスの最適化 (「ハードディスクの最適化」参照下さい) |
smartmontools
|
V:120, I:191 | 1716 | S.M.A.R.T. を使ってストレージシステムを制御監視 |
setserial
|
V:5, I:11 | 113 | シリアルポートの管理ツール集 |
memtest86+
|
V:1, I:34 | 2391 | メモリーハードウエアー管理のためのツール集 |
scsitools
|
V:0, I:4 | 365 | SCSI ハードウエアー管理のためのツール集 |
setcd
|
V:0, I:1 | 35 | コンパクトデバイスアクセス最適化 |
big-cursor
|
I:0 | 27 | X のための大きなマウスカーソール |
上記で、ACPI はAPM より新しい電力管理システムの枠組みです。
|
ヒント |
|---|---|
|
最近のシステム上の CPU フリーケンシースケーリングは |
以下はシステムとハードウエアーの時間を MM/DD hh:mm, CCYY (月/日 時:分, 年) に設定します。
# date MMDDhhmmCCYY # hwclock --utc --systohc # hwclock --show
Debian システムでは時間は通常地域の時間が表示されますが、ハードウエアーとシステムの時間は通常 UTC(GMT) を使います。
ハードウエアー (BIOS) 時間が UTC に設定されている場合は、"/etc/default/rcS"
の中の設定を "UTC=yes" と変更します。
Debian システムが使うタイムゾーンは以下のようにして再設定できます。
# dpkg-reconfigure tzdata
ネットワーク経由でシステムの時間を更新したい場合には、ntp や
ntpdate や chrony 等のパッケージを使って NTP サービスを利用することを考えます。
|
ヒント |
|---|---|
|
systemd の下では、ネットワーク時間同期には上記と代わり
|
次を参照下さい。
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 のためのサウンドカードのためのデバイスドライバーは Advanced Linux Sound Architecture (ALSA) で提供されています。ALSA は過去の Open Sound System (OSS) と互換性のためのエミュレーションモードを提供します。
|
ヒント |
|---|---|
|
" |
|
ヒント |
|---|---|
|
音が出ない場合ですが、あなたのスピーカーが消音された出力につながっているかもしれません。現代的なサウンドシステムには多くの出力があります。 |
アプリケーションソフトはサウンドデバイスに直接アクセスするようにばかりでなく標準的なサウンドサーバーシステム経由で間接的にアクセスするように設定されているかもしれません。
表9.14 サウンドパッケージのリスト
| パッケージ | ポプコン | サイズ | 説明 |
|---|---|---|---|
alsa-utils
|
V:389, I:535 | 2103 | ALSA を設定し使用するユーティリティー |
oss-compat
|
V:3, I:40 | 7 |
ALSA の下で "/dev/dsp not found" エラーを防ぐ OSS 互換性
|
jackd
|
V:4, I:28 | 32 | JACK Audio Connection Kit. (JACK) サーバー (低遅延) |
libjack0
|
V:0, I:16 | 337 | JACK Audio Connection Kit. (JACK) ライブラリー (低遅延) |
nas
|
V:0, I:0 | 239 | Network Audio System (NAS) サーバー |
libaudio2
|
V:43, I:559 | 161 | Network Audio System (NAS) ライブラリー |
pulseaudio
|
V:372, I:512 | 6105 | PulseAudio サーバー、ESD 代替 |
libpulse0
|
V:269, I:656 | 989 | PulseAudio クライアント、ESD 代替 |
libgstreamer1.0-0
|
V:249, I:529 | 4860 | GStreamer: GNOME サウンドエンジン |
libphonon4
|
I:211 | 672 | Phonon: KDE サウンドエンジン |
各ポピュラーなデスクトップ環境では普通共通のサウンドエンジンがあります。アプリケーションに使われるそれぞれのサウンドエンジンはそれと異なるサウンドサーバーにつなぐようにもできます。
スクリーンセーバーを無効にするには、次のコマンドを使います。
表9.15 スクリーンセーバーを無効にするコマンドのリスト
| 環境 | コマンド |
|---|---|
| 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
メモリー使用状況を確認するのに2つのリソースがあります。
"/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
「dmesg は 990 MB 空いているという一方、free -k は 320 MB 空いていると言っている。 600 MB 以上行方不明だ …」 と不思議かもれません。
"Mem:" 行の "used" のサイズが大きかったり
"free" のサイズが小さかったりについて悩まないでおきましょう。それらの1行下の
(次の例では675404と321780) を読んで安心して下さい。
1GB=1048576k の DRAM (video システムがこのメモリーの一部を使用) が付いている私の MacBook では次のようになっています。
表9.16 レポートされるメモリーサイズのリスト
| 報告 | サイズ |
|---|---|
| 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.17 システムセキュリティーや整合性確認のためのツールリスト
| パッケージ | ポプコン | サイズ | 説明 |
|---|---|---|---|
logcheck
|
V:11, I:13 | 152 | システムログの異常を管理者にメールするデーモン |
debsums
|
V:6, I:38 | 120 | MD5 チェックサムを使ってインストールされたパッケージファイルを検証するユーティリティー |
chkrootkit
|
V:7, I:27 | 954 | ルートキット検出ソフト |
clamav
|
V:15, I:67 | 893 | Unix 用アンチウィルスユーティリティー - コマンドラインインターフェース |
tiger
|
V:3, I:3 | 2485 | システムセキュリティーの脆弱性を報告 |
tripwire
|
V:3, I:4 | 11480 | ファイルやディレクトリーの整合性チェックソフト |
john
|
V:2, I:14 | 449 | アクティブなパスワードクラッキングツール |
aide
|
V:2, I:2 | 2038 | 先進的進入検出環境 - 静的ライブラリー |
integrit
|
V:0, I:0 | 313 | ファイル整合性確認プログラム |
crack
|
V:0, I:0 | 128 | パスワード推定プログラム |
次のシンプルなスクリプトを使うと、典型的な間違いの全員書込み可のファイルパーミッションをチェックできます。
# find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \)
|
注意 |
|---|---|
|
|
Linux のlive CDs とかレスキューモードで debian-installer CDs であなたのシステムをブートすることでブートデバイス上のデーターストレージの再設定が簡単にできます。
ディスク空間使用状況は mount と coreutils と
xdu パッケージが提供するプログラムで評価できます:
mount(8) はマウントされたファイルシステム (= ディスク) すべてを報告します。
df(1) はファイルシステムのディスク空間使用状況を報告します。
du(1) はディレクトリーツリーのディスク空間使用状況を報告します。
|
ヒント |
|---|---|
|
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.18 ディスクパーティション管理パッケージのリスト
| パッケージ | ポプコン | サイズ | GPT | 説明 |
|---|---|---|---|---|
util-linux
|
V:877, I:999 | 3328 | 非サポート | fdisk(8) と cfdisk(8) を含む雑多なシステムユーティリティー |
parted
|
V:368, I:572 | 278 | サポート | GNU Parted ディスクパーティションとリサイズのプログラム |
gparted
|
V:25, I:146 | 7231 | サポート |
libparted ベースの GNOME パーティションエディター
|
gdisk
|
V:60, I:506 | 779 | サポート | GPT ディスク用パーティションエディター |
kpartx
|
V:14, I:27 | 84 | サポート | パーティション用のデバイスマッピングを作成するプログラム |
|
注意 |
|---|---|
|
parted(8) はファイルシステムを生成やリサイズも出きるということですが、そのようなことは mkfs(8) (mkfs.msdos(8) と mkfs.ext2(8) と mkfs.ext3(8) とmkfs.ext4(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 システム」を参照下さい。 |
LVM2 は Linux カーネル用の 論理ボリュームマネージャー です。LVM2 を使うと、ディスクパーティションを物理的ハードディスクではなく論理ボリューム上の作成できるようになります。
LVMには以下が必要です。
Linux カーネルによる device-mapper サポート (Debian カーネルではデフォルト)
ユーザースペースの device-mapper サポートライブラリー (libdevmapper* パッケージ)
ユーザースペースの LVM2 ツール (lvm2 パッケージ)
以下のマンページから LVM2 を学び始めましょう。
lvm(8): LVM2 機構の基本 (全 LVM2 コマンドのリスト)
lvm.conf(5): LVM2 の設定ファイル
lvs(8): 論理ボリュームの情報を報告します
vgs(8): ボリュームグループの情報を報告します
pvs(8): 物理ボリュームの情報を報告します
ext4 ファイルシステム用に e2fsprogs
パッケージは次を提供します。
mkfs(8)
と
fsck(8)
コマンドは各種ファイルシステム依存プログラム (mkfs.fstype や
fsck.fstype) のフロントエンドとして e2fsprogs
により提供されています。ext4
ファイルシステム用は、mkfs.ext4(8)
と
fsck.ext4(8)
で、それぞれ
mke2fs(8)
と
e2fsck(8)
にシムリンクされています。
Linux によってサポートされる各ファイルシステムでも、類似コマンドが利用可能です。
表9.19 ファイルシステム管理用パッケージのリスト
| パッケージ | ポプコン | サイズ | 説明 |
|---|---|---|---|
e2fsprogs
|
V:535, I:999 | 1224 | ext2/ext3/ext4 ファイルシステムのためのユーティリティー |
reiserfsprogs
|
V:10, I:25 | 891 | Reiserfs ファイルシステムのためのユーティリティー |
dosfstools
|
V:102, I:570 | 235 | FAT ファイルシステムのためのユーティリティー (Microsoft: MS-DOS, Windows) |
xfsprogs
|
V:18, I:88 | 4664 | XFS ファイルシステムのためのユーティリティー (SGI: IRIX) |
ntfs-3g
|
V:218, I:563 | 1355 | NTFS ファイルシステムのためのユーティリティー (Microsoft: Windows NT, …) |
jfsutils
|
V:1, I:13 | 1533 | JFS ファイルシステムのためのユーティリティー (IBM: AIX, OS/2) |
reiser4progs
|
V:0, I:5 | 1325 | Reiser4 ファイルシステムのためのユーティリティー |
hfsprogs
|
V:0, I:9 | 303 | HFS と HFS Plus ファイルシステムのためのユーティリティー (Apple: Mac OS) |
btrfs-tools
|
V:3, I:35 | 29 | btrfs ファイルシステムのためのユーティリティー |
zerofree
|
V:2, I:65 | 25 | ext2/3/4 ファイルシステムのフリーブロックをゼロにセットするプログラム |
|
ヒント |
|---|---|
|
Ext4 ファイルシステムは Linux システムのためのデフォルトのファイルシステムで、特定の使用しない理由がない限りこれを使用することが強く推奨されます。 |
|
ヒント |
|---|---|
|
Btrfs ファイルシステムが Linux カーネル 3.2 (Debian
|
|
警告 |
|---|---|
|
カーネル空間でのライブ fsck(8) 機能やブートローダーサポートが提供されるようになるまでは、Btrfs をあなたのクリチカルなデーターに用いるべきではありません。 |
|
ヒント |
|---|---|
|
一部のツールはファイルシステムへのアクセスを Linux カーネルのサポート無しでも可能にします (「ディスクをマウントせずに操作」参照下さい)。 |
mkfs(8) コマンドは Linux システム上でファイルシステムを生成します。fsck(8) コマンドは Linux システム上でファイルシステムの整合性チェックと修理機能を提供します。
現在 Debian は、ファイルシステム形成後に定期的な fsck 無しがデフォルトです。
|
注意 |
|---|---|
|
一般的に |
|
ヒント |
|---|---|
|
" |
|
ヒント |
|---|---|
|
ブートスクリプトから実行される
fsck(8)
コマンドの結果を " |
"/etc/fstab" により静的なファイルシステム設定がなされます。例えば、
# <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 UUID=709cbe4c-80c1-56db-8ab1-dbce3146d2f7 / ext4 noatime,errors=remount-ro 0 1 UUID=817bae6b-45d2-5aca-4d2a-1267ab46ac23 none swap sw 0 0 /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0
|
ヒント |
|---|---|
|
UUID (「UUID を使ってパーティションをアクセス」参照下さい)
は、" |
ファイルシステムのパーフォーマンスや性格はそれに使われるマウントオプションによって最適化できます (fstab(5) と mount(8) 参照下さい)。
"defaults" オプションはデフォールトのオプションが次の意味です:
"rw,suid,dev,exec,auto,nouser,async"。(一般的)
"noatime" もしくは "relatime"
オプションは読出しアクセスを高速化するのに非常に効果的です。(一般的)
"user" オプションは通常ユーザーがファイルシステムをマウント出来るようにします。このオプションは
"noexec,nosuid,nodev" オプションの組み合わせの意味です。(一般的、CD や
usbストレージデバイスに使用)
"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 に変換します。(アンマウントしたファイルシステムに対して実行します。)
|
警告 |
|---|---|
|
ハードディスクの設定はデーターの整合性にとって非常に危険な事なので、その設定をさわる前にお使いのハードウエアーをチェックし 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"
としてそれを減速して使えば読めるかもしれません。
ソリッドステートドライブ (SSD) のパーフォーマンスやディスク消耗は以下のようにすると最適化できます。
最新の Linux カーネルを使用。 (>=3.2)
ディスク読み出しアクセス時のディスク書き込みの低減。
"noatime" か "relatime" マウントオプションを
/etc/fstab 中で設定します。
TRIM コマンドを有効にします。
SSD に最適化したディスクスペース配分手順の有効化。
"ssd" マウントオプションを /etc/fstab 中で Btrfs
に関して設定します。
ラップトップ PC の場合、システムがデーターをディスクに書き出すのを10 分間隔とします。
"commit=600" マウントオプションを /etc/fstab
中で設定します。fstab(5)
参照下さい。
AC 操作時も laptop-mode を用いるように pm-utils を設定します。 Debian BTS #659260 参照下さい。
|
警告 |
|---|---|
|
書き出しを通常の 5 秒間隔から 10 分間隔に変更すると電源喪失時にデーターが壊れやすくなります。 |
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)
デーモンは、警告の通知の仕方を含めて |
通常アプリケーションは一時保存ディレクトリ "/tmp" のもとに一時ファイルを作成します。もし
"/tmp" が十分なスペースを提供できない場合、行儀のいいプログラムなら
$TMPDIR 変数を使ってそのような一時保存ディレクトリを指定できます。
インストール時に論理ボリュームマネージャー (LVM) (Linux 機能) 上に作られたパーティションは、大掛かりなシステムの再設定無しに複数のストレージデバイスにまたがる LVM 上のエクステントを継ぎ足したりその上のエクステントを切り捨てることで簡単にサイズ変更が出きます。
空のパーティションがあれば (例えば "/dev/sdx")、それを
mkfs.ext4(1)
を使ってフォーマットし、それをあなたが空間をより必要とするディレクトリーに
mount(8)
することができます。(元来あったデーター内容はコピーする必要があります。)
$ sudo mv work-dir old-dir $ sudo mkfs.ext4 /dev/sdx $ sudo mount -t ext4 /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
If you have usable space in another partition (e.g.,
"/path/to/empty" and "/path/to/work"),
you can create a directory in it and stack that on to an old directory
(e.g., "/path/to/old") where you need space using the
OverlayFS for Linux kernel 3.18 or newer
(Debian Stretch 9.0 or newer).
$ sudo mount -t overlay overlay \ -olowerdir=/path/to/old-dir,upperdir=/path/to/empty,workdir=/path/to/work
ここで、"/path/to/old" 上に書き込むには、読み書きが許可されたパーティション上に
"/path/to/empty" と "/path/to/work"
があることが必要です。
|
注意 |
|---|---|
|
This is a deprecated method. Some software may not function well with "symlink to a directory". Instead, use the "mounting" approaches described in the above. |
使える空間がある他のパーティション中に空のディレクトリーがあれば (例えば
"/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
|
警告 |
|---|---|
|
"ディレクトリーへのシムリンク" を " |
次に、ディスクイメージの操作を論じます。
例えば2番目の SCSI もしくはシリアル ATA ドライブ "/dev/sdb"
等の、アンマウントされたドライブのディスクイメージファイル "disk.img"
はcp(1)
か
dd(1)
を用いれば次のようにして作れます。
# cp /dev/sdb disk.img # dd if=/dev/sdb of=disk.img
プライマリ IDE ディスクの最初のセクターにある伝統的 PC のマスターブートレコード (MBR) (「ディスクパーティション設定」参照下さい) のディスクイメージは、dd(1) を用いれば次のようにして作れます。
# dd if=/dev/hda of=mbr.img bs=512 count=1 # dd if=/dev/hda of=mbr-nopart.img bs=446 count=1 # dd if=/dev/hda of=mbr-part.img skip=446 bs=1 count=66
"mbr.img": パーティションテーブル付きの MBR
"mbr-nopart.img": パーティションテーブル抜きの MBR。
"mbr-part.img": MBR のパーティションテーブルのみ。
ブートディスクとして SCSI ドライブ もしくはシリアル ATA デバイスが使われる場合、"/dev/hda"
を"/dev/sda" に置き換えて下さい。
オリジナルディスクのパーティションのイメージを作る場合には、"/dev/hda"
を"/dev/hda1" 等で置き換えます。
ディスクイメージファイル "disk.img"
はdd(1)
を使ってサイズがマッチする例えば "/dev/sdb" という2番目の SCSI
ドライブに次のようにして書き込むことができます。
# dd if=disk.img of=/dev/sdb
同様にディスクパーティションイメージファイル "partition.img" はサイズがマッチする例えば
"/dev/sdb1" という2番目の SCSI
ドライブの1番目のパーティションに次のようにして書き込むことができます。
# dd if=partition.img of=/dev/sdb1
単一パーティションイメージを含むディスクイメージ "partition.img" は次のように loop デバイスを使いマウントしアンマウントできます。
# losetup -v -f partition.img Loop device is /dev/loop0 # mkdir -p /mnt/loop0 # mount -t auto /dev/loop0 /mnt/loop0 ...hack...hack...hack # umount /dev/loop0 # losetup -d /dev/loop0
これは以下のように簡略化出来ます。
# mkdir -p /mnt/loop0 # mount -t auto -o loop partition.img /mnt/loop0 ...hack...hack...hack # umount partition.img
複数のパーティションを含むディスクイメージ "disk.img" の各パーティションは loop デバイスを使ってマウント出来ます。loop
デバイスはパーティションをデフォルトでは管理しないので、次のようにそれをリセットする必要があります。
# modinfo -p loop # verify kernel capability max_part:Maximum number of partitions per loop device max_loop:Maximum number of loop devices # losetup -a # verify nothing using the loop device # rmmod loop # modprobe loop max_part=16
これで、loop デバイスは16パーティションまで管理出来ます。
# losetup -v -f disk.img
Loop device is /dev/loop0
# fdisk -l /dev/loop0
Disk /dev/loop0: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x452b6464
Device Boot Start End Blocks Id System
/dev/loop0p1 1 600 4819468+ 83 Linux
/dev/loop0p2 601 652 417690 83 Linux
# mkdir -p /mnt/loop0p1
# mount -t ext4 /dev/loop0p1 /mnt/loop0p1
# mkdir -p /mnt/loop0p2
# mount -t ext4 /dev/loop0p2 /mnt/loop0p2
...hack...hack...hack
# umount /dev/loop0p1
# umount /dev/loop0p2
# losetup -d /dev/loop0
この他、同様の効果は kpartx パッケージの
kpartx(8)
により作られるデバイスマッパーデバイスを用いて次のようにして実現も出来ます。
# kpartx -a -v disk.img ... # mkdir -p /mnt/loop0p2 # mount -t ext4 /dev/mapper/loop0p2 /mnt/loop0p2 ... ...hack...hack...hack # umount /dev/mapper/loop0p2 ... # kpartx -d /mnt/loop0
ディスクイメージファイル "disk.img" は消去済みのファイルを綺麗に無くした綺麗なスパースイメージ
"new.img" に次のようにしてできます。
# mkdir old; mkdir new # mount -t auto -o loop disk.img old # dd bs=1 count=0 if=/dev/zero of=new.img seek=5G # mount -t auto -o loop new.img new # cd old # cp -a --sparse=always ./ ../new/ # cd .. # umount new.img # umount disk.img
もし "disk.img" が ext2 か ext3 か ext4
の場合には、zerofree パッケージの
zerofree(8)
を使うことも出来ます。
# losetup -f -v disk.img Loop device is /dev/loop3 # zerofree /dev/loop3 # cp --sparse=always disk.img new.img
5GiB まで成長可能な空のディスクイメージファイル "disk.img"
はdd(1)
と
mke2fs(8)
を使って次のようにして作成できます。
$ dd bs=1 count=0 if=/dev/zero of=disk.img seek=5G
loop デバイスを使ってこのディスクイメージ
"disk.img" 上に ext4 ファイルシステムを作成できます。
# losetup -f -v disk.img Loop device is /dev/loop1 # mkfs.ext4 /dev/loop1 ...hack...hack...hack # losetup -d /dev/loop1 $ du --apparent-size -h disk.img 5.0G disk.img $ du -h disk.img 83M disk.img
"sparse" に関して、そのファイルサイズは 5.0GiB でその実ディスク使用はたったの 83MiB
です。この相違は ext4 がスパースファイルを保持できるから可能となっています。
|
ヒント |
|---|---|
|
スパースファイルによる実際のディスク使用はそこに書かれるデーターとともに成長します。 |
「ディスクイメージファイルをマウント」にあるように loop デバイスまたはデバイスマッパーデバイスによりデバイスに同様の操作をすることで、このディスクイメージ
"disk.img"
をparted(8)
または
fdisk(8)
を使ってパーティションし
mkfs.ext4(8)
や
mkswap(8)
等を使ってファイルシステムを作れます。
"source_directory" のソースディレクトリーツリーから作られる ISO9660 イメージファイル"cd.iso" はcdrkit が提供する
genisoimage(1)
を使って次のようにして作成できます。
# genisoimage -r -J -T -V volume_id -o cd.iso source_directory
同様に、ブート可能な ISO9660 イメージファイル "cdboot.iso"
は、debian-installer のような
"source_directory" にあるディレクトリーツリーから次のようにして作成できます。
# genisoimage -r -o cdboot.iso -V volume_id \ -b isolinux/isolinux.bin -c isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table source_directory
上記では、Isolinux ブートローダー (「2段目: ブートローダー」参照下さい) がブートに使われています。
次のようにすると CD-ROM デバイスから直接 md5sum 値を計算し ISO9660 イメージを作成できます。
$ isoinfo -d -i /dev/cdrom CD-ROM is in ISO 9660 format ... Logical block size is: 2048 Volume size is: 23150592 ... # dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror | md5sum # dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror > cd.iso
|
警告 |
|---|---|
|
正しい結果を得るために上記のように Linux の ISO9660 ファイルシステム先読みバグを注意深く避けなければいけません。 |
|
ヒント |
|---|---|
|
DVD は、cdrkit が提供する wodim(1) にとっては単に大きな CD です。 |
使えるデバイスは次のようにするとみつかります。
# wodim --devices
そしてブランクの CD-R をドライブに挿入して、例えば "/dev/hda" というこのデバイスに
ISO9660 イメージファイル "cd.iso"
にwodim(1)
を使って次のようにして書込みます。
# wodim -v -eject dev=/dev/hda cd.iso
もし CD-R ではなく CD-RW が使われている場合には、次を代わりに実行して下さい。
# wodim -v -eject blank=fast dev=/dev/hda cd.iso
|
ヒント |
|---|---|
|
もしあなたのデスクトップシステムが CD
を自動的にマウントする場合、wodim(1)
を使う前に " |
もし "cd.iso" の内容が ISO9660 イメージの場合、次のようにするとそれを
"/cdrom" に手動でマウントできます。
# mount -t iso9660 -o ro,loop cd.iso /cdrom
|
ヒント |
|---|---|
|
現代的なデスクトップシステムではISO9660フォーマットされた CD のようなリムーバブルメディアを自動的にマウントします (「リムーバブルストレージデバイス」参照下さい)。 |
次に、ストレージメディア上のバイナリーデーターを直接操作することを論じます。
もっとも基本的なバイナリーファイルを閲覧方法は "od -t x1" コマンドを使うことです。
表9.20 バイナリーデーターを閲覧や編集するパッケージのリスト
| パッケージ | ポプコン | サイズ | 説明 |
|---|---|---|---|
coreutils
|
V:878, I:999 | 15016 | ファイルをダンプする od(1) がある基本パッケージ (HEX, ASCII, OCTAL, …) |
bsdmainutils
|
V:854, I:998 | 586 | ファイルをダンプする hd(1) があるユーティリティーパッケージ (HEX, ASCII, OCTAL, …) |
hexedit
|
V:1, I:11 | 62 | バイナリーエディターとビューワー (HEX, ASCII) |
bless
|
V:0, I:5 | 973 | フル機能の16進エディター (GNOME) |
okteta
|
V:1, I:20 | 1344 | フル機能の16進エディター (KDE4) |
ncurses-hexedit
|
V:0, I:2 | 128 | バイナリーエディターとビューワー (HEX, ASCII, EBCDIC) |
beav
|
V:0, I:1 | 133 | バイナリーエディターとビューワー (HEX, ASCII, EBCDIC, OCTAL, …) |
|
ヒント |
|---|---|
|
HEX は底が16の16進フォーマットです。OCTAL は底が8の8進フォーマットです。ASCII (アスキー) は情報交換用アメリカ標準コードで、通常の英文テキストです。EBCDIC (エビシディック) は IBM メインフレームオペレーティングシステム上で使われる拡張二進化十進数互換コードです。 |
Linux カーネルが提供するソフトウエアー RAID システムは高いレベルのストレージ信頼性を達成するためにカーネルのファイルシステムのレベルでデーターの冗長性を提供します。
アプリケーションプログラムレベルでストレージの高い信頼性を達成するようにデーター冗長性を付加するツールもあります。
データーファイルの復元と事故の証拠解析のツールがあります。
表9.23 データーファイルの復元と事故の証拠解析のリスト
| パッケージ | ポプコン | サイズ | 説明 |
|---|---|---|---|
testdisk
|
V:3, I:39 | 1315 | パーティションのスキャンとディスク復元のためのユーティリティー |
magicrescue
|
V:0, I:3 | 224 | マジックバイトを探してファイルを復元するユーティリティー |
scalpel
|
V:0, I:4 | 82 | 質素で高性能なファイル彫刻刀 |
myrescue
|
V:0, I:3 | 38 | 破壊したハードディスクからデーターを救出 |
extundelete
|
V:1, I:11 | 148 | ext3/4 ファイルシステム上のファイルの削除復元ユーティリティー |
ext4magic
|
V:0, I:3 | 232 | ext3/4 ファイルシステム上のファイルの削除復元ユーティリティー |
ext3grep
|
V:0, I:3 | 278 | ext3 ファイルシステム上のファイルの削除復元ヘルプツール |
scrounge-ntfs
|
V:0, I:3 | 45 | NTFS ファイルシステム上のデーター復元プログラム |
gzrt
|
V:0, I:0 | 57 | gzip 復元ツールキット |
sleuthkit
|
V:2, I:15 | 1113 | 証拠解析のためのツール (Sleuthkit) |
autopsy
|
V:0, I:2 | 1021 | SleuthKit のための GUI |
foremost
|
V:0, I:7 | 123 | データー復元のための証拠解析アプリケーション |
guymager
|
V:0, I:1 | 1044 | Qt 使用の証拠解析用イメージ作成ソフト |
dcfldd
|
V:0, I:5 | 94 |
証拠解析とセキュリティーのための dd の強化版
|
|
ヒント |
|---|---|
|
|
単一ファイルでバックアップするにはデーターが大きすぎる場合、そのファイル内容を例えば 2000MiB の断片にしてバックアップし、それらの断片を後日マージしてオリジナルのファイルに戻せます。
$ split -b 2000m large_file $ cat x* >large_file
|
注意 |
|---|---|
|
名前がかち合わないように " |
ログファイルのようなファイルの内容を消去するためには、rm(1) を使ってファイルを消去しその後新しい空ファイルを作成することは止めましょう。コマンド実行間にファイルがアクセスされているかもしれないのがこの理由です。次のようにするのがファイル内容を消去する安全な方法です。
$ :>file_to_be_cleared
次のコマンドはダミーや空のファイルを作成します。
$ dd if=/dev/zero of=5kb.file bs=1k count=5 $ dd if=/dev/urandom of=7mb.file bs=1M count=7 $ touch zero.file $ : > alwayszero.file
次のファイルを見つかります。
"5kb.file" は5KB のゼロの連続です。
"7mb.file" は7MB のランダムなデーターです。
"zero.file" は0バイト長のファイルかもしれません。もしファイルが存在する時は、その
mtime を更新しその内容と長さを保持します。
"alwayszero.file" は常に0バイト長ファイルです。もしファイルが存在する時は
mtime を更新しファイル内容をリセットします。
"/dev/sda" にある USB
メモリースティック等のハードディスク類似デバイス全体のデーターを完全に消すいくつかの方法があります。
|
注意 |
|---|---|
|
次のコマンドを実行する前にまず USB メモリースティックの場所を
mount(8)
を使ってチェックします。" |
次のようにしてデーターを0にリセットして全消去します。
# dd if=/dev/zero of=/dev/sda
次のようにしてランダムデーターを上書きして全消去します。
# dd if=/dev/urandom of=/dev/sda
次のようにしてランダムデーターを非常に効率的に上書きして全消去します。
# shred -v -n 1 /dev/sda
Debian インストーラ CD 等の多くのブート可能な Linux の CD のシェルから
dd(1)
が利用可能ですから、"/dev/hda" や "/dev/sda"
等のシステムハードディスクに対して同類のメディアから消去コマンドを実行することでインストールされたシステムを完全に消去することができます。
データーの消去はファイルシステムからアンリンクされているだけなので、例えば "/dev/sdb1"
のようなハードディスク (USB メモリースティック)
上の使用されていない領域には消去されたデーター自身が含まれているかもしれません。これらに上書きすることで綺麗に消去できます。
# mount -t auto /dev/sdb1 /mnt/foo # cd /mnt/foo # dd if=/dev/zero of=junk dd: writing to `junk': No space left on device ... # sync # umount /dev/sdb1
|
警告 |
|---|---|
|
あなたの USB メモリースティックではこれで普通十分です。でもこれは完璧ではありません。消去されたファイル名や属性はファイルシステム中に隠れて残っているかもしれません。 |
ファイルをうっかり消去しても、そのファイルが何らかのアプリケーション (読出しか書込み) によって使われている限り、そのようなファイルを回復出来ます。
例えば、次を試してみて下さい:
$ echo foo > bar $ less bar $ ps aux | grep ' less[ ]' bozo 4775 0.0 0.0 92200 884 pts/8 S+ 00:18 0:00 less bar $ rm bar $ ls -l /proc/4775/fd | grep bar lr-x------ 1 bozo bozo 64 2008-05-09 00:19 4 -> /home/bozo/bar (deleted) $ cat /proc/4775/fd/4 >bar $ ls -l -rw-r--r-- 1 bozo bozo 4 2008-05-09 00:25 bar $ cat bar foo
この代わりに、(lsof パッケージがインストールされている時) もう一つのターミナルで次のように実行します。
$ ls -li bar 2228329 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:02 bar $ lsof |grep bar|grep less less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/bar $ rm bar $ lsof |grep bar|grep less less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/bar (deleted) $ cat /proc/4775/fd/4 >bar $ ls -li bar 2228302 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:05 bar $ cat bar foo
ハードリンクのあるファイルは "ls -li" を使って確認できます、
$ ls -li total 0 2738405 -rw-r--r-- 1 root root 0 2008-09-15 20:21 bar 2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 baz 2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 foo
"baz" も "foo" もリンク数が "2" (>1)
でハードリンクがある事を示しています。これらの inode 番号は共通の "2738404"
です。これはこれらがハードリンクされた同じファイルということを意味します。ハードリンクされた全てのファイルを偶然うまく見つけられない場合は、それを例えば
"2738404" という inode で次のようにして探せます。
# find /path/to/mount/point -xdev -inum 2738404
あなたの PC への物理的アクセスがあると、誰でも簡単に root 特権を獲得できあなたの PC の全てのファイルにアクセスできます (「root パスワードのセキュリティー確保」参照下さい)。これが意味するところは、あなたの PC が盗まれた場合にログインのパスワードではあなたのプライベートでセンシティブなデーターを守れないと言うことです。それを達成するにはデーターの暗号化技術を適用しなければいけません。GNU プライバシーガード (「データーセキュリティーのインフラ」参照下さい) はファイルを暗号化できますが、少々手間がかかります。
dm-crypt と eCryptfs は最小限のユーザー努力でできる自動的なデーターの暗号化を Linux のカーネルモジュールその物を使って提供します。
表9.24 データー暗号化ユーティリティーのリスト
| パッケージ | ポプコン | サイズ | 説明 |
|---|---|---|---|
cryptsetup
|
V:34, I:79 | 376 | 暗号化されたブロックデバイス (dm-crypt / LUKS) のためのユーティリティー |
cryptmount
|
V:3, I:4 | 225 | ノーマルユーザーによるマウント/アンマウントに焦点を当てた暗号化されたブロックデバイス (dm-crypt / LUKS) のためのユーティリティー |
ecryptfs-utils
|
V:6, I:9 | 396 | 暗号化されたスタックドファイルシステム (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 1024 -s -w -t random -v /dev/sdx # fdisk /dev/sdx ... "n" "p" "1" "return" "return" "w" # cryptsetup luksFormat /dev/sdx1 ... # cryptsetup open --type luks /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.ext4 /dev/sdx1" を使って ext4
等の異なったフォーマットで記録メディアをフォーマットしても良いです。
|
注記 |
|---|---|
|
もしデーターのセキュリティーが本当に偏執狂的に気になるなら、上記例で複数回の重ね書きをする必要があるかもしれません。でもこの操作は非常に時間がかかります。 |
オリジナルの "/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
dm-crypt/LUKS を用いて "/dev/sdc5"
上に作成された暗号化されたディスクパーティションは以下のようにして "/mnt" マウントできます:
$ sudo cryptsetup open /dev/sdc5 ninja --type luks Enter passphrase for /dev/sdc5: **** $ sudo lvm lvm> lvscan inactive '/dev/ninja-vg/root' [13.52 GiB] inherit inactive '/dev/ninja-vg/swap_1' [640.00 MiB] inherit ACTIVE '/dev/goofy/root' [180.00 GiB] inherit ACTIVE '/dev/goofy/swap' [9.70 GiB] inherit lvm> lvchange -a y /dev/ninja-vg/root lvm> exit Exiting. $ sudo mount /dev/ninja-vg/root /mnt
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 パスワードのセキュリティー確保」参照下さい)。 |
Debian はモジュール化された Linux カーネルをサポートされるアーキテクチャに対してパッケージとしてディストリブートしています。
Linux カーネル 2.4 と比較して特記すべき Linux カーネル 2.6/3.x の機能がいくつかあります。
デバイスは udev システムで生成されます (「udev システム」参照下さい)。
IDE CD/DVD デバイスへの読出し/書込みアクセスは ide-scsi モジュールを使用しません。
ネットワークのパケットフィルター機能は iptable カーネルモジュールを使います。
Linux 2.6.39 から Linux 3.0 へとバージョンが飛んだのは、大きな技術的な変更があったからでは無く 20 周年記念が理由です。
多くの Linux の機能はカーネル変数を使い次のように設定されます。
ブートローダーにより初期化されたカーネル変数 (「2段目: ブートローダー」参照下さい)
実行時に sysfs によりアクセスできるカーネル変数に関して sysctl(8) を用い変更されたカーネル変数 (「procfs と sysfs」参照下さい)
モジュールが起動された際の modprobe(8) の引数により設定されるモジュール変数 (「ディスクイメージファイルをマウント」参照下さい)
linux-doc-3.* パッケージで供給される Linux カーネル文書
("/usr/share/doc/linux-doc-3.*/Documentation/filesystems/*")
中の "kernel-parameters.txt(.gz)" や関連する他の文書を参照下さい。
ほとんどの普通のプログラムはカーネルヘッダーを必要としませんし、コンパイルするのにそれらを直接用いるとコンパイルがうまくいかないかもしれません。普通のプログラムは
Debian システム上では (glibc ソースパッケージから生成される)
libc6-dev パッケージが提供する
"/usr/include/linux" や
"/usr/include/asm" 中のヘッダを使ってコンパイルするべきです。
|
注記 |
|---|---|
|
外部ソースからのカーネルモジュールやオートマウンターデーモン ( |
Debian にはカーネルと関連モジュールをコンパイルする独自の方法があります。
表9.25 Debian システム上でカーネルの再コンパイルためにインストールする重要パッケージのリスト
| パッケージ | ポプコン | サイズ | 説明 |
|---|---|---|---|
build-essential
|
I:445 | 20 |
Debian パッケージをビルドする上で不可欠なパッケージ:
make、gcc、…
|
bzip2
|
V:196, I:946 | 184 | bz2 ファイルのための圧縮と解凍ユーティリティー |
libncurses5-dev
|
V:15, I:147 | 993 | ncurses のためのデベロッパ用ライブラリーと文書 |
git
|
V:279, I:436 | 33191 | git: Linux カーネルによって使われている分散型リビジョンコントロールシステム |
fakeroot
|
V:32, I:495 | 215 | パッケージを非 root としてビルドするための fakeroot 環境を提供 |
initramfs-tools
|
V:256, I:991 | 105 | initramfs をビルドするツール (Debian 固有) |
dkms
|
V:97, I:207 | 282 | 動的カーネルモジュールサポート (DKMS) (汎用) |
devscripts
|
V:9, I:64 | 2175 | Debian パッケージメンテナ用ヘルパースクリプト (Debian 固有) |
「2段目: ブートローダー」 中で initrd
を使う場合、initramfs-tools(8)
と
update-initramfs(8)
と
mkinitramfs(8)
と
initramfs.conf(5)
中の関連情報をしっかり読んで下さい。
|
警告 |
|---|---|
|
Linux カーネルソースをコンパイルする時にソースツリー中のディレクトリー (例えば
" |
|
注記 |
|---|---|
|
Debian の |
|
注記 |
|---|---|
|
動的カーネルモジュールサポート (DKMS) は、カーネル全体を変えること無く個別カーネルモジュールをアップグレードできるようにする新しいディストリビューションに依存しない枠組みです。これはアウトオブツリーのモジュールの管理方法です。これはあなたがカーネルをアップグレードする際のモジュールの再構築を簡単にもします。 |
アップストリームのカーネルソースからカーネルバイナリーパッケージを作成するには、それが提供するターゲットを用いて
"deb-pkg" とします。
$ sudo apt-get build-dep linux $ cd /usr/src $ wget http://www.kernel.org/pub/linux/kernel/v3.11/linux-<version>.tar.bz2 $ tar -xjvf linux-<version>.tar.bz2 $ cd linux-<version> $ cp /boot/config-<version> .config $ make menuconfig ... $ make deb-pkg
|
ヒント |
|---|---|
|
linux-source-<version> パッケージはDebian パッチがあたった Linux カーネルソースを
" |
Debian
カーネルソースパッケージから特定のバイナリパッケージをビルドするには、"debian/rules.gen" 中の
"binary-arch_<architecture>_<featureset>_<flavour>"
ターゲットを使います。
$ sudo apt-get build-dep linux $ apt-get source linux $ cd linux-3.* $ fakeroot make -f debian/rules.gen binary-arch_i386_none_686
詳細は以下参照下さい:
Debian Wiki: KernelFAQ
Debian Wiki: Debianカーネル
Debian Linux Kernel Handbook: https://kernel-handbook.debian.net
ハードウエアードラーバーとはターゲットシステム上で実行されるコードです。ほとんどのハードウエアードライバーは現在フリーソフトウエアーとして入手可能で通常の
main エリアにある Debian カーネルパッケージに含まれています。
ファームウエアーとはデバイスにロードされるコードやデーター (例えば CPU マイクロコードや、GPU上で実行されるレンダリングコードや、FPGA / CPLD データー等々)です。一部のファームウエアーパッケージはフリーソフトウエアーとして入手可能ですが、多くのファームウエアーパッケージはソースの無いバイナリーデーターを含むためにフリーソフトウエアーとして入手不可能です。
firmware-linux-free (main)
firmware-linux-nonfree (non-free)
firmware-linux-* (non-free)
*-firmware (non-free)
intel-microcode (non-free)
amd64-microcode (non-free)
non-free や contrib パッケージは Debian
システムの一部でないことに注意して下さい。non-free や
contrib エリアへのアクセスの有効化や無効化は 「Debian アーカイブの基本」 に説明されています。 「Debian は 100% フリーソフトウェアーです」 に記載されているように
non-free や contrib
パッケージを使用に付帯するマイナスを認識すべきです。
仮想化されたシステムを利用すると単一ハード上で同時に複数のシステムのインスタンスを実行することが加能となります。
|
ヒント |
|---|---|
Debian には、単純な chroot ではない仮想化やエミュレーション関連のパッケージがあります。一部のパッケージはあなたがそのような環境をセットアップする事を援助します。
表9.26 仮想化ツールのリスト
| パッケージ | ポプコン | サイズ | 説明 |
|---|---|---|---|
schroot
|
V:7, I:10 | 2659 | Debian バイナリーパッケージを chroot 中で実行する専用ツール |
sbuild
|
V:1, I:4 | 283 | Debian ソースから Debian バイナリーパッケージをビルドするツール |
pbuilder
|
V:2, I:17 | 958 | Debian パッケージの個人的なパッケージビルドソフト |
debootstrap
|
V:6, I:65 | 261 | 基本的な Debian システムのブートストラップ (sh で書かれている) |
cdebootstrap
|
V:0, I:3 | 112 | Debian システムのブートストラップ (C で書かれている) |
virt-manager
|
V:8, I:33 | 7722 | 仮想マシンマネージャー: 仮想マシンを管理するデスクトップアプリケーション |
libvirt-clients
|
V:27, I:49 | 1933 | libvirt ライブラリー用のプログラム |
bochs
|
V:0, I:1 | 4086 | Bochs: IA-32 PC エミュレーター |
qemu
|
I:37 | 673 | QEMU: 高速で汎用のプロセッサエミュレーター |
qemu-system
|
I:40 | 92 | QEMU: フルシステムエミュレーションのバイナリ |
qemu-user
|
V:3, I:39 | 61611 | QEMU: ユーザーモードエミュレーションのバイナリ |
qemu-utils
|
V:10, I:96 | 5418 | QEMU: ユーティリティー |
qemu-kvm
|
V:20, I:69 | 101 | KVM: ハードウエア補助仮想化を利用する x86 ハードウエア上のフル仮想化 |
virtualbox
|
V:33, I:43 | 76054 | VirtualBox: i386 と amd64 上での x86 仮想化解決策 |
xen-tools
|
V:0, I:6 | 666 | Debian XEN 仮想サーバーの管理ツール |
wine
|
V:23, I:101 | 184 | Wine: Windows API の実装 (標準スイート) |
dosbox
|
V:2, I:20 | 2706 | DOSBox: Tandy/Herc/CGA/EGA/VGA/SVGA グラフィクス、サウンド、DOS 付きの x86 エミュレーター |
dosemu
|
V:0, I:4 | 4891 | DOSEMU: Linux 用 DOS エミュレーター |
vzctl
|
V:1, I:3 | 1060 | OpenVZ サーバー仮想化策 - コントロールツール |
vzquota
|
V:1, I:3 | 221 | OpenVZ サーバー仮想化策 - クオータツール |
lxc
|
V:8, I:13 | 1985 | 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) で説明されています。