よく使うLinuxコマンドの解説と使い方について

これからよく使う基本的なLinuxコマンドについてまとめていこうと思います。
必須のコマンドを< >と表記して、任意のコマンドは[ ]と表記していきます。
それでは全18種類のLinuxコマンドを見ていきましょう。

<H3>1. cdコマンドについて</H3>
cdコマンドとは、change directoryの略で、ディレクトリを移動するコマンドです。
cdコマンドのみでも使えるのですが、 [オプション] [ディレクトリ]を付け加えることで一度の実行で目的の場所に移動することができます。

```Linux:cdコマンドの書き方
cd [オプション] [ディレクトリ]
```
```Linux:cdコマンドの例
cd /home/dx
```

:::note warn
重要
ここでディレクトリとはどういうものなのか説明していきます。
ディレクトリにはそれぞれ名前があり、特別な指定方法があります。
そのディレクトリを4つ紹介していきます。
1つ目はカレントディレクトリです　現在自分がいるディレクトリことを指します。指定方法は「.」です。
2つ目は親ディレクトリです。1つ上の階層のディレクトリのことを指します。指定方法は 「..」です。
3つ目は、ホームディレクトリです。「/home/ユーザ名」ディレクトリのことを指します。ターミナルを立ち上げた時の最初にいる位置です。指定方法は「~」です。cdコマンドのみを使用してもここに移動します。
4つ目は、ルートディレクトリです。「/」ディレクトリのこと（一番上の階層）を指します。指定方法は「/」です。
:::

<H3>2. pwdコマンドについて</H3>
pwdコマンドは、print name of working directoryの略で、カレントディレクトリを表示するコマンドです。今自分がどこで作業しているのか把握するために使います。


```Linux:pwdコマンドの書き方
pwd [オプション]
```
```Linux:pwdコマンドの例
pwd
```

<H3>3. lsコマンドについて</H3>
lsコマンドとは、listの略したコマンドでファイルやディレクトリの一覧を表示するコマンドです。lsのみを打つとカレントディレクトリのファイルとディレクトリを表示します。ファイル名やディレクトリ名を加えるとその情報だけを取得できます。複数同時にディレクトリの指定も可能です。
次にlsでよく使う3つのオプションについて説明します。

1つ目は、ls -l　でこのコマンドを使うことで詳細情報を表示します。ファイルタイプ、ファイルモード、リンク数、所有者、所属グループ、サイズ、タイムスタンプ、ファイル・ディレクトリ名を表示します。
2つ目は、ls -a　でこのコマンドを使うことで隠しファイルを含めたすべてのファイルを表示することができます。
隠しファイルとは 「.ファイル名」と表示されている先頭にコンマがついているファイルのことを言います。
3つ目は　ls -F でこのコマンドを使うことでファイル種別を表示します。「/」がディレクトリ、「＠」がシンボリックファイル、「*」実行ファイル、記号なしが通常ファイルを表しています。

```Linux:lsコマンドの書き方
ls [オプション] [ディレクトリ・ファイル名]
```
```Linux:lsコマンドの例
ls /home
```
:::note warn
重要
ここで複数ディレクトリの指定方法やオプションについて詳しく見ていきます。
他のコマンドでも使えるので使い方や意味を理解しましょう。
今回はlsコマンドを例に挙げて説明します。

パス名展開を使うことで複数のファイルを一度に指定できます。例えば、*を使えば、任意の文字列が指定してファイルの一覧表示することができます。 htmlのファイルの一覧を見たい時は、ls *.html　と入力するとhtmlファイルの一覧を確認することができます。
また、?を使えば、一意の１文字を指定して対象のファイルを表示するをとができます。
zから始まる４文字のファイルを見たい時は、ls /bin/z???　と入力するとzから始まるファイルを確認することができます。

オプションとは、-に何かの記号を続けるとコマンドの動作を変えることができます。
その書き方を5つ紹介していきます
1つ目は、ls -a　のようにコマンドの後ろにスペース区切りで指定します。
2つ目はオプションを2つ以上指定することができます。書き方は、ls -a -l　と　ls　-al　というように一つずつ指定する方法と複数指定する方法の二つがありますが、どちらも同じ意味です。
3つ目は、ls　-al　/home のようにオプションと引数を同時に指定することができます。
4つ目は、ls -w　10　というようにオプションに対して引数を取ることができます。
5つ目は、ls --version　というようにロングオプションがあります。オプションに長い名前を指定する時に使います。

:::



<H3>4.mkdirコマンドについて</H3>

