Red Hat System Administration II 10.0

Daftar isi


Pemrograman Shell dan Baris Perintah

Variabel Shell

Penugasan Variabel

# nama variabel bisa berisi huruf besar, kecil, digit, underscore. tidak boleh ada spasi:
user@host:~$ VARIABLE_NAME=value

# contoh:
user@host:~$ COUNT=40
user@host:~$ first_name=John
user@host:~$ full_name='John Smith'
user@host:~$ file1=/tmp/abc
user@host:~$ _ID=Training

Tipe Data Variabel

# string
user@host:~$ bare=This\ string\ escapes\ all\ spaces.
user@host:~$ double_quote="This is an expandable string where the ${variable} variable would be replaced."
user@host:~$ single_quote='This is a literal string with special characters like the $ character.'

# number
user@host:~$ five=5
user@host:~$ ten=10
user@host:~$ fifteen=$((five + ten))

# array
user@host:~$ colors=('red' 'green' 'blue')

Mengambil Nilai dengan ekspansi Variabel

user@host:~$ COUNT=40
user@host:~$ echo COUNT
COUNT
user@host:~$ echo $COUNT
40
user@host:~$ echo "The count is: $COUNT"
The count is: 40

# ekspansi variabel di string dengan petik tunggal diabaikan
user@host:~$ echo 'The count is: $COUNT'
The count is: $COUNT

user@host:~$ echo "Repeat $COUNTx"
Repeat
user@host:~$ echo "Repeat ${COUNT}x"
Repeat 40x

# contoh array
user@host:~$ colors=("red" "green" "blue")
user@host:~$ echo "The sky is ${colors[2]}"
The sky is blue

# akses semua elemen di array dengan karakter @ atau *
user@host:~$ echo "The human eye can see the following colors: ${colors[@]}"
The human eye can see the following colors: red green blue

Konfigurasikan Bash dengan Variabel Shell

Variabel HISTFILE menentukan file mana yang akan digunakan untuk menyimpan riwayat shell, dan secara default adalah file ~/.bash_history.

Variabel HISTFILESIZE menentukan berapa banyak perintah yang akan disimpan dalam file tersebut dari riwayat.

Variabel HISTTIMEFORMAT mendefinisikan format stempel waktu untuk setiap perintah dalam riwayat. Variabel ini tidak ada secara default.

# menampilkan histori kapanpun
user@host:~$ history
...output omitted...
    6  ls /etc
    7  uptime

# atur timestamp
user@host:~$ HISTTIMEFORMAT="%F %T "

# verifikasi
user@host:~$ history
...output omitted...
    6  2022-05-03 04:58:11 ls /etc
    7  2022-05-03 04:58:13 uptime

Contoh lain adalah variabel PS1, yang mengatur tampilan prompt shell.

# contoh mengubah tampilan bash cmd
user@host:~$ PS1="bash\$ "
bash$

bash$ PS1="[\u@\h \W]\$ "
[user@host ~]$

Mengatur Program dengan Environmen Variabel

# menampilkan semua environmen variabel
user@host:~$ env
...output omitted...
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
HOSTNAME=host.example.com
XDG_SESSION_ID=4
...output omitted...

# contoh mengatur vim sebagai teks editor
user@host:~$ EDITOR=vim
user@host:~$ export EDITOR
# bisa juga langsung
user@host:~$ export EDITOR=vim

# Dalam contoh berikut, periksa bahwa perintah date menggunakan format en_US.UTF-8:
user@host:~$ date
Tue May 27 17:04:37 UTC 2025
user@host:~$ export LANG=fr_FR.UTF-8
user@host:~$ date
mar. 27 mai 2025 17:04:51 UTC

# environmen variabel PATH berisi daftar direktori yang dipisahkan dengan titik dua yang menentukan di mana perintah yang dapat dieksekusi berada:
user@host:~$ echo $PATH
/home/user/.local/bin:/home/user/bin:/usr/share/Modules/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
user@host:~$ export PATH=${PATH}:/home/user/sbin

# contoh menambahkan direktori /home/user/sbin ke variabel PATH
user@host:~$ export PATH=${PATH}:/home/user/sbin

Atur Editor Teks Default

user@host:~$ export EDITOR=nano

Mengatur Variabel Secara Otomatis

Misalnya, untuk mengganti editor default saat login lewat SSH, ubah variabel EDITOR di file ~/.bash_profile:

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs
export EDITOR=nano

Cara terbaik untuk menyesuaikan pengaturan yang mempengaruhi semua akun pengguna adalah dengan membuat file dengan ekstensi .sh berisi perubahan tersebut, dan menambahkan file ini ke direktori /etc/profile.d. Untuk membuat file di direktori /etc/profile.d, masuklah sebagai pengguna root.

Alias Bash

user@host:~$ alias hello='echo "Hello, this is a long string."'
user@host:~$ hello
Hello, this is a long string.

Membatalkan Pengaturan dan Menghapus Ekspor Variabel dan Alias

user@host:~$ echo $file1
/tmp/tmp.z9pXW0HqcC
user@host:~$ unset file1

# unexport
user@host:~$ export -n PS1

# unset alias
user@host:~$ unalias hello

Buat dan Jalankan Skrip Bash Shell

Tentukan Interpreter Perintah

Baris pertama dari sebuah file skrip dimulai dengan notasi #!, yang biasa disebut shebang atau hash-bang, dari nama dua karakter itu, sharp atau hash dan bang.

#!/usr/bin/bash

Jalankan Skrip Bash

Skrip shell harus memiliki izin eksekusi. Gunakan perintah chmod dan chown untuk modifikasi. Jika skrip ada di list env PATH maka bisa langsung dijalankan dengan nama skripnya. Jika tidak jalankan skrip dari direktori saat ini, ./scriptname.

user@host:~$ which hello
~/bin/hello
user@host:~$ echo $PATH
/home/user/.local/bin:/home/user/bin:/sbin:/bin:/usr/sbin:/usr/bin:...

Posisi Parameter

Jika lebih dari 1 digit harus pakai kurung kurawal. Perintah bawaan set digunakan untuk menukar nilai parameter posisi 3 dan 4. Perlu dicatat bahwa parameter posisi 5 sampai 10 tidak dirujuk dan akan dihapus sebagai akibatnya.

#!/usr/bin/bash

echo "Parameter 0: $0"
echo "Parameter 1: $1"
echo "Parameter 2: $2"
echo "Parameter 10 (incorrect): $10"
echo "Parameter 10 (correct): ${10}"

set -- "$1" "$2" "$4" "$3"

echo
echo "Parameter 3 (after set): $3"
echo "Parameter 4 (after set): $4"
echo "Parameter 10 (after set): ${10}"

# output
user@host:~$ ./params.sh 1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10th
Parameter 0: ./params.sh
Parameter 1: 1st
Parameter 2: 2nd
Parameter 10 (incorrect): 1st0
Parameter 10 (correct): 10th

Parameter 3 (after set): 4th
Parameter 4 (after set): 3rd
Parameter 10 (after set): 5

Kutip Karakter Khusus

Gunakan karakter backslash (), tanda kutip tunggal (‘’), atau tanda kutip ganda (“”) untuk menghapus (atau menghindari) makna khusus dari karakter-karakter spesial.

Misalnya, untuk menggunakan perintah echo agar menampilkan string literal # bukan komentar, karakter # harus tidak diartikan sebagai komentar.

user@host:~$ echo # not a comment

user@host:~$ echo \# not a comment
# not a comment

user@host:~$ echo # not a comment #

user@host:~$ echo \# not a comment #
# not a comment

user@host:~$ echo \# not a comment \#
# not a comment #

user@host:~$ echo '# not a comment #'
# not a comment #

user@host:~$ var=$(hostname -s); echo $var
host

user@host:~$ echo "***** hostname is ${var} *****"
***** hostname is host *****

user@host:~$ echo "Will variable $var evaluate to $(hostname -s)?"
Will variable host evaluate to host?

user@host:~$ echo "\"Hello, world\""
"Hello, world"

user@host:~$ echo '"Hello, world"'
"Hello, world"

user@host:~$ echo 'Will variable $var evaluate to $(hostname -s)?'
Will variable $var evaluate to $(hostname -s)?

Tampilkan Output dari Script Shell

user@host:~$ cat ~/bin/hello
#!/usr/bin/bash

echo "Hello, world"

# coba jalankan
user@host:~$ hello
Hello, world

# contoh skrip redirect STDERR
user@host:~$ cat ~/bin/hello
#!/usr/bin/bash

echo "Hello, world"
echo "ERROR: Houston, we have a problem." >&2

# coba jalankan
user@host:~$ hello 2> hello.log
Hello, world

user@host:~$ cat hello.log
ERROR: Houston, we have a problem.

Gunakan Loop untuk Mengulang Perintah

Proses Item dari Command Line

# sintax dasar
for VARIABLE in LIST; do
    COMMAND VARIABLE
done

# contoh 1
user@host:~$ for HOST in host1 host2 host3; do echo $HOST; done
host1
host2
host3

# contoh 2
user@host:~$ for HOST in host{1,2,3}; do echo $HOST; done
host1
host2
host3

