Linuxの基本コマンドをまとめてみた

# Linuxの基本コマンド
## cdコマンド
- ディレクトリを移動するコマンド
- 「change directory」の略
``` Linux
$ cd usr
/usr
```

## pwdコマンド
- カレントディレクトリを表示するコマンド
- 「print name of working directory」を意味する
``` Linux
$ pwd
/home
```

## lsコマンド
- ファイルやディレクトリの一覧を表示するコマンド
- 「list」を意味する
- 引数がない場合は現在いるディレクトリのディレクトリとファイルを一覧表示する
``` Linux
$ ls
Applications Users        cores        home         sbin         var
Library      Volumes      dev          opt          tmp
System       bin          etc          private      usr
```
- 引数にディレクトリを指定した場合はそのディレクトリの中に存在するファイルとディレクトリを一覧表示する
``` Linux
$ ls usr
X11        bin        libexec    sbin       standalone
X11R6      lib        local      share
```
- 引数に複数のディレクトリを指定することも可能
``` Linuｘ
$ ls / usr
/:
Applications Users        cores        home         sbin         var
Library      Volumes      dev          opt          tmp
System       bin          etc          private      usr

usr:
X11        bin        libexec    sbin       standalone
X11R6      lib        local      share
```
- ls -l：ファイルの詳細情報を表示するオプション
``` Linux
$ ls -l
total 9
drwxrwxr-x  38 root  admin  1216  6 11 00:16 Applications
drwxr-xr-x  68 root  wheel  2176  8 30  2022 Library
drwxr-xr-x@  9 root  wheel   288  2  7  2022 System
drwxr-xr-x   5 root  admin   160 12 21 14:02 Users
drwxr-xr-x   3 root  wheel    96  5 28 23:41 Volumes
drwxr-xr-x@ 38 root  wheel  1216  2  7  2022 bin
drwxrwxr-t   2 root  admin    64  2  7  2022 cores
dr-xr-xr-x   3 root  wheel  4490  1  1  1970 dev
lrwxr-xr-x@  1 root  wheel    11  2  7  2022 etc -> private/etc
lrwxr-xr-x   1 root  wheel    25  5 27 10:05 home -> /System/Volumes/Data/home
drwxr-xr-x   3 root  wheel    96  8 11  2022 opt
drwxr-xr-x   6 root  wheel   192  2  7  2022 private
drwxr-xr-x@ 65 root  wheel  2080  2  7  2022 sbin
lrwxr-xr-x@  1 root  wheel    11  2  7  2022 tmp -> private/tmp
drwxr-xr-x@ 11 root  wheel   352  2  7  2022 usr
lrwxr-xr-x@  1 root  wheel    11  2  7  2022 var -> private/var
```
- ls -a：隠しファイルも含め全てのファイルを表示するオプション
``` Linux
$ ls -a
.                Library          dev              tmp
..               System           etc              usr
.VolumeIcon.icns Users            home             var
.file            Volumes          opt
.vol             bin              private
Applications     cores            sbin
```
* またパス名展開というものを使用することで条件に当てはまる複数のファイルを表示することが可能
  * 「*」は任意の文字列を意味する
  * 「?」は任意の1文字を意味する 
``` Linux
$ ls *.html
first.html second.html third.html
```

``` Linux
$ ls ??????.html
second.html
```

## mkdirコマンド
- 新しいフォルダを作成するコマンド
- 「make directory」を意味する
- 下記の例だと「newdir」というディレクトリを作成
``` Linux
$ mkdir newdir
```
- また下記のようなオプションを使用することで深いディレクトリも作成することが可能
``` Linux
$ mkdir -p newdir/2023/06
```

## rmdirコマンド
- 空のディレクトリを削除するコマンド
- 「remove directory」を意味する
``` Linux
$ rmdir newdir
```

## catコマンド
- ファイルの中身を表示するコマンド
- 「concatenate」を意味する
``` Linux
$ cat home.html
<p>home</p>
```
- 引数に複数のファイルを指定することも可能で順に中身が表示される
``` Linux
$ cat home.html first.html
<p>home</p>
<p>first</p>    
```

- cat -n：行番号を表示するオプション
``` Linux
$ cat -n home.html
1	<p>home</p>     
```

## lessコマンド
- ファイルの中身をスクロールで表示するコマンド
- 「less」を意味する
``` Linux
$　 less gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME ...     
```

## tailコマンド
- 指定したファイルの中身の末尾10行を表示するコマンド
- 「tail」を意味する
``` Linux
$　　tail home.html
``` 

