Skip to content

103 GNU / Unix Cmd#

コマンドラインでの作業#

  • history (過去に入力したコマンドの履歴を表示)
  • 「!番号」と入力することで特定のコマンドを再実行できる
  • 過去に入力したコマンドの履歴は、それぞれのユーザのホームディレクトリの「.bash_history」ファイルに記録
  • pwd (カレントディレクトリを表示)
  • uname (現在使用しているシステムの情報を表示する)
  • システムの詳細な情報を表示するには「-a」オプションを使用

代表的な環境変数#

環境変数 説明
HISTFILE コマンド履歴保存ファイルのパス
HISTSIZE 現在のシェルでのコマンド履歴の保存数
HISTFILESIZE コマンド履歴保存ファイルへの履歴保存数
HOSTNAME ホスト名
HOME ログインしているユーザのホームディレクトリ
LANG ロケール(言語設定)
PATH コマンドやプログラムを検索するディレクトリのリスト
PWD カレントディレクトリのパス
USER ログインしているユーザー

設定されている変数を一覧で確認するには以下のコマンドを使用します。

コマンド 説明
set すべてのシェル変数と環境変数を表示
env すべての環境変数を表示
printenv 一部、またはすべての環境変数を表示

Info

  • シェル変数の削除は「unset」コマンドで行う。
    (例)unset LPIC
  • 環境変数HISTFILESIZEを0にすると、コマンド履歴保存ファイルにコマンド履歴が保存されなくなります。

man コマンド#

man [オプション] [セクション番号] キーワード

オプション 説明
-k キーワードに一部一致するコマンドやファイルのmanページを一覧表示(aproposコマンドと同じ)
-f キーワードに完全一致するコマンドやファイルのmanページを一覧表示(whatisコマンドと同じ)
  • man ページのセクション番号
セクション番号 内容
1 ユーザーコマンド
2 システムコール(カーネルが提供する関数)
3 ライブラリ呼び出し(プログラムライブラリに含まれる関数)
4 特殊ファイル(通常/dev配下に存在するファイル)
5 ファイルの書式と慣習
6 ゲーム
7 その他いろいろなもの(マクロパッケージや慣習などを含む、例えば、man(7)やgroff(7))
8 システム管理コマンド(通常はroot用)
9 カーネルルーチン(非標準)

Note

shutdownコマンドのmanページセクションは8

makewhatis#

  • whatisデータベースとは、オンラインマニュアルページ(manページ)に関する情報を蓄積するデータベースのこと
  • makewhatisコマンドを実行することで作成、または更新される

フィルターを使用してのテキストストリーム処理#

md5sum / sha256sum / sha512sum#

以下はLinuxでメッセージダイジェストを計算・チェックする主なコマンドです。

コマンド 説明
md5sum MD5メッセージダイジェストを計算・チェックする
sha256sum SHA256メッセージダイジェストを計算・チェックする
sha512sum SHA512メッセージダイジェストを計算・チェックする

Info

-c (--check)オプションで読み込んだファイルの値と照合できる。

cut#

  • テキストファイルの各行から指定したフィールドを取り出して表示するにはcutコマンドを利用
  • cutコマンドの書式と主なオプションは以下のとおり
  • cut [オプション] [ファイル名]
オプション 説明
-c 文字数 抽出する文字位置を指定
-d 区切り文字 区切り文字を指定(デフォルトはタブ)
-f フィールド 抽出するフィールドを指定
n → n番目のフィールド
n,m →n番目とm番目のフィールド

例1#

  • 「/etc/passwd」ファイルの各行の2番目の文字を取り出して表示
    cut -c 2 /etc/passwd
    

例2#

  • カンマ区切りの CSV ファイルから 3 列目を抽出する例:
    cut -d',' -f3 data.csv
    

例3#

  • 空白区切りのファイルから 1 列目と 3 列目を抽出する例:
    cut -d' ' -f1,3 data.txt
    

例4#

  • 複数のファイルから同じカラムを抽出する例:
    cut -f2 file1.txt file2.txt
    

nl#

nlコマンドの書式と主なオプションは以下のとおりです。

nl [オプション] [ファイル名]

オプション 説明
-b a 空行を含めたすべての行に行番号をつける(catコマンドの-nオプションと同じ)
-b t 空行を除いた行に行番号をつける(catコマンドの-bオプションと同じ。)デフォルト。
  • 参考: cat -n コマンド表示例
root@ubuntu:/var/log# cat -n vsftpd.log 
     1  Sun Nov 14 00:42:02 2021 [pid 19215] CONNECT: Client "::ffff:127.0.0.1"
     2  Sun Nov 14 00:42:07 2021 [pid 19214] [omron] FAIL LOGIN: Client "::ffff:127.0.0.1"
     3  Sun Nov 14 00:42:13 2021 [pid 19219] CONNECT: Client "::ffff:127.0.0.1"
     4  Sun Nov 14 00:42:16 2021 [pid 19218] [omron] OK LOGIN: Client "::ffff:127.0.0.1"
  • 参考: nl コマンド表示例
    root@ubuntu:/var/log# nl vsftpd.log 
         1  Sun Nov 14 00:42:02 2021 [pid 19215] CONNECT: Client "::ffff:127.0.0.1"
         2  Sun Nov 14 00:42:07 2021 [pid 19214] [omron] FAIL LOGIN: Client "::ffff:127.0.0.1"
         3  Sun Nov 14 00:42:13 2021 [pid 19219] CONNECT: Client "::ffff:127.0.0.1"
         4  Sun Nov 14 00:42:16 2021 [pid 19218] [omron] OK LOGIN: Client "::ffff:127.0.0.1"
    

Tip

nl コマンドは空白には番号をつけない、cat -n コマンドは空白にも番号を付ける