mkdirコマンドとはmake directroyを略したコマンドで、ディレクトリを新規作成するときに使います。オプションで　-pを使うことで深いディレクトリを一度に作成できます。例えば、mkdir -p test/2025/01　と入力するとtestディレクトリを作って、次に2025ディレクトリを作って、最後に01ディレクトリを作ることができます。一度のコマンドで3つのディレクトリを同時に作成することができます。-pを使わない場合は3回に分けて、mkdirコマンドを使う必要があります。

```Linux:mkdirコマンドの書き方
mkdir [オプション] <作成するディレクトリ名>
```
```Linux:mkdirコマンドの例
mkdir -p test/2025/01
```

<H3>5.rmdirコマンドについて</H3>
rmdirコマンドとは、remove directoryの略で空のディレクトリを削除することができます。ディレクトリー中にファイルが残っていると削除できません。、ディレクトリの中にファイルが残っていることに気づかずに消してしまうことを防ぐことができます。

```Linux:rmdirコマンドの書き方
rmdir <ディレクトリ名>
```
```Linux:rmdirコマンドの例
rmdir home
```


<H3>6.catコマンドについて</H3>
catコマンドとは、concatenateの略でファイルの中身を表示するコマンドです。
オプションで、-nと書くとファイルの行番号を確認することができます。
また、複数のファイルをまとめて表示することができます。例えば、cat /home/go /home/do　と書くことで　/home/goファイルの内容と　/home/doファイルの内容が順に表示されます。

```Linux:catコマンドの書き方
cat [オプション] <ファイル名>
```
```Linux:catコマンドの例
cat -n /home/go
```



<H3>7.lessコマンドについて</H3>

| コマンド | 内容 |
|:-:|:-:|
|スペース、f| 一画面下にスクロール|
|b| 一画面上にスクロール|
|j| 一行下にスクロール|
|k| 一行上にスクロール|
|q| lessコマンド終了|
|/| 下方向に向かって検索|
|?| 上方向に向かって検索|
|n| 次の結果に移動|
|N| 前の結果に移動|

lessコマンドとは、less -opposite of more の略でファイルの中身をスクロール表示することができます。コマンドの中身を確認、検索や終了することもできます。上記のコマンドを使うことで簡単に確認や検索ができます。




```Linux:lessコマンドの書き方
less [オプション] <ファイル名>
```
```Linux:lessコマンドの例
less /home/go
```


<H3>8.tailコマンドについて</H3>
tail コマンドはデータの終わり部分を標準出力します。オプションを指定しない場合は、末尾から 10 行を標準出力します。tail -5 fail とオプションを加えることで末尾から5行を表示することができます。-行数と書くことで末尾からの指定した行数分の内容を表示することができます。

```Linux:tailコマンドの書き方
tail [オプション] [ファイル]
```
```Linux:tailコマンドの例
tail -5 fail
```


<H3>9.touchコマンドについて</H3>
touchコマンドは、touchの略で空のファイルを作成することができます。
ファイル名が存在していない時は空のファイルを作成して、同じファイル名が存在する時はタイムスタンプを更新します。間違って存在しているファイルが上書きされることを防ぐことができます。

```Linux:touchコマンドの書き方
touch <ファイル名1> <ファイル名2>
```
```Linux:touchコマンドの例
touch program.md
```

<H3>10.rmコマンドについて</H3>
rmコマンドとは、removeの略でファイル、ディレクトリを削除することができます。
rmコマンドではよく使うオプションが3つあります。
1つ目は、rm -r ＜ディレクトリ名>　でディレクトリとその中身のファイルを合わせて削除することができます。
2つ目は、rm -f ＜ファイル名＞　でファイルを削除する際に警告文を表示しません。
3つ目は、rm -i ＜ファイル名＞ でファイル削除前に確認します。
ディレクトリーを消す時には　-rをつけることを覚えておきましょう。


```Linux:rmコマンドの書き方
rm[オプション] <削除するファイル名1>
```
```Linux:rmコマンドの例
rm program.md
```


<H3>11.mvコマンドについて</H3>
mvコマンドとは、moveの略でファイル移動、ファイル名の変更をするコマンドです。
移動か変更は自動でシステムが判断します。mv file file1　のように移動元がファイルの場合はファイル名が変更されます。mv div/ home/  のように移動元と移動先がディレクトリだった場合はディレクトリ名を変更することができます。一方で、mv file div/　のように移動元がディレクトリ名だとファイルが移動します。
また、mv -i を使うと上書きする前に確認してくれます。

