WIP: よく使うコマンドと主な使い方〜初級編〜

## ssh

主にサーバーにログインするために利用する

```bash
ssh vagrant@192.168.33.10
ssh -i ~/.ssh/id_rsa vagrant@192.168.33.10
```

## ssh-keygen

秘密鍵と公開鍵のペアを生成するために利用する

```bash
# 鍵ペアの生成
ssh-keygen -t rsa
# 秘密鍵から公開鍵を生成
ssh-keygen -lf ~/.ssh/id_rsa
```

## cd

change directoryの頭文字との噂
文字通りディレクトリ移動の際に利用する

```bash
cd /
cd /var/www/html
# cdに限らないけど ; で区切れば複数コマンドを続けて実行できる
cd /var/tmp; cd ../
```

## ls

list
指定したパスのファイル一覧を表示する

```bash
ls
# パーミッションなどの詳細な情報も一緒に表示
ls -la
# サイズ表記をわかりやすく表示
ls -lah
# 環境によって ~/.bashrc などにショートカットが設定されていたりする
alias ll='ls -l'
```

## find

特定の条件に一致するファイルを検索する

```bash
# .htaccessって名前のファイルを検索
find . -type f -name '.htaccess'
# logというディレクトリを除外してerror_logって名前のファイルを検索
find . -type d -name 'log' -prune -o -type f -name 'error_log'
# 配下のファイルのパーミッションをまとめて変更
find . -type f | xargs chmod 0644
```

## mkdir

make directoryじゃないかと予想
文字通りディレクトリを作成する

```bash
mkdir hoge
# 2階層以上のディレクトリを一気に作成
mkdir -p hoge/fuga
# 複数のディレクトリを同時に作成
mkdir -p hoge/{fuga,foo}
```

## cp

copyじゃないかと予想
ファイルまたはディレクトリのコピーを行う際に利用

```bash
cp src.txt dist.text
# ディレクトリをコピー
cp -r src dist
# パーミッションや所有者などの情報を引き継いでコピー
cp -rp src.txt dist.txt
```

## rm

removeの略だと思われる
文字通り削除するコマンド

**'rm /'とかやってみたいけど未だにやったことない**

```bash
rm del.txt
# ディレクトリの削除
rm -r del
```

## mv

moveじゃないかと予想
ファイルまたはディレクトリの移動に利用
内部的にはcpしてからrmをしていると思われる
名前を変更するときとかにも使う

```bash
mv src.txt dist.txt
# ディレクトリを移動
mv -r hoge huga
```

## tree

ファイルツリーの表示を行う
ディレクトリ階層が深い場所とかで全体を俯瞰したいときに利用したり

```bash
tree /var/www/html
# 3階層目まで表示
tree -L 3 /var/www/html/
```

## ln

linkかな
シンボリックリンクを作成する

```bash
# /var/www/html 配下に sourceという名前で　/vargrant/source　に対するリンクを貼る
ln -s /vagrant/source /var/www/html/source
# リンクつけなおし
ln -snf /vagrant/source2 /var/www/html/source
# 今いる場所にリンクを貼りたい場合は第2引数は省略化
ln -s /usr/local/bin/composer
```

## sudo

super user doかな
sudoするにはログイン中のユーザーにsudo権限が必要
sudo権限については`visudo`コマンドで設定するか`/etc/sudoers.d/`配下にユーザーファイルを置く

```
# rootになる
sudo su -
# apacheユーザーで実行
sudo -u apache php -r 'echo date("Y-m-d H:i:s");'
```

## su

super user? switch user? いいえ、 substitute userです
ログインユーザーを切り替える

```bash
su - ec2-user
```

## service

主にCentOS6系やAmazon Linuxでサービスの操作に利用
サブコマンドは起動スクリプト (/etc/rc.d/init.d/配下) に依存するので代表例としてApacheで

```bash
# 登録されているサービスの状態を一覧で表示
service --status-all
# サービス開始
sudo service {{ サービス名 }} start
# サービス停止
sudo service {{ サービス名 }} stop
```

## cat

ファイルの中身を表示する
concat(結合する)が由来らしい

