Arsip Tag: terminal

Panduan Dasar Terminal Ubuntu untuk Pemula


Bismillahirrahmanirrahim.

Tulisan ini tersedia dalam PDF.

utilities-terminalSaya susun tulisan ini untuk setiap pemula baik yang migrasi dari Windows maupun tidak. Tulisan ini disusun berdasarkan prioritas yang terpenting di atas yang penting. Tulisan ini disusun untuk membantu Anda mengerti cara pakai Terminal Ubuntu dengan cepat. Anda akan melihat 2 hal terpenting dalam tulisan ini, yakni sistem manajemen paket dan konfigurasi dasar. Semua gambar skrinsot di dalam tulisan ini disediakan dalam kualitas tinggi. Silakan lakukan zoom jika gambar tidak terlihat jelas. Semoga tulisan ini bermanfaat. Baca lebih lanjut

Pemrograman Qt 10 – QTextEdit, QLabel, Membaca Standard Output Shell, Membaca Berkas, dan Membuat Berkas TXT


Bismillahirrahmanirrahim.

Tulisan ini tersedia dalam PDF.

qt-creator-logoTulisan ini menjelaskan bagaimana membuat sebuah aplikasi kecil repo changer yang bisa mengganti konfigurasi repositori Ubuntu kita dan bisa membaca isi sources.list kita secara mudah dengan Qt. Aplikasi ini masih bersifat percobaan dan sama sekali bukan versi final. Seperti biasa, pada akhir tulisan disertakan tautan unduh kode sumbernya. Seluruh informasi repositori dalam tulisan ini diambil dari tulisan https://malsasa.wordpress.com/2013/10/15/daftar-lengkap-repositori-lokal-ubuntu-12-04-plus-cara-mengaturnya/. Semoga tulisan ini bermanfaat.

Spesifikasi Sistem

  1. Ubuntu 12.04
  2. Qt Creator 2.4.1
  3. Qt 4.8.0 (32 bit)

Daftar Kelas

  1. QTextEdit
  2. QFile
  3. QProcess
  4. QStringList
  5. QString
  6. QLabel

Daftar Method

  1. start()
  2. waitForFinished()
  3. setText() (milik QLabel)
  4. setReadOnly() (milik QTextEdit)
  5. readAllStandardOutput() (milik QProcess)

Cuma 5? Ya, cuma 5.

Arah Tulisan Ini

Tulisan ini akan menjelaskan bagaimana membuat program yang bisa melakukan hal-hal berikut

  1. Jika satu tombol diklik, maka isi sources.list berubah.
  2. Klik tombol Kambing maka isi sources.list berisi konfigurasi repo Kambing, klik tombol UGM maka berisi konfigurasi repo UGM, dan seterusnya.
  3. Klik tombol Baca maka isi sources.list akan ditayangkan di QTextEdit.
  4. Klik tombol Kambing, maka indikator (QLabel) menayangkan bahwa repo saat ini adalah Kambing dan seterusnya.

ngite-kesepuluh1

Secara teknis, kita akan belajar bagaimana menggunakan QTextEdit, membaca standard output, memasukkan standard output ke dalam QTextEdit, membuat berkas teks dengan Qt, dan menulis string di C++.

Apa Itu Standard Output?

Standard output adalah teks yang dikeluarkan oleh program dari dalam sistem setelah melakukan suatu proses. Biasanya kita melihat standard output di dalam Terminal. Contohnya ketika kita gunakan perintah ls -l maka keluarannya seperti ini:

total 3960
-rw-r--r-- 1 master master 2673568 Mar 13  2011 kbbi.dict.dz
-rw-r--r-- 1 master master 1348181 Mar 13  2011 kbbi.idx
-rw-r--r-- 1 master master     297 Mar 13  2011 kbbi.ifo
-rw-r--r-- 1 master master   24330 Mar 13  2011 kbbi.syn

Keluaran di atas disebut standard output. Pendek kata, keluaran dari segala perintah Linux adalah standard output. Yang paling penting untuk diingat adalah standard output itu dikeluarkan secara broadcast (seperti siaran televisi) sehingga tidak hanya Terminal kita saja sebetulnya yang bisa menayangkan keluaran tersebut. Jika kita membuat aplikasi yang bisa membaca standard output, maka keluaran dari perintah Linux apa saja bisa ditayangkan di dalam aplikasi kita. Artinya, tidak perlu membuka Terminal lagi untuk menayangkan keluaran perintah yang kita panggil. Mirip Synaptic yang bisa menayangkan keluaran dpkg secara realtime ketika menginstal program.

Antara Standard Output dan Program Ini

Apa hubungan standard output dengan program kali ini? Hubungannya adalah program kita ini harus bisa membaca isi dari berkas teks (sources.list). Metode pembacaan berkas ada banyak sekali. Kita pilih satu mettode saja, yakni menggunakan cat. Kita mengenal perintah cat (concatenate) untuk mengeluarkan isi teks ke layar Terminal. Kalau kita lakukan perintah cat sources.list, maka teks isinya akan ditayangkan di layar Terminal. Teks inilah standard output. Jika kita bisa menangkapnya, maka teks dari sources.list bisa ditayangkan di dalam aplikasi kita. Pembacaan standard output adalah rahasianya.

Mengenai sources.list Kita

Kita tidak akan menyentuh berkas sources.list yang asli pada /etc/apt/sources.list karena ini adalah berkas sistem. Berkas ini berisi baris-baris alamat repo kita. Kalau terdapat kesalahan satu huruf saja di dalamnya, apt pasti menayangkan pesan error ketika kita menginstal aplikasi. Jika sudah error, maka kita harus membetulkannya secara manual. Selain itu, jika kita buka berkas sources.list buatan sendiri di /home, otomatis Synaptic Package Manager akan terbuka karena adanya asosiasi sistem. Walaupun sebenarnya tidak masalah, tetapi kita memilih jalan paling praktis yakni membuat berkas bernama sources. Ya, sources begitu saja tanpa akhiran .list. Berkas ini diibaratkan sebagai sources.list betulan sehingga apa yang bisa dilakukan dengan ini, pasti hasilnya sama jika dilakukan pada sources.list yang asli. Berkas ini akan dibuat di dalam direktori build yang diciptakan otomatis oleh Qt Creator. Dalam Ubuntu saya, berkas ini akan dibuat di direktori /home/master/Publik/QtProject/ProyekRC-build-desktop-Qt_4_8_1_in_PATH__System__Release/.

ngite-kesepuluh3

Kode

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtGui>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    QGridLayout         *vl;
    QVBoxLayout         *sl;
    QVBoxLayout         *dl;
    QWidget             *widget;
    QPushButton         *pb_kambing;
    QPushButton         *pb_fossid;
    QPushButton         *pb_ugm;
    QPushButton         *pb_buaya;
    QPushButton         *pb_baca;
    QTextEdit           *te_baca;
    QLabel              *lb_repo;