# contoh 3
user@host:~$ for HOST in host{1..3}; do echo $HOST; done
host1
host2
host3

# contoh 4
user@host:~$ for FILE in file{a..c}; do ls $FILE; done
filea
fileb
filec

# Gunakan perulangan for untuk mencetak paket kernel yang terpasang beserta tanggalnya dalam sebuah string:
user@host:~$ for PACKAGE in $(rpm -qa | grep kernel); \
do echo "$PACKAGE was installed on \
$(date -d @$(rpm -q --qf "%{INSTALLTIME}\n" $PACKAGE))"; done
kernel-tools-libs-5.14.0-70.2.1.el9_0.x86_64 was installed on Thu...
kernel-tools-5.14.0-70.2.1.el9_0.x86_64 was installed on Thu Mar...
kernel-core-5.14.0-70.2.1.el9_0.x86_64 was installed on Thu Mar...
kernel-modules-5.14.0-70.2.1.el9_0.x86_64 was installed on Thu...
kernel-5.14.0-70.2.1.el9_0.x86_64 was installed on Thu Mar 24...

# menampilkan bilangan genap
user@host:~$ for EVEN in $(seq 2 2 10); do echo "$EVEN"; done
2
4
6
8
10

Perintah Bersyarat

Kode Keluar Script Bash

Kode keluar adalah nilai dari 0 sampai 255 yang menunjukkan bagaimana sebuah proses selesai. Semua perintah menghasilkan kode keluar setelah selesai.

# Skrip berikut mengembalikan kode keluar 0 saat berhasil dijalankan:
[user@host bin]$ cat hello
#!/usr/bin/bash
echo "Hello, world"
exit 0

# ambil kode keluar dari perintah terakhir dari variabel bawaan $?:
[user@host bin]$ echo $?
0

# Perintah /bin/true selalu mengembalikan kode keluar 0.
[user@host bin]$ /bin/true
[user@host bin]$ echo $?
0

# Perintah /bin/false selalu mengembalikan kode keluar 1.
[user@host bin]$ /bin/false
[user@host bin]$ echo $?
1

Tes untuk Kondisi

Buat pernyataan bersyarat dengan membandingkan nilai menggunakan operator seperti lebih besar dari (-gt), kurang dari (-lt), sama dengan (-eq), atau tidak sama dengan (-ne). Selain itu juga bisa memeriksa status lain, seperti apakah file biasa (-f) atau direktori (-d) ada, atau apakah pengguna saat ini punya izin baca (-r).

user@host:~$ test 1 -gt 0 ; echo $?
0

user@host:~$ test 0 -gt 1 ; echo $?
1

user@host:~$ [[ 1 -eq 1 ]]; echo $?
0
user@host:~$ [[ 1 -ne 1 ]]; echo $?
1
user@host:~$ [[ 8 -gt 2 ]]; echo $?
0
user@host:~$ [[ 2 -ge 2 ]]; echo $?
0
user@host:~$ [[ 2 -lt 2 ]]; echo $?
1

user@host:~$ [[ abc = abc ]]; echo $?
0
user@host:~$ [[ abc == def ]]; echo $?
1
user@host:~$ [[ abc != def ]]; echo $?
0

# (-z) artinya zero length
user@host:~$ STRING=''; [[ -z "$STRING" ]]; echo $?
0
# (-n) artinya non-zero length
user@host:~$ STRING='abc'; [[ -n "$STRING" ]]; echo $?
0

Perulangan While dan Until

Perulangan while:

# sintax dasar
while <CONDITION>; do
    <STATEMENT>
    ...
    <STATEMENT>
done

# contoh penggunaan
user@host:~$ x=1; while [[ $x -le 5 ]]; do
    echo "x is $x"
    x=$((x + 1))
done; echo "Finished"
x is 1
x is 2
x is 3
x is 4
x is 5
Finished

Perulangan until:

# sintax dasar
until <CONDITION>; do
    <STATEMENT>
    ...
    <STATEMENT>
done

# contoh penggunaan
user@host:~$ x=5; until [[ $x -lt 1 ]]; do
    echo "x is $x"
    x=$((x - 1))
done; echo "Finished"
x is 5
x is 4
x is 3
x is 2
x is 1
Finished

Kondisional if then

# sintax dasar
if <CONDITION>; then
    <STATEMENT>
    ...
    <STATEMENT>
fi

# contoh penggunaan
user@host:~$ systemctl is-active psacct > /dev/null 2>&1
user@host:~$ if [[ $? -ne 0 ]]; then sudo systemctl start psacct; fi

Pernyataan else

# sintax dasar
if <CONDITION>; then
    <STATEMENT>
    ...
    <STATEMENT>
else
    <STATEMENT>
    ...
    <STATEMENT>
fi

# contoh penggunaan
user@host:~$ systemctl is-active psacct > /dev/null 2>&1
user@host:~$ if [[ $? -ne 0 ]]; then
    sudo systemctl start psacct
else
    sudo systemctl stop psacct
fi

Pernyataan elif

# sintax dasar
if <CONDITION>; then
    <STATEMENT>
    ...
    <STATEMENT>
elif <CONDITION>; then
    <STATEMENT>
    ...
    <STATEMENT>
else
    <STATEMENT>
    ...
    <STATEMENT>
fi

# contoh penggunaan
user@host:~$ systemctl is-active mariadb > /dev/null 2>&1
user@host:~$ MARIADB_ACTIVE=$?
user@host:~$ sudo systemctl is-active postgresql > /dev/null 2>&1
user@host:~$ POSTGRESQL_ACTIVE=$?
user@host:~$ if [[ "$MARIADB_ACTIVE" -eq 0 ]]; then
    mysql
elif [[ "$POSTGRESQL_ACTIVE" -eq 0 ]]; then
    psql
else
    sqlite3
fi

Menggunakan Regular Expressions untuk Aplikasi Praktis

Tulis Regular Expressions

Regular Expressions menyediakan mekanisme pencocokan pola untuk menemukan konten tertentu. Perintah grep, less, dan vim adalah beberapa perintah yang bisa menggunakan Regular Expressions.

Regular Expression Sederhana

# mencari di file berikut untuk semua kemunculan pola "cat":
cat
dog
concatenate
dogma
category
educated
boondoggle
vindication
chilidog

# String "cat" merupakan padanan persis dari karakter "c", diikuti oleh karakter "a" dan "t" tanpa karakter lain di antaranya.
# Pencarian dalam file menggunakan string "cat" sebagai ekspresi reguler menghasilkan kecocokan berikut:
cat
concatenate
category
educated
vindication

Cocokkan Awal dan Akhir Baris

# Untuk mencocokkan hanya di awal baris, gunakan karakter topi (^). Untuk mencocokkan hanya di akhir baris, gunakan tanda dolar ($).

# awal: ^cat
cat
category

# ahir: dog$
dog
chilidog

# awal dan ahir: ^cat$
cat

Regular Expressions Dasar dan Lanjutan

Salah satu perbedaan antara Regular Expressions dasar dan Regular Expressions yang diperluas terletak pada perilaku karakter khusus , +, ?, (, ), {, dan }. Dalam sintaks Regular Expressions dasar, karakter-karakter ini memiliki arti khusus hanya jika diawali dengan karakter garis miring terbalik . Dalam sintaks Regular Expressions yang diperluas, kebalikannya: karakter-karakter ini memiliki arti khusus kecuali jika diawali dengan karakter garis miring terbalik.

Perbedaan kecil lainnya berlaku pada cara penanganan karakter ^, $, dan *.

Penggunaan Wildcard dan Pengganda dalam Regular Expressions

Sintaks Dasar Sintaks Extended Deskripsi
.   Tanda titik (.) mencocokkan satu karakter apa pun.
?   Item sebelumnya bersifat opsional dan dicocokkan paling banyak satu kali.
*   Item sebelumnya dicocokkan nol kali atau lebih.
\+   Item sebelumnya dicocokkan satu kali atau lebih.
\{n\} {n} Item sebelumnya dicocokkan tepat n kali.
\{n,\} {n,} Item sebelumnya dicocokkan n kali atau lebih.
\{,m\} {,m} Item sebelumnya dicocokkan paling banyak m kali.
\{n,m\} {n,m} Item sebelumnya dicocokkan setidaknya n kali, tetapi tidak lebih dari m kali.
[:alnum:]   Karakter alfanumerik: [:alpha:] dan [:digit:]; dalam locale ‘C’ dan pengkodean ASCII, ekspresi ini sama dengan [0-9A-Za-z].
[:alpha:]   Karakter alfabet: [:lower:] dan [:upper:]; dalam locale ‘C’ dan pengkodean ASCII, ekspresi ini sama dengan [A-Za-z].
[:blank:]   Karakter kosong: spasi dan tab.
[:cntrl:]   Karakter kontrol. Dalam ASCII, karakter ini memiliki kode oktal 000 hingga 037, dan 177 (DEL).
[:digit:]   Digit: 0 1 2 3 4 5 6 7 8 9.
[:graph:]   Karakter grafis: [:alnum:] dan [:punct:].
[:lower:]   Huruf kecil; dalam locale ‘C’ dan pengkodean ASCII: a b c d e f g h i j k l m n o p q r s t u v w x y z.
[:print:]   Karakter yang dapat dicetak: [:alnum:], [:punct:], dan spasi.
[:punct:]   Karakter tanda baca; dalam locale ‘C’ dan pengkodean ASCII: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ { | } ~.
[:space:]   Karakter spasi; dalam locale ‘C’, meliputi tab, newline, vertical tab, form feed, carriage return, dan spasi.
[:upper:]   Huruf besar; dalam locale ‘C’ dan pengkodean ASCII: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z.
[:xdigit:]   Digit heksadesimal: 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f.
\b   Mencocokkan string kosong di awal atau akhir kata.
\B   Mencocokkan string kosong dengan syarat tidak di awal atau akhir kata.
\<   Mencocokkan string kosong di awal kata.
\>   Mencocokkan string kosong di akhir kata.
\w   Mencocokkan konstituen kata. Sinonim untuk [_[:alnum:]].
\W   Mencocokkan non-konstituen kata. Sinonim untuk [^_[:alnum:]].
\s   Mencocokkan spasi putih (white space). Sinonim untuk [[:space:]].
\S   Mencocokkan non-spasi putih. Sinonim untuk [^[:space:]].

