目次
主にコンソールからシステムを設定や管理する基本的なティップを次に記します。
There are some utility programs to help your console activities.
表9.1 List of programs to support console activities
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
mc
|
V:54, I:226 | 1482 | 「ミッドナイトコマンダー (MC)」を参照 |
bsdutils
|
V:610, I:999 | 355 | script command to make typescript of terminal session |
screen
|
V:91, I:263 | 997 | VT100/ANSI ターミナルエミュレーションを使ってのターミナルマルチプレクサ |
tmux
|
V:39, I:147 | 1106 | 代替のターミナルマルチプレクサ (代わりに "Control-B" を用いる) |
fzf
|
V:3, I:11 | 3323 | ファジーテキストファインダ |
fzy
|
V:0, I:0 | 54 | ファジーテキストファインダ |
rlwrap
|
V:1, I:17 | 330 | readline feature command line wrapper |
ledit
|
V:0, I:13 | 315 | readline feature command line wrapper |
rlfe
|
V:0, I:0 | 42 | readline feature command line wrapper |
ripgrep
|
V:3, I:14 | 4557 | fast recursive string search in the source code tree with automatic filtering |
単に script
(1) を使ってシェル活動を記録すると (「シェル活動の記録」参照下さい)、コントロール文字の入ったファイルが生成されます。このような事は次のようにして
col
(1) を使うことで避けられます。
$ script Script started, file is typescript
何なりとします … そして script
から脱出するために Ctrl-D
を押します。
$ col -bx < typescript > cleanedfile $ vim cleanedfile
シェルの活動を記録する他の方法もあります:
tee
を使う (initramfs 中のブートプロセスで有用):
$ sh -i 2>&1 | tee typescript
Use gnome-terminal
with the extend line buffer for
scrollback.
Use screen
with "^A H
" (see 「screen プログラム」) to perform recording of console.
Use vim
with ":terminal
" to enter the
terminal mode. Use "Ctrl-W N
" to exit from terminal mode
to normal mode. Use ":w typescript
" to write the buffer
to a file.
Use emacs
with "M-x shell
",
"M-x eshell
", or "M-x term
" to enter
recording console. Use "C-x C-w
" to write the buffer to
a file.
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) を参照下さい。
代替コマンドの機能については tmux
(1) を参照下さい。
In 「Bash のカスタム化」, 2 tips to allow quick navigation
around directories are described: $CDPATH
and
mc
.
If you use fuzzy text filter program, you can do without typing the exact
path. For fzf
, include following in
~/.bashrc
.
FZF_KEYBINDINGS_PATH=/usr/share/doc/fzf/examples/key-bindings.bash if [ -f $FZF_KEYBINDINGS_PATH ]; then . $FZF_KEYBINDINGS_PATH fi FZF_COMPLETION_PATH=/usr/share/doc/fzf/examples/completion.bash if [ -f $FZF_COMPLETION_PATH ]; then . $FZF_COMPLETION_PATH fi
たとえば:
You can jump to a very deep subdirectory with minimal efforts. You first
type "cd **
" and press Tab
. Then you
will be prompted with candidate paths. Typing in partial path strings,
e.g., s/d/b foo
, will narrow down candidate paths. You
select the path to be used by cd
with cursor and return
keys.
You can select a command from the command history more efficiently with
minimal efforts. You press Ctrl-R
at the command
prompt. Then you will be prompted with candidate commands. Typing in
partial command strings, e.g., vim d
, will narrow down
candidates. You select the one to be used with cursor and return keys.
Some commands such as /usr/bin/dash
which lacks command
line history editing capability can add such functionality transparently by
running under rlwrap
or its equivalents.
$ rlwrap dash -i
This provides convenient platform to test subtle points for
dash
with friendly bash
-like
environment.
After you learn basics of vim
(1) through 「Using vim」, please read Bram Moolenaar's "Seven habits of effective text
editing (2000)" to understand how vim
should be
used.
![]() |
注意 |
---|---|
Don't try to change the default key bindings without very good reasons. |
The behavior of vim
can be changed significantly by
enabling its internal features through the Ex
-mode
commands such as "set ...
" to set vim options.
These Ex
-mode commands can be included in user's vimrc
file, traditional "~/.vimrc
" or git-friendly
"~/.vim/vimrc
". Here is a very simple example
[2]:
colorscheme murphy " from /usr/share/vim/vim??/colors/*.vim filetype plugin indent on " filetype aware behavior syntax enable " Syntax highlight "set spelllang=en_us " Spell check language as en_us "set spell " Enable spell check set autoindent " Copy indent from current line set smartindent " More than autoindent (Drop/Pop after {/}) set nosmarttab " <Tab>-key always inserts blanks set backspace=indent,eol,start " Back space through everything set laststatus=2 " Always show status line set statusline=%<%f%m%r%h%w%=%y[U+%04B]%2l/%2L=%P,%2c%V
Simple customization to enable secure-modelines and classical IDE can be enabled by installing vim-scripts package and appending the following to user's vimrc file.
packadd! secure-modelines packadd! winmanager let mapleader = ' ' " Toggle paste mode with <SPACE>p set pastetoggle=<leader>p " IDE-like UI for files and buffers with <space>w nnoremap <leader>w :WMToggle<CR> " Use safer keys <C-?> for moving to another window nnoremap <C-H> <C-W>h nnoremap <C-J> <C-W>j nnoremap <C-K> <C-W>k nnoremap <C-L> <C-W>l
In order for the above keybindings to function properly, the terminal
program needs to be configured to generate "ASCII DEL" for
Backspace
-key and "Escape sequence" for
Delete
-key.
The new native Vim package system works nicely with "git
"
and "git submodule
". One such example configuration can
be found at my git repository:
dot-vim. This does essentially:
By using "git
" and "git submodule
",
latest external packages, such as
"name
", are placed into
~/.vim/pack/*/opt/name
and similar.
By adding :packadd! name
line to
user's vimrc file, these packages are placed on
runtimepath
.
Vim loads these packages on runtimepath
during its
initialization.
At the end of its initialization, tags for the installed documents are
updated with "helptags ALL
".
For more, please start vim
with "vim
--startuptime vimstart.log
" to check actual execution sequence and
time spent for each step.
Interesting external plugin packages can be found:
Vim - the ubiquitous text editor -- The official upstream site of Vim and vim scripts
VimAwsome -- The listing of Vim plugins
vim-scripts -- Debian package: a collection of vim scripts
It is quite confusing to see too many ways[3] to manage and load these external packages to
vim
. Checking the original information is the best cure.
表9.3 Information on the initialization of vim
key strokes | information |
---|---|
:help package |
explanation on the vim package mechanism |
:help runtimepath |
explanation on the runtimepath mechanism |
:version |
internal states including candidates for the vimrc file |
:echo $VIM |
the environment variable "$VIM " used to locate the vimrc
file |
:set runtimepath? |
list of directories which will be searched for all runtime support files |
:echo $VIMRUNTIME |
the environment variable "$VIMRUNTIME " used to locate
various system provided runtime support files |
Many traditional programs record their activities in the text file format
under the "/var/log/
" directory.
logrotate
(8) is used to simplify the administration of
log files on a system which generates a lot of log files.
Many new programs record their activities in the binary file format using
systemd-journald
(8) Journal service under the
"/var/log/journal
" directory.
You can log data to the systemd-journald
(8) Journal from
a shell script by using the systemd-cat
(1) command.
「システムメッセージ」と「カーネルメッセージ」を参照下さい。
注目すべきログアナライザー (aptitude
(8)
で"~Gsecurity::log-analyzer
") を次に記します。
表9.4 システムログアナライザーのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
logwatch
|
V:14, I:16 | 2328 | 綺麗な出力の Perl で書かれたログアナライザー |
fail2ban
|
V:111, I:125 | 2127 | 複数回の認証エラーを発生させる IP を使用禁止にします |
analog
|
V:3, I:100 | 3739 | ウェッブサーバーのログアナライザー |
awstats
|
V:8, I:13 | 6895 | 強力で機能の多いウェッブサーバーのログアナライザー |
sarg
|
V:1, I:2 | 845 | squid の分析レポートジェネレター |
pflogsumm
|
V:2, I:4 | 109 | Postfix ログ項目サマライザー |
syslog-summary
|
V:0, I:1 | 30 | syslog ログファイルの内容をまとめる |
fwlogwatch
|
V:0, I:0 | 477 | ファイアウォールログアナライザー |
squidview
|
V:0, I:0 | 189 | squid の access.log ファイルのモニターと分析 |
swatch
|
V:0, I:0 | 99 | 正規表現マッチ、ハイライト、フック機能付きログファイルビューワー |
crm114
|
V:0, I:0 | 1119 | 制御可能な正規表現切断機とスパムフィルター (CRM114) |
icmpinfo
|
V:0, I:0 | 44 | ICMP メッセージの解釈 |
![]() |
注記 |
---|---|
CRM114 はTRE 正規表現ライブラリーを使うファジーなフィルターを書く言語インフラを提供します。そのよくある応用はスパムメールのフィルターですが、ログアナライザーとしても使えます。 |
more
(1) や less
(1) 等のページャーツール (「ページャー」参照下さい) や、ハイライトやフォーマット用のカスタムツール (「プレーンテキストデーターをハイライトとフォーマット」参照下さい)
はテキストデーターを綺麗に表示できますが、汎用エディター (「テキストエディター」参照下さい)
が最も汎用性がありカスタム化が可能です。
![]() |
ヒント |
---|---|
|
The default display format of time and date by the "ls
-l
" command depends on the locale (see 「タイムスタンプ」 for
value). The "$LANG
" variable is referred first and it
can be overridden by the "$LC_TIME
" or
"$LC_ALL
" exported environment variables.
The actual default display format for each locale depends on the version of
the standard C library (the libc6
package) used. I.e.,
different releases of Debian had different defaults. For iso-formats, see
ISO 8601.
ロケール以上にこの時間や日付の表示フォーマットをカスタム化したいと真摯に望むなら、"--time-style
"
引数か "$TIME_STYLE
" 値を使って時間スタイル値を設定するべきです (ls
(1) と
date
(1) と "info coreutils 'ls
invocation'
" を参照下さい)。
表9.5 Display examples of time and date for the "ls -l
" command
with the time style value
時間スタイル値 | ロケール | 時間と日付の表示 |
---|---|---|
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 |
![]() |
ヒント |
---|---|
コマンドの別名を使えばコマンドライン上で長いオプションを入力しなくてもよくなります (「コマンドエイリアス」を参照下さい)。 alias ls='ls --time-style=+%d.%m.%y %H:%M' |
殆どの現代的なターミナルへのシェル出力は 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.6 画像の操作ツールのリスト
パッケージ | ポプコン | サイズ | screen | コマンド |
---|---|---|---|---|
gnome-screenshot
|
V:25, I:259 | 1134 | Wayland | screenshot application for GNOME |
flameshot
|
V:6, I:12 | 3361 | Wayland | screenshot application on steroid |
gimp
|
V:53, I:272 | 19767 | Wayland + X | screenshot in GUI menu |
x11-apps
|
V:26, I:440 | 2476 | X | xwd (1) |
imagemagick
|
I:326 | 176 | X | import (1) |
scrot
|
V:5, I:69 | 129 | X | scrot (1) |
There are specialized tools to record changes in configuration files with help of DVCS and to make system snapshots on Btrfs.
You may also think about local script 「Personal backup」 approach.
プログラム活動は専用ツールを用いて監視と制御できます。
表9.8 プログラム活動の監視と制御のツールのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
coreutils
|
V:908, I:999 | 18062 | nice (1): スケジューリングの優先順位の変更してプログラムを実行 |
bsdutils
|
V:610, I:999 | 355 | renice (1): 実行中プロセスのスケジューリングの優先順位を変更 |
procps
|
V:753, I:999 | 2091 | "/proc " ファイルシステムのユーティリティー: ps (1) と
top (1) と kill (1) と
watch (1) 等 |
psmisc
|
V:426, I:798 | 909 | "/proc " ファイルシステムのユーティリティー: killall (1)
と fuser (1) と pstree (1) と
pstree (1) |
time
|
V:10, I:181 | 129 | time (1): 時間に関するシステムリソース使用状況を報告するためにプログラムを実行 |
sysstat
|
V:162, I:185 | 1785 | sar (1)、iostat (1)、mpstat (1)、…:
Linux 用のシステムパーフォーマンスツール |
isag
|
V:0, I:3 | 106 | sysstat の対話型システムアクティビティーグラフ化ソフト |
lsof
|
V:393, I:942 | 482 | lsof (8): "-p "
オプションを使い実行中のプロセスが開いているファイルをリスト |
strace
|
V:14, I:135 | 2839 | strace (1): システムコールやシグナルを追跡 |
ltrace
|
V:0, I:18 | 338 | ltrace (1): ライブラリーコールを追跡 |
xtrace
|
V:0, I:0 | 353 | xtrace (1): X11 のクライアントとサーバーの間の通信を追跡 |
powertop
|
V:10, I:197 | 650 | powertop (1): システムの電力消費情報 |
cron
|
V:853, I:996 | 220 | cron (8) デーモンからバックグランドでスケジュール通りプロセスを実行 |
anacron
|
V:374, I:455 | 91 | 1日24時間動作でないシステム用の cron 類似のコマンドスケジューラー |
at
|
V:126, I:205 | 159 | at (1) と batch (1) コマンド:
特定の時間や特定のロードレベル以下でジョブを実行 |
![]() |
ヒント |
---|---|
|
コマンドが起動したプロセスにより使われた時間を表示します。
# time some_command >/dev/null real 0m0.035s # time on wall clock (elapsed real time) user 0m0.000s # time in user mode sys 0m0.020s # time in kernel mode
ナイス値はプロセスのスケジューリングの優先度を制御するのに使われます。
表9.9 スケジューリングの優先度のためのナイス値のリスト
ナイス値 | スケジューリングの優先度 |
---|---|
19 | 優先度が最低のプロセス (ナイス) |
0 | ユーザーにとっての優先度が非常に高いプロセス |
-20 | rootにとっての優先度が非常に高いプロセス (非ナイス) |
# nice -19 top # very nice # nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # very fast
極端なナイス値はシステムに害を与えるかもしれません。本コマンドは注意深く使用下さい、
Debian 上の ps
(1) コマンドは BSD と SystemV
機能の両方をサポートしプロセスの活動を静的に特定するのに有用です。
ゾンビ (動作していない) 子プロセスに関して、"PPID
" フィールドで識別される親プロセス ID
を使ってプロセスを停止できます。
pstree
(1) コマンドはプロセスの木 (ツリー) を表示します。
Debian 上の top
(1)
は機能が豊富で、どのプロセスがおかしな動きをしているかを動的に識別することに役立ちます。
それはインタラクティブなフルスクリーンプログラムです。"h"-キーを押すことで使用法のヘルプが得られ、 "q"-キーを押すことで終了できます。
プロセス ID (PID)、例えば1を使うプロセスによって開かれている全ファイルは次のようにしてリストできます。
$ sudo lsof -p 1
PID=1 は通常 init
プログラムです。
プラグラムの活動状況は、システムコールとシグナルは strace
(1) で、ライブラリーコールは
ltrace
(1) で、X11 のクライアントとサーバーの通信は
xtrace
(1) でプラグラムの活動状況を追跡できます。
ls
コマンドのシステムコールを次のようにして追跡できます。
$ sudo strace ls
![]() |
ヒント |
---|---|
Use strace-graph script found in /usr/share/doc/strace/examples/ to make a nice tree view |
例えば "/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
" 変数」 を参照ください。
For the graphical user interface
(GUI) compliant to the freedesktop.org standards, the
*.desktop
files in the
/usr/share/applications/
directory provide necessary
attributes for the GUI menu display of each program. Each package which is
compliant to Freedesktop.org's xdg menu system installs its menu data
provided by "*.desktop" under "/usr/share/applications/". Modern desktop
environments which are compliant to Freedesktop.org standard use these data
to generate their menu using the xdg-utils package. See
"/usr/share/doc/xdg-utils/README".
例えば 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 メニュー項目は |
![]() |
ヒント |
---|---|
同様に、もしこれらのベースディレクトリーの下の |
![]() |
ヒント |
---|---|
同様に、もし |
一部のプログラムは他のプログラムを自動的にスタートします。このプロセスをカスタム化する上でのチェックポイントを次に記します。
アプリケーション設定メニュー:
GNOME3 デスクトップ: "Settings" → "System" → "Details" → "Default Applications"
KDE デスクトップ: "K" → "Control Center" → "KDE Components" → "Component Chooser"
Iceweasel ブラウザー: "Edit" → "Preferences" → "Applications"
mc
(1): "/etc/mc/mc.ext
"
Environment variables such as "$BROWSER
",
"$EDITOR
", "$VISUAL
", and
"$PAGER
" (see environ
(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) 参照下さい)
![]() |
ヒント |
---|---|
|
![]() |
ヒント |
---|---|
|
![]() |
ヒント |
---|---|
In order to run a console application such as # cat /usr/local/bin/mutt-term <<EOF #!/bin/sh gnome-terminal -e "mutt \$@" EOF # chmod 755 /usr/local/bin/mutt-term |
![]() |
ヒント |
---|---|
GUI application can be executed easily under specific environment variables
if the program for "Exec" in its corresponding # cat /usr/local/bin/kitty <<EOF #!/bin/sh GLFW_IM_MODULE=ibus exec /usr/bin/kitty "\$@" EOF # chmod 755 /usr/local/bin/kitty This |
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
![]() |
ヒント |
---|---|
連続的に稼働していないシステムでは、機器のアップタイム上可能な限り指定間隔に近く定期的にコマンドをスケジュールするために
|
![]() |
ヒント |
---|---|
スケジュールされたシステムメインテナンススクリプトは、そのようなスクリプトを
" |
Systemd has low level capability to schedule
programs to run without cron
daemon. For example,
/lib/systemd/system/apt-daily.timer
and
/lib/systemd/system/apt-daily.service
set up daily apt
download activities. See systemd.timer
(5) .
Pressing Alt-SysRq (PrtScr) followed by one keys does the magic of rescuing control of the system.
表9.12 List of notable SAK command keys
Alt-SysRq に続くキー | アクションの説明 |
---|---|
k |
kill all processes on the current virtual console (SAK) |
s |
データーが壊れないように全てのマウントされたファイルシステムをsync (同期)します。 |
u |
全てのマウントされたファイルシステムを読出し専用で再マウント (アンマウント、umount) |
r |
X クラッシュの後でキーボードを raw (生コード発生) モードから復旧 |
See more on Linux kernel user’s and administrator’s guide » Linux Magic System Request Key Hacks
![]() |
ヒント |
---|---|
SSH ターミナルなどからは、" |
The current (2021) Debian amd64 Linux kernel has
/proc/sys/kernel/sysrq=438=0b110110110
:
2 = 0x2 - enable control of console logging level (ON)
4 = 0x4 - enable control of keyboard (SAK, unraw) (ON)
8 = 0x8 - enable debugging dumps of processes etc. (OFF)
16 = 0x10 - enable sync command (ON)
32 = 0x20 - enable remount read-only (ON)
64 = 0x40 - enable signaling of processes (term, kill, oom-kill) (OFF)
128 = 0x80 - allow reboot/poweroff (ON)
256 = 0x100 - allow nicing of all RT tasks (ON)
だれがシステムを利用しているかは、次のようにしてチェックできます。
who
(1) shows who is logged on.
w
(1) shows who is logged on and what they are doing.
last
(1) shows listing of last logged in user.
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.13 ハードウエアー識別ツールのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
pciutils
|
V:225, I:990 | 210 | Linux PCI ユーティリティー: lspci (8) |
usbutils
|
V:71, I:855 | 325 | Linux USB ユーティリティー: lsusb (8) |
nvme-cli
|
V:8, I:15 | 1346 | NVMe utilities for Linux: nvme (1) |
pcmciautils
|
V:8, I:13 | 91 | Linux のための PCMCIA ユーティリティー: pccardctl (8) |
scsitools
|
V:0, I:3 | 375 | SCSI ハードウエアー管理のためのツール集: lsscsi (8) |
procinfo
|
V:0, I:11 | 132 | "/proc " から得られるシステム情報: lsdev (8) |
lshw
|
V:14, I:96 | 919 | ハードウエアー設定に関する情報: lshw (1) |
discover
|
V:37, I:951 | 98 | ハードウエアー識別システム: discover (8) |
GNOME や KDE のような現代的な GUI のデスクトップ環境ではほとんどのハードウエアー設定が付随する GUI 設定ツールを通じて管理できますが、それらの設定の基本的手法を知っておくのは良い事です。
表9.14 ハードウエアー設定ツールのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
console-setup
|
V:95, I:964 | 425 | Linux コンソールのフォントとキーテーブルユーティリティー |
x11-xserver-utils
|
V:285, I:506 | 576 | X サーバーユーティリティー: xset (1)、xmodmap (1) |
acpid
|
V:110, I:205 | 154 | Advanced Configuration and Power Interface (ACPI) によって起こるイベントの管理のためのデーモン |
acpi
|
V:12, I:190 | 47 | ACPI デバイス上の情報を表示するユーティリティー |
sleepd
|
V:0, I:0 | 86 | 非使用状況のときにラップトップをスリープさせるデーモン |
hdparm
|
V:243, I:461 | 256 | ハードディスクアクセスの最適化 (「ハードディスクの最適化」参照下さい) |
smartmontools
|
V:189, I:236 | 2199 | S.M.A.R.T. を使ってストレージシステムを制御監視 |
setserial
|
V:4, I:7 | 103 | シリアルポートの管理ツール集 |
memtest86+
|
V:1, I:24 | 12681 | メモリーハードウエアー管理のためのツール集 |
scsitools
|
V:0, I:3 | 375 | SCSI ハードウエアー管理のためのツール集 |
setcd
|
V:0, I:0 | 35 | コンパクトデバイスアクセス最適化 |
big-cursor
|
I:0 | 26 | X のための大きなマウスカーソール |
上記で、ACPI はAPM より新しい電力管理システムの枠組みです。
![]() |
ヒント |
---|---|
最近のシステム上の CPU フリーケンシースケーリングは |
以下はシステムとハードウエアーの時間を MM/DD hh:mm, CCYY (月/日 時:分, 年) に設定します。
# date MMDDhhmmCCYY # hwclock --utc --systohc # hwclock --show
Debian システムでは時間は通常地域の時間が表示されますが、ハードウエアーとシステムの時間は通常 UTC(GMT) を使います。
If the hardware time is set to UTC, change the setting to
"UTC=yes
" in the "/etc/default/rcS
".
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) と互換性のためのエミュレーションモードを提供します。
Application softwares may be configured not only to access sound devices directly but also to access them via some standardized sound server system. Currently, PulseAudio, JACK, and PipeWire are used as sound server system. See Debian wiki page on Sound for the latest situation.
各ポピュラーなデスクトップ環境では普通共通のサウンドエンジンがあります。アプリケーションに使われるそれぞれのサウンドエンジンはそれと異なるサウンドサーバーにつなぐようにもできます。
![]() |
ヒント |
---|---|
" |
![]() |
ヒント |
---|---|
音が出ない場合ですが、あなたのスピーカーが消音された出力につながっているかもしれません。現代的なサウンドシステムには多くの出力があります。 |
表9.15 サウンドパッケージのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
alsa-utils
|
V:314, I:444 | 2475 | ALSA を設定し使用するユーティリティー |
oss-compat
|
V:1, I:22 | 20 | ALSA の下で "/dev/dsp not found " エラーを防ぐ OSS 互換性 |
pipewire
|
V:235, I:298 | 97 | audio and video processing engine multimedia server - metapackage |
pipewire-bin
|
V:251, I:298 | 1537 | audio and video processing engine multimedia server - audio server and CLI programs |
pipewire-alsa
|
V:1, I:5 | 193 | audio and video processing engine multimedia server - audio server to replace ALSA |
pipewire-pulse
|
V:17, I:30 | 47 | audio and video processing engine multimedia server - audio server to replace PulseAudio |
pulseaudio
|
V:353, I:437 | 6462 | PulseAudio server |
libpulse0
|
V:384, I:566 | 969 | PulseAudio client library |
jackd
|
V:2, I:22 | 9 | JACK Audio Connection Kit. (JACK) サーバー (低遅延) |
libjack0
|
V:1, I:10 | 329 | JACK Audio Connection Kit. (JACK) ライブラリー (低遅延) |
libgstreamer1.0-0
|
V:405, I:570 | 4413 | GStreamer: GNOME サウンドエンジン |
libphonon4
|
I:34 | 680 | Phonon: KDE サウンドエンジン |
スクリーンセーバーを無効にするには、次のコマンドを使います。
表9.16 スクリーンセーバーを無効にするコマンドのリスト
環境 | コマンド |
---|---|
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.17 報告されるメモリーサイズのリスト
報告 | サイズ |
---|---|
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.18 システムセキュリティーや整合性確認のためのツールリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
logcheck
|
V:7, I:9 | 102 | システムログの異常を管理者にメールするデーモン |
debsums
|
V:5, I:41 | 108 | MD5 チェックサムを使ってインストールされたパッケージファイルを検証するユーティリティー |
chkrootkit
|
V:4, I:20 | 922 | ルートキット検出ソフト |
clamav
|
V:10, I:51 | 29115 | Unix 用アンチウィルスユーティリティー - コマンドラインインターフェース |
tiger
|
V:2, I:2 | 7800 | システムセキュリティーの脆弱性を報告 |
tripwire
|
V:2, I:3 | 11951 | ファイルやディレクトリーの整合性チェックソフト |
john
|
V:1, I:10 | 471 | アクティブなパスワードクラッキングツール |
aide
|
V:1, I:1 | 248 | 先進的進入検出環境 - 静的ライブラリー |
integrit
|
V:0, I:0 | 324 | ファイル整合性確認プログラム |
crack
|
V:0, I:1 | 152 | パスワード推定プログラム |
次のシンプルなスクリプトを使うと、典型的な間違いの全員書込み可のファイルパーミッションをチェックできます。
# find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \)
![]() |
注意 |
---|---|
|
Linux のlive CDs とかレスキューモードで debian-installer CDs であなたのシステムをブートすることでブートデバイス上のデーターストレージの再設定が簡単にできます。
You may need to umount
(8) some devices manually from the
command line before operating on them if they are automatically mounted by
the GUI desktop system.
ディスク空間使用状況は mount
と coreutils
と
xdu
パッケージが提供するプログラムで評価できます:
mount
(8) はマウントされたファイルシステム (= ディスク) すべてを報告します。
df
(1) はファイルシステムのディスク空間使用状況を報告します。
du
(1) はディレクトリーツリーのディスク空間使用状況を報告します。
![]() |
ヒント |
---|---|
|
ディスクのパーティションの設定に関して、fdisk
(8)
は標準と考えられてきていますが、parted
(8) も注目に値します。"ディスクパーティションデーター" や
"パーティションテーブル" や "パーティションマップ" や "ディスクラベル" は全て同意語です。
Older PCs use the classic Master Boot Record (MBR) scheme to hold disk partitioning data in the first sector, i.e., LBA sector 0 (512 bytes).
Recent PCs with Unified Extensible Firmware Interface (UEFI), including Intel-based Macs, use GUID Partition Table (GPT) scheme to hold disk partitioning data not in the first sector.
fdisk
(8)
はディスクパーティションツールの標準でしたが、parted
(8) がそれを置き換えつつあります。
表9.19 ディスクパーティション管理パッケージのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
util-linux
|
V:895, I:999 | 4974 | fdisk (8) と cfdisk (8)
を含む雑多なシステムユーティリティー |
parted
|
V:385, I:545 | 122 | GNU Parted ディスクパーティションとリサイズのプログラム |
gparted
|
V:15, I:111 | 2109 | libparted ベースの GNOME パーティションエディター |
gdisk
|
V:358, I:506 | 885 | partition editor for the GPT/MBR hybrid disk |
kpartx
|
V:22, I:35 | 74 | パーティション用のデバイスマッピングを作成するプログラム |
![]() |
注意 |
---|---|
|
![]() |
注記 |
---|---|
GPT と MBR
間で切り替えるには、ディスクの最初数ブロックの内容を直接消去し (「ファイル内容の消去」参照下さい)、" |
Although reconfiguration of your partition or activation order of removable storage media may yield different names for partitions, you can access them consistently. This is also helpful if you have multiple disks and your BIOS/UEFI doesn't give them consistent device names.
"-U
" オプションを使って mount
(8) を実行すると
"/dev/sda3
" のようなファイル名を使うのではなく UUID を使ってブロックデバイスをマウントできます。
"/etc/fstab
" (fstab
(5) 参照下さい) は UUID を使えます。
ブートローダー (「2段目: ブートローダー」) もまた UUID を使えます。
![]() |
ヒント |
---|---|
ブロックスペシャルデバイスの UUID は You can also probe it and other information with " |
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.20 ファイルシステム管理用パッケージのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
e2fsprogs
|
V:703, I:999 | 1480 | ext2/ext3/ext4 ファイルシステムのためのユーティリティー |
btrfs-progs
|
V:43, I:72 | 4281 | btrfs ファイルシステムのためのユーティリティー |
reiserfsprogs
|
V:11, I:27 | 1132 | Reiserfs ファイルシステムのためのユーティリティー |
zfsutils-linux
|
V:27, I:29 | 1610 | utilities for the OpenZFS filesystem |
dosfstools
|
V:149, I:504 | 315 | FAT ファイルシステムのためのユーティリティー (Microsoft: MS-DOS, Windows) |
exfatprogs
|
V:12, I:214 | 281 | utilities for the exFAT filesystem maintained by Samsung. |
exfat-fuse
|
V:10, I:233 | 75 | read/write exFAT filesystem (Microsoft) driver for FUSE. |
exfat-utils
|
V:9, I:228 | 231 | utilities for the exFAT filesystem maintained by the exfat-fuse author. |
xfsprogs
|
V:23, I:100 | 3444 | XFS ファイルシステムのためのユーティリティー (SGI: IRIX) |
ntfs-3g
|
V:151, I:488 | 1469 | read/write NTFS filesystem (Microsoft: Windows NT, …) driver for FUSE. |
jfsutils
|
V:0, I:10 | 1577 | JFS ファイルシステムのためのユーティリティー (IBM: AIX, OS/2) |
reiser4progs
|
V:0, I:3 | 1367 | Reiser4 ファイルシステムのためのユーティリティー |
hfsprogs
|
V:0, I:6 | 394 | HFS と HFS Plus ファイルシステムのためのユーティリティー (Apple: Mac OS) |
zerofree
|
V:4, I:128 | 25 | ext2/3/4 ファイルシステムのフリーブロックをゼロにセットするプログラム |
![]() |
ヒント |
---|---|
Ext4 ファイルシステムは Linux システムのためのデフォルトのファイルシステムで、特定の使用しない理由がない限りこれを使用することが強く推奨されます。 Btrfs status can be found at Debian wiki on btrfs and kernel.org wiki on btrfs. It is expected to be the next default filesystem after the ext4 filesystem. 一部のツールはファイルシステムへのアクセスを Linux カーネルのサポート無しでも可能にします (「ディスクをマウントせずに操作」参照下さい)。 |
mkfs
(8) コマンドは Linux
システム上でファイルシステムを生成します。fsck
(8) コマンドは Linux
システム上でファイルシステムの整合性チェックと修理機能を提供します。
現在 Debian は、ファイルシステム形成後に定期的な fsck
無しがデフォルトです。
![]() |
注意 |
---|---|
一般的に |
![]() |
ヒント |
---|---|
" ブートスクリプトから実行される |
"/etc/fstab
" により静的なファイルシステム設定がなされます。例えば、
«file system» «mount point» «type» «options» «dump» «pass» proc /proc proc defaults 0 0 UUID=709cbe4c-80c1-56db-8ab1-dbce3146d2f7 / ext4 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 を使ってパーティションをアクセス」参照下さい)
は、" |
Since Linux 2.6.30, the kernel defaults to the behavior provided by
"relatime
" option.
See fstab
(5) and mount
(8).
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 に変換します。(アンマウントしたファイルシステムに対して実行します。)
![]() |
警告 |
---|---|
ハードディスクの設定はデーターの整合性にとって非常に危険な事なので、その設定をさわる前にお使いのハードウエアーをチェックし
|
例えば "/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
"
としてそれを減速して使えば読めるかもしれません。
Solid state drive (SSD) is auto detected now.
Reduce unnecessary disk accesses to prevent disk wear out by mounting
"tmpfs
" on volatile data path in
/etc/fstab
.
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
" をアンコメントします。
restart the smartd
(8) daemon by "sudo systemctl
restart smartmontools
".
![]() |
ヒント |
---|---|
|
通常アプリケーションは一時保存ディレクトリー "/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
Linux カーネル 3.18 以降 (Debian Stetch 9.0 以降) を使うと、他のパーティション中に使える空間 (例えば
"/path/to/empty
" と "/path/to/work
")
があれば、その中にディレクトリーを作成し、容量が必要な古いディレクトリー(e.g.,
"/path/to/old
")の上に OverlayFS を使って積み重ねることができます。
$ 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
"
があることが必要です。
![]() |
注意 |
---|---|
ここに書かれている事は非推奨です。ソフトウエアーによっては「ディレクトリーへのシムリンク」ではうまく機能しません。上記の「マウントする」アプローチを代わりに使ってください。 |
使える空間がある他のパーティション中に空のディレクトリーがあれば (例えば
"/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
Instead of using dd
(1), specialized
fallocate
(8) may be used here.
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 --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 を自動的にマウントする場合、 |
もし "cd.iso
" の内容が ISO9660 イメージの場合、次のようにするとそれを
"/cdrom
" に手動でマウントできます。
# mount -t iso9660 -o ro,loop cd.iso /cdrom
![]() |
ヒント |
---|---|
現代的なデスクトップシステムではISO9660フォーマットされた CD のようなリムーバブルメディアを自動的にマウントします (「リムーバブルストレージデバイス」参照下さい)。 |
次に、ストレージメディア上のバイナリーデーターを直接操作することを論じます。
もっとも基本的なバイナリーファイルを閲覧方法は "od -t x1
" コマンドを使うことです。
表9.21 バイナリーデーターを閲覧や編集するパッケージのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
coreutils
|
V:908, I:999 | 18062 | ファイルをダンプする od (1) がある基本パッケージ (HEX, ASCII, OCTAL, …) |
bsdmainutils
|
V:19, I:500 | 27 | ファイルをダンプする hd (1) があるユーティリティーパッケージ (HEX, ASCII, OCTAL, …) |
hexedit
|
V:1, I:10 | 73 | バイナリーエディターとビューワー (HEX, ASCII) |
bless
|
V:0, I:3 | 924 | フル機能の16進エディター (GNOME) |
okteta
|
V:1, I:12 | 1580 | フル機能の16進エディター (KDE4) |
ncurses-hexedit
|
V:0, I:1 | 132 | バイナリーエディターとビューワー (HEX, ASCII, EBCDIC) |
beav
|
V:0, I:0 | 137 | バイナリーエディターとビューワー (HEX, ASCII, EBCDIC, OCTAL, …) |
![]() |
ヒント |
---|---|
HEX は底が16の16進フォーマットです。OCTAL は底が8の8進フォーマットです。ASCII (アスキー) は情報交換用アメリカ標準コードで、通常の英文テキストです。EBCDIC (エビシディック) は IBM メインフレームオペレーティングシステム上で使われる拡張二進化十進数互換コードです。 |
Linux カーネルが提供するソフトウエアー RAID システムは高いレベルのストレージ信頼性を達成するためにカーネルのファイルシステムのレベルでデーターの冗長性を提供します。
アプリケーションプログラムレベルでストレージの高い信頼性を達成するようにデーター冗長性を付加するツールもあります。
データーファイルの復元と事故の証拠解析のツールがあります。
表9.24 データーファイルの復元と事故の証拠解析のリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
testdisk
|
V:2, I:32 | 1413 | パーティションのスキャンとディスク復元のためのユーティリティー |
magicrescue
|
V:0, I:2 | 255 | マジックバイトを探してファイルを復元するユーティリティー |
scalpel
|
V:0, I:3 | 88 | 質素で高性能なファイル彫刻刀 |
myrescue
|
V:0, I:3 | 83 | 破壊したハードディスクからデーターを救出 |
extundelete
|
V:0, I:9 | 147 | ext3/4 ファイルシステム上のファイルの削除復元ユーティリティー |
ext4magic
|
V:0, I:4 | 233 | ext3/4 ファイルシステム上のファイルの削除復元ユーティリティー |
ext3grep
|
V:0, I:2 | 293 | ext3 ファイルシステム上のファイルの削除復元ヘルプツール |
scrounge-ntfs
|
V:0, I:2 | 50 | NTFS ファイルシステム上のデーター復元プログラム |
gzrt
|
V:0, I:0 | 33 | gzip 復元ツールキット |
sleuthkit
|
V:2, I:25 | 1607 | 証拠解析のためのツール (Sleuthkit) |
autopsy
|
V:0, I:1 | 1027 | SleuthKit のための GUI |
foremost
|
V:0, I:5 | 102 | データー復元のための証拠解析アプリケーション |
guymager
|
V:0, I:1 | 1021 | Qt 使用の証拠解析用イメージ作成ソフト |
dcfldd
|
V:0, I:4 | 113 | 証拠解析とセキュリティーのための 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 メモリースティックの場所を |
次のようにしてデーターを0にリセットして全消去します。
# dd if=/dev/zero of=/dev/sda
次のようにしてランダムデーターを上書きして全消去します。
# dd if=/dev/urandom of=/dev/sda
次のようにしてランダムデーターを非常に効率的に上書きして全消去します。
# shred -v -n 1 /dev/sda
You may alternatively use badblocks
(8) with -t
random
option.
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 facilitates automatic data encryption via native Linux kernel modules with minimal user efforts using device-mapper.
表9.25 データー暗号化ユーティリティーのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
cryptsetup
|
V:30, I:77 | 406 | 暗号化されたブロックデバイス (dm-crypt / LUKS) のためのユーティリティー |
cryptmount
|
V:3, I:4 | 231 | ノーマルユーザーによるマウント/アンマウントに焦点を当てた暗号化されたブロックデバイス (dm-crypt / LUKS) のためのユーティリティー |
fscrypt
|
V:0, I:1 | 4447 | utilities for Linux filesystem encryption (fscrypt) |
libpam-fscrypt
|
V:0, I:0 | 3981 | PAM module for Linux filesystem encryption (fscrypt) |
![]() |
注意 |
---|---|
Data encryption costs CPU time etc. Encrypted data becomes inaccessible if its password is lost. Please weigh its benefits and costs. |
![]() |
注記 |
---|---|
debian-installer (lenny 以降) を使うと、dm-crypt/LUKS と initramfs を使って、全 Debian システムを暗号化したディスク上にインストールできます。 |
![]() |
ヒント |
---|---|
ユーザー空間での暗号化ユーティリティーに関しては「データーセキュリティーのインフラ」を参照下さい: GNU プライバシーガード。 |
例えば "/dev/sdx
" にある USB メモリースティックのようなリムーバブルストレージデバイスの内容を
dm-crypt/LUKS
を使って暗号化できます。それを単に次のようにフォーマットします。
# fdisk /dev/sdx ... "n" "p" "1" "return" "return" "w" # cryptsetup luksFormat /dev/sdx1 ... # cryptsetup open /dev/sdx1 secret ... # ls -l /dev/mapper/ total 0 crw-rw---- 1 root root 10, 60 2021-10-04 18:44 control lrwxrwxrwx 1 root root 7 2021-10-04 23:55 secret -> ../dm-0 # mkfs.vfat /dev/mapper/secret ... # cryptsetup close secret
Then, it can be mounted just like normal one on to
"/media/username/disk_label
", except
for asking password (see 「リムーバブルストレージデバイス」) under
modern desktop environment using the udisks2
package.
The difference is that every data written to it is encrypted. The password
entry may be automated using keyring (see 「Password keyring」).
You may alternatively format media in different filesystem, e.g., ext4 with
"mkfs.ext4 /dev/mapper/sdx1
". If btrfs is used instead,
the udisks2-btrfs
package needs to be installed. For
these filesystems, the file ownership and permissions may need to be
configured.
For example, an encrypted disk partition created with dm-crypt/LUKS on
"/dev/sdc5
" by Debian Installer can be mounted onto
"/mnt
" as follows:
$ 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
Debian はモジュール化された Linux カーネルをサポートされるアーキテクチャに対してパッケージとしてディストリブートしています。
If you are reading this documentation, you probably don't need to compile Linux kernel by yourself.
多くの Linux の機能はカーネル変数を使い次のように設定されます。
ブートローダーにより初期化されたカーネル変数 (「2段目: ブートローダー」参照下さい)
実行時に sysfs によりアクセスできるカーネル変数に関して sysctl
(8) を用い変更されたカーネル変数
(「procfs と sysfs」参照下さい)
モジュールが起動された際の modprobe
(8) の引数により設定されるモジュール変数 (「ディスクイメージファイルをマウント」参照下さい)
See "The Linux kernel user’s and administrator’s guide » The kernel’s command-line parameters" for the detail.
ほとんどの普通のプログラムはカーネルヘッダーを必要としませんし、コンパイルするのにそれらを直接用いるとコンパイルがうまくいかないかもしれません。普通のプログラムは
Debian システム上では (glibc
ソースパッケージから生成される)
libc6-dev
パッケージが提供する
"/usr/include/linux
" や
"/usr/include/asm
" 中のヘッダを使ってコンパイルするべきです。
![]() |
注記 |
---|---|
For compiling some kernel-specific programs such as the kernel modules from
the external source and the automounter daemon ( |
Debian にはカーネルと関連モジュールをコンパイルする独自の方法があります。
表9.26 Debian システム上でカーネルの再コンパイルためにインストールする重要パッケージのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
build-essential
|
I:485 | 20 | Debian パッケージをビルドする上で不可欠なパッケージ:
make 、gcc 、… |
bzip2
|
V:161, I:970 | 121 | bz2 ファイルのための圧縮と解凍ユーティリティー |
libncurses5-dev
|
I:93 | 6 | ncurses のためのデベロッパ用ライブラリーと文書 |
git
|
V:305, I:517 | 44453 | git: Linux カーネルによって使われている分散型リビジョンコントロールシステム |
fakeroot
|
V:30, I:497 | 208 | パッケージを非 root としてビルドするための fakeroot 環境を提供 |
initramfs-tools
|
V:386, I:990 | 113 | initramfs をビルドするツール (Debian 固有) |
dkms
|
V:67, I:181 | 183 | 動的カーネルモジュールサポート (DKMS) (汎用) |
module-assistant
|
V:1, I:25 | 406 | helper tool to make module package (Debian specific) |
devscripts
|
V:7, I:46 | 2777 | 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 カーネルハンドブック: https://kernel-handbook.debian.net
The hardware driver is the code running on the main CPUs of the target
system. Most hardware drivers are available as free software now and are
included in the normal Debian kernel packages in the main
area.
The firmware is the code or data loaded on the device attach to the target system (e.g., CPU microcode, rendering code running on GPU, or FPGA / CPLD data, …). Some firmware packages are available as free software but many firmware packages are not available as free software since they contain sourceless binary data. Installing these firmware data is essential for the device to function as expected.
The firmware data packages containing data loaded to the volatile memory on the target device.
firmware-linux-free (main
)
firmware-linux-nonfree (non-free-firmware
)
firmware-linux-* (non-free-firmware
)
*-firmware (non-free-firmware
)
intel-microcode (non-free-firmware
)
amd64-microcode (non-free-firmware
)
The firmware update program packages which update data on the non-volatile memory on the target device.
fwupd (main
): Firmware
update daemon which downloads firmware data from Linux Vendor Firmware Service.
gnome-firmware (main
): GTK front end for fwupd
plasma-discover-backend-fwupd (main
): Qt front end for
fwupd
Please note that access to non-free-firmware
packages are
provided by the official installation media to offer functional installation
experience to the user since Debian 12 Bookworm. The
non-free-firmware
area is described in 「Debian アーカイブの基本」.
Please also note that the firmware data downloaded by fwupd from Linux Vendor Firmware Service and
loaded to the running Linux kernel may be non-free
.
仮想化されたシステムを利用すると単一ハード上で同時に複数のシステムのインスタンスを実行することが加能となります。
![]() |
ヒント |
---|---|
There are several virtualization and emulation tool platforms.
Complete hardware emulation packages such as ones installed by the games-emulator metapackage
Mostly CPU level emulation with some I/O device emulations such as QEMU
Mostly CPU level virtualization with some I/O device emulations such as Kernel-based Virtual Machine (KVM)
OS level container virtualization with the kernel level support such as LXC (Linux Containers), Docker, ...
OS level filesystem access virtualization with the system library call override on the file path such as chroot
OS level filesystem access virtualization with the system library call override on the file ownership such as fakeroot
OS API emulation such as Wine
Interpreter level virtualization with its executable selection and run-time library overrides such as virtualenv and venv for Python
The container virtualization uses 「Linux のセキュリティ機能」 and it is the backend technology of 「サンドボックス」.
Here are some packages to help you to setup the virtualized system.
表9.27 仮想化ツールのリスト
パッケージ | ポプコン | サイズ | 説明 |
---|---|---|---|
schroot
|
V:6, I:8 | 2508 | Debian バイナリーパッケージを chroot 中で実行する専用ツール |
sbuild
|
V:1, I:4 | 242 | Debian ソースから Debian バイナリーパッケージをビルドするツール |
debootstrap
|
V:5, I:59 | 279 | 基本的な Debian システムのブートストラップ (sh で書かれている) |
cdebootstrap
|
V:0, I:2 | 111 | Debian システムのブートストラップ (C で書かれている) |
virt-manager
|
V:11, I:42 | 2296 | 仮想マシンマネージャー: 仮想マシンを管理するデスクトップアプリケーション |
libvirt-clients
|
V:43, I:62 | 1311 | libvirt ライブラリー用のプログラム |
games-emulator
|
I:0 | 26 | games-emulator: Debian's emulators for games |
bochs
|
V:0, I:1 | 6956 | Bochs: IA-32 PC エミュレーター |
qemu
|
I:25 | 97 | QEMU: 高速で汎用のプロセッサエミュレーター |
qemu-system
|
I:21 | 59 | QEMU: フルシステムエミュレーションのバイナリ |
qemu-user
|
V:1, I:8 | 100502 | QEMU: ユーザーモードエミュレーションのバイナリ |
qemu-utils
|
V:12, I:107 | 6875 | QEMU: ユーティリティー |
qemu-kvm
|
V:2, I:19 | 107 | KVM: ハードウエア補助仮想化を利用する x86 ハードウエア上のフル仮想化 |
virtualbox
|
V:9, I:11 | 126370 | VirtualBox: i386 と amd64 上での x86 仮想化解決策 |
xen-tools
|
V:0, I:3 | 727 | Debian XEN 仮想サーバーの管理ツール |
wine
|
V:13, I:64 | 134 | Wine: Windows API の実装 (標準スイート) |
dosbox
|
V:2, I:16 | 2671 | DOSBox: Tandy/Herc/CGA/EGA/VGA/SVGA グラフィクス、サウンド、DOS 付きの x86 エミュレーター |
lxc
|
V:9, I:13 | 25643 | Linux コンテナ - ユーザースペースツール |
python3-venv
|
I:60 | 6 | venv for creating virtual python environments (system library) |
python3-virtualenv
|
V:9, I:53 | 406 | virtualenv for creating isolated virtual python environments |
pipx
|
V:0, I:1 | 887 | pipx for installing python applications in isolated environments |
異なるプラットフォーム仮想化策の詳細な比較は 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
![]() |
ヒント |
---|---|
|
If you wish to try a new Debian environment from a terminal console, I
recommend you to use chroot. This enables you
to run console applications of Debian unstable
and
testing
without usual risks associated and without
rebooting. chroot
(8) is the most basic way.
![]() |
注意 |
---|---|
Examples below assumes both parent system and chroot system share the same
|
Although you can manually create a chroot
(8) environment
using debootstrap
(1). But this requires non-trivial
efforts.
The sbuild package to build Debian packages
from source uses the chroot environment managed by the schroot package. It comes with helper script
sbuild-createchroot
(1). Let's learn how it works by
running it as follows.
$ sudo mkdir -p /srv/chroot $ sudo sbuild-createchroot -v --include=eatmydata,ccache unstable /srv/chroot/unstable-amd64-sbuild http://deb.debian.org/debian ...
You see how debootstrap
(8) populates system data for
unstable
environment under
"/srv/chroot/unstable-amd64-sbuild
" for a minimal build
system.
You can login to this environment using schroot
(1).
$ sudo schroot -v -c chroot:unstable-amd64-sbuild
You see how a system shell running under unstable
environment is created.
![]() |
注記 |
---|---|
The " |
![]() |
注記 |
---|---|
Some programs under chroot may require access to more files from the parent
system to function than |
![]() |
ヒント |
---|---|
The |
If you wish to try a new GUI Desktop environment of any OS, I recommend you
to use QEMU or KVM on
a Debian stable
system to run multiple desktop systems
safely using virtualization. These
enable you to run any desktop applications including ones of Debian
unstable
and testing
without usual
risks associated with them and without rebooting.
Since pure QEMU is very slow, it is recommended to accelerate it with KVM when the host system supports it.
Virtual Machine Manager also
known as virt-manager
is a convenient GUI tool for
managing KVM virtual machines via libvirt.
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 ...
![]() |
ヒント |
---|---|
Ubuntu や Fedra 等の GNU/Linux ディストリビューションを仮想化の下で実行するのは設定ティップを学ぶ非常に良い方法です。他のプロプライエタリな OS もこの GNU/Linux の仮想化の下で上手く実行できます。 |
See more tips at Debian wiki: SystemVirtualization.
[2] More elaborate customization examples: "Vim Galore", "sensible.vim", "#vim Recommendations" ...
[3] vim-pathogen was popular.