public slots:
    void ganti_ke_kambing();
    void ganti_ke_fossid();
    void ganti_ke_ugm();
    void ganti_ke_buaya();
    void baca_sources_list();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp

//ProyekRC = Proyek Repo Changer
//proyek mini ini dibuat sebagai bak pasir bagi saya untuk mempelajari I/O, string,
//dan pembuatan berkas teks dengan Qt
//16 Oktober 2013
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    vl          =           new         QGridLayout();
    sl          =           new         QVBoxLayout();
    dl          =           new         QVBoxLayout();
    widget      =           new         QWidget();
    pb_kambing  =           new         QPushButton("KAMBING");
    pb_fossid   =           new         QPushButton("FOSS-ID");
    pb_ugm      =           new         QPushButton("UGM");
    pb_buaya    =           new         QPushButton("BUAYA");
    pb_baca     =           new         QPushButton("BACA");
    te_baca     =           new         QTextEdit;
    lb_repo     =           new         QLabel;

    vl->addWidget(pb_kambing, 1, 1);
    vl->addWidget(pb_fossid, 1, 2);
    vl->addWidget(pb_ugm, 1, 3);
    vl->addWidget(pb_buaya, 2, 1);
    vl->addWidget(pb_baca, 2, 2);
    vl->addWidget(lb_repo, 2, 3);
    vl->setHorizontalSpacing(3);
    vl->setVerticalSpacing(3);
    dl->addWidget(te_baca);

    pb_kambing->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    pb_fossid->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    pb_ugm->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    pb_buaya->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    pb_baca->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    te_baca->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

    pb_kambing->setMinimumHeight(55);     //pb_kambing->setMaximumWidth(133);
    pb_fossid->setMinimumHeight(55);      //pb_fossid->setMaximumWidth(133);
    pb_ugm->setMinimumHeight(55);         //pb_ugm->setMaximumWidth(133);
    pb_buaya->setMinimumHeight(55);       //pb_buaya->setMaximumWidth(133);
    pb_baca->setMinimumHeight(55);        //pb_baca->setMaximumWidth(133);
    te_baca->setMinimumSize(575,199);

    sl->addLayout(vl);
    sl->addLayout(dl);

    widget->setLayout(sl);

    this->setCentralWidget(widget);

    //saatnya mengasosiasikan tombol dengan fungsi
    connect(pb_kambing, SIGNAL(clicked()), this, SLOT(ganti_ke_kambing()));
    connect(pb_fossid, SIGNAL(clicked()), this, SLOT(ganti_ke_fossid()));
    connect(pb_ugm, SIGNAL(clicked()), this, SLOT(ganti_ke_ugm()));
    connect(pb_buaya, SIGNAL(clicked()), this, SLOT(ganti_ke_buaya()));
    connect(pb_baca, SIGNAL(clicked()), this, SLOT(baca_sources_list()));

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::ganti_ke_kambing()
{
    QStringList argumen;
    argumen << "-c" <<
           "echo 'deb http://kambing.ui.ac.id/ubuntu precise main restricted multiverse universe\n"
                 "deb http://kambing.ui.ac.id/ubuntu/ precise-update main restricted multiverse universe\n"
                 "deb http://kambing.ui.ac.id/ubuntu/ precise-security main restricted universe multiverse\n"
                 "deb http://kambing.ui.ac.id/ubuntu/ precise-backports main restricted universe multiverse' > sources";
    /* C++ itu otomatis melakukan concatenate (penggabungan) untuk string yang dipisahkan barisnya seperti di atas
    - perhatikan " dan ' di sana, asalnya baris-baris string itu satu
    - Tanda ' ditangguhkan sampai baris terakhir supay seluruh baris dianggap sebaris oleh QStringList
    - jangan lupakan \n (newline) di setiap akhir baris karena sources.list itu berkas berbahaya
    - sementara berkas keluaran tidak dinamakan _sources.list_ karena asosiasi penyunting teks dalam sistem
    - sumber: http://stackoverflow.com/questions/4276026/how-to-write-a-qstring-on-several-lines
    16 Oktober 2013 */

    QProcess perintah;
    perintah.start("/bin/bash", argumen);
    perintah.waitForFinished(-1);

    //baru terpikir pada 17 Oktober
    this->lb_repo->setText("<b>Repo Sekarang: Kambing</b>");
}

void MainWindow::ganti_ke_fossid()
{
    QStringList argumen;
    argumen << "-c" <<
            "echo 'deb http://dl2.foss-id.web.id/ubuntu/ precise main restricted universe multiverse\n"
                  "deb http://dl2.foss-id.web.id/ubuntu/ precise-updates main restricted universe multiverse\n"
                  "deb http://dl2.foss-id.web.id/ubuntu/ precise-security main restricted universe multiverse\n"
                  "deb http://dl2.foss-id.web.id/ubuntu/ precise-backports main restricted universe multiverse' > sources";

    QProcess perintah;
    perintah.start("/bin/bash", argumen);
    perintah.waitForFinished(-1);

    this->lb_repo->setText("<b>Repo Sekarang: FOSS-ID</b>");
}

void MainWindow::ganti_ke_ugm()
{
    QStringList argumen;
    argumen << "-c" <<
            "echo 'deb http://repo.ugm.ac.id/ubuntu/ precise main restricted universe multiverse\n"
                  "deb http://repo.ugm.ac.id/ubuntu/ precise-updates main restricted universe multiverse\n"
                  "deb http://repo.ugm.ac.id/ubuntu/ precise-security main restricted universe multiverse' > sources";

    QProcess perintah;
    perintah.start("/bin/bash", argumen);
    perintah.waitForFinished(-1);

    this->lb_repo->setText("<b>Repo Sekarang: UGM</b>");
}

void MainWindow::ganti_ke_buaya()
{
    QStringList argumen;
    argumen << "-c" <<
            "echo 'deb http://buaya.klas.or.id/ubuntu/ precise main restricted universe multiverse\n"
                  "deb http://buaya.klas.or.id/ubuntu/ precise-updates main restricted universe multiverse\n"
                  "deb http://buaya.klas.or.id/ubuntu/ precise-security main restricted universe multiverse' > sources";

    QProcess perintah;
    perintah.start("/bin/bash", argumen);
    perintah.waitForFinished(-1);

    this->lb_repo->setText("<b>Repo Sekarang: Buaya</b>");
}

void MainWindow::baca_sources_list()
{
    //kode ini saya buat dengan menebak saja
    QString isi_sources_list;
    QProcess perintah_baca_sources;
    perintah_baca_sources.start("cat sources");
    perintah_baca_sources.waitForFinished(-1);
    isi_sources_list = perintah_baca_sources.readAllStandardOutput();

    this->te_baca->setText(isi_sources_list);
    this->te_baca->setReadOnly(true);
}

Qt Creator dan Kode

resized_ngite-kesepuluh2

Hasil

ngite-kesepuluh4

Jika tombol KAMBING diklik, maka QLabel akan memberikan informasi bahwa repo sekarang adalah Kambing. Perhatikan, QTextEdit masih kosong.

