コンテンツにスキップ

4. UNIX/Linuxコマンド

4.1. シェル

4.1.1. シェルとシェルの種類

シェルとは

シェルはコマンドを解釈して実行するプログラムのこと。 利用可能なシェルは/etc/shellsで確認可能。

シェルの種類

シェル 説明
sh UNIX V7から標準添付されているUNIXの基本的なシェル
csh C言語スタイルの構文を持ったUNIX系OSの代表的なシェル
tcsh Cシェルの派生版の中で特にユーザーインターフェイス部分を中心に拡張されたシェル
ksh Bシェルと上位互換を保ちながら、Cシェルなどから優れた機能を取り込んだシェル
bash UNIX系のシェルの1つでLinuxで用いられる標準のシェル

ログインシェル

ログインシェルはシステムへのログイン直後に起動するシェルのことで、これはユーザごとに定義が可能。 ユーザごとのログインシェルは/etc/passwdファイルに記述される。

なお現在ログインしている自身が使用しているシェルはps $$コマンドで確認できる。

4.1.2. シェルの基本操作と設定

シェルのキーボード操作

入力キー 説明
Tabキー コマンドやディレクトリ名などを補完する
Ctrl + C 実行処理を中断する
Ctrl + Z 実行処理を一時停止する
Ctrl + A 行の先頭へカーソルを移動する
Ctrl + D カーソル上にある文字列を1文字削除する
Ctrl + E 行の最後へカーソルを移動する
Ctrl + H カーソルの左側の文字列を1文字削除する
Ctrl + L 画面をクリアして、現在の行だけを再表示する
Ctrl + Q 画面への出力を再開する
Ctrl + S 画面への出力を停止する

ディレクトリの指定

メタキャラクタ 説明
~ ホーム
. カレントディレクトリ
.. 1つ上のディレクトリ

4.1.3. シェル変数と環境変数

Linuxが扱う変数にはシェル変数と環境変数の2種類がある。

シェル変数

シェル変数は現在実行しているシェルの中だけで有効な変数のこと。 特徴は以下の通り。

  • シェルを終了すると失われる
  • 別のシェルから参照することはできない

利用方法はecho $変数名で行い、例は以下の通り。

echo $hoge
hoge=123

なおunset 変数名で定義した変数の削除が可能。

環境変数

環境変数は現在実行しているシェルとそのシェルで実行されたプログラムにも引き継がれる変数のこと。

利用方法はexport 変数名で行い、例は以下の通り。

hoge=123
export hoge

また主な環境変数は以下の通り。

環境変数 説明
PWD カレントディレクトリ
HOSTNAME ホスト名
USER 現在のユーザー
LOGNAME ログインシェルのユーザー名
HISTSIZE コマンド履歴の最大値
HISTFILE コマンド履歴を格納するファイル
HISTFILESIZE HISTFILEに保存する履歴数
LANG ロケール
HOME カレントユーザーのホームディレクトリ

またPATHは既存のパスの後ろに;区切りで追加して以下のように通す。

export PATH=$PATH:/additional/path

シェル変数/環境変数の確認

シェル変数と環境変数を確認するためにはsetコマンドを使用する。 また設定済みの環境変数を一覧表示するためには、envコマンドやprintenvコマンドを使用する。

4.1.4. コマンドの実行と引用句

コマンドの区切り文字との実行

コマンドの区切り文字でコマンドを挟むと以下のような効果がある。

<コマンド1> <区切り文字> <コマンド2>
区切り文字 説明
; コマンドを同時に実行
&& 最初に実行したコマンドが正常に終了できた場合のみ次コマンドを実行
|| 最初に正常にコマンド終了できなかった場合のみ次コマンドを実行
コマンドに引用句を使う
引用句 説明
'' 常に文字列として扱う
"" 変数展開する
~~ コマンド展開する
`` コマンドを実行した結果を展開する

4.1.5. コマンド履歴の確認とマニュアルの確認

historyコマンド

historyコマンドはコマンド履歴を確認するコマンド

コマンド 説明
history 数字 数自分だけ過去の履歴を表示
!数字 数字のコマンドを実行
!! 直前のコマンドを実行

manコマンド

manコマンドはオンラインマニュアルページを閲覧できるコマンド。 マニュアルを構成するファイルは/usr/share/manにある。

man <オプション> コマンド | キーワード
オプション 説明
-a 全てのセクションのマニュアルを表示
-f 指定された完全一致のキーワードを含むドキュメントを表示
-k 指定された部分一致のキーワードを含むドキュメントを表示
-w マニュアルの置かれているディレクトリの表示

