Linux コマンド辞典

Linux コースで使えるコマンドの一覧です。RHEL 9・Amazon Linux 2023 での使い方を基準にしています。

basename / dirnameパスのファイル名部分・ディレクトリ部分いつでも使える

basename パス [拡張子]
dirname パス

パスから名前だけ、またはディレクトリだけを取り出します。

clear画面を消すいつでも使える

clear

画面をきれいにします(Ctrl+L でも同じ)。

help使い方の案内いつでも使える

help

このシミュレーターの使い方を表示します。

answer答えを提出(ゲーム用)いつでも使える

answer 答え

調べて分かった答えを提出します。本物の Linux にはないゲーム用のコマンドです。

$ answer 42

gitバージョン管理(記録の書)いつでも使える

git <サブコマンド> [オプション]
git help

ファイルの変更の歴史を記録します。サブコマンド(init・add・commit…)ごとに働きが違います。

git initリポジトリを作るいつでも使える

git init [ディレクトリ]
git init --bare パス

今のディレクトリに .git を作り、記録を始めます。--bare は作業ツリーのない共有用(リモート用)のリポジトリ。

$ git init

git status今の状態を見るいつでも使える

git status
git status -s

どのブランチにいるか、ステージした変更・まだの変更・追跡していないファイルが分かります。-s で短く(A 追加・M 変更・?? 未追跡)。

$ git status

git addステージに上げるいつでも使える

git add ファイル...
git add .
git add -A

次のコミットに入れる変更を選びます(ステージ)。. で今のディレクトリ以下すべて。

$ git add README.md
$ git add .

git commit記録するいつでも使える

git commit -m "メッセージ"
git commit -am "メッセージ"
git commit --amend [-m …] [--no-edit]

ステージした内容を 1 つのコミットとして記録します。-a は追跡中のファイルの変更を自動でステージ。--amend は直前のコミットを作り直します。

$ git commit -m "Add README"

git config設定するいつでも使える

git config --global user.name "名前"
git config --global user.email メール
git config --list
git config pull.rebase false

--global はすべてのリポジトリ、付けなければ今のリポジトリだけの設定。コミットに記録される名前とメールアドレスを最初に設定します。

git log / git show履歴を見るいつでも使える

git log [--oneline] [--graph] [--all] [-n 数]
git log --author=名前 --grep=語 -- ファイル
git show [コミット]
git show コミット:ファイル

新しい順にコミットを表示します。--oneline で 1 行ずつ、--graph で枝分かれ。show はコミットの中身(差分)を見ます。

$ git log --oneline --graph --all

git diff違いを見るいつでも使える

git diff
git diff --staged
git diff コミット コミット
git diff main..feature
git diff --stat

引数なしは作業ツリーとステージの違い、--staged はステージと最新コミットの違い。

$ git diff --staged

git restore変更を取り消すいつでも使える

git restore ファイル
git restore --staged ファイル
git restore --source=コミット ファイル

作業ツリーの変更を捨てて元に戻します。--staged はステージから下ろす(作業ツリーは残る)。

$ git restore --staged main.py

git rm / git mvファイルを消す・名前を変えるいつでも使える

git rm ファイル
git rm --cached ファイル
git mv 古い名前 新しい名前

--cached は追跡だけやめてファイルは残します(間違って追跡したファイルに)。

git branchブランチを作る・一覧いつでも使える

git branch
git branch 名前 [起点]
git branch -d 名前
git branch -m 新しい名前
git branch -a / -v / -vv / --merged

ブランチはコミットを指す名札です。-d はマージ済みのブランチを消し、-D は強制的に消します。

$ git branch feature

git switch / git checkoutブランチを切り替えるいつでも使える

git switch ブランチ
git switch -c 新しいブランチ [起点]
git switch -
git switch --detach コミット
git checkout ブランチ / -b 名前 / -- ファイル

HEAD(今いる場所)を移します。-c で作って移動、- で直前のブランチへ。

$ git switch -c feature/login

git mergeブランチを合わせるいつでも使える

git merge ブランチ
git merge --no-ff ブランチ
git merge --abort

相手のブランチの変更を今のブランチに取り込みます。一直線なら早送り(Fast-forward)、分かれていればマージコミット。コンフリクトしたら直して add と commit。

$ git merge feature

git tag目印をつけるいつでも使える

git tag 名前 [コミット]
git tag -a 名前 -m "メッセージ"
git tag -l "v1.*"
git tag -d 名前

リリースなどのコミットに名前をつけます。-a は作者とメッセージを持つ注釈付きタグ。

$ git tag -a v1.0 -m "First release"

git stash作業を一時しまういつでも使える

git stash [-u] [-m メモ]
git stash list
git stash pop / apply [stash@{n}]
git stash drop / show

まだコミットしたくない変更を一時的に退避して、作業ツリーをきれいにします。pop で戻して一覧からも消します。

$ git stash
$ git stash pop

git resetHEAD を戻すいつでも使える

git reset --soft コミット
git reset [--mixed] コミット
git reset --hard コミット
git reset ファイル

--soft は HEAD だけ、--mixed はステージも、--hard は作業ツリーまで戻します(--hard は変更が消える)。HEAD~1 は 1 つ前。

$ git reset --soft HEAD~2

git revert打ち消すコミットを作るいつでも使える

git revert コミット [--no-edit]

指定したコミットと逆の変更をする新しいコミットを作ります。共有済みの履歴を消さずに取り消せます。

$ git revert HEAD

git reflogHEAD の動きの記録いつでも使える

git reflog
git reset --hard HEAD@{n}

HEAD がどこを指してきたかの記録です。reset --hard で消えたように見えるコミットも、ここから探して戻せます。

git cherry-pickコミットを 1 つ取り込むいつでも使える

git cherry-pick コミット...
git cherry-pick --continue / --abort

別のブランチの特定のコミットだけを、今のブランチにコピーします。

git rebase土台を付け替えるいつでも使える

git rebase 土台のブランチ
git rebase --continue / --skip / --abort

今のブランチのコミットを、土台のブランチの先に付け直して一直線にします。共有済みのコミットの rebase は避けます。

$ git rebase main

git remoteリモートを管理するいつでも使える

git remote -v
git remote add 名前 URL
git remote remove 名前
git remote show origin

共有用のリポジトリ(リモート)の名前と場所。clone すると origin という名前で登録されます。

git cloneリポジトリを複製するいつでも使える

git clone URL [ディレクトリ]

リモートのリポジトリを手元に複製し、origin を登録して最初のブランチを取り出します。

git fetchリモートの変更を取ってくるいつでも使える

git fetch [リモート]
git fetch --all --prune

リモートの新しいコミットを取ってきて origin/main などを更新します。自分のブランチはまだ変わりません。