Mencocokkan Regular Expressions dari Command Line

Isolasi Data dengan Perintah Grep

user@host:~$ grep '^computer' /usr/share/dict/words
computer
computerese
computerise
computerite
computerizable
computerization
computerize
computerized
computerizes

root@host:~# ps aux | grep chrony
chrony 915  0.0  0.0  10140  2516 ?     S  20:19 0:00 /usr/sbin/chronyd -F 2
root   2297  0.0  0.0 228220 1936 pts/1 S+ 20:24 0:00 grep --color=auto chrony

Opsi Perintah Grep

Opsi Fungsi
-i Menggunakan ekspresi reguler yang diberikan dan tidak menerapkan kepekaan huruf besar/kecil (case-insensitive).
-v Menampilkan hanya baris yang tidak mengandung kecocokan dengan ekspresi reguler.
-r Mencari data yang cocok dengan ekspresi reguler secara rekursif dalam sekelompok file atau direktori.
-A NUMBER Menampilkan NUMBER baris setelah kecocokan ekspresi reguler.
-B NUMBER Menampilkan NUMBER baris sebelum kecocokan ekspresi reguler.
-e Jika beberapa opsi -e digunakan, maka beberapa ekspresi reguler dapat diberikan dan digunakan dengan logika OR.
-E Menggunakan sintaks ekspresi reguler extended (diperluas) sebagai pengganti basic saat memproses ekspresi reguler yang diberikan.

Contoh Perintah Grep

# pencarian case-insensitive
user@host:~$ grep -i serverroot /etc/httpd/conf/httpd.conf

# reverse search
user@host:~$ grep -v -i server /etc/hosts

# menghindari baris komentar (yang diawali dengan # atau ;)
user@host:~$ grep -v '^[#;]' /etc/systemd/system/multi-user.target.wants/rsyslog.service

# pencarian dengan lebih dari satu regex bersamaan
root@host:~# grep -e 'pam_unix' -e 'user root' -e 'Accepted publickey' /var/log/secure | less

Menjadwalkan Tugas Pengguna

Tugas Pengguna Tertunda (deferred)

Misalnya ketika konfigurasi firewall, jadwalkan agar 15 menit lagi kembali ke pengaturan lama. Konfigurasi firewall diubah. Jika berhasil, matikan jadwal reset firewall. Jika konfigurasi gagal akan terkunci dari server sendiri, tapi dalam waktu 15 menit akan kembali seperti semula.

Jadwalkan Tugas Pengguna yang Ditunda

Gunakan perintah at TIMESPEC untuk mulai memasukkan tugas baru yang akan dijadwalkan. Perintah at membaca dari STDIN untuk mendapatkan perintah yang akan dijalankan.

# 5 menit dari sekarang
user@host:~$ at now +5min < myfile
warning: commands will be executed using /bin/sh
job 2 at Wed May 14 20:40:00 2025

# dengan waktu spesifik
user@host:~$ at 21:03 < myfile
warning: commands will be executed using /bin/sh
job 3 at Wed May 14 21:03:00 2025

Berikut beberapa contoh spesifikasi waktu yang bisa dipakai:

Untuk spesifikasi waktu valid lainnya, lihat dokumen timespec lokal di bagian referensi.

Periksa dan Kelola Tugas Pengguna yang Ditunda

# Untuk melihat sekilas pekerjaan yang menunggu untuk pengguna saat ini, gunakan perintah atq atau at -l.
user@host:~$ atq
28  Mon May 19 05:13:00 2025 a user
29  Tue May 20 16:00:00 2025 h user
30  Wed May 21 12:00:00 2025 a user

# Gunakan perintah at -c NOMORPEKERJAAN untuk memeriksa perintah yang dijalankan ketika daemon atd mengeksekusi sebuah pekerjaan.

Pengguna biasa hanya bisa melihat dan mengatur tugas mereka sendiri. Pengguna root bisa melihat dan mengatur semua tugas untuk semua pengguna.

Hapus Tugas dari Jadwal

Perintah atrm JOBNUMBER menghapus tugas terjadwal. Hapus tugas terjadwal ketika tidak lagi membutuhkannya, misalnya ketika konfigurasi firewall jarak jauh berhasil dan tidak perlu meresetnya.

Jadwalkan Tugas Pengguna Berulang (recurring)

Gunakan perintah crontab untuk mengelola tugas terjadwal. Daftar berikut menunjukkan perintah yang dapat digunakan pengguna untuk mengelola tugas:

Command Kegunaan
crontab -l Menampilkan daftar job (tugas terjadwal) untuk pengguna saat ini.
crontab -r Menghapus semua job untuk pengguna saat ini.
crontab -e Mengedit job untuk pengguna saat ini (membuka editor default).
crontab filename Menghapus semua job, lalu menggantinya dengan job yang dibaca dari file filename. Perintah ini menggunakan input dari stdin jika tidak ada file yang ditentukan.

Pengguna dengan hak istimewa dapat menggunakan opsi -u pada perintah crontab untuk mengelola tugas bagi pengguna lain.

Format Tugas Pengguna

Kolom-kolom dalam file crontab muncul dalam urutan berikut:

* * * * * perintah
│ │ │ │ │
│ │ │ │ └─── Hari dalam Minggu (0-7, 0=Minggu)
│ │ │ └───── Bulan (1-12)
│ │ └─────── Tanggal (1-31)
│ └───────── Jam (0-23)
└─────────── Menit (0-59)

Perintah akan dieksekusi ketika kolom Tanggal dalam bulan atau Tanggal dalam minggu menggunakan nilai yang sama selain karakter *, artinya perintah akan berjalan jika salah satu kondisi terpenuhi (bukan harus keduanya).. Misalnya, untuk menjalankan perintah pada tanggal 11 setiap bulan, dan setiap hari Jumat pukul 12:15 (format 24 jam), gunakan format pekerjaan berikut:

15 12 11 * Fri command

Contoh Tugas Pengguna Berulang

# Tugas berikut mengeksekusi perintah /usr/local/bin/yearly_backup pada pukul 09:00:00 pada tanggal 3 Februari, setiap tahun.
# Februari direpresentasikan sebagai angka 2 pada contoh, karena merupakan bulan kedua dalam setahun.
0 9 3 2 * /usr/local/bin/yearly_backup

# Tugas berikut mengirimkan email yang berisi kata "Chime" kepada pemilik tugas ini setiap lima menit setelah setiap jam mulai pukul 09:00 hingga 16:59 pada hari Jumat di bulan Juli.
*/5 9-16 * Jul 5 echo "Chime"

# Tugas berikut menjalankan perintah /usr/local/bin/daily_report setiap hari dari Senin hingga Jumat pada pukul dua menit sebelum tengah malam.
58 23 * * 1-5 /usr/local/bin/daily_report

# The following job executes the mutt command to send the Checking in mail message to the developer@example.com recipient every day from Monday to Friday at 09:00.
0 9 * * 1-5 mutt -s "Checking in" developer@example.com % Hi there, just checking in.

Menjadwalkan Tugas Sistem

Timer Systemd

Mulai dari Red Hat Enterprise Linux 10, daemon dan pengelola layanan systemd menggantikan daemon cron tradisional untuk sebagian besar tugas sistem penjadwalan, melalui unit pengatur waktu systemd.

Daftar Unit Timer

root@host:~# systemctl list-units -t timer
  UNIT                         LOAD   ACTIVE SUB     DESCRIPTION
  dnf-makecache.timer          loaded active waiting dnf makecache --timer
  fstrim.timer                 loaded active waiting Discard unused ...
  fwupd-refresh.timer          loaded active waiting Refresh fwupd ...
  logrotate.timer              loaded active waiting Daily rotation ...
...output omitted...

Daftar File Unit Timer

