Linuxコマンド覚書

個人メモです。
随時更新します。

※コマンド処理の対象ファイルは、現在地ディレクトリに存在している前提です。

# Linuxコマンド（アルファベット順）

### ■ awkコマンド
スペースなどで区切られたテキストを処理する。
Awkはプログラミング言語のひとつで、Linuxコマンドっぽく使えるらしい（？？？）

### ■ catコマンド
ファイルの中身を表示（Concatenate）
`$ cat ファイル名`

```shell
# 複数のファイルを連結して出力
$ cat ファイル名1 ファイル名2
```

### ■ cdコマンド
ディレクトリの移動（Change Directory）
`$ cd ディレクトリ名`

`$ cd ..`：1つ親のディレクトリ（親ディレクトリ名はNG）
`$ cd`：ホームディレクトリ[^1]

### ■ chmodコマンド
ディレクトリ・ファイル等の権限変更（Change Mode)
`$ chmod 権限設定 ファイル名`

```
# "ls -l"での表示結果例

-rw-rw-r--  1 user group      9  10 15 00:00 sample.txt
drwxr-xr-x  6 user group  42580  11 30 00:00 test
```
（例）
①d②rwx③r-x④r-x

①ファイル種別
`-`：ファイル
`d`：ディレクトリ
`|`：シンボリックリンク

②所有者権限

③所有グループ権限[^2]

④その他ユーザの権限[^3]
`r`：読み込み権限（Readable）
`W`：書き込み権限（Writable）
`X`：実行権限（eXecutable）
`-`：権限なし

#### ☆ chownコマンド
ファイルやディレクトリの**所有者**を変更する（Change Owner）
`$ chown 所有者or所有者:グループ ファイルorディレクトリ`

#### ☆ chgrpコマンド
ファイルやディレクトリの**グループ**を変更する（Change Group）
`$ chgrp グループ ファイルorディレクトリ`

### ■ cpコマンド
コピー（Copy）

ファイル
`$ cp コピー元ファイル名 コピー先ファイル名`
ディレクトリ
`$ cp -r コピー元ディレクトリ名 コピー先ディレクトリ名`
※**-r**がないとエラーになる

### ■ findコマンド
ファイルを検索
`$ find ファイル名`

### ■ grepコマンド
ファイル内検索
`$ grep 検索文言 ファイル名`
→ 結果は該当行で表示される

