Tampilkan postingan dengan label Shell_Script. Tampilkan semua postingan
Tampilkan postingan dengan label Shell_Script. Tampilkan semua postingan

Cara Mengganti Text Di Dalam File Via Terminal Linux

Bonjour! Saya punya pengalaman baru beberapa hari kebelakang ini, sepertinya pengalaman saya akan berguna bagi anda. Meskipun mungkin dengan kasus yang berbeda namun metode ini sepertinya akan dapat diterapkan ketika anda menghadapi kasus lain dan membutuhkan penyelesaian ini. Saya akan sedikit bercerita tentang kasus saya, dan bagaimana menyelesaikannya. Selamat membaca :)

Kantor saya adalah sebuah perguruan tinggi di Bandung, dinaungi oleh sebuah yayasan pendidikan yang juga memiliki lembaga-lembaga pendidikan lain. Nah, kemaren itu yayasan ini menyatukan semua lembaga menjadi kesatuan universitas. Dampaknya pada IT cukup banyak, karena setiap lembaga berubah nama. Dengan perubahan nama seperti itu otomatis domain internet pun berubah. Singkat cerita, sayapun mulai menyingkilkan lengan baju dan melakukan migrasi domain, semuanya berjalan lancar sampai dengan selesai!

Tapi ada salah satu website blogging yang merupakan multisite blogging. Didalamnya ada ribuan user dan ribuan artikel. Migrasi domain DNS saja tidak cukup, karena URL SETIAP BLOGURL SETIAP ARTIKEL, URL SETIAP GAMBAR semuanya tertanam didalam database. Cukup menantang, dimana saya harus segera merubah semua url sialan tersebut ke url dengan domain baru. Saya yakin andapun tidak akan mau jika harus merubah semua itu secara manual, satu per satu, kapan selesainya? :|

Bagaimana cara mengganti text di dalam file tersebut via terminal linux? Setelah mencari cara dan melakukan beberapa percobaan akhirnya semua itu dapat diatasi bahkan jika saya melakukannya dari awal secara benar, itu hanya memakan hitungan menit.

Multisite ini adalah wordpress social blogging yang dibuat untuk menampung semua tulisan seluruh civitas, untuk site setting dan konfigurasi script tidak terlalu sulit. Anda bisa mencarinya dengan mudah di mbah google. Saya hanya akan fokus menyampaikan bagaimana mengganti semua url tadi menjadi url dengan domain baru. Berikut ini langkah-langkahnya :
  • DUMP database anda. Ya, backup terlebih dahulu database anda. File backup yang saya miliki cukup besar untuk sebuah database, ratusan MB lah.
  • Selanjutnya, anda tidak perlu membuka file dump tersebut karena sangat menjengkelkan dan bikin mumet. Cukup ketikkan perintah dibawah ini pada server linux anda :
    root@apocalypsix: sed -e 's/[text_yang_mau_diganti]/[text_yang_baru]/g' [nama_file] > [output_file]
  • Langkah terakhir adalah meng-import kembali file output.
  • Selesai!

PENJELASAN :

Perintah diatas akan mencari sebuah text dan menggantinya dengan yang baru, pengerjaannya sangat cepat. Berbeda dengan jika saya melakukannya dengan nano editor, memakai notepad++ pun tidak membantu banyak, masih terdapat missing line yang tidak di eksekusi. Saya berikan contoh lain, misalnya kita memiliki sebuah file bernama daftar_gaji yang didalamnya ada banyak text. Misalnya isinya seperti ini :
Daftar gaji berdasarkan pendidikan :
SD  = 500.000
SMP = 700.000
SMA = 1.300.000
D3  = 1.500.000
S1  = 2.000.000
Misalnya kita harus merubah gaji bagi yang berlulusan SD, dari 500.000 menjadi 600.000. Untuk mengganti text di dalam file via terminal linux, lakukan perintah seperti tadi :
root@apocalypsix : sed -e 's/500.000/600.000/g' daftar_gaji > daftar_gaji_baru
Kira-kira seperti itulah, kasus saya pun terselesaikan hanya dengan sepenggal sajak berbahasa linux :D
Jika anda juga mengalami kasus serupa dan bingung bagaimana cara mengganti text di dalam file via terminal linux, mungkin cara ini bisa anda pakai, sepertinya format linux dan unix pun tidak akan terlalu jauh berbeda.


Semoga bermanfaat,
Salam Penguin! :)



Menghapus File lebih dari x hari di Linux