cat#

  • catコマンドはconCATenate(接続する)という意味のコマンド
  • 与えられた入力を標準出力へ接続して表示するコマンド
  • catコマンドの引数にファイルを複数指定すると、ファイルを連結して出力
  • ファイル名が指定されない場合、または「-(ハイフン)」が指定された場合は標準入力から受け取ったデータを標準出力に表示
  • catコマンドの書式と主なオプションは以下のとおりです。
  • cat [オプション] [ファイル名 ...]
オプション 説明
-n 空行を含めたすべての行に行番号をつける(nlコマンドの「-b a」オプションと同じ)
-b 空行を除いた行に行番号をつける(nl コマンドの「-b t」オプションと同じ)

tr#

  • trコマンドは指定した文字を変換・削除するコマンドです
  • (標準入力であるキーボードから入力した文字を指定した文字に変換して、標準出力であるディスプレイに表示
  • trコマンドの書式と主なオプションは以下のとおりです。
  • tr [オプション] [文字列1 [文字列2]]
オプション 説明
-d 文字列1で指定した文字を削除
-s 文字列1で指定した文字が連続した場合、1文字に置き換える
  • また、文字列の指定には以下のような文字クラスを使用することができる
文字クラス 説明
[:alpha:] 英字
[:lower:] 英子文字( a- z)
[:upper:] 英大文字(A-Z)
[:digit:] 数字(0-9)
[:alnum:] 英数字
[:space:] スペース
  • なお、trコマンドは変換対象を標準入力からのみ受け付けます。
  • つまり、変換・削除したい文字列が記載されているファイルをコマンドの引数として指定することが出来ません。
  • そのため、以下のようにパイプ(|)やリダイレクト(<)を使用してファイルを指定します
  • cat ファイル名 | tr [オプション] [文字列1 [文字列2]]
  • tr [オプション] [文字列1 [文字列2]] < ファイル名
  • 例)「ping.txt」ファイルの「PINGT」を「pingt」に変換する場合
  • cat file.txt
  • cat file.txt | tr PINGT ping t
  • tr PINGT pingt < file.txt
  • headはファイルの先頭部分を指定して表示するコマンド
  • headコマンドの書式と主なオプションは以下のとおり
  • head [オプション] [ファイル名]
オプション 説明
-n or -行数 指定した行数をファイルの先頭から表示
-c バイト数 指定したバイト数をファイルの先頭から表示
  • (例)「httpd.conf」ファイルの先頭500バイトを表示
    head -c 500 httpd.conf

wc#

  • wcコマンドはファイル内の文字数や行数を調べることができるコマンド
  • wcコマンドの書式と主なオプションは以下のとおり
  • wc [オプション] [ファイル名]
オプション 説明
-l 行数を表示
-w 単語数を表示
-c 文字(バイト)数を表示

tail#

  • tailはファイルの末尾部分を指定して表示するコマンド
  • tailコマンドの書式と主なオプションは以下
  • tail [オプション] [ファイル名]
  • オプションを指定しない場合はデフォルトで末尾10行が表示されます。
オプション 説明
-n 行数 or -行数 指定した行数をファイルの末尾から表示
-c バイト数 指定したバイト数をファイルの末尾から表示
-f ファイルの末尾に追加された行を表示し続ける

split#

  • splitコマンドは指定した行数でファイルを分割するコマンド
  • splitコマンドの書式と主なオプションは以下。
  • split [-行数] [入力ファイル名 [出力ファイル名]]
  • split [-l 行数] [入力ファイル名 [出力ファイル名]]
  • 「-行数」または-lオプションでファイルを何行ごとに分割するかを指定できる
  • デフォルトは1000行
  • 出力されるファイル名には、「出力ファイル名」で指定したファイル名の末尾に「aa」、「ab」、「ac」などの文字列が順番に付きます。

paste#

複数のファイルを行単位で結合するコマンドはpaste

fmt#

1行あたりの最大文字数を指定してテキストを整形するコマンド

sort#

  • 行単位でファイルの内容をソートするにはsortコマンドを利用
  • sortコマンドの書式と主なオプションは以下のとおり
  • sort [オプション] [ファイル名]
  • 「-r」オプションを指定しない限り、ファイルの内容は昇順にソートされます。
オプション 説明
-b 行頭の空白を無視
-f 大文字、小文字を区別しない
-r 降順でソート
-t 区切り文字 指定した文字を区切り文字としてフィールドを認識
-n 数字を文字でなく数値としてソート
-k フィールド ソート対象とするフィールドを指定(デフォルトは1つ目のフィールド)

od#

  • ファイルの内容を8進数や16進数で表示するためにはodコマンドを使用
  • odコマンドの書式と主なオプションは以下のとおりです。
  • od [オプション] [ファイル名]
  • -t オプションで出力形式を指定することができる
オプション 説明
-t 出力フォーマットを指定
-o(デフォルト) 8進数2バイト区切りで表示 (-t o2 と同じ)
-x 16進数2バイト区切りで表示(-t x2 と同じ)
-c ASCII文字またはバックスラッシュ付のエスケープ文字で表示(-t c と同じ)
フォーマット 説明
c ASCII文字またはバックスラッシュ付のエスケープ文字で表示
o [SIZE] 8進数で表示。SIZEで表示を区切るバイト数を指定できる。(未指定時4バイト)
x [SIZE] 16進数で表示。SIZEで表示を区切る。バイト数を指定できる。(未指定時は4バイト)

uniq#

  • ソートされているファイルにある連続した重複行のみを表示するにはuniqコマンドを利用
  • uniqコマンドの書式と主なオプションは以下のとおり
  • uniq [オプション] [入力ファイル [出力ファイル]]
  • 出力ファイルを指定するとコマンドの実行結果は画面ではなく出力ファイルに出力されます。
オプション 説明
-d 重複している行のみを表示
-u 重複していない行のみを表示

pr#

ファイルを印刷用に整形するコマンド

改行コード#

