自分用Linuxコマンドリファレンス

今日以降「あれ?どうすんだっけ?」となったコマンドは全てココに記録する所存。

1. システム関連

1-1. バージョン確認

//AlmaLinux
$ cat /etc/almalinux-release
AlmaLinux release 9.1 (Lime Lynx)

//CentOS
$ cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)

//redhat系
$ cat /etc/redhat-release
AlmaLinux release 8.9 (Midnight Oncilla)
$ ll /etc/redhat-release
lrwxrwxrwx. 1 root root 17 11月 16  2023 /etc/redhat-release -> almalinux-release

1-2. メモリ確認

$ free -h
          total      used      free    shared  buff/cache   available
Mem:        62G      3.0G       55G      658M        4.3G         58G
Swap:      127G        0B      127G

1-3. CPU情報

$ lscpu
アーキテクチャ: x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
コアあたりのスレッド数:1
ソケットあたりのコア数:4
Socket(s):             1
NUMAノード:         1
ベンダーID:        GenuineIntel
CPUファミリー:    6
  :
  :

2. ファイル操作関連

2-1. ディレクトリを再帰的に表示

$ ll -R
.:
合計 8
drwxrwxr-x 3 www www 4096  6月 20  2018 backup
drwxrwxr-x 2 www www 4096  4月 17  2018 bin
  :
  :

//ベタに出力したい場合
$ ll -d $(find `pwd`)
rwx------ 8 www www       4096  5月 25 12:27 /home/www
-rw------- 1 www www      17386  5月 25 01:46 /home/www/.bash_history
-rw-r--r-- 1 www www         18  9月  7  2017 /home/www/.bash_logout
  :
  :

2-2. 再帰的に処理する(chmod/chown/diff/grep)

//再帰的にchmod(パーミッションを変更)
$ chmod -R xxx .                              //全部
$ find . -type d -print | xargs chmod xxx     //ディレクトリのみ
$ find . -type f -print | xargs chmod xxx     //ファイルのみ

//再帰的にchown(所有者を変更)
$ chown -R xxx:xxx .                          //全部
$ find . -type d -print | xargs chown xxx:xxx //ディレクトリのみ
$ find . -type f -print | xargs chown xxx:xxx //ファイルのみ

//再帰的にdiff(比較)
$ diff -r hoge1 hoge2

//再帰的にgrep(文字検索)
$ grep -r todo: .
./posts/mac-tips.md:todo:Homebrew関連は独立してまとめる。

2-3. ディレクトリサイズを確認

//サブディレクトリも再起的に表示する
$ du -h /hoge

//指定ディレクトリだけ表示する
$ du -hs /hoge

//ワイルドカードも指定できる
$ du -hs /hoge/*

//深さを指定できる
$ du -h --max-depth=2 /hoge

2-4. ファイル/ディレクトリを圧縮/解凍

//hoge01.txtをhoge.zipに圧縮
$ zip hoge.zip hoge01.txt

//複数ファイルを圧縮
$ zip hoge.zip hoge01.txt hoge02.txt
//ワイルドカードも指定できる
$ zip hoge.zip hoge*.txt

//解凍
$ unzip hoge.zip

//ディレクトリを圧縮
$ zip -r hoge.zip hogedir

//パスワードを指定
$ zip -e hoge.zip hoge01.txt
$ zip -er hoge.zip hogedir

3. ネットワーク操作関連

3-1. ポート番号とサービス名の対応を確認

$ cat /etc/services
  :
  :

$ cat /etc/services | grep ^https
https           443/udp     # http protocol over TLS/SSL
https           443/tcp     # http protocol over TLS/SSL

3-2. firewalld

//サービスの操作
$ systemctl start firewalld.service       //起動
$ systemctl stop firewalld.service        //停止
$ systemctl status firewalld.service      //状態確認:systemctl
$ firewall-cmd --state                    //状態確認:firewall-cmd


//自動起動
$ systemctl enable firewalld.service      //有効化
$ systemctl disable firewalld.service     //無効化
$ systemctl is-enabled firewalld.service  //設定確認


//ゾーンの確認 ... 「アク=デフォ」しかやった事ない。「アク≠デフォ」の場合は要確認。
$ firewall-cmd --get-active-zones     //アクティブゾーン
$ firewall-cmd --get-default-zone     //デフォルトゾーン


//設定内容確認
$ firewall-cmd --list-all             //デフォルトゾーン
$ firewall-cmd --list-all --permanent //デフォルトゾーン(恒久設定)
$ firewall-cmd --list-all-zones       //全ゾーン


//許可サービスの追加・削除 ... --permanent無しは再起動後に戻る
$ firewall-cmd --add-service=http    --zone=public --permanent  //追加
$ firewall-cmd --remove-service=http --zone=public --permanent  //削除

//許可ポートの追加・削除 ... --permanent無しは再起動後に戻る
$ firewall-cmd --add-port=postgres/tcp --permanent    //サービス名で追加 @see 3-1.
$ firewall-cmd --add-port=12345/tcp    --permanent    //ポート番号で追加
$ firewall-cmd --remove-port=postgres/tcp --permanent //サービス名で削除
$ firewall-cmd --remove-port=12345/tcp    --permanent //ポート番号で削除

//許可IPアドレスの追加・削除 ... --permanent無しは再起動後に戻る
firewall-cmd --add-source=x.x.x.x/x --zone=public --permanent     //追加
firewall-cmd --remove-source=x.x.x.x/x --zone=public --permanent  //削除

//ルールの追加・削除
$ firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address="x.x.x.x/x" port port=xxx protocol=tcp accept' --permanent
$ firewall-cmd --zone=public --remove-rich-rule='rule family=ipv4 source address="x.x.x.x/x" port port=xxx protocol=tcp accept' --permanent


//設定のリロード
$ firewall-cmd --reload

4. ユーザ/グループ操作関連

4-1. ユーザを管理

//ユーザ一覧
$ cat /etc/passwd | sort
//UserName:pwd:UID:GID:Comment:HomeDir:LoginShell

//普通に作られたユーザは/homeの下を見る
$ ll /home

//ユーザ作成
$ sudo useradd hoge

//パスワード設定
$ sudo passwd hoge

//ユーザ削除 -rオプションはホームディレクトリも削除
$ sudo userdel -r hoge
  • ユーザの追加削除はrootが必要。

4-2. グループを管理

//グループ一覧
$ cat /etc/group
//GroupName:GroupPwd:GID:AffiliatedUsers


//指定ユーザの所属グループ
$ groups ユーザ名

//ユーザuserfugaをグループgrouphogeに追加する
$ sudo gpasswd -a userfuga grouphoge

//ユーザuserfugaをグループgrouphogeから削除する
$ sudo gpasswd -d userfuga grouphoge
  • usermodコマンドでも変更できるけど、全所属グループを指定する必要があるのと、間違ってプライマリーグループを変更する可能性もあるのでgpasswdのがいいと思う。
  • グループへの追加削除はrootが必要。
  • グループの変更が反映されるのは次回ログインから。

9. その他

9-1. cron

$ crontab -l
05 01 01 * *     /usr/bin/php /hoge/app/batch/logRotate.php
30 19  * * *     /usr/bin/php /hoge/app/batch/backup.php
  :
  :

分   時   日   月   曜    コマンド
05   01   01   *   *    /usr/bin/php /hoge/app/batch/logRotate.php

パラメタ
 分  : 0-59
 時  : 0-23
 日  : 1-31
 月  : 1-12
 曜  : 0-7 (0|7=日曜)

指定方法
 リスト : 0,15,30,45(分で指定した場合、15分に一度処理実行)
 範 囲 : 1-5(曜で指定した場合、月~金に処理実行)

9-2. ftp

//ファイルを1個だけ転送するサンプル

$ cat ftp1.sh
#!/bin/sh

ftp -n <<END
open -xxx.xxx.xxx.xxx-
user -user- -password-
binary
prompt
lcd  $1
put  $2
END

$ ftp1.sh -転送元ディレクトリ- -転送ファイル-

ftp -n
 -nは自動ログインなし、ログインプロンプトの表示なし。
 シェルスクリプトでftpするときの定番おまじない。

open -xxx.xxx.xxx.xxx-
 リモートホストに接続。

close
 openで接続したリモートホストから切断する。

quit/by/bye/exit
 ftpを終了

binary
 ファイル転送時に改行コード変換をしない。
 対になるコマンドでascii(改行コード変換あり)がある。
 今の時代、転送時に改行コードを変換はしない、binary一択。

ls -dir-
 リモートホストのファイルを一覧する。

cd -dir-
 リモートホストのディレクトリを移動する

lcd  -dir-
 ローカルマシンのディレクトリを移動する

pwd
 リモートホストのカレントディレクトリを表示する。

mkdir
 リモートホストにディレクトリを作成する

chmod
 リモートホストのファイルやディレクトリのアクセス権を指定する。

!***
 ローカルマシンで任意のコマンド(***)を実行する

get -rfile- [-lfile-]
 リモートホストのファイルをローカルマシンへ受信する。-lfile-は省略可。

put -lfile- [-rfile-]
 ローカルマシンのファイルをリモートホストへ送信する。-rfile-は省略可。

mget -rfiles-
 リモートホストの複数ファイルをローカルマシンへ受信する。-rfiles-はワイルドカード使用可。

mput -lfiles-
 ローカルマシンの複数ファイルをリモートホストへ送信する。-lfiles-はワイルドカード使用可。

user -user- -password-
 指定ユーザ/パスワードでログイン。

prompt
 mget/mputしたときのプロンプトを抑止する。
 シェルスクリプトでftpするときの定番おまじない。

9-3. scp

//基本形
$ scp [オプション] コピー元パス 保存先パス

//鍵を指定してコピー
$ scp -i ~/.ssh/id_xxxxx ~/hoge [ユーザ]@[ホスト]:~/

//.ssh/configを使用してコピー
$ scp ~/hoge [config定義名]:~/

9-4. dnf

//パッケージをインストールする
$ sudo dnf install hoge


//パッケージをアンインストールする
$ sudo dnf remove hoge
$ sudo dnf erase hoge


//インストール済みパッケージでアップデートを確認する
$ dnf check-update

//パッケージを更新する
$ sudo dnf upgrade hoge

//パッケージを指定しなかった場合はインストール済みの全パッケージを更新する
$ sudo dnf upgrade


//指定した文字列が名前や概要に含まれているパッケージを一覧表示する
$ dnf search 文字列

//キャッシュを更新してからsearchする
$ dnf search 文字列 --refresh


//指定した名前のパッケージを一覧表示する
$ dnf list パッケージ名

//名前の末尾が"hoge"であるパッケージを一覧表示する
$ dnf list "*hoge"

//インストール済みのパッケージを一覧表示する
$ dnf list installed

//名前の末尾が"hoge"で、インストール済みのパッケージを一覧表示する
$ dnf list "*hoge" --installed


//パッケージの情報を表示する(listをinfoに読み替えればオッケー)
$ dnf info ...


//現在有効になっているリポジトリを一覧表示する
$ dnf repolist --enabled

//現在無効になっているリポジトリを一覧表示する
$ dnf repolist --disabled

//現在利用可能なリポジトリを全て表示する
$ dnf repolist --all

//指定したリポジトリを有効にする
$ sudo dnf config-manager --enable リポジトリ名

//指定したリポジトリを無効にする
$ sudo dnf config-manager --disable リポジトリ名
 
参考
368回【 dnf 】コマンド(基礎編)――ソフトウェア(パッケージ)をインストールする
369回【 dnf 】コマンド(応用編その1)――ソフトウェア(パッケージ)を探す
 :
 :
374回【 dnf 】コマンド(応用編その6)――リポジトリを有効化/無効化する
375回【 dnf 】コマンド(応用編その7)――リポジトリを追加する
376回【 dnf 】コマンド(応用編その8)――パッケージを更新する
377回【 dnf 】コマンド(応用編その9)――パッケージをダウングレードする