Hiyaa, ketemu lagi di blog Tutorial Linux Ubuntu Berbahasa Indonesia. Metode ini biasanya digunakan untuk daily backup pada sebuah storage yang dikhususkan untuk backup. Retensi backup yang diberikan bisa diatur sesuai keinginan kita. Mengapa harus seperti ini? Jawabannya adalah untuk menghemat space di storage kita. Bayangkan saja kalau setiap hari membackup pasti lama-lama storage kita akan penuh, maka dari itu file-file backup yang lama bisa di burning ke DVD/CD, atau kita menghapusnya seperti topik yang akan saya bahas.

Metode ini menggunakan Shell Script yang akan di eksekusi dengan crontab setiap jangka waktu tertentu, sudah pasti ini akan menjadi patokan retensi backup kita kan. :) sebenarnya tidak terlalu sulit untuk melakukannya, jadi jangan khawatir. Ikuti saja langkah-langkah cara menghapus file lebih dari x hari ini, anda juga bisa dengan bebas menjiplak shell script yang akan saya buat :)

Skenario :
Kita melakukan daily backup pada folder /home/apocalypsix/backup/. Didalam folder tersebut pasti akan tersimpan file backup dengan timestamp yang berbeda-beda. Setiap 7 hari jam 12:01 malam crontab akan mengeksekusi shell script dibawah ini.

Sample script :
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin

SEVENDAY=`date "+%d.%m.%Y" --date="-7 days"`

rm /home/apocalypsix/backup/backup_$SEVENDAY.tar.gz

  • Pada baris pertama dan kedua kita menentukan eksekutor shell script.
  • Pada baris ketiga kita sedang membuat aturan retensi hari, untuk bagian "--date="-7 days" anda bisa mengubah angkanya menjadi hari yang anda inginkan.
  • Pada baris keempat kita akan menghapus semua file yang bernama backup_ dengan memasukkan variabel retensi serta ekstensi file.
Untuk mengatur shell script ini berjalan setiap 7 hari, kita menggunakan crontab. Asumsi bahwa shell script tersimpan di /home/apocalypsix/shell/delete7day.sh. Jangan lupa untuk menambahkan permission x pada shell script anda, chmod 700 /home/apocalypsix/shell/delete7day.sh.
1 0 * * 0 /home/apocalypsix/shell/delete7day.sh
Dari crontab diatas, shell script kita akan di eksekusi pada hari ke 0 (hari minggu), pada jam 12:01 malam.

[ TAMBAHAN ]


Parameter tambahan untuk settingan retensi ada banyak. Parameter yang saya tau adalah bahwa pada bagian --date="x days", pada bagian "x" mempunyai parameter tersendiri, seperti jika kita membuat file untuk 5 hari kedepan maka value dari "x" maka tidak boleh memakai tanda minus (-). Tanda minus hanya digunakan jika anda ingin melakukan sesuatu pada beberapa hari kebelakang. Lain hal nya jika anda ingin melakukan penghapusan tadi pada setiap file sehari sebelum tanggal sekarang. Value dari "x" tadi harus menjadi "yesterday".

Sample script :
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin


YESTERDAY=`date "+%d.%m.%Y" --date="yesterday"`

rm /home/apocalypsix/backup/backup_$YESTERDAY.tar.gz
Dalam shell script diatas retensi penghapusan menjadi 1 hari. Tentunya ini harus disesuaikan pula dengan settingan crontab anda karena settingan crontab tersebut saling terkait dengan shell script anda. Crontab anda harusnya menjadi seperti ini :
1 0 * * * /home/apocalypsix/shell/delete1day.sh

Sekian dulu postingan kali ini, jika ada pertanyaan anda bisa tanyakan melalui komentar.
Semoga bermanfaat dan,
Salam Penguin :)

Format Penanggalan di Shell Script Linux Ubuntu (Timestamp Linux / Unix)

Hiyaa...ketemu lagi di blog Tutorial Linux Ubuntu Berbahasa Indonesia. Kali ini mari kita berbicara tentang Timestamp pada linux atau unix! Biasanya kita akan menyertakan timestamp ini pada sebuah file yang dihasilkan dari kegiatan rutin yang dilakukan dalam server kita. Didalam Linux maupun Unix penanggalan biasanya digunakan jika kita membuat file secara otomatis seperti misalnya backup harian, hal ini tentu akan memudahkan kita dalam management file backup. Tanpa hal ini kita akan dibuat pusing oleh pekerjaan kita sendiri, ketika mau mencari file ditanggal tertentu tapi tidak ada patokan jelas yang dapat mempermudah pencarian kita. Maka dari itu penanggalan ini diperlukan. Format penanggalan di linux :


