Linuxコマンド備忘録【初心者向け】

# よく使うLinuxコマンド集
Linuxでは基本的にCUI(Character User Interface)を用いて色々な作業をする.
勿論デスクトップ環境を提供しているディストリビューションも数多く存在するが,
サーバー構築や各種Config設定, DockerやGCP,AWSといった仮想環境ではCUIでの作業がほとんど.
また最近(ってほどでもないけど)ではWSLなどで比較的簡単にLinux環境に触れられるようにもなっています.

そこで,基本的なコマンドを紹介していきます.また各コマンドでよく使うオプションも紹介します.
逆にパイプなどを用いた複雑な使い方などは紹介しません.
一度に多くの事を覚えても使いこなせませんので,まずは基礎を固めましょう.

## ファイル,ディレクトリ操作関連
### pwd
```
$ pwd

# ホームディレクトリ時
$ pwd
/home/[username]

# hogeディレクトリに移動
$ cd hoge 
$ pwd
/home/[username]/hoge
```
**[Print Working Directory]** の意味. Print=表示/出力.
今現在作業しているディレクトリの絶対パスを表示する.

### cd
```
$ cd [PATH]

# hogeというディレクトリに移動したい場合
$ cd hoge

# hogeディレクトリの中のfooディレクトリに一度で移動したい場合
$ cd hoge/foo

# fooからhoge(一つ前)に戻りたい場合
$ cd ..
```
**[Change Directory]** の意味. linuxにおけるファイル＝ディレクトリ.
`cd`の後ろに任意のディレクトリを指定して移動する.
Linux環境ではディレクトリ操作が基本中の基本です. ディレクトリ操作は慣れておきましょう.
絶対パス,相対パスともに使用可.
一つ前のディレクトリに移動する場合は,
　`cd ..`
とすることで戻ることができる.
また `cd` のみで入力すると,ホームディレクトリに移動する.

### ls
```
$ ls [PATH]

# lsのみの場合,現在いるディレクトリ内を表示
$ ls
hoge/ etc/

# パス指定することで指定したディレクトリ内を表示
$ ls hoge/
foo/ hoge.txt
```
**[List Segments]** の意味.
指定したディレクトリ内のファイルやフォルダ一覧を表示する.
後半のパスは省略可,その場合はカレントディレクトリ内の一覧を表示する.

- options  
 -a (--all) : ピリオドから始まるディレクトリやファイルを含め,すべて表示  
 -l : 権限や日付データなど,詳細な情報を含めて表示

### cat
```
$ cat [File name] ...

# hoge.txtの中身(hello world)を表示する場合
$ cat hoge.txt
hello world

# hoge.txtとfoo.txt(first linux)を表示する場合
$ cat hoge.txt foo.txt
hello world
first linux
```
**[Catenate]** の意味. Catenate=連結.
指定したファイルの内容をコマンドライン上に表示.
また複数のファイルを指定すると,各ファイルの中身を連結してコマンドライン上に表示する.

### less
```
$ less [File name]
```
指定したファイル内容をコマンドライン上に表示.
`cat` と酷似しているが,長いファイルなどを見る場合は `less` の方をお勧めする.
閲覧を終了する場合は `q` キーで終了する. (quit : 終了)

### mv
```
$ mv [Source] [Destination]

# hoge.txtをhello.txtに変更したい場合
$ mv hoge.txt hello.txt

# hello.txtをhogeディレクトリに移動させたい場合
$ mv hello.txt hoge/
```
**[Move]** の意味.
主な使い方は2つあり,
　1. ファイル/ディレクトリ名変更
　2. ファイル/ディレクトリを指定先に移動
ファイル名変更は `mv hoge.txt hello.txt` のように,**元ファイル 変更したい名前**の順で記述. ディレクトリも可.
指定先に移動は `mv hello.txt hoge/` のように,**元ファイル 移動先ディレクトリ**の順で記述.

### cp
```
$ cp [Source] [Destination]

# hello.txtをworld.txtという名前でコピー
$ cp hello.txt world.txt

# hello.txtをhogeディレクトリ内にコピー(名前を変えずに)
$ cp hello.txt hoge/

# hello.txtをhogeディレクトリ内にworld.txtという名前でコピー
$ cp hello.txt hoge/world.txt
```
**[Copy]** の意味.
記述方法は `mv` と同じ. 
`cp hello.txt world.txt` とすると, hello.txtの内容が複製されたworld.txtが作成される. hello.txtは削除されない.
`cp hello.txt hoge/` とすると,ファイル名はそのままで,指定したディレクトリ内にコピーする.　名前を変えたい場合は名前を指定する.
また `cp hello.txt world.txt` の際にworld.txtというファイル(コピー先ファイル)がすでに存在していた場合,内容が上書きされるので注意.

- options  
 -r : ディレクトリをコピーする.  
 -i : 上書きされるファイルがある場合,警告を表示する. (y/n)で選択.
<br>

## ファイル/ディレクトリ作成,削除関連
### touch
```
$ touch [File name]

# sample.txtという空のファイルを作成
$ touch sample.txt
```
空のファイルを作成する. その他タイムスタンプを変更する機能がある.