git pull取ってきて取り込むいつでも使える

git pull
git pull --rebase
git pull --no-rebase
git pull --ff-only

fetch してから、上流のブランチを今のブランチに merge(または rebase)します。分かれているときはどちらにするか指定が要ります。

git pushリモートに送るいつでも使える

git push
git push -u origin ブランチ
git push origin --delete ブランチ
git push --tags
git push --force-with-lease

手元のコミットをリモートに送ります。リモートに知らないコミットがあると rejected になるので、pull してから送ります。

$ git push -u origin feature

git blame行ごとに最後に変えた人いつでも使える

git blame ファイル

ファイルの各行を、最後に変更したコミット・作者・日時と一緒に表示します。

git bisectバグが入ったコミットを探すいつでも使える

git bisect start
git bisect bad [コミット]
git bisect good コミット
git bisect reset

良いコミットと悪いコミットの間を半分ずつ調べて、最初に悪くなったコミットを見つけます。

git clean追跡していないファイルを消すいつでも使える

git clean -n
git clean -f [-d] [-x]

-n で何が消えるかを確かめてから、-f で消します。-d はディレクトリも、-x は無視しているファイルも。

dockerコンテナを動かすいつでも使える

docker <サブコマンド> [オプション]
docker --version
docker --help

イメージからコンテナを作って動かします。サブコマンド(run・ps・build…)ごとに働きが違います。デーモン(docker サービス)が動いていて、docker グループに入っている必要があります。

docker version / infoDocker の状態を見るいつでも使える

docker version
docker info
docker --version

クライアントとサーバー(デーモン)のバージョン、コンテナ・イメージの数などを表示します。Server の部分が出なければデーモンにつながっていません。

$ docker version

docker runコンテナを作って動かすいつでも使える

docker run [オプション] イメージ [コマンド]
-d(裏で)--name 名前 -p ホスト:コンテナ -e KEY=値 -v 場所:パス
-it(入って操作)--rm(終わったら消す)--network ネット --restart 方針

イメージが手元になければ pull してから、新しいコンテナを作って起動します。イメージの後ろにコマンドを書くと CMD の代わりに実行します。

$ docker run -d --name web -p 8080:80 nginx
$ docker run --rm alpine echo hello
$ docker run -it ubuntu bash

docker psコンテナの一覧いつでも使える

docker ps
docker ps -a
docker ps -q
docker ps --format '{{.Names}} {{.Status}}'
docker port コンテナ

動いているコンテナを表示します。-a で止まったものも、-q で ID だけ。STATUS の Up は動作中、Exited (n) は終了コード n で止まった状態。

$ docker ps -a

docker stop / start / restart止める・動かすいつでも使える

docker stop コンテナ...
docker start コンテナ...
docker restart コンテナ
docker kill コンテナ

コンテナを止めても消えません(中のファイルも残る)。start で同じコンテナをもう一度動かします。

$ docker stop web
$ docker start web

docker logsコンテナの出力を見るいつでも使える

docker logs コンテナ
docker logs --tail 20 コンテナ
docker logs -t コンテナ

コンテナのプログラムが標準出力・標準エラーに出したものを表示します。動かないコンテナの原因探しの第一歩。

$ docker logs web

docker exec動いているコンテナで実行いつでも使える

docker exec コンテナ コマンド
docker exec -it コンテナ sh
docker exec -e KEY=値 -w ディレクトリ -u ユーザー コンテナ コマンド

動いているコンテナの中でコマンドを実行します。-it で中のシェルに入り、exit で戻ります(コンテナは動いたまま)。

$ docker exec -it web sh
$ docker exec web cat /etc/nginx/conf.d/default.conf

docker images / pullイメージの一覧・取得いつでも使える

docker images [名前]
docker pull イメージ[:タグ]
docker images -q
docker images -f dangling=true

手元にあるイメージを表示します。pull はレジストリからイメージを取ってきます。タグを書かないと latest。

$ docker pull nginx:alpine
$ docker images

docker rmコンテナを消すいつでも使える

docker rm コンテナ...
docker rm -f コンテナ
docker rm -v コンテナ
docker rm $(docker ps -aq)

止まっているコンテナを消します。-f は動いていても止めて消します。消すと中で変えたファイルもなくなります。

$ docker rm web

docker rmiイメージを消すいつでも使える

docker rmi イメージ...
docker rmi -f イメージ
docker image rm イメージ

イメージを消します。コンテナ(止まっているものも)が使っているイメージは消せません。

$ docker rmi nginx:alpine

docker build / historyイメージを作るいつでも使える

docker build -t 名前:タグ ディレクトリ
docker build -f ファイル --build-arg KEY=値 --no-cache --target ステージ .
docker history イメージ

Dockerfile の命令を上から実行してイメージを作ります。最後の . はビルドコンテキスト(COPY できるファイルの場所)。前と同じ命令はキャッシュ(CACHED)を使います。

$ docker build -t myapp:1.0 .
$ docker history myapp:1.0

docker tagイメージに別名をつけるいつでも使える

docker tag 元のイメージ 新しい名前:タグ

同じイメージに別の名前(タグ)をつけます。中身はコピーされません。レジストリに送るときは、レジストリの場所を名前の先頭につけます。

$ docker tag myapp:1.0 localhost:5000/myapp:1.0

docker inspect詳しい情報を見るいつでも使える

docker inspect 名前
docker inspect -f '{{.State.Status}}' コンテナ
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' コンテナ

コンテナ・イメージ・ネットワーク・ボリュームの設定と状態を JSON で表示します。-f で必要なところだけ取り出せます。

$ docker inspect -f '{{.State.ExitCode}}' web

docker volumeボリュームを管理するいつでも使える

docker volume create 名前
docker volume ls
docker volume inspect 名前
docker volume rm 名前
docker volume prune

ボリュームはコンテナを消しても残るデータの置き場所です。docker run -v 名前:パス でコンテナにつなぎます。

$ docker volume create pgdata

docker cpファイルをコピーするいつでも使える

docker cp コンテナ:パス ホストのパス
docker cp ホストのパス コンテナ:パス

コンテナとホストの間でファイルをコピーします。止まっているコンテナからも取り出せます。

$ docker cp web:/etc/nginx/nginx.conf .

docker networkネットワークを管理するいつでも使える

docker network create 名前
docker network ls
docker network inspect 名前
docker network connect 名前 コンテナ
docker network rm 名前

同じユーザー定義ネットワークにつないだコンテナは、コンテナ名で互いを呼べます(既定の bridge では名前で呼べない)。

$ docker network create appnet
$ docker run -d --name db --network appnet redis

docker composeまとめて動かすいつでも使える

