Skip to content

Linux でよく使うコマンドのチートシート

よく使うコマンドのオプションをまとめておきます。 随時更新します。

Linux 初期化用スクリプト

Ubuntu 24.04

1
curl -sL https://raw.githubusercontent.com/sig9org/init-linux/master/init-ubuntu24.sh | bash -s

Ubuntu 22.04LTS

1
curl -sL https://raw.githubusercontent.com/sig9org/init-linux/master/init-ubuntu22.sh | bash -s

direnv

Python venv 環境を有効化する

1
python3 -m venv .venv
1
2
echo 'source .venv/bin/activate' > .envrc
direnv allow
1
python3 -m pip install --upgrade pip

direnv のインストール

1
2
curl -L https://github.com/direnv/direnv/releases/download/v2.31.0/direnv.linux-amd64 -o /usr/local/bin/direnv && \
chmod 755 /usr/local/bin/direnv

シェルへの Hook 設定

1
2
3
4
cat << 'EOF' >> ~/.bashrc
export EDITOR=vim
eval "$(direnv hook bash)"
EOF

asdf で頻繁に利用するコマンド

No. コマンド 説明
1 asdf plugin list all インストール可能なプラグイン一覧を表示する
2 asdf plugin add [PLUGIN] プラグインをインストールする
3 asdf list all [PLUGIN] インストール可能なバージョン一覧を表示する
4 asdf install [PLUGIN] プラグインが提供するバイナリのうち、最新バージョンをインストールする
5 asdf install [PLUGIN] [VERSION] プラグインが提供するバイナリのうち、指定バージョンをインストールする
6 asdf list [PLUGIN] インストール済みのバージョン一覧を表示する
7 asdf global [PLUGIN] [VERSION] システム全体で利用する PLUGIN のバージョンを指定する
8 asdf update asdf 自身をアップデートする
9 asdf plugin update --all インストール済みのプラグインを全てアップデートする

古い Linux カーネルを削除する

RHEL7 / CentOS7

1
package-cleanup --oldkernels --count=1 -y

RHEL8 / CentOS8 / RockyLinux8

1
dnf -y remove $(dnf repoquery --installonly --latest-limit=-1 -q)

もしくは下記を実行する。

1
dnf -y autoremove

展開 / 圧縮

ファイル形式 展開 圧縮
tar.gz tar zxvf ARCHIVE.tar.gz tar zcvf ARCHIVE.tar.gz DIRECTORY
tar.bz2 tar jxvf ARCHIVE.tar.bz2 tar jcvf ARCHIVE.tar.bz2 DIRECTORY
tar.xz tar Jxvf ARCHIVE.tar.xz tar Jcvf ARCHIVE.tar.xz DIRECTORY
tar tar xvf ARCHIVE.tar tar cvf ARCHIVE.tar DIRECTORY

テキスト / ファイルの操作

コメント行と空業務を除外して、ファイルの内容を表示する

1
grep -v -e '^\s*#' -e '^\s*$' [FILE]

ファイル中の文字列を置換する

1
sed -i -e "s/[BEFORE]/[AFTER]/g" [FILE]

ヒアドキュメントでファイルを新規作成する (sudo が不要な場合)

1
2
3
cat << EOF > [FILE]
[BODY]
EOF

ヒアドキュメントでファイルを新規作成する (変数を展開しない)

変数を展開したくない場合、開始キーワードをシングルクォート、またはダブルクォートで囲みます。 下記では開始キーワードである「EOF」をシングルクォートで囲んでいます。

1
2
3
cat << 'EOF' > [FILE]
[BODY]
EOF

ヒアドキュメントでファイルを新規作成する (sudo が必要な場合)

1
2
3
sudo tee [FILE] <<EOF
[BODY]
EOF

ヒアドキュメントでファイルに追記する

1
2
3
cat << EOF >> [FILE]
[BODY]
EOF

検証環境 初期構築手順

タイムゾーンを Asia/Tokyo (日本) にする

1
timedatectl set-timezone Asia/Tokyo

プロンプトを FQDN 表示にする

1
2
3
4
5
6
7
cat << 'EOF' > /etc/profile.d/prompt.sh
if [ `id -u` = 0 ]; then
    PS1="[\[\033[1;31m\]\u@\H\[\033[00m\] \W]\\$ "
else
    PS1="[\[\033[1;36m\]\u@\H\[\033[00m\] \W]\\$ "
fi
EOF

docker のインストール

1
2
3
4
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf install -y docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker

docker-compose のインストール

1
2
3
mkdir -p /usr/local/lib/docker/cli-plugins/
curl -SL https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose
chmod +x /usr/local/lib/docker/cli-plugins/docker-compose

Python3 のインストール

1
2
dnf install -y python39
alternatives --set python /usr/bin/python3.9

Python の venv 環境を作成する

1
2
3
4
5
mkdir sample
cd sample
python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip

sshd のタイムアウト時間をチューニングする

sshd は ClientAliveInterval で指定された秒数間隔と ClientAliveCountMax で指定された回数で Keepalive を行うそうです。 Amazon Linux2 のデフォルトでは 0 秒 x 3 回になっていた為、これをチューニングしておきます。

1
2
3
4
cat /etc/ssh/sshd_config | grep ClientAlive
sed -i -e "s/#ClientAliveInterval 0/ClientAliveInterval 60/g" /etc/ssh/sshd_config
sed -i -e "s/#ClientAliveCountMax 3/ClientAliveCountMax 60/g" /etc/ssh/sshd_config
cat /etc/ssh/sshd_config | grep ClientAlive

検証環境 バージョンアップ手順

パッケージアップデート。 新しいカーネルがあれば差し替える為、OS 再起動。

1
2
dnf -y update
reboot

古いカーネルがあれば削除。

1
dnf -y remove $(dnf repoquery --installonly --latest-limit=-1 -q)

pyenv 自体をアップデートした後、新しい Python の有無を確認。

1
2
3
cd ${PYENV_ROOT}
git pull
pyenv install --list

新しいバージョンがあれば (必要なら) インストール

1
pyenv install [VERSION]

ライブラリのアップデート。

1
pip install --upgrade pip setuptools

キャッシュや履歴を削除して電源オフ。 電源オフ後は再度、テンプレート化する。

1
2
3
dnf clean all
history -c
poweroff

apt / dnf / yum 比較表

No. 説明 CentOS7 (yum) CentOS8 (dnf) Debian (apt) Debian (apt-xxx)
1 インストール yum install [NAME] dnf install [NAME] apt install [NAME] apt-get install [NAME]
2 アンインストール yum remove [NAME] dnf remove [NAME] apt remove --purge [NAME] apt-get purge [NAME]
3 アップデートチェック yum check-update dnf check-update apt update apt-get update
4 アップデート yum update dnf update apt upgrade apt-get upgrade
5 ディストリビューションの更新 - - apt full-upgrade apt-get dist-upgrade
6 検索 yum search [NAME] dnf search [NAME] apt search apt-cache search [NAME]
7 インストール済みパッケージの表示 yum list installed dnf list installed apt list installed dpkg -l
8 利用可能パッケージの表示 yum list available dnf list available apt list --upgradable apt-cache dumpavail
9 パッケージの説明情報表示 yum info [NAME] dnf info [NAME] apt show [NAME] apt-cache show [NAME]
10 キャッシュの削除 yum clean all dnf clean all apt clean apt-get clean
11 ファイルが含まれるパッケージの表示 yum provides [FILE] dnf provides [FILE] dlocate [FILE] apt-file search [FILE]
12 パッケージに含まれるファイルの表示 rpm -ql [NAME] rpm -ql [NAME] dpkg -L [NAME] dpkg -L [NAME]

asdf

コマンド 説明
asdf update asdf 自身をアップデートする
asdf plugin list インストール済みのプラグイン一覧を表示する
asdf plugin list all インストール可能なプラグイン一覧を表示する
asdf list インストール済みのプラグイン・バージョンを表示する
asdf list [PLUGIN] インストール済みの NAME プラグイン・バージョンを表示する
asdf list all [PLUGIN] インストール可能な NAME プラグインのバージョン一覧を表示する
asdf plugin add [PLUGIN] NAME プラグインをインストールする
asdf plugin remove [PLUGIN] NAME プラグインをアンインストールする
asdf plugin update [PLUGIN] NAME プラグインをアップデートする
asdf plugin update --all インストール済みのプラグインを全てアップデートする
asdf install [PACKAGE] PACKAGE をインストールする
asdf install [PACKAGE] [VERSION] 指定バージョンの PACKAGE をインストールする
asdf uninstall [PACKAGE] [VERSION] 指定バージョンの PACKAGE をアンインストールする
asdf global [PACKAGE] [VERSION] システム全体で利用する PACKAGE のバージョンを指定する
asdf local [PACKAGE] [VERSION] 特定のディレクトリ配下のみで利用する PACKAGE のバージョンを指定する

