3. GNU/UNIXコマンド
3.1 コマンドライン操作
3.1.1 シェル
- sh(Bourneシェル) <- Unix標準
- bash(Bourne Agen Shell) <- Linux標準
- csh(C Shell)
- tcsh <- Linux標準 C shell
- ksh(Korn Shell)
- zsh
ログインシェルは/etc/passwordで変更可能
3.1.2 シェルの基本動作と設定
shellによっては変更可能。bashのデフォルトはEmacsキーバインド割り当て
基本操作
| 操作 | 説明 |
|---|---|
| <Tab> | コマンドやディレクトリ名の補完 |
| <Ctr>+a | 行頭へカーソルを移動 |
| <Ctr>+e | 行末へカーソルを移動 |
| <Ctr>+d | カーソル部分を1文字削除、ログアウトする |
| <Ctr>+h | カーソルの左1文字削除(Backspaceと同等) |
| <Ctr>+l | 画面をクリアしてカレント行を再表示 |
| <Ctr>+c | 処理を中断 |
| <Ctr>+s | 画面への出力を停止 |
| <Ctr>+q | 画面への出力を再開 |
| <Ctr>+z | 処理を一時停止(サスペンド) |
メタキャラ
| メタキャラクタ | 説明 |
|---|---|
| ~ | ホームディレクトリ |
| . | カレントディレクトリ |
| .. | 1つ上のディレクトリ |
3.1.3 シェル変数と環境変数
- シェル変数 : 有効範囲はその変数を定義したシェル・プロセス
- 環境変数 : 有効範囲はその変数を定義したシェル上、そのシェルで実行されるプログラム内にも引き継がれる。
exportコマンドで設定する
主な環境変数
| 環境変数 | 説明 |
|---|---|
| PATH | コマンドやプログラムを検索するディレクトリリスト |
| PWD | カレントディレクトリ |
| HOSTNAME | ホスト名 |
| USER | 現在のユーザ |
| LANG | ロケール(言語処理方式) |
| HOME | カレントユーザのホームディレクトリ |
| LOGNAME | ログインシェルのユーザ名 |
| PS1 | プロンプトの表示名 |
| PS2 | 複数行に渡る入力時のプロンプト |
| HISTSIZE | コマンド履歴の最大値 |
| HISTFILE | コマンド履歴を格納するファイル |
| HISTFILESIZE | HISTFILEに保存する履歴数 |
| TERM | 端末の種類 |
- 変数の定義
$ HOGE="hoge"
- 指定した文字列や変数の出力
$ echo $HOGE
- 変数の削除
$ unset HOGE
- 環境変数一覧
$ printenv
$ env
- セット済みの変数一覧
$ set
- 環境変数の設定
$ export VAR=lpic
3.1.4 環境変数PATH
- 内部コマンド : シェル事態に組み込まれているもの
- 外部コマンド : 独立したプログラムとして存在するもの
PATHの設定
PATH=$PATH=:/opt/bin
PATHの先頭から順にディレクトリを検索していく。同一のプログラムがある場合は順番に気をつける。$PATHを定義し忘れると、デフォルトのPATHが引き継がれないので注意する。
3.1.5 コマンドの実行
;: 正常に終了しなくても次のコマンドを実行&&: 正常に終了した場合のみ次のコマンドを実行||: 正常に終了しなかった場合のみ次のコマンドを実行( cmd1 ; cmd2 ): コマンド1とコマンド2をひとまとまりのコマンドグループとして実行| cmd1 ; cmd2 |: 現在のシェル内でコマンド1とコマンド2を実行
3.1.6 引用符
'(シングルクォーテーション) : 文字列"(ダブルクォーテーション) : 文字列、変数展開可能\`(バッククォーテーション) : コマンド実行結果が展開される($(cmd))でも実行結果が展開される
3.1.7 コマンド履歴
-
HISTSIZE、HISTFILESIZEで履歴に残す数を設定できる -
bashの履歴機能
| コマンド | 内容 |
|---|---|
| 1つ前のコマンドを表示する | |
| 1つ次のコマンドを表示する | |
| !n | 履歴番号を指定してコマンド実行 |
| !文字列 | 実行したコマンドの中で、指定した文字列から始まるコマンドを実行 |
| !?文字列 | 実行したコマンドの中で、指定した文字列を含むコマンドを実行 |
3.1.8 マニュアルの参照
manコマンドの主なオプション
| オプション | 説明 |
|---|---|
| -a | 全てのセクションのマニュアルを表示する |
| -f | 指定されたキーワード(完全一致)を含むドキュメントを表示する |
| -k | 指定されたキーワード(部分一致)を含むドキュメントを表示する |
| -w | マニュアルの置かれているディレクトリを表示する |
セクション : ドキュメントの分類、章
| セクション | 説明 |
|---|---|
| 1 | ユーザーコマンド |
| 2 | システムコール(カーネルの機能を使うための関数) |
| 3 | ライブラリ(C言語の関数) |
| 4 | デバイスファイル |
| 5 | 設定ファイル |
| 6 | ゲーム |
| 7 | その他 |
| 8 | システム管理コマンド |
| 9 | Linux独自のカーネル用ドキュメント |
指定したキーワードと完全にマッチした一覧を表示
$ man -f
$ whatis
指定したキーワードがマニュアルタイトルもしくはNAME欄に含まれるマニュアルの一覧を表示
$ man -k
$ apropos
whatisデータベース
マニュアル検索用のデータベース
makewhatisコマンドで作成
3.1.9 ファイル操作コマンド
lsコマンド
ディレクトリ内のファイル、ファイル属性を表示する
| オプション | 説明 |
|---|---|
| -a | 隠しファイル(.)も含めて全て表示する |
| -A | カレントディレクトリ(.)と親ディレクトリ(..)を覗いた全てを表示する |
| -d | ディレクトリ自身の情報も表示する |
| -F | ファイルの種類も表示する(ディレクトリは/, 実行ファイルは*, シンボリックリンクは@がそれぞれ末尾につく |
| -i | iノード番号を表示する |
| -l | ファイルの詳細情報を表示する |
| -t | 日付順に表示する |
| -h | 単位付き(容量)で表示する |
cpコマンド
ファイルやディレクトリのコピー
| オプション | 説明 |
|---|---|
| -f | コピー先に同名のファイルが有れば上書きする |
| -i | コピー先に同名のファイルが有れば上書きするか確認する |
| -p | コピー元のファイル属性を保持したままコピーする |
| -r, -R | ディレクトリ内を再帰的にコピーする |
| -d | シンボリックリンクをシンボリックリンクとしてコピーする |
| -a | 出来る限り元のファイルの構成と属性をコピー先でも保持する(-dpRと同じ) |
mvコマンド
ファイルやディレクトリを移動する。ファイル名の変更にも用いられる
| オプション | 説明 |
|---|---|
| -f | 移動先に同名のファイルが有れば上書きする |
| -i | 移動先に同名のファイルが有れば上書きするか確認する |
mkdirコマンド
空のディレクトリを作成する
| オプション | 説明 |
|---|---|
| -m | 指定したアクセス権でディレクトリを作成する |
| -p | 必要なら親ディレクトリも同時に作成する |
rmコマンド
ファイルやディレクトリを削除する
| オプション | 説明 |
|---|---|
| -f | ユーザへの確認なしに削除する |
| -i | 削除する前にユーザに確認する |
| -r, -R | サブディレクトリも含め、再帰的にディレクトリを削除する |
rmdirコマンド
空のディレクトリを削除する
| オプション | 説明 |
|---|---|
| -p | 複数階層の空ディレクトリを削除する |
touchコマンド
ファイルのタイムスタンプを、現在時刻か、指定した日時に変更する
| オプション | 説明 |
|---|---|
| -t | タイムスタンプをCCYYMMDDhhmm.SSに変更するデフォルトは現在時刻 |
| -a | アクセス時刻だけを変更する |
| -m | 修正時刻だけを変更する |
fileコマンド
ファイルの種別を表示する
3.1.10 メタキャラクタの利用
ファイル名のパターンを表す特殊な記号
| メタキャラクタ | 説明 |
|---|---|
| * | 0文字以上の文字または文字列にマッチする |
| ? | 任意の1文字にマッチする |
| [] | []内に列挙されている文字のいずれか1文字にマッチする |
| || | ,で句切られた文字列にマッチする |
3.2 パイプとリダイレクト
3.2.1 標準入出力
| 番号 | 入出力名 | デフォルト |
|---|---|---|
| 0 | 標準入力 | キーボード |
| 1 | 標準出力 | 画面(端末) |
| 2 | 標準エラー出力 | 画面(端末) |
3.2.2 パイプ
コマンドやプログラムの出力結果を、別のコマンドやプログラムの入力に渡す事ができる。|でコマンドを組み合わせる
teeコマンド
コマンドの実行結果をファイルに保存するとともに、出力も行う
| オプション | 説明 |
|---|---|
| -a | ファイルに追記する |
3.2.3 リダイレクト
コマンド結果をファイルに保存
例) lsコマンドの実行結果をファイルに保存
$ ls -la > file_list.txt
例) lsコマンドの実行結果をファイルに追記
$ ls -la >> file_list.txt
ヒアドキュメント
$ cat > sample.txt << EOF
LPI
Linux
EOF
リダイレクトとパイプ
| 書式 | 説明 |
|---|---|
| コマンド > ファイル | コマンドの標準出力をファイルに書き込む |
| コマンド < ファイル | ファイルの内容をコマンドの標準入力に送る |
| コマンド » ファイル | コマンドの標準出力をファイルに追記する |
| コマンド 2> ファイル | ファイルに標準エラー出力を書き込む |
| コマンド 2» ファイル | ファイルに標準エラー出力を追記する |
| コマンド > ファイル 2>&1 | ファイルに標準出力と標準エラー出力を書き込む |
| コマンド » ファイルに 2>&1 | ファイルに標準出力と標準エラー出力を追記する |
| コマンド « 終了文字 | 終了文字が現れるまで標準入力に送る(ヒアドキュメント) |
| コマンド1 | コマンド2 | コマンド1の標準出力をコマンド2の標準入力へ渡す |
| コマンド1 2>&1 | コマンド2 | コマンド1の標準出力と標準エラー出力をコマンド2の標準入力へ渡す |
| コマンド1 | tee ファイル | コマンド2 | コマンド1の標準出力をコマンド2の標準入力に渡すと共にファイルに書き込む |
| コマンド &> ファイル | 標準出力と標準エラー出力を同じファイルに書き込む |
- コマンドが出力するメッセージを表示しない
$ cmd > /dev/null 2>&1
3.3 テキスト処理フィルタ
catコマンド
ファイルの内容を表示する
| オプション | 説明 |
|---|---|
| -n | 行番号を表示する |
nlコマンド
テキストファイルの一部または全部を行番号付きで表示する。ヘッダ、本文、フッタの部分に分けて行番号を付加する事もできる
| オプション | 説明 |
|---|---|
| -b | 指定した形式で本文に行番号を付加する |
| -h | 指定した形式でヘッダに行番号を付加する |
| -f | 指定した形式でフッタに行番号を付加する |
| 形式 | 説明 |
|---|---|
| a | 全ての行 |
| t | 空白以外の行 |
| n | 行番号の付加を中止 |
odコマンド
バイナリファイルを8進数や16進数で表示する。デフォルトは8進数。
| オプション | 説明 |
|---|---|
| -t | 出力するフォーマットを指定する |
| 出力タイプ | 説明 |
|---|---|
| c | ASCII文字 |
| o | 8進数 |
| x | 16進数 |
headコマンド
ファイルの先頭部分を表示する。デフォルトは10行目まで
| オプション | 説明 |
|---|---|
| -n 行数 | 先頭から指定した行数分だけ表示する |
| -c バイト数 | 先頭から出力するバイト数を指定する |
tailコマンド
ファイルの末尾部分を表示する。デフォルトで10行。-fオプションでリアルタイムで出力し続けるので、ログ監視等でよく使う
| オプション | 説明 |
|---|---|
| -n 行数 | 末尾から指定した行数分だけ表示する |
| -c バイト数 | 末尾から出力するバイト数を指定する |
| -f | ファイルの末尾に追加された行を表示し続ける |
cutコマンド
ファイルの各行から指定したフィールドを取り出す
| オプション | 説明 |
|---|---|
| -c 文字数 | 取り出す文字位置を指定する |
| -d 区切り文字 | フィールドの区切り文字を指定する(デフォルトはタブ) |
| -f フィールド | 取り出すフィールドを指定する |
joinコマンド
2つのファイルを読み込んで、共通のフィールドを持つ行を連結する
| オプション | 説明 |
|---|---|
| -j フィールド | 連結するフィールドを指定する |
pasteコマンド
1つ以上のファイルを読み込んで、それぞれで一致する行を水平方向に連結する
| オプション | 説明 |
|---|---|
| -d 区切り文字 | フィールドの区切り文字を指定する(デフォルトはタブ) |
trコマンド
標準入力から読み込まれた文字列を変換したり、削除する
| オプション | 説明 |
|---|---|
| -d | 文字列1でマッチした文字列を削除する |
| -s | 連続するパターン文字列を1文字として処理する |
| クラス | 説明 |
|---|---|
| [:alpha:] | 英字 |
| [:lower:] | 英小文字 |
| [:upper:] | 英大文字 |
| [:digit:] | 数字 |
| [:alnum:] | 英数字 |
| [:space:] | スペース |
sortコマンド
行単位でファイルの内容をソートする
| オプション | 説明 |
|---|---|
| -b | 行頭の空白は無視する |
| -f | 大文字小文字の区別を無視する |
| -r | 降順にソートする |
| -n | 数字を文字でなく数値として処理する |
splitコマンド
指定されたサイズでファイルを分割する
| オプション | 説明 |
|---|---|
| - 行数 | 入力ファイルを指定された行ごとに分割する |
uniqコマンド
重複行を調べて、重複行を1行にまとめて表示する。入力するテキストストリームはソートしてある必要がある
| オプション | 説明 |
|---|---|
| -d | 重複している行のみ出力する |
| -u | 重複していない行のみ出力する |
prコマンド
ファイルの書式を整える。印刷する前の整形によく利用される
| オプション | 説明 |
|---|---|
| + 開始ページ[:終了ページ] | 開始ページや終了ページを指定する |
| -h ヘッダ文字列 | ヘッダに表示されるファイル名を指定した文字に変更する |
| -l ページ長 | ヘッダとフッタを含めたページの長さを行数で指定する |
fmtコマンド
テキストを決められた桁に整形する
| オプション | 説明 |
|---|---|
| -w | 1行の幅を設定する |
expandコマンド
テキストファイルにあるタブをスペースに変更する
| オプション | 説明 |
|---|---|
| -i | 行頭のタブのみ変更する |
| -t タブ幅 | タブ幅を設定する(デフォルトは8桁) |
unexpandコマンド
行頭に有る連続した空白をタブに変換する
| オプション | 説明 |
|---|---|
| -a | 行頭以外の空白も変換する |
| -t タブ幅 | タブ幅を指定する(デフォルトは8桁) |
wcコマンド
ファイル行数、英単語、文字数を表示する
| オプション | 説明 |
|---|---|
| -c | 文字数(バイト数)を表示する |
| -l | 行数を表示する |
| -w | 単語数を表示する |
xargsコマンド
標準入力から受け取った文字列を引数に指定して、与えられたコマンドを実行する。xargsコマンドの利点は、引数の数が多すぎた場合でも処理が出来るということである
3.4 正規表現を使ったテキスト検索
3.4.1 正規表現
| 記号 | 説明 |
|---|---|
| . | 任意の1文字 |
| * | 直前の文字の0回以上の繰り返し |
| [] | []内の文字のいずれか一文字 - : 範囲を指定, ^ : 先頭にある時は~以外を表す |
| ^ | 行頭 |
| $ | 行末 |
| \ | 次に来る文字をメタキャラクタではなく通常の文字として処理する |
| [a-zA-Z] | 英字 |
| [0-9] | 数字 |
3.4.2 grepコマンド
ファイルやテキストストリームを正規表現で検索する
| オプション | 説明 |
|---|---|
| -c | パターンがマッチした行の行数だけを表示する |
| -f | 検索パターンをファイルから読み込む |
| -i | 大文字小文字を区別しない |
| -n | 検索結果に行番号を表示する |
| -v | パターンがマッチしない行を表示する |
| -E | 拡張正規表現を使用する |
egrep
拡張正規表現を使用する
| メタキャラクタ | 説明 | |
|---|---|---|
| + | 直前の文字の1回以上の繰り返し | |
| ? | 直前の文字の0回もしくは1回の繰り返し | |
| 左右いずれかの記述にマッチする |
fgrep
検索パターンに正規表現を使用しない
3.4.3 sedコマンド
テキストストリームに対して編集を行う
| オプション | 説明 |
|---|---|
| -f ファイル | コマンドが書かれたスクリプトを指定する |
| -e コマンド | 複数のコマンドを指定する |
sed内で使用できる主なコマンド
| コマンド | 説明 |
|---|---|
| d | マッチした行を削除する |
| s | パターンに基づいて置換する。gスイッチを使うと、マッチ箇所すべてを置換する |
| y | 文字を置換する |
3.5 viエディタ
3.5.1 viエディタの基本
viの入力モード
入力モードでEscキーを押すと、コマンドモードに戻る
| コマンド | 説明 |
|---|---|
| i | カーソルの前にテキストを入力する |
| a | カーソルの後にテキストを入力する |
| I | 行頭の最初の文字にカーソルを移動し、その直前にテキストを入力する |
| A | 行末にカーソルを移動し、その直後にテキストを入力する |
| o | カレント行の下に空行を挿入し、その行でテキストを入力する |
| O | カレント行の上に空行を挿入し、その行でテキストを入力する |
カーソル移動
| コマンド | 説明 |
|---|---|
| h | 1文字左に移動する(←キー) |
| l | 1文字右に移動する(→キー) |
| k | 1文字上に移動する(↑キー) |
| j | 1文字下に移動する(↓キー) |
| 0 | 行頭へ移動する |
| $ | 行末へ移動する |
| H | 画面の一番上の行頭へ移動する |
| L | 画面の一番下の行頭へ移動する |
| gg | ファイルの先頭行に移動する |
| G | ファイルの最終行に移動する |
| nG | ファイルのn行目へ移動する |
| :n | ファイルのn行目へ移動する |
viの終了、ファイル保存、シェルコマンドの実行
| コマンド | 説明 |
|---|---|
| :q | ファイルを保存せずに終了する(確認メッセージが表示される) |
| :q! | 編集中の内容を保存せずに終了する |
| :wq | 編集中の内容を保存して終了する |
| ZZ | 編集中の内容を保存して終了する |
| :w | 編集中の内容でファイルを上書き保存する |
| :e! | 最後に保存した内容に復帰する |
| :r ファイル名 | ファイルの内容をカレント行移行に読み込む |
| :! コマンド | viを終了せずにシェルコマンドを実行する |
| :r! コマンド | シェルコマンド実行結果を挿入する |
viの編集コマンド
| コマンド | 説明 |
|---|---|
| x | カーソル位置の文字を削除する |
| X | カーソル位置の手前の文字を削除する |
| dd | カレント行を削除する |
| dw | カーソル位置から次の単語までを削除する |
| yy | カレント業をバッファにコピーする |
| p | カレント行の下にバッファの内容を貼り付ける |
| P | カレント行の上にバッファのの内容を貼り付ける |
| r | カーソル位置の1文字を置換する |
viの検索コマンド
| コマンド | 説明 |
|---|---|
| /パターン | カーソル位置から後方に向かって指定したパターンを検索する |
| ?パターン | カーソル位置から前方に向かって指定したパターンを検索する |
| n | 次を検索する |
| N | 次を検索する(逆方向) |
| :noh | 候補のハイライトを解除する |
| :%s/A/B/ | 最初の見つかった文字列を置換する |
| :%s/A/B/g | 全ての文字列を置換する |
viの設定変更
:setで設定する