↓ Skip to main content
RH134 Red Hat System Administration II - Command Notes (Part I)
  1. doc/

RH134 Red Hat System Administration II - Command Notes (Part I)

·10 mins·

Dokumen ini berisi catatan perintah yang umum digunakan pada RH134 (Red Hat System Administration II). Pembahasan disusun berdasarkan fungsi administrasi sistem dan mencakup sintaks dasar, opsi yang sering digunakan, serta contoh penggunaan.

RH134 memiliki cakupan materi dan jumlah perintah yang lebih besar daripada RH124. Karena itu, catatan ini dibagi menjadi beberapa bagian. Bagian pertama membahas shell scripting, penjadwalan, logging, sinkronisasi waktu, SELinux, arsip, transfer berkas, tuning performa, dan storage.

Daftar Isi
#

1. Variabel Shell dan Bash Scripting
#

Variabel Shell
#

Variabel shell menyimpan nilai yang dapat digunakan oleh perintah atau skrip. Tidak boleh ada spasi di sekitar tanda = saat variabel dibuat.

nama="server-01"
jumlah=3
echo "$nama memiliki $jumlah layanan"

Perintah set menampilkan variabel shell, fungsi, dan opsi shell. Perintah env atau printenv menampilkan environment variable yang diwariskan ke proses lain. Perintah unset menghapus variabel dari shell saat ini.

set
env
printenv PATH
unset jumlah

Gunakan export agar variabel tersedia bagi proses yang dijalankan dari shell tersebut.

export APP_ENV=production
bash -c 'echo "$APP_ENV"'

Konfigurasi yang perlu diterapkan pada setiap sesi login dapat ditambahkan ke ~/.bashrc. Setelah file diubah, muat ulang dengan source ~/.bashrc atau buka sesi baru.

Skrip Bash
#

Skrip Bash harus diawali dengan shebang yang menentukan interpreter. Hak eksekusi diberikan dengan chmod dan skrip dapat dijalankan menggunakan path relatif atau absolut.

#!/usr/bin/env bash
printf 'Host: %s\n' "$(hostname)"
chmod +x info.sh
./info.sh

Skrip yang sering digunakan dapat ditempatkan di direktori yang tercantum pada $PATH. Periksa lokasi perintah dengan which atau type.

echo "$PATH"
which info.sh
type -a bash

Argumen posisi dimulai dari $1, $2, dan seterusnya. $0 berisi nama skrip, $# jumlah argumen, dan $@ seluruh argumen. Gunakan ${10} untuk argumen dengan nomor dua digit agar tidak dibaca sebagai ${1}0.

#!/usr/bin/env bash
printf 'Skrip: %s\n' "$0"
printf 'Argumen pertama: %s\n' "$1"
printf 'Argumen kesepuluh: %s\n' "${10}"
printf 'Jumlah argumen: %s\n' "$#"

Perlu dibedakan antara parameter dan opsi. Parameter adalah nilai yang diproses skrip, sedangkan opsi biasanya mengubah perilaku perintah, misalnya -v atau --verbose. set -- nilai1 nilai2 dapat digunakan untuk mengatur ulang parameter posisi di dalam skrip.

Ekspansi yang umum digunakan meliputi:

  • Brace expansion: echo file{1..3}.txt menghasilkan file1.txt, file2.txt, dan file3.txt.
  • Filename expansion: *.log diperluas menjadi nama berkas yang cocok dengan pola.
  • Command substitution: tanggal=$(date) menyimpan output perintah ke dalam variabel.
  • Quoting: gunakan tanda kutip ganda untuk mempertahankan spasi dalam nilai; gunakan tanda kutip tunggal jika ekspansi tidak diperlukan.

2. Struktur Kendali dan Regular Expression
#

Kondisi dan Status Keluar
#

Perintah test atau sintaks [[ ... ]] digunakan untuk mengevaluasi kondisi. Nilai $? berisi status keluar perintah terakhir; nilai 0 berarti berhasil, sedangkan nilai selain 0 berarti gagal.

[[ 1 -eq 1 ]]
echo $?

[[ "abc" == "abc" ]]
echo $?

Sintaks [[ ... ]] lebih aman untuk skrip Bash karena mendukung pattern matching dan tidak melakukan word splitting seperti [ ... ]. Spasi di dalam sintaks tersebut harus tetap ditulis.

Operator yang sering digunakan adalah -f untuk berkas biasa, -d untuk direktori, -r untuk berkas yang dapat dibaca, -z untuk string kosong, -eq untuk perbandingan angka, serta == untuk perbandingan string.

