Linux備忘録

# はじめに

業務で使用したLinux関連を知識を備忘録として残します。
若干AWSコマンド系の知識もはいっています。
※随時更新予定

# AWS
```text:コマンド
■ aws cliバージョン確認
$ aws --version

■ aws cliクレデンシャル設定
$ aws configure
　# ~/.aws/configには、リージョンと出力形式
　# ~/.aws/credentialsには、アクセスキーIDとシークレットアクセスキー
  # --profileオプションを使用して名前付きプロファイルを設定可能
  # プロファイルを切り替えるはexport AWS_DEFAULT_PROFILE=<プロファイル名>
　# デフォルト以外のユーザでaws cliを実行する場合は--profileで指定
 

$ aws configure list 
 # 現在使用中の設定を確認

■ S3一覧表示
$ aws s3 ls
$ aws s3 ls s3://<バケット名>/<パス>

■ S3バケット作成
$ aws s3 mb s3://<バケット名>

■ S3コピー
$ aws s3 mb s3://<バケット名> <ローカルパス>
# 送信元　送信先の順で指定
# --dryrunオプションで実行前検証が可能
# --exculdeオプションで除外
# --includeオプションで指定パス内のファイルを全て再帰的に処理

■ S3コピー
$ aws s3 mb s3://<バケット名> <ローカルパス>
# 送信元　送信先の順で指定

■s3暗号化確認
$ aws s3api get-bucket-encryption --bucket <バケット名>

■ VM Import
$ aws ec2 import-image --profile <プロファイル名> --description "<説明>" --disk-containers file://<ファイル名(.json形式)>

■ SES Smtpエンドポイント疎通確認
$ telnet email-smtp.ap-northeast-1.amazonaws.com 587

■ SSM Agent log
$ tail -f /var/log/amazon/ssm/amazon-ssm-agent.log

■インスタンスが Xen ベースか Nitro ベース
$ aws ec2 describe-instance-types --instance-type instance_type --query "InstanceTypes[].Hypervisor"

■ ログファイルなしでcloudwatchlogsに文字列をput
$  aws logs put-log-events --log-group-name "Test" --log-stream-name "App1" --log-events timestamp=1461997171845,message='Hello CloudWatch'
　# 2回目以降はnextSequenceTokenの値を--sequence-tokenオプションで指定する必要がある

■ ユーザデータ確認
$ cat /var/lib/cloud/instance/user-data.txt

■ Extras Library
$ amazon-linux-extras (list)
　# 利用可能なトピック(ソフトウェア群を表示)
$ amazon-linux-extras install
　# トピックのアンインストールは現状不可
  # Amazon Linux 2023にはamazon-linux-extrasが入っていない
  # epel(コマンドによって追加できるリポジトリ)はamazonlinux2で追加可能
```

# PostgreSQL
```text:コマンド
■ psql
$ psql -h <ホスト名> -d <データベース名> -U <ユーザ名> -p 5432 

■ pg_dump
$ pg_dump -h <ホスト名> -d <データベース名> -U <ユーザ名> -p 5432 -Fc -f <ファイル名>

■ pg_restore
$ pg_restore -d <データベース名> -c
```

# メモリ、ディスク
```text:コマンド
■ 現在の全体ディスク使用量を確認
$ df -Th
　# T:各ファイルシステムの種類を合わせて表示
　# h:サイズに応じて読みやすい単位で表示

■ ディレクトリごとにディスク使用量を確認
$ du <ディレクトリ名>
　# duのみを指定した場合はカレントディレクトリの使用量

■ ブロックデバイス/ファイルシステム一覧表示
$ lsblk

■ パーティションサイズ拡張
$ growpart /dev/xvda <パーティション番号>

■ ファイルシステム拡張
$ resize2fs /dev/sdc1
　# 第二引数あり⇒サイズ指定
　# 第二引数なし⇒最大サイズまで拡大

■ ディスク容量負荷
$ stress -hdd <負荷値>
```

# ネットワーク
```text:コマンド
■ ip確認
$ ifconfig
$ ip addr show

■ ルーティング
$ route -v

■ ネットワークの経路を調べる
$ traceroute -n 8.8.8.8

■ iptablesの確認
$ iptables -nL

■ ルーティングテーブル
$ netstat -rn

■ 宛先のドメインに関する情報(ipアドレスのみ)
$ dig +short yahoo.co.jp
　# awsのサービスのURL形式はsns.ap-northeast-1.amazonaws.comのような形

■ PCIデバイスの情報を表示
$ lspci

■ NetworkManager
$ nmcli
　# c:コネクション
　# d:デバイス

■ NIC有効化/無効化
$ ifup/ifdown

■ SELinuxのモードを表示
$ getenforce

■ SELinuxのモードを一時的に変更
$ setenforce 

■ プロセスが利用しているポートを確認
$ lsof -i | grep <サービス名>

■ HTTPリクエストを実施し、内容を標準出力
$ curl <URL>
  # -o:レスポンスボディの出力先を指定する
  # -s:余計な出力をしない
  # -I:HTTPレスポンスヘッダーの取得

■ ポートスキャン
$ nmap <ホスト名>

■ ソケットの状態を表示する
$ ss -pantsu
　# p:ソケットを使ってるプロセスを表示させる
　# a:接続待ちを含めたすべてのソケットを表示する	
　# n:名前解決を行わない
　# t:TCPソケットを表示する
　# s:統計情報を表示する
　# u:UDPソケットを表示する
```

