29 Agustus 2013

Memperbaiki PDF yang Rusak di Linux

Malam ini saya mendownload file KBKI (Klasifikasi Baku Komoditi Indonesia) Tahun 2010 yang diterbitkan oleh Badan Pusat Statistik di alamat http://www.bps.go.id/download_file/KBKI_2010.pdf. File tersebut berisi kode-kode komoditi seluruh barang/jasa yang diproduksi, yang disusun secara sistematis, yang diklasifikasikan berdasarkan kegiatan ekonomi.  File tersebut berisi 151 halaman, dengan ukurannya file 8MB.

Namun setelah didownload, meski sukses, tidak berhasil dibaca oleh evince - PDF Viewer standar pada Ubuntu saya. Sementara Mozilla (dengan plugin pdf viewer) yang saya pakai dapat membaca halaman-halaman awal saja.

Menggunakan pdf viewer dengan tools mc (midnight commander) favorit saya, juga menampilkan error seperti pada gambar berikut:



Ternyata file yang dimaksud mengalami kerusakan alias corrupt.

Untuk memperbaiki file tersebut, dapat dlakukan dengan perintah sbb:

$ gs -o nama_filehasil.pdf \
  -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress \
  nama_file_rusak.pdf

Catatan: gs adalah software Ghostscript, merupakan free software untuk mengolah file berbasis Adobe Postscript dan Portable Document Format.

Setelah perintah dijalankan, file berhasil diperbaiki dan dapat dibaca keseluruhanya. Namun yang mengherankan, ukurannya menjadi 3MB, jauh dari aslinya yang 8MB. Berkurangnya ukuran file tersebut belum saya ketahui pengaruhnya.




Menjalankan Perintah Linux di Terminal Secara Background

Untuk menjalankan perintah pada terminal Linux secara background dapat dilakukan dengan menambahkan '&' (ampersan)  di akhir perintah. Contoh:

$ ./myscript.sh &

Bila tidak ada tanda '&', prompt akan menunggu proses selesai. Namun dengan adanya '&', prompt langsung dikembalikan kepada user, sehingga user dapat melanjutkan kegiatan yang lain.

Sementara untuk menjalankan perintah background secara remote, dapat dilihat pada halaman ini http://gagas9.blogspot.com/2013/08/perintah-shell-linux-agar-proses-tidak.html

Nohup, Perintah Shell Linux Agar Proses Tidak Terputus

Seringkali saya melakukan koneksi ssh pada malam hari ke remote computer yang berada di tempat kerja untuk melakukan suatu proses yang memakan waktu lama, misalnya melakupan updating system, mendownload file yang besar seperti ISO, melakukan data scrapping, mengenerate tabel-tabel dari data yang besar, dll. Dengan cara begitu saya banyak menghemat paket internet saya, karena seluruh proses tidak dilakukan di komputer saya. Kemudian baru besoknya saya tinggal mengambil hasilnya di tempat kerja.

Namun bila koneksi terputus, maka proses yang dilakukan di remote computer juga terhenti. Saya harus masuk lagi dan kembali mengulangi atau melanjutkan proses yang terhenti tadi. Sangat mengesalkan, bukan?

Untuk itu, agar proses tidak terhenti meskipun kita disconnect, maka dapat digunakan perintah nohup. Contohnya sebagai berikut:

$ nohup wget http://anyhost.tld/anybigfile.iso &

Dengan perintah demikan, maka proses akan dikerjakan oleh system secara background dan tidak terhenti saat kita memutuskan koneksi.

Namun dengan nohup, output suatu proses disimpan pada file nohup.out. Sehingga untuk melihat proses sudah berlangsung sampai dimana, kita tinggal beri perintah:

$ tail nohup.out


Berikut ini adalah format penulisan perintah nohup:

$ nohup perintah_yang_akan_dieksekusi &

Semoga bermanfaat.