firewall-cmd

No. コマンド 説明
1 systemctl start firewalld.service サービスを開始する
2 systemctl stop firewalld.service サービスを停止する
3 firewall-cmd --state 動作状態 (起動 or 停止) を表示する
4 firewall-cmd --reload 設定を読み込みなおす
5 firewall-cmd --get-active-zones 定義されているゾーンの一覧を表示する
6 firewall-cmd --get-default-zone デフォルトゾーンを表示する
7 firewall-cmd --set-default-zone=[ZONE] デフォルトゾーンを変更する
8 firewall-cmd --new-zone [ZONE] --permanent ゾーンを新規作成する
9 firewall-cmd --delete-zone [ZONE] --permanent ゾーンを削除する
10 firewall-cmd --list-all デフォルトゾーンの設定内容を表示する
11 firewall-cmd --list-all --zone[ZONE] 指定ゾーンの設定内容を表示する
12 firewall-cmd --list-all-zones 全ゾーンの設定内容を表示する
13 firewall-cmd --list-all --permanent デフォルトゾーンの設定内容を表示する (一時ルールは表示しない)
14 firewall-cmd --list-all --zone[ZONE] --permanent 指定ゾーンの設定内容を表示する (一時ルールは表示しない)
15 firewall-cmd --list-all-zones --permanent 全ゾーンの設定内容を表示する (一時ルールは表示しない)
16 firewall-cmd --get-services 登録可能なサービスを表示する
17 firewall-cmd --zone=[ZONE] --list-services 指定ゾーンで定義されたサービスを表示する
18 firewall-cmd --zone=[ZONE] --list-services --permanent 指定ゾーンで定義されたサービスを表示する (恒久的)
19 firewall-cmd --zone=[ZONE] --add-service=[SERVICE] 指定ゾーンへサービスを追加する
20 firewall-cmd --zone=[ZONE] --add-service=[SERVICE] --permanent 指定ゾーンへサービスを追加する (恒久的)
21 firewall-cmd --zone=[ZONE] --remove-service=[SERVICE] 指定ゾーンからサービスを削除する
22 firewall-cmd --zone=[ZONE] --remove-service=[SERVICE] --permanent 指定ゾーンからサービスを削除する (恒久的)
23 firewall-cmd --zone=[ZONE] --list-ports 指定ゾーンで定義されているポートを表示する
24 firewall-cmd --zone=[ZONE] --list-ports --permanent 指定ゾーンで定義されているポートを表示する (恒久的)
25 firewall-cmd --zone=[ZONE] --add-port=[PORT]/udp 指定ゾーンへ UDP ポートを追加する
26 firewall-cmd --zone=[ZONE] --add-port=[PORT]/udp --permanent 指定ゾーンへ UDP ポートを追加する (恒久的)
27 firewall-cmd --zone=[ZONE] --add-port=[PORT]/tcp 指定ゾーンへ TCP ポートを追加する
28 firewall-cmd --zone=[ZONE] --add-port=[PORT]/tcp --permanent 指定ゾーンへ TCP ポートを追加する (恒久的)
29 firewall-cmd --zone=[ZONE] --remove-port=[PORT]/udp 指定ゾーンから UDP ポートを削除する
30 firewall-cmd --zone=[ZONE] --remove-port=[PORT]/udp --permanent 指定ゾーンから UDP ポートを削除する (恒久的)
31 firewall-cmd --zone=[ZONE] --remove-port=[PORT]/tcp 指定ゾーンから TCP ポートを削除する
32 firewall-cmd --zone=[ZONE] --remove-port=[PORT]/tcp --permanent 指定ゾーンから TCP ポートを削除する (恒久的)
33 firewall-cmd --zone=[ZONE] --list-sources 指定ゾーンで定義されている IP アドレスを表示する
34 firewall-cmd --zone=[ZONE] --list-sources --permanent 指定ゾーンで定義されている IP アドレスを表示する (恒久的)
35 firewall-cmd --zone=[ZONE] --add-source=[NETWORK/MASK] 指定したゾーンに IP アドレスを追加する
36 firewall-cmd --zone=[ZONE] --add-source=[NETWORK/MASK] --permanent 指定したゾーンに IP アドレスを追加する (恒久的)
37 firewall-cmd --zone=[ZONE] --change-source=[NETWORK/MASK] 登録済み IP アドレスの所属ゾーンを変更する
38 firewall-cmd --zone=[ZONE] --change-source=[NETWORK/MASK] --permanent 登録済み IP アドレスの所属ゾーンを変更する (恒久的)
39 firewall-cmd --zone=[ZONE] --remove-source=[NETWORK/MASK] 指定したゾーンから IP アドレスを削除する
40 firewall-cmd --zone=[ZONE] --remove-source=[NETWORK/MASK] --permanent 指定したゾーンから IP アドレスを削除する (恒久的)
41 firewall-cmd --zone=[ZONE] --change-interface=[INTERFACE] インターフェイスの所属ゾーンを変更する
42 firewall-cmd --zone=[ZONE] --change-interface=[INTERFACE] --permanent インターフェイスの所属ゾーンを変更する (恒久的)

