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}}' webdocker 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/passwddiff2 つのファイルの違い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。