4.2. ファイル操作の基本コマンド

4.2.1. 基本的なコマンド

lsコマンド

カレントディレクトリを基準にそこに存在するファイルを表示するコマンド。

ls <オプション>
オプション 説明
-A すべて表示
-l 詳細表示
-d ディレクトリ自身の表示
-i inode番号表示
-t 日付順
-h ファイルサイズ表示

cpコマンド

ファイルをコピー/上書きするコマンド。

cp <オプション> <移動元> <移動先>
オプション 説明
-f 強制上書き
-i 対話モードで上書き確認
-p アクセス権/所有者などの保護
-r 再帰的にコピーする(ディレクトリコピーには必須)

mvコマンド

ファイルを移動させるコマンド。

mv <オプション> <移動元> <移動先>

mkdirコマンド

ディレクトリを作成するコマンド。

mkdir <ディレクトリ名>
オプション 説明
-m 指定したアクセス権でディレクトリ作成
-p 親ディレクトリも作る

rmコマンド

ファイルやディレクトリを削除するコマンド。

rm -rf <ファイル名>
オプション 説明
-f 強制的に削除
-r 再帰的に削除
-i 削除に確認をする

rmdirコマンド

空のディレクトリを削除するコマンド。

rmdir <ディレクトリ名>

touchコマンド

タイムスタンプの更新やファイルの作成を行うコマンド。

touch <ファイル名>
オプション 説明
-a アクセス時間の更新
-m 更新時間のみの更新
-t タイムスタンプの指定

fileコマンド

ファイルがテキストかバイナリか文字コードが何か確認するコマンド。

file <ファイル名>

typeコマンド

コマンドの実態を調査するコマンド。

type <コマンド>

whichコマンド

コマンドのフルパス(どこに存在するか)を教えるコマンド。

which <コマンド>

4.2.2. メタキャラクタ(正規表現)

メタキャラクタを用いることで絞り込みなどが行える。

メタキャラクタ 説明
* 0文字以上の任意の文字列
? 任意の1文字
[] 括弧内で列挙された文字のいずれか一文字
[!] 括弧内で列挙された文字にマッチしない任意の一文字
{} フレーズ展開

4.2.3. ファイル内容の確認/操作を行うコマンド

catコマンド

ファイルの内容を表示するコマンド。 -nオプションで各行ごとに行番号を付加する。

cat <ファイル名>

ファイルの先頭n行を表示するコマンド。

head <オプション> <ファイル名>
オプション 説明
-n 先頭から表示する行数の指定
-行数 先頭から表示する行数の指定
-c バイト数 先頭から表示するバイト数の指定

tailコマンド

ファイルの末尾n行を表示するコマンド

tail <オプション> <ファイル名>
オプション 説明
-n 末尾から表示する行数の指定
-行数 末尾から表示する行数の指定
-c バイト数 末尾から表示するバイト数の指定
-f ファイルの末尾に追加された行をリアルタイムで表示

cutコマンド

テキストファイルの各行から指定した部分の文字列を取り出して表示するコマンド。

cut <オプション> <ファイル名>
オプション 説明
-c 文字数 指定したテキストファイルから切り出す文字位置を指定
-d 区切り文字 フィールドの区切り文字を指定
-f フィールド 取り出すフィールドの指定

nlコマンド

文字列の行だけでなくヘッダ、本文、フッタの部分に分けて行番号を付けるコマンド。

nl -b a data.txt
オプション 説明
-b パラメータ 本文に行番号を付加
-h パラメータ ヘッダに行番号を付加
-f パラメータ フッタに行番号を付加
パラメータ 説明
a 全ての行に番号をつける
t 空白行には番号をつけない
n 行番号の付加をつけない

odコマンド

バイナリファイルの内容をASCII文字、8進数、16進数のいずれかで表示するコマンド。

od -t x data.txt
オプション 説明
-j バイナリファイルの bytes の場所から表示を開始
-t 表示タイプの指定(以下のようなタイプを指定可能)
タイプ指定文字 説明
a 文字の名前
c ASCII文字かバックスラッシュつきのエスケープ文字
d 符号付きの10進数
f 浮動小数点数
o 8 進数
u 符号なしの10進数
x 16 進数

joinコマンド

2つのファイルを読み込み、共通のフィールドを持つ行の連結を行うコマンド。 -j 数字オプションで連結フィールを指定できる。

