Linux Hands-on 2 (Output and Text Manipulation)
8 min read

Nah, di artikel ini kita lanjut ke Tugas 2, nih! Fokusnya kali ini soal ngolah teks dan output. Kita bakal pakai macem-macem perintah dan bikin output-nya dalam bentuk file teks.
Task 2.1: Generate a Fake Log File
go install github.com/mingrammer/flog@latest
flog: Ini adalah nama aplikasi yang mau kita instal. flog adalah tool atau alat yang berguna untuk membuat fake log, alias log palsu. Biasanya dipakai untuk testing atau simulasi. Karena flog ini dibuat menggunakan bahasa pemrograman Go, maka kita butuh tool "Go" untuk memasangnya.
cd go/bin
./flog -s 10s -n 200 > /home/sdb/access.log

Bagian 1: cd go/bin
cd: Ini singkatan dari "change directory" alias "pindah folder". Jadi, perintah ini digunakan untuk berpindah dari folder tempat kita berada sekarang ke folder lain.go/bin: Ini adalah "alamat" atau lokasi folder yang ingin kita tuju. Dalam hal ini, kita mau pindah ke folderbinyang ada di dalam foldergo. Biasanya, di folderbinini terdapat file-file program yang bisa dijalankan.
Jadi, bagian ini intinya adalah: Berpindah ke folder go/bin.
Bagian 2: ./flog -s 10s -n 200 > /home/sdb/access.log
./flog: Ini adalah perintah untuk menjalankan programflog. Tanda./di depanflogartinya programflogtersebut ada di folder tempat kita berada sekarang (yaitu foldergo/bin).-s 10s: Opsi-sini artinya "seconds" alias detik. Jadi, kita mauflogmenghasilkan log setiap 10 detik.-n 200: Opsi-nini artinya "number" alias jumlah. Jadi, kita mauflogmenghasilkan 200 baris log.>: Nah, ini nih yang penting. Tanda>ini artinya kita mau "mengarahkan" output dari perintahflogke sebuah file. Jadi, log yang dihasilkan tidak hanya ditampilkan di layar, tetapi juga disimpan di dalam sebuah file./home/sdb/access.log: Ini adalah "alamat" lengkap file tempat kita menyimpan log yang dihasilkan olehflog. Dalam hal ini, kita menyimpannya di dalam fileaccess.logyang ada di foldersdbdi dalam folderhome.
Task 2.2: Extract unique IP Address
awk '{print $1}' access.log | sort | uniq

awk: Ini adalah program yang sangat berguna untuk memproses teks.awkbekerja dengan membaca file baris per baris, dan kita bisa menentukan apa yang ingin kita lakukan untuk setiap barisnya.'{print $1}': Ini adalah "instruksi" untukawk.print $1artinya kita mau menampilkan kata pertama dari setiap baris. Dalam fileaccess.log, biasanya kata pertama ini berisi IP address atau alamat server yang mengakses.access.log: Ini adalah nama file yang berisi log akses.sort: Ini adalah perintah untuk mengurutkan teks. Secara default,sortakan mengurutkan teks secara alfabetis.uniq: Ini adalah perintah untuk menampilkan baris-baris unik. Jadi, kalau ada IP address yang muncul berkali-kali,uniqhanya akan menampilkannya sekali.
Task 2.3: Count Accurrence of each IP Address
awk '{print $1}' access.log | sort | uniq -c | sort -nr > ip_counts.txt

uniq: Ini adalah perintah untuk menampilkan baris-baris unik. Jadi, kalau ada IP address yang muncul berkali-kali,uniqhanya akan menampilkannya sekali.-c: Opsi-cini artinya "count" alias hitung. Jadi, selain menampilkan IP address yang unik,uniqjuga akan menampilkan berapa kali IP address tersebut muncul.sort: Sama seperti sebelumnya, ini adalah perintah untuk mengurutkan teks.-n: Opsi-nini artinya "numeric" alias angka. Jadi, kita mau mengurutkan berdasarkan angka, bukan alfabet.-r: Opsi-rini artinya "reverse" alias terbalik. Jadi, kita mau mengurutkan dari angka terbesar ke angka terkecil.
Task 2.4: Filter Log Entries with status Code 404
grep " 404 " access.log > errors.log