ngite-kesepuluh5

Barulah setelah tombol BACA diklik, maka QTextEdit membaca isi dari berkas sources kita.

Pembahasan

Pembahasan untuk kode sumber kali ini hanya berpusat pada mainwindow.cpp saja.

mainwindow.h

Isi header kali ini masih selaras dengan header program sebelumnya. Silakan merujuk ke sana jika Anda belum paham cara deklarasi dalam header ini.

mainwindow.cpp

Ada 2 bagian saja yang penting dalam berkas cpp kita kali ini. Bagian kelas utamanya (pembentukan jendela) tidak perlu diperhatikan. Namun jika Anda belum paham soal bagaimana membentuk jendela dan membuat koneksi SIGNAL & SLOT dengan Qt, silakan merujuk ke sini dan ke sini.

1. Fungsi Ganti Repo & Notifikasi QLabel

void MainWindow::ganti_ke_kambing()
{
    QStringList argumen;
    argumen << "-c" <<
           "echo 'deb http://kambing.ui.ac.id/ubuntu precise main restricted multiverse universe\n"
                 "deb http://kambing.ui.ac.id/ubuntu/ precise-update main restricted multiverse universe\n"
                 "deb http://kambing.ui.ac.id/ubuntu/ precise-security main restricted universe multiverse\n"
                 "deb http://kambing.ui.ac.id/ubuntu/ precise-backports main restricted universe multiverse' > sources";

    QProcess perintah;
    perintah.start("/bin/bash", argumen);
    perintah.waitForFinished(-1);

    this->lb_repo->setText("<b>Repo Sekarang: Kambing</b>");
}

Kode di atas adalah fungsi buatan sendiri. Nama fungsinya ganti_ke_kambing(). Isinya adalah deklarasi lokal dan fungsi-fungsi Qt untuk mengubah isi berkas source dengan teks pengaturan repositori Kambing UI. Cara kerja fungsinya adalah menggunakan QProcess sebagai pemanggil /bin/bash dan QStringList sebagai penampung argumen yakni perintah bash yang sebenarnya dipakai. Perintah bash yang dipakai adalah echo dengan memakai redirector ‘>‘ untuk membuat berkas sources. Jika Anda belum memahami metode pemanggilan perintah shell ini, silakan merujuk ke sini.

Kode di atas jika dijalankan, maka akan mengosongkan seluruh isi sources lalu menimpanya dengan teks yang tersebut dalam echo. Ini karena sifat redirector ‘>’ yang me-replace isi teks.   Tidak berhenti sampai situ. Pengguna memerlukan notifikasi yang menandakan konfigurasi repo telah berubah ke server tertentu. Maka dipanggillah fungsi setText() milik objek lb_repo (QLabel) dalam jendela (this). Kodenya adalah this->lb_repo->setText(“Repo Sekarang: Kambing”);. Cara kerja ini sama untuk fungsi-fungsi ganti_ke_*() di bawahnya.

Masalah C++ yang penting untuk diketahui adalah model penyimpanan string di dalam objek QString. Untuk memudahkan penulisan, kita harus menaruh satu baris URL repo di bawah baris yang lain. Kalau kita tulis memanjang ke samping, kode kita jadi tidak nyaman dibaca. Maka kita memakai salah satu fitur C++ itu sendiri yakni sanggup menggabungkan (concatenate) string yang terpisah baris tetapi setiap baris diapit dengan tanda petik ganda (“”) tanpa mengakhirkan apa-apa setelah terakhir. Coba perhatikan kode ini:

argumen << "-c" <<
"echo 'deb http://kambing.ui.ac.id/ubuntu precise main restricted multiverse universe\n"
"deb http://kambing.ui.ac.id/ubuntu/ precise-update main restricted multiverse universe\n"
"deb http://kambing.ui.ac.id/ubuntu/ precise-security main restricted universe multiverse\n"
"deb http://kambing.ui.ac.id/ubuntu/ precise-backports main restricted universe multiverse' > sources";

Mari perhatikan perbedaan pemakaian tanda  (petik tunggal) dan  (petik ganda) dalam kode ini. Perhatikan pemakaian sebelum echo dan sesudah sources. Mereka berdua adalah pengapit seluruh baris. Perhatikan sebelum deb pada baris pertama dan sesudah multiverse pada baris terakhir. Itu adalah pengapit string bagi perintah echo. Jadi, echo punya string sendiri dan variabel argumen di sini punya string sendiri juga. Ada string di dalam string. Dan otomtis C++ menganggap semua baris sebagai satu string karena “” pada setiap baris hingga akhir tanpa ada tambahan karakter di setiap akhir baris. Ingat, harus ada escape character untuk newline (Enter) pada akhir setiap string karena kita harus mengikuti standar apt dalam mengisi sources.list yakni satu URL dalam satu baris, tidak boleh salah. Begitu caranya membuat banyak baris dalam 1 string di dalam C++.

2. Fungsi Baca Berkas


void MainWindow::baca_sources_list()
{
    QString isi_sources_list;
    QProcess perintah_baca_sources;
    perintah_baca_sources.start("cat sources");
    perintah_baca_sources.waitForFinished(-1);
    isi_sources_list = perintah_baca_sources.readAllStandardOutput();

    this->te_baca->setText(isi_sources_list);
    this->te_baca->setReadOnly(true);
}

Kode ini berbeda dengan semua fungsi ganti_ke_*() sebelumnya. Kode ini adalah fungsi yang dikoneksikan dengan tombol BACA (pb_baca). Namanya baca_sources_list(). Isinya deklarasi lokal dan fungsi bagi QProcess untuk membaca standard output dari perintah cat sources.

Yang perlu diperhatikan adalah baris

isi_sources_list = perintah_baca_sources.readAllStandardOutput();

Maksud baris tersebut adalah memasukkan apa yang ditangkap oleh method readAllStandardOutput() di dalam objek perintah_baca_sources, ke dalam variabel isi_sources_list. Ini cara kita menangkap standard output. Setelah itu, kita memasukkan hasil tangkapan tadi ke dalam QTextEdit dengan kode

this->te_baca->setText(isi_sources_list);

maka jadilah apa yang kita inginkan yaitu menampilkan isi berkas sources ke dalam aplikasi kita. Ya, rahasianya adalah dengan memakai perintah bash lalu membaca standard outputnya. Masih banyak cara lain yang belum saya mengerti. Sementara, kita akan memakai cara ini untuk program-program berikutnya.

Unduh Kode Sumber

Program kali ini bernama ProyekRC (Repo Changer). Silakan unduh dan impor di Qt Creator Anda.

Kesimpulan

  1. Pembacaan standard output di Qt bisa dilakukan dengan QProcess melalui method readAllStandardOutput().
  2. QTextEdit bisa dipakai untuk menerima penulisan teks dari pengguna maupun menayangkan teks dari program. Bahkan bisa menayangkan standard output.