多くのシステムではキャリッジリターン(Carriage Return: CR、\r(16進数で0D))と ラインフィード(Line feed: LF、\n(16進数で0A))を使って改行を表す

  • 改行コードと代表的なOSの組み合わせは以下のとおり
  • CRLF(\r\n):Windows
  • LF(\n):Unix OS(Linux, Mac OS Xなど)
  • CR(\r):古いMacOS(バージョン9まで)

  • 改行コードがCRLFのテキストファイル crlf.txt をLinuxで正しく扱えるようにするには以下のとおり。

  • tr -d '\r' < crlf.txt > linux.txt
  • cat crlf.txt | tr -d '\r' > linux.txt

基本的なファイル管理#

ls#

  • ディレクトリ内のファイルやディレクトリを表示するにはlsコマンドを利用します。
  • lsコマンドの書式と主なオプションは以下のとおり
  • ls [オプション] [ディレクトリ名またはファイル名]
オプション 説明
-a 隠しファイル(ドット「.」で始まるファイル)を含む全てのファイルとディレクトリを表
-A 「-a」と同じ。ただし、カレントディレクトリ「.」と親ディレクトリ「..」は表示しない
-d 指定したディレクトリの情報を表示
-F 名前の後ろにファイルタイプを表示
* 通常のファイル:なし 
* 実行可能ファイル:*
* ディレクトリ:/
* シンボリックリンク:@
-i inode番号をつけて表示
-l 詳細情報(パーミッション、所有者、サイズ、更新日時など)の表示
-R サブディレクトリの内容も再帰的に表示

cp#

  • cpコマンドはファイルやディレクトリのコピーを行うコマンドです。
  • cpコマンドの書式と主なオプションは以下のとおりです。
  • cp [オプション] コピー元のファイル(ディレクトリ) コピー先ファイル(ディレクトリ)
オプション 説明
-f コピー先の既存のファイルやディレクトリが上書きできない場合、削除してからコピーする
-i 同名のファイルやディレクトリがある場合、上書きするかどうか問い合わせる
-p ファイルの属性(パーミッション、所有者、更新時間など)を保持したままコピー※所有者情報を保持できるのはrootユーザーのみ
-r (-R) ディレクトリをコピー

【 cp 】 ファイルやディレクトリをコピーする

rm#

  • ファイルやディレクトリを削除するにはrmコマンドを利用します。
  • rmコマンドの書式と主なオプションは以下のとおりです。
  • rm [オプション] ファイルまたはディレクトリ名
  • rm [-dfirvR] [--directory] [--force] [--interactive] [--recursive] [--help] [--verbose] name...
オプション 説明
-f, --force 削除してよいか問い合わせない
-i, --interactive 削除してよいかどうか問い合わせる
-r, -R, --recursive ディレクトリ全体を再帰的に削除
-d, --directory ディレクトリごと削除できる。スーパーユーザーのみ使用が可能
-v, --verbose ファイルを削除する前にファイル名を表示する
--help rmコマンドの使用法を表示する
name 削除するファイルやディレクトリを指定する。ワイルド・カードを使用できる

【 rm 】 ファイルやディレクトリを削除する

mv#

  • ファイルやディレクトリの移動・名前の変更をする
  • mv [options] source dest
  • mv [options] source... directory
オプション 説明
-f, --force 移動先に同名ファイルがあるときも警告なく上書きをする
-b, --backup 上書きされる,削除されるファイルのバックアップを作成する
-i, --interactive 上書きされるファイルがあるときは問い合わせする
-u, --update 同名のファイルが存在した場合,タイム・スタンプを比較し同じまたは新しいときには移動を行わない
-v, --verbose 移動の前にそのファイル名を表示する
--help lsコマンドの使用法を表示する
source コピー元のファイルやディレクトリを指定する。ワイルド・カードを使用することもできる
dest コピー先のファイル名やディレクトリ名を指定する。ファイル名を指定した場合は新しい名前でコピーされる
directory コピー先のディレクトリを指定する

mkdir#

  • mkdirは新規ディレクトリを作成するコマンドです。
  • mkdirコマンドの書式と主なオプションは以下のとおりです。
  • mkdir [オプション] ディレクトリ名
オプション 説明
-m アクセス権 指定したアクセス権でディレクトリを作成
-p 引数に階層のあるディレクトリを指定した場合、存在しない中間ディレクトリも同時に作成

rmdir#

  • rmdirコマンドは空のディレクトリのみを削除することが出来るコマンドです。
  • rmdirコマンドの書式と主なオプションは以下のとおりです。
  • rmdir [-p] ディレクトリ名
  • 「-p」はディレクトリ名に階層を指定した場合、削除するディレクトリの親ディレクトリを同時に削除するオプションです。

dd#

ファイルの変換とコピーを行う

dd [if=file] [of=file] [ibs=bytes] [obs=bytes] [bs=bytes] [cbs=bytes] [skip=blocks] [seek=blocks] [count=blocks] [conv=code]

オプション 説明
if=file 入力ファイルを指定する。指定がない場合は標準入力を表す
of=file 出力ファイルを指定する。指定がない場合は標準出力を表す
ibs=bytes 一度に指定したバイトのブロックを読み出す
obs=bytes 一度に指定したバイトのブロックを書き込む
bs=bytes 一度に指定したバイトのブロックを読み書きする
cbs=bytes 一度に指定したバイトのブロックを変換する
skip=blocks 入力ファイルの先頭から指定したブロックをスキップする
seek=blocks 出力ファイル中の指定したブロックをスキップする
count=blocks 入力ファイルから出力ファイルへ指定したブロックをコピーする
conv=code コード変換を行する。指定できるコードは後述のコード表を参照
  • コード表