root@host:~# systemctl list-unit-files -t timer
UNIT FILE                      STATE    PRESET
dnf-makecache.timer            enabled  enabled
fstrim.timer                   enabled  enabled
fwupd-refresh.timer            enabled  enabled
insights-client.timer          disabled disabled
logrotate.timer                enabled  enabled
mdadm-last-resort@.timer       static   -
mdcheck_continue.timer         disabled disabled
mdcheck_start.timer            disabled disabled
mdmonitor-oneshot.timer        disabled disabled
plocate-updatedb.timer         enabled  enabled
podman-auto-update.timer       disabled disabled
raid-check.timer               enabled  enabled
rhc-canonical-facts.timer      disabled disabled
systemd-sysupdate-reboot.timer disabled disabled
systemd-sysupdate.timer        disabled disabled
systemd-tmpfiles-clean.timer   static   -

16 unit files listed.

Memulai dan Menghentikan Unit Timer Systemd

# memulai unit timer
root@host:~# systemctl start logrotate.timer

# menghentikan unit timer
root@host:~# systemctl stop logrotate.timer

Mengaktifkan dan Menonaktifkan Unit Timer Systemd

# mengaktifkan dari mulai boot
root@host:~# systemctl enable logrotate.timer

# mengaktifkan langsung
root@host:~# systemctl enable --now logrotate.timer

# menonaktifkan dari mulai boot
root@host:~# systemctl disable logrotate.timer

# menonaktifkan langsung
root@host:~# systemctl disable --now logrotate.timer

Status Unit Timer

root@host:~# systemctl status logrotate.timer
● logrotate.timer - Daily rotation of log files
     Loaded: loaded (/usr/lib/.../logrotate.timer; enabled; preset: enabled)
     Active: active (waiting) since Wed 2025-05-28 23:28:22 UTC; 54min ago
 Invocation: 3a95de54d4c04c539d43b3808c27e99a
    Trigger: Fri 2025-05-30 00:48:43 UTC; 24h left
   Triggers: ● logrotate.service
       Docs: man:logrotate(8)
             man:logrotate.conf(5)

May 28 ... workstation systemd[1]: Started logrotate.timer - Daily ...

Contoh File Konfigurasi Unit Timer

Paket sysstat menyediakan unit timer systemd, yaitu layanan sysstat-collect.timer, untuk mengumpulkan statistik sistem setiap 10 menit.

# contoh isi file /usr/lib/systemd/system/sysstat-collect.timer
...output omitted...
[Unit]
Description=Run system activity accounting tool every 10 minutes

[Timer]
OnCalendar=*:00/10

[Install]
WantedBy=sysstat.service
# setelah mengubah konfigurasi unit timer, lakukan reload
root@host:~# systemctl daemon-reload

# setelah itu aktifkan secara langsung
root@host:~# systemctl enable --now UNITNAME.timer

Jangan memodifikasi file konfigurasi unit apa pun di direktori /usr/lib/systemd/system. Unit systemd akan menimpa semua perubahan konfigurasi yang dilakukan di direktori /usr/lib/systemd/system. Untuk memodifikasi konfigurasi unit systemd, salin file konfigurasi unitnya dari direktori /usr/lib/systemd/system ke direktori /etc/systemd/system, lalu modifikasi file yang disalin untuk mencegah pembaruan paket penyedia menimpa perubahan tersebut. Jika terdapat dua file dengan nama yang sama di direktori /usr/lib/systemd/system dan /etc/systemd/system, maka unit timer systemd akan memparsing file di direktori /etc/systemd/system.

Alat Systemd-tempfiles

Saat sistem booting, salah satu unit layanan systemd pertama yang diluncurkan adalah layanan systemd-tmpfiles-setup. Layanan ini menjalankan perintah systemd-tmpfiles, yang membaca instruksi dari file konfigurasi /usr/lib/tmpfiles.d/*.conf, /run/tmpfiles.d/*.conf, dan /etc/tmpfiles.d/*.conf. File konfigurasi ini mencantumkan file dan direktori yang diperintahkan kepada layanan systemd-tmpfiles-setup untuk dibuat, dihapus, atau diamankan dengan izin.

Bersihkan File Sementara dengan Timer Systemd

# lihat isi file konfigurasi unit systemd-tmpfiles-clean.timer:
user@host:~$ systemctl cat systemd-tmpfiles-clean.timer
# /usr/lib/systemd/system/systemd-tmpfiles-clean.timer
#  SPDX-License-Identifier: LGPL-2.1-or-later
#
#  This file is part of systemd.
...output omitted...

[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
ConditionPathExists=!/etc/initrd-release

[Timer]
OnBootSec=15min ---> unit systemd-tmpfiles-clean.service akan dijalankan 15 menit setelah sistem menyala
OnUnitActiveSec=1d ---> pemicu lebih lanjut untuk unit systemd-tmpfiles-clean.service terjadi 24 jam setelah unit layanan terakhir diaktifkan.

# misalnya OnUnitActiveSec diubah jadi 30min agar tidak terlalu lama, setelah diubah jlakukan reload
root@host:~# systemctl daemon-reload

# lihat status unit timer
root@host:~# systemctl status systemd-tmpfiles-clean.timer

Bersihkan File Sementara Secara Manual

Perintah systemd-tmpfiles --clean memparsing file konfigurasi yang sama seperti perintah systemd-tmpfiles --create; alih-alih membuat file dan direktori, perintah ini menghapus semua file yang tidak diakses, diubah, atau dimodifikasi lebih baru daripada usia maksimum yang ditentukan dalam file konfigurasi.

Sintaksnya terdiri dari kolom-kolom berikut: Tipe, Path, Mode, UID, GID, Umur, dan Argumen. Contoh berikut menghapus konfigurasi di direktori /run/systemd/seats:

d /run/systemd/seats 0755 root root -

Contoh berikut menghapus file dari direktori /home/student yang tidak diakses, diubah, atau dimodifikasi selama lebih dari satu hari:

D /home/student 0700 student student 1d

Contoh berikut membuat tautan simbolis ke direktori /etc/fstab:

L /run/fstablink - root root - /etc/fstab

Prioritas File Konfigurasi

File konfigurasi layanan systemd-tmpfiles-clean dapat berada di tiga lokasi:

Jika sebuah file di direktori /run/tmpfiles.d/ memiliki nama file yang sama dengan file di direktori /usr/lib/tmpfiles.d/, maka layanan akan menggunakan file di direktori /run/tmpfiles.d/. Jika sebuah file di direktori /etc/tmpfiles.d/ memiliki nama file yang sama dengan file di direktori /run/tmpfiles.d/ atau /usr/lib/tmpfiles.d/, maka layanan akan menggunakan file di direktori /etc/tmpfiles.d/.

Menjadwal Tugas Sistem Berkala dengan Cron

File /etc/crontab dan file-file lain di direktori /etc/cron.d menentukan tugas sistem yang berulang. Selalu buat file crontab kustom di direktori /etc/cron.d untuk menjadwalkan pekerjaan sistem yang berulang. Tempatkan file crontab kustom di direktori /etc/cron.d agar pembaruan paket tidak menimpa file /etc/crontab.

Sistem crontab juga termasuk repositori untuk skrip yang dijalankan setiap jam, hari, minggu, atau bulan. Repositori ini ditempatkan di direktori /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, atau /etc/cron.monthly.

File Crontab Sistem Default

Setiap skrip di direktori /etc/cron.hourly adalah pekerjaan yang dijalankan melalui file crontab sistem sekunder /etc/cron.d/0hourly.

Membuat Cron Job Sistem

Untuk menyiapkan tugas cron sistem, tambahkan file crontab di direktori /etc/cron.d.

# contoh file bernama /etc/cron.d/timestamp_example menambahkan file sementara bernama /tmp/timestamp_example.txt dengan output dari perintah date setiap dua menit
# Example timestamp cronjob
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
*/2 * * * * root date >> /tmp/timestamp_example.txt

Jalankan Perintah Berkala dengan Anacron

Perintah anacron menggunakan skrip run-parts untuk menjalankan pekerjaan harian, mingguan, atau bulanan dari file konfigurasi /etc/anacrontab secara berulang. Perintah anacron memastikan bahwa tugas terjadwal selalu berjalan dan tidak terlewatkan secara tidak sengaja karena sistem dimatikan atau dihibernasi.

# File /etc/anacrontab berisi empat kolom per baris, seperti yang ditunjukkan pada contoh berikut:
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly

Hubungan Antara Cron dan Anacron

Layanan penjadwal perintah crond.service dan perintah anacron bekerja bersama sebagai berikut:


Menganalisis dan Menyimpan Log

Pencatatan log sistem

RHEL menggunakan standar logging berbasis protokol syslog untuk log sistem. Layanan systemd-journald dan rsyslog menangani pesan syslog di RHEL

Layanan systemd-journald mengumpulkan pesan events dari banyak sumber:

File Log Jenis Pesan yang Disimpan
/var/log/messages Sebagian besar pesan syslog dicatat di sini.
/var/log/secure Pesan tentang peristiwa keamanan dan autentikasi.
/var/log/maillog Pesan tentang server email (mail server).
/var/log/cron Pesan tentang eksekusi job terjadwal (cron).
/var/log/boot.log Pesan konsol tentang startup sistem yang tersembunyi oleh layar startup grafis, serta pesan syslog yang dikirim ke fasilitas local7.