Rujukan

Pemrograman Qt 9 – QProcess dan Menjalankan Perintah Linux


Bismillahirrahmanirrahim.

qt-creator-logoKita bisa mengomando Linux melalui GUI. Bagaimana caranya? Ada banyak cara. Lihat dulu contoh semisal Ubuntu Tweak. Aplikasi tersebut menggantikan ratusan perintah Terminal dengan beberapa tombol saja. Jika Anda menekan satu tombol di Ubuntu Tweak, maka itu berarti menjalankan perintah tertentu. Konsep ini (GUI front-end) sangat berguna jika kita ingin membuat aplikasi yang melakukan otomatisasi perintah Terminal yang biasa kita kerjakan. Misalnya kita ingin mengganti alamat sumber repositori Ubuntu. Apa yang kita lakukan? Ubah sources.list secara manual, ketik sendiri alamat-alamat yang banyak itu dari hafalan Anda, lakukan update. Hal yang seperti ini bisa dibuatkan GUI supaya otomatis dengan menyimpan alamat-alamat sumber repositori lalu menambahkan tombol untuk masing-masing repositori. Jadi, cukup satu klik untuk mengganti repositori kita ke server Kambing atau UGM atau yang lain. Ini contoh saja. Sekarang kita akan membuat yang lebih sederhana dari itu. Kita akan memakai QProcess (sebagai ganti method system() kemarin) untuk menjalankan perintah Linux lebih canggih lagi di dalam Qt. Mengapa kita beralih ke QProcess? Nanti kita akan tahu, insya Allah.

Spesifikasi Sistem

  1. Ubuntu 12.04
  2. Qt Creator 2.4.1
  3. Qt 4.8.0 (32 bit)

Daftar Kelas

  1. QProcess
  2. QStringList
  3. QByteArray

Daftar Method

  • start() milik QProcess.
  • waitForFinished() milik QProcess.
  • readAll() milik QProcess.
  • printf() method standar iostream dari C++.

Arah Tulisan Ini

Saya hanya ingin menunjukkan bagaimana aplikasi Qt bisa dibuat seperti contoh di atas, seperti Ubuntu Tweak yang satu tombolnya menggerakkan beberapa perintah Terminal. Dan saya bilang kali ini lebih canggih karena kita bisa menangkap keluaran dari perintah yang dijalankan. Ini penting untuk mewujudkan aplikasi-aplikasi yang dapat mengeksekusi perintah Terminal, menangkap keluarannya, memroses keluaran tersebut, lalu membuat keluaran baru. Contoh nyatanya adalah aplikasi pengganti sources.list otomatis pada paragraf pertama di atas.

Kode

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog();
    QVBoxLayout *layout;
    QPushButton *tombola;
    QPushButton *tombolb;
    QPushButton *tombolc;

public slots:
    void perintah_cat();
    void perintah_mkdir();
    void perintah_ls();

private:

};

#endif // MAINWINDOW_H

mainwindow.cpp

#include <iostream>
#include <QtGui>
#include <mainwindow.h>

Dialog::Dialog()   //kagak usah dikasih void
{
    layout  = new QVBoxLayout;
    tombola = new QPushButton("cat");
    tombolb = new QPushButton("mkdir");
    tombolc = new QPushButton("ls");

    tombola->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    tombolb->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    tombolc->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

    tombola->setMinimumSize(88,55);
    tombolb->setMinimumSize(88,55);
    tombolc->setMinimumSize(88,55);

    layout->addWidget(tombola);
    layout->addWidget(tombolb);
    layout->addWidget(tombolc);

    setLayout(layout);

    connect(tombola, SIGNAL(clicked()), this, SLOT(perintah_cat()));
    connect(tombolb, SIGNAL(clicked()), this, SLOT(perintah_mkdir()));
    connect(tombolc, SIGNAL(clicked()), this, SLOT(perintah_ls()));
}

void Dialog::perintah_cat()
{
    QProcess *cat = new QProcess;
    cat->start("/bin/bash -c \"rm isifolder.txt\"");
}

void Dialog::perintah_mkdir()
{
    QProcess sh;
    sh.start("sh", QStringList() << "-c" << "ifconfig | grep inet");

    sh.waitForFinished(-1);
    QByteArray output = sh.readAll();
    printf(output);
}

void Dialog::perintah_ls()
{
    QStringList options;
    options << "-c" << "ls -l | grep a | sort > isifolder.txt";

    QProcess process;
    process.start("/bin/sh", options);
    process.waitForFinished(-1);
}

Qt Creator dan Kode

ngite-kesembilan8

Panel sebelah kiri berisi mainwindow.cpp dan sebelah kanan mainwindow.h.

Hasil Kode

Tampilan program kali ini sama dengan sebelumnya. Bedanya, isi perintah untuk masing-masing tombol saya ubah. Saya akan jelaskan satu per satu hasil perintah mulai dari tombol ketiga.

Tombol ls

Isi tombol ls adalah perintah untuk mendaftar isi folder tempat si program berada, menyaring supaya hanya informasi yang memiliki huruf a saja yang ditampilkan, lalu menuliskannya ke sebuah berkas teks bernama isifolder.txt.

ngite-kesembilan1 ngite-kesembilan2

Jika tombol ls ditekan, maka perintah ls -l | grep -a > isifolder.txt dijalankan. Maka jadilah satu berkas teks bernama isifolder.txt.

ngite-kesembilan3

Demikian isi dari berkas isifolder.txt.

ngite-kesembilan9

Demikian keluaran (standard output) dari perintah yang sama tetapi dijalankan dari Terminal. Sama persis dengan isi teks. Ini berarti program valid.

Tombol mkdir

Isi tombol mkdir adalah perintah untuk mengeluarkan informasi jaringan pada baris yang memiliki teks inet saja (membuang semua baris yang lain) dan informasi itu dicetak di dalam Terminal saja. Perintahnya adalah ifconfig | grep inet.

ngite-kesembilan6

Keluaran (standard output) hanya muncul setelah program ditutup.

ngite-kesembilan7

Sama keluarannya (standard output di Terminal asli dengan Terminal di Qt Creator). Valid.

Tombol cat

Isi tombol cat adalah perintah untuk menghapus berkas isifolder.txt yang sudah ada. Karena inilah saya jelaskan dari bawah ke atas.

Pembahasan

mainwindow.h

Sama seperti tulisan sebelumnya. Jika Anda belum mengerti model deklarasi dalam header ini, silakan merujuk ke sini.

mainwindow.cpp

Pada berkas .cpp proyek ini, ada 3 fungsi buatan yang perlu diperhatikan karena inilah inti program. Kita punya 3 model eksekusi perintah Terminal di Qt, setidaknya dalam program ini. Jika Anda belum mengerti bagaimana membangun elemen-elemen GUI dengan Qt, silakan merujuk ke sini.

  • Model Eksekusi Perintah Pertama
QProcess *cat = new QProcess;
cat->start("/bin/bash -c \"rm isifolder.txt\"");