# CPU,OS
```text:コマンド
■ プロセス数を確認
$  ps auxfww
　# a:端末操作のプロセスを表示(他端末も含む)
  # u:CPUやメモリの使用率なども表示
  # x:現在、実行しているプロセスを表示
  # f:プロセスを階層で表示
  # w:出力幅を広げる。このオプションを 2 つ指定すると、幅の制限がなくなる

■ インストール済みrpmパッケージ表示
$ rpm -qa | grep hoge

■ centosバージョン確認
$ cat /etc/redhat-release

```

# サービス
```text:コマンド
■ サービスの設定リストの表示
$ chkconfig --list

■ アクティブなサービスをリストアップ
$ systemctl list-units --type=service
```
# アカウント/ログイン
```text:コマンド
■ ログインユーザ確認
$ w

■ 現在のユーザ名確認
$ whoami

■ 現在の所属グループ確認
$ group

■ historyコマンドに日時を追加
$ export HISTTIMEFORMAT="%F %T "
　# 再起動後に以前の表示に戻るため注意

■ リモート接続
$ ssh -i <秘密鍵> -l <user名> <host名>
　# user@hostの形でも可能

■ ユーザ一覧
$ cat /etc/passwd

■ パスワード情報
$ cat /etc/shadow
　# rootのみ読み込み可能

■ sudo可能なユーザの情報
$ cat /etc/sudoers
 # 例)piyota ALL=(akuma) /bin/ls 
  ⇒piyotaはakumaとしてlsコマンドが実行できる

■ パスワード変更
$ passwd
　# 引数なしで自身のパスワード変更
　# 引数ありで他のパスワード変更(rootのみ可能)


 
```

# TARコマンド
```text:コマンド
■ ファイル圧縮
$ tar -czvpf <アーカイブ名.tgz> <圧縮するファイル>
　# c:新しいアーカイブを作成
　# z:アーカイブをgzip形式で圧縮
　# v:処理内容を出力
  # 所有者などのファイル属性を保持
  # f:出力するアーカイブ名を指定


■ファイル展開
$ tar -xzvpf <アーカイブ.tgz>
　# x:アーカイブファイルを展開
  # z:gzip形式のアーカイブを展開
  # v:処理内容を出力
  # 所有者などのファイル属性を保持
  # f:出力するアーカイブ名を指定


■ファイル展開せずに中身を確認
$ tar -zvtf <アーカイブ.tgz>
  # z:gzip形式のアーカイブを展開(なくてもOK)
  # v:処理内容を出力
  # t:tarに含まれているファイルの一覧を表示
  # f:出力するアーカイブ名を指定
```

# YUM
```text:コマンド
■ パッケージ更新状況確認
$ yum check-update

■ インストール済パッケージ確認
$ yum list installed | grep <パッケージ名>

■ リポジトリ情報一覧表示
$ ls -l /etc/yum.repos.d

■ 有効化されているリポジトリ一覧表示
$ yum repolist
　# /etc/yum.repos.d以下のファイルでenable=1になっているものが出力

■ yumでインストールされたrpmファイル表示
$ ls -l /var/cache/yum/x86_64/7
```
# RPM
```text:コマンド
■ パッケージのインストール
$ rpm -ivh {パッケージ名}

■ パッケージのアップグレード
$ rpm -Uvh {パッケージ名}

■ パッケージのアンインストール
$ rpm -evh {パッケージ名}

■ インストールされているrpmパッケージを一覧表示
$  rpm -qa {パッケージ名}
```



# 検索
```text:コマンド
■ ファイル名に「○○」という文字列が含まれているファイルのリストを取得
$ find <検索対象フォルダのパス> -type f -name "*<検索したい文字列>*"

■ ファイルを開いた中身に、「○○」という文字列が含まれているファイルのリストを取得
$ grep <検索したい文字列> -rl <検索対象フォルダのパス>
　# -i:大文字小文字区別しない

```

# Apache
```text:コマンド
■ 設定ファイル構文チェック
$ apachectl configtest

■ 
$ 

```

# シェル、環境変数
```text:コマンド
■ 環境変数表示
$ printenv
　# export <シェル変数名>で環境変数追加
 
■ シェル変数表示
$ set
　# set | grep PS1でプロンプトの情報表示

■ 演算子
$ command1 && command2
　# command1が成功したらcommand2

$ command1 || command2
　# command1が失敗した場合command2を実行
 

```

# その他Tips
```text:コマンド
■ 適当な中身のファイルを作りたいとき
$ cat >> test.txt
<文字列入力>
ctrl + C

■ ログ出力
$ logger "<文字列>"
　# /var/log/messagesに出力

■ 元ファイルの情報を保持してコピー
$ cp -p <コピー元ファイル名>　<コピー先ファイル名>
　# -r 再帰的にコピー

■ 追記されるファイルの中身を確認
$ tail -f <ファイル名>
  # -n:出力する行数を指定
  # -v:ファイル名を常に表示

■ 文字列変換
$ sed -i s/<置換前>/<置換後>/g <ファイル名>
　# -i:ファイルを直接編集
　# s:置換前/置換後指定
　# g:ファイル内すべてを置換対象にする(gなしは先頭のみ)

■画面をきれいにする
$ clear

■ PATHを通す流れ
$ which <コマンド>
　⇒出力結果パス
$ echo $PATH
$ PATH=$PATH:<出力結果パス>
　# PATH= でシェル変数を削除してしまった場合はexitで入りなおせば元通り

■ コマンドの実行結果確認
$ echo $?
　# 成功の場合は「0」,失敗はそれ以外の数字
```



# ※追加用フォーマット
```text:コマンド
■ 
$ 

```

■グロブについて
https://pystyle.info/linux-glob-syntax/