hostnamectl

No. コマンド 説明
1 hostnamectl status ホスト名を表示する
2 hostnamectl set-hostname [HOSTNAME] ホスト名を設定する

ip

No. コマンド 説明
1 ip address show IP アドレスを表示する
2 ip address add [NETWORK/MASK] dev {DEVICE] デバイスに IP アドレスを追加する
3 ip address del [NETWORK/MASK] dev {DEVICE] デバイスから IP アドレスを削除する
4 ip neigh show ARP テーブルを表示する
5 ip neigh add [IP] lladdr [MAC] dev [DEVICE] 静的 ARP エントリを追加する
6 ip neigh del [IP] dev [DEVICE] 静的 ARP エントリを削除する
7 ip -s link show インターフェイスの統計情報を表示する
8 ip link set [DEVICE] up デバイスをアップさせる
9 ip link set [DEVICE] down デバイスをダウンさせる
10 ip link set [DEVICE] promisc on デバイスでプロミスキャスモードを有効にする
11 ip link set [DEVICE] promisc off デバイスでプロミスキャスモードを無効にする
12 ip link set [DEVICE] mtu [SIZE] デバイスの MTU サイズを変更する
13 ip maddress show マルチキャストアドレスを表示する
14 ip route show ルーティングテーブルを表示する
15 ip route add [NETWORK/MASK] dev [DEVICE] 静的ルートを追加する
16 ip route add default via [NEXT-HOP] デフォルトルートを追加する

nmcli

No. コマンド 説明
1 nmcli device status デバイスの接続状態を表示する
2 nmcli device connect [DEVICE] デバイスを接続する
3 nmcli device disconnect [DEVICE] デバイスを切断する
4 nmcli connection modify [DEVICE] ipv4.addresses [NETWORK/MASK] デバイスに IPv4 アドレスを設定する
5 nmcli connection modify [DEVICE] ipv4.dns [DNS] デバイスに DNS サーバを設定する
6 nmcli connection modify [DEVICE] ipv4.gateway [GATEWAY] デバイスにデフォルトゲートウェイを設定する
7 nmcli connection modify [DEVICE] connection.autoconnect yes OS 起動時、デバイスが自動的に接続されるように設定する
8 nmcli general hostname [HOSTNAME] ホスト名を設定する

pip

No. コマンド 説明
1 pip -h ヘルプを表示する
2 pip list インストールする済みライブラリを表示する
3 pip install [NAME] ライブラリをインストールする
4 pip install [NAME]==[VERSION] バージョンを指定してライブラリをインストールする
5 pip install git+[URL] Git リポジトリから直接、ライブラリをインストールする
6 pip install -U [NAME] ライブラリをアップグレードする
7 pip freeze > requirements.txt インストールする済みライブラリをファイルにまとめる
8 pip install -r requirements.txt ファイルからまとめてライブラリをインストールする
9 pip uninstall [NAME] ライブラリをアンインストールする
10 pip search [NAME] PyPI で公開されているライブラリを検索する
11 pip -V pip 自体のバージョンを表示する
12 pip show [NAME] インストール済みライブラリの説明を表示する

pyenv

No. コマンド 説明
1 pyenv --help ヘルプを表示する
2 pyenv --version pyenv 自身のバージョンを表示する
3 pyenv update pyenv 自身を更新する
4 pyenv versions インストール済みの Python を表示。 現在、利用中の Python も確認可能
5 pyenv version 現在のディレクトリで有効な Python を表示する
6 pyenv rehash shim を再構築する
7 pyenv install --list インストール可能な Python の一覧表示する
8 pyenv install [VERSION] 指定バージョンの Python をインストールする
9 pyenv uninstall [VERSION] 指定バージョンの Python をアンインストールする
10 pyenv global [VERSION] 指定バージョンの Python へ切り替える
11 pyenv local [VERSION] 特定ディレクトリ内でのみ、指定バージョンの Python へ切り替える
12 pyenv which [VERSION] 指定バージョンの Python のフルパスを表示する

samba-tool

No. コマンド 説明
1 samba-tool user show [USER] ユーザの設定を表示する
2 samba-tool user add [USER] ユーザを追加する (CN=Users へ追加)
3 samba-tool user add [USER] --userou=[OU] OU へユーザを追加する
4 samba-tool user add [USER] --description=[DESCRIPTION] 説明文を付与し、ユーザを追加する
5 samba-tool user delete [USER] ユーザを削除する
6 samba-tool user enable [USER] ユーザを有効化する
7 samba-tool user disable [USER] ユーザを無効化する
8 samba-tool user move [USER] [CN/OU] ユーザを指定したコンテナ/OU へ移動する
9 samba-tool group add [GROUP] グループを追加する (CN=Users へ追加)
10 samba-tool group add [GROUP] --groupou=ou=[OU] OU へグループを追加する
11 samba-tool group addmembers [GROUP] [USER] グループにユーザを追加する
12 samba-tool user setpassword [USER] --newpassword=[PASSWORD] ユーザのパスワードを変更する
13 samba-tool user setexpiry [USER] --noexpiry ユーザのパスワードを無期限にする

ss

No. コマンド 説明
1 ss ソケットを表示する
2 ss -4 IPv4 ソケットだけを表示する
3 ss -6 IPv6 ソケットだけを表示する
4 ss -t TCP ソケットだけを表示する
5 ss -u UDP ソケットだけを表示する
6 ss -p ソケットを使用しているプロセスも表示する
7 ss -s ソケットの種類ごとに接続数を表示する
8 ss -n 名前解決を行わない

systemctl

No. コマンド 説明
1 systemctl start [SERVICE] サービスを起動する
2 systemctl stop [SERVICE] サービスを停止する
3 systemctl restart [SERVICE] サービスを再起動する
4 systemctl try-restart [SERVICE] サービスが実行中の場合のみ、再起動する
5 systemctl reload [SERVICE] 設定を再読み込みする
6 systemctl status [SERVICE] サービスの状態 (起動中 or 停止中等) を表示する
7 systemctl list-units --type service --all すべてのサービスのステータスを表示する
8 systemctl enable [SERVICE] サービスを有効にする
9 systemctl disable [SERVICE] サービスを無効にする
10 systemctl is-enabled [SERVICE] サービスが「有効」または「無効」かを表示する
11 systemctl list-dependencies --after [SERVICE] 指定されたユニットの前に開始するサービスを表示する
12 systemctl list-dependencies --before [SERVICE] 指定されたユニットの後に開始するサービスを表示する
13 systemctl daemon-reload 追加・変更されたユニット設定の内容を読み込む

timedatectl

No. コマンド 説明
1 timedatectl システムクロック、ハードウェアクロック、NTP サーバの設定を表示する。
2 systemctl restart systemd-timedated.service chrony / ntpd の設定変更を timedatectl へ即座に反映する
3 timedatectl set-time HH:MM:SS 時刻を設定する (システムクロック&ハードウェアクロックの両方)
4 timedatectl set-time YYYY-MM-DD 年月日を設定する
5 timedatectl list-timezones 利用可能なタイムゾーンを表示する (日本なら Asia/Tokyo が一般的)
6 timedatectl set-timezone [TIMEZONE] タイムゾーンを変更する

ufw

No. コマンド 説明
1 ufw allow [PORT]/udp UDP ルールの追加
2 ufw allow [PORT]/tcp TCP ルールの追加
3 ufw delete [RULE-NUMBER] ルールの削除 (行番号指定)
4 ufw default allow 受信トラフィックのデフォルト許可
5 ufw default deny 受信トラフィックのデフォルト拒否
6 ufw enable ファイアウォールの有効化
7 ufw disable ファイアウォールの無効化
8 ufw status ルールの表示
9 ufw status verbose ルールの表示 (詳細)
10 ufw status numbered ルールの表示 (行番号付き)
11 ufw status verbose numbered ルールの表示 (詳細&行番号付き)
12 ufw reload 設定ファイルの再読み込み
13 ufw reset 設定初期化 (ルール全削除&ufw 無効化)

youtube-dl

No. コマンド 説明
1 youtube-dl URL 動画をダウンロードする
2 youtube-dl -x --audio-format mp3 URL 音声トラックのみ、MP3 形式でダウンロードする