Kita membuat sebuah objek bernama cat (dari nama cat (concatenate) bukan kucing) dari kelas QProcess. Lalu, dengan objek ini, kita panggil fungsi start(). Di dalam start() ini kita masukkan string yang merupakan perintah Terminal. Perhatikanlah, kita tidak langsung menulis perintah rm isifolder.txt seperti biasa dilakukan di Terminal. Kita mesti mengawali string perintah dengan /bin/bash. Lalu gunakanlah argumen -c (artinya membaca perintah bash dari string) milik /bin/bash tersebut. Lalu barulah kita tuliskan perintah yang ingin dilakukan. Perhatikan, ada sedikit perbedaan. Di sini, ada escape character \” yakni membuat yang diapit keduanya sebagai string. Ya, argumen -c itu tadi sebabnya. Kita memasukkan string ke dalam bash tetapi ia sanggup menerimanya sebagai perintah karena argumen -c. Yang paling penting, inilah model paling ringkas menggunakan QProcess untuk mengeksekusi perintah Terminal.

  • Model Eksekusi Perintah Kedua
QProcess sh;
sh.start("sh", QStringList() << "-c" << "ifconfig | grep inet");

sh.waitForFinished(-1);
QByteArray output = sh.readAll();
printf(output);

Inti dari model kedua ini adalah pemanfaatan method start() milik QProcess yang memiliki bentuk umum: start(command, argument);. Perintah kita taruh di command, argumen kita taruh di argument. Sekadar catatan, rm -rf ubuntu.png berarti rm itu perintah sedangkan -rf ubuntu.png itu argumen. Di sini, perintah yang digunakan adalah sh (pasti ada di /bin/ Anda) sedangkan argumen yang digunakan adalah -c dan ifconfig | grep inet. Istimewanya, di sini penggunaannya tidak sesederhana itu. Kita menggunakan kelas tambahan bernama QStringList di dalam argumen start(). QStringList ini adalah kelas yang bisa menampung beberapa string sekaligus. Oleh karena itu, ia dipakai untuk menampung string yang berisi argumen-argumen perintah. Ia sangat praktis, maka ia sering digunakan. Di sini, QStringList dipakai dengan deklarasi langsung QStringList() << “-c” << “ifconfig | grep inet”. Terlihat aneh, terlihat tidak biasa. Namun ini gunanya supaya kita tidak usah membuat satu objek baru.

Teristimewa untuk QByteArray output = sh.readAll(), ini maksudnya memanggil method readAll() milik objek QProcess, yang menghasilkan keluaran dari perintah yang dijalankan oleh QProcess, lalu keluaran itu disimpan pada objek output yang dibuat dari kelas QByteArray. Pendek kata, baris deklarasi ini mengambil standard output dari perintah di dalam objek QProcess. Oleh karena itu, ia akan mengeluarkan output dari perintah ifconfig | grep inet ke Terminal di dalam Qt Creator. Apakah ini tidak penting? Tidak, justru ini (standard output dan standard error) penting sekali untuk membangun aplikasi sebagaimana ditulis di paragraf pertama tulisan ini.

  • Model Eksekusi Perintah Ketiga
QStringList options;
options << "-c" << "ls -l | grep a | sort > isifolder.txt";

QProcess process;
process.start("/bin/sh", options);
process.waitForFinished(-1);

Model ketiga ini adalah yang paling mudah dipahami. Pertama-tama kita membuat objek QStringList dahulu yang menampung seluruh argumen yang dibutuhkan. Objek ini bernama options. Lalu kita buat objek QProcess yang menampung perintah /bin/sh (bisa diganti /bin/bash atau /bin/zsh jika Anda punya zsh). Objek ini bernama process. Lalu, kita panggil start(“/bin/sh”, options); untuk process. Maka jadilah program seperti yang saya tampilkan di bagian Hasil Kode di atas.

Inti dari ketiga jenis eksekusi perintah Terminal dari dalam Qt di atas adalah pemakaian kelas QProcess. Ada beberapa hal penting yang patut diperhatikan:

  1. Kita bisa menggunakan pipeline (|) dan redirection (>, <, >>, <<) setelah mereka dimasukkan sebagai string sekaligus argumen pada QProcess. Pipeline dan redirection adalah the ultimate power di sistem operasi Linux.
  2. Tidak seperti biasanya, di sini, yang disebut command itu malah /bin/bash (shell) kita bukan langsung pada command yang biasa kita ketik di Terminal. Justru command yang biasa kita pakai itu menjadi argument di sini.
  3. Adanya method waitForFinished(-1) di sini. Arti nilai -1 ini adalah menunggu sampai objek QProcess selesai mengerjakan tugasnya. Tanpa method ini, program tidak berjalan semestinya.
  4. Seluruh kode yang ada di sini adalah dasar kita untuk membuat aplikasi yang selain mampu mengeksekusi perintah Terminal, juga mampu membaca keluaran dari perintah yang dieksekusi bahkan mampu memrosesnya.

Unduh Kode Sumber

Program kali ini bernama Embrio-Metamorfosa juga. Saya menggunakan Git jadi tidak khawatir kode rusak. Silakan unduh dan buka di Qt Creator Anda.

Tautan: http://otodidak.freeserver.me/tarball/Embrio-Metamorfosa_Edisi_2.tar.gz
Ukuran: 3 KB

Kesimpulan

  • Eksekusi perintah Linux dengan Qt bisa dilakukan dengan QProcess selain dengan method system().
  • QProcess bisa dimanfaatkan untuk membaca standard output dan standard error dari segala perintah Linux.
  • Ada beberapa model eksekusi perintah Linux di dalam Qt tetapi seluruhnya tidak keluar dari bentuk umum qprocess.start(command, argument).
  • Kita beralih ke QProcess karena ia praktis dan memiliki semua perlengkapan untuk memanggil perintah Linux serta membaca dan mengolah standard output-nya.
  • Inti dari semua ini adalah pembuatan sebuah proses baru lalu proses itu memanggil perintah Linux.

Rujukan

Tutorial Shell Dasar 5 Menit


Tulisan ini tersedia dalam PDF

Baiklah, sering nian (terutama di kanal IRC) sebagian besar pemula menghadapi terminal. Terminal memiliki banyak nama: terminal, shell, console, bahkan disebut command prompt bagi yang familiar dengan Windows. Banyak orang takut memakainya dengan berbagai alasan, jadi tutorial ini bertujuan menyediakan perintah-perintah mendasar untuk mempermudah navigasi dan aktivitas sistem dasar dari keyboard Anda.

Mari memulai. Karena versi Linux setiap orang bisa saja berbeda, saya takkan mendetailkan bagaimana membuka terminal. Saya anggap Anda bisa menemukannya di menu.

