【Linux】実務で使ってるLinuxコマンド一覧

# 実務で使ってるLinuxコマンド一覧

最近ではLAMP環境でアレコレやることも（きっと）減っていて、
僕自身、実際あまりLinuxコマンドに触れることはなかったです。

使ってたのはせいぜい

```console
cd
mkdir
rm
vim
ls
```

ぐらいでした。

オプションつけるなんてことも滅多になく。
（あったとしてもrm -rf）

しかし3月〜、受託会社にてエンジニアとして勤めていると、
なんとまぁLinuxコマンドはわりと普通に使うんですね。（当然ですかね。。笑）

ということで色々とアレコレやりだして仕入れた、
Linuxコマンドたちを備忘録としても使えるようにまとめてみました。

## ls

List Segmentsの略、らしい。
カレントディレクトリのファイルやディレクトリを一挙に表示してくれます。

```console:実行結果
$ ls
Application  Documents  Downloads  Library  Movies  Music
Pictures  Public
```

個人的にはlオプションをつけて表示すると、縦一列に並ぶ上、ファイルの持つ権限なども
一覧になり、管理する上でも、シンプルに閲覧する上でも見やすくて欠かせないオプションです。

## mkdir

Make Directoryの略ということで、
文字通り、ディレクトリを作成するコマンドです。

```console:実行結果
$ mkdir test_directory
$ ls
test_directory
```

## cd

Change Directoryの略ということらしく、
ディレクトリを移動するためのコマンドです。

```console:実行結果
$ cd test 
$ pwd
Users/User_Name/test
```

因みに、存在しないディレクトリには移動できないため、
ディレクトリを作成する意図がある場合には、
mkdirでディレクトリを生成してからにしましょう！

よく使うのは、「..」で、1階層上のディレクトリに移動するというコマンドです。
cdだけで打つと、ホームディレクトリに一発で戻れます。
ディレクトリ移動をうっかり間違えた場合などは「cd -」で一個前にいたディレクトリに戻ります。


## pwd

Positioning Work Directoryの略（のはず）らしいです。
いまいるディレクトリのパスを表示するというコマンドです。

```console:実行結果
$ pwd
Users/User_Name/
```

たったそれだけですが、本番環境などで作業する際に、
cdコマンドで移動したあとに、ちゃんと想定通りのディレクトリに移動したか？
などの確認のために使っています。


## rm

Removeの略だと思っている。
ファイル削除のためのコマンドです。

```console:実行結果
$ ls
test1.txt test2.txt test3.txt
$ rm test1.txt
$ ls
test2.txt test3.txt
```

-rfオプションをつけるとディレクトリ削除ができます。
因みに、つけないとディレクトリ削除はできません。

実行されたが最後、問答無用で削除するので、
本番環境にいる場合など、要注意です。


## mv

moveの略称でしょう。
moveは移動という意味の通り、ファイルなどの移動をさせるコマンドです。

僕がよく使う例としては以下になります。
scp hoge fuga:~/
とかでファイルを転送したあとで…

```console
$ cd var/www/html
$ mv fuga .
$ ls
fuga
```

みたいに、転送させてきたファイルを移動させるのに使ってますね。

ドットは「カレントディレクトリ（現在地）」を指すので、移動させたい場所に先に移動して、
.記述でファイルを移動させる、っていうのを最近よくやっています。


## cp

copyの略称でしょう。
いうまでもなく、ファイルやディレクトリをコピーするコマンドです。

先方の環境が古かったりなんだったりで、
sshで接続してデプロイせねばならない場合などに、
バックアップを取得する目的で使うことが多いです。

```console
$ cp test.txt test.txt_back
$ ls
test.txt  test.txt_back
```

という風にバックアップファイルを取得することができます。

ただ、上記の目的のような場合は、基本的にコピーしたいファイルやディレクトリがもともと持っている
読み書きの権限や所有者をそのまま取っておかないと「バックアップ」としての意味を
持たないことになっちゃうのですが、それを解決するのが-pオプションです。

```console
$ cp -p test.txt test.txt_back
```

このようにすれば、test.txtにもともと設定されている権限や所有者、その他タイムスタンプなどの
情報をそのままにコピーを取得できるので、cpを使うときは必須といっても全く過言ではないです。

また、バックアップファイルを取得する際は、日付なんかもファイル末尾につけておくと、
後々管理しやすかったりするかもしれませんが、そんなときは`date +%Y%m%d`をつければOK。

```console
$ cp -p test.txt test.txt_back`date +%Y%m%d`
$ ls
test.txt  test.txt_back20200414
```

という感じで、その日の日程をつけてくれます。

あと、ディレクトリをコピーしたい場合は、「-r」オプションでOKです。

```console
$ cp -r DIRECTORY MOVE_DIRECTORY
```


## ps

なんの略だか知りません。笑
Linux上で稼働中のプロセスを表示するコマンドです。

```console:実行結果
$ ps
 PID TTY           TIME CMD
1989 XXXXXXX    0:00.03 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server
```

auxオプションをつけると、より詳細かつ、より幅広いプロセスの情報を一覧することができていて、
実務上で使うのは、以下のコマンドです。

```console:実行結果
$ ps aux| grep hoge
USER               PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
hoge     2336   0.0  0.0  4268212    540 s001  R+    1:21AM   0:00.00 grep root
```


## grep

psコマンドの紹介中にちゃっかり出てきたこいつ、
ファイル中の文字列に対して正規表現を使って検索し表示するというコマンドです。

```console:実行イメージ
$ grep test DIRECTORY_NAME/*
```

上記のコマンドを打つと、DIRECTORY_NAMEというディレクトリ内にあるファイルの中身を検索し、
testという文言がある箇所がコンソールに表示されます。


## ssh

TeratermやPuTTyなどの便利な接続ツールがあるおかげであまりコマンドを打って
サーバーに接続するみたいなのってイメージとして減っているように思うのですが、
実際はどうなんでしょうか？

```console:実行結果
$ ssh hoge_server
hoge_server $
```

基本的にはパスワードやらの入力は必要だと思いますが、このコマンドを用いて他サーバに接続することが可能です。
また、~/.ssh/configというファイルの中にssh接続情報が格納されており、
ここにアレコレ記述することで、ssh接続の際の手間を削減することも可能です。

## chmod

Change Modeの略らしく、ファイルやディレクトリに与えられている権限の変更を行うコマンドです。

```console:実行結果
$ chmod 777 test.txt
```

777はあまり使わないようにも思いますが、
読み書き実行についての権限が変更できます。

先に紹介したlsコマンドの-lオプション付きでの実行により、
ここでいう権限も確認できるようになっています。

## chown

Change Ownerの略らしく、ファイルやディレクトリの所有者を変更するコマンドです。

大体はユーザーかrootなのかな？と思っていますが、
まぁこれらを変更するコマンドです。

```console:実行結果
$ chown root:root
```

ざっと思い出せる限りで書いてみました。

Linuxコマンドは数も多く、コマンドそれぞれのオプションも多いので、
覚えるのが大変！って思うかもしれません。。

なので、本番環境やプロジェクトのテスト環境ではなく、
完全にプロジェクトに影響のないローカル環境で
バチバチ動かしてみて、体で覚えていくと良いかなと思います。

これからもがんばります。笑