grep: Nah, kalaugrepini kayak detektif yang lagi nyari sesuatu di dalam teks. Dia bakal nyari baris-baris yang mengandung kata atau pola tertentu." 404 ": Ini adalah "target" yang mau dicari olehgrep. Dalam hal ini, kita mau mencari baris yang mengandung kode "404". Kode "404" ini biasanya muncul di log akses website dan menandakan bahwa halaman yang diminta tidak ditemukan alias "error".access.log: Ini adalah nama file yang akan "diperiksa" olehgrep. Jadi,grepakan mencari kode "404" di dalam fileaccess.log.>: Nah, ini nih yang penting. Tanda>ini artinya kita mau "mengarahkan" output dari perintahgrepke sebuah file. Jadi, baris-baris yang mengandung kode "404" tidak hanya ditampilkan di layar, tetapi juga disimpan di dalam sebuah file.errors.log: Ini adalah nama file tempat kita menyimpan baris-baris yang mengandung kode "404".
Task 2.5: Replace “Mozilla” with “BrowserX”
sed 's/Mozilla/BrowserX/g' access.log > access_modified.log

sed: Nah, kalausedini kayak editor teks otomatis. Dia bisa mencari dan mengganti teks di dalam file secara otomatis, tanpa perlu kita buka filenya satu per satu.'s/Mozilla/BrowserX/g': Ini adalah "instruksi" untuksed. Mari kita pecah lagi:s: Ini singkatan dari "substitute" alias "ganti". Jadi, kita mau mengganti teks./Mozilla/: Ini adalah teks yang mau kita cari atau ganti. Dalam hal ini, kita mau mencari kata "Mozilla"./BrowserX/: Ini adalah teks penggantinya. Jadi, kata "Mozilla" akan diganti dengan "BrowserX".g: Ini artinya "global". Jadi, semua kemunculan kata "Mozilla" di setiap baris akan diganti, bukan hanya yang pertama saja.
access.log: Ini adalah nama file yang akan "diedit" olehsed. Jadi,sedakan mencari dan mengganti teks di dalam fileaccess.log.>: Nah, ini nih yang penting. Tanda>ini artinya kita mau "mengarahkan" output dari perintahsedke sebuah file baru. Jadi, hasil editan tidak langsung mengubah fileaccess.logaslinya, tetapi disimpan di file baru.access_modified.log: Ini adalah nama file baru yang akan berisi teks yang sudah dimodifikasi.
Task 2.6: Extract Log Entries froom a Spesific Date
grep "06/Feb/2025" access.log > specific_date.log

grep: Perintah untuk mencari pola teks dalam file."06/Feb/2025": Pola teks yang dicari. Dalam hal ini, kita mencari baris yang mengandung tanggal "06/Feb/2025". Perhatikan bahwa format tanggal ini harus sama persis dengan yang ada di fileaccess.logAnda.access.log: Nama file yang akan dicari.>: Operator redirection yang mengarahkan output dari perintahgrepke file lain.specific_date.log: Nama file baru yang akan berisi baris-baris yang cocok dengan pola yang dicari.
Task 2.7: Calculate Total Bytes Transferred
awk '{sum += $10} END {print sum}' access.log