Faktanya:

  1. Anda bisa melakukan hampir segalanya di terminal yang juga bisa lakukan dari GUI.
  2. Sebagian besar perintah dirancang khusus untuk bekerja di Terminal, kemudian GUI diciptakan di atasnya. Itulah mengapa sebagian GUI terasa lambat, karena diproses lagi setelah proses Terminal.
  3. Lokasi default Terminal Anda ketika dibuka dari menu adalah pada folder Home, yang dikenal pula dengan ~.
  4. Folder Anda sekarang ditunjukkan oleh operator . (titik). Sebagian besar perintah ketika berjalan di folder sekarang, bisa diikuti dengan . (titik).
  5. Perintah, lokasi, dan berkas adalah case sensitive. /home berbeda dari /HOME atau /Home.
  6. Gunakan tombol tab untuk menyempurnakan (secara otomatis) nama berkas. Jika Anda memiliki berkas bernama panjang seperti: 123214342565234-bukuputih.zip, maka cukup ketik 12 lalu tekan tombol tab untuk menyempurnakannya. Kalau ditekan tab masih juga belum sempurna, tambahkan karakternya jadi 123 dan seterusnya karena bisa saja ada berkas lain yang punya nama mirip (misalnya 1235151.zip).
  7. Hampir semua perintah dapat dibaca lengkap about-nya menggunakan manpage atau dengan mengetik -h atau –help setelah menulis nama perintah. Penulisannya bisa man namaperintah, namaperintah -h, atau namaperintah –help.
  8. Untuk memperoleh informasi lebih lengkap, Anda bisa menggunakan info. Sebuah perintah bisa dicari dengan menggunakan info namaperintah. Untuk sebagian besar perintah yang menjadi bagian dari coreutils package, Anda bisa menemukan informasi yang bagus menggunakan info coreutils namaperintah invocation.
  9. Hampir semua perintah dapat menampilkan apa yang sedang dilakukan. Ini dilakukan dengan menambahkan -v atau –verbose.
  10. Anda bisa menentukan banyak opsi pada perintah sekaligus untuk memperoleh informasi lebih banyak (lihat contoh ls -al di bawah).
  11. Nama perintah kadang tersingkat (seperti ls dari list) – karena keterbatasan ruang pada Unix zaman dahulu, nama perintah disingkat dan penyingkatan ini tidak diubah lagi.

Perintah:

cd → Digunakan untuk bernavigasi dalam direktori (folder). Anda bisa berpindah ke lokasi mana pun dengan path.

  1. cd Ini akan memindahkan Anda ke home, sama dengan cd ~.
  2. cd .. Ini akan mengembalikan Anda tepat satu direktori ke atas. Bermula dari /home/ahmad/Desktop, cd .. akan memindahkan Anda ke /home/ahmad. Ini dapat diperpanjang ke atas dengan cd ../ ../ dari Desktop akan memindahkan Anda 2 kali ke atas, dari Desktop Anda ke /home.
  3. cd namafolder/ Ini akan memindahkan Anda ke depan, ke folder yang ada di folder Anda sekarang. Ingat bahwa ada kesalahan umum pemakaian /. Jika Anda di /home/ahmad/ dan Anda ingin masuk ke Desktop, Anda harus mengetik cd Desktop/ tanpa / sebelum Desktop. Mengetik / sebelumnya akan memindahkan kita ke root dari sistem berkas, yang artinya salah tempat. Catatan penerjemah: Anda juga bisa menulisnya cd Desktop tanpa / setelah Desktop.
  4. cd /folder/yang/lainnya Ini akan membawa Anda ke alamat folder yang spesifik, kalau alamat yang Anda ketik tepat. Jangan lupakan tab Anda!

ls → Digunakan untuk mendaftar isi folder. Anda bisa menampilkan banyak jenis atribut dari berkas dan folder.

  1. ls Kalau sendirian, ia akan mendaftar semua berkas pada folder sekarang. Dari fakta #4, mengetik ls . (ls <spasi> titik) sama hasilnya dengan ls saja.
  2. ls -l Menampilkan daftar isi dalam format lebih panjang termasuk pemilik, izin, ukuran, dan tanggal dimodifikasinya.
  3. ls -a Menampilkan berkas dan folder tersembunyi beserta daftar isi biasa.
  4. ls -d */ Menampilkan hanya folder saja (tambahan dari penerjemah).
  5. ls -al Menggabungkan opsi untuk menampilkan dua hal, baik itu berkas tersembunyi maupun format panjang.
  6. ls -h Menampilkan ukuran berkas dalam format ukuran data manusiawi (K, M, Gbyte) menggantikan bytes. Berguna saat dipakai bersamaan dengan opsi -l.
  7. Canggihnya, Anda bisa menampilkan berkas dalam direktori lain yang Anda tidak sedang di dalamnya. Jika Anda di /home/ahmad/Desktop, dan ingin menampilkan berkas di /home/ahmad/, lakukan ls ../ yang mendaftar berkas satu direktori ke belakang (dan tak perlu pindah direktori untuk melakukannya).

cp → menyalin berkas.

  1. cp berkas /folder/yang/dituju Menyalin berkas ke alamat yang dituju.
  2. cp -r folder /folder/yang/dituju Menyalin isi folder ke folder lain secara rekursif (-r).
  3. cp *.extension /folder/yang/dituju Menyalin berkas yang bersesuaian ekstensinya ke folder yang dituju.
  4. cp kajian* /folder/yang/dituju Menyalin semua berkas yang diawali dengan kata kajian ke folder yang dituju. Untuk menyalin semua berkas yang berawalan dengan kata contoh, ia menjadi cp contoh* /folder/yang/dituju dan tentu foldernya harus sudah ada.

mv → memindahkan berkas

  1. Sintaks mv mirip dengan contoh cp di atas kecuali #2. mv tidak mengenal opsi -r karena memindahkan folder sudah berarti memindahkan isinya pula. Sintaks tidak selalu persis sama, tetapi bisa bekerja dengan contoh di atas. Bacalah manpages Anda untuk lebih detailnya.

rm → menghapus berkas.

  1. Untuk semua penggunaan, menghapus dengan rm itu permanen. Ia tidak menggunakan Trash Bin. Gunakan dengan hati-hati dan yakin dulu Anda menghapus apa yang Anda inginkan, bukan yang Anda pikir Anda inginkan.
  2. rm berkas Menghapus berkas dari sistem.
  3. rm -r folder Menghapus folder dari sistem sekaligus isinya secara rekursif (-r).
  4. rm -rf folder Menghapus folder secara paksa (-f, –force)dari sistem. Perintah ini dapat memusnahkan konfigurasi Anda jika digunakan tidak tepat karena ia tidak akan memperingatkan Anda apa yang sedang dihapus. Jika harus menggunakan ini, jangan main-main atau kesalahan akan terjadi. Ini harus menjadi metode penyelesaian paling akhir dan tidak disarankan.