```Linux:mvコマンドの書き方
mv [オプション] <移動元(変更前の名前)> <移動先(変更後の名前)>
```
```Linux:mvコマンドの例
mv file file1
mv file div/
```


<H3>12.cpコマンドについて</H3>
cpコマンドとは、copyの略でファイル・ディレクトリをコピーするコマンドです。
cp file new_file　と書くとfileの中身を　new_file　にコピーできます。
cp file dir と書くとfileをdirにコピーできます。cpコマンドでよく使うオプションが2つあります。
1つ目は、cp -iコマンドで上書きする前に確認できます。例として、cp -i file new_file　と書く　fail　の中身を　new_file　に上書きする前確認することができます。
2つ目は、cp -rコマンドを使うとディレクトリをコピーすることができます。例として、cp -r dir new_dir は　dir　の中身を　new_dir　にコピーすることができます。

```Linux:cpコマンドの書き方
cp[オプション] <コピー元> <コピー先>
```
```Linux:cpコマンドの例
cp -I home new_home
```


<H3>13.lnコマンドについて</H3>
lnコマンドとは、linkを略したコマンドで、長いパス名を省略したい時や複数バージョンを共存させて最新を区別したい時に使います。例えば、ln file1 file2と書くとfile1にfile2の名前をつけたことになります。何もつけなければハードリンクとして処理されます。
一方で、シンボリックリンクを貼るにはln -sコマンドを使います。例えば、ln -s file1 file3 とすることで file1 に file3 というシンボリックリンクを作ることができます。


```Linux:lnコマンドの書き方
ln [オプション] <リンク元ファイル> <リンク名>
```
```Linux:lnコマンドの例
ln file1 file2
```
:::note info
補足
Linuxでは別名をつけることができます。それをリンクを貼るといいます。
Linuxにはリンクが2つあります。
1つ目はハードリンクで元のファイルを削除しても消えず、一つのファイルに複数の名前をつけることができるリンクのことです。すべてのハードリンクが消えた時に削除されます。
2つ目はシンボリックリンクで実態を削除したり、ファイルを移動したりすると参照できなくなります。リンク先のパス名が書かれた特殊なファイルでリンク先がファイルの実態になります。
そのリンクを貼るコマンドがlinkを略したlnコマンドになります
シンボリックリンクの方がハードリンクに比べて制限が少なく使いやすいのでシンボリックリンクがよく使われることが多いです。
:::

<H3>14.findコマンドについて</H3>

findコマンドは、findの略で検索開始ディレクトリを起点に検索条件で指定されたファイルを探すことができるコマンドです。例えば、find .-name program.md -print と書くとカレントディレクトリを起点にして program.md が見つかったらそのパスを表示してという意味になります。-nameを使ってファイル名を指定して、-print を使ってパス名を表示することができます。-name は大文字と小文字を区別しますが、-iname は大文字と小文字を区別しません。また、ファイル名を指定するときに * や ? のようなワイルドカードも使えるのですが、' ' や " " で囲む必要があります。

```Linux:findコマンドの書き方
find <検索開始ディレクトリ> <検索条件> <アクション>
```
```Linux:findコマンドの例
find .-name program.md -print
```

<H3>15.chmodコマンドについて</H3>
<H4>chmodの使い方1</H4>

|コマンド|意味|
|:-:|:-:|
|u|所有者の権限|
|g|グループの権限|
|o|その他のユーザーの権限|
|a|全ユーザの権限|
|＋|権限の追加|
|ー|権限の削除|
|＝|記述した権限にする|
|r|読み取り|
|w|書き込み|
|x|実行|

chmodコマンドとは、change modeの略でファイルやディレクトリのパーミッションを設定するコマンドです。chmodコマンドはchmod[誰に対して][どうするか][何を]の順で書きます。例えば、グループがr-w-x権限を持っていて、wの権限を削除したいという時には、chmod g-w fail と書くことで削除できます。これは相対指定の書き方です。特定のユーザーの権限だけ変更したい時は相対指定を使います。

```Linux:chmodコマンドの書き方
chmod [ugoa][+-=][rwx] <ファイル名>
```
```Linux:chmodコマンドの例
chmod g-w fail
```

<H4>chmodの使い方2</H4>
<dl>
  <dt>r(読み取り)→ 4</dt>
  <dt>w(書き込み)→ 2</dt>
  <dt>x(実行)　　→ 1</dt>