join -j 1 data1.txt data2.txt

pasteコマンド

1つ以上のファイルを読み込み、一致する行を区切り文字を使用して連結するコマンド。 -d 区切り文字オプションで区切り文字の指定が可能。

 paste -d"," date1.txt date2.txt

trコマンド

文字列の変換、削除を行うコマンド。

tr <オプション> <文字列1> <文字列2>
オプション 説明
-d 「文字列1」で合致した文字列の削除
-s 連続するパターン文字列を1文字として処理
文字列の指定方法 説明
[ :alpha:] 英字
[ :lower:] 英小文字
[ :upper:] 英大文字
[ :digit:] 数字
[ :alnum:] 英数字
[ :space:] スペース

sortコマンド

行単位でファイルの内容をソートするコマンド。

sort <オプション> data.txt
オプション 説明
-b 行頭の空白を無視
-f 大文字小文字の区別を無視
-r 降順にソート
-n 数字を文字ではなく数字として処理

uniqコマンド

並び替え済みのデータから重複行を削除して、1行にまとめて表示するコマンド。 重複行を削除するために、ファイルの内容をsortコマンドなどにより並び替えてから実行することが多い。

sort data.txt | uniq
オプション 説明
-d 重複している行のみ出力
-u 前後の行と異なる行を表示

splitコマンド

指定サイズでファイルを分割するコマンド。

split -l 10 data.txt
オプション 説明
-l 行数 指定した行数でのファイル分割。-l を省力することも可能。
-b バイト 指定したバイト数でのファイル分割。

prコマンド

印刷前に使用されるファイルの書式を整えるコマンド。

pr -l 30 +1:5 data.txt
オプション 説明
+開始ページ [:終了ページ] 開始ページや終了ページの指定
-h ヘッダ文字列 ヘッダに表示されるファイル名を、指定した文字に変更
-l ページ長 ヘッダとフッタを含めたページの長さを行数で指定

fmtコマンド

テキストファイルを決められた桁に整形するコマンド。 -w 文字幅オプションで位置行幅を指定可能。

fmt <オプション> <ファイル名>

expand/unexpandコマンド

expandコマンドはテキストファイルの中にあるタブをスペースに変換するコマンド。 unexpandコマンドはスペースをタブに変換するコマンド

expand/unexpand <オプション> <ファイル名>
expandのオプション 説明
-i 行頭のタブのみスペースへ変換。
-t 数値 置き換える桁数の指定。タブ幅のデフォルトでは8桁
unexpandのオプション 説明
-a 行頭以外のスペースも変換。
-t 数値 置き換える桁数の指定。デフォルトでは8桁。

wcコマンド

指定したファイルの行数、単語数、文字数を表示するコマンド。

wc data.txt
オプション 説明
-c 文字数だけの表示
-l 行数だけの表示
-w 単語数だけの表示

4.3. パイプとリダイレクト

4.3.1. 標準入出力

Linuxのコマンドは、標準入力、標準出力、標準エラー出力を処理するように作成されてる。 ストリームはデータの入出力に伴うデータの流れを指し、ディスプレイ出力、キーボード入力等すべてがこれに抽象化されている。

ストリームとしての基本的なインタフェースは以下の通り。

番号(ファイルディスクリプタ) 入出力名 デフォルト
0 標準入力 キーボード
1 標準出力 画面(端末)
2 標準エラー出力 画面(端末)

4.3.2. パイプ

パイプ\|標準出力を標準入力につなぐやつもののこと。 使用例は以下の通り。

ls | wc -l 
書式 説明
コマンド1 コマンド2
コマンド1 2>&1 コマンド2
コマンド1 tee ファイル

teeコマンド

teeコマンドは標準入力から読み込んでファイルに書き込み、次のコマンドへ実行結果を引き渡せられるもの。 使用例は以下の通り。

オプション-aでファイルに追記する。

ls -l | tea data.txt

4.3.3. リダイレクト

リダイレクトを使用することでコマンドの実行結果を画面上ではなくファイルに保存することが可能。

リダイレクト 説明
> 出力のリダイレクト
>> 出力をファイルに追記
< 入力のリダイレクト
<< 入力終端文字の指定
2> エラー出力をファイルに設定し、コマンドを実行
2>&1 標準出力とエラー出力をファイルに設定し、コマンドを実行

4.3.4. ヒアドキュメント

ヒアドキュメントは<<EOFで始まる特定の文字列(この例ではEOF)が現れるまで標準入力から入力を受け付けるもの。