LPIC Level 1 対策: 第1章 - 基本的なコマンド操作

| ⊗ |

コマンド履歴

history により過去に実行したコマンドの一覧を表示する。 遡る行数を引数で指定できる。

$ history 5
 1008  cal
 1009  ls -l
 1010  file ns.sh
 1011  wc ns.hs
 1012  history 5

履歴を呼び出すには以下の方法がある。
操作機能
!!直前のコマンドを再実行
!n履歴番号 n を再実行
!str先頭が str で始まるコマンドを再実行
^str^str2^直前のコマンド引数 str1 を str2 に置き換えて実行
fc [n|str]vi により編集、保存で実行

履歴ついて以下の環境変数がある。
変数名機能
HISTSIZE記録する履歴の行数 (500)
HISTFILEログアウト後も保存するためのファイル名 (~/.bash_history)
HISTFILESIZEファイルに記録する履歴の行数 (500)

ヒアドキュメント

入力リダイレクションとヒアドキュメントでは、前者が字面とおりであるのに対し
後者は変数やバッククォーテーションの評価(置換)を行う。

$ cat -n < test.dat
     1	$HOME
     2	`date`
$ cat -n <<EOD
> $HOME
> `date`
> EOD
     1	/home/student
     2	2014年	6月  1日 日曜日 14:49:49 JST

ダンプ

dump は本来、「破棄」という意味がありますが、IT業界では機械的にデータを
直に出力するときに用います。特にプログラムのデバックなどで、実メモリ中の
データ並びなどを検証する際に使用します。

$ cat a.txt
123456
$ od -xc a.txt
0000000 3231 3433 3635 000a
	  1   2   3   4   5   6  \n  \0
0000007

この例では、od(8進数ダンプ)を使って、16進数表示(-x)かつ2行目に表示可能な
形式で文字を表示(-c)しています。
ASCII コードは 1, 2, 3 がそれぞれ 0x31, 0x32, 0x33 ... となります。
また改行(\n)は、0x0A で、データ終了を表す EOD(\0) は 0x00 です。

なお Intel 系の CPU は、リトルエンディアンと呼ばれる形式を採用しており、
16bit 長さのデータは上位の 8bit と下位 8bit を逆転して格納します。
例えば上記の "12" は、0x32, 0x31 として格納されています。

xargs(1)

xargs は標準出力から文字列を受け、指定された文字列に、それらを引数として実行。

$ echo ssh telnet date | xargs which
/usr/bin/ssh
/usr/kerberos/bin/telnet
/bin/date

ローカルドキュメント

man で表示されるデータは roff 形式と呼ばれるマークアップ言語で、 /usr/share/man/
の下に各章ごとサブディレクトリが配置。
また各国語に翻訳されたものは、言語コードサブディレクトリ下に章を配置。

	/usr/share/man/man1	英語の第1章
	/usr/share/man/ja/man8	日本語の第8章

	$ zcat /usr/share/man/man1/ls.1.gz | head
	.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.35.
	.TH LS "1" "March 2012" "ls 5.97" "User Commands"
	.SH NAME
	ls \- list directory contents
	.SH SYNOPSIS
	.B ls
	[\fIOPTION\fR]... [\fIFILE\fR]...
	.SH DESCRIPTION
	.\" Add any additional description here
	.PP

man(1)実行の様子
	$ man ls &
	$ ps ww
		:
	23972 pts/1    T      0:00 sh -c (cd /usr/share/man/ja && (echo
	".pl 1100i"; /usr/bin/gunzip -c '/usr/share/man/ja/man1/ls.1.gz';
	echo ".\\\""; echo ".pl \n(nlu+10") | /usr/bin/gtbl | /usr/bin/nr
	off -c --legacy EUC-JP -mandoc 2>dev/null | /usr/bin/less -is)

mandb(8)

mandb は whatis で用いるデータベースを生成する。
実行時間がかかるため、-u オプションにより差分更新が可能だが直近 24時間のみ。
そのため crontab で毎日実行するよう /etc/cron.daily/man-db.cron がある。

以下の例は、パッケージ man2html をインストール直後に whatis を試し、mandb によって、更新したもの。

	# yum install man2html
		:
	# mandb
		:
	/usr/local/share/man 配下のマニュアルページを処理しています...
	3 man subdirectories contained newer manual pages.
	48 manual pages were added.
	0 stray cats were added.
	0 old database entries were purged.
	# whatis man2html
	man2html (1)         - format a manual page in html

mandb 古くは makewhatis(8)