Linux標準教科書　第2.3章まとめ

# はじめに
[こちら](https://qiita.com/sasao3/items/730a579f2710660195eb)の続きです。

# 第2章　CentOS7をインストール
こちらの章では、CentOS7のインストールについて記載されています。
今回は、仮想化ソフトウェア「VirtualBox」を用いて準備します。

こちらの記事を参考にしました。
[MacでVirtualBoxを使ってCentOS 7をインストールしてみた](https://qiita.com/nooboolean/items/de4e6bbae5df040177af)

### コマンドメモ
Left Command：仮想OS(CentOS）からホストOSにカーソルを切り替える
exit：ログアウト

## 環境

- macOS Catalina version10.15.7
- VirtualBox 6.1.18
- CentOS 7.9.2009

# 第3章　基本的なコマンド
この章では、ファイルとディレクトリの基本的な考え方から、ファイル操作に関するコマンドやLinuxを利用する上で必要な基本的なコマンドを学習する。

## ファイルやディレクトリの参照（ls）
lsコマンドは、ファイル名やディレクトリ名を指定して情報を取得する際に使用する。

書式：`ls [オプション] [ファイル]`

### オプション

| オプション | 詳細 | 
|:-----------:|:------------|
|  -a   | 「.」で始まる隠しファイル等をすべて出力する   | 
|  -l   |  長（long）形式で出力する    |
|  -t   | 最終更新時間（Time）によって、ソートをして出力する        |
|  -r   | 逆順（Reverse）にソートをして、出力する       |

これらのオプションコマンドは、組み合わせて使うことができる。

例：`ls -la`,`ls -lt`など


長形式というのは、詳細な情報が書かれている形式のこと。

```
例）drwxr-xr-x  3 オーナー名  staff  96 12 12 20:01 Applications
```


左から順に、

- ファイルタイプ（-:ファイル、d:ディレクトリ、l:シンボリックリンク）
- パーミッション（アクセス権限）今回の例で言うと、rwxr-xr-x
- ハードリンクの数（3）
- オーナー名（右端に書かれているディレクトリやファイルの所有者）
- グループ名（右端に書かれているディレクトリやファイルを所有するグループ）
- バイトサイズ（96）
- タイムスタンプ（12 12 20:01）
- ファイル名（Applications）

参考：[lsコマンドの使い方と覚えたい15のオプション【Linuxコマンド集】](https://eng-entrance.com/linux_command_ls#-l)

## パーミッションについて
パーミッションは9つの文字で表されていて、それぞれ3文字ずつでそれぞれの権限について表している。
先ほどの例`rwxr-xr-x`で説明すると、

左から3文字の、rwxはファイル所有者に対する権限
真ん中の3文字、r-xはファイルの所有グループに対する権限
最後の3文字、r-xはその他に対する権限

を表している。
また、それぞれのアルファベットの意味は以下の通りです。

| 文字 | 権限 | 
|:-----------:|:------------|
| r   | 読み取り | 
| w   | 書き込み    |
| x   | 実行  |
| -   | なし      |


参考：[Linuxの権限確認と変更(chmod)（超初心者向け）](https://qiita.com/shisama/items/5f4c4fa768642aad9e06)


## 参照結果の絞り込み
ワイルドカード「*」や「?」を使って、絞り込むことができる。　※どちらも半角です

***ワイルドカードは、任意の文字列を示していてそこに何文字入っていても検索結果として表示される。***
例：`ls *.conf`
こうすると、○○.confや□○△.confなど.confファイル全てを検索することができる。

また、***検索したいファイルの文字数がわかっている場合は、「?」を使うことで絞り込むことができる。***
例：'ls ???.conf'
こうすると、ファイル名部分が3文字（つまり、○○○.confや□△○.conf）のものを検索できる。
「?」1つにつき、1文字を表している。

## ファイルのコピー（cp)
cpコマンドは、ファイルのコピーを行う際に使用する。オプションを使うことで、ディレクトリもコピーできる。

書式：`cp [オプション] コピー元 コピー先`

```
例） cp src-file dst-file
```

***dst-fileが存在しないファイルの場合***
→src-fileのコピーとしてdst-fileが作成される。（ファイルを別名のフィアルとしてコピー）

***dst-fileが存在するファイルの場合***
→dst-fileは、sr-fileのコピーで上書きされる

***dst-fileがディレクトリの場合***
→src-fileのコピーが、dst-fileディレクトリ配下に作成される。（ファイルをディレクトリにコピー）


### オプション

| オプション | 詳細 | 
|:-----------:|:------------|
| -i   | 処理を行う時に確認をする。ファイルを上書きコピーする時など、このオプションをつけると確認されるため誤った操作を防ぐことができる   | 
| -r   |  ディレクトリをコピーする。通常cpコマンドは、ファイルをコピーする機能だが、-rオプションをつけることでディレクトリの中にある全てのファイル・ディレクトリに対してコピーができる    |
| -p   | 元ファイルの情報を保存する。ファイルには所有者・属性・更新日時などファイルに関するさまざまな情報がある。cpコマンドでコピーすると、新しいファイルはそれらが全て新しい内容になってコピーされる。-pコマンドは、新しい内容を作成せず、古い情報を保存したままコピーすることができる     |

試しに、-rオプションを付けないでディレクトリをコピーしようとしてみると、下記のようなエラーがでる。ちなみに、なんだかんだMacのターミナルでコマンドの確認をしていたが、CentOSとエラー文は若干違った。

```
cp: test-folder is a directory (not copied).　//Macターミナルの場合
cp: omitting directory 'test-folder' //CentOSの場合
```

## ファイルの移動（mv）
mvコマンドは、ファイルを移動する際に使用する。

書式：`mv 移動元ファイル 移動先ファイル`

```
例） mv src-file dst-file
```

***ファイル（ディレクトリ）を別のディレクトリに移動***
→src-fileがファイルまたはディレクトリで、dst-fileが存在するディレクトリの場合、dst-fileディレクトリの下に移動する。

***名前の変更***
→src-fileがファイル名（ディレクトリ名）で、dst-fileが存在しないファイル名（ディレクトリ名）の場合、src-fileはdst-fileというファイル名（ディレクトリ名）に変更される。


### オプション

| オプション | 詳細 | 
|:-----------:|:------------|
| 　-i　 | 処理を行う時に確認をする | 
| 　 -f 　|  強制的に処理を実行する。一部の処理では、mvコマンドが確認の問い合わせをする。その確認を無視し、強制時に処理を実行するためのオプション   |

## ファイルの削除（rm）
rmコマンドは、ファイルを削除する際に使用する。オプションを使うことで、ディレクトも削除できる。

書式：`rm ファイル名`

### オプション
| オプション | 詳細 | 
|:-----------:|:------------|
| 　-i　 | 処理を行う時に確認をする、対象ファイルを本当に削除して良いか確認する | 
| 　-f 　| 強制的に処理を実行する。ファイルによっては、削除に確認を求められるがその確認を無視して、強制時に削除する   |
| 　-r 　| ディレクトリを対象にする。ディレクトリの中の、ファイルやディレクトリも削除する   |

## ディレクトリの操作（pwd,cd,mkdir,rmdir）

### 現在のディレクトリの表示（pwd）
ディレクトリは階層構造になっている。その階層の中で、現在どの位置にいるか表示するのが`pwdコマンド`である。

書式：`pwd` 
→/root/home　みたいに現在位置が出力される


### ディレクトリの変更
cd（Change Directory）コマンドを実行すると、現在いるディレクトリの変更をすることができる。

書式：`cd ディレクトリ名`

### ディレクトリの作成（mkdir）
mkdirコマンドを実行すると、ディレクトリを作成できる。

書式：`mkdir [オプション] ディレクトリ名`


| オプション | 詳細 | 
|:-----------:|:------------|
| 　-p　 | 指定されたディレクトリの上位ディレクトリも作成する | 

### ディレクトリの削除（rmdir）
rmdirコマンドを実行すると、ディレクトを削除することができる。***ただし、削除する際はディレクトリ内が空でなければいけない。******ディレクトリにファイルが存在する場合は、rm -rコマンドで中身ごとディレクトリを削除することができる。***

書式：`rmdir [オプション] ディレクトリ名`

| オプション | 詳細 | 
|:-----------:|:------------|
| 　-p　 | 指定した改装までのディレクトリを一括で削除する。オプションを付けないで、rmdirコマンドを実行した場合は、最下層のディレクトリのみ削除する。いずれの場合も、***対象とするディレクトリ内は空でなければいけない*** | 


### 特別なディレクトリ
Linuxでは、ディレクトリの中で特別なディレクトリや、それを表す記号がある。

| 記号 | 詳細 | 
|:-----------:|:------------|
| 　カレントディレクトリ「.」　 | 現在いるディレクトリ | 
| 　親ディレクトリ「..」　 | 一階層上のディレクトリ。使用例）親ディレクトリに移動したい場合は、`cd ..`で移動できる。 | 
| 　ホームディレクトリ「~」　 | ユーザの作業開始位置となるディレクトリ。~はチルダという | 
| 　ルートディレクトリ「/」　 | ディレクトリ階層の、最上位階層。 | 

### 絶対パスと相対パス
絶対パスは、最上位ディレクトリ「/」からのディレクトリのパスを表している。
どのディイレクトリにいても同様にパスを指定できるが、パスが長くなってしまう。

相対パスは、現在のディレクトリからのディレクトリパスを表している。
パスを短く表せるが、ディレクトリの位置が変わるとパスも変わる。

## ファイルの内容を表示（cat）
ファイルの内容を確認する際に使う。

書式：`cat [オプション] ファイル名`

| オプション | 詳細 | 
|:-----------:|:------------|
| 　-n　 | 行番号を付加して表示する | 

### 表示内容が多い場合

catコマンドで内容を表示する際、表示内容が多いと表示が流れてしまう（全てを表示しきれないため）。

そんな時、***表示内容がたくさんあっても画面制御を行ってスクロールを途中で止めてくれる機能がある。***
それがページング。また、ページングを実行するコマンドをページャという。

代表的なページャには、`more`や`less`コマンドがある。

書式：`more ファイル名　または、less ファイル名`

コマンドはほとんど同じであるため、ここでは`less`コマンドでの操作方法を記載する。

| 項目| 内容 | 
|:-----------:|:------------|
|スペース|次のページに進む| 
|b|前の一画面に戻る| 
|f|次の一画面に進む| 
|↑|前の行に進む（lessのみ）| 
|↓|次の行に進む（lessのみ）| 
|/単語|単語を検索する。nキーで検索結果をジャンプする| 
|q|ページャコマンドを終了（quit）する| 

見た感じ、コマンドもほとんど同じで何が違うの？と思ったので調べてみました。

***○moreコマンドとlessコマンドの違いは？***
moreコマンドは、ファイル末尾までいくと終了する。
lessコマンドは、ファイル末尾までいっても終了せず、「q」と入力することで終了する。

基本的にはlessコマンドを使えばよさそうだと感じた。

## ファイルの検索（find）
ファイルがどこのディレクトリに存在するか、findコマンドで検索できる。

書式：`find パス -name ファイル名`

## ヘルプ
コマンドには、ヘルプが含まれていることがある。ヘルプを用いることで、コマンドやオプションについて調べることができる。

書式：`コマンド --help`

## マニュアルの使い方
Linuxには、便利なオンラインマニュアルが含まれている。

書式：`man コマンド名`

| オプション | 詳細 | 
|:-----------:|:------------|
| 　-k　単語　 | '単語'が含まれるエントリ一覧を出力する | 


manコマンドは、ページャ機能が利用される。そのため、スクロール等はlessコマンドの動作と同じになる。


# まとめ
今回は第2章のCentOSのインストールを行い、第3章の基本的なコマンドについて学習しました。
どれも基本的なコマンドなので使いながら、覚えていきます。