初心者が最初に学んだ Unix/Linuxのディレクトリ構成とコマンドの由来
エンジニアの世界では当たり前に使われているUnixやLinuxのコマンドですが、初心者だった私が最初に学んだディレクトリ構成や、よく使ったコマンドをメモとして残します。言葉が省略されていることが多く感じたので、どんな由来か、どの単語を省略してその呼び名になっているのかを重点的に残しています。
そもそも
コマンドとは?
コマンドは、コンピュータに対する指示です。
マウスを使ってファイルを操作するように、キーボードから文字を入力してコンピュータに命令を送ることができます。UnixやLinuxでは、このコマンドを使って様々な操作を行います。
シェルとは?
シェルは、コマンドを受け付けてコンピュータに伝える役割を担うプログラムです。
黒い画面に文字が並んでいる、いわゆる「コマンドラインインターフェース(CLI)」と呼ばれるものがシェルの一種です。特別な設定をせずとも、macOSのターミナルやLinuxのターミナルを起動すれば、すぐにコマンドを試せる環境が整っています。
それぞれのシェルの特徴をまとめると、以下のようになります。
シェル | 概要 | 特徴 | カスタマイズ性 | 速度 | 学習難易度 |
---|---|---|---|---|---|
sh | シェルの元祖、シンプルで軽量 | シンプル、軽量、互換性高い、機能は最低限 | 低 | 高 | 易 |
bash | 標準的で高機能なシェル、広く利用されている | 高機能、標準的、情報が多い、スクリプトも強力 | 中 | 中 | 中 |
zsh | 多機能でカスタマイズ性に優れたシェル | 多機能、高カスタマイズ性、強力な補完、テーマ/プラグイン、bash 上位互換 | 高 | 中 | 中〜高 |
fish | 初心者にも優しい親切設計のシェル | 設定不要、オートサジェスト、独特なスクリプト(文法に互換性なし) | 低〜中 | 中 | 易 |
コマンドとシェルの関係
コマンド実行の流れは以下です。
-
コマンド入力 (ユーザー → シェル)
- ユーザーがターミナルなどのインターフェースを通じて、シェルにコマンドを入力します。
- カーネルに直接コマンドを入力するわけではありません。シェルが窓口になります。
-
シェルがコマンドを解釈・実行準備
- シェルは、入力されたコマンドを解析し、それが何のコマンドなのか、どのようなオプションや引数が指定されているのかを理解します。
- 内部コマンド (シェル自身が持っているコマンド) か、外部コマンド (独立した実行ファイル) かを判断します。
- 外部コマンドの場合は、その実行ファイルのパスを探し、実行準備を行います。
-
シェルがカーネルに実行を依頼 (システムコール)
- シェルは、コマンドを実行するために、Linuxカーネルにシステムコールという特別な命令を発行します。
- システムコールは、シェルがカーネルに「〇〇という処理を実行してください」と依頼するための窓口です。
- 例えば、外部コマンドを実行する場合は、
execve()
などのシステムコールを使って、カーネルにプログラムの実行を依頼します。
-
Linuxカーネルがコマンド (プログラム) を実行
- カーネルは、シェルからの依頼を受け、実際にコマンド (プログラム) を実行します。
- カーネルは、CPUやメモリなどのハードウェア資源を管理し、プログラムが正しく動作するように制御します。
-
コマンド実行が終了、結果をシェルに通知
- カーネル上で実行されたコマンド (プログラム) が処理を終えると、その結果 (終了ステータスや出力) をシェルに返します。
-
シェルがコマンドの結果をユーザーに出力
- シェルは、カーネルから受け取ったコマンドの実行結果 (標準出力、標準エラー出力など) を、ターミナルなどのインターフェースを通じてユーザーに表示します。
Unix/Linuxのディレクトリ構成とディレクトリ名の由来
Unix/Linuxのファイルシステムは、ツリー構造になっています。
一番上の階層をルートディレクトリと呼び、そこから枝分かれするようにディレクトリ(フォルダ)が配置されています。
主なディレクトリの役割は以下の通りです。ディレクトリ名は由来を知らないと単なる記号にしか見えないので、意図的に調べました。
ディレクトリ | 由来 | 役割 |
---|---|---|
/bin |
Binaries (バイナリ) | 基本的なコマンド |
/dev |
Devices (デバイス) | デバイスファイル(ハードウェアや周辺機器) |
/etc |
Etcetera (その他) Editable Text Configuration (編集可能なテキスト設定) |
システムの設定ファイル |
/home |
Home directories (ホームディレクトリ) | 各ユーザーのホームディレクトリ(個人のファイルや設定を保存する場所) |
/lib |
Libraries (ライブラリ) | プログラムが利用するライブラリ |
/mnt |
Mount (マウント) | 一時的にファイルシステムをマウントする場所 |
/root |
Root directory (ルートディレクトリ) | システム管理者(rootユーザー)のホームディレクトリ |
/sbin |
System Binaries (システムバイナリ) | システム管理用のコマンド |
/tmp |
Temporary (テンポラリ、一時的な) | 一時ファイル |
/usr |
Unix System Resources (ユニックスシステムリソース) User System Resources (ユーザーシステムリソース) |
ユーザーが利用するプログラムやデータ |
/var |
Variable (バリアブル、可変の) | 一時的なログファイルなど、可変長のデータ |
├── bin
├── dev
├── etc
├── home
│ └── ユーザー名 (例: user)
│ └── (ユーザーのホームディレクトリの中身...)
├── lib
├── mnt
├── root
├── sbin
├── tmp
├── usr
│ ├── bin
│ ├── lib
│ └── ... (その他 /usr 以下)
└── var
├── log
├── tmp
└── ... (その他 /var 以下)
WindowsのエクスプローラーやmacOSのFinderでフォルダを開くのと同じように、コマンドを使ってディレクトリの中身を確認したり、移動したりすることができます。
ファイル操作の基本コマンドとファイル名の由来
ここでは、ファイル操作でよく使った基本的なコマンドを並べています。
コマンド | 説明 | オプション | オプションの説明 |
---|---|---|---|
cd |
Change Directory:ディレクトリ(フォルダ)を移動する | ||
pwd |
Print Working Directory:現在のディレクトリを表示する | ||
ls |
List:ディレクトリの中身(ファイルやディレクトリ)を一覧表示する | -l |
詳細表示 (ファイルサイズ、更新日時など詳細な情報をリスト形式で表示) |
-a |
隠しファイルも表示 (. で始まるファイルも表示) |
||
-F |
ファイル種別記号を表示 (ディレクトリは / 、実行可能ファイルは * などを末尾に付加) |
||
mkdir |
Make Directory:新しいディレクトリを作成する | -p |
親ディレクトリも作成 (mkdir -p a/b/c のように、存在しない親ディレクトリもまとめて作成) |
rmdir |
Remove Directory:空のディレクトリを削除する | ||
touch |
ファイルを新規作成または更新日時を更新する | ||
cp |
Copy:ファイルやディレクトリをコピーする | -p |
タイムスタンプやパーミッションを保持 (コピー元ファイルの情報をそのままコピー先に反映) |
-r |
ディレクトリを再帰的にコピー (ディレクトリの中身もまとめてコピー。ディレクトリコピーに必須) | ||
-f |
強制的に上書き (コピー先に同名ファイルが存在する場合、確認なしで上書き) | ||
-i |
上書き前に確認 (コピー先に同名ファイルが存在する場合、上書きするかどうか確認メッセージを表示) | ||
-P |
シンボリックリンクをリンクとしてコピー (シンボリックリンク自体をコピー。デフォルトはリンク先の実体をコピー) | ||
mv |
Move:ファイルやディレクトリを移動する、またはファイル名を変更する | -f |
強制的に上書き (移動先に同名ファイルが存在する場合、確認なしで上書き) |
-i |
上書き前に確認 (移動先に同名ファイルが存在する場合、上書きするかどうか確認メッセージを表示) | ||
rm |
Remove:ファイルやディレクトリを削除する | -r |
ディレクトリを再帰的に削除 (ディレクトリとその中身をまとめて削除。ディレクトリ削除に必須) |
-i |
削除前に確認 (削除前に削除するかどうか確認メッセージを表示。誤削除を防ぐために推奨) | ||
-f |
強制的に削除 (確認メッセージなしで強制的に削除。パーミッションがないファイルなどを削除する場合に使うことがあるが、通常は非推奨) | ||
ln |
Link:ファイルやディレクトリへのリンクを作成する | -s |
シンボリックリンクを作成 (ショートカットのようなリンクを作成。-s オプションなしでハードリンクを作成) |
-f |
強制的に作成 (リンク先に同名ファイルが存在する場合、強制的に上書きしてリンクを作成) | ||
cat |
Catenate:ファイルの内容をまとめて表示する | ||
echo |
文字列を表示する | ||
test |
条件式を評価する |
これらのコマンドを組み合わせることで、ファイルやフォルダの整理、プログラムの実行、テキストファイルの編集など、様々な操作をコマンドラインから実行できます。
cd: ディレクトリを移動する
cd
コマンドは、Change Directory の略で、作業するディレクトリを移動するために使用します。
Windows のエクスプローラーでフォルダをダブルクリックして移動するイメージです。
cd [移動したいディレクトリのパス]
絶対パスと相対パス
ディレクトリのパスを指定する方法には、絶対パスと相対パスの2種類があります。
-
絶対パス: ルートディレクトリ
/
から始まる、目的のディレクトリまでの完全な道のりを示すパスです。
住所で例えるなら、「〇〇県〇〇市...」のように、一番大きな場所から順番に場所を特定していくイメージです。cd /home/user/documents
これは、「ルートディレクトリ (
/
)」の中の「home」ディレクトリの中の「user」ディレクトリの中の「documents」ディレクトリへ移動する、という意味になります。 -
相対パス: 現在いるディレクトリを基準にして、目的のディレクトリまでの道のりを示すパスです。
住所で例えるなら、「〇〇さんの家の隣」のように、現在地から目的地までの関係性で場所を特定していくイメージです。cd documents
現在
/home/user/
ディレクトリにいる場合、このコマンドは「現在のディレクトリ (/home/user/
)」の中の「documents」ディレクトリへ移動する、という意味になります。cd ../pictures
現在
/home/user/documents
ディレクトリにいる場合、このコマンドは「現在のディレクトリ (/home/user/documents
)」の親ディレクトリ (/home/user/
) に移動し、さらにその中のpictures
ディレクトリへ移動する、という意味になります。
..
は「親ディレクトリ」を表します。
cd
コマンドの例
よく使う -
ホームディレクトリへ移動:
cd ~
または
cd
~
はホームディレクトリを表します。
引数なしでcd
コマンドを実行した場合も、ホームディレクトリへ移動します。 -
一つ上の階層へ移動:
cd ..
..
は親ディレクトリを表します。 -
特定のディレクトリへ移動 (絶対パス):
cd /usr/local/bin
-
現在のディレクトリから見て、子ディレクトリへ移動 (相対パス):
cd documents
(現在のディレクトリに
documents
というディレクトリがある場合)
cd
コマンドを使いこなすと、ファイルシステム内を自由自在に移動できるようになります。
pwd: 現在のディレクトリを表示する
pwd
コマンドは、Print Working Directory の略で、現在自分がどのディレクトリにいるのかを確認するために使用します。
道に迷った時に、現在地を確認するようなイメージです。
pwd
このコマンドを実行すると、現在いるディレクトリの絶対パスが表示されます。
$ pwd
/home/user/documents
このように、pwd
コマンドは、自分がファイルシステムのどこにいるのか分からなくなった時に、現在地を把握するのに役立ちます。
ls: ディレクトリの中身を一覧表示する
ls
コマンドは、List の略で、ディレクトリの中身を一覧表示するために使用します。
Windows のエクスプローラーや macOS の Finder でフォルダを開いて、ファイルやフォルダを確認するイメージです。
ls [ディレクトリのパス]
ディレクトリのパスを省略した場合、現在のディレクトリの中身が表示されます。
ls
コマンドのオプション
よく使う ls
コマンドには、表示形式や表示する情報をカスタマイズするための様々なオプションがあります。
ここでは、特によく使うオプションをいくつか紹介します。
-
-l
: 詳細表示 (long listing format)ファイルやディレクトリの詳細な情報(パーミッション、所有者、サイズ、更新日時など)をリスト形式で表示します。
ls -l
実行例:
$ ls -l 合計 4 drwxr-xr-x 2 user user 4096 10月 26 10:00 documents -rw-r--r-- 1 user user 25 10月 25 15:00 sample.txt
- 先頭の
drwxr-xr-x
や-rw-r--r--
はパーミッション(ファイルやディレクトリのアクセス権)を表します。-
d
で始まる場合はディレクトリ、-
で始まる場合はファイルです。
-
- 続く
2
や1
はリンク数を表します。 -
user user
は所有者とグループを表します。 -
4096
や25
はファイルサイズをバイト単位で表します。 -
10月 26 10:00
や10月 25 15:00
は最終更新日時を表します。 - 最後の
documents
やsample.txt
はファイル名またはディレクトリ名を表します。
- 先頭の
-
-a
: 隠しファイルも表示 (all)通常、Unix/Linux では、ファイル名やディレクトリ名が
.
(ドット) で始まるものは隠しファイルとして扱われ、ls
コマンドでは表示されません。
-a
オプションをつけると、隠しファイルも含めてすべて表示します。ls -a
実行例:
$ ls -a . .. .hidden_file documents sample.txt
.
と..
は、それぞれ現在のディレクトリと親ディレクトリを表す特別なディレクトリです。 -
-F
: ファイルの種類を識別記号で表示 (classify)ファイルの種類を識別する記号をファイル名の末尾に付加して表示します。
-
/
: ディレクトリ -
*
: 実行可能ファイル -
@
: シンボリックリンク -
|
: FIFO (名前付きパイプ) -
=
: ソケット
ls -F
実行例:
$ ls -F documents/ executable_file* symlink@ sample.txt
documents/
はディレクトリ、executable_file*
は実行可能ファイル、symlink@
はシンボリックリンクであることを示しています。 -
ls
のオプション組み合わせ
覚えておくと便利な -
-al
(または-la
) : 隠しファイルも詳細表示で表示ls -al
隠しファイルの詳細情報も確認したい場合に便利です。
-
-lF
(または-Fl
) : 詳細表示とファイル種別記号を同時に表示ls -lF
ファイルの種類を詳細情報と合わせて確認したい場合に便利です。
mkdir: ディレクトリを作成する
mkdir
コマンドは、Make Directory の略で、新しいディレクトリを作成するために使用します。
Windows のエクスプローラーや macOS の Finder で「新しいフォルダを作成」するイメージです。
mkdir [作成したいディレクトリ名]
作成したいディレクトリ名を指定します。
-p
オプション: 親ディレクトリも同時に作成
-p
オプション (parents) をつけると、親ディレクトリが存在しない場合でも、同時に作成することができます。
例えば、mkdir -p a/b/c
というコマンドを実行すると、
- まず
a
ディレクトリが存在するか確認します。存在しない場合は作成します。 - 次に
a
ディレクトリの中にb
ディレクトリが存在するか確認します。存在しない場合は作成します。 - 最後に
b
ディレクトリの中にc
ディレクトリを作成します。
mkdir -p [作成したいディレクトリ名]
mkdir -p my_project/documents/reports
このコマンドは、my_project
ディレクトリの中に documents
ディレクトリを作成し、さらにその中に reports
ディレクトリを作成します。
もし my_project
ディレクトリや documents
ディレクトリがまだ存在しなくても、まとめて作成してくれます。
rmdir: 空のディレクトリを削除する
rmdir
コマンドは、Remove Directory の略で、空のディレクトリを削除するために使用します。
Windows のエクスプローラーや macOS の Finder で空のフォルダを削除するイメージです。
rmdir [削除したいディレクトリ名]
削除したいディレクトリ名を指定します。
注意点: rmdir
コマンドは、空のディレクトリしか削除できません。
ディレクトリの中にファイルやディレクトリが存在する場合は、エラーが表示されて削除できません。
空でないディレクトリを削除したい場合は、後述する rm
コマンドを使用します。
touch: ファイルを新規作成または更新日時を更新する
touch
コマンドは、主に以下の2つの用途で使われるコマンドです。
- 空のファイルを新規作成する
- 既存のファイルの更新日時を更新する
Windows のエクスプローラーや macOS の Finder で右クリックして「新規作成」からファイルを作成するイメージに少し近いですが、touch
コマンドは中身が空っぽのファイルを素早く作成することに特化しています。
また、ファイルの更新日時(ファイルが最後に更新された日時)を意図的に変更したい場合にも touch
コマンドが役立ちます。
touch
コマンドの基本的な使い方
touch
コマンドは、作成したいファイル名を指定するだけで、簡単に実行できます。
touch [ファイル名]
ファイルを新規作成する場合
例えば、new_file.txt
という名前の新しい空のテキストファイルを作成したい場合は、以下のコマンドを実行します。
touch new_file.txt
このコマンドを実行すると、現在のディレクトリに new_file.txt
という名前の中身が空のファイルが作成されます。
もし、同じ名前のファイルがすでに存在していた場合は、新規作成ではなく、既存のファイルの更新日時が現在時刻に更新されます。
ファイルの更新日時を更新する場合
既存のファイルの更新日時を現在時刻に更新したい場合も、同じように touch
コマンドを使います。
例えば、existing_file.txt
というファイルの更新日時を更新したい場合は、以下のコマンドを実行します。
touch existing_file.txt
このコマンドを実行すると、existing_file.txt
ファイルの内容は変更されませんが、更新日時が現在時刻に更新されます。
ファイルの更新日時を更新することで、ファイルの整理やバックアップ作業などで、特定の期間に更新されたファイルを抽出したり、管理したりする際に役立ちます。
touch
コマンドは、非常にシンプルで利用頻度の高いコマンドです。
特に、シェルスクリプトの中で、一時的なファイルを作成したり、ファイルの存在確認を兼ねて更新日時を更新したりする用途でよく利用されます。
cp: ファイルやディレクトリをコピーする
cp
コマンドは、Copy の略で、ファイルやディレクトリをコピーするために使用します。
Windows のエクスプローラーや macOS の Finder でファイルをコピー&ペーストするイメージです。
cp [コピー元] [コピー先]
- コピー元: コピーしたいファイルまたはディレクトリのパスを指定します。
- コピー先: コピー先のファイルまたはディレクトリのパスを指定します。
cp
コマンドのオプション
cp
コマンドにも、コピーの動作をカスタマイズするための様々なオプションがあります。
-
-p
: タイムスタンプやパーミッションを保持してコピー (preserve)ファイルの更新日時やパーミッション(アクセス権)などの情報を、コピー後も元のファイルのままにしたい場合に
-p
オプションを使用します。
バックアップなどで、ファイルの情報をそのまま保持したい場合に便利です。cp -p [コピー元ファイル] [コピー先ファイル]
-
-r
: ディレクトリを再帰的にコピー (recursive)ディレクトリをコピーする場合、
-r
オプションが必須です。
-r
オプションをつけると、ディレクトリの中身(ファイルやサブディレクトリ)もまとめてコピーします。※再帰的:ディレクトリの中にディレクトリがあった場合に、そのディレクトリに対して同様の処理を繰り返すという意味
cp -r [コピー元ディレクトリ] [コピー先ディレクトリ]
-
-f
: コピー先に同名ファイルが存在する場合、強制的に上書き (force)コピー先に同じ名前のファイルがすでに存在する場合、通常
cp
コマンドは上書きしません。
-f
オプションをつけると、確認メッセージを表示せずに強制的に上書きします。
上書きしても問題ない場合にのみ使用するのが望ましいです。cp -f [コピー元ファイル] [コピー先ファイル]
-
-i
: コピー先に同名ファイルが存在する場合、上書き前に確認 (interactive)コピー先に同じ名前のファイルがすでに存在する場合、上書きするかどうかを確認メッセージで尋ねます。
誤ってファイルを上書きしてしまうのを防ぎたい場合に便利です。cp -i [コピー元ファイル] [コピー先ファイル]
実行例:
$ cp -i sample.txt destination.txt cp: 'destination.txt' を上書きしてもよろしいですか? (yes/no [n])
yes
と入力すると上書き、no
(または Enter キー) を入力すると上書きをキャンセルします。 -
-P
: シンボリックリンクをリンクとしてコピー (no dereference)コピー元がシンボリックリンクの場合、
-P
オプションをつけると、シンボリックリンクそのものをコピーします。
デフォルトでは、シンボリックリンクが指す実体ファイルがコピーされます。cp -P [コピー元シンボリックリンク] [コピー先シンボリックリンク]
mv: ファイルやディレクトリを移動、ファイル名を変更する
mv
コマンドは、Move の略で、ファイルやディレクトリを移動したり、ファイル名やディレクトリ名を変更したりするために使用します。
Windows のエクスプローラーや macOS の Finder でファイルやフォルダを移動したり、名前を変更したりするイメージです。
mv [移動元] [移動先]
- 移動元: 移動または名前を変更したいファイルまたはディレクトリのパスを指定します。
- 移動先: 移動先のディレクトリのパス、または新しいファイル名/ディレクトリ名を指定します。
ファイルやディレクトリの移動
ファイルやディレクトリを別のディレクトリへ移動することができます。
mv [移動したいファイル/ディレクトリ] [移動先のディレクトリ]
mv sample.txt documents/
このコマンドは、sample.txt
ファイルを documents
ディレクトリへ移動します。
ファイル名やディレクトリ名の変更
ファイルやディレクトリの名前を変更することができます。
移動先として同じディレクトリを指定し、新しいファイル名/ディレクトリ名を指定します。
mv [変更したいファイル/ディレクトリ名] [新しいファイル/ディレクトリ名]
mv old_file_name.txt new_file_name.txt
このコマンドは、old_file_name.txt
ファイルの名前を new_file_name.txt
に変更します。
mv
コマンドのオプション
mv
コマンドにも、動作をカスタマイズするためのオプションがいくつかあります。
-
-f
: 移動先に同名ファイルが存在する場合、強制的に上書き (force)コピー先のディレクトリに同じ名前のファイルがすでに存在する場合、通常
mv
コマンドは上書きしません。
-f
オプションをつけると、確認メッセージを表示せずに強制的に上書きします。
上書きしても問題ない場合にのみ使用するように。mv -f [移動元ファイル] [移動先ファイル]
-
-i
: 移動先に同名ファイルが存在する場合、上書き前に確認 (interactive)移動先のディレクトリに同じ名前のファイルがすでに存在する場合、上書きするかどうかを確認メッセージで尋ねます。
誤ってファイルを上書きしてしまうのを防ぎたい場合に便利です。mv -i [移動元ファイル] [移動先ファイル]
実行例:
$ mv -i sample.txt documents/sample.txt mv: 'documents/sample.txt' を上書きしてもよろしいですか? (yes/no [n])
yes
と入力すると上書き、no
(または Enter キー) を入力すると上書きをキャンセルします。
rm: ファイルやディレクトリを削除する
rm
コマンドは、Remove の略で、ファイルやディレクトリを削除するために使用します。
Windows のごみ箱にファイルを捨てるイメージですが、コマンドで削除した場合、基本的にゴミ箱には移動せず、完全に削除されるので、慎重に使用する必要があります。
rm [削除したいファイル/ディレクトリ]
- 削除したいファイル: ファイルを削除する場合、削除したいファイルパスを指定します。
-
削除したいディレクトリ: ディレクトリを削除する場合、
-r
オプションが必要です (後述)。
rm
コマンドのオプション
rm
コマンドは、ファイルを完全に削除してしまうため、オプションをうまく活用して、誤作動を防ぐことが重要です。
-
-r
: ディレクトリを再帰的に削除 (recursive)ディレクトリを削除する場合、
-r
オプションが必須です。
-r
オプションをつけると、ディレクトリの中身(ファイルやサブディレクトリ)もまとめて削除します。
ディレクトリを削除する場合は必ず-r
オプションをつけることを忘れないように。rm -r [削除したいディレクトリ]
非常に強力なオプションなので、誤って重要なディレクトリを削除してしまわないように、特に注意が必要です。
-
-i
: 削除前に確認メッセージを表示 (interactive)ファイルを削除する前に、削除するかどうかを確認メッセージで尋ねます。
誤ってファイルを削除してしまうのを防ぎたい場合に便利です。
特に-r
オプションと組み合わせて使うことで、ディレクトリ削除時の誤操作を防ぐ効果が期待できます。rm -i [削除したいファイル/ディレクトリ] rm -ri [削除したいディレクトリ] # -r と -i を同時に指定
実行例:
$ rm -i sample.txt rm: remove regular file 'sample.txt'? (y/n)
y
と入力すると削除、n
(または Enter キー) を入力すると削除をキャンセルします。-ri
オプションの実行例:$ rm -ri documents/ rm: descend into directory 'documents/'? (y/n) y rm: remove regular file 'documents/file1.txt'? (y/n) y rm: remove directory 'documents/'? (y/n) y
ディレクトリ内のファイルやサブディレクトリ、ディレクトリ自体の削除について、それぞれ確認メッセージが表示されます。
-
-f
: 確認メッセージを表示せずに強制的に削除 (force)ファイルを削除する際に、確認メッセージを表示せずに強制的に削除します。
パーミッション(アクセス権)がないファイルなどを無理やり削除したい場合に使用することがありますが、通常は使用を避けるべきと言われています。
誤って重要なファイルを削除してしまうリスクがあるため、十分に注意して使用するのが望ましいです。rm -f [削除したいファイル/ディレクトリ]
rm -r
コマンドは非常に強力で危険なコマンドです。
誤って実行すると、大切なデータを完全に失ってしまう可能性があります。
そのため、以下の点に注意します。
- 削除するファイルやディレクトリを間違えないように、パスを十分確認する。
-r
オプションはディレクトリ削除に必須だが、不用意に使うと広範囲に削除してしまう可能性があることを理解する。-f
オプションは基本的に使わないようにする。-i
オプションを積極的に活用し、削除前に必ず確認メッセージを確認する習慣をつける。- 重要なデータのバックアップを必ず行う。
ln: リンクを作成する
ln
コマンドは、Link の略で、ファイルやディレクトリへのリンクを作成するために使用します。
リンクには、ハードリンクとシンボリックリンクの2種類があります。
非エンジニアの方が日常的に使うのはシンボリックリンクの方が多いと思うので、シンボリックリンクを中心に説明します。
シンボリックリンク (symbolic link)
シンボリックリンクは、別のファイルやディレクトリを指し示すファイルです。
Windows のショートカットや macOS のエイリアスと似たようなものです。
シンボリックリンク自体はただのリンクファイルで、実体ファイルとは別の場所に作成できます。
ln -s [リンク元ファイル/ディレクトリ] [作成するシンボリックリンク名]
-
-s
: シンボリックリンクを作成するオプション (symbolic) - リンク元ファイル/ディレクトリ: リンクを張りたいファイルまたはディレクトリのパスを指定します。
- 作成するシンボリックリンク名: 作成するシンボリックリンクの名前とパスを指定します。
ln -s /home/user/documents/important_file.txt ~/デスクトップ/important_fileへのリンク
このコマンドは、/home/user/documents/important_file.txt
ファイルへのシンボリックリンクを、ホームディレクトリ (~
) の デスクトップ
ディレクトリに important_fileへのリンク
という名前で作成します。
デスクトップに作成された important_fileへのリンク
を開くと、実体ファイルである /home/user/documents/important_file.txt
が開かれます。
ハードリンク (hard link)
ハードリンクは、ファイルの実体を直接参照するリンクです。
シンボリックリンクとは異なり、別のファイルとしてinodeを共有するだけで、実体ファイルとほぼ同じように扱うことができます。
ハードリンクは、ディレクトリには作成できません。
ln [リンク元ファイル] [作成するハードリンク名]
-
-s
オプションをつけない場合、ハードリンクが作成されます。 - リンク元ファイル: リンクを張りたいファイルのパスを指定します。
- 作成するハードリンク名: 作成するハードリンクの名前とパスを指定します。
ln original_file.txt hardlink_file.txt
このコマンドは、original_file.txt
ファイルへのハードリンクを、hardlink_file.txt
という名前で作成します。
-f
オプション: リンクを強制的に作成する (force)
-f
オプション (force) をつけると、作成しようとするリンク名がすでに存在する場合でも、強制的に上書きしてリンクを作成します。
ln -sf [リンク元ファイル/ディレクトリ] [作成するシンボリックリンク名] # シンボリックリンクの場合
ln -f [リンク元ファイル] [作成するハードリンク名] # ハードリンクの場合
cat: ファイルの内容を表示する
cat
コマンドは、Catenate の略で、ファイルの内容をまとめて表示するために使用します。
テキストファイルの中身を手軽に確認したい時に便利です。
cat [ファイル名]
cat sample.txt
このコマンドは、sample.txt
ファイルの内容をターミナル画面に表示します。
複数のファイルを指定することもでき、その場合、ファイルの内容を連結して表示します。
cat file1.txt file2.txt file3.txt
echo: 文字列を表示する
echo
コマンドは、文字列を表示するために使用します。
コマンドの結果やメッセージを画面に表示したり、ファイルに書き込んだりする際に使用します。
echo [表示したい文字列]
echo "Hello, world!"
このコマンドは、Hello, world!
という文字列をターミナル画面に表示します。
リダイレクトと組み合わせる
echo
コマンドとリダイレクトを組み合わせることで、ファイルに文字列を書き込むことができます。
-
>
: 上書きリダイレクト。ファイルの内容を上書きします。 -
>>
: 追記リダイレクト。ファイルの内容の末尾に追記します。
echo "This is a new line." > output.txt
このコマンドは、output.txt
ファイルを新規作成し、This is a new line.
という文字列を書き込みます。
もし output.txt
ファイルがすでに存在する場合、内容を上書きします。
echo "This is another line." >> output.txt
このコマンドは、output.txt
ファイルの末尾に This is another line.
という文字列を追記します。
もし output.txt
ファイルが存在しない場合は、新規作成して書き込みます。
test: 条件式を評価する
test
コマンドは、条件式を評価するために使用します。
ファイルの種類や存在確認、文字列の比較、数値の比較など、様々な条件を評価し、真 (true) または 偽 (false) を返します。
test
コマンドは、主にシェルスクリプトの中で、条件分岐を行う際などに利用されます。
test [条件式]
または、[
と ]
で条件式を囲むことでも同じように test
コマンドを実行できます。
[ [条件式] ]
例:ファイルが存在するか確認する
test -e sample.txt
または
[ -e sample.txt ]
-
-e
: ファイルまたはディレクトリが存在するかどうかを判定する条件式
条件式の結果は、終了ステータスという値で確認できます。
-
終了ステータス
0
: 条件式が真 (true) の場合 -
終了ステータス
1
: 条件式が偽 (false) の場合
終了ステータスは、echo $?
コマンドで確認できます。
$ test -e sample.txt
$ echo $?
0 # sample.txt が存在する場合
$ test -e not_exist_file.txt
$ echo $?
1 # not_exist_file.txt が存在しない場合
test
コマンドは、単独で使用するよりも、シェルスクリプトの中で if
文などと組み合わせて使用することで、より効果を発揮します。
基本コマンドのまとめ
今回の記事では、Unix/Linux の基本コマンドの中から、ファイル操作に関する基本コマンドを中心に紹介しました。
-
cd
: ディレクトリ移動 -
pwd
: 現在のディレクトリ表示 -
ls
: ディレクトリ内容一覧表示 -
mkdir
: ディレクトリ作成 -
rmdir
: 空ディレクトリ削除 -
touch
: ファイル新規作成/更新日時更新 -
cp
: ファイル/ディレクトリコピー -
mv
: ファイル/ディレクトリ移動、ファイル名変更 -
rm
: ファイル/ディレクトリ削除 -
ln
: リンク作成 -
cat
: ファイル内容表示 -
echo
: 文字列表示 -
test
: 条件式評価
これらのコマンドを組み合わせることで、ファイルやフォルダの操作を効率的に行うことができます。
他にも、テキストファイルの中身を操作するコマンドや、より応用的なコマンドもあります。そのあたりはまた別の機会に。
実践!基本コマンドを使ってみる
シナリオ:
あなたは新しいプロジェクトを始めます。
まず、プロジェクト専用のディレクトリを作成し、そこにドキュメントのテンプレートファイルをコピーして、不要になったテンプレートファイルを削除する、という作業を行います。
作業手順:
-
ホームディレクトリへ移動:
まず、作業を始める場所として、ホームディレクトリに移動しましょう。
ターミナルで以下のコマンドを実行してください。cd ~
または、単に
cd
これは、
cd
コマンドを引数なしで実行することで、ホームディレクトリに移動する、という意味でしたね。 -
プロジェクト用ディレクトリを作成:
次に、プロジェクト専用のディレクトリを作成します。
ここでは、my_project
という名前のディレクトリを作成してみましょう。
以下のコマンドを実行してください。mkdir my_project
これは、
mkdir
コマンドでmy_project
という名前のディレクトリを作成する、という意味ですね。
コマンド実行後、ls
コマンドでmy_project
ディレクトリが作成されたことを確認してみましょう。ls
ターミナルに
my_project
というディレクトリ名が表示されていれば成功です。 -
プロジェクト用ディレクトリへ移動:
作成した
my_project
ディレクトリへ移動します。
以下のコマンドを実行してください。cd my_project
これで、作業ディレクトリが
my_project
ディレクトリに移動しました。
現在どのディレクトリにいるかpwd
コマンドで確認してみましょう。pwd
ターミナルに
/home/ユーザー名/my_project
(ユーザー名はあなたのユーザー名に置き換えてください) のように表示されれば成功です。 -
テンプレートファイルを作成:
次に、ドキュメントのテンプレートとなる空のファイルを作成します。
ここでは、template.txt
という名前のファイルを作成してみましょう。
以下のコマンドを実行してください。touch template.txt
touch
コマンドは、空のファイルを新規作成したり、既存のファイルの更新日時を更新したりするコマンドです。
ここでは、ファイルが存在しない状態でtouch
コマンドを実行するので、新規ファイルが作成されます。ls
コマンドでtemplate.txt
ファイルが作成されたことを確認してみましょう。ls
ターミナルに
template.txt
というファイル名が表示されていれば成功です。 -
テンプレートファイルをコピーしてファイル名を変更:
作成した
template.txt
ファイルをコピーして、ファイル名をreport.txt
に変更します。
以下のコマンドを実行してください。cp template.txt report.txt
これは、
cp
コマンドでtemplate.txt
をreport.txt
という名前でコピーする、という意味ですね。
ls
コマンドでreport.txt
ファイルが作成されたことを確認してみましょう。ls
ターミナルに
report.txt
とtemplate.txt
の2つのファイル名が表示されていれば成功です。 -
テンプレートファイルを削除:
テンプレートファイル
template.txt
はもう不要になったので、削除しましょう。
以下のコマンドを実行してください。rm template.txt
これは、
rm
コマンドでtemplate.txt
ファイルを削除する、という意味ですね。
ls
コマンドでtemplate.txt
ファイルが削除され、report.txt
ファイルだけが残っていることを確認してみましょう。ls
ターミナルに
report.txt
ファイル名のみが表示されていれば成功です。 -
ホームディレクトリへ戻る:
最後に、作業を終えたので、ホームディレクトリへ戻りましょう。
最初と同じcd ~
コマンドを実行します。cd ~
または
cd
pwd
コマンドでホームディレクトリに戻ったことを確認しておきましょう。pwd
ターミナルに
/home/ユーザー名
(ユーザー名はあなたのユーザー名) のように表示されれば成功です。
まとめ:
お疲れ様でした!
これで、一連のコマンド操作で、
- ディレクトリの移動 (
cd
) - ディレクトリの作成 (
mkdir
) - ファイルの作成 (
touch
) - ファイルのコピー (
cp
) - ファイルの削除 (
rm
)
といった、基本的なファイル操作を行うことができました。
今回の例は簡単なものですが、これらの基本コマンドを組み合わせることで、より複雑なファイル操作や、自動処理なども実現できるようになります。
Discussion