コード 説明
ascii EBCDICをASCIIに変換
block 改行で区切られたレコードをcbsで指定したサイズに合わせる。不足分は空白が使われる
ebcdic ASCIIからEBCDICに変換
ibm ASCIIからEBCDICに変換(ebcdicとは,文字コードが4カ所異なる)
lcase 大文字を小文字に変換
noerror 読み込みエラーが発生したとしても継続する
notrunc 出力ファイルを丸めない
swab 奇数バイト目と偶数バイト目を入れ替える
sync isbで指定したブロック数に合わせる。不足分はNULLが使われる
ucase 小文字を大文字に変換
unblock cbsで指定したブロックの末尾の連続した空白を改行に変換

参照元:【 dd 】 ファイルの変換とコピーを行う

file#

  • 「file」コマンドではファイルの種類が表示
  • fileコマンドを使用すると、ファイルの最終変更時刻(mtime、ctime)は更新されませんが、最終アクセス時刻(atime)は更新されます。

stat#

  • statコマンドは、ファイルやファイルシステムのinode番号やタイムスタンプ(アクセス時刻や修正時刻)などの詳細情報を表示できます。
  • inodeとは、Linuxファイルシステムにおいてファイルの属性(パーミッションや所有ユーザなどの情報)を格納するもの
  • 全てのファイルには対応するinode番号があります。

touch#

  • touchコマンドは、空のファイルを作成したり、ファイルのタイムスタンプ(アクセス時刻や修正時刻)を変更する際に利用します。
  • touchコマンドの書式と主なオプションは以下のとおりです。
  • touch [オプション] ファイル名 [ファイル名・・・]
オプション 説明
-t 時刻 アクセス時刻と修正時刻を指定した時刻に変更
-a アクセス時刻を変更
-m 修正時刻を変更

参照元:【 touch 】 ファイルのタイム・スタンプを変更する

xz#

  • bzip2よりも圧縮率が高い圧縮形式として、LZMA2圧縮アルゴリズムを採用したxzフォーマットがあります
  • xzはbzip2よりも多くのCPU/メモリを要求しますが、その分圧縮率が高く、また展開速度はbzip2より短い
  • Linuxカーネルソースの配布形式としても採用されています。
  • xz形式でファイルを圧縮するにはxzコマンドを使用します。
  • xzコマンドの書式および主なオプションは以下のとおりです。
  • xz [ オプション ] 処理対象ファイル名
オプション 説明
-d, --decompress 圧縮ファイルの展開
-k, --keeep 圧縮、展開処理後に元のファイルを削除しない
-l, --list 圧縮ファイルの情報を表示する

xzcat#

  • ファイルの内容を標準出力へ送信するコマンドは「cat」コマンド
  • しかし圧縮されたファイルの場合もそのまま送信するため正しく表示されません。
  • xz形式(拡張子.xz)で圧縮されたファイルを展開して直接標準出力へ送信するには「xzcat」コマンドを使用します。
  • xzcatコマンドの書式は以下のとおりです。
  • xzcat [ファイル名]

bzip2#

  • bzip2形式でファイルを圧縮するにはbzip2コマンドを使用します。
  • bzip2コマンドの書式および主なオプションは以下のとおりです。
  • bzip2 [オプション] [ファイル名]
  • ファイルを圧縮するには「-d」オプションを指定せずにコマンドを実行します。
オプション 説明
-d 圧縮ファイルを展開
-c 元のファイルを残して標準出力に出力

tar#

  • tarコマンドは複数のファイルをまとめて1つのファイル(アーカイブ)にする、またはアーカイブを展開する際に使用するコマンド
  • tarコマンドの書式と主なオプションは以下のとおり
  • tar [オプション] [ファイルまたはディレクトリ名]
オプション 説明
-c 新しいアーカイブを作成
-x アーカイブからファイルを展開
-t アーカイブの内容を一覧表示
-f アーカイブファイル名を指定
-v 処理の詳細情報の表示
-z gzipを通して圧縮/展開
-j bzip2を通して圧縮/展開
-J xzを通して圧縮/展開

Note

  • tarコマンドではオプションの「-」は省略できます。
  • オプションは順不同でも動作しますが、慣習的にはc, x, tのような動作オプションを先頭に指定します。

cpio#

  • cpioコマンドもtarコマンドと同じく、複数のファイルをまとめて1つのファイル(アーカイブ)にする、またはアーカイブを展開する際に使用するコマンド
  • cpioコマンドはアーカイブを作成する際、標準入力からファイル名のリストを受け取り、標準出力でアーカイブを作成する
  • findコマンドによる検索結果と組み合わせる等すれば、複雑な条件のバックアップも可能です。
  • cpioコマンドの書式と主なオプションは以下のとおりです。
  • cpio [オプション]
オプション 説明
-o 新しいアーカイブを作成
-i アーカイブからファイルを展開
  • cpioコマンドは標準入力や標準出力を使用
  • 入力ファイルや出力ファイルをコマンドの引数として指定することができない
  • そのため、以下のようにパイプ(|)およびリダイレクト(<と>)を使用してファイルを指定します。
  • 例1)カレントディレクトリ以下にある全てのファイルを1つにまとめて、ユーザのホームディレクトリに「backup.cpio」というアーカイブを作成する場合
  • $ find . | cpio -o > ~/backup.cpio
  • 例2)「backup.cpio」というアーカイブからファイルを展開する場合
  • $ cpio -i < backup.cpio

gzip#

  • gzip形式でファイルを圧縮するにはgzipコマンドを利用
  • gzipコマンドの書式および主なオプションは以下のとおり
  • gzip [オプション] [ファイル名]
オプション 説明
-d 圧縮ファイルを展開
-c 元ファイルを残して標準出力に出力
-r ディレクトリ内の全てのファイルを再帰的にそれぞれ圧縮

Tip

gzipコマンドは複数のファイルを1つにまとめて圧縮することはできません。
複数のファイルを1つにまとめるにはtarコマンドを利用します。

zcat#

  • ファイルの内容を標準出力へ送信するコマンドは「cat」コマンド
  • しかし圧縮されたファイルの場合もそのまま送信するため正しく表示されません。
  • gzip形式(拡張子.gz)で圧縮されたファイルを展開して直接標準出力へ送信するには「zcat」コマンドを使用します。
  • zcatコマンドの書式は以下のとおりです。
  • zcat [ファイル名]

