DockerはLinuxのコンテナ技術を利用しています。そのため、MacOSでは直接Dockerを動かすことができません。Linuxの仮想マシンを立ち上げ、その仮想マシン内でDockerを動かしています。
また、Linuxカーネルをそのまま利用してコンテナを動かしていますので、コンテナで利用するOSもLinuxディストリビューションに限られます。
Dockerを学び始め、何かとLinuxを使うことが多くなってきましたので、ここでLinuxの主要コマンドを整理しておきます。なお、OSはubuntuを想定しており、シェル(OSの核(kernel)に命令を渡すための仲介となるプログラム)はbashとなります。
コマンドの表記方法
プロンプトは一般ユーザーでは「$」、root(管理者)ユーザーでは「#」となります。
コマンドには指示する値である「引数」と動作を調整する「オプション」を付け加えることができます。
なお、オプションは「-」に続けた1文字で表記します。単語で表記する場合は、「--」に続けて記載します。例えば、lsコマンドの「-a」と「--all」は同じオプションです。
複数のオプションを指定する場合は、「-<option1> -<option2>」のように列挙する方法や「-<option1><option2>」のようにまとめて表記することもできます。
「&&」でコマンドを繋げて表記することができます。また、「\」(バックスラッシュ)で改行することができます。
コマンド [オプション] [引数]
マニュアル、ヘルプ
- # man <command>:コマンドのマニュアルを表示する。1ページずつ表示(pager)され、Spaceキーで1ページ先に進む。Ctrlキー+Bキーで1ページ戻る。Qキーで終了する。マニュアルは種類毎にセクションが分かれており、引数でセクションを指定することが可能(1:一般ユーザーのコマンド、5:設定ファイルの書式、8:システム管理者のコマンド 等。デフォルトで1が設定されている。)。
- # whatis <command>:マニュアルの先頭行を表示する。対応するセクションを調べることができる。
- # <command> --help:簡易的なマニュアルを表示する。
システムの終了と再起動
- # exit:ログアウトする。Ctrlキー+Dキーでも可能。
- # reset:シェルを初期化する。
- # shutdown <time>:Linuxシステムを終了する。rootユーザーのみ使用可能。「-r」オプションで再起動(reboot)する。「-h」オプションで終了して電源を切る(halt)。「-c」オプションで実行中のシャットダウンをキャンセル(cancel)する。<time>には時刻または実行までの分数(1分後の場合「+1」、ただちに実行する場合は「now」)を指定する。
変数
- # <var>=<value>:「シェル変数」<var>を設定する。有効範囲はシェル内のみであり、シェルが終了すると変数の内容は失われる。
- # export <var>[=<value>]:「環境変数」<var>を設定する。有効範囲は設定したシェルやそのシェル上で起動したシェル及び実行コマンドにおよぶ。なお、環境変数は別のシェルで変更しても、元のシェルでは変更が反映されない。
- # echo $<var>:変数<var>の内容を表示する。
- # printenv:環境変数を表示する。「env」コマンドも同様。
- # set:シェル変数と環境変数を表示する。
コマンドには、シェルに組み込まれている「組み込みコマンド」と、外部に実行プログラムとして保存されている「外部コマンド」があります。
組み込みコマンドはコマンド名のみ指定すれば実行できますが、外部コマンドは実行プログラムの絶対パスを指定する必要があります。
毎回絶対パスを指定するのは手間なので、コマンド名を指定すると対応する実行ファイルを検索してきてくれる機能がLinuxには実装されています。この検索先のディレクトリが登録されている変数が環境変数「PATH」です。
- # which <command>:コマンドの実行ファイルの場所を表示する。
- # echo $PATH:環境変数PATHの内容を表示する。ディレクトリの区切りは「:」で表示される。
- # export PATH=<directory_path>:$PATH:パスを通す(環境変数PATHに実行ファイルのあるディレクトリを追加する)。「:$PATH」によってパスが追加される(無い場合は上書きされてしまうので注意)。
ファイル、ディレクトリの表示と移動
- # ls:ファイルやディレクトリの一覧を表示する。「LiSt files」の略。「-l」オプションを付けることで属性も表示される。「-a」オプションで隠しファイル(ファイル名が「.」で始まるファイル)やディレクトリも含めて表示する。「-d」オプションでディレクトリを表示する。「-i」オプションで「iノード番号」を表示する。
- # cat [<text_file>]:テキストファイルの内容を表示する。「conCATenate」の略。<text_file>を指定しない場合、標準入力で受け取ったデータを標準出力に出力する。
- # less <text_file>:テキストファイルの内容を1ページずつ表示する(pager)。↑↓キーで1行スクロール。spaceキーで1ページ先に進む。Ctrlキー+Bキーで1ページ戻る。Qキーで終了する。
- # pwd:カレントディレクトリのパスを表示する。「Print Working Directory」の略。
- # cd <path>:カレントディレクトリを移動する。「Change Directory」の略。<path>は絶対パスか相対パスを指定する。「..」で一つ上のディレクトリ(「.」はカレントディレクトリを指す)、「~」で「ホームディレクトリ」(ユーザー毎に割り振られるディレクトリ)に移動できる(cd単体でもホームディレクトリに移動できる)。「cd -」で一つ前の作業ディレクトリに戻れる。
- # tree:ディレクトリの階層をツリーで表示する。
ファイル、ディレクトリの操作
- # touch <file>:ファイルのタイムスタンプを変更する。存在しないファイル名を指定することで、新規のファイルを作成できる。
- # cp <file> <new_file_name>:ファイルをコピーする。「CoPy」の略。同一ディレクトリ内でコピーする場合は、別名<new_file_name>を指定する。<new_file_name>の代わりにコピー先のディレクトリを指定することで、異なるディレクトリにコピーを作成することも可能。「-r」オプションでディレクトリをコピーすることができる。
- # mv <file> <destination_directory>:ファイルを指定したディレクトリ<destination_directory>に移動する。「MoVe」の略。ディレクトリの代わりに別のファイル名を指定することで、ファイル名を変更することも可能。元ファイル<file>の代わりにディレクトリを指定することで、ディレクトリに対して同様の操作が可能(ディレクトリ名の変更も同様に可能)。
- # mkdir <directory>:ディレクトリを作成する。「MaKe DIRectory」の略。「-p」オプションで複数の階層のディレクトリを一度に作成できる。
- # rm <file>:ファイルを削除する。「ReMove」の略。「-i」オプションで削除前の確認が表示される(「y」または「yes」で実行)。「-r」オプションに続いて<file>の代わりにディレクトリ名を指定することで、ディレクトリの削除が可能。「-f」オプションでエラーメッセージを表示せず、強制的に削除することが可能。
- # gzip <file_name>:ファイルを「GNU Zip(gzip)形式」(拡張子「.gz」)で圧縮する。元のファイルは削除される(元のファイルを残したい場合「# gzip -c <file_name> > <new_file_name>.gz」とする)。ディレクトリの圧縮はできない(「アーカイブ」であれば圧縮可能)。
- # gunzip <gzip_file>.gz:gzip形式の圧縮ファイルを解凍する。元の圧縮ファイルは削除される(元の圧縮ファイルを残したい場合「# gunzip -c <gzip_file>.gz > <new_file_name>」とする。)。
gzip以外にも「bzip2」コマンド(拡張子「.bz2」)や「xz」コマンド(拡張子「.xz」)コマンドも利用できます。いずれもgzipと同様に使え、解凍する場合は「bunzip2」、「unxz」コマンドを使用します。
- # tar cvf <archive_file>.tar <directory_name>:ディレクトリをアーカイブ(複数のファイルをまとめたファイル)に変換する。「cvf」オプションを「czvf」オプションに変更することで、gzip形式の圧縮アーカイブを作成可能。(tarコマンドのオプションには「-」が不要。)
- # tar xvf <archive_file>.tar:アーカイブを展開する。「xvf」オプションを「xzvf」オプションに変更することでgzip形式の圧縮アーカイブを展開可能。
tarコマンドの主なオプション
主なオプション | 説明 |
c | アーカイブを作成する。 |
x | アーカイブを展開する。 |
v | 処理内容の詳細を表示する。 |
f | アーカイブファイル名を指定する。 |
j | bzip2圧縮を利用する。 |
J | xz圧縮を利用する。 |
z | gzip圧縮を利用する。 |
- # zip <zip_file>.zip <file_name>:ファイルをzip形式で圧縮する。元のファイルは削除されない。「-r」オプションでディレクトリの圧縮が可能。
- # unzip <zip_file>.zip:zip形式の圧縮ファイルを解凍する。元の圧縮ファイルは削除されない。ディレクトリも同様に解凍可能。
アクセス権
- # id [<user_name>]:ユーザー識別情報(「UID」:User ID)を表示する。<user_name>を指定しなければ、実行したユーザーの情報が表示される。「-u」オプションでユーザーのIDを表示する。「-g」オプションでグループのID(「GID」:Group ID)を表示する。「-n」オプションでユーザーやグループの名前を表示する(-uや-gと合わせて使う。なお、グループ名は「groups」コマンドでも確認可能。)。
- # chown <new_owner> <file_or_directory>:ファイルまたはディレクトリの所有者を変更する。rootユーザーのみ実行可能。「CHange OWNer」の略。「-R」オプションでディレクトリ内部のサブディレクトリやファイルの所有者をまとめて変更する。<new_owner>を「<new_owner>:<new_group>」または「<new_owner>.<new_group>」とすることで、所有者及び所有グループを変更できる(<new_owner>を省略すると所有グループのみ変更)。
- # chgrp <new_owner> <file_or_directory>:ファイルまたはディレクトの所有グループを変更する。一般ユーザーで実行した場合は、そのユーザーの所属グループのみ指定可能。「CHange GRouP」の略。「-R」オプションでディレクトリ内部のサブディレクトリやファイルの所有グループをまとめて変更する。
- # chmod <permission> <file_or_directory>:ファイルまたはディレクトのパーミッションを変更する。変更対象となるファイルやディレクトリの所有者とrootユーザーのみ実行可能。「CHange MODe」の略。<permission>は「read:4、write:2、execute:1、no permission:0」の合計を「所有者・所有グループ・その他」の順番で3桁の数字で指定する。「-R」オプションでディレクトリ内部のサブディレクトリやファイルのパーミッションをまとめて変更する。
- # su [<UID>]:一時的にユーザーを<UID>のユーザーに切り替える。「Substitute User」の略。<UID>を省略するとrootユーザーを指定したものとみなされる。「exit」コマンドで元のユーザーに戻る。「-」オプションでrootユーザーでログインした状態になる(このオプションが無いと、カレントディレクトリがそのままであったり、rootユーザー用の多くのコマンドが見つからない場合がある。)。
- # sudo <command>:rootユーザーの権限でコマンドを実行。
ユーザー、グループ
- # useradd <user_name>:ユーザーを作成する。rootユーザーのみ実行可能。ホームディレクトリも作成される。(ユーザーは何らかのグループに所属している必要があり、ユーザーを作成した場合は、同名のグループも作成され、そこに所属することとなる。複数のグループに所属することも可能。基本となるグループを「プライマリグループ」、それ以外を「サブグループ」という。)
- # adduser <user_name>:ユーザーを作成する(一緒にパスワード等も対話的に設定できる)。rootユーザーのみ実行可能。ホームディレクトリも作成される。「-u」オプションに続けてUIDを指定することができる。
- # groupadd <group_name>:グループを作成する。rootユーザーのみ実行可能。
- # usermod -G <group_name> <user_name>:<group_name>グループに<user_name>ユーザーを所属させる。rootユーザーのみ実行可能。
- # passwd <user_name>:パスワード(8文字以上)を設定する。一般ユーザーで実行した場合は、自身のパスワードのみ変更可能。
- # userdel <user_name>:ユーザーを削除する。rootユーザーのみ実行可能。「-r」オプションでホームディレクトリも一緒に削除する。
- # groupdel <group_name>:グループを削除する。rootユーザーのみ実行可能。対象とするグループをプライマリグループとするユーザーがいる場合、そのグループは削除できない。
ユーザー情報は「/etc/passwdファイル」に保存されており、1ユーザーにつき1行で表記されます。書式は以下のとおりです(7つのフィールドに分かれています。)。
ユーザー名:旧パスワード:UID:GID(プライマリーグループ):コメント:ホームディレクトリ:デフォルトシェル
一方、グループ情報は「/etc/groupファイル」に保存されており、1グループにつき1行で表記されます。書式は以下のとおりです(4つのフィールドに分かれています。
グループ名:旧パスワード:GID:所属ユーザー
※旧パスワードのフィールドは「x」のみとなっており、実際のパスワードは「/etc/shadowファイル」に格納されいます。
ネットワーク
- # ssh <username>@<hostname>:ネットワークを通じて別のコンピュータを遠隔操作する(パスワード認証)。「Secure SHell」の略。「-i」オプションに続けて秘密鍵<identity_file>を指定することで、公開鍵認証によるアクセスが可能。
- # sftp <username>@<hostname>:ネットワークを通じて別のコンピュータとファイルをやりとりする(パスワード認証)。「Secure File Transfer protocol」の略。「-i」オプションに続けて秘密鍵<identity_file>を指定することで、公開鍵認証によるアクセスが可能。
- sftp> put <local_file_path> [<remote_path>]:sftp接続状態で、接続先のカレントディレクトリにファイルを転送する。「-r」オプションでディレクトリを転送する。remote_path>を指定することで、転送先を指定できる。
- sftp> get <remote_file_path> [<local_path>]:sftp接続状態で、接続先からカレントディレクトリにファイルを受け取る。「-r」オプションでディレクトリを受け取る。<local_path>を指定することで、転送先を指定できる。
ubuntuパッケージ管理
- # apt-get update:新しいパッケージリストを取得する。
- # apt-get install <package>:パッケージをインストールする。「-y」オプションを付けることで、インタラクティブな質問に全て「y」で回答する。