```bash
cat hoge.txt
# 複数ファイルの中身を繋げて表示
cat hoge.txt foo.txt 
```

## less

スクロール可能な状態でファイルの中身を表示する
f(forward)で送る、b(backfward)で戻る、gで先頭、G(Shift + g)で最後へ移動
細かなオプションはh(help)で参照可能

```
less foo.txt
```

## touch

空ファイルを作成するときに利用
.gitkeepとか作るときに便利

```bash
touch logs/.gitkeep
```

## vim (vi)

おなじみエディタツール
visual editorの略らしい
vimに関しては多岐にわたっちゃうので詳しくはまた別記事で

## tail

ファイルの最後数行を表示
他のコマンドと組み合わせたりして使うことが多い
ログを見たりするときに使うかも

```bash
tail /var/log/httpd/access_log
# 行数を指定して表示
tail -n 100 /var/log/httpd/access_log
# ファイルを開きっぱなしにして表示
tail -f /var/log/httpd/access_log
```

## head

ファイルの最初数行を表示
他のコマンドと組み合わせたりして使うことが多い

```bash
# 最終更新順に並べて先頭を表示

ls -lat | head
```

## scp

secure copyの略
ローカルのファイルをリモートへ転送したりその逆もできる
ローカルで編集したファイルや画像ファイルをサーバーにあげたりするときに利用

```bash
# ローカルからリモートへ
scp -i ~/.ssh/id_rsa hoge.txt vagrant@192.168.33.10:/tmp/ 
# リモートからローカルへ
scp -i ~/.ssh/id_rsa vagrant@192.168.33.10:/tmp/hoge.txt .
# ディレクトリをコピー
# ~/.ssh/configに接続設定を記述しておけばサーバー名だけでいける
scp -r foo aws.remote:/tmp/
```

## diff

ファイル間の差分を確認するときに使う

## git

みんな大好きバージョン管理ツール
すごくちゃんとまとめているステキな記事があった

https://qiita.com/konweb/items/621722f67fdd8f86a017

## ps

プロセス一覧を見たりするときに利用

## top

サーバーの負荷状況を確認したりするときに利用する
主にどのプロセスがメモリないしはCPUを喰っているのか、
Load Averageはどのくらいあがっているかなどなど

```bash
top
# 抜けるときはq
# コマンドキー一覧はh
```

## xargs

他のコマンドと組み合わせで利用したりする
他のコマンドの出力を1行ずつ処理したいときとか
そのままパイプでつないで渡して引数が多すぎて怒られた場合とかは便利

```bash
# 1行ずつ処理
cat id.csv | xargs -L 1 echo
```

## pwd

今いる位置を絶対パスで表示
print working directoryらしい

```bash
hirarin-no-MacBook-Pro:hirarin hirarin $ pwd
/Users/hirarin
```

## chmod

change modeかな
パーミッションの変更

|記号表記|オクテット表記|
|---|---|
|r|4|
|w|2|
|x|1|

つまり`755`は`rwxr-xr-x`になる

```bash
chmod 0664 hoge.txt
# ディレクトリ配下のパーミッションを再帰的に変更
chmod -R 0664 hoge/
# 所有ユーザーの権限に読み込みを追加
chmod u+r hoge.txt
# 所有グループから書き込み権限を剥奪
chmod g-w hoge.txt
```

## chown

多分change ownerだと思われる
ファイルの所有者の変更

```bash
chown vagrant:vagrant hoge.txt
# ディレクトリ配下のパーミッションを再帰的に変更
chmod -R 0775 hoge/
```

## grep

global search a regular expression and printの略らしい
正規表現に一致する行を検索するときに利用

```bash
# foo.txtからhogeを検索
grep 'hoge' foo.txt
# apacheがyumでインストールされているか確認
yum list installed | grep httpd
# 設定ファイルからコメント行を除外して表示
cat /etc/httpd/conf/httpd.conf | grep -v -e '^\s*#' -e '^\s*$'
# ディレクトリ配下を検索
grep -r 'hoge' ./*
# 検索にヒットした前後2行を一緒に表示
grep 'hoge' -B2 -A2 foo.txt
```