ストリーム、パイプ、リダイレクトの使用#

  • シェルは標準入力、標準出力および標準エラー出力の3つのストリームを制御することができます。
  • デフォルトで標準入力の入力元はキーボード、標準出力と標準エラー出力(エラーメッセージ)の出力先はディスプレイです。
  • また上図にある数字(0~2)はファイルディスクリプタと言い、それぞれ対応する入出力を表します。
  • リダイレクトという機能を使用する事で、入力元や出力先を変更できます。
  • リダイレクトを使うには「>」や「<」などのリダイレクト演算子と、ファイルディスクリプタを組合せた記号を用います。
  • その際、0と1のファイルディスクリプタは省略可能です。
記号 説明
< 標準入力の入力元を指定(0<と同義)
<< (ヒアドキュメント) 標準入力の入力元を指定し、終了文字まで入力(0<<と同義)
<<< (ヒアストリング) 指定した文字列をコマンドの標準入力に送る
> 標準出力の出力先を指定(1>と同義)
>> 標準出力の出力先を指定し、出力先に追記(1>>と同義)
2> 標準エラー出力の出力の出力を指定
2>> 標準エラー出力の出力の出力を指定し、出力先に追記
>&2 標準出力の出力先を、標準エラー出力の出力先と同じにする(1 >&2 と同義)
2>&1 標準エラー出力の出力先を、標準出力の出力先と同じにする
  • 例) コマンド < ファイル
    ファイルの内容をコマンドの標準入力に送る

  • 例) コマンド << 終了文字
    終了文字が現れるまでコマンドの標準入力に入力を送る

  • 例) コマンド <<< 文字列
    文字列をコマンドの標準入力に送る

  • 例) コマンド > ファイル
    コマンドの標準出力をファイルに出力 ファイルが無ければ新規作成、すでにファイルがある場合は上書き( >> であればファイルに追記)

  • 例) コマンド 2> ファイル
    コマンドの標準エラー出力をファイルに出力( 2>> であればファイルに追記)

  • 例) コマンド 1>&2
    コマンドの標準出力の出力先を、標準エラー出力の出力先と同じにする(コマンドの正常な実行結果もエラーメッセージとしてディスプレイに表示する)

  • 例) コマンド > ファイル 2>&1
    コマンドの標準エラー出力の出力先を、標準出力の出力先と同じにする(例ではまず「>」で標準出力の出力先をファイルに変更しているので、標準エラー出力の出力先も同じファイルになる)

また、「パイプ(|)」という機能を使用することによって、標準出力に出力されたコマンドの実行結果を、別のコマンドの標準入力に渡すことができます。

プロセスの作成、監視、終了#

free#

メモリやスワップ領域の使用状況を表示するコマンド

  • 表示例
    root@ubuntu:/# free
                  total        used        free      shared  buff/cache   available
    Mem:        8112832     1000488     6391428        2636      720916     6857132
    Swap:        945416           0      945416
    

top#

topコマンドはメモリやスワップ領域の使用状況を一定時間ごと(デフォルトは5秒)に更新して表示します。

  • 表示例:
    root@ubuntu:/# top
    
    top - 16:21:03 up  1:17,  1 user,  load average: 0.00, 0.00, 0.00
    Tasks: 290 total,   1 running, 289 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  0.7 us,  1.7 sy,  0.0 ni, 97.5 id,  0.0 wa,  0.0 hi,  0.2 si,  0.0 st
    MiB Mem :   7922.7 total,   6242.4 free,    976.1 used,    704.2 buff/cache
    MiB Swap:    923.3 total,    923.3 free,      0.0 used.   6697.4 avail Mem 
    
        PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND        
       1494 omron     20   0  354872 123760  39932 S   3.3   1.5   0:49.25 Xorg           
       2019 omron     20   0  836404  58248  41508 S   1.7   0.7   0:19.81 gnome-termina+ 
       1682 omron     20   0 4076288 267636 103880 S   1.3   3.3   1:11.03 gnome-shell    
       2572 root      20   0   20624   4036   3264 R   0.7   0.0   0:00.12 top            
          1 root      20   0  167644  11476   8308 S   0.0   0.1   0:06.59 systemd        
          2 root      20   0       0      0      0 S   0.0   0.0   0:00.07 kthreadd       
          3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp         
          4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp     
          6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-+ 
          9 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq   
         10 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_rud+ 
         11 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_tra+ 
         12 root      20   0       0      0      0 S   0.0   0.0   0:00.21 ksoftirqd/0    
         13 root      20   0       0      0      0 I   0.0   0.0   0:01.16 rcu_sched      
         14 root      rt   0       0      0      0 S   0.0   0.0   0:00.07 migration/0    
         15 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 idle_inject/0
    <<< snip >>>
    

なお、topコマンドの実行結果の1行目もuptimeコマンドの実行結果とほぼ同じです

  • 参考:
    root@ubuntu:/# uptime
     16:22:11 up  1:18,  1 user,  load average: 0.05, 0.02, 0.00
    

ps#

現在実行中のプロセスを表示するコマンド

オプション 説明
a 他のユーザのプロセスも表示(xオプションとの併用で全てのプロセスを表示)
f プロセスの親子関係をツリー状で表示
u プロセスの実行ユーザー名も表示
x 制御端末の無いデーモン等のプロセスも表示
-e 全てのプロセスを表示
-f 完全なフォーマットでプロセスを表示
-p (p, PID) 指定したPID(プロセスID)のプロセス情報を表示
-l ( l ) 親プロセスのPID(PPID)や実行優先度を決定するnice値(NI)なども併せて表示

現在実行中の全てのプロセスを表示するpsコマンドのオプション * ax * -ef * 表示例:

