- Ega Prabu Pamungkas (05111940000014)
- A. Zidan Abdillah Majid (05111940000070)
- Jundullah Hanif Robbani (05111940000144)
-
Mendeklarasi bahwa variabel
user error_msg user_error user_info
itu akan menjadi array asosiatif dengan menggunakandeclare -A (variabel)
. -
Membuat regex yang akan digunakan oleh program
sed
. Untuk regexnya menggunakan[^:]*:[^:]*:[^:]*: \([^ ]*\) \([^[#]*\) [^\(]*(\([^)]*\).*
, penjelasannya:*
untuk mencocokkan karakter sebanyak 1 atau lebih.*:
untuk mencocokkan karakter sebanyak 1 atau lebih sampai bertemu dengan karakter:
.*(
untuk mencocokkan karakter sebanyak 1 atau lebih sampai bertemu dengan karakter(
..*
untuk mencocokkan sembarang karakter sebanyak 1 atau lebih.[^:]
untuk mencocokkan selama belum ketemu karakter:
.\([^ ]*\)
untuk mencocokkan selama belum ketemu karakter(space)
, digabung dengan karakter(space)
setelahnya. Terdapat\(...\)
karena akan digunakan sebagai argumen dised
.\([^[#]*\)
untuk mencocokkan selama belum ketemu karakter[#
, digabung dengan karakter(space)
setelahnya. Terdapat\(...\)
karena akan digunakan sebagai argumen dised
.[^\(]
untuk mencocokkan selama belum ketemu karakter(
.\([^)]*\)
untuk mencocokkan selama belum ketemu karakter)
. Terdapat\(...\)
karena akan digunakan sebagai argumen dised
.
-
Semua user yang ada di
syslog.log
dimasukkan ke variabeluser
, dengan username digunakan sebagai key agar unik. Di sini dapat memanfaatkan programsed
untuk membuat syntax shell perubahan arrayuser
yang kemudian dieksekusi oleheval
. -
Menghitung semua pesan error yang ada di
syslog.log
, lalu dimasukkan ke variabelerror_msg
, dengan pesan log digunakan sebagai key agar unik. Di sini dapat memanfaatkan programsed
untuk membuat syntax shell incrementerror_msg[KEY]
yang kemudian dieksekusi oleheval
. -
Menghitung banyak pesan error dan info per user dengan memanfaatkan key dari array
user
. Key dariuser
didapatkan dengan"${!user[@]}"
, lalu dilooping dan key-nya digunakan oleh grep untuk mencari pesan error dan info terkait. Untuk grep,grep -E "ERROR.*\($key" $syslog
digunakan untuk mencari error, dangrep -E "INFO.*\($key" $syslog
digunakan untuk mencari info. Setelah dicari barisnya menggunakan grep, penghitungan baris dilakukan dengan pipeline hasil grep ke perintahwc -l
. -
Dilakukan looping untuk memasukkan hasil ke file
*.csv
terkait. Untukerror_message.csv
, sebelum dimasukkan file, isi disorting terlebih dahulu dengan perintahsort -k2 -n -t, -r
, dengan-k2
menunjukkan sorting berdasarkan kolom ke-2 (Count),-n
menunjukkan sorting ala angka,-t,
menunjukkan delimiter menggunakan koma,-r
menunjukkan sorting secara descending. Untukuser_statistic.csv
, sebelum dimasukkan ke file, isi disorting terlebih dahulu dengan perintahsort -k1 -t,
.
![]() |
---|
Saat mengkoding solusi |
![]() |
---|
Tab browser yang penuh |
Masih belum lancar membaca, maupun membuat regex. Mungkin karena regex tidak terlihat seperti kalimat biasa, sehingga tidak enak di mata.
Permasalahan dalam soal ini dapat dibagi menjadi 3 bagian.
- Mendownload gambar pada link yang disediakan dan menaruh log pada Foto.log.
- Mengecek foto yang didownload apakah sama dengan yang telah didownload sebelumnya.
- Penamaan foto yang terdownload "Koleksi_XX".
Permasalahan pertama, dapat diselesaikan dengan menggunakan wget -o temp.log 'https://loremflickr.com/320/240/kitten'
dimana command wget
digunakan untuk mendownload gambar pada link yang diberikan lalu option -o
untuk menyimpan log download pada sebuah file. Log file dibuat temp.log
yang akan digunakan untuk membandingkan apakah ada foto sama yang telah didownload, menggunakan awk. Membandingakannya dengan cara membandingkan log download yang telah dilakukan dengan log download sebelumnya. Yang membedakan log download satu dengan lainnya adalah lokasi mendownload gambarnya.
![]() |
---|
Baris Location pada Log |
Dengan begitu dapat dibandingkan menggunakan awk dan bash script.
![]() |
---|
Compare script using AWK and BASH |
-v
untuk mempassing variable yang akan digunakan awk. ~
digunakan untuk membandingkan string dimana sebelah kiri adalah ekspresi biasa dan sebelah kanan adalah string-nya, sehingga jika sama akan bernilai 1 jika tidak akan bernilai 0. Jika bernilai 1 variable compare
akan berisi string, jika bernilai 0 maka compare
akan kosong sehingga untuk melihat apakah sama atau tidak dengan melihat panjang string compare
apakah lebih besar dari 1 atau tidak.
Penamaan file dapat menggunakan %02d
untuk memberikan padding 0
di depan pada saat penamaan file.
Permasalahan dalam soal ini dapat dibagi menjadi 3 bagian.
- Menjalankan script tepat sekali pada jam 8 malam di tanggal 1,8,... dan tanggal 2,6,...
- Membuat direktori dengan nama tanggal didownloadnya Koleksi tersebut.
- Memindahkan Foto.log dan semua koleksi foto ke dalam direktori.
Pada permasalahan pertama, menit dapat dibuat 0
, jam dibuat 20
, agar dapat berjalan sekali, untuk tanggal dapat dibuat 1/7,2/4
dimana /
menunjukkan step atau jumlah sehingga untuk 1 akan +7 terus, sedangkan untuk 2 akan +4 terus.
Pada permasalahan kedua dan ketiga, dapat dijalankan dengan menambahkan &&
pada setiap setelah command, urutan yang dilakukan yaitu membuat direktori dengan nama menggunakan mkdir $(date +%d%m%Y)
, menjalankan bash script soal3a.sh
, memindahkan Foto.log
dan koleksi foto dengan command mv Foto.log Koleksi_* $(date +%d%m%Y)
.
![]() |
---|
Cron job untuk soal 3b |
Permasalahan dalam soal ini dapat dibagi menjadi 2 bagian.
- Memodifikasi bash script soal3a untuk mendownload foto pada "https://loremflickr.com/320/240/bunny"
- Meletakkan Foto.log dan koleksi foto yang didownload di folder "Kucing_(tanggal sekarang)" jika yang didownload foto kucing, "Kelinci_(tanggal sekarang)" jika yang didownload foto kelinci
- Menyetel agar bash script mendownload bergantian antara foto kucing dan foto kelinci, jika tanggal 31 kucing > tanggal 1 kelinci > dst.
Permasalahan pertama, dapat diselesaikan dengan mudah yaitu mengubah link pada wget
sehingga mendownload foto pada "https://loremflickr.com/320/240/".
Permasalahan kedua, dapat diselesaikan dengan terlebih dahulu mendefinisikan fungsi kucing dan kelinci sehingga dapat dipisah pembuatan direktorinya, dengan menggunakan mkdir $(date +%d%m%Y)
, selain itu juga dicek jika direktori telah dibuat maka tidak perlu membuat direktori baru.
Permasalahan ketiga, dengan cara mengecek apakah direktori yang dibuat kemarin direktori untuk kucing atau direktori untuk kelinci. Command untuk mengambil tanggal kemarin adalah $(date -d 'yesterday' +%d%m%Y)
. Jika nama direktori yang dibuat kemarin Kelinci_(tanggal kemarin) maka jalankan fungsi kucing, jika Kucing_(tanggal kemarin) jalankan fungsi kelinci, selain itu semua yang dipilih duluan adalah mendownload foto kucing maka jalankan fungsi kucing terlebih dahulu. pwd
digunakan agar path yang digunakan akan sama dengan tempat soal3c.sh
dijalankan.
![]() |
---|
Script mengecek Folder kemarin |
Permasalahan dalam soal ini hanya ada dua.
- Meng-compress folder-folder Kucing dan Kelinci dengan password tanggal sekarang.
- Menghapus folder-folder Kucing dan Kelinci yang telah di-compress.
Permasalahan pertama, cukup sederhana dengan menggunakan command zip
ditambah opsi -e
untuk menambahkan enkripsi, -q
untuk tidak menampilkan comment prompts, -P untuk menambahkan enkripsinya. Enkripsi tanggal sekarang dapat diambil dengan $(date +%d%m%Y)
. Lalu diikuti dengan nama zip yaitu Koleksi.zip dan semua direktori Kucing dan Kelinci dengan menambahkan *
di belakangnya.
![]() |
---|
Script untuk ZIP |
Permasalahan kedua cukup sederhana, menghapus semua direktori dengan menggunakan rm -r
diikuti direktori yang akan dihapus, yaitu kucing dan kelinci. /dev/null 2>&1
agar input yang error maupun tidak, tidak ditampilkan di terminal.
![]() |
---|
Menghapus direktori setelah di-zip |
Permasalahan dalam soal ini ada dua.
- Mengkompres semua folder Kucing dan Kelinci pada hari Senin - Jumat pukul 7 sampai 6 sore
- Meng-ekstrak Koleksi.zip selain hari yang disebutkan di nomor 1 dan menghapus file 'Koleksi.zip'
Permasalahan pertama, dapat diselesaikan dengan menggunakan cron jobs dimana menit dibuat 0
, jam dibuat 7
, hari dibuat 1-5
dimana 1
adalah Senin dan 5
adalah Kamis. Cron jobs di atas jadi hanya perlu dikerjakan satu kali.
Permasalahan kedua, dapat diselesaikan dengan menggunakan cron job dimana menit dibuat 0
, jam dibuat 18
, hari dibuat 1-5
dimana 1
adalah Senin dan 5
adalah Kamis. Cron jobs di atas jadi hanya perlu dikerjakan satu kali.
![]() |
---|
Cron job untuk 3e |
Kesulitan dalam membuat cron job, mencari yang paling sederhana. Pemindahan penggunaan dari bash
ke AWK
untuk soal3a cukup bingung bagaimana AWK
men-filter dan menjalankan prosesnya. Sempat tidak teliti dalam penggunaan variabel, dimana kurang penambahan $
sebelum variabel sehingga beberapa script tidak berjalan. Penulisan lapres belum terlalu lihai dalam penggunaan ini
atau ini atau yang lainnya agar MD mudah dipahami dan dibaca.