docker compose up -d [--build]
docker compose ps / logs [サービス]
docker compose exec サービス コマンド
docker compose down [-v]
docker compose config

compose.yaml に書いた複数のコンテナ(サービス)・ネットワーク・ボリュームを、まとめて作って動かします。サービス名で互いを呼べます。

$ docker compose up -d
$ docker compose down

docker pushレジストリに送るいつでも使える

docker push レジストリ/名前:タグ
docker pull レジストリ/名前:タグ

イメージをレジストリ(イメージの倉庫)に送ります。このシミュレーターでは、registry コンテナを localhost:5000 で動かして使います。

$ docker push localhost:5000/myapp:1.0

docker system / prune片付けるいつでも使える

docker system df
docker container prune -f
docker image prune [-a] -f
docker volume prune -f
docker system prune [-a] [--volumes] -f

使っていないコンテナ・イメージ・ネットワーク・ボリュームをまとめて消します。-f を付けないと確認を求められます。df で使っている容量を確かめます。

$ docker system df
$ docker image prune -f

コンテナの中のコマンドapk・apt-get・pip・npm・psql・redis-cli などいつでも使える

apk add --no-cache パッケージ
apt-get update && apt-get install -y パッケージ
pip install -r requirements.txt
npm install / npm run ビルド
redis-cli SET key value
psql -U postgres -c "SQL"

コンテナ(や Dockerfile の RUN)の中で使うコマンドです。イメージに入っているものだけ使えます(alpine に bash や curl は入っていないので apk add で入れます)。

[ ] / test / [[ ]]条件を調べるいつでも使える

[ "$a" -eq 1 ]
[ -f ファイル ]
[[ $s == *.log ]]
[[ $s =~ 正規表現 ]]

数値は -eq -ne -lt -le -gt -ge、文字列は = != -z(空)-n(空でない)、ファイルは -e -f -d -r -w -x -s。[[ ]] では == がパターン一致、=~ が正規表現、&& || が使えます。結果は終了コード(0 が真)。

$ [ -d /tmp ] && echo yes
$ [[ $name == a* ]] && echo match

seq数の並びを出すいつでも使える

seq 終わり
seq 始め 終わり
seq 始め 増分 終わり
seq -s 区切り … / seq -w …

1 行に 1 つずつ数を出します。-s で区切り、-w で桁をそろえます。{1..10} のブレース展開でも同じことができます。

$ seq 5
$ seq -s, 1 3

if条件で分けるいつでも使える

if 条件; then …; elif 条件; then …; else …; fi

条件のコマンドの終了コードが 0 なら then を実行します。条件には [ ]、[[ ]]、(( ))、grep -q などのコマンドを書けます。

$ if [ $# -lt 1 ]; then echo usage; exit 1; fi

forくり返すいつでも使える

for 変数 in 値...; do …; done
for ((i=0; i<n; i++)); do …; done

値を 1 つずつ変数に入れてくり返します。in を省くと引数("$@")を順に。break で抜け、continue で次へ。

$ for f in *.log; do wc -l "$f"; done
$ for i in $(seq 3); do echo $i; done

while / until条件のあいだくり返すいつでも使える

while 条件; do …; done
until 条件; do …; done
while read -r line; do …; done < ファイル

条件が真のあいだ(until は偽のあいだ)くり返します。while read でファイルを 1 行ずつ処理するのが定番です。

$ i=0; while [ $i -lt 3 ]; do i=$((i+1)); done

read1 行読んで変数に入れるいつでも使える

read 変数...
IFS=区切り read -r a b
read -a 配列

標準入力から 1 行読みます。変数が複数なら空白(IFS)で分け、最後の変数に残り全部。-r でバックスラッシュをそのまま。読めないと終了コード 1。

$ while IFS=, read -r name age; do echo "$name"; done < users.csv

caseパターンで分けるいつでも使える

case 語 in パターン) …;; パターン|パターン) …;; *) …;; esac

語に合う最初のパターンの処理を実行します。パターンは * ? [ ] のワイルドカードと | の「または」。

$ case "$1" in start) echo start;; *) echo usage;; esac

$(( )) / (( )) / let / expr整数の計算いつでも使える

$(( 式 ))
(( 式 ))
let 変数=式

+ - * / %(割り算は整数)、** べき乗、++ --、比較 == < >、&& ||、三項演算子 ? :。(( )) は結果が 0 以外なら真。変数は $ なしでも書けます。

$ echo $(( 7 / 2 ))
$ (( count++ ))
$ (( n > 10 )) && echo big

関数 name() { }処理に名前をつけるいつでも使える

name() { …; }
local 変数=値
return 終了コード

関数の中では引数が $1 $2 … $# になります。local で関数の中だけの変数。値を返すときは echo して $(name) で受け取ります。

$ greet() { echo "Hello, $1"; }; greet Taro

配列 / ${ } の展開値の並びと文字列の加工いつでも使える