root@ubuntu:/# ps ax
    PID TTY      STAT   TIME COMMAND
      1 ?        Ss     0:06 /sbin/init auto noprompt
      2 ?        S      0:00 [kthreadd]
      3 ?        I<     0:00 [rcu_gp]
      4 ?        I<     0:00 [rcu_par_gp]
      6 ?        I<     0:00 [kworker/0:0H-events_highpri]
      9 ?        I<     0:00 [mm_percpu_wq]
     10 ?        S      0:00 [rcu_tasks_rude_]

... <<< snip >>>

   2094 pts/0    S      0:00 su
   2095 pts/0    S      0:00 bash
   2373 ?        I      0:01 [kworker/0:0-cgroup_destroy]
   2501 ?        I      0:00 [kworker/1:0-cgroup_destroy]
   2512 ?        I      0:00 [kworker/u256:2-ext4-rsv-conversion]
   2518 ?        I      0:00 [kworker/u256:3-events_unbound]
   2526 ?        I      0:00 [kworker/1:1-events]
   2569 ?        I      0:00 [kworker/0:2-events]
   2580 ?        R      0:00 [kworker/u256:0-events_unbound]
   2588 pts/0    R+     0:00 ps ax
root@ubuntu:/# 

  • 動作中のプロセスの親子関係をツリー状で表示する
    • ps axf
    • 表示例:
      root@ubuntu:/# ps axf
          PID TTY      STAT   TIME COMMAND
            2 ?        S      0:00 [kthreadd]
            3 ?        I<     0:00  \_ [rcu_gp]
            4 ?        I<     0:00  \_ [rcu_par_gp]
            6 ?        I<     0:00  \_ [kworker/0:0H-events_highpri]
            9 ?        I<     0:00  \_ [mm_percpu_wq]
           10 ?        S      0:00  \_ [rcu_tasks_rude_]
      
      ... <<< snip >>>>
      
      
         1860 ?        Ssl    0:00  \_ /usr/libexec/gsd-xsettings
         1864 ?        Sl     0:12  \_ /usr/bin/vmtoolsd -n vmusr --blockFd 3
         1890 ?        Sl     0:00  \_ /usr/libexec/gsd-printer
         2019 ?        Ssl    0:22  \_ /usr/libexec/gnome-terminal-server
         2027 pts/0    Ss     0:00  |   \_ bash
         2094 pts/0    S      0:00  |       \_ su
         2095 pts/0    S      0:00  |           \_ bash
         2584 pts/0    R+     0:00  |               \_ ps axf
         2033 ?        Ssl    0:00  \_ /usr/libexec/gvfsd-metadata
         1460 ?        Sl     0:00 /usr/bin/gnome-keyring-daemon --daemonize --login
      

Tip

pstreeでも可

