たまに使うLinuxコマンドやスクリプトを随時メモしていく予定です。

ターミナルからログアウトしてもコマンドを動かし続ける

とても処理時間がかかる処理を実行する際に、ネットワークが切れたりして処理が停止するのを避けたいときに使います。

# nohupでhangupシグナルを無視し、バックグラウンドで実行させる
nohup コマンド &
nohup pg_dump -h localhost -p 5432 -U admin -Fc -f hoge.dmp hoge &

# ジョブの確認・停止・再開などは通常と同じ

バックグラウンド実行、フォアグラウンド実行

# バックグラウンドで実行する
コマンド &
sar 5 555 &
> [2] 9095
> Linux 5.4.0-1025-gcp (stg-scraper01)  2020年10月01日     _x86_64_    (2 CPU)

# 実行中のジョブをバックグラウンドに移動(この時点では停止状態になる)
sar 5 555
ctlr + z
> [1]+  Stopped                 sar 5 555

# 停止中のジョブをバックグラウンドで実行する
bg %1
> [1]+ sar 5 555 &

# ジョブをフォアグラウンドに移動
fg %1
> sar 5 555

# ジョブを確認する
jobs
> [1]+  Running                 sar 5 555 &

# ジョブを停止する
kill %1
kill -KILL %1

グローバルIPアドレスを取得

ifconfig en0 | grep inet | grep -v inet6 | sed -E "s/inet ([0-9]{1,3}.[0-9]{1,3}.[0-9].{1,3}.[0-9]{1,3}) .*$/\1/" | tr -d "\t"

# 出力結果
11.22.33.44

特定のポートを使っているプロセスを確認する

lsof -i:8080

# 出力結果
COMMAND   PID            USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
com.docke 123 hoge   26u  IPv4 0xc120a5f57fb38b6b      0t0  TCP *:http (LISTEN)

特定のホストの特定のポートが空いてるかどうかを確認する

telnet  {ホスト名} {ポート番号}
telnet hoge_host 5432

# 出力結果(この結果が返ってきたらOK)
Trying 11.22.33.44...
Connected to hoge_host.
Escape character is '^]'.

ネットワーク経路を確認する

traceroute -d google.com
# -d 得られた経路途中のIPについて、DNSの逆引きをしないので高速
# -I windows版のtracertと同じく、ICMP Echo Requestを用いる( FWの設定でこちらだけ穴が空いてる場合などはこっちを使ってみる)

# 出力結果
traceroute to google.com (216.58.197.174), 64 hops max, 52 byte packets
 1  192.168.0.1 (192.168.0.1)  2.305 ms  2.632 ms  2.423 ms
 2  xxx1.asahi-net.or.jp (124.155.80.1)  4.616 ms  6.747 ms  5.942 ms
 3  xxx2.asahi-net.or.jp (124.155.80.2)  5.057 ms  4.968 ms  5.707 ms
 4  xxx3.asahi-net.or.jp (124.155.80.3)  4.133 ms  4.804 ms  4.447 ms
 5  xxx4.asahi-net.or.jp (202.224.51.4)  7.835 ms  6.161 ms  6.117 ms
 6  xxx5.asahi-net.or.jp (202.224.51.5)  6.219 ms  8.218 ms  11.443 ms
 7  ebgp-google2.asahi-net.or.jp (202.224.35.93)  11.065 ms  6.074 ms  6.128 ms
 8  108.170.242.129 (108.170.242.129)  7.782 ms
    108.170.242.97 (108.170.242.97)  8.412 ms  5.692 ms
 9  216.239.62.27 (216.239.62.27)  5.975 ms  5.651 ms
    216.239.62.29 (216.239.62.29)  5.803 ms
10  nrt12s02-in-f14.1e100.net (216.58.197.174)  6.008 ms  5.727 ms  7.425 ms

SCPでファイル転送

# ファイルを送信する
scp <ファイルパス> <サーバ名>:<フォルダパス>
scp test.txt hoge_server:/tmp/

# ファイルを受信する
scp <サーバ名>:<ファイルパス> <フォルダパス>
scp hoge_server:/tmp/test.txt /tmp/

ディスク容量確認

# ファイルシステムの使用状況を確認する
df -h
  # -h human readable

# ディレクトリ別の使用量を確認する
du -ch
  # -c totalを出力
  # -h human readable

ユーザを作成する&削除する