arr=(a b c)  ${arr[0]}  "${arr[@]}"  ${#arr[@]}  arr+=(d)
${v#パターン} ${v##…} ${v%…} ${v%%…}
${v/a/b} ${v//a/b} ${v^^} ${v,,} ${v:位置:長さ} ${#v} ${v:-既定値}

配列は 0 番から。# は前から、% は後ろから取り除き(2 つ重ねると最長一致)。/ は置き換え、^^ は大文字、,, は小文字、:- は空のときの既定値。

$ f=/var/log/app.log; echo ${f##*/} ${f%.log}

break / continueくり返しを抜ける・次へいつでも使える

break [n]
continue [n]

for・while の中で使います。break でループを抜け、continue で次のくり返しへ進みます。

$1 $# $@ shiftスクリプトの引数いつでも使える

$0 $1 $2 … $# "$@"
shift [n]
set -- 値...

$0 はスクリプト名、$1 からが引数、$# は個数、"$@" は全部(1 つずつ別の語)。shift で 1 つずらします。終了コードは $? で見ます。

2 進数0 と 1 で数を表すいつでも使える

ビットの重み: 128 64 32 16 8 4 2 1
1 の桁の重みを足す: 1010 = 8 + 2 = 10

右の桁から 1・2・4・8… と重みが 2 倍になります。1 が立っている桁の重みを足すと 10 進数になります。8 ビットの最大は 11111111 = 255。

$ echo $((2#11000000))

10 進 → 2 進10 進数を 8 ビットに直すいつでも使える

大きい重みから引けるなら 1、引けないなら 0
8 桁に足りなければ左を 0 で埋める
2^n: 2 4 8 16 32 64 128 256 512 1024

200 なら 128 を引いて 72 → 64 を引いて 8 → 32 と 16 は引けない → 8 を引いて 0、で 11001000。2 で割った余りを下から並べる方法でも求められます。

$ echo $((2**10))

16 進数0〜9 と a〜f で数を表すいつでも使える

a=10 b=11 c=12 d=13 e=14 f=15
16 進 1 桁 = 4 ビット、2 桁 = 8 ビット(00〜ff)
MAC アドレス: 06:5a:3c:1e:8f:21(48 ビット)

4 ビットずつ区切ると、2 進数と 16 進数はすぐに行き来できます(1100 = c、1111 = f)。MAC アドレスや IPv6 アドレスは 16 進数で書きます。

$ printf '%x\n' 255
$ echo $((0xff))

IPv4 アドレス32 ビットの番地いつでも使える

8 ビット × 4 = 32 ビット
各オクテット 0〜255 をドットで区切る
192.168.1.10 = 11000000.10101000.00000001.00001010

IPv4 アドレスは 32 ビットの数です。8 ビットずつ 4 つ(オクテット)に分けて 10 進で書きます。256 以上の数はオクテットに入りません。

AND(論理積)両方 1 のときだけ 1いつでも使える

1 AND 1 = 1、それ以外は 0
OR: どちらかが 1 なら 1
$((a & b))  $((a | b))

マスクと AND を取ると、マスクが 1 のビットだけが残り、0 のビットは消えます。ネットワークアドレスはこの計算で求めます。

$ echo $((200 & 240))

サブネットマスクネットワーク部とホスト部の区切りいつでも使える

/24 = 255.255.255.0
/25 = .128  /26 = .192  /27 = .224  /28 = .240  /29 = .248  /30 = .252
左から 1 が続き、途中から 0 だけになる

プレフィックス長(/24 など)は、左から何ビットがネットワーク部かを表します。マスクは 1 が途切れずに並ぶ形だけが正しく、255.0.255.0 のような値は使えません。

ネットワークアドレスそのネットワークの先頭の番地いつでも使える

アドレス AND マスク
ブロックの大きさ = 256 - マスクの値(区切りのオクテット)
例: 192.168.1.100/26 → 192.168.1.64

ホスト部を全部 0 にしたアドレスです。区切りがオクテットの途中なら、ブロックの大きさ(/26 なら 64)の倍数に切り捨てます。CIDR 表記ではネットワークアドレス/プレフィックス長と書きます。

ブロードキャストそのネットワークの最後の番地いつでも使える

ホスト部を全部 1 にしたアドレス
次のネットワークアドレス - 1
最初のホスト = ネットワーク + 1、最後のホスト = ブロードキャスト - 1

ネットワーク内の全員に送るためのアドレスで、機器には付けられません。ネットワークアドレスとブロードキャストの間が、機器に付けられる範囲です。

ホスト数機器に付けられるアドレスの数いつでも使える

ホスト部 n ビット → アドレス 2^n 個
使えるホスト = 2^n - 2
/31 は 2 台(直結)、/32 は 1 台だけ

ネットワークアドレスとブロードキャストの 2 つは機器に付けられないので 2 を引きます。/24 は 254、/26 は 62、/30 は 2。

ipcalcネットワークを計算して表示いつでも使える

ipcalc アドレス/プレフィックス
ipcalc アドレス マスク
-n ネットワーク -b ブロードキャスト -p プレフィックス -m マスク
-S プレフィックス(分割)  -d 開始-終了(CIDR に直す)

ipcalc パッケージ(dnf install ipcalc)のコマンドです。Network・Netmask・Broadcast・HostMin・HostMax・Hosts/Net を表示します。IPv6 も計算できます。

$ ipcalc 192.168.1.10/24
$ ipcalc -n -b 10.0.0.77/27
$ ipcalc -S 26 192.168.1.0/24

アドレスの種類プライベート・グローバル・特別な範囲いつでも使える

10.0.0.0/8  172.16.0.0/12  192.168.0.0/16(プライベート)
127.0.0.0/8 ループバック  169.254.0.0/16 リンクローカル  100.64.0.0/10 CGNAT
クラス A 0〜127  B 128〜191  C 192〜223  D 224〜239(マルチキャスト)

プライベートアドレスは組織の中で自由に使え、インターネットには直接出られません。クラスは昔の区切り方で、今は CIDR で好きな長さに区切ります。

サブネット分割1 つのネットワークを等しく分けるいつでも使える

n ビット借りると 2^n 個に分かれる
/24 → /26 は 2 ビット借りて 4 個(64 ずつ)
k 番目(0 から)= 先頭 + k × ブロックの大きさ

プレフィックス長を伸ばすと、ネットワークが細かく分かれます。1 つあたりのアドレス数は半分ずつになります。

$ ipcalc -S 26 192.168.1.0/24

大きさの決め方必要な台数からプレフィックスを決めるいつでも使える

2^n - 2 ≥ 必要な台数 になる最小の n
プレフィックス = 32 - n
例: 50 台 → n = 6(62 台)→ /26

必要なホスト数を入れられる最小のホスト部のビット数を探します。将来の増加も考えて少し余裕を持たせるのが実務のやり方です。

VLSM大きさの違うサブネットに分けるいつでも使える

大きいものから順に割り当てる
それぞれのブロックの大きさの倍数から始める
ルーター間のリンクは /30(または /31)

部署ごとに必要な台数が違うとき、全部を同じ大きさにせず、必要な分だけの大きさで分けます。大きい順に並べると隙間ができません。

VPC のサブネットAWS の町割りいつでも使える

VPC は /16〜/28、サブネットは VPC の範囲の中
AWS は各サブネットで 5 つ予約する(先頭 4 つと最後)
使えるアドレス = 2^n - 5

AWS ではネットワークアドレス・+1(VPC ルーター)・+2(DNS)・+3(予約)・ブロードキャストの 5 つが使えません。/24 なら 251 個です。AZ ごとにパブリックとプライベートのサブネットを作るのが定番です。

ゲートウェイと経路別のネットワークへの出口いつでも使える

ip route(経路表を見る)
sudo ip route add 宛先/長さ via ゲートウェイ
sudo ip route add default via ゲートウェイ
ゲートウェイは自分と同じネットワークに置く

自分のネットワークの外へは、経路表に書かれたゲートウェイ(ルーター)に渡します。どの経路にも当てはまらない宛先は default の経路を使います。

$ ip route
$ sudo ip route add 10.0.2.0/24 via 10.0.1.254

traceroute宛先までの通り道を表示いつでも使える

traceroute ホスト

パケットが通るルーターを順に表示します。* * * はその先から返事がないことを表します。traceroute パッケージに入っています。

$ traceroute 10.0.2.10

ロンゲストマッチいちばん長く一致する経路を選ぶいつでも使える

宛先に一致する経路のうち、プレフィックスがいちばん長いもの
default(0.0.0.0/0)は何にでも一致するがいちばん短い
ip route get 宛先(選ばれた経路を見る)

経路表に重なる経路があるとき、より詳しい(長い)経路が優先されます。

$ ip route get 10.0.2.10

経路集約連続したネットワークをまとめるいつでも使える

共通する先頭のビット数が新しいプレフィックス
192.168.0.0/24 〜 192.168.3.0/24 → 192.168.0.0/22
まとめた範囲の先頭がブロックの境界であること

ルーターの経路の数を減らすために、隣り合ったネットワークを 1 つの大きな範囲で表します。まとめすぎると持っていない範囲まで含んでしまいます。

$ ipcalc -d 10.0.0.0-10.0.3.255

ワイルドカードマスクサブネットマスクの裏返しいつでも使える

ワイルドカード = 255.255.255.255 - マスク
/24 → 0.0.0.255  /26 → 0.0.0.63
0 のビットは一致させる、1 のビットは問わない

Cisco の ACL や OSPF の network 文で使います。host 10.0.0.1 は 10.0.0.1 0.0.0.0、any は 0.0.0.0 255.255.255.255 と同じです。

範囲の重なりCIDR に入るか・重なるかいつでも使える

アドレス AND マスク = ネットワークアドレス なら範囲に入る
2 つの範囲は、小さい方のネットワークが大きい方に入れば重なる
0.0.0.0/0 はすべて、/32 は 1 つだけ

CIDR の範囲は、重なるときは必ず片方がもう片方を含みます。VPC ピアリングでは範囲が重なる VPC どうしはつなげません。

IPv6 アドレス128 ビットの番地いつでも使える

16 ビット × 8 = 128 ビット
各グループを 16 進 4 桁で書き、: で区切る
2001:0db8:0000:0000:0000:0000:0000:0001

IPv6 のアドレスは 2^128 個あります。ブロードキャストは無く、マルチキャストを使います。ip -6 addr で見られます。

$ ip -6 addr

IPv6 の省略短く書くルールいつでも使える

各グループの先頭の 0 を省く(0db8 → db8)
0 のグループが 2 つ以上続くところを 1 回だけ :: にする
いちばん長い 0 の並びを省く・同じ長さなら前の方・小文字で書く

省略の書き方は RFC 5952 で 1 通りに決まっています。:: を 2 回使うと、何グループ省いたか分からなくなるので誤りです。

$ ipcalc 2001:db8:0:0:1:0:0:1/64

IPv6 のプレフィックス/48・/56・/64 の区切りいつでも使える

ふつうの LAN は /64(前半 64 ビットがネットワーク)
/48 から作れる /64 は 2^16 = 65536 個
/64 の 4 つ目のグループがサブネットの番号になる

IPv6 ではサブネットは基本的に /64 です。組織には /48 や /56 が割り当てられ、その中の /64 を順に使います。

IPv6 の種類と EUI-64先頭で種類が分かるいつでも使える

::1 ループバック  fe80::/10 リンクローカル  ff00::/8 マルチキャスト
2000::/3 グローバル  fc00::/7 ユニークローカル  2001:db8::/32 説明用
EUI-64: MAC の真ん中に fffe を挟み、先頭バイトの 7 ビット目(0x02)を反転

リンクローカルはどの NIC にも自動で付き、同じ線の中だけで使います。EUI-64 では MAC アドレス 06:5a:3c:1e:8f:21 から 045a:3cff:fe1e:8f21 というインターフェイス ID ができます。

$ ip -6 addr

awsAWS を操作するいつでも使える

aws <サービス> <操作> [--パラメータ 値 ...]
aws --version
aws help / aws ec2 help

AWS CLI v2。Amazon Linux 2023 には最初から入っています。サービス(ec2・s3・iam…)と操作(describe-instances など)を並べて使います。終了コードは 0 成功、252 書き方の誤り、253 設定・認証、254 AWS からのエラー。

$ aws --version

aws sts誰として操作しているかいつでも使える

aws sts get-caller-identity

今の認証情報が、どのアカウントのどのユーザー(ロール)かを表示します。権限が無くても必ず使えるので、設定の確認に最初に打つコマンドです。

$ aws sts get-caller-identity

aws configure認証情報と既定値を設定いつでも使える

aws configure(4 つの質問に答える)
aws configure --profile 名前
aws configure set region ap-northeast-1
aws configure get region / list / list-profiles

アクセスキー・シークレットキー・リージョン・出力形式を ~/.aws/credentials と ~/.aws/config に書きます。Enter だけ押すと今の値のまま。

$ aws configure
$ aws configure list

--regionリージョンを選ぶいつでも使える

--region ap-northeast-1
export AWS_REGION=us-east-1
aws configure set region …

EC2 や CloudWatch Logs のリソースはリージョンごとに別々です。--region、環境変数 AWS_REGION / AWS_DEFAULT_REGION、設定ファイルの順で決まります。IAM はリージョンに関係しません。

$ aws ec2 describe-availability-zones --region us-east-1

--output出力の形を選ぶいつでも使える

--output json(既定)| text | table | yaml

json は機械向け、text はタブ区切りでシェルと相性がよく、table は人が読みやすい表です。aws configure set output text で既定を変えられます。

$ aws ec2 describe-vpcs --output table

--profile複数の認証情報を使い分けるいつでも使える

aws configure --profile dev
aws s3 ls --profile dev
export AWS_PROFILE=dev

~/.aws/credentials の [dev]、~/.aws/config の [profile dev] が 1 つのプロファイルです。本番と開発のように、アカウントや権限ごとに分けて使います。

$ aws configure list-profiles

aws s3S3 をファイルのように扱ういつでも使える

aws s3 ls [s3://バケット/接頭辞]
aws s3 mb / rb s3://バケット
aws s3 cp 元 先 [--recursive]
aws s3 sync 元 先 [--delete] [--exclude パターン]
aws s3 mv / rm
aws s3 presign s3://バケット/キー --expires-in 秒

高レベルのコマンド。ローカルのパスと s3://バケット/キー の間でコピーします。フォルダのように見える部分(PRE)は、キーの / までの接頭辞です。

$ aws s3 cp index.html s3://my-site/
$ aws s3 sync ./site s3://my-site --delete

aws s3apiS3 の API をそのまま呼ぶいつでも使える

aws s3api create-bucket --bucket 名前 --create-bucket-configuration LocationConstraint=リージョン
aws s3api list-objects-v2 --bucket 名前 [--prefix p]
aws s3api put-bucket-versioning / put-public-access-block / put-bucket-policy

バケットの設定(バージョニング・公開・ポリシー・タグ)など、aws s3 ではできない操作をします。出力は JSON です。

$ aws s3api get-bucket-versioning --bucket my-site

--query出力から必要なところだけ取り出すいつでも使える

--query 'Reservations[].Instances[].InstanceId'
--query 'Vpcs[0].VpcId' --output text
--query "Reservations[].Instances[?State.Name=='running'].InstanceId"
--query 'Reservations[].Instances[].{ID:InstanceId,Type:InstanceType}'

JMESPath という書き方で JSON を絞り込みます。[] で配列を広げ、[0] で 1 つ目、[?条件] で絞り込み、{名前:式} で形を作ります。手元で絞るので、AWS から返ってくる量は変わりません。

$ aws ec2 describe-instances --query 'Reservations[].Instances[].InstanceId' --output text

--filtersAWS の側で絞り込むいつでも使える

--filters Name=instance-state-name,Values=running
--filters Name=tag:Name,Values=web*
--filters Name=A,Values=x Name=B,Values=y(AND)

EC2 の describe-* で使います。条件は AWS 側で判定されるので、大量のリソースでも速いです。Values を複数書くと「どれか」、Name を複数書くと「全部」の条件です。

$ aws ec2 describe-instances --filters Name=tag:Env,Values=dev

aws ec2EC2 と VPC を操作するいつでも使える

aws ec2 describe-instances / run-instances / stop-instances / start-instances / terminate-instances
aws ec2 wait instance-running --instance-ids ID
aws ec2 create-vpc / create-subnet / create-security-group …

インスタンス・AMI・キーペア・セキュリティグループ・VPC・サブネット・インターネットゲートウェイ・経路表を扱います。--dry-run で権限だけ確かめられます。

$ aws ec2 describe-instances --output table

aws iamユーザーと権限を管理するいつでも使える

aws iam create-user / create-group / add-user-to-group
aws iam attach-user-policy --user-name 名前 --policy-arn ARN
aws iam create-policy --policy-name 名前 --policy-document file://p.json
aws iam create-role / create-instance-profile / add-role-to-instance-profile
aws iam create-access-key / update-access-key / delete-access-key

IAM はリージョンに関係なくアカウント全体で 1 つです。必要な権限だけを付ける(最小権限)のが基本です。

$ aws iam list-users --output table

aws logsCloudWatch Logs を読む・管理するいつでも使える

aws logs describe-log-groups
aws logs tail ロググループ --since 1h
aws logs filter-log-events --log-group-name 名前 --filter-pattern ERROR
aws logs put-retention-policy --log-group-name 名前 --retention-in-days 30

アプリやサーバーのログを集めておく場所です。ロググループの中にログストリームがあり、そこにイベント(1 行ずつのログ)が入ります。

$ aws logs tail /app/web --since 30m

pwd今いるディレクトリを表示Lv1 で覚える

pwd

カレントディレクトリ(作業中のディレクトリ)の絶対パスを表示します。

lsディレクトリの中身を一覧Lv1 で覚える

ls [-l] [-a] [-h] [-R] [-t] [-Z] [パス...]

-l 詳細、-a 隠しファイルも、-h サイズを読みやすく、-R 再帰、-t 更新順、-Z SELinux ラベル。

$ ls -la
$ ls -lh /var/log

cdディレクトリを移動Lv2 で覚える

cd [ディレクトリ]

引数なしでホームへ、cd - で直前のディレクトリへ、cd .. で 1 つ上へ移動します。

$ cd /var/log
$ cd ~
$ cd ..

catファイルの中身を表示Lv3 で覚える

cat [-n] ファイル...

ファイルを連結して表示します。-n で行番号付き。

$ cat /etc/os-release

less / moreファイルを表示(このシミュレーターでは全部表示)Lv5 で覚える

less ファイル

本来は画面送りで読むコマンド。ここでは cat と同じく全部表示します。

head先頭の行を表示Lv5 で覚える

head [-n 行数] ファイル

既定は 10 行。-n 5 または -5 で行数を指定します。

$ head -n 3 /etc/passwd

tail末尾の行を表示Lv5 で覚える

tail [-n 行数] ファイル

ログの最新部分を見るのに使います。-n +2 で 2 行目以降。

$ tail -n 20 /var/log/messages

mkdirディレクトリを作るLv6 で覚える

mkdir [-p] [-m モード] ディレクトリ...

-p で途中のディレクトリもまとめて作り、既にあってもエラーにしません。

$ mkdir -p app/{logs,data}

touch空のファイルを作る・更新日時を変えるLv6 で覚える

touch ファイル...

ファイルがなければ空で作り、あれば更新日時を今にします。

cpコピーLv7 で覚える

cp [-r] [-p] コピー元... コピー先

-r でディレクトリごと、-p で権限や日時を保ちます。コピー先の SELinux ラベルは場所に応じた新しいものになります。

$ cp httpd.conf httpd.conf.bak
$ cp -r site /var/www/html/

mv移動・名前の変更Lv7 で覚える

mv 移動元... 移動先

ファイルを移動、または名前を変えます。SELinux ラベルは移動元のまま引き継がれる点に注意。

$ mv old.txt new.txt

rm削除Lv8 で覚える

rm [-r] [-f] パス...

-r でディレクトリごと、-f で確認やエラーなし。消したら戻せません。

$ rm -rf /tmp/work

rmdir空のディレクトリを削除Lv8 で覚える

rmdir ディレクトリ

中身が空のディレクトリだけ削除できます。

echo / printf文字を表示Lv9 で覚える

echo [-n] [-e] 文字列...
printf 書式 引数...

文字列を表示します。> ファイル と組み合わせるとファイルに書けます。

$ echo hello > memo.txt
$ echo 'line' >> memo.txt

grepパターンに合う行を探すLv11 で覚える

grep [-i] [-v] [-n] [-c] [-r] [-E] [-o] パターン [ファイル...]

-i 大文字小文字を区別しない、-v 合わない行、-n 行番号、-c 件数、-r 再帰、-E 拡張正規表現、-o 合った部分だけ。

$ grep -i error /var/log/messages
$ grep -rn Listen /etc/httpd

find条件に合うファイルを探すLv12 で覚える

find [場所] [-name パターン] [-type f|d] [-size +100M] [-mtime +7] [-user 名前] [-exec コマンド {} \;]

名前・種類・サイズ・更新日・所有者で探せます。-delete や -exec で見つけたものに処理もできます。

$ find /var/log -name '*.log' -size +100M
$ find ~ -type f -name '*.bak' -delete

wc行数・単語数・バイト数を数えるLv13 で覚える

wc [-l] [-w] [-c] [ファイル]

-l で行数だけ。パイプと組み合わせて件数を数えます。

$ grep error app.log | wc -l

sort行を並べ替えるLv14 で覚える

sort [-n] [-r] [-u] [-k 列] [-t 区切り]

-n 数値順、-r 逆順、-u 重複を除く、-k 何列目で並べるか。

$ sort -nr counts.txt

uniq連続する重複行をまとめるLv14 で覚える

uniq [-c] [-d]

sort と組み合わせて使います。-c で回数付き。

$ sort access.log | uniq -c | sort -nr

cut列を切り出すLv15 で覚える

cut -d 区切り -f 列番号
cut -c 文字位置

区切り文字で分けた何列目かを取り出します。

$ cut -d: -f1 /etc/passwd

awk列を取り出す・集計するLv15 で覚える

awk [-F 区切り] 'パターン { 処理 }' [ファイル]

$1 $2 は列、$NF は最後の列、NR は行番号。{ count[$1]++ } のように集計もできます。

$ awk '{print $1}' access.log
$ awk -F: '$3 >= 1000 {print $1}' /etc/passwd

diff2 つのファイルの違いLv16 で覚える

diff ファイル1 ファイル2

< は 1 つ目だけ、> は 2 つ目だけにある行です。

sed文字列を置換・行を削除Lv16 で覚える

sed [-i] [-n] 's/前/後/g' [ファイル]
sed '/パターン/d'

-i でファイルを直接書き換えます。設定ファイルの一部を変えるときに便利。

$ sudo sed -i 's/^Listen 80$/Listen 8080/' /etc/httpd/conf/httpd.conf

tr文字を置き換える・消すLv17 で覚える

tr 置換元 置換先
tr -d 消す文字

標準入力の文字を変換します。

$ echo hello | tr a-z A-Z

tee画面とファイルの両方に出すLv17 で覚える

tee [-a] ファイル

パイプの途中で内容をファイルに保存します。sudo tee で root 権限のファイルに書けます。

$ echo 'Listen 8080' | sudo tee -a /etc/httpd/conf/httpd.conf

xargs入力をコマンドの引数にするLv17 で覚える

xargs [-I {}] コマンド

パイプで受け取った一覧を、別のコマンドの引数として渡します。

$ find . -name '*.tmp' | xargs rm

ln -sシンボリックリンクを作るLv18 で覚える

ln -s 参照先 リンク名

別の場所のファイルやディレクトリへのショートカットを作ります。

$ ln -s /var/www/html www

statファイルの詳しい情報Lv18 で覚える

stat ファイル

サイズ・権限(数値と記号)・所有者・SELinux ラベル・更新日時を表示します。

fileファイルの種類を判定Lv18 で覚える

file ファイル...

テキスト・ディレクトリ・圧縮ファイルなどの種類を表示します。

realpath / readlinkリンクを解決した本当のパスLv18 で覚える

realpath パス
readlink リンク

シンボリックリンクをたどった実際のパスを表示します。

history入力したコマンドの履歴Lv19 で覚える

history [件数]
!!(直前のコマンド)

sudo !! で直前のコマンドを sudo 付きでやり直せます。

export / env環境変数Lv19 で覚える

export 名前=値
env
echo $名前

env で一覧、echo $PATH のように参照します。

which / typeコマンドの場所Lv19 で覚える

which コマンド
type コマンド

コマンドの実体がどこにあるかを表示します。

manコマンドの説明Lv19 で覚える

man コマンド

このシミュレーターでは要点だけを表示します。

id / groupsユーザーとグループの情報Lv21 で覚える

id [ユーザー]
groups [ユーザー]

UID・GID・所属グループを表示します。

whoami今のユーザー名Lv21 で覚える

whoami

今どのユーザーとして操作しているかを表示します。

chmod権限を変えるLv22 で覚える

chmod 755 ファイル
chmod u+x,go-w ファイル
chmod -R モード ディレクトリ

r=4 w=2 x=1 を所有者・グループ・その他の順に足した数字、または u/g/o と +-= で指定します。

$ chmod +x deploy.sh
$ chmod 600 secret.key

bash / sourceシェルスクリプトを実行Lv22 で覚える

bash スクリプト
./スクリプト(実行権限が必要)
bash -c 'コマンド'

./ で実行するには chmod +x が必要です。

sudo / suroot などの権限で実行Lv23 で覚える

sudo コマンド
sudo -i
sudo -u ユーザー コマンド

wheel グループのユーザーが管理者権限で実行します。sudo -i で root のシェルへ、exit で戻ります。

$ sudo systemctl restart httpd
$ sudo -i

exitシェルを抜けるLv23 で覚える

exit

sudo -i や su で切り替えたシェルから元のユーザーに戻ります。

chown / chgrp所有者・グループを変えるLv24 で覚える

chown ユーザー[:グループ] パス
chgrp グループ パス

所有者の変更は root だけができます。-R で中身ごと。

$ sudo chown -R apache:apache /var/www/html/app

useraddユーザーを作るLv25 で覚える

useradd [-m] [-G グループ] [-s シェル] ユーザー

RHEL 系ではホームディレクトリも作られます。-G で追加のグループに所属させます。

$ sudo useradd -G wheel alice

passwdパスワードを設定Lv25 で覚える

echo 'パスワード' | sudo passwd --stdin ユーザー

--stdin は RHEL 系だけのオプションで、パイプからパスワードを受け取ります。

usermod / gpasswdユーザーの設定を変えるLv26 で覚える

usermod -aG グループ ユーザー
gpasswd -a ユーザー グループ

-a を付けずに -G だけだと、今のグループから外れてしまうので注意。

$ sudo usermod -aG wheel bob

groupadd / groupdelグループを作る・消すLv26 で覚える

groupadd グループ

共有用のグループなどを作ります。

userdelユーザーを削除Lv27 で覚える

userdel [-r] ユーザー

-r でホームディレクトリも削除します。

treeディレクトリを木の形で表示Lv29 で覚える

tree [-a] [-d] [-L 深さ] [ディレクトリ]

tree パッケージが必要です(dnf install -y tree)。

dnf / yumパッケージの管理Lv29 で覚える

dnf install -y パッケージ
dnf remove -y パッケージ
dnf list installed
dnf search 語
dnf provides コマンド

RHEL・Amazon Linux のパッケージ管理。-y で確認を省略します。yum は dnf の別名です。

$ sudo dnf install -y httpd
$ dnf provides dig

rpm -qインストール済みパッケージの問い合わせLv29 で覚える

rpm -qa
rpm -q パッケージ
rpm -ql パッケージ
rpm -qf ファイル

-qa 全部、-ql 含まれるファイル、-qf そのファイルがどのパッケージのものか。

systemctlサービスの起動・停止・自動起動Lv30 で覚える

systemctl start|stop|restart|reload|status サービス
systemctl enable|disable [--now] サービス
systemctl is-active|is-enabled サービス
systemctl list-units --type=service [--failed]

start は今すぐ起動、enable は再起動後も自動で起動。enable --now で両方。操作には sudo が必要です。

$ sudo systemctl enable --now httpd
$ systemctl status sshd

journalctlシステムのログを見るLv31 で覚える

journalctl [-u サービス] [-n 行数] [-p err] [-xe]

-u でサービスを絞り込み、-p err でエラー以上だけ、-xe で末尾を詳しく。

$ journalctl -u httpd -n 20
$ journalctl -p err

httpd / apachectlApache の設定を確認Lv32 で覚える

httpd -t
apachectl configtest

設定ファイルの文法をチェックします。Syntax OK なら起動・再読み込みしても安全です。

curlURL にアクセスLv32 で覚える

curl [-I] [-s] [-o ファイル] URL

Web サーバーの動作確認に使います。-I でヘッダーだけ、-o でファイルに保存。

$ curl http://localhost/
$ curl -I http://localhost:8080/

ipIP アドレス・経路を表示・設定Lv33 で覚える

ip addr(ip a)  ip -4 a  ip -6 a  ip -br a
ip route(ip r)  ip route get 宛先
sudo ip addr add|del アドレス/長さ dev NIC
sudo ip route add|del 宛先/長さ via ゲートウェイ
ip link(MAC アドレス)

ip a でインターフェースとアドレス、ip r で経路を表示します。設定の変更には root が必要です(再起動すると消えます)。

$ ip -br a
$ sudo ip addr add 192.168.10.5/24 dev ens5

ss待ち受け中のポートLv33 で覚える

ss -tlnp

-t TCP、-l 待ち受け、-n 数値表示、-p プロセス(root のみ)。netstat の後継です。

$ sudo ss -tlnp

ping疎通確認Lv33 で覚える

ping -c 回数 ホスト
ping -6 ホスト(IPv6)

相手に届くかを確かめます。-c で回数を指定(指定しないと止まらない)。Destination Host Unreachable は同じネットワークに相手がいない、Network is unreachable は経路が無い、100% packet loss は返事が戻ってこないことを表します。

$ ping -c 3 10.0.1.50

hostname / hostnamectlホスト名の表示・変更Lv33 で覚える

hostname
hostnamectl
sudo hostnamectl set-hostname 名前

hostnamectl set-hostname は再起動後も残ります。

dig / nslookup / hostDNS を引くLv33 で覚える

dig [+short] 名前

bind-utils パッケージに入っています。

psプロセスの一覧Lv34 で覚える

ps aux
ps -ef
ps aux --sort=-%cpu

動いているプログラムと PID・CPU 使用率を表示します。

top -b -n 1CPU を使っているプロセスLv34 で覚える

top -b -n 1

負荷の高いプロセスを上から表示します(ここでは 1 回だけ表示)。

kill / pkillプロセスを止めるLv34 で覚える

kill [-9] PID
pkill [-f] 名前

まず kill(SIGTERM)、止まらなければ kill -9(SIGKILL)。

pgrep名前で PID を探すLv34 で覚える

pgrep [-l] [-f] 名前

kill $(pgrep 名前) のように組み合わせます。

duディレクトリの使用量Lv35 で覚える

du [-s] [-h] [--max-depth=N] [パス]

-sh で合計だけを読みやすく。どこが容量を使っているか調べます。

$ sudo du -sh /var/log/*

df / lsblkディスクの空き容量Lv35 で覚える

df [-h]
lsblk

-h で読みやすい単位に。Use% が 100% に近いと危険です。

uptime稼働時間と負荷Lv35 で覚える

uptime

load average は直近 1・5・15 分の平均負荷です。

freeメモリの使用量Lv35 で覚える

free -h

available が実際に使える量の目安です。

unameカーネルの情報Lv35 で覚える

uname -r
uname -a

カーネルのバージョンやアーキテクチャを表示します。

viテキストエディタLv36 で覚える

vi ファイル
sudo vi ファイル

i で入力、Esc で戻る、:wq で保存して終了、:q! で保存せずに終了。Vim コースで覚えた操作がそのまま使えます。

crontab定期実行の設定Lv37 で覚える

crontab -l
crontab ファイル
(crontab -l; echo '0 3 * * * コマンド') | crontab -
crontab -r

分 時 日 月 曜日 コマンド の順に書きます。cronie パッケージと crond サービスが必要です。

$ echo '*/5 * * * * /home/ec2-user/check.sh' | crontab -

date日時を表示Lv38 で覚える

date [+書式]

date +%F で 2024-11-01 のような日付だけ。

timedatectlタイムゾーン・時刻の設定Lv38 で覚える

timedatectl
sudo timedatectl set-timezone Asia/Tokyo

サーバーのタイムゾーンを日本時間にするときに使います。

tarアーカイブの作成・展開Lv38 で覚える

tar czf 出力.tar.gz 対象...
tar xzf ファイル.tar.gz [-C 展開先]
tar tzf ファイル.tar.gz

c 作成、x 展開、t 一覧、z gzip 圧縮、f ファイル名、v 表示。

$ tar czf backup.tar.gz /etc/httpd

firewall-cmdファイアウォール(firewalld)の設定Lv40 で覚える

firewall-cmd --list-all
firewall-cmd --add-service=http [--permanent]
firewall-cmd --add-port=8080/tcp [--permanent]
firewall-cmd --reload

--permanent は設定ファイルにだけ書き、--reload で反映します。--permanent なしは今だけ(再起動で消える)。

$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --reload

getenforce / setenforce / sestatusSELinux のモードLv42 で覚える

getenforce
sudo setenforce 0|1
sestatus

Enforcing は拒否する、Permissive は記録だけ。setenforce は今だけで、恒久的な設定は /etc/selinux/config。

restorecon / chconSELinux のラベルを直すLv43 で覚える

sudo restorecon -Rv パス
sudo chcon -t タイプ パス

restorecon は場所に応じた正しいラベルに戻します。mv で持ってきたファイルによく使います。

$ sudo restorecon -Rv /var/www/html

semanageSELinux のポリシー設定Lv44 で覚える

sudo semanage port -a -t http_port_t -p tcp 番号
sudo semanage fcontext -a -t タイプ 'パス(/.*)?'
semanage port -l

Web サーバーに標準以外のポートを使わせるときや、独自の場所にラベルの規則を足すときに使います。

getsebool / setseboolSELinux のスイッチ(ブール値)Lv45 で覚える

getsebool -a
sudo setsebool -P 名前 on

httpd_can_network_connect など。-P で再起動後も残します。

nginx -tnginx の設定を確認Lv49 で覚える

nginx -t

設定ファイルの文法をチェックします。

sshd -tsshd の設定を確認Lv49 で覚える

sudo sshd -t

/etc/ssh/sshd_config の文法をチェックします。何も出なければ OK。