Catat Events ke Sistem

Setiap pesan log dikategorikan berdasarkan fasilitas (sub-sistem yang menghasilkan pesan) dan prioritas (tingkat keparahan pesan).

Tabel berikut mencantumkan fasilitas syslog standar:

Kode Fasilitas Deskripsi Fasilitas
0 kern Pesan kernel.
1 user Pesan tingkat pengguna.
2 mail Pesan sistem email.
3 daemon Pesan daemon sistem.
4 auth Pesan autentikasi dan keamanan.
5 syslog Pesan internal syslog.
6 lpr Pesan printer.
7 news Pesan berita jaringan (network news).
8 uucp Pesan protokol UUCP.
9 cron Pesan daemon penjadwalan (cron).
10 authpriv Pesan otorisasi non-sistem.
11 ftp Pesan protokol FTP.
16-23 local0 - local7 Pesan lokal khusus (custom local messages).

Tabel berikut mencantumkan prioritas syslog standar dari yang tertinggi ke yang terendah:

Kode Prioritas Deskripsi Prioritas
0 emerg Sistem tidak dapat digunakan (unusable).
1 alert Tindakan harus segera diambil.
2 crit Kondisi kritis (critical condition).
3 err Kondisi kesalahan non-kritis (noncritical error).
4 warning Kondisi peringatan (warning condition).
5 notice Kejadian normal tetapi signifikan.
6 info Kejadian informasional.
7 debug Pesan tingkat debugging.

Layanan rsyslog

Layanan rsyslog menjalankan logging syslog. Layanan rsyslog menggunakan fasilitas dan prioritas pesan log untuk menentukan cara menanganinya. Aturan menentukan fasilitas dan prioritas di file /etc/rsyslog.conf dan di file manapun dalam direktori /etc/rsyslog.d yang berakhiran .conf.

# Aturan berikut di file /etc/rsyslog.conf menyimpan pesan yang dikirim ke fasilitas authpriv dengan prioritas apa pun ke file /var/log/secure:
authpriv.* /var/log/secure

# Aturan berikut menyimpan pesan yang dikirim ke fasilitas authpriv dengan prioritas warning, notice, info, atau debug ke file /var/log/secure:
authpriv.warning /var/log/secure

Contoh Aturan Layanan Rsyslog

#### RULES ####

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
# The none keyword in the priority field indicates that no messages for the indicated facility are stored in the given file, to limit stored messages.
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# The rsyslog.conf file has a setting to print all the syslog messages with the emerg priority to the terminals of all logged-in users.
# Everybody gets emergency messages
*.emerg                                                 :omusrmsg:*

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log

Rotasi File Log

Perintah logrotate dijalankan oleh unit timer systemd dan memutar file log supaya tidak memakan terlalu banyak ruang di direktori /var/log. Ketika sebuah file log diputar, namanya akan diganti dengan ekstensi yang menunjukkan tanggal rotasinya.

Misalnya, file /var/log/messages akan diganti namanya menjadi /var/log/messages-20250620 saat diputar pada 2025-06-20. Setelah file log sebelumnya diputar, file log baru dibuat dan layanan yang terkait dengan file log tersebut diberitahu.

Menganalisis Entri Log

Contoh berikut menjelaskan susunan pesan log di file log /var/log/secure.

Mar 20 20:11:48 localhost sshd[1433]: Failed password for student from 172.25.0.10 port 59344 ssh2

Pantau Event Log

Gunakan perintah tail -f /path/to/file untuk memantau event log.

Kirim Pesan Log Secara Manual

Perintah logger mengirim pesan ke layanan rsyslog. Secara default, perintah logger mengirim pesan tipe user dengan prioritas notice (user.notice) kecuali jika ditentukan lain dengan opsi -p. Berguna untuk menguji perubahan pada konfigurasi layanan rsyslog.

Misalnya, pesan log yang cocok dengan filter fasilitas atau prioritas local7.* disimpan di file /var/log/boot.log, berdasarkan aturan yang ditetapkan di file /etc/rsyslog.conf default. Jadi, untuk mengirim pesan ke layanan rsyslog dan mencatat pesan tersebut di file log /var/log/boot.log, jalankan perintah logger berikut:

root@host:~# logger -p local7.notice "Log entry created on host"

Cari Event di Jurnal Sistem

Daftar berikut menunjukkan beberapa kolom jurnal sistem untuk mencari baris yang relevan dengan proses atau event tertentu:

Sebagai contoh, perintah journalctl berikut menunjukkan semua entri jurnal terkait dengan layanan sshd.service dengan PID 2188:

root@host:~# journalctl _SYSTEMD_UNIT=sshd.service _PID=2188
Jun 09 12:57:21 workstation (sshd)[2188]: sshd.service: Referenced but...
Jun 09 12:57:21 workstation sshd[2188]: Server listening on 0.0.0.0 port 22.
Jun 09 12:57:21 workstation sshd[2188]: Server listening on :: port 22.

Penyimpanan Jurnal Sistem

Secara default, RHEL menyimpan log jurnal di direktori /run/log/journal dan dibersihkan setelah reboot.

Mengkonfigurasi Jurnal Sistem Permanen

Konfigurasikan layanan systemd-journald sebagai berikut untuk menyimpan jurnal sistem secara permanen setelah reboot:

# buat direktori
root@host:~# mkdir /var/log/journal

# Kosongkan jurnal saat ini ke penyimpanan.
root@host:~# journalctl --flush

# subdirektori di direktori /var/log/journal dg nama karakter hexadesimal yg berisi file dg ekstensi .journal
root@host:~# ls /var/log/journal
4ec03abd2f7b40118b1b357f479b3112
root@host:~# ls /var/log/journal/4ec03abd2f7b40118b1b357f479b3112
system.journal  user-1000.journal

Tinjau Entri Jurnal yang Berkaitan dengan Waktu Booting

# ambil entri hanya dari boot pertama
root@host:~# journalctl -b 1
...output omitted...

# ambil entri hanya dari boot kedua (argumen bisa digunakan jika sistem di reboot setidaknya 2x)
root@host:~# journalctl -b 2
...output omitted...

# list event booting sistem yang dikenali oleh perintah journalctl, dengan menggunakan opsi --list-boots.
root@host:~# journalctl --list-boots
  -6 27de... Wed 2025-06-04 20:04:32 EDT—Wed 2025-06-04 21:09:36 EDT
  -5 6a18... Tue 2025-06-26 08:32:22 EDT—Thu 2025-06-26 16:02:33 EDT
  -4 e2d7... Thu 2025-07-04 16:02:46 EDT—Fri 2025-07-04 20:59:29 EDT
  -3 45c3... Sat 2025-07-05 11:19:47 EDT—Sat 2025-07-05 11:53:32 EDT
  -2 dfae... Sat 2025-07-05 13:11:13 EDT—Sat 2025-07-05 13:27:26 EDT
  -1 e754... Sat 2025-07-05 13:58:08 EDT—Sat 2025-07-05 14:10:53 EDT
   0 ee2c... Mon 2025-07-07 09:56:45 EDT—Mon 2025-07-07 12:57:21 EDT

# ambil entri hanya dari boot saat ini
root@host:~# journalctl -b
...output omitted...

Rotasi Jurnal Sistem

Jurnal ini memiliki mekanisme rotasi log bawaan yang dipicu setiap bulan. Selain itu, sistem tidak mengizinkan jurnal melebihi 10% dari sistem file tempatnya berada, atau menyisakan kurang dari 15% ruang kosong pada sistem file. Nilai-nilai ini dapat dimodifikasi untuk jurnal runtime dan persistent di file konfigurasi /etc/systemd/journald.conf. Proses systemd-journald mencatat batasan ukuran jurnal saat ini ketika dimulai.

# menampilkan ukuran limit entri jurnal
[user@host ~]$ journalctl | grep -E 'Runtime Journal|System Journal'
Jun 10 22:22:57 localhost systemd-journald[263]: Runtime Journal (/run/log/journal/93c43a50cada46e39819e0da68f790a2) is 4.2M, max 34.1M, 29.8M free.
Jun 10 22:23:01 host systemd-journald[740]: Runtime Journal (/run/log/journal/da54d37671ac4429bcdfacfe7bebb5a1) is 4.2M, max 34.1M, 29.8M free.
Jun 10 22:30:50 host systemd-journald[740]: System Journal (/var/log/journal/da54d37671ac4429bcdfacfe7bebb5a1) is 8M, max 997.3M, 989.3M free.
...output omitted...

Menemukan File Konfigurasi Jurnal

Mulai dari RHEL 10, file /etc/systemd/journald.conf tidak ada saat instalasi. Layanan systemd-journald membaca pengaturan default-nya dari file konfigurasi /usr/lib/systemd/journald.conf.

Untuk mengubah perilaku jurnal, jangan mengedit file konfigurasi /usr/lib/systemd/journald.conf secara langsung. Sebaliknya, salin file /usr/lib/systemd/journald.conf ke direktori /etc/systemd, lalu hapus komentar dan ubah pengaturan yang sesuai di file /etc/systemd/journald.conf yang dihasilkan. Pengaturan konfigurasi di file /etc/systemd/journald.conf lebih diutamakan daripada pengaturan default di file /usr/lib/systemd/journald.conf.