sum += $10: Ini artinya kita membuat sebuah variabel bernamasumdan menambahkan nilai dari kolom ke-10 ($10) ke variabelsumtersebut. Jadi,sumakan menyimpan total dari nilai-nilai di kolom ke-10.Kolom ke-10 di file
access.logAnda kemungkinan besar berisi ukuran response dalam byte.'END {print sum}': Ini juga "instruksi" untukawk.END: Ini artinya perintah di dalam kurung kurawal akan dieksekusi setelahawkselesai membaca seluruh file.print sum: Ini artinya kita mau menampilkan nilai dari variabelsum, yaitu total dari ukuran response.
Task 2.8: Find IP with the Most 404 Errors
grep ' 404 ' access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 1 > top_404_ip.txt

grep ' 404 ' access.log:grep: Ini adalah perintah untuk mencari pola teks dalam file.' 404 ': Pola teks yang dicari. Kita mencari baris yang mengandung kode "404". Kode ini biasanya menunjukkan error "Not Found" di log akses web.access.log: Nama file log yang akan dicari.Intinya: Mencari semua baris di
access.logyang mengandung "404".
awk '{print $1}':awk: Program untuk memproses teks per baris.'{print $1}': Instruksi untukawk.$1artinya kolom pertama dari setiap baris. Biasanya, di log akses web, kolom pertama ini berisi alamat IP.Intinya: Mengambil alamat IP dari setiap baris yang dihasilkan oleh
grep.
sort:sort: Perintah untuk mengurutkan teks. Secara default, ia mengurutkan berdasarkan abjad.Intinya: Mengurutkan daftar alamat IP.
uniq -c:uniq: Perintah untuk menampilkan baris-baris unik.-c: Opsi untuk menghitung berapa kali setiap baris muncul.Intinya: Menghitung berapa kali setiap alamat IP muncul (berapa kali setiap IP menghasilkan error 404).
sort -nr:sort: Perintah untuk mengurutkan teks.-n: Opsi untuk mengurutkan secara numerik (bukan abjad).-r: Opsi untuk membalik urutan (dari terbesar ke terkecil).Intinya: Mengurutkan alamat IP berdasarkan jumlah kemunculannya, dari yang paling sering muncul.
head -n 1:head: Perintah untuk menampilkan beberapa baris pertama dari sebuah file atau output.-n 1: Opsi untuk menampilkan hanya 1 baris.Intinya: Mengambil alamat IP yang paling sering menghasilkan error 404.
>:>: Operator redirection untuk mengarahkan output ke sebuah file.top_404_ip.txt: Nama file yang akan menyimpan output.Intinya: Menyimpan alamat IP yang paling sering menghasilkan error 404 ke dalam file
top_404_ip.txt.
Task 2.9: Anonymize All IP Address
sed -E 's/^[^ ]+/ANONYMIZED_IP/' access.log > access_anonymized.log

's/^[^ ]+/ANONYMIZED_IP/': Ini adalah "instruksi" untuk sed. Mari kita bedah lagi:
s: Ini singkatan dari "substitute" alias "ganti". Jadi, kita mau mengganti teks.^: Ini artinya "awal baris". Jadi, kita mau mencari teks yang ada di awal baris.[^ ]+: Ini adalah pola teks yang mau kita cari.[^ ]artinya "semua karakter kecuali spasi".+artinya "satu atau lebih kemunculan". Jadi,[^ ]+artinya satu atau lebih karakter yang bukan spasi. Karena ada^di depannya, berarti kita mencari satu atau lebih karakter bukan spasi yang ada di awal baris. Biasanya, di log akses web, bagian ini adalah alamat IP./ANONYMIZED_IP/: Ini adalah teks penggantinya. Jadi, teks yang cocok dengan pola^[^ ]+(yaitu alamat IP di awal baris) akan diganti dengan "ANONYMIZED_IP".
Task 2.10: Count Log Entries with 500 status code
grep " 500 " access.log | wc -l

wc: Ini adalah perintah untuk menghitung jumlah kata, baris, dan karakter dalam sebuah file atau input.-l: Opsi untuk menghitung jumlah baris.Intinya: Menghitung jumlah baris yang diberikan sebagai input. Dalam hal ini, inputnya adalah output dari perintah
grep.