root@ubuntu:/# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        ├─NetworkManager───3*[{NetworkManager}]
        ├─VGAuthService
        ├─accounts-daemon───2*[{accounts-daemon}]
        ├─acpid
        ├─avahi-daemon───avahi-daemon
        ├─bluetoothd
        ├─colord───2*[{colord}]
        ├─cron
        ├─cups-browsed───2*[{cups-browsed}]
        ├─cupsd
        ├─dbus-daemon
        ├─gdm3─┬─gdm-session-wor─┬─gdm-x-session─┬─Xorg───{Xorg}
        │      │                 │               ├─gnome-session-b─┬─ssh-agent
        │      │                 │               │                 └─2*[{gnome-sessio+
        │      │                 │               └─2*[{gdm-x-session}]
        │      │                 └─2*[{gdm-session-wor}]
        │      └─2*[{gdm3}]

... <<< snip >>> ...

        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-resolve
        ├─systemd-timesyn───{systemd-timesyn}
        ├─systemd-udevd
        ├─udisksd───4*[{udisksd}]
        ├─unattended-upgr───{unattended-upgr}
        ├─upowerd───2*[{upowerd}]
        ├─vmtoolsd───3*[{vmtoolsd}]
        ├─vmware-vmblock-───2*[{vmware-vmblock-}]
        ├─vsftpd
        ├─whoopsie───2*[{whoopsie}]
        └─wpa_supplicant

bg#

一時停止中のジョブをバックグラウンド動作に切り替えるコマンド

fg#

バックグラウンドで動作中または一時停止中のジョブを、フォアグラウンド動作に切り替えるコマンド

uptime#

システムの稼働時間や負荷平均などを表示するコマンド

watch#

指定したコマンドを一定時間ごとに繰り返し実行し、結果を表示するコマンド

jobs#

  • 現在バックグラウンドで動作しているジョブと一時停止中のジョブを表示するコマンド
  • 「Running」はバックグラウンドで動作中、「Stopped」は一時停止中のジョブを表します。

pgrep#

pgrepコマンドで実行中のプロセスから特定の名前を持つプロセスIDを検索することができます。

-uオプションに実効ユーザー(実際の権限)名や実効ユーザー識別子(EUID)を指定すると、その権限で動作しているプロセスを検索できます。

  • (例)現在実行中のプロセスから、root権限で動作しているプロセスのプロセスIDを検索
    • pgrep -u 0
    • pgrep -u root

kill#

プロセスにシグナルを送ることでプロセスを終了させたり、再起動させることができます。 プロセスID(PID)を使用してプロセスにシグナルを送るにはkillコマンドを利用します。

killコマンドの書式と主なシグナル名およびシグナル番号は以下のとおりです。

kill [-シグナル名または-シグナル番号] プロセスID
または
kill -s [シグナル名またはシグナル番号] プロセスID

シグナル名 シグナル番号 動作
HUP(SIGHUP) 1 ハングアップ(端末の切断による終了)
INT(SIGINT) 2 割り込みにによる終了(Ctrl + Cキー押下と同様)
KILL(SIGKILL) 9 クリーンアップせずに終了(強制終了)
TERM(SIGTERM) 15 クリーンアップして終了(デフォルト)
CONT(SIGCONT) 18(環境依存) 一時停止のプロセスを再開
STOP(SIGSTOP) 19(環境依存) 一時停止
TSTP(SIGTSTP) 20(環境依存) 端末から入力された一時停止(Ctrl + Zキー押下と同様)
  • KILL(SIGKILL)シグナルは、TERM(SIGTERM)シグナルでも終了できなかった異常な状態のプロセスを強制的に終了する場合などに使用します。
  • TERM(SIGTERM)シグナルは、プロセスが開いているファイルを閉じるなどの作業(クリーンアップ)を行ってからプロセスを終了しますが、
  • KILL(SIGKILL)シグナルはクリーンアップを行わないため、データを失う可能性があります。

なお、以下のコマンドは全て同じ動作をします。

  • kill -9 5884
  • kill -KILL 5884
  • kill -SIGKILL 5884
  • kill -s 9 5884
  • kill -s KILL 5884
  • kill -s SIGKILL 5884

killall#

killコマンドと同じく、killallもプロセスを終了させることができるコマンドです。
killはプロセスIDでプロセスを指定するのに対し、killallは「プロセスの名前」を指定することができます。 この場合、該当する名前のプロセスが“全て殺される”ことになります。

killallコマンドの主なオプションは次の通りです。

短いオプション 長いオプション 意味
-s シグナル --signal シグナル プロセスに送るシグナル名または番号。-シグナル名、-番号でも指定可能(「シグナルとは」を参照)
-l --list シグナル名のリストを表示する
-i --interactive シグナルを送る前に確認する
-v --verbose シグナルの送信に成功したらメッセージを表示する
-q --quiet 対象となるプロセスがなかった場合もメッセージを表示しない
-I --ignore-case 名前の大小文字を区別しない
-r --regexp 名前を正規表現で指定する
-e --exact 長い名前でも完全一致しないとシグナルを送らない
-g --process-group 指定したプロセスが所属しているグループにシグナルを送る
-y 時間 --younger-than 時間 指定時間より新しいプロセスにシグナルを送る
-o 時間 --older-than 時刻 指定時刻より古いプロセスにシグナルを送る(「時間を指定してプロセスを終了させるには」を参照)
-u ユーザー --user ユーザー 指定したユーザーのプロセスにだけシグナルを送る

pkill#

指定したパターンにマッチする名前のプロセスにシグナルを送るコマンド

「&」(バックグラウンド実行)#

コマンドをシェル上で実行すると、通常フォアグラウンドで実行されます。 コマンドをバックグラウンドで実行するには、コマンドラインの末尾に「&」を付けて実行します。

なお、バックグラウンドで動作している、または一時停止中のジョブはjobsコマンドで確認することができます。

(例)「ping localhost > ping.txt」コマンドをログアウト後もバックグラウンドで実行し続ける
* nohup ping localhost > ping.txt &

screen / tmux#

  • Linuxはマルチユーザー、マルチタスクのOSであり、複数人で同時に接続して操作できるよう制御されています。
  • それぞれの入力(キーボードやマウス)、出力(ディスプレイ)環境のことを「端末(またはターミナル:Terminal)」と呼びます。
  • 通常Linuxの管理などで作業する際にはリモートから端末プログラム(TeraTerm, Putty、telnetなど)を使って接続を行います。
  • 実機の実キーボード、ディスプレイを操作する場合でも、OS上の端末プログラム(gettyなど)が入出力制御を行っています。
  • 作業内容によっては処理状況を見ながらコマンドを実行するなど、複数の端末を使いたい場合があります。
  • この場合、多数の端末プログラムを使用するのではなく、仮想端末を制御するプログラムを動作させることで、一つの端末上で複数の端末を利用できるようになります。
  • また、仮想端末制御プログラムを使うことで、開いている仮想端末をサスペンド状態で切り離し(デタッチ)、再度別の環境から仮想端末に接続する(アタッチ)、端末画面を分割して複数の仮想端末画面を同時に表示する事ができるなどのメリットがあります。
  • 仮想端末制御プログラムとして、screenやtmuxがあります。

プロセスの実行優先度の変更#

  • プロセスにはnice値という実行優先度が設定されています。
  • 優先度の高いプロセスにはCPUの使用時間が多く割り当てられます。
  • nice値は「-20」から「19」まであり、nice値が低いプロセスほど優先度が高くなります。
  • デフォルトのnice値は「0」です。
  • nice値を指定してコマンドを実行(プロセスを起動)するにはniceコマンドを利用します。
  • niceコマンドの書式は以下のとおりです。

nice [-n nice値] コマンド または nice [-nice値] コマンド

nice値を省略して実行した場合、そのコマンドのnice値は「10」になります。

また、すでに起動しているプロセスのnice値を変更するにはreniceコマンドを利用します。

reniceコマンドの書式と主なオプションは以下のとおりです。

renice [-n] nice値 オプション

オプション 説明
- u ユーザー名 指定したユーザーが所有する全てのプロセスのnice値を変更
-p PID 指定したPIDのプロセルのnice値を変更(-p は省略可能)

-nオプションは省略可能ですが、-nオプションを使ってnice値を指定する場合でも-nを使わない場合と同様、他のオプションの前に指定しなければなりません。

なお、nice値を指定・変更する主な目的は、実行に長時間かかったり重要ではないプログラムを低い優先度で実行するためなので、 一般ユーザでは以下の操作はできません。以下の操作を行うにはroot権限が必要です。 * 他のユーザのプロセスのnice値を変更する * nice値を下げる(優先度を上げる) * nice値に0より小さい値を設定する

正規表現を使用してのテキストファイル検索#

正規表現とは、文字列の特定のパターンを認識する為に使用する表現方法です。文字列の検索や置換などを行う際に利用します。 正規表現には基本正規表現(BRE: Basic Regular Expression)と拡張正規表現(ERE: Extended Regular Expression)があります。

正規表現 説明
. 任意の1文字
* 直前の文字の0回以上の繰り返し
[ ] []内のいずれか1文字
[]内では以下の表現と併用可能
-範囲指定
^先頭にある場合は後続の文字以外
^ 行頭
$ 行末
| 次の1文字をエスケープ(通常の文字として処理)
+ 直前の文字の1回以上の繰り返し(拡張正規表現)
? 直前の文字0回もしくは1回の繰り返し(拡張正規表現)
| 左右のいずれかの文字列(拡張正規表現)

Info

直前に (半角のバックスラッシュ)を入力することで通常の文字として処理します。\は日本キーボードでは¥となります。

  • メタキャラクタ:シェルにおいて、特別な意味を持つ記号のこと。
  • 正規表現 :文字列のパターンを表す時に利用される表現方法。

また、正規表現には次のような基本の概念があります。 * 特殊文字
「|」や「\(エスケープ文字)」などのように特殊な意味を持つ文字のことです。

  • 文字クラス
    「[ ]」内の文字集合のことです。

  • 数量詞
    「*」や「+」などのように直前の文字の繰り返し回数を示す文字のことです。

  • アンカー
    「^」や「$」などのように文字列内での位置を示す文字のことです。

  • sample

正規表現 説明
[A-Z] 大文字のアルファベット1文字を表す

grep#

grepコマンドの書式と主なオプションは以下のとおりです。

grep [オプション] 検索パターン [ファイル名]

オプション 説明
-c マッチした行の行数のみ表示
-f 検索パターンをファイルから読み込む
-i 大文字と小文字を区別しない
-n 先頭に行番号をつけて、マッチした行を表示
-v マッチしなかった行を表示
-E 拡張正規表現を使用(egrepコマンドと同様)
-F 検索パターンを正規表現ではなく、固定文字列とする(fgrepコマンドと同様)

sed#

  • ファイルや標準入力の内容を編集して表示するにはsedコマンドを利用
  • sedコマンドの書式と主なオプション・編集コマンドは以下のとおりです。

  • sed [オプション] 編集コマンド [ファイル名]

  • sed [オプション] -e 編集コマンド1 [-e 編集コマンド2 ...] [ファイル名]
  • sed [オプション] -f スクリプト [ファイル名]
オプション 説明
-e 編集コマンドを指定(編集コマンドが1つの場合は省略可)
-f 編集コマンドを記述したファイルを指定
編集コマンド 説明
s/文字列1/文字列2/ 各行の最初に現れる文字列1を文字列2に置換
s/文字列1/文字列2/g 全ての文字列1を文字列2に置換
/文字列/d 文字列が含まれる行を削除
行番号1,行番号2d 行番号1から行番号2までの行を削除
y/文字1文字2…/文字3文字4…/ 文字1を文字3に、文字2を文字4に置換
  • (例)「test.txt」ファイル内の全ての「pingt」という文字列を「hoge」に置換し、行頭が「#」の行を削除して表示
    sed -e s/pingt/hoge/g -e /^#/d test.txt

ファイルの基本的な編集#

環境変数EDITORに使用したいエディタの起動コマンドを設定することで、デフォルトのエディタを変更できます。

  • 例)Emacsをデフォルトのエディタに設定する
    $ export EDITOR=/usr/bin/emacs

カーソルおよび画面操作に関する主なviコマンド#

キー 説明
h 1文字左へ移動
l 1文字右へ移動
k 1文字上へ移動
j 1文字下へ移動
0 行頭へ移動
$ 行末へ移動
H 画面の最上行へ移動
L 画面の最下行へ移動
gg ファイルの先頭へ移動
G ファイルの最終行へ移動
nG ファイルのn行目へ移動
:n ファイルのn行目へ移動
Ctrl + f 次の画面へ移動
Ctrl + b 前の画面へ移動

viエディタの終了とファイルの保存に関する主なviコマンド#

キー 説明
:q viを終了。ただし内容が変更されている場合は、警告が出て終了できない
:q! viを強制終了。内容が変更されている場合でも保存せず終了
:w 編集内容を保存
:w ファイル名 編集内容を指定したファイルに保存
:wq, :x, ZZ 編集内容を保存し、viを終了
:wq! 編集内容を強制保存し、viを終了。読み取り専用のファイルでも強制的に保存してい終了(強制保存に失敗したらviは終了しない)

コマンドモードから入力モードに移行する際に使用する主なviコマンド#

コマンド 説明
i カーソルの左から入力開始
a カーソルの右から入力開始
I カーソルのある行の先頭から入力開始
A カーソルのある行の末尾から入力開始
o カーソルのある行の下に空白行を挿入しその行から入力開始
O カーソルのある行の上に空白行を挿入し、その行から入力開始

ファイルの編集に関する主なviコマンド#

コマンド 説明
yy
Y:
カーソル位置の行をバッファにコピー
yw カーソル位置の単語をバッファにコピー
dd カーソル位置の行を削除し、バッファにコピー
dw カーソル位置の単語を削除し、バッファにコピー
x カーソル位置の文字削除し、バッファにコピー
X カーソル位置の左の文字を削除し、バッファにコピー
p バッファの内容を挿入(文字や単語はカーソルの右、行はカーソルの下に挿入)
P バッファの内容を挿入(文字や単語はカーソルの右、行はカーソルの上に挿入)
u 元に戻す(直前の操作をとりやめる)

文字列の検索に関する主なviコマンド#

コマンド 説明
/文字列 指定した文字列をカーソル位置からファイルの末尾(前方・進行方向)に向かって検索
?文字列 指定した文字列をカーソル位置からファイルの先頭(後方・逆方向)に向かって検索
n 次を検索
N 次を検索(逆方向)

viの設定に関する主なviコマンド#

コマンド 説明
:set nu (number) 行番号を表示
:set nonu (nonumber) 行番号を表示しない
:set ts=タブ幅 (tabstop=タブ幅) タブ幅を数値で指定