## rmコマンド
- ファイルやディレクトリを削除するコマンド
- 「remove」を意味する
``` Linux
$　 rm home.html
```
- rm -r ：ディレクトリも合わせて削除するオプション
``` Linux
$　 rm -r new_dir
```

- rm -f ：削除前の確認を行わないオプション
``` Linux
$　 rm -f new_dir
```

- rm -i ：削除前の確認を行うオプション
``` Linux
$　 rm -i new_dir
```

## mvコマンド
- ファイル名を変更やファイルを移動させるコマンド
- 「mv」を意味する
``` Linux
# ファイル移動
$　 mv file1 new_dir/  
```

``` Linux
# ファイル名変更
$　 mv file1 file2  
```

## cpコマンド
- ファイルやディレクトリをコピーするコマンド
- 「copy」を意味する
``` Linux
# コピー
$　 cp file1 file2
```
``` Linux
# ディレクトリ内に同一のファイル名でコピー
$　 cp file1 new_dir 
```
- cp -i ：コピー先の同名をファイルを上書きするか確認するオプション
``` Linux
$　 ｃｐ -i file1 new_dir
``` 

- cp -r ：ディレクトリをコピーするオプション
``` Linux
$　 ｃｐ -r old_dir new_dir
``` 

## lnコマンド
- ファイルのリンクを作成するためのコマンド
- 「link」の意味
- lnコマンドのリンクには「ハードリンク」と「シンボリックリンク」がある
- ハードリンクには以下の特徴がある
  - 元のファイルを削除しても消えない
  - 全てのハードリンクが無くなった時に削除される
- 以下の例ではハードリンクを作成している
``` Linux
$　 ln file1 file2
``` 
- シンボリックリンクには以下の特徴がある
  - リンク先のパス名が書かれた特殊ファイルでリンク先がファイルの実体
  - シンボリックリンクを残したままファイル実体を削除したり、ファイルを移動すると参照できなくなる
- 以下の例ではシンボリックリンクを作成している
``` Linux
$　 ln -s file1 file2
```
  

## findコマンド
- ファイルやディレクトリを検索するコマンド
- 以下の例では拡張子が.txtのファイル一覧を取得している
``` Linux
$　 find *.txt
``` 

## chmodコマンド
- ファイルまたはディレクトリに対する権限を設定するコマンド
- 「change mode」の意味
- 「chmod　権限設定　ファイル名」のような書式でコマンドを実行する
- 以下の例では「file」の所有者に読み取りの権限を追加している
``` Linux
$　 chmod u+r file
``` 
- また、以下の例では「chmod　8進数の数値　ファイル名」のような書式で権限を設定している
``` Linux
$　 chmod 755 file
``` 
- 数値の4は「読み取り」、2は「書き込み」、1は「実行」を表しており、数値の順番はそれぞれ「オーナー」「グループ」「その他」を表している
- 755の場合はオーナーは読み取り、書き込み、実行可能、グループは読み取り、実行可能、その他は読み取り、実行可能を表している

## chownコマンド
- ファイルやディレクトリの所有者やグループを変更するコマンド
- 「change owner」の意味
- 以下の例では「new_file」のファイルの所有者を「new_user」に変更している
``` Linux
$　 chown new_user new_file
``` 

- 下記の例のようにディレクトリの所有者やグループを変更することも可能
``` Linux
$　 chown new_user:new_group new_file
``` 

## psコマンド
- 現在実行されているプロセス一覧を表示するコマンド
- 「process status」を意味する
``` Linux
$ ps
  PID TTY           TIME CMD
 6865 ttys000    0:00.84 /bin/zsh -il
 6879 ttys001    0:00.06 /bin/zsh -il
46329 ttys002    0:00.18 /bin/zsh --login -i
46343 ttys003    0:00.01 /bin/zsh --login -i
99313 ttys006    0:05.57 -zsh
99329 ttys007    0:00.65 -zsh
```
- ps aux ：プロセスの詳細情報を表示するオプション
``` Linux
$　 ps aux
USER               PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
root             91516   1.2  0.0 34189772   2752   ??  S     8 623   10:33.45 /Applications/Av
root               123   0.6  0.2 33965376  25788   ??  Ss    1 170   28:56.68 /System/Library/
``` 

## killコマンド
- プロセスおよびジョブを終了させるコマンド
- 「kill process」を意味する
- 以下の例では「5965」というプロセスIDのプロセスを終了させている
``` Linux
$　 kill 5965
``` 
- また、以下の例のようにジョブIDを指定してジョブを終了させることもできる
``` Linux
$　 kill %1
```