※追々内容整理
1. [grepコマンドで覚えておきたい使い方14個(+3個) | 俺的備忘録 〜なんかいろいろ〜](https://orebibou.com/2014/12/grep%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E8%A6%9A%E3%81%88%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%E4%BD%BF%E3%81%84%E6%96%B914%E5%80%8B/)
2. [grepでこういう時はどうする? | Qiita](https://qiita.com/hirohiro77/items/771ffb64dddceabf69a3)
3. [grepコマンドの詳細まとめました【Linuxコマンド集】 | エンジニアの入り口](https://eng-entrance.com/linux-command-grep)

### ■ lessコマンド
ファイルの中身を上から順に表示
→ 対象ファイルが大きいとき向き
※シェルスクリプトはだめらしい
`$ less ファイル名`
`q`：終了

### ■ lsコマンド
ファイルやディレクトリの中身を一覧表示（List Segments）
※一覧表示できるのは1つ子の階層のみ
`ls -l`にて詳細情報も表示

#### ☆ llコマンド
`ls -l`のエイリアス（ショートカット）
`alias ll='ls -l --color=auto'`がされている必要あり

```console
$ ll -d $(find `pwd`)
drwxr-xr-x 3 root root 4096  5月  1 20:36 2017 /hoge
drwxr-xr-x 3 root root 4096  5月  1 20:38 2017 /hoge/fuga
-rw-r--r-- 1 root root 7604  5月  1 20:35 2017 /hoge/fuga/bar.txt
-rw-r--r-- 1 root root  543  5月  1 20:35 2017 /hoge/fuga/foo.txt
drwxr-xr-x 2 root root 4096  5月  1 20:38 2017 /hoge/fuga/piyo
-rw-r--r-- 1 root root 2634  5月  1 20:35 2017 /hoge/fuga/piyo/baz.txt
```
イイ感じにとれる

### ■ mkdirコマンド
ディレクトリの作成（Make Directory）
`$ mkdir ディレクトリ名`

### ■ mvコマンド
ファイルやディレクトリの移動（Move）
`$ mv 移動元ディレクトリ名（ファイル名） 移動先ディレクトリ名`

### ■ netstatコマンド
ネットワーク一覧を表示
`$ netstat -na`

### ■ printfコマンド
入力データを整形して表示する。
`$ printf 書式 [数や文字列などの値]`

```shell
# 16進数で123456を表示後、改行
$ printf "%X\n" 1234656
# 先頭を0で埋めた3桁で10を表示後、改行
$ printf "%03d\n" 10
```
```console
↓ 結果
12D6E0
010
```

### ■ pwdコマンド
現在地（カレントディレクトリ）の確認（Print Working Directory）

#### ☆ その他ディレクトリの表記法
ルートディレクトリ：`/`
1つ親のディレクトリ：`..`

### ■ rmコマンド
削除（Remove）
ファイル：`$ rm 削除ファイル名`
ディレクトリ:`$ rm -r 削除ディレクトリ名`
※[cpコマンド](###-■-cpコマンド)同様**-r**がないとエラーになる

#### ☆ rmdirコマンド
対象のディレクトリ**のみ**を消す
→ ディレクトリ内が空でないと実行できない

### ■ sedコマンド
テキストファイルの編集（Stream Editer）
`$ sed スクリプトコマンド ファイル名`

```shell
# ファイル名を指定して使う
$ sed -e 's/xxx/XXX/g' ./hoge.txt > ./hoge-new.txt
```

### ■ suコマンド
ユーザ切替（Substitute User）
`$ su - ユーザ名`
※「-」とユーザ名の間のスペース必要
一度rootユーザになる必要がある？？

#### ☆ rootユーザ
`$ su`
でrootユーザに一時的に切替
`$ exit`で終了

### ■ sudoコマンド
rootユーザーとして実行したいコマンドの前につけることで、
そのコマンドをroot権限で実行できる

### ■ tailコマンド
テキスト入力の最後のn行を抜き出す
（デフォルトでは最後の10行）
`$ tail ファイル名`

```shell
# 最後の10行を表示
$ tail -n 10 text.txt
```

### ■ tarコマンド
アーカイブファイルを作成したり展開したりする（Tape Archives）
`tar オプション tarファイル名 まとめるファイルやディレクトリ`

#### ☆ gzipコマンド
ファイル圧縮コマンド

#### ☆ .tar.gz拡張子
tarコマンドでまとめたファイル（tarファイル）をgzipコマンドで圧縮したファイル
UNIX系

```shell
# c（作成）, v（詳細出力）, f（アーカイブ名指定）のオプションを付与
tar cvf fizzbuzz.tar fizz.txt buzz.txt

# 上記オプション+z（gzip圧縮）にて".tar.gz"を一発で作成
tar cvfz fizzbuzz.tar.gz fizz.txt buzz.txt
```

### ■ touchコマンド
ファイルの作成
`$ touch ファイル名`

### ■ uniqコマンド
重複している行を削除する。
`$ uniq [オプション] 入力ファイル [出力ファイル]`

```shell
# 頭5文字が重複している行を削除し、重複行を取り除いた結果がoutput.txtに出力される
$ uniq -w 5 input.txt output.txt
```

### ■ vimコマンド
ファイル編集
`$ vim ファイル名`
`i`：挿入（insert）モード＝編集可能状態
`Esc`：ノーマルモード（これにしないと保存できない）
`:wq`：保存して終了
`:q!`：保存なしで終了

# その他
Linux以外の話あり
### ■ リダイレクト
ファイルへの出力方法

`>`：ファイルへの出力（上書き）
`>>`：ファイルへの**追記**
`2>&1`：標準出力と標準エラー出力を同一のファイルに保存する

### ■ 補完機能
ファイル名の入力途中で**tabキー**を押すと
残りのファイルキーを補完してくれて便利。

（追記）
Macのターミナルだとできないので、変更の設定を別途行う。
[[備忘録]ターミナルでTabキーを押下することで入力補完してくれるように変更する方法 | Qiita](https://qiita.com/fantm21/items/7e9b23ddd8a958a93679)
[Mac のターミナルで Windows のようにタブキーで入力補完する方法 | ほしとねこが好き](https://ameblo.jp/nekocat2/entry-11539657198.html)


# 参考
1. [これで一発理解！LinuxとUnixの違いを徹底解説 | TECH::NOTE](https://tech-camp.in/note/technology/14821/)
2. [tail コマンド | コマンドの使い方(Linux) | hydroculのメモ](https://hydrocul.github.io/wiki/commands/tail.html)
3. [【 uniq 】コマンド――重複している行を削除する：Linux基本コマンドTips（64） | ＠IT](https://www.atmarkit.co.jp/ait/articles/1611/14/news021.html#sample4)
4. [ディレクトリを削除する！rmdirコマンドの使い方 詳細まとめ【Linuxコマンド集】 | エンジニアの入り口](https://eng-entrance.com/linux-command-rmdir#rm)
5. [[初心者向け]Awkの使い方 | Qiita](https://qiita.com/tofu511/items/3ecf9c5361d08b5c6eae)
6. [【 printf 】コマンド――データを整形して表示する：Linux基本コマンドTips（319） | ＠IT](https://www.atmarkit.co.jp/ait/articles/1907/05/news012.html)
7. [Linuxの権限確認と変更(chmod)（超初心者向け） | Qiita](https://qiita.com/shisama/items/5f4c4fa768642aad9e06)
8. [chmod コマンド | Qiita](https://qiita.com/ntkgcj/items/6450e25c5564ccaa1b95)
9. [sed コマンド | コマンドの使い方(Linux) | hydroculのメモ](https://hydrocul.github.io/wiki/commands/sed.html)
10. [chmod? chown? よくわからんって人のための、ファイル権限系まとめ | Qiita](https://qiita.com/t-a-run/items/239ed690ece7a011804a)
11. [Linuxのユーザーとグループって何だろう？ (1/2)：“応用力”をつけるためのLinux再入門（10） | ＠IT](https://www.atmarkit.co.jp/ait/articles/1706/02/news014.html)
12. [.tar.gz【拡張子】とは｜「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word12942.html)
13. [tar【コマンド】とは｜「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word11266.html)
14. [ls -lコマンドの結果をサブディレクトリ含めてフルパスで列挙したい | Qiita](https://qiita.com/dwatarub/items/768c5eb263b49198952e)

[^1]: ユーザが作業する際に起点となるディレクトリ
[^2]: ユーザはグループに所属している。設定ファイルは"/etc/group"
[^3]: 他人、Others