Konfigurasi Rotasi Jurnal Otomatis

Untuk mengkonfigurasi rotasi jurnal otomatis untuk jurnal persisten atau jurnal hanya-runtime, atur parameter berikut di file /etc/systemd/journald.conf.

SystemMaxUse dan RuntimeMaxUse: Jumlah maksimum ruang sistem file yang dapat digunakan jurnal. Nilai ini adalah 10% dari total ruang sistem file secara default, dan dibatasi hingga 4 GB.

SystemMaxFileSize dan RuntimeMaxFileSize: Ukuran file maksimum jurnal sebelum dirotasi. Nilai ini adalah seperdelapan dari nilai SystemMaxUse/RuntimeMaxUse secara default, dan dibatasi hingga 128 M, dan biasanya mendukung penyimpanan tujuh file jurnal yang dirotasi sebagai riwayat. Jika mode pemadatan jurnal diaktifkan (default), nilai ini dibatasi hingga 4 GB.

SystemKeepFree dan RuntimeKeepFree: Ruang sistem file kosong minimum yang harus tersisa sebelum jurnal yang diarsipkan dihapus. Setidaknya 15% dari total ruang sistem file selalu dibiarkan kosong secara default. Nilai ini dibatasi hingga 4 GB.

# Setelah mengedit file konfigurasi /etc/systemd/journald.conf, mulai ulang layanan systemd-journald untuk menerapkan perubahan konfigurasi.
root@host:~# systemctl restart systemd-journald

Mengelola Jam dan Zona Waktu Lokal

# menampilkan gambaran umum dari pengaturan sistem terkait waktu saat ini
user@host:~$ timedatectl
               Local time: Wed 2022-03-16 05:53:05 EDT
           Universal time: Wed 2022-03-16 09:53:05 UTC
                 RTC time: Wed 2022-03-16 09:53:05
                Time zone: America/New_York (EDT, -0400)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Mengatur Zona Waktu Sistem

# list database zona waktu
user@host:~$ timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
...output omitted...

# ganti zona waktu
root@host:~# timedatectl set-timezone America/Phoenix

untuk lebih mudah, gunakan perintah tzselect untuk lihat zona waktu

Mengatur Waktu Sistem Secara Manual

# gunakan format "YYYY-MM-DD hh:mm:ss"
root@host:~# timedatectl set-time 9:00:00

Contoh sebelumnya mungkin gagal dengan pesan error Failed to set time: Automatic time synchronization is enabled. Dalam kasus itu, pertama nonaktifkan sinkronisasi waktu otomatis sebelum mengatur tanggal atau waktu secara manual.

# menonaktofkan sinkronisasi NTP
root@host:~# timedatectl set-ntp false

Atur dan Pantau Layanan Chronyd

Layanan chronyd menyinkronkan Jam Real-Time (RTC) lokal yang tidak akurat dengan server NTP yang sudah dikonfigurasi. Jika tidak ada koneksi jaringan, maka layanan chronyd akan menghitung pergeseran jam RTC, dan mencatatnya di file /var/lib/chrony/drift (yang ditentukan oleh pengaturan driftfile di file konfigurasi /etc/chrony.conf).

Memilih Sumber Waktu NTP

# Sebagai contoh, jika baris server ntp.example.com iburst ada di file konfigurasi /etc/chrony.conf.
# layanan chronyd menggunakan server ntp.example.com sebagai sumber waktu NTP.

# Use public servers from the pool.ntp.org project.
pool 2.rhel.pool.ntp.org iburst
server ntp.example.com iburst
...output omitted...

Opsi iburst (disarankan): Membuat chronyd melakukan 4-8 pengukuran cepat agar sinkronisasi lebih cepat.

Memeriksa Status Sinkronisasi NTP

root@host:~# chronyc sources -v

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current best, '+' = combined, '-' = not combined,
| /             'x' = may be in error, '~' = too variable, '?' = unusable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp.example.com               2   6   377    20    -28us[ +361ns] +/-   14ms
^- 192.0.2.10                    2  10   377   936  -2329us[-2329us] +/-  120ms
^+ 2001:0db8:5:1890:f888:3e>     2  10   377  1009   -777us[ -673us] +/-   27ms
^+ clock3.example.net            2  10   377   149  -1220us[-1220us] +/-   36ms
^- 2001:0db8:88:f031:3333:a>     2  10   377   767  -1300us[-1300us] +/-  118ms

Karakter (*) Source State menandakan bahwa chronyd menggunakan ntp.example.com sebagai sumber waktu untuk sinkronisasi. Jika ada x atau tanda tilde (~) di kolom itu, berarti layanan chronyd menentukan bahwa ada yang tidak beres dengan waktu yang diberikan server NTP jarak jauh ini. Kalau ada tanda tanya (?) di kolom itu, berarti server saat ini tidak bisa digunakan.


Mengelola Keamanan dengan SELinux

Artikel Membahas SELinux

Arsitektur SELinux

SELinux terdiri dari kebijakan khusus aplikasi yang dibuat oleh pengembang aplikasi untuk menentukan tindakan dan akses mana yang diizinkan untuk setiap file biner yang dapat dieksekusi, file konfigurasi, dan file data yang digunakan aplikasi.

Penggunaan SELinux

SELinux memiliki 3 mode operasi:

Konsep SELinux

Kebanyakan sysadmin familiar dengan user, grup, izin file. ini disebut Discretionary Access Control (DAC). Selinux menyediakan lapisan keamanan tambahan berbasis objek yang disebut Mandatory Access Control (MAC).

Kebijakan SELinux adalah aturan keamanan yang menentukan bagaimana proses tertentu mengakses file, direktori, dan port yang relevan. Setiap entitas sumber daya, seperti file, proses, direktori, atau port, memiliki label konteks SELinux.

file-context

Konsep Aturan Akses Kebijakan

Kebijakan server web secara default tidak memiliki aturan izin untuk menggunakan file yang diberi label tmp_t, seperti di direktori /tmp dan /var/tmp, sehingga aksesnya tidak diizinkan. Dengan SELinux diaktifkan, pengguna jahat yang menggunakan proses Apache yang telah dikompromikan tetap tidak akan memiliki akses ke file di direktori /tmp.

decision-making-flow

Banyak perintah yang menampilkan daftar sumber daya menggunakan opsi -Z untuk mengelola konteks SELinux. Misalnya, perintah ps, ls, cp, dan mkdir semuanya menggunakan opsi -Z.

root@host:~# ps axZ
root@host:~# ps -ZC httpd
root@host:~# ls -Z /var/www

Ubah Mode SELinux

# melihat mode
root@host:~# getenforce
Enforcing

# mengubah mode
root@host:~# setenforce
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]

# mengubah mode ke permissive
root@host:~# setenforce 0

Atur Mode SELinux Default

Untuk konfigurasi permanen, modifikasi di file /etc/selinux/config.

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
...output omitted...

SELINUX=enforcing
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

Konteks SELinux Awal

SELinux menyimpan database berbasis file dari kebijakan pelabelan file di direktori /etc/selinux/targeted/contexts/files. File yang disalin akan diubah label SELinux nya, diturunkan dari direktori tujuan. Perintah cp -p menjaga semua atribut file saat menyalin jika memungkinkan, dan perintah cp --preserve=context hanya menjaga konteks SELinux.

# buat dua file di direktori tmp
root@host:~# touch /tmp/file1 /tmp/file2

# keduanya memiliki label user_tmp_t yang diturunkan dari parent direktori
root@host:~# ls -Z /tmp/file*
unconfined_u:object_r:user_tmp_t:s0 /tmp/file1
unconfined_u:object_r:user_tmp_t:s0 /tmp/file2

# direktori /var/www/html memiliki label httpd_sys_content_t
root@host:~# ls -Zd /var/www/html/
system_u:object_r:httpd_sys_content_t:s0 /var/www/html/

# pindah file1 ke direktori /var/www/html
root@host:~# mv /tmp/file1 /var/www/html/

# salin file2 ke direktori /var/www/html
root@host:~# cp /tmp/file2 /var/www/html/

# cek label
root@host:~# ls -Z /var/www/html/file*
unconfined_u:object_r:user_tmp_t:s0 /var/www/html/file1
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2

Mengubah Konteks (label) SELinux

Konteks SELinux bisa diubah dengan perintah semanage fcontext, restorecon, dan chcon. Metode yang direkomendasikan adalah mengubah konteks policy dengan perintah semanage fcontext. Perintah chcon bisa ddigunakan untuk mengubah langsung, tetapi hanya sementara (setelah rebot akan kembali semula).

Contoh berikut membuat direktori dengan konteks SELinux default_t, yang diwarisinya dari direktori induk /.

# buat direktori
root@host:~# mkdir /virtual
root@host:~# ls -Zd /virtual
unconfined_u:object_r:default_t:s0 /virtual

# ubah konteks file dengan chcon
root@host:~# chcon -t httpd_sys_content_t /virtual
root@host:~# ls -Zd /virtual
unconfined_u:object_r:httpd_sys_content_t:s0 /virtual