Percabangan dan Perulangan
#

Gunakan if, elif, else, dan fi untuk menjalankan perintah berdasarkan kondisi.

if [[ -f /etc/hosts ]]; then
    echo "Berkas tersedia"
elif [[ -d /etc ]]; then
    echo "Direktori tersedia"
else
    echo "Path tidak ditemukan"
fi

Perulangan for memproses setiap item dalam sebuah daftar. Daftar tersebut dapat ditulis langsung atau berasal dari ekspansi.

for file in /var/log/*.log; do
    [[ -e "$file" ]] || continue
    printf '%s\n' "$file"
done

while menjalankan perintah selama kondisi bernilai benar, sedangkan until menjalankannya sampai kondisi bernilai benar.

counter=1
while [[ $counter -le 3 ]]; do
    echo "$counter"
    ((counter++))
done

Regular Expression
#

Regular expression digunakan untuk mencocokkan pola teks pada output perintah atau isi berkas. Utilitas yang umum digunakan adalah grep, egrep atau grep -E untuk extended regular expression, sed, dan awk.

grep -E '^(ERROR|WARN)' /var/log/messages
grep -E '^[[:alnum:]._%+-]+@[[:alnum:].-]+\.[[:alpha:]]{2,}$' users.txt

Basic regular expression memiliki beberapa karakter khusus yang memerlukan escape, sedangkan extended regular expression menyediakan operator seperti +, ?, dan | secara langsung. Gunakan grep -F jika pola harus diperlakukan sebagai teks literal, bukan regular expression.

3. Penjadwalan Tugas
#

at
#

at menjadwalkan perintah untuk satu kali eksekusi pada waktu tertentu. Service atd harus aktif agar tugas dapat dijalankan.

sudo systemctl enable --now atd
echo "/usr/bin/logger 'Tugas satu kali selesai'" | at 23:30
atq
atrm JOB_ID

atq menampilkan antrean tugas pengguna, sedangkan atrm menghapus tugas berdasarkan ID. Tugas yang dibuat tanpa sudo berjalan dengan identitas pengguna yang membuatnya.

cron dan crontab
#

cron digunakan untuk tugas berulang. Edit crontab pengguna dengan crontab -e, lihat isinya dengan crontab -l, dan hapus seluruh crontab dengan crontab -r.

Format crontab terdiri dari menit, jam, hari dalam bulan, bulan, hari dalam minggu, lalu perintah.

0 2 * * * /usr/local/bin/backup.sh

Gunakan path absolut dan redirect output ke log jika tugas perlu ditelusuri. Untuk tugas sistem, gunakan /etc/crontab atau berkas di /etc/cron.d/. Direktori /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, dan /etc/cron.monthly/ digunakan untuk interval standar. Service yang menjalankan cron pada RHEL adalah crond.

anacron dapat menjalankan tugas yang terlewat ketika sistem mati. Mekanisme ini sesuai untuk pekerjaan berkala yang tidak harus dijalankan tepat pada menit tertentu.

Systemd Timer
#

Systemd timer memisahkan jadwal (.timer) dari pekerjaan (.service). Contoh unit berikut menjalankan service setiap hari.

# /etc/systemd/system/report.service
[Unit]
Description=Generate daily report

[Service]
Type=oneshot
ExecStart=/usr/local/bin/report.sh
# /etc/systemd/system/report.timer
[Unit]
Description=Run daily report

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true

[Install]
WantedBy=timers.target

Muat ulang unit, aktifkan timer, dan verifikasi jadwalnya dengan perintah berikut.

sudo systemctl daemon-reload
sudo systemctl enable --now report.timer
systemctl list-timers report.timer

Parameter yang umum pada blok [Timer] adalah OnCalendar, OnBootSec, OnUnitActiveSec, Persistent, dan AccuracySec. systemd-tmpfiles dapat digunakan untuk membuat berkas atau direktori serta membersihkan file sementara berdasarkan aturan di /usr/lib/tmpfiles.d/, /run/tmpfiles.d/, dan /etc/tmpfiles.d/.

4. Logging dan Journal
#

RHEL menggunakan systemd-journald sebagai journal terstruktur. rsyslog dapat meneruskan atau menyimpan pesan dalam format log tradisional, seperti /var/log/messages dan /var/log/secure. Journal runtime biasanya berada di /run/log/journal dan hilang saat reboot jika penyimpanan persisten belum dikonfigurasi.

journalctl
#

Batasi pencarian journal berdasarkan waktu, boot, unit, prioritas, atau proses agar output tetap relevan.

journalctl --since "1 hour ago"
journalctl -u sshd --since today
journalctl -p warning..alert
journalctl -b -1
journalctl -f
journalctl -n 50
journalctl --list-boots
journalctl -o verbose

Field yang berguna saat troubleshooting antara lain _UID, _PID, dan _SYSTEMD_UNIT.

journalctl _SYSTEMD_UNIT=sshd.service
journalctl _UID=0 _PID=1234

Journal Persisten dan Rotasi
#

Buat direktori berikut agar journal tetap tersedia setelah reboot, kemudian restart systemd-journald.

sudo mkdir -p /var/log/journal
sudo systemctl restart systemd-journald

Konfigurasi lokal sebaiknya ditempatkan pada /etc/systemd/journald.conf.d/ sehingga konfigurasi vendor di /usr/lib tidak diubah. Beberapa opsi penting adalah SystemMaxUse, RuntimeMaxUse, SystemMaxFileSize, RuntimeMaxFileSize, SystemKeepFree, dan RuntimeKeepFree.

Facility dan severity pada syslog membantu mengelompokkan pesan. Facility umum meliputi authpriv, cron, daemon, kern, mail, user, dan local0 sampai local7. Severity dari yang paling kritis adalah emerg, alert, crit, err, warning, notice, info, dan debug.

logger dapat mengirim pesan uji ke syslog atau journal, sedangkan logrotate mengatur rotasi log tradisional.

logger -p user.warning "Pesan pengujian logging"
sudo logrotate -d /etc/logrotate.conf

5. Sinkronisasi Waktu
#

Waktu sistem yang akurat diperlukan agar timestamp log, autentikasi, dan sertifikat dapat dianalisis dengan benar. Pada RHEL, sinkronisasi waktu umumnya dikelola oleh chronyd.

sudo systemctl enable --now chronyd
timedatectl status
chronyc tracking
chronyc sources -v

timedatectl set-timezone Area/Location mengatur zona waktu, sedangkan tzselect membantu memilih nama zona waktu yang sesuai. Hindari mengubah jam sistem secara manual ketika sinkronisasi NTP aktif.

6. SELinux
#

Konsep Dasar
#

Permission file biasa menggunakan Discretionary Access Control (DAC) berdasarkan user dan group. SELinux menambahkan Mandatory Access Control (MAC) berdasarkan domain proses dan label objek. Dengan demikian, proses yang berjalan sebagai user tertentu tetap dapat dibatasi oleh policy SELinux, termasuk ketika user tersebut memiliki permission DAC yang memadai.

Mode SELinux terdiri dari Enforcing, Permissive, dan Disabled. Mode aktif dapat diperiksa dengan getenforce, sedangkan perubahan sementara dilakukan dengan setenforce.

getenforce
sudo setenforce 0
sudo setenforce 1

Konfigurasi persisten berada di /etc/selinux/config. Perubahan antara Enforcing dan Permissive dapat diterapkan saat runtime, sedangkan pengaktifan atau penonaktifan SELinux umumnya memerlukan reboot dan harus dilakukan dengan hati-hati.

File Context dan Boolean
#

Context SELinux dapat dilihat dengan ls -Z atau ls -Zd. Gunakan restorecon untuk menerapkan context sesuai policy. chcon hanya mengubah context secara manual dan dapat tertimpa saat restorecon dijalankan, sehingga bukan pilihan utama untuk konfigurasi permanen.

ls -Z /var/www/html
sudo restorecon -Rv /var/www/html

Untuk path nonstandar, daftarkan aturan dengan semanage fcontext, lalu terapkan dengan restorecon.

sudo semanage fcontext -a -t httpd_sys_content_t '/srv/www(/.*)?'
sudo restorecon -Rv /srv/www
semanage fcontext -l -C

Boolean mengaktifkan atau menonaktifkan perilaku policy tanpa mengubah policy secara langsung.

getsebool -a
semanage boolean -l
sudo setsebool -P httpd_can_network_connect on

Gunakan ausearch atau sealert untuk menganalisis penolakan akses. Sebelum mengubah policy, pastikan masalah tersebut memang berasal dari SELinux, bukan dari permission DAC, ownership, atau konfigurasi service.

7. Arsip dengan tar
#

tar membuat, menampilkan, dan mengekstrak arsip. Opsi yang umum adalah -c atau --create, -t atau --list, -x atau --extract, -v atau --verbose, dan -f atau --file.

tar -cvf backup.tar /etc/example
tar -tvf backup.tar
tar -xvf backup.tar -C /tmp/restore

Gunakan -z untuk gzip, -j untuk bzip2, -J untuk xz, dan -a agar format kompresi dipilih dari ekstensi berkas.

tar -czf backup.tar.gz /etc/example
tar -xzf backup.tar.gz

Untuk mempertahankan metadata, pertimbangkan -p atau --preserve-permissions, --xattrs, dan --selinux. Selalu periksa isi arsip dengan tar -tf sebelum mengekstraknya ke direktori sistem.

8. Transfer Berkas melalui SSH
#

scp dan sftp
#

scp menyalin berkas melalui SSH. Opsi -r digunakan untuk direktori, sedangkan -O memaksa protokol SCP lama pada versi OpenSSH yang masih mendukungnya.

scp report.txt user@remotehost:/tmp/
scp -r config/ user@remotehost:/etc/example/

sftp menyediakan sesi interaktif untuk transfer berkas. Perintah yang umum digunakan adalah get, put, mget, mput, ls, lls, cd, lcd, pwd, lpwd, mkdir, rm, rmdir, chmod, chown, chgrp, rename, df, help, dan bye.

rsync
#

rsync menyalin hanya perubahan yang diperlukan dan sesuai untuk sinkronisasi direktori.

rsync -av /srv/data/ user@remotehost:/srv/data/
rsync -av --delete /srv/data/ /backup/data/

Trailing slash pada sumber memengaruhi apakah isi direktori atau direktori itu sendiri yang disalin. Opsi --delete harus digunakan dengan hati-hati karena menghapus file di tujuan yang tidak terdapat pada sumber.

9. Tuning Performa dan Prioritas Proses
#

tuned
#

Service tuned menerapkan profil tuning berdasarkan beban kerja. Lihat profil yang tersedia dan profil aktif dengan tuned-adm.

sudo systemctl enable --now tuned
tuned-adm list
tuned-adm active
sudo tuned-adm profile virtual-guest

Profil kustom dapat dibuat di /etc/tuned/PROFILE_NAME/ dengan file tuned.conf. Pada sistem yang menggunakan Cockpit, profil dan metrik performa juga dapat dikelola melalui antarmuka web.

sysctl, nice, dan renice
#

sysctl membaca atau mengubah parameter kernel. Perubahan sementara berlaku saat runtime, sedangkan konfigurasi persisten dapat ditulis pada /etc/sysctl.d/*.conf lalu diterapkan dengan sysctl --system.

sysctl vm.swappiness
sudo sysctl -w vm.swappiness=10
sudo sysctl --system

Nilai nice yang lebih tinggi berarti prioritas CPU lebih rendah. Jalankan proses baru dengan nice atau ubah proses yang sudah berjalan dengan renice.

nice -n 10 long-task
sudo renice 5 -p 1234
ps -o pid,ni,cmd -p 1234

Gunakan top untuk mengamati nilai NI, penggunaan CPU, dan perubahan prioritas proses. Peningkatan prioritas biasanya memerlukan hak administrator dan harus dilakukan hanya jika dampaknya telah dipahami.

10. Partisi, Filesystem, Mount, dan Swap
#

Partisi dan Filesystem
#

Identifikasi perangkat terlebih dahulu dengan lsblk atau findmnt. Hindari menjalankan perintah partisi pada perangkat yang masih digunakan.

lsblk -f
sudo parted /dev/sdb

Di dalam parted, perintah yang umum digunakan adalah unit, print, mklabel gpt, mkpart, rm, dan quit. Setelah partisi dibuat, minta kernel membaca ulang tabel partisi jika diperlukan.

sudo udevadm settle
sudo mkfs.xfs /dev/sdb1

Filesystem dapat dipasang sementara dengan mount. Gunakan UUID pada /etc/fstab untuk mount persisten, lalu validasi konfigurasi sebelum reboot.

sudo mkdir -p /data
sudo mount /dev/sdb1 /data
findmnt /data
lsblk -f

Setelah /etc/fstab diubah, jalankan systemctl daemon-reload dan uji dengan mount -a. Kesalahan pada fstab dapat menyebabkan masalah saat boot, sehingga perangkat dan opsi mount perlu diverifikasi terlebih dahulu.

Swap
#

Swap dapat dibuat dari partisi khusus atau file. Contoh berikut menggunakan partisi.

sudo mkswap /dev/sdb2
sudo swapon /dev/sdb2
swapon --show
free -h

Untuk menonaktifkan swap sementara, gunakan swapoff. Agar aktif setelah reboot, tambahkan UUID partisi ke /etc/fstab dengan filesystem type swap, lalu uji menggunakan swapon --all.

Referensi
#

Askarhabibulloh
Author
Askarhabibulloh