【Linux】よく使うコマンドとオプション備忘録

# はじめに
現場でLinuxを使うことが多いのですが、よく忘れてしまうコマンドやオプションがあるので困ったときに見返せるようまとめておきます。
※基本的なコマンドの説明等は割愛しています。



# ls

`ls -t`：更新時間の新しい順に表示
`ls -r`：表示結果を逆順にする

`ls -lt`：(新しい順に表示)
`ls -ltr`：(古い順に表示)

下記のように使用すると、新しいファイルを10件取得できます。
`ls -lt | head`
`ls -ltr | tail`
取得したいファイルが最新ファイルだけの場合、そのままlsすると表示結果が多くなってしまうことがあるのでこのオプションを使用します。
`ls -lt | head -5` のように表示件数を指定することもできます（省略値は10）。




# mkdir

`mkdir -m`：パーミッションも同時に指定する
例：`mkdir -m 775 /dir1/dir2`

`mkdir -p`：必要に応じて上位ディレクトリも同時に作成する
例...　/home/user/ 配下にディレクトリがないとき、`mkdir -p /home/user/dir1/dir2` とすると、dir1もdir2と一緒に作成してくれる
※-pがない場合は上位ディレクトリがないためエラーが発生する


# シェルの実行

`sh test.sh`
`bash test.sh`
`source test.sh`
`./test.sh`
※sh / bash なしで実行する場合はディレクトリから指定する