Syntax standard dari penanggalan adalah :
date +"%d-%m-%y"
Output :
14-07-13
Untuk membuat tahun menjadi 4 digit :
date +"%d-%m-%Y"
Output : 
14-07-2013
Untuk menampilkan jam saja :
date +"%T"
Output :
04:42:42
Untuk menampilkan format waktu 12 jam :
date +"%r"
Output :
04:44:21 AM
Untuk menampilkan waktu dalam format HH:MM :
date +"%H:%M"
Output :
04:47
Sekarang bagaimana caranya menampilkan tanggal/waktu didalam variabel shell script?

Cukup tambahkan baris dibawah ini kedalam shell script anda
NOW=$(date +"%m-%d-%Y")

Contoh shell script backup dengan penanggalan
#!/bin/sh

NOW=`date "+%d.%m.%Y.%H"`

tar -cf /path/storage/backup/anda/fileanda.${NOW}.tar /path/file/yang/akan/anda/backup
gzip /pat/storage/backup/anda/fileanda.${NOW}.tar
 
Contoh shell script diatas akan menghasilkan file backup dengan format seperti ini :
fileanda.14.07.2013.15.tar.gz
Akan saya tuliskan atribut penanggalan (date) secara lengkap

%FORMAT StringDescription
%%a literal %
%alocale's abbreviated weekday name (e.g., Sun)
%Alocale's full weekday name (e.g., Sunday)
%blocale's abbreviated month name (e.g., Jan)
%Blocale's full month name (e.g., January)
%clocale's date and time (e.g., Thu Mar 3 23:05:25 2005)
%Ccentury; like %Y, except omit last two digits (e.g., 21)
%dday of month (e.g, 01)
%Ddate; same as %m/%d/%y
%eday of month, space padded; same as %_d
%Ffull date; same as %Y-%m-%d
%glast two digits of year of ISO week number (see %G)
%Gyear of ISO week number (see %V); normally useful only with %V
%hsame as %b
%Hhour (00..23)
%Ihour (01..12)
%jday of year (001..366)
%khour ( 0..23)
%lhour ( 1..12)
%mmonth (01..12)
%Mminute (00..59)
%na newline
%Nnanoseconds (000000000..999999999)
%plocale's equivalent of either AM or PM; blank if not known
%Plike %p, but lower case
%rlocale's 12-hour clock time (e.g., 11:11:04 PM)
%R24-hour hour and minute; same as %H:%M
%sseconds since 1970-01-01 00:00:00 UTC
%Ssecond (00..60)
%ta tab
%Ttime; same as %H:%M:%S
%uday of week (1..7); 1 is Monday
%Uweek number of year, with Sunday as first day of week (00..53)
%VISO week number, with Monday as first day of week (01..53)
%wday of week (0..6); 0 is Sunday
%Wweek number of year, with Monday as first day of week (00..53)
%xlocale's date representation (e.g., 12/31/99)
%Xlocale's time representation (e.g., 23:13:48)
%ylast two digits of year (00..99)
%Yyear
%z+hhmm numeric timezone (e.g., -0400)
%:z+hh:mm numeric timezone (e.g., -04:00)
%::z+hh:mm:ss numeric time zone (e.g., -04:00:00)
%:::znumeric time zone with : to necessary precision (e.g., -04, +05:30)
%Zalphabetic time zone abbreviation (e.g., EDT)

Saya cukupkan dulu Tutorial kali ini. Selanjutnya Insya Allah saya akan membagikan trips trik yang berkaitan dengan timestamp yang mungkin akan berguna untuk anda.

Semoga bermanfaat,
Salam penguin! :)

SCP/SSH Otomatis di Linux Ubuntu


Selamat datang kembali di blog Tutorial Linux Ubuntu Berbahasa Indonesia. Kali ini mari kita berbicara mengenai bagaimana cara SSH/SCP otomatis di linux.
Ada kalanya para administrator dituntut untuk melakukan beberapa kegiatan rutin, baik itu setiap hari atau dalam skala waktu tertentu pada server mereka. Salah satunya adalah backup mungkin, dimana server tertentu diharuskan melakukan kegiatan backup setiap hari. Misalnya hasil backup tersebut harus di pindahkan ke server lain atau biasanya hal ini disebut DRC (Disaster Recovery Center).