</dl>
chomodには別の書き方もあります。
数値で権限を指定する方法です。
r、w、xは権限をコンソールで確認したときにそれぞれの持っている権限がアルファベットで表示されます。
オーナ、グループ、その他の権限をそれぞれ足し算して数値に置き換えます。例えばオーナーはすべての権限許可して、グループは読み取りと実行、その他ユーザは読み取り権限のみとすると、まずオーナーが4+2+1で7となり、グループは4+1で5となり、その他ユーザーは4となります。そして、chmodコマンドを使ってオーナー、グループ、その他ユーザの順で数値を書くと chmod 754 file　となります。それぞれに権限が正しく割り当てることができます。
これは絶対指定の書き方です。全体の権限設定を一気に決める時には絶対指定を使います。

```Linux:chmodコマンドの書き方
chmod <8進数の数値> <ファイル名>
```
```Linux:chmodコマンドの例
chmod 754 file
```

<H3>16.chownコマンドについて</H3>
chownコマンドとは、ファイルの所有者を変更するコマンドです。指定方法によって所有グループも変更することができます。ユーザとグループを変更するにはroot権限が必要です。sudoコマンドつけることで、root権限でコマンドを実行することができます。sudo chown user :group fail と書くと fail の所有者と所有グループを変更することができます。
また、オプションで　-Rをつけると引数で指定したファイルやディレクトリの所有者を再度元に戻すことができます。

```Linux:chownコマンドの書き方
chown [オプション] [ユーザー][:[グループ]] <ファイル>
```
```Linux:chownコマンドの例
chown taro fail
```

<H3>17.psコマンドについて</H3>
psコマンドとは、process statusの略で実行中のプロセスを表示するコマンドです。
psコマンドの出力結果のPIDはプロセスIDで、CMDは実行中のコマンドのことを指します。
複数行表示される場合は1行で1つのプロセスになっています。
よく使うオプションについて説明します。
ps auxと書くとすべてのユーザーの全プロセスを、詳細情報を合わせて表示します。それぞれ詳細を見ると、xはpsコマンドを実行したユーザすべてのプロセスを表示して、aはpsコマンドを実行していないすべてのユーザのプロセスを表示して、uは詳細情報を合わせて表示するという意味になります。

```Linux:psコマンドの書き方
ps [オプション]
```
```Linux:psコマンドの例
ps aux
```

:::note info
補足
ジョブはまとめて実行される集まりのことで、シェルごとに管理されます。
具体的には、ジョブとプロセスの違いは、プロセスはOS全体で統一して管理されるシステムが自動で実行しているプログラムや他のユーザーが実行しているコマンドを一括して管理して、ジョブはそのジョブを実行するシェルで管理されます。
例えば、ps aux | grep bash | less だったらプロセスは3つ、ジョブは1つ生成されることになります。
|コマンドで区切って一度に複数のコマンドを実行することができます。
:::


<H3>18.killコマンドについて</H3>

killコマンドとは、kill processの略でジョブやプロセスを終了させるコマンドです。
 バックグラウンドジョブはkillコマンドで終了して、フォアグラウンドのジョブは、ctrl+cで終了します。killコマンドはジョブやプロセスを終了するために、シグナルを送信します。
kill -<シグナル名> <プロセスID>という書き方もできます。kill 4328　と　kill -TEAM 4328は同じ意味のコマンドです。デフォルトではTERMという終了を指示するシグナルを送信しているため、省略した形と省略していない形の２パターンで書くことができます。

また、まれにTERMを受け付けない時があります。その時に使うのがSIGKILLという強制終了のシグナルです。kill -SIGKILL 4328とkill -9 4328は同じ意味になります。シグナルは文字列とそれに対応する数値も割り当てられていて、数値で指定することができます。SIGKILLは、9の数値で表現することができるので同じ意味になります。

```Linux:killコマンドの書き方
kill [オプション] %<ジョブID>
kill [オプション] <プロセスID>
```
```Linux:killコマンドの例
kill %2
kill 4328
```
:::note info
補足
フォアグラウンドとはシェルの画面内で実行することです。ユーザーの入力を受け付けることを指します。
パックグラウンドとはシェルの画面外でコマンドを実行することです。ユーザが対話的に操作できないことを指します。最初からバックグラウンドで処理するときはコマンドの後ろに&をつけます。
停止とは、コマンドの状態を一時停止している状態のことを指します。
この3つを行き来することで必要に応じてバックグラウンドやフォアグラウンド利用して一つのターミナルで複数のコマンドを同時に実行することができます。
:::