それぞれのコマンドの違いについては説明できるほど理解ができていないため割愛します。代わりに参考になりそうなサイトを紹介しておきます。
[シェルスクリプトの実行方法4つの違いメモ【Linux】](https://penpen-dev.com/blog/shellscript-tigai/)

`sh -x`：実行コマンドを表示する
実行履歴をログに残したいとき、エラー箇所を特定したいときに有効。



# view
ls -l でファイルを確認すると
`-rwxrwxr-x.　3　root root 212 Jan 1 2023 test.txt`
のような表示が出ると思います。
このroot rootのあとの「212」の部分がファイルサイズです。
サイズの大きいファイルをうっかりcatしてしまうと、ctrl+Cを連打する羽目になったり、最悪一度ターミナルを閉じることになってしまいます。
そのようなときはcatではなくviewを使って、1画面ずつファイル内容を表示します。

`:q`：view画面から抜ける

# vi
`i`：編集モード
`ESC`：編集モードからコマンドモードに戻る
`:wq`：保存して終了
`:q!`：保存せずに終了


# cp
`cp -p`：パーミッション、所有者、タイムスタンプを保持してコピー
`cp -r`：サブディレクトリもコピーする
`cp -f`：強制コピー（重複する場合も警告なしで上書きコピーする）


# rm
`rm -i`：削除前に確認メッセージを表示（y/nで回答）
`rm -r`：ディレクトリを削除

# zip
`zip -r`：ディレクトリを圧縮

# find
`find ディレクトリ -type f -print`
ディレクトリ配下(サブディレクトリ含む)のファイル一覧出力
`-type d` に変えるとディレクトリ一覧を出力できる

# reset
バイナリファイルなどを開いてしまいターミナル上の文字が文字化けした際には、resetコマンドでリセットできます。
入力したコマンドも文字化けしてしまうことがありますが、そのまま実行してOKです。
参考：[Linux: 画面が文字化けしてしまった時にはRESETコマンド](https://qiita.com/frozencatpisces/items/89ef13a119653dac1441)


# crontab
`-l`：閲覧
`-e`：編集

`* * * * * 実行コマンド`で設定する。
・`*`の部分は左から順に「分」「時」「日」「月」「曜日」
・`*`を設定すると毎分/毎時などその単位ごとに実行される
・`*/n`のように書くとn分ごとなどの指定ができる

■使用例
`0/5 * * * * sh /home/user/test.sh`：5分おきにtest.shを実行
`0 21 * * sun sh /home/user/test.sh`：毎週日曜日の21時にtest.shを実行

# grep
`-v`：一致しないものを検索

# chmod / chown
`chown`：所有者の変更、<b>root権限/sudo権限が必要</b>
`chmod`：権限の変更、<b>所有者なら一般ユーザでも実行可(所有グループはNG)</b>

# curl
参考
[curlコマンドでPOSTする, 様々な形式別メモ](https://weblabo.oscasierra.net/curl-post/)
[知っておくとちょっと便利！curl コマンドの使い方をご紹介](https://tech-lab.sios.jp/archives/29999)
[curlの-dやら-Fやらがよく分からない](https://www.y-hakopro.com/entry/curl-post-options)
<br>
`-d`：POSTリクエストとしてフォームを送信
`-H "Content-Type: XXX"`：送信するデータ形式を明示
<br>

■使用例
`$ curl -X POST -H "Content-Type: application/json" -d '{"id","000", "name", "テストユーザ"} ' https://XXX `

■使用例2：ファイルを送りたい場合は@ファイル名を指定
`$ curl -X POST -H "Content-Type: application/json" -d '@request.json' https://XXX`

※`-H "Content-Type: application/json"`はあ送信するデータがJson形式であることを明示している



`-v`：コンテンツを取得した際の詳細なログ(レスポンスヘッダの内容やHTTPステータスコード等)を表示


`-X`：HTTPメソッド(GET POST PUTなど)の指定
`-H`：HTTPヘッダにHEADERを追加or変更

`-s`：進捗情報やエラーを非表示
`-s -S`：進捗情報を非表示、エラーは表示
<br>
■おまけ
`Note:Unnecessary use of -request, POST is already infreed.`
-dや-Fを指定した場合はデフォルトのHTTPリクエストメソッドがPOSTになるので、-X POSTの指定はしなくてよいという警告


# おまけ1：コマンドプロンプト操作
Windowsのコマンドプロンプトの基本的なコマンドです。
たまに使うのでおまけとしてメモしておきます。

`cd`：ディレクトリ移動
`dir`：ディレクトリ表示（Linuxのlsと同じ）
`@cd`：カレントディレクトリ表示（Linuxのpwdと同じ）


# おまけ2：psql関連
参考
[psqlを使ったPostgreSQLへの接続](https://www.javadrive.jp/postgresql/connect/)
[【PostgreSQL-0011】サーチパス(search_path)の設定](https://www.compiere-distribution-lab.net/postgresql-0011/)



接続
`psql -h ホスト名 -p ポート番号 -U ロール名 -d データベース名`

`¥d`：テーブル ビュー シーケンスの一覧表示
`¥dt`：テーブル一覧表示

SQL文も普通に流せます。
`SELECT * FROM test_table WHERE id = '001';`
<br>
サーチパス設定
`ALTER USER ユーザ名 search_path TO スキーマ名;`

<b>補足：サーチパスとは</b>
スキーマ検索パスのこと。スキーマ名の入力を省略できる。
`ALTER USER user0000 search_path TO sample;`
と設定した状態でuser0000が
`SELECT * FROM table;`
のようなSQLを実行すると、
`SELECT * FROM sample.table;`
として解釈される。



# 最後に
今回は現場でよく使うコマンドを一覧にしてまとめてみました！
Linuxには他にも便利なコマンドがたくさんあるので、使いこなせるように今後も頑張ります。

# 参考
記事内にも記載しましたが、改めて参考記事をまとめておきます。

・[シェルスクリプトの実行方法4つの違いメモ【Linux】](https://penpen-dev.com/blog/shellscript-tigai/)
・[Linux: 画面が文字化けしてしまった時にはRESETコマンド](https://qiita.com/frozencatpisces/items/89ef13a119653dac1441)
・[curlコマンドでPOSTする, 様々な形式別メモ](https://weblabo.oscasierra.net/curl-post/)
・[知っておくとちょっと便利！curl コマンドの使い方をご紹介](https://tech-lab.sios.jp/archives/29999)
・[curlの-dやら-Fやらがよく分からない](https://www.y-hakopro.com/entry/curl-post-options)
・[psqlを使ったPostgreSQLへの接続](https://www.javadrive.jp/postgresql/connect/)
・[【PostgreSQL-0011】サーチパス(search_path)の設定](https://www.compiere-distribution-lab.net/postgresql-0011/)