# reset label dengan restorecon
root@host:~# restorecon -v /virtual
Relabeled /virtual from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:default_t:s0
root@host:~# ls -Zd /virtual
unconfined_u:object_r:default_t:s0 /virtual

Tentukan Kebijakan Konteks File Default SELinux

Saat melihat kebijakan, ekspresi reguler panjang yang paling umum adalah (/.*)?, yang biasanya ditambahkan ke nama direktori. Misalnya, aturan berikut menentukan bahwa direktori /var/www/cgi-bin, serta semua file di dalamnya atau di subdirektorinya, memiliki konteks SELinux system_u:object_r:httpd_sys_script_exec_t:s0, kecuali ada aturan yang lebih spesifik menggantikan ini.

Operasi Dasar Konten File

Berikut beberapa opsi perintah semanage fcontext:

Untuk mengelola konteks SELinux, pasang paket policycoreutils dan policycoreutils-python-utils, yang berisi perintah restorecon dan semanage. Dalam contoh berikut, lihat konteks file sebelum dan sesudah menggunakan perintah semanage dan restorecon.

# verifikasi konteks selinux
root@host:~# ls -Z /var/www/html/file*
unconfined_u:object_r:user_tmp_t:s0 /var/www/html/file1
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2

# list konteks selinux default
root@host:~# semanage fcontext -l
...output omitted...
/var/www(/.*)?       all files    system_u:object_r:httpd_sys_content_t:s0
...output omitted...

# mengembalikan konteks default pada semua file dan subdirektori.
root@host:~# restorecon -Rv /var/www/
Relabeled /var/www/html/file1 from unconfined_u:object_r:user_tmp_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0

# lihat konteks
root@host:~# ls -Z /var/www/html/file*
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2

Contoh berikut menggunakan perintah semanage untuk menambahkan kebijakan konteks untuk direktori baru.

# buat direktori
root@host:~# mkdir /virtual

# buat file index
root@host:~# touch /virtual/index.html

# lihat konteks selinux
root@host:~# ls -Zd /virtual/
unconfined_u:object_r:default_t:s0 /virtual
root@host:~# ls -Z /virtual/
unconfined_u:object_r:default_t:s0 index.html

# tambahkan kebijakan konteks selinux
root@host:~# semanage fcontext -a -t httpd_sys_content_t '/virtual(/.*)?'

# atur konteks default pada direktori dan semua file di dalamnya dengan restorecon
root@host:~# restorecon -RFvv /virtual
Relabeled /virtual from unconfined_u:object_r:default_t:s0 to system_u:object_r:httpd_sys_content_t:s0
Relabeled /virtual/index.html from unconfined_u:object_r:default_t:s0 to system_u:object_r:httpd_sys_content_t:s0

# lihat konteks
root@host:~# ls -Zd /virtual/
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /virtual/
root@host:~# ls -Z /virtual/
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html

# melihat semua kustomisasi lokal pada kebijakan default.
root@host:~# semanage fcontext -l -C
SELinux fcontext     type         Context

/virtual(/.*)?       all files    system_u:object_r:httpd_sys_content_t:s0

Boolean SELinux

root@host:~# getsebool -a
abrt_anon_write --> off
abrt_handle_event --> off
abrt_upload_watch_anon_write --> on
...output omitted...

Contoh Boolean Kebijakan Httpd

Kebijakan layanan httpd mencakup Boolean httpd_enable_homedirs, yang memungkinkan berbagi direktori home dengan layanan httpd.

# contoh melihat status
root@host:~# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> off

Kelola Boolean Kebijakan

# lihat boolean httpd_enable_homedirs
root@host:~# semanage boolean -l | grep httpd_enable_homedirs
httpd_enable_homedirs          (off   ,  off)  Allow httpd to enable homedirs

# mengaktifkan sementara sampai sistem reboot
root@host:~# setsebool httpd_enable_homedirs on

# lihat status
root@host:~# semanage boolean -l | grep httpd_enable_homedirs
httpd_enable_homedirs          (on   ,  off)  Allow httpd to enable homedirs

# verifikasi
root@host:~# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> on

# aktifkan permanen
root@host:~# setsebool -P httpd_enable_homedirs on

# lihat informasi
root@host:~# semanage boolean -l | grep httpd_enable_homedirs
httpd_enable_homedirs          (on   ,   on)  Allow httpd to enable homedirs

# hanya mencantumkan Boolean persisten dengan pengaturan yang disesuaikan dibandingkan dengan kebijakan asli
root@host:~# semanage boolean -l -C
SELinux boolean                State  Default Description

httpd_enable_homedirs          (on   ,   on)  Allow httpd to enable homedirs

Mengatasi Masalah SELinux

Selengkapnya

Pantau Pelanggaran SELinux

Layanan pemecahan masalah SELinux, dari paket setroubleshoot-server, menyediakan alat untuk mendiagnosis masalah SELinux. Ketika SELinux menolak suatu tindakan, pesan Access Vector Cache (AVC) dicatat ke file log keamanan /var/log/audit/audit.log.

Contoh urutan perintah pada server web Apache standar

# buat file mypage
root@host:~# touch /root/mypage

# pindahkan file ke direktori web
root@host:~# mv /root/mypage /var/www/html

# jalankan service
root@host:~# systemctl start httpd

# coba akses
root@host:~# curl http://localhost/mypage
...output admitted...
<p>You don't have permission to access this resource.</p>
</body></html>

# lihat pesan log
root@host:~# tail /var/log/audit/audit.log
...output omitted...
type=AVC msg=audit(1749508506.271:159): avc:  denied  { getattr } for  pid=1984 comm="httpd" path="/var/www/html/mypage" dev="sda3" ino=8805547 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file permissive=0
...output omitted..._

root@host:~# tail /var/log/messages
...output omitted...
Jun  9 22:35:06 servera setroubleshoot[2175]: SELinux is preventing /usr/sbin/httpd from getattr access on the file /var/www/html/mypage. For complete SELinux messages run: sealert -l a0bca4b2-46a9-4252-b0cd-6de0dfcdd454
...output omitted...

Output perintah sealert menjelaskan kejadian tersebut, dan mencakup proses yang terpengaruh, file yang diakses, serta tindakan yang dicoba dan ditolak.

root@host:~# sealert -l a0bca4b2-46a9-4252-b0cd-6de0dfcdd454

# Gunakan perintah ausearch untuk mencari kejadian AVC di file log /var/log/audit/audit.log.
root@host:~# ausearch -m AVC -ts recent

Memecahkan Masalah SELinux dengan Konsol Web

Konsol web RHEL menyertakan alat untuk memecahkan masalah SELinux. Pilih SELinux dari menu sebelah kiri. Jendela kebijakan SELinux menampilkan status penegakan saat ini. Bagian SELinux access control errors mencantumkan masalah SELinux saat ini.

selinux-web-console


Mengarsipkan File

Membuat Arsip dari Baris Perintah

Opsi dari Utilitas Tar

Salah satu tindakan perintah tar berikut diperlukan untuk melakukan operasi tar:

Opsi umum perintah tar berikut sering disertakan:

Opsi kompresi perintah tar berikut digunakan untuk memilih algoritma:

Buat Arsip

user@host:~$ tar -cf mybackup.tar myapp1.log myapp2.log myapp3.log

root@host:~# tar -cf /root/etc-backup.tar /etc
tar: Removing leading `/' from member names

List isi arsip

root@host:~# tar -tf /root/etc.tar
etc/
etc/fstab
etc/crypttab
etc/mtab
...output omitted...

Ekstrak arsip

# ekstrak konten ke direktori kosong untuk menghindari overwrite file yg sudah ada
root@host:~# mkdir /root/etcbackup
root@host:~/etcbackup# tar -xf /root/etc.tar

# ketika di ekstrak, aturan perintah umask akan diterapkan. untuk menghindari:
user@host:~/scripts$ tar -xpf /home/user/myscripts.tar

Buat Arsip Terkompresi

Perintah tar mendukung metode kompresi berikut, dan lainnya:

# buat arsip dengan kompresi gzip
root@host:~# tar -czf /root/etcbackup.tar.gz /etc
tar: Removing leading `/' from member names

# buat arsip dengan kompresi bzip2
root@host:~# tar -cjf /root/logbackup.tar.bz2 /var/log
tar: Removing leading `/' from member names

# buat arsip dengan kompresi xz
root@host:~# tar -cJf /root/sshconfig.tar.xz /etc/ssh
tar: Removing leading `/' from member names

Ekstrak Isi Arsip Terkompresi

Perintah tar bisa mendeteksi otomatis jenis kompresi yang digunakan.

# gunakan perintah list file kompresi gz
user@host:~$ gzip -l file.tar.gz
         compressed        uncompressed  ratio uncompressed_name
          221603125           303841280  27.1% file.tar

# gunakan perintah xz untuk list file kompresi xz
user@host:~$ xz -l file.tar.xz
Strms  Blocks   Compressed Uncompressed  Ratio  Check   Filename
    1       1    195.7 MiB    289.8 MiB  0.675  CRC64   file.xz

Memindahkan File

Transfer File Jarak Jauh dengan Program Transfer File Aman (SFTP)

