(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【RHEL】RHCSA認定試験の出題範囲とその対応ポイントまとめ

スポンサーリンク

RHCSA 認定試験の一番の勉強法は有償ですが公式に提供されている「Red Hat System Administration I 」と「Red Hat System Administration Ⅱ 」の受講です。

本記事はそれを受講した上でポイントを抜粋しました。
網羅性を担保するために2020年度時点で公式ページに記載があったシラバスより出題範囲を以下に抜粋。項目のTipsを記載しているので理解が怪しい箇所の確認に利用ください。
(逐次加筆していきます)

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で生ログを確認。