Kegiatan ini tentunya tidak akan dilakukan secara manual oleh sang administrator, untuk melakukannya secara otomatis ada sebuah service pada linux bernama crontab. Untuk penjelasan mengenai crontab akan dibahas di posting berikutnya, jadi untuk saat ini kita akan fokus pada pembahasan sesuai judul.

Ketika melakukan SSH atau SCP biasanya kita akan diminta memasukkan password, tentu bukan ini yang kita inginkan karena kegiatan scp ini akan berjalan secara otomatis. Jadi sebelum membuat shell script untuk backup kita harus melakukan beberapa hal supaya ketika running scp/ssh kita tidak akan diminta password.

Skenario :
Server A = Server yang akan melakukan daily backup
Server B = Server yang akan menampung hasil backup dari Server A 

Step 1
Login ke Server A sebagai root lalu jalankan perintah ini :
ssh-keygen -b 1024 -t dsa
aplikasi ssh-keygen akan membuat 2 file : private key (dengan nama "id_dsa") dan public key (dengan nama "id_dsa.pub") sepanjang 1024 byte dengan enkripsi DSA di folder /home/user/.ssh
Catatan : 
  • jangan mengisi passphrase.
  • Folder berawalan "titik" menandakan hidden folder yang tidak akan nampak dengan perintah "ls" saja. 
Step 2
Login ke Server B sebagai user biasa ($) bukan sebagai root (#) dan buatlah file di /home/user/.ssh/authorized_keys dengan mode 600.

Step 3
Copy kan isi file id_dsa.pub  dari Server A (pastikan hanya ada 1 baris didalam file tersebut), lalu paste di file /home/user/.ssh/authorized_keys

Setelah semua selesai, seharusnya ketika Server A melakukan SSH ataupun SCP maka tidak akan dimintai password dan auto login ssh/scp di linux atu login otomatis di linux pun sudah berhasil kita lakukan. Jika hal itu terjadi berarti anda tidak melakukan langkah-langkah tadi dengan benar.

Selamat mencoba, jika anda mendapat permasalahan yang menyulitkan silahkan posting di komentar. Dengan senang hati saya akan membantu :)

Semoga bermanfaat,
Salam penguin! :)

Shell Script FTP Otomatis di Linux Ubuntu



Ternyata hal ini jadi sebuah permasalahan yang cukup menyebalkan untuk kebanyakan orang. Ketika membutuhkan upload otomatis dari server kita ke server lain. Bayangkan jika file yang harus diupload itu banyak dan memiliki jarak waktu yang cukup lama, masih harus kah kita meng-upload file-file tersebut secara manual? Kalau saya tidak, karena saya tipe orang pemalas pada dasarnya, jadi sebisa mungkin saya mencari cara bagaimana hal tersebut berjalan secara otomatis :p
Kita analogikan kita memiliki 2 server, dimana :
Server1 = 192.168.1.1
Server2 = 192.168.1.2
Dalam skenario-nya kita akan melakukan upload otomatis over ftp dari server1 ke server2, maka shell script untuk ftp otomatis di linux ubuntu nya akan seperti ini :

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin

HOST='192.168.1.2'
USER='server1'
PASSWORD='server1pwd'
FILE='/path/file/anda/berada'

ftp -n $HOST << END_SCRIPT
quote USER $USER
quote PASS $PASSWORD
put $FILE
quit
END_SCRIPT
exit 0

Perlu saya ingatkan, pada path file yang akan di upload ada baiknya tidak disimpan di folder /root/ karena ini berpotensi shell script atau ftp tidak bisa mengakses path tersebut. Hal itu terjadi pada saya, saya menyimpan file yang akan di upload di folder /root/foldersaya/filesaya.txt
Atau jika anda tetap ingin menyimpan file tersebut sama persis dengan ilustrasi diatas, maka ada baiknya shell script ftp anda disimpan di folder /root/folder-shell-script/shell-script-anda.sh. Saya sarankan juga agar file yang akan anda upload berada difolder yang sama dengan shell script anda. Lalu pada bagian FILE di shell script anda, haruslah menjadi seperti ini :
FILE='./file-anda'
Karena jika tidak begitu, masalahnya si file tidak akan dapat terbaca dan kurang lebih akan muncul error seperti ini :"Could not creating file".

Oke saya cukupkan sekian untuk tutorial ftp otomatis di linux ubuntu ini,
Semoga bisa bermanfaat,
Salam penguin! :)