user@host:~$ sftp remoteuser@remotehost
remoteuser@remotehost's password: password
Connected to remotehost.
sftp> help
Available commands:
bye                                Quit sftp
cd path                            Change remote directory to 'path'
chgrp [-h] grp path                Change group of file 'path' to 'grp'
chmod [-h] mode path               Change permissions of file 'path' to 'mode'
chown [-h] own path                Change owner of file 'path' to 'own'
...output omitted...

sftp> pwd
Remote working directory: /home/remoteuser
sftp> lpwd
Local working directory: /home/user
sftp> mkdir hostbackup
sftp> cd hostbackup
sftp> put /etc/hosts
Uploading /etc/hosts to /home/remoteuser/hostbackup/hosts
/etc/hosts                                 100%  227     0.2KB/s   00:00
sftp> put -r directory
Uploading directory/ to /home/remoteuser/directory
Entering directory/
file1                                      100%    0     0.0KB/s   00:00
file2                                      100%    0     0.0KB/s   00:00
sftp> get /etc/dnf/dnf.conf
Fetching /etc/dnf/dnf.conf to dnf.conf
/etc/dnf.conf                              100%  813     0.8KB/s   00:00

user@host:~$ sftp remoteuser@remotehost:/home/remoteuser/remotefile
Connected to remotehost.
Fetching /home/remoteuser/remotefile to remotefile
remotefile                                                       100%    7    15.7KB/s   00:00

Mentransfer File dengan Perintah Salin Aman (SCP)

Mulai RHEL 10, perintah scp menggunakan SFTP untuk mentransfer file.

user@host:~$ scp /etc/dnf/dnf.conf /etc/hosts remoteuser@remotehost:/home/remoteuser
remoteuser@remotehost's password: password
dnf.conf                                   100%  813     0.8KB/s   00:00
hosts                                      100%  227     0.2KB/s   00:00

[user@host ~]$ scp remoteuser@remotehost:/etc/hostname /home/user
remoteuser@remotehost's password: password
hostname

Sinkronisasi File dan Direktori Jarak Jauh

Gunakan perintah rsync dg opsi -n untuk simulasi yang terjadi ketika perintah dieksekusi. Dua opsi standar adalah -a dan -v. Opsi -v atau --verbose untuk output lebih detail. Opsi -a atau --archive untuk menyalin secara rekursif dan mengaktifkan opsi lain.

Untuk menyertakan atribut tambahan saat menyinkronkan file:

root@host:~# rsync -av /var/log hosta:/tmp
root@hosta's password: password
receiving incremental file list
log/
log/README
log/boot.log
...output omitted...

sent 9,783 bytes  received 290,576 bytes  85,816.86 bytes/sec
total size is 11,585,690  speedup is 38.57

root@host:~# rsync -av hosta:/var/log /tmp
root@hosta's password: password
receiving incremental file list
log/boot.log
log/dnf.librepo.log
log/dnf.log
...output omitted...

sent 9,783 bytes  received 290,576 bytes  85,816.86 bytes/sec
total size is 11,585,690  speedup is 38.57

user@host:~$ sudo rsync -av /var/log /tmp
[sudo] password for user: password
receiving incremental file list
log/
log/README
log/boot.log
...output omitted...
log/tuned/tuned.log

sent 11,592,423 bytes  received 779 bytes  23,186,404.00 bytes/sec
total size is 11,586,755  speedup is 1.00
user@host:~$ ls /tmp
log  ssh-RLjDdarkKiW1

root@host:~# rsync -av /var/log/ /tmp
sending incremental file list
./
README
boot.log
...output omitted...
tuned/tuned.log

sent 11,592,389 bytes  received 778 bytes  23,186,334.00 bytes/sec
total size is 11,586,755  speedup is 1.00
root@host:~# ls /tmp
anaconda                  dnf.rpm.log-20190318  private
audit                     dnf.rpm.log-20190324  qemu-ga
boot.log                  dnf.rpm.log-20190331  README
...output omitted...

Garis miring di ahir direktori source agar isi file direktori itu yang di singkronkan. Tanpa garis miring di ahir akan menyalin direktori itu sendiri.


Tuning Performa Sistem

Tuning Sistem

TuneD adalah alat powerfull untuk tuning performa sistem di RHEL.

Mode Tuning Statis Default

Layanan TuneD akan jalan otomatis setiap boot.

Mengatur Tuning Dinamis

Dapat dilakukan dengan mengubah nilai variabel dynamic_tuning ke 1 di file /etc/tuned/tuned-main.conf.

Memasang dan Mengaktifkan Layanan Tuning

root@host:~$ dnf install tuned
...output omitted...
Is this ok [y/N]: y
...output omitted...

root@host:~$ systemctl enable --now tuned
Created symlink /etc/systemd/system/multi-user.target.wants/tuned.service → /usr/lib/systemd/system/tuned.service.
Profil Tuned Tujuan
accelerator-performance Peningkatan kinerja berbasis tuning performa.
aws Optimasi untuk instans Amazon Web Services (AWS) EC2.
balanced Profil tuned umum yang tidak terspesialisasi (general purpose).
balanced-battery Profil balanced untuk penghematan daya.
desktop Optimasi untuk penggunaan desktop.
hpc-compute Optimasi untuk beban kerja komputasi High-Performance Computing (HPC).
intel-sst Konfigurasi untuk Intel Speed Select Base Frequency.
latency-performance Optimasi untuk kinerja deterministik dengan mengorbankan konsumsi daya yang lebih tinggi.
network-latency Optimasi untuk kinerja deterministik dengan mengorbankan konsumsi daya yang lebih tinggi, difokuskan pada kinerja jaringan latensi rendah.
network-throughput Optimasi untuk throughput jaringan streaming, umumnya hanya diperlukan pada CPU generasi lama atau jaringan 40 G+.
optimize-serial-console Optimasi untuk penggunaan konsol serial.
powersave Optimasi untuk konsumsi daya rendah.
throughput-performance Tuning yang dapat diterapkan secara luas dan memberikan performa sangat baik di berbagai beban kerja server umum.
virtual-guest Optimasi untuk berjalan di dalam virtual guest.
virtual-host Optimasi untuk menjalankan guest Kernel-based Virtual Machine (KVM).

Aplikasi TuneD menyimpan profil yang telah diinstal sebelumnya di direktori /usr/lib/tuned/profiles. Profil-profil ini tidak dimaksudkan untuk diedit secara langsung.

Profil direktif include bagian [main] di dalam file tuned.conf memungkinkan pewarisan (menggunakan pengaturan dari profil lain).

Untuk kustomisasi profil tuning, salin profil dari /usr/lib/tuned/profiles ke /etc/tuned/profiles (prioritas).

Parameter vm.swappiness bagian [sysctl] di dalam file tuned.conf menentukan seberapa agresif kernel memindahkan proses dari memori fisik ke ruang swap.

# untuk memeriksa
root@host:~# sysctl vm.swappiness
vm.swappiness = 30 ---> menerima nilai dari 0 hingga 100

Mengelola Profil dari Baris Perintah

Perintah tuned-adm mendukung aktivitas tuning berikut:

# identifikasi profil tuning yang aktif saat ini
root@host:~# tuned-adm active
Current active profile: throughput-performance

# verifikasi pengaturan sistem sesuai dengan tuning aktif
root@host:~# tuned-adm verify
Verification succeeded, current system settings match the preset profile.
See TuneD log file ('/var/log/tuned/tuned.log') for details.

# lihat semua profil tuning yang tersedia
root@host:~# tuned-adm list

# lihat informasi spesifik profil tuning
root@host:~# tuned-adm profile_info network-latency

# mengubah profil tuning yang aktif saat ini secara permanen
root@host:~# tuned-adm profile virtual-guest

# lihat saran profil tuning berbasis berbagai karakteristik
root@host:~# tuned-adm recommend
virtual-guest

# menonaktifkan semua aktifitas TuneD
root@host:~# tuned-adm off

Mengelola Profil dengan Konsol Web

Harus mengaktifkan akses administrative

active-performance-profile

Mengaktifkan Konsol Web

root@host:~# dnf install cockpit
...output omitted...
Is this ok [y/N]: y
...output omitted...
Complete!

root@host:~# systemctl enable --now cockpit.socket
Created symlink '/etc/systemd/system/sockets.target.wants/cockpit.socket''/usr/lib/systemd/system/cockpit.socket'.

# jika pakai konfigurasi firewall custom, port 9090 harus dibuka, atau izinkan layanan cockpit
root@host:~# firewall-cmd --add-service=cockpit --permanent
success
root@host:~# firewall-cmd --reload
success

Akses konsol web melalui port 9090.

Multitasking Preemptif

Adalah metode sistem operasi di mana pengelolaan waktu penggunaan CPU sepenuhnya diatur oleh sistem (kernel), bukan oleh program itu sendiri.

Kebijakan Penjadwalan Proses

Mulai dari RHEL 10, algoritma yang mengimplementasikan kebijakan SCHED_NORMAL disebut Earliest Eligible Virtual Deadline First (EEVDF), yang menggantikan Completely Fair Scheduler (CFS) dari versi RHEL sebelumnya.

Nilai Nice di Linux