Progate +α メモず【Command Line】

# はじめに
憧れのCommand Line編です！
ほぼ基礎コマンドをやるだけだと思うので、たぶん短い記事になるはず
コマンド、いくつか知ってますよ！`cd`とか、`cd`とか…`cd`とか……
# メモず
## `touch file_name.ext`
新規ファイルの作成
### `touch`のもう一つの機能（本来の機能）
ファイルが存在している場合は、「タイムスタンプを更新する」
### なぜ`touch`が「新規ファイル作成」？
`touch`：軽く触れる => 転じて、「わずかに影響を与える」 という意味がある。
もともとは、
「タイムスタンプを更新する」＝「触るだけ」「軽く触れる」「わずかな影響」
のコマンドだった。
そこから派生して、「ファイルが存在しない場合は」新規ファイルを作成するようになった。
# `cat file_name.ext`
テキストファイルの中身を表示
### `cat`のもう一つの機能（本来の機能）
複数のテキストファイルを連結して表示する、連結して新しいファイルを作る
```bash
cat file1.txt file2.txt # 連結して表示
cat file1.txt file2.txt > combined.txt # file1とfile2を連結してcombinedに保存
```
### `cat`ってどういう意味？
`concatnate`（連結）の略。なるほど。`concat`はさまざまな言語で出てくる。
### なぜ`cat`（連結）で「ファイル表示」？
もともとは、「複数のテキストファイルを連結して表示する」機能だった。
そこから派生して、「ファイルが1つの場合は」そのままファイルの中身を表示するようになった。
## `Tabキー`で補完
いいですね～便利ですね～
もしくは`Ctrl + I`
## `mkdir directory_name
"**m**a**k**e **dir**ectory"
これは有名！（当社比）
windowsでは`md`も使える。
## `cd`
出たあ！"**c**hange **d**irectory"！
`cd directory_name`：特定のディレクトリに移動
`cd ..`：親ディレクトリに移動
`cd`：ホームディレクトリに移動
## コメントアウト `#` もしくは `<< COMMENTOUT`
```bash
touch new.txt # 実行される（これもコメント）
#touch new2.txt # 実行されない
<< COMMENTOUT
touch new3.txt
touch new4.txt
全て実行されない
COMMENTOUT
touch new6.txt #実行される
```
## `pwd`
ディレクトリシリーズ。
"**p**rint **w**orking **d**irectory"
## `ls`
ディレクトリの中身を表示。
"**l**i**s**t"
### `ls -l`：詳細表示
`-l`オプションは`long format`の`l`。`i`の大文字ではなく、`L`の小文字なので注意。
出力例
`drw-r--r-- 2 owner group 4096 Jan 18 12:00 projects`
`-rw-r--r-- 1 owner group    0 Jan 18 12:00 file.txt`
#### 文頭：`d` or `-`
最初の`d`もしくは`-`は、ディレクトリかどうかを表す。`l`だとシンボリックリンク（参照パス。ショートカット）。
次からは3文字ずつに区切ることができる。
#### `rwx`と`-`の9文字の羅列
最初の3文字が所有者の持つ権限
中央の3文字が所有グループの権限
最後の3文字がその他のユーザーの持つ権限を表す。
また、
`r`は読み込み権限
`w`は書き込み権限
`x`は実行権限を表す。
上記の例では、所有者は読み込みと書き込みの権限があり、その他のユーザーは読み込みのみ可能である。
#### 数字1字部
ハードリンク（同じファイル内容を指す異なるエントリ）の数
#### `owner` / `group`
所有者・所有グループの名前
#### 4桁の数字部
ファイルの大きさ（バイト数）
大きいファイルはKB、MB、GBなどに変換される。
#### 日付
ファイルの最終更新日
#### 要素名
ディレクトリ名・ファイル名
## `..`：親ディレクトリ
`cd ..`で親ディレクトリに移動
## ホームディレクトリ：作業の起点
ルートディレクトリ（一番親のディレクトリ）とごっちゃにないように。

ちなみに、PCの、自分のユーザー名のフォルダもホームディレクトリらしい。なるほど、一気にイメージできた。
windowsだと`C:\Users\user_name`
macだと`/Users/user_name`？
WSLだと`\\WSL\Ubuntu\home\user_name`
## `mv file_name|directory_name other_directory_name`
"**m**o**v**e"
ファイルの移動。移動したいファイル名 / ディレクトリ名と、移動先のディレクトリ名を指定
### `mv`のもう一つの機能
`mv current_file_name new_file_name`：ファイル名を変更
`mv current_directory_name new_directory_name`：ディレクトリ名を変更
なお、Windowsでは内部的に名前の大文字小文字を判別しない。
リネームの扱いにならないため、以下のコマンドは実行できない。
`mv projects Projects`
いったん、別の名前を経由して名前を付けなおそう
`mv projects a`
`mv a Projects`
## `cp file_name new_file_name`
"**c**o**p**y"
コピーする
### オプション：`-r`
`cp -r directory_name new_directory_name`でディレクトリをコピー対象とすることができる
"recursive"：再帰的、の略らしい。
## `rm`
"**r**e**m**ove"
削除する
### オプション：`-r`
使い方は`cp`に同じ
### 雑記：`rmdir`と`rm -r`の違い
実は`rmdir`もある。ただこちらは、空のディレクトリだった時のみ削除する。
ファイル・サブディレクトリがあった場合は削除しない。
`rm -r`は関係なくすべてを削除するので、注意して使おう。
## `sudo`と`su`
`sudo`！ここで出るのか！！！
`su`がユーザーの切り替え。特定のユーザーを指定しない場合はルートユーザーに切り替え。
`sudo`はroot権限でコマンドを実行する。
## シェルスクリプト
複数のコマンドを自動実行するためのテキストファイル
拡張子は`.sh`
例
```bash
#list_files.sh

# 現在のディレクトリのファイルをリストする
echo "ファイルのリスト:"
ls

# ファイルの合計サイズを表示する
echo "ファイルの合計サイズ:"
du -sh . ##ここでの-shは.shとは無関係。-sオプションと-hオプション。
```
使用方法
1. ファイルに保存
2. 実行権限を与える（`chmod +x file_name.sh`）
3. スクリプトを実行する
## その他便利コマンド
`ctrl + L`：ターミナルの画面クリア
`ctrl + C`：実行中コマンドの中断
# 終わりに
楽しかった……丸一日やれるww
練習問題ツールないものか。知ってる人いたら教えてください！！！