# 作成
# -m homeディレクトリも作る
# -s 起動シェルを指定する
useradd -m -s '/bin/bash' {名前}

# 削除
# -r homeディレクトリを削除する
userdel -r {名前}

sudo 権限の設定

以下のコマンドでsudoersファイルの編集ができます。

sudo visudo

sudoersファイルでは、以下の形式で許可する権限を記載します。

# 誰が どのホストで=(誰として) 何をする
# 例1) rootユーザが、全てのホストで、全てのユーザとして、全てをすることを許可
root ALL=(ALL) ALL
# 例2) hogeユーザが、全てのホストで、fugaユーザとして、git cloneをすることを許可
hoge ALL=(fuga) /usr/bin/git clone *
# 例3) hogeユーザが、全てのホストで、fugaユーザとして、パスワードなしてgit cloneをすることを許可
hoge ALL=(fuga) NOPASSWD: /usr/bin/git clone *
# 例4) hogeユーザが、全てのホストで、fugaユーザとして、環境変数を引き継いで、bashを実行することを許可
#  利用例) sudo -Eu fuga sh -c ". env/bin/activate && python main.py"
hoge ALL=(fuga) SETENV: /bin/sh *

グループ指定、カンマでコマンド複数列挙、ワイルドカードについてなど、詳細は以下のブログがとてもわかりやすいので参照させていただきます。
https://qiita.com/progrhyme/items/6f936033b9d23efb1741

ssh keysの作成

ssh-keygen -t rsa

bashで二次元配列

readonly array=(
  "hoge1 fuga1"
  "hoge2 fuga2"
  "hoge3 fuga3"
)

for row in "${array[@]}"; do
  echo ${row}
done
> hoge1 fuga1
> hoge2 fuga2
> hoge3 fuga3

for row in "${array[@]}"; do
  data=(${row[@]})
  echo ${data[0]}
  echo ${data[1]}
done
> hoge1
> fuga1
> hoge2
> fuga2
> hoge3
> fuga3

リソース確認

## メモリ確認(freeコマンド)
free -ht
# -h human readable
# -t Mem + Swapの合計を出力
>               total        used        free      shared  buff/cache   available
> Mem:            25G         15G          9G        276K        196M        9.9G
> Swap:          2.0G        1.9G         91M
> Total:          27G         17G         10G

## 実行中プロセス確認(topコマンド)
top
# 起動中に以下のキーをタイプすることで表示を切り替えられる
  # h: ヘルプ表示
  # c: commandをfull pathにするかどうか
  # M: %MEMでソート(デフォルトは%CPUでソートされている)
  # m: メモリの表示切り替え
  # P: %CPUでソート
  # t: CPUの表示切り替え
  # 1: CPU状況をCPU別に表示
  # R: ソート順を逆にする
  # u: 指定したユーザでfilterリング
  # A: メインウィンドウ、PIDウィンドウ
  # F: フィールド一覧表示。上下で移動してスペースで選択できる
> top - 16:58:22 up  4:37,  1 user,  load average: 1.45, 1.35, 1.19
> Tasks: 145 total,   3 running,  87 sleeping,   0 stopped,   0 zombie
> %Cpu(s): 50.0 us,  0.0 sy,  0.0 ni, 49.5 id,  0.0 wa,  0.0 hi,  0.4 si,  0.0 st
> KiB Mem : 26747548 total,  6776520 free, 18885016 used,  1086012 buff/cache
> KiB Swap:  2097148 total,  2097148 free,        0 used.  7507508 avail Mem
> 
>   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
> 28606 hoge     20   0 14.852g 0.014t  36892 R 100.0 56.2   7:23.15 python
>  7357 hoge     20   0 3439648 869472  44460 R  65.3  3.3  51:17.60 python
>  2043 fuga   20   0 10.235g 2.859g  31108 S   2.0 11.2   5:31.34 java
>     7 root      20   0       0      0      0 S   0.3  0.0   0:00.13 ksoftirqd/0
> 15086 hoge     20   0   40288   3872   3132 R   0.3  0.0   0:00.11 top
>     1 root      20   0  225412   9216   6744 S   0.0  0.0   0:02.02 systemd

論理CPUコア数確認

grep processor /proc/cpuinfo | wc -l

tail -f の代わりにless +F を使う

less hoge_fuga.log

F : 大文字Fでtailモードに
ctrl + C: 通常モードに