nano → editor teks terminal

  1. Anda bisa mengedit berkas menggunakan nano di terminal. Ia cepat, tetapi ingat bahwa ia hanya menangani berkas teks dan berkas pemrograman, dokumen Microsoft Word tidak akan bisa dibuka dengannya.
  2. Jika berkas dimiliki oleh root, ia tidak bisa diedit sebagai pengguna normal. Nano harus diawali dengan sudo untuk bisa menerapkan perubahan. Selainnya, ia hanya akan dibuka dalam mode read-only.
  3. nano berkasbaru.apasaja Nano menciptakan berkas baru berdasarkan nama dan membukanya untuk pengeditan.
  4. nano berkas_yang_ada Nano membuka berkas yang sudah ada untuk diedit.
  5. Dari dalam nano
    1. Simpan berkas menggunakan Ctrl+O, dan ubah nama berkasnya atau tekan enter untuk menyimpan dengan nama yang sudah ada. Ini akan menyimpan berkas.
    2. Tutup nano dengan Ctrl+X. Jika Anda memiliki perubahan belum tersimpan, ia akan meminta Anda untuk menyimpan.

mkdir → membuat direktori (folder)

  1. mkdir namafolder Membuat folder.
  2. mkdir -p /folder/yang/dituju Membuat folder yang diinginkan. Untuk membuat folder /home/ahmad/folderbaru/folder2, ketika hanya ada /home/ahmad, menggunakan mkdir -p akan membuat kedua direktori folderbaru dan folder2 secara otomatis.

ps → mendaftar proses

  1. ps aux Mendaftar semua proses secara mendetail yang berjalan di sistem, termasuk pengguna, nomor Process ID (PID), dan nama proses. Menggunakan ini, Anda bisa menampilkan daftar proses mereka dan jika diperlukan, meng-kill proses yang tak dibutuhkan atau macet.

kill/killall/xkill → matikan proses yang bermasalah

  1. kill PID PID adalah nomor yang menandai proses. Anda harus mendapatkan PID dari perintah seperti ps aux. Jika sebuah proses menolak untuk mati, Anda bisa melakukan kill -9 PID yang mematikan proses tanpa ba-bi-bu, bahkan kalau sistem akan kacau dengannya.
  2. killall program Killall mematikan *berdasarkan nama* semua instansi dari program yang disebutkan. Misalkan ada 3 sesi Firefox terbuka, killall firefox akan melakukannya, mematikan semua sesi Firefox. Bedanya, kill hanya bisa menerima PID (bukan nama) dari proses yang ingin dimatikan, dan cuma bisa mematikan satu saja (tidak semua instansi).
  3. xkill adalah cara GUI untuk klik dan matikan jendela. Mengetik xkill lalu enter akan mengubah kursor Anda jadi tengkorak yang ada silangnya, lalu jendela yang diklik pasti mati.

Pipa → hal paling berguna yang Anda akan pelajari di *NIX. Mengalihkan keluaran program ke masukan bagi yang lain.

  1. Pipa (pipes) diwakili oleh ‘garis tegak’ yang dikenal sebagai tombol ‘|’ (di atas Enter).
  2. Tombol ini jarang dipakai di Windows, dia biasanya bersama tombol backslash (\).
  3. Pipa dipakai untuk menautkan perintah-perintah menjadi satu. Pipa mengambil keluaran dari satu perintah sebagai masukan bagi perintah yang lain.
  4. Bacalah sumber-sumber online lebih lanjut dengan informasi mengenai pipes dan pemakaiannya yang sangat beragam.

> dan >> → mengirim keluaran sebagai berkas menggantikan Terminal.

  1. > digunakan untuk *overwrite* alias menimpa isi berkas yang sudah ada dan menggantikannya dengan keluaran dari perintah yang baru.
  2. >> digunakan untuk *append* alias menambahkan isi kepada berkas yang sudah ada – tidak menghapus yang sebelumnya. Ini berguna untuk logging.
  3. Misalnya: ps aux > process.log mengirim keluaran dari ps aux ke berkas process.log untuk dibuka di editor teks dan menimpa isi saat ini dari berkas.
  4. Misal lainnya: man ls > manualnyals.txt mengirim keluaran dari halaman manual ls menjadi berkas teks untuk dibaca di luar Terminal daripada repot membacanya di dalam Terminal (tambahan dari penerjemah).

tee → mengirim keluaran ke berkas sekaligus Terminal.

  1. tee digunakan bersamaan dengan ‘|’ untuk mengambil keluaran perintah dan mengirimnya ke mana saja. Ini berguna jika ada error yang muncul sekejap lalu hilang sebelum Anda membacanya, cara ini memungkinkan apa pun yang tampil di layar terekam dalam sebuah berkas.
  2. Misalnya: dmesg | tee boot.txt akan menjalankan perintah dmesg yang menampilkan info initial boot, dan ‘|‘ mengirim keluaran dmesg ke tee, yang kemudian melaksanakan kerjanya dengan mengirimnya ke Terminal dan ke berkas log boot.txt.

Eksekusi Berkas → apakah Anda ingin mengeksekusi berkas atau program dari Terminal? Pastikan dulu ia ditandai eksekutabel. Jika tidak, bacalah Tip Cekatan #4 di bawah.

  1. Perlu mengeksekusi berkas di direktori saat ini setelah ia ditandai eksekutabel? Operator ./ dapat mengeksekusinya sebagai pengguna normal yang tak perlu hak root. ./ aslinya bermakna “di direktori sekarang” jadi ia tidak bekerja pada berkas di luar direktori sekarang. Catatan penerjemah: misalnya ./run.sh.
  2. Perlu mengeksekusi berkas tidak di direktori sekarang? Anda harus menulis alamat direktorinya (path) untuk mengeksekusi program. Jika ia adalah program Python, perintahnya python /alamat/berkas dan jika ia berkas shell, perintahnya sh /alamat/berkas sebagai contoh. Tentu banyak program lain, tetapi ini cukup sebagai petunjuk global untuk pemula.
  3. Perlu mengeksekusi berkas dengan hak root karena pesan operation not permitted? Awali perintah dengan sudo. Maka, dengan contoh di atas, sudo python /alamat/berkas akan mengeksekusi skrip dengan hak root. Catatan penerjemah: selalulah perhatikan spasi.
  4. Perlu mengeksekusi program GUI dari terminal? Ketik saja nama program (case sensitive!) dan dia akan berjalan. Ini akan menjadikan Terminal saat ini tidak bisa dipakai. Menutup terminal ketika program terbuka akan mematikan program. Cara yang lebih baik adalah untuk mem-background program, menggunakan namaprogram & dan kemudian mengetik kata exit untuk menutup Terminal dan proses tetap berjalan. Catatan penerjemah: meski sedang tidak bisa dipakai, Anda masih bisa membuka Terminal baru di tab baru dalam 1 jendela karena memang itulah fitur khusus Linux. Ini tidak ditemukan di Windows.
  5. Perlu menjalankan program GUI dengan hak root dari Terminal? Awali dengan gksudo atau gksu dan bukan sudo. Menggunakan sudo untuk menjalankan aplikasi GUI adalah kebiasaan buruk dan semestinya dihindari.
  6. Jangan, jangan gunakan sudo hanya karena pesan “operation not permitted”. Ingatlah apa yang Anda lakukan bisa *memusnahkan* seluruh sistem dengan menjalankan perintah di tempat yang salah dengan hal root. Pastikan berkas Anda berasal dari sumber terpercaya.

Tip-tip Cekatan:

  1. Hilang arah dalam direktori? Tak yakin di mana berada? Ketik pwd untuk print working directory.
  2. Ingin menghitung disk space Anda dengan cepat? df -h bisa menampilkannya.
  3. Ingin mengetahui ukuran folder atau berkas dengan cepat? du -cksh namatarget dapat melakukannya dengan tepat. Ingin mengetahui ukuran folder yang sekarang? du -cksh.
  4. Perlu menandai eksekutabel pada berkas? chmod +x namaberkas dapat melakukannya. Nanti kalau Anda mau mengeksekusi berkas dan ia tidak ditandai eksekutabel, Anda sudah mengerti caranya.
  5. Ingin melakukan mount sebuah ISO seperti Daemon-Tools di Windows? Linux sudah memiliki fungsi ini built-in. Buatlah direktori di mana saja, katakanlah /home/ahmad/isomount, dan laksanakan perintah mount -o loop /alamat/ke/isosaya.iso /home/ahmad/isomount dan isinya akan di-mount ke dalam folder itu.
  6. Mau menjalankan satu perintah sebelumnya, tetapi Anda lupa? Ketik history di Terminal dan ia akan menampilkan riwayat perintah Anda semuanya. Ingin menghapus riwayat? history -c akan menghapusnya habis.

Disklaimer:

  1. Tulisan ini adalah hanyalah terjemahan bebas dari laman berjudul The 5-Minute Essential Shell Tutorial http://community.linuxmint.com/tutorial/view/100 yang ditulis oleh justin.
  2. Metode yang saya tempuh dalam menerjemahkan hanya menitikberatkan pada sisi pembaca yang berbudaya bahasa Indonesia, bukan yang berbudaya bahasa Inggris.
  3. Beberapa kalimat sengaja tidak saya terjemahkan seperti “If you decide to get fancy with your delete commands, it’s probably going to come back to bite you” yang saya tak mengerti maknanya.
  4. Saya menambahkan beberapa catatan yang pada tulisan ini fontanya saya miringkan yang saya rasa perlu ditambahkan.
  5. Saya juga menambahkan beberapa perintah yang saya rasa sangat penting tetapi belum ada di tulisan aslinya semisal bagaimana ls untuk folder saja.
  6. Saya merasa ingin menerjemahkan ini karena melihat tulisan asli sangat bagus untuk pemula andai saja berbahasa Indonesia.
  7. Saya minta maaf jika tulisan ini masih juga sulit untuk dipahami. Semoga Allah menganugerahkan kita ketegaran untuk memanfaatkan hanya harta yang halal. 

Bagaimana Mengatur apt-get di Belakang Proxy Server?


Siapa pun yang memakai Ubuntu di belakang proxy server, pasti pernah mengalami kesulitan saat apt tidak bisa melaksanakan instalasi. Pesannya 407 authentication fail. Ini artinya Anda mesti mengatur username dan password dari proxy Anda. Mengapa? Mirip seperti login ke Gmail, agar apt bisa masuk ke jaringan internet dan mengunduhkan aplikasi untuk Anda.

sudo gedit /etc/apt/apt.conf

Edit isinya menjadi berpola seperti ini.

Acquire::http::proxy "http://usernameku:passwordku@serverproksi:nomorport/";
Acquire::https::proxy "https://usernameku:passwordku@serverproksi:nomorport/"; 
Acquire::ftp::proxy "ftp://usernameku:passwordku@serverproksi:nomorport/"; 
Acquire::socks::proxy "socks://usernameku:passwordku@serverproksi:nomorport/";

Contoh pengisian yang benar:

Simpan dengan Ctrl+S.

Hasilnya, apt-get sudah bisa digunakan.

Semoga bermanfaat.

[TUTORIAL] Bagaimana Jika Anda Tak Tahu Cara Memerintah Linux?


Bismillah. Ini adalah tutorial sederhana untuk saudara-saudaraku. Apa yang kita lakukan jika tidak tahu apa yang harus dilakukan di terminal Linux? Kita dapat mengetik ”man” tanpa tanda kutip diikuti nama perintah. Atau Anda cukup mengetik “help” tanpa kutip. Akan saya tunjukkan.

Contoh sederhana, Anda dapat mengetik man traceroute untuk menampilkan manual dari program traceroute. Oke, traceroute adalah nama perintah dan dia adalah program untuk mencetak rute jejak data menuju suatu host dalam jaringan.

Anda dapat menutup halaman manual dengan menekan “q” tanpa petik. Mudah sekali untuk mengetahui detail program di terminal.

Dan Anda dapat mengeluarkan halaman help dari setiap program dengan mengetik “–help” tanpa kutip setelah nama perintah. Ini juga contoh sederhana, cukup ketik traceroute –help dan sebuah halaman help akan terbuka untuk Anda. Ow, help itu berbeda dari man. Anda dapat melihat bahwa help merupakan rangkuman kecil dari man. 

Oke, Anda tidak akan menemukan halaman man atau halaman help jika program yang ingin Anda ketahui belum terinstal di Linux Anda. Jadi, Anda dapat melaksanakan tutorial ini dengan mengetik nama program lainnya selain traceroute di sini (jika Anda belum memiliki traceroute). Sebagai gantinya, silakan lihat man dari perintah ls, fdisk, rm, modprobe, dan lain-lain. Anda dapat melihat banyak perintah asli Linux dengan mengetik “help” saja tanpa nama perintah.
Oh ya. Anda harus selalu menekan enter setelah mengetik nama perintah. Enter itu artinya eksekusi. Ya, sekarang Anda dapat melakukannya. Siapa yang kita tanya jika kita tak mengerti perintah? Jawabannya: man dan help! Saya harap ini bermanfaat buat semua saudaraku.

[TUTORIAL] Belajar Baris Perintah Terminal (Shell) Linux


Dengan mengharap ridha Allah, saya menyatukan tulisan-tulisan lama saya menjadi satu dalam rangka membantu saudara-saudara yang sedang belajar perintah shell atau perintah terminal di Linux. Pada awalnya saya berpikir lebih baik dipisah-pisah tetapi akhirnya saya menyerah, lebih gampang kalau dijadikan satu soalnya cukup sulit dibaca/ditulis kalau terpisah-pisah. Tulisan ini akan menjelaskan shell berikut perintah-printahnya yang saya jadikan bab-bab kecil. Tulisan ini terbatas sekali dengan pengalaman saya dan mohon maaf jika ada yang kurang. Semoga Allah menolong saya mengikhlaskan niat dan semoga ini dapat dimanfaatkan semua saudaraku di seluruh dunia. Baca lebih lanjut