### mkdir
```
$ mkdir [Directory name]

# pracというディレクトリを作成
$ mkdir prac

# hogeディレクトリ内にsampleというディレクトリを作成
$ mkdir hoge/sample
```
**[Make Directory]** の意味.
任意のディレクトリを作成. パスを指定しての作成も可.

### rmdir
```
$ rmdir [Directory name]

# hogeディレクトリ内のsampleディレクトリを削除
$ rmdir hoge/sample

# hogeディレクトリを削除->空ではないため削除できない
$ rmdir hoge
rmdir: 'hoge' を削除できません: ディレクトリは空ではありません
```
**[Remove Directory]** の意味. Remove=削除.
指定したディレクトリを削除. ただし指定したディレクトリ内が空でない場合,削除することができない.

### rm
```
rm [File name]

# hello.txtを削除したい場合
$ rm hello.txt

# hogeディレクトリ内のworld.txtを削除したい場合
$ rm hoge/world.txt

# hogeディレクトリを削除したい場合(確認付き)
rm -r -i hoge/
```
**[Remove]** の意味.
指定したファイルを削除. ディレクトリは削除することが出来ないが,以下のオプションで可能. ただしディレクトリの中身を把握している場合のみ推奨(誤って大事なファイルを削除してしまう可能性もあるため).

- options  
 -r : ディレクトリ削除可能. 空でないディレクトリも削除できる.  
 -i : 削除前に警告文表示. (y/n)を入力で削除するかどうか選択.
<br>
<br>

## 管理者権限,インストール関連
```
# ubuntuの場合
$ sudo apt install [Package name] ...
```
パッケージのインストールコマンド. 今回はubuntuを例にしています.  
Linuxディストリビューションごとに違うため,aptが使えない場合もあります.

- options  
 -y : パッケージインストール時に問い合わせがあった場合,すべてを[y]で答える.(y入力省略)

### sudo
```
sudo 
```
**[Substitute(Super, Switch) User Do]** の意味. 所説ある.
他の管理者権限でコマンドを実行する場合に,先頭にこのコマンドを入力してから使う.
上記 `sudo apt-get install` もその一例.
ちなみに管理者権限がほぼ必要になるconfigファイルの設定などを多くする場合には,
あらかじめroot権限に入っておくほうがいい場合もある. その際は
　`sudo su`
とすることでroot権限に移行する. rootを抜ける際は `exit`

## その他コマンド,入力関連
上記までのコマンドは基本的な操作のものだが,ここからCUIでの作業で便利なコマンドや
入力の手助けになる操作方法を紹介していきます.

### clear
```
$ clear
```
コマンドラインの表示をクリアする.
作業が続いた際や別の作業を始める際に,コマンドラインをリセットすることで作業しやすくなる.
また標準設定の場合, `Ctrl + L` でも同様の効果が得られる. Lは小文字で可.

### man
```
$ man [command]

# vimのマニュアルを見たい場合
$ man vim
```
**[Manual]** の意味.
使い方やオプションの種類などを調べることができる. 公式のリファレンス.
標準では `less` コマンドを用いて表示されるため, 終了する際は `q`
コマンドだけでなく,システムディレクトリやシステムコール関連のマニュアルも見ることができる.
<br>

```
TAB キー
```
コマンドではないが,CUIにおいて `TABキー` は非常に重要なキーになっている.
TABキーを使いこなせるようになるとCUIでの作業効率が格段に上がるので,常に使用する事をお勧めします.

TABキーの主な効果は次のようなものがある.
　1. コマンドの候補を表示
　2. ディレクトリの候補を表示

**1. コマンドの候補を表示** とは,コマンドを忘れてしまった場合や入力の手間を省くのに有効である.
たとえば `apt-get install` のような長いコマンドの場合,すべて入力せずに
　**`apt-g` + TABキー + `i` + TABキー**
のように途中まで入力してTABキーを押すことで,該当するコマンドを全部入力してくれる.
なお,aptには`apt-get`以外にも`apt-config`, `apt-add-repository`など多くの種類がある.
その場合, 
　**`apt` + TABキー x ２回**
のようにTABキーを二回連続で押すことで,aptに該当するコマンド候補一覧を表示してくれる.
もちろんaptのみならず全コマンドで可能.

**2. ディレクトリの候補を表示** とは,上記の例で言う該当コマンド候補一覧と非常に似ている.
例えば `cd` コマンドを入力した際に,
　**`cd` + TABキー x ２回**
のようにすることで,カレントディレクトリ内のディレクトリを全て表示してくれる.
また `cd hoge/` の段階でTABキーを２回押すことで, hogeディレクトリ内のディレクトリを表示することも可能.

主な機能としてはこれらが上げられる. TABキーは非常に便利なので,ぜひ使いこなしてみて下さい.

## 最後に
初心者向け備忘録のため,コマンドによっては一部しか解説していないですが,
何事も基本から.まずはこれらを使いこなせるようにしましょう.