RHCSA 認定試験の一番の勉強法は有償ですが公式に提供されている「Red Hat System Administration I 」と「Red Hat System Administration Ⅱ 」の受講です。
本記事はそれを受講した上でポイントを抜粋しました。
網羅性を担保するために2020年度時点で公式ページに記載があったシラバスより出題範囲を以下に抜粋。項目のTipsを記載しているので理解が怪しい箇所の確認に利用ください。
(逐次加筆していきます)
- I/O リダイレクトを使用する (>、>>、|、2> など)
- grep と正規表現を使用してテキストを解析する
- SSH を使用してリモートシステムにアクセスする
- マルチユーザーターゲットでログインしてユーザーを切り替える
- tar、star、gzip、bzip2 を使用してファイルをアーカイブ、圧縮、解凍、展開する
- テキストファイルを作成および編集する
- ファイルおよびディレクトリを作成、削除、コピー、移動する
- ハードリンクおよびソフトリンクを作成する
- 標準の ugo/rwx 権限をリスト、設定、変更する
- man、info、/usr/share/doc 内のファイルなど、システムドキュメントを特定、読み出し、使用する
- システムを正常に起動、再起動、シャットダウンする
- 手動でシステムを別のターゲットで起動する
- 起動プロセスを中断してシステムにアクセスする
- CPU/メモリーを多用するプロセスを特定してプロセスを強制終了する
- プロセスのスケジューリングを調整する
- チューニングプロファイルを管理する
- システムログファイルとジャーナルを見つけて理解する
- システムジャーナルを保存する
- ネットワークサービスを開始および停止し、ステータスを確認する
- システム間でファイルを安全に転送する
- MBR および GPT ディスク上にパーティションをリスト、作成、削除する
- 物理ボリュームを作成し、削除する
- 物理ボリュームをボリュームグループに割り当てる
- 論理ボリュームを作成し、削除する
- Universally Unique ID (UUID) またはラベルで起動時にファイルシステムをマウントするようにシステムを設定する
- 新しいパーティションと論理ボリュームを追加して、システムを中断させずにスワップする
- vfat、ext4、xfs ファイルシステムを作成、マウント、アンマウント、および使用する
- NFS を使用してネットワーク・ファイル・システムをマウントおよびアンマウントする
- 既存の論理ボリュームを拡張する
- コラボレーション向けに set-GID ディレクトリを作成して設定する
- ディスク圧縮を設定する
- 階層化ストレージを管理する
- ファイルのアクセス権の問題を診断して修正する
- システムのデプロイ、設定、保守
- at と cron を使用してタスクをスケジュールする
- サービスを開始および停止し、起動時にサービスが自動的に開始するように設定する
- 自動的に特定のターゲットで起動するようにシステムを設定する
- タイム・サービス・クライアントを設定する
- Red Hat Network、リモートリポジトリ、またはローカルファイルシステムからソフトウェアパッケージをインストールし、アップデートする
- パッケージ・モジュール・ストリームを操作する
- システムブートローダーを修正する
- IPv4 および IPv6 アドレスを設定する
- ホスト名解決を設定する
- 起動時に自動的に開始するようにネットワークサービスを設定する
- firewall-cmd/firewalld を使用してネットワークアクセスを制限する
- ユーザーとグループの管理
- ローカル・ユーザー・アカウントを作成、削除、変更する
- パスワードを変更して、ローカル・ユーザー・アカウントのパスワードの有効期限を調整する
- ローカルグループとグループメンバーシップを作成、削除、変更する
- スーパーユーザーのアクセス権を設定する
- firewall-cmd/firewalld を使用してファイアウォール設定を指定する
- ファイルアクセス制御リストを作成して使用する
- SSH のキーベース認証を設定する
- SELinux の Enforcing モードと Permissive モードを設定する
- SELinux ファイルとプロセスのコンテキストをリストして特定する
- デフォルトのファイルコンテキストを復元する
- ブール値設定を使用してシステムの SELinux 設定を変更する
- 繰り返し発生する SELinux ポリシー違反を診断して対処する
I/O リダイレクトを使用する (>、>>、|、2> など)
0がstdinで標準⼊⼒、1がstdoutで標準出⼒、2がstderrで標準エラー。
あえてエラーを起こすとよく分かります。
$ find abc > /dev/null find: ‘abc’: No such file or directory $ find abc 2> /dev/null
標準出力とエラーを一気にファイルに追記する以下はよく使うので覚えておきたいです。
&> file
grep と正規表現を使用してテキストを解析する
正規表現で意外とよく使うのは{n,m}
で「前の文字がn 回以上 m 回以下⼀致」を表します。
下記の文字群ファイルにてbが2回以上連続して表示されている行は
$ cat memo.txt aaa aab aba abb baa bab bba bbb
以下の正規表現で取得できます。
$ cat memo.txt | grep 'b\{2,\}' abb bba bbb
SSH を使用してリモートシステムにアクセスする
sshコマンドでリモートログインする際のTipsとして相手方のホスト認証を必須とする場合は/etc/ssh/ssh_config
にて
StrictHostKeyChecking
をyesに変更とします。
マルチユーザーターゲットでログインしてユーザーを切り替える
ログインしているユーザを確認するためにwコマンドが紹介されていました。
$ w xx up 2 days, xx, 2 users, load average: 0.31, 0.42, 0.48 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT x pts/0 xx z 1.00s 0.04s 0.00s w y pts/1 yy zz 2:35 0.05s 0.05s -bash
whoコマンドにはないリソース状況の確認も可能です。
$ who x pts/0 .. (xx) y pts/1 .. (yy)
w コマンドを使⽤すると、現在そのコンピューターにログインしているユーザーの⼀覧が表⽰さ れます。このコマンドは、ssh を使⽤してログイン中のユーザーに関する、ログイン元のリモー トの場所や実⾏中のタスクを表⽰するときに特に便利です。
tar、star、gzip、bzip2 を使用してファイルをアーカイブ、圧縮、解凍、展開する
以下でTarファイルとして固めます。(fでtarファイルのfile名指定&cでcreate)
ちなみにここでzをつけるとtar.gzで保存。
$ tar -cf archive.tar file1 file2
以下でtarファイルの中身をチェック
$ tar -tf archive.tar
以下でtarファイルを展開(extract)。zをつけるとtar.gzを展開できます。
$ tar -xf archive.tar
テキストファイルを作成および編集する
viの操作方法は以下。
ファイルおよびディレクトリを作成、削除、コピー、移動する
$ mkidr $ rm $ cp $ mv
ハードリンクおよびソフトリンクを作成する
以下でハードリンク。-s
を付与するとソフトリンク。
$ ln hoge_new.txt /tmp/hoge.txt
ソフトリンクには元のファイルが削除された場合でも再度できればそのファイルにアクセスできるのは強みがあります。
標準の ugo/rwx 権限をリスト、設定、変更する
chmodで権限を変更、ls -lで確認できます。権限周りは実機でトラブルが起きるポイントですね。
man、info、/usr/share/doc 内のファイルなど、システムドキュメントを特定、読み出し、使用する
馴染みが無い方もいると思いますが以下のディレクトリを指定するとブラウザでマニュアルが確認できます。
$ firefox /usr/share/doc
ディレクトリを見に行くと以下のようにディレクトリ群が格納されていて
$ ls /usr/share/doc -l | head -n 2 合計 4560 drwxr-xr-x. 2 root root 4096 xx GConf2-3.2.6
中には以下の構造でファイルがあり
$ ls /usr/share/doc/GConf2-3.2.6 COPYING NEWS README
テキストファイルが格納されています。
$ file /usr/share/doc/GConf2-3.2.6/NEWS /usr/share/doc/GConf2-3.2.6/NEWS: UTF-8 Unicode text
システムを正常に起動、再起動、シャットダウンする
shutdownコマンドには以下パスが通っていて
$ ls -l /usr/sbin/ | grep shutdown lrwxrwxrwx. 1 root root xx shutdown -> ../bin/systemctl
以下で停止
# systemctl poweroff
以下で再起動
# systemctl reboot
できます。
手動でシステムを別のターゲットで起動する
以下でターゲット一覧を確認できて
# systemctl list-units --type=target --all
以下でシステム起動中に別のターゲットに切り替えれます。
# systemctl isolate multi-user.target
システム起動時のターゲットは以下で切り替えます。
# systemctl set-default multi-user.target Removed /etc/systemd/system/default.target. Created symlink /etc/systemd/system/default.target -> /usr/lib/systemd/system/ multi-user.target.
起動プロセスを中断してシステムにアクセスする
以下の記事にもある通りで起動画面にて「e」キーを押して
割り込みを行い、以下を最終行に追加してレスキューモードに入ったりします。
systemd.unit=rescue.target
CPU/メモリーを多用するプロセスを特定してプロセスを強制終了する
topコマンドでlキーtキーmキーを押すとヘッダーを変更でき、例えば以下のようにバーのようにパフォーマンスを確認できます。
top - xx up 3 days, xx, 1 user, load average: 0.21, 0.42, 0.45 Tasks: 1728 total, 1 running, 1727 sleeping, 0 stopped, 0 zombie %Cpu(s): 10.1/9.6 20[|||||||||||||||||||| ] KiB Mem : 10.3/10713169+[|||||||||| ] KiB Swap: 0.0/5738488 [ ]
該当のPIDに対して以下でクリーンにプロセスを停止させます。
$ kill -SIGTERM xx
上記で反応がない場合にはSIGINTやSIGKILLで強制力を持って落としにかかります。
プロセスのスケジューリングを調整する
jobsで実行中のジョブ一覧を確認し、一時停止やプロセスの終了をする場合は以下のように該当ジョブをフォアグラウンドに持ってきて
$ fg %2
Ctrl+zで一時停止、Ctrl+cでプロセスの終了させる。
一時停止の場合はバックグラウンドコマンドで中断していたものを実行に移せます。
$ bg %2
チューニングプロファイルを管理する
以下で設定可能なプロファイルと現在のプロファイルが確認でき
# tuned-adm list
以下で設定できます。
# tuned-adm profile virtual-guest
ちなみにESXiにRHELをインストールするとvirtual-guest(enterprise-storageをベース&仮想メモリーのswapが低減されている)となっていました。
システムログファイルとジャーナルを見つけて理解する
以下のようにPIDやUID、systemdのユニットを指定してログを確認できます。
$ journalctl _PID=1
$ journalctl _SYSTEMD_UNIT="sshd.service"
システムジャーナルを保存する
/etc/systemd/journald.confに以下の行を記載します。
Storage=persistent
その後に同サービスを再起動すれば永続的にジャーナルログが/var/log配下に保持できます。
# systemctl restart systemd-journald.service
ネットワークサービスを開始および停止し、ステータスを確認する
以下でネットワークの状況を確認。
# nmcli con show
以下で開始
# nmcli con up id hoge
以下で停止
nmcli dev disconnect hoge
システム間でファイルを安全に転送する
rsync -av(アーカイブモード&詳細表示)でディレクトリを同期させます。
$ rsync -av root@remotehost:/var/log ~/test
MBR および GPT ディスク上にパーティションをリスト、作成、削除する
ディスクに以下のようにラベルを張り
# parted /dev/vdb mklabel msdos # parted /dev/vdb mklabel gpt
以下で対話型で設定。
# parted /dev/vdb (parted) mkpart Partition type? primary/extended? primary File system type? [ext2]? xfs Start? 2048s End? 1001MB (parted) quit(1 GiB)
消す時は以下のようにprintで表示される数字を引数に。
(parted) rm 1
物理ボリュームを作成し、削除する
# pvscan # pvcreate /dev/sd1 # pvremove /dev/sd1
物理ボリュームをボリュームグループに割り当てる
# vgcreate vg01 /dev/sd1
論理ボリュームを作成し、削除する
# lvcreate -n lv01 -L 700M vg01 # lvremove /dev/vg01/lv01
Universally Unique ID (UUID) またはラベルで起動時にファイルシステムをマウントするようにシステムを設定する
以下で確認したUUIDを
# lsblk --fs
/etc/fstabに追記。boot用のエリアは以下のようにUUIDで記載されています。
UUID=xx /boot xfs defaults 0 0 /dev/mapper/rhel-home /home xfs defaults 0 0 ...
新しいパーティションと論理ボリュームを追加して、システムを中断させずにスワップする
linux-swapというパーティションタイプを指定してデバイスを作成して
# mkswap /dev/vdb2
以下で確認したUUIDをfstabに追記して永続化。
# lsblk --fs /dev/vdb2
スワップスペースを有効化すれば
# swapon -a
swapが有効化されていることが確認できる。
# swapon --show
vfat、ext4、xfs ファイルシステムを作成、マウント、アンマウント、および使用する
以下はファイルシステムの縮小ですが
論理ボリュームを作成すれば以下でファイルシステムにします。
# mkfs.xfs /dev/rhel/opt
あとは/etc/fstabに以下を追記して
/dev/rhel/opt /opt xfs defaults 0 0
以下でマウントします。
# mount /opt
NFS を使用してネットワーク・ファイル・システムをマウントおよびアンマウントする
クライアントからはfstabに記載してmountコマンドを打てばマウントできます。
既存の論理ボリュームを拡張する
以下コマンドでボリュームグループに物理ボリュームを追加して
# vgextend vg_test /dev/vdb1
以下で論理ボリュームを拡張します。
# lvextend -L 768M /dev/vg_test/serverb_01_lv
コラボレーション向けに set-GID ディレクトリを作成して設定する
chmodにて4桁目の数値にて4がsetuid、2がsetgidで1がstickyです。
# chmod 2700 /tmp/hoge
ディスク圧縮を設定する
VDO(Virtual Data Optimizer)ボリュームを以下で作成して
# vdo create --name=vdo1 --device=/dev/vdd --vdoLogicalSize=50G
以下で一覧を確認
# vdo list
以下でファイルシステムとしてあとは他と同様にmountします。
# mkfs.xfs /dev/mapper/vdo1
ステータスは以下で確認できます。
# vdostats --human-readable
階層化ストレージを管理する
以下でサービス起動を確認して
# systemctl status stratisd
以下でデバイスをpool化。
# stratis pool create pool1 /dev/vdb
# stratis pool list
ファイルシステムにして
# stratis filesystem create pool1 stratis-filesystem1
# mount /stratis/stratispool1/stratis-filesystem1-snap /stratisvol-snap
ファイルのアクセス権の問題を診断して修正する
# chomd
システムのデプロイ、設定、保守
TBC
at と cron を使用してタスクをスケジュールする
一度きりのジョブはatコマンドで登録できます。
$ echo "date >> /home/student/myjob.txt" | at 2pm august 22 2022
マニュアルの抜粋ですが以下のコマンドがat周りで利用されます。
- at 指定された時刻にコマンドを実行する。
- atq このコマンドを起動したユーザーの、実行されていないジョブを表 示する。スーパーユーザーで起動すると、全てのユーザーのジョブを表示する。
- atrm ジョブを削除する。
サービスを開始および停止し、起動時にサービスが自動的に開始するように設定する
# systemctl is-enabled sshd.service enabled
# systemctl enable sshd.service
# systemctl disable sshd.service
自動的に特定のターゲットで起動するようにシステムを設定する
# systemctl set-default multi-user.target
タイム・サービス・クライアントを設定する
$ systemctl status chronyd
/etc/chrony.confにNTPサーバを指定します(iburst=開始直後に時計を更新)
server xx iburst
Red Hat Network、リモートリポジトリ、またはローカルファイルシステムからソフトウェアパッケージをインストールし、アップデートする
パッケージ・モジュール・ストリームを操作する
システムブートローダーを修正する
IPv4 および IPv6 アドレスを設定する
ホスト名解決を設定する
起動時に自動的に開始するようにネットワークサービスを設定する
以下で接続名を書くんして
# nmcli con show
以下で自動開始をONにする。
# nmcli con mod "hoge" connection.autoconnect yes
逆にOFFにする場合は以下
# nmcli con mod "hoge" connection.autoconnect no
以下を見に行く。
/etc/sysconfig/network-scripts/ifcfg-lab
firewall-cmd/firewalld を使用してネットワークアクセスを制限する
ユーザーとグループの管理
ローカル・ユーザー・アカウントを作成、削除、変更する
パスワードを変更して、ローカル・ユーザー・アカウントのパスワードの有効期限を調整する
ローカルグループとグループメンバーシップを作成、削除、変更する
スーパーユーザーのアクセス権を設定する
firewall-cmd/firewalld を使用してファイアウォール設定を指定する
$ firewall-cmd --get-default-zone $ firewall-cmd --set-default-zone public $ firewall-cmd --permanent --zone=public --list-all $ firewall-cmd --permanent --zone=public --add-port=1001/tcp $ firewall-cmd --reload
ファイルアクセス制御リストを作成して使用する
SSH のキーベース認証を設定する
SELinux の Enforcing モードと Permissive モードを設定する
対話型であれば以下。永続的であれば/etc/selinux/configを修正。
# getenforce # setenforce usage: setenforce [ Enforcing | Permissive | 1 | 0 ]
以下でポートラベルの割り当てを確認
# semanage port -l
ブロックされているログを見に行く
# sealert -a /var/log/audit/audit.log
SELinux ファイルとプロセスのコンテキストをリストして特定する
ls -dZでファイルのドキュメントルートを確認し、以下でhogeディレクトリは以下をfugaに指定。
# semanage fcontext -a -t fuga '/hoge(/.*)?'
デフォルトのファイルコンテキストを復元する
コンテキストを設定。
# restorecon -R /hoge
ブール値設定を使用してシステムの SELinux 設定を変更する
# getsebool -a | grep home
# setsebool -P httpd_enable_homedirs on
繰り返し発生する SELinux ポリシー違反を診断して対処する
# less /var/log/messages
でログを見て
# sealert -l xxx
で詳細調査。あたりとつけると/var/log/audit/audit.logで生ログを確認。