Pengantar mengenai Pengalihan/Redireksi Input dan Output pada Linux atau Linux I/O Redirection

Pengantar

Kemampuan redireksi yang ada di Linux menyediakan untuk Anda seperangkat tool/perangkat yang digunakan untuk membuat semua jenis tugas menjadi lebih mudah untuk diselesaikan. Apakah Anda sedang menulis software yang kompleks atau melakukan pengelolaan file melalui command line, mengetahui bagaimana cara memanipulasi aliran yang berbeda atas input/ouput atau I/O di dalam environment atau lingkungan, akan meningkatkan produktivitas Anda.

Stream

Input dan output di dalam lingkungan Linux disebarkan melalui tiga stream/aliran. Tiga aliran ini adalah:

    standard input (stdin)
    standard output (stdout)
    standard error (stderr)

Aliran tersebut juga diberi angka sebagai berikut:

    stdin (0)
    stdout (1)
    stderr (2)

Selama interaksi standar antara user/pengguna dan terminal, input standar ditransmisikan melalui keyboard pengguna. Output Standar dan standar error ditampilkan pada terminal pengguna sebagai teks. Secara kolektif, tiga aliran tersebut dirujuk sebagai aliran standar atau standard stream.

Standar Input

Aliran input standar bersifat membawa data dari suatu user kepada suatu program. Program yang menghendaki standard input biasanya menerima input dari suatu device/perangkat, semisal suatu keyboard. Standar input diakhiri ketika mencapai EOF (end-of-file atau akhir dari file). Seperti digambarkan oleh namanya, EOF menandakan bahwa tidak ada data lagi untuk dibaca.

Untuk melihat standard input dalam penerapannya, jalankanlah program cat. Cat merupakan singkatan dari concatenate, yang bermakna menghubungkan atau menggabungkan sesuatu. Biasanya digunakan untuk menggabungkan isi dari dua file. Ketika dijalankan, program cat membuka suatu looping prompt.

cat

1
2
3
ctrl-d

Ketika Anda mengetikkan suatu angka dan menekan enter, Anda mengirim standard input kepada program cat yang sedang berjalan, yang mengharapkan input said. Sebagai hasilnya, program cat mengirim kembali input kepada Anda melalui terminal dengan cara menampilkannya sebagai standard output.

EOF dapat berupa input oleh user dengan menekan ctrl-d. Setelah program cat menerima EOF, ia berhenti.

Standard Output

Standard output menuliskan data yang dihasilkan oleh suatu program. Ketika aliran standard output tidak dialihkan, ia akan mengeluarkan teks output/keluaran kepada terminal. Cobalah contoh berikut:

echo Coba kirim ke terminal melalui standard output

Ketika digunakan tanpa opsi tambahan apa pun, perintah echo menampilkan argumen yang dilewatkan kepadanya melalui command line. Suatu argumen adalah sesuatu yang diterima oleh suatu program.

Jalankanlah perintah echo tanpa argument:

echo

Ia akan mengembalikan hasil keluaran berupa baris kosong, karena tidak ada argumennya.

Standard Error

Standard error menuliskan error yang dihasilkan oleh suatu program yang gagal pada satu point tertentu di dalam eksekusinya. Seperti standard output, tujuan default-nya untuk aliran ini adalah pengeluaran tampilan pada terminal.

Ketika aliran standard error pada suatu program disalurkan kepada suatu program kedua, data yang disalurkan (yang terdiri dari error program) secara bersamaan juga dikirim kepada terminal tersebut.

Mari kita lihat contoh dasar dari standard error menggunakan perintah ls. Perintah ls menghasilkan daftar dari isi suatu direktori.

Ketika dijalankan tanpa suatu argumen, ls mengeluarkan daftar berupa isi di dalam direktori saat ini. Apabila ls dijalankan dengan argumen berupa suatu direktori, ia akan mendaftar isi dari direktori yang disediakan.

ls @

Karena @ bukanlah suatu direktori yang ada, maka perintah diatas akan mengirimkan teks berikut kepada standard error:

ls: cannot access %: No such file or directory

Stream Redirection/Aliran Pengalihan

Linux menyertakan perintah pengalihan untuk setiap stream. Perintah ini menulis standard output kepada suatu file. Apabila file yang tidak ada ditargetkan (entah itu dengan suatu perintah kurung tunggal atau kurung ganda), suatu file baru dengan nama tersebut akan diciptakan sebelum mulai melakukan penulisan.

Perintah dengan satu kurung tunggal menulis ulang isi dari tujuan yang telah ada.

Overwrite/Menulis-ulang

    > - standard output

    < - standard input

    2> - standard error

Perintah dengan kurung ganda tidak menulis ulang isi dari file tujuan yang sudah ada.

Append/Menambahkan

    >> - standard output

    << - standard input

    2>> - standard error

Mari lihat suatu contoh:

cat > tulisku.txt
maskutulisku 234
ctrl-d

Di sini, cat digunakan untuk menulis kepada suatu file, yang diciptakan sebagai hasil dari loop tersebut.

Kemudian lihatlah isi dari file tulisku.txt menggunakan perintah cat:

cat tulisku.txt

maskutulisku 234

Setelah itu coba tuliskan perintah berikut:

cat > tulisku.txt

Masmutulismu 567
ctrl-d

Kemudian coba lihat lagi isi dari file tulisku.txt:

cat tulisku.txt

masmutulismu 567

Isi yang sebelumnya tidak lagi ada di situ, karena file tersebut ditulis ulang oleh perintah kurung tunggal.

Sekarang, kembali lakukan pengalihan menggunakan perintah cat, kali ini menggunakan kurung ganda:

cat >> tulisku.txt
maskana
ctrl-d

Kemudian coba lihat lagi isi dari file tulisku.txt:

cat tulisku.txt

masmutulismu 567
maskana

Sekarang file tulisku.txt juga berisi teks dari program cat yang dijalankan sebelumnya, karena perintah cat yang kedua tidak menulis ulang perintah cat yang pertama.

Pipe/Penyaluran

Pipe digunakan untuk mengalihkan suatu aliran dari satu program kepada program lain. Ketika suatu standard output dari suatu program dikirim kepada program yang lain melalui suatu pipe/penyaluran, data dari program pertama, yang diterima oleh program kedua, tidak akan ditampilkan pada terminal. Hanya data yang difilter atau disaring yang dikembalikan oleh program yang akan ditampilkan.

Pipe Linux diwakili oleh batang vertikal.

*|*

Contoh dari perintah yang menggunakan suatu pipe:

ls | less

Perintah ini mengambil keluaran dari perintah ls, yang menampilkan isi dari direktori Anda saat ini, dan menyalurkannya kepada program less. Program less lalu menampilkan data yang dikirim kepadanya baris demi baris.

Program ls secara normal tanpa opsi, menampilkan isi direktori dalam bentuk kolom ganda. Ketika Anda menjalankannya melalui program less, setiap entri ditempatkan pada baris baru.

Walaupun fungsi dari pipe hampir sama dengan perintah > dan >> (pengalihan standard output), perbedaannya adalah bahwa pipe mengalihkan data dari satu command kepada perintah lainnya, sementara > dan >> digunakan untuk mengalihkan secara eksklusif kepada file.

Filter

Filter adalah perintah yang merubah pengalihan pipe dan output. Perintah filter juga merupakan perintah standar Linux yang dapat digunakan tanpa pipe.


    find - perintah find mengembalikan file dengan nama file yang cocok dengan argumen yang dilewatkan kepada perintah find.

    grep - printah grep mengembalikan teks yang cocok dengan pola string yang dilewatkan kepada perintah grep.

    tee - perintah tee mengalihkan standard input kepada standard output dan satu file lainnya lagi atau lebih.

    tr - perintah tr mencari-dan-mengganti satu string dengan string lainnya.

    wc - perintah wc menghitung huruf, baris, dan kata.

Contoh

Sekarang Anda telah diperkenalkan kepada redireksi, pipe, dari filter dasar, mari lihat pada beberapa pola pengalihan dasar, berikut contoh-contohnya.

perintah > file

Pola ini mengalihkan standard output dari suatu perintah kepada suatu file.

ls ~ > isi_dir.txt

Perintah di atas melewatkan isi dari direktori saat ini sebagai standar output, dan menulis output kepada suatu file yang bernama isi_dir.txt. Perintah itu akan menghapus isi apa pun yang sebelumnya ada pada file tersebut, karena ia adalah perintah dengan satu kurung.

perintah > /dev/null

File /dev/null adalah suatu file khusus yang digunakan untuk menampung data apa pun yang diarahkan kepadanya. File itu digunakan untuk membuang standar output yang tidak diperlukan, dan mungkin mengganggu fungsionalitas dari suatu perintah atau suatu skrip. Keluaran apa pun yang dikirim kepada file /dev/null dibuang.

Di masa mendatang, Anda mungkin menemukan praktek pengalihan standard output dan standard error kepada file /dev/null ketika menulis skrip shell.

ls > /dev/null

Perintah ini membuang aliran standard output yang dikembalikan dari perintah ls dengan menyalurkannya kepada file /dev/null.

command 2> file

Pola ini mengalihkan aliran standard error dari suatu perintah kepada suatu file, dengan cara menulis ulang isi yang ada.

mkdir '' 2> mkdir_log.txt

Perintah ini mengalihkan error yang dihasilkan oleh nama direktori yang tidak valid “, dan menulisnya kepada file mkdir_log.txt.

perintah >> file

Pola ini mengalihkan standar output dari suatu perintah kepada suatu file tanpa menulis ulang isi file yang telah ada.

echo Tulis ke suatu file baru > data.txt
echo Tambah isi file tersebut >> data.txt

Pasangan perintah ini bekerja dengan cara pertama mengalihkan teks yang diinputkan oleh pengguna melalui perintah echo kepada suatu file baru. Ia kemudian menambah teks yang diterima oleh perintah echo yang kedua kepada file yang ada, tanpa menulis ulang isinya.

perintah 2>> file

Pola di atas mengalihkan aliran error standar dari suatu perintah kepada suatu file tanpa menulis ulang isi dari file yang ada. Pola ini berguna untuk menciptakan log error untuk suatu program atau layanan, karena setiap kali file ditulis, isi sebelumnya tidak dihapus.

find '' 2> stderr_log.txt
wc '' 2>> stderr_log.txt

Perintah di atas mengalihkan pesan error yang ditimbulkan oleh suatu argumen yang tidak valid dari perintah find kepada suatu file yang bernama stderr_log.txt. Kemudian perintah berikutnya menambahkan pesan error yang ditimbulkan oleh suatu argumen yang tidak valid dari perintah wc kepada file yang sama.

perintah | perintah

Perintah di atas mengalihkan standard output dari perintah pertama kepada standard input dari perintah kedua.

find /var lib | grep deb

Perintah ini mencari pada direktori /var dan direktori di bawahnya untuk nama file dan ekstensi yang cocok dengan string deb, dan mengembalikan path file untuk file tersebut, dengan porsi yang cocok dalam setiap path yang disorot dalam warna merah.

perintah | tee file

Pola ini (yang menyertakan perintah tee) mengalihkan standard output dari perintah tersebut kepada suatu file dan menulis ulang isinya. Kemudian, ia menampilkan output yang dialihkan di dalam terminal. Ia menciptakan suatu file baru apabila file tersebut belum ada.

Di dalam konteks dari pola ini, tee biasa digunakan untuk melihat suatu output dari suatu program sambil secara bersamaan menyimpannya kepada suatu file.

wc /etc/magic | tee magic_count.txt

Perintah ini menyalurkan hitungan huruf, baris, dan kata di dalam file magic (yang digunakan oleh shell Linux untuk menetapkan tipe file) kepada perintah tee, yang kemudian membagi keluaran dari perintah wc di dalam dua arah, dan mengirimnya kepada tampilan terminal dan file magic_count.txt. Untuk perintah tee, bayangkanlah huruf T. Bagian bawah dari huruf tersebut adalah data awal, dan bagian atasnya adalah data yang dipisahkan di dalam dua arah yang berbeda (standard output dan terminal).

Penyaluran ganda dapat digunakan untuk mengalihkan output melalui banyak perintah dan filter.

perintah | perintah | perintah >> file

Pola ini mengarahkan standard output dari perintah pertama dan mem-filter-nya melalui dua perintah berikutnya. Kemudian ia menambahkan hasil akhir kepada suatu file.

ls ~ | grep *tar | tr e E >> ls_log.txt

Ini dimulai dengan menjalankan perintah ls di dalam direktori Anda saat ini (~) dan menyalurkan hasilnya kepada perintah grep. Dalam hal ini, grep mengembalikan suatu daftar dari file yang memuat tar di dalam nama file atau ekstensinya.

Hasil dari perintah grep kemudian disalurkan kepada tr, yang menggantikan huruf e yang ditemukan dengan E, karena e dilewatkan sebagai argumen pertama (string yang dicari), dan E dilewatkan sebagai argumen kedua (string yang menggantikan apa pun yang cocok untuk argumen pertama). Hasil akhirnya kemudian ditambahkan kepada file ls_log.txt, yang dibuat apabila file tersebut belum ada).

Kesimpulan

Mempelajari bagaimana menggunakan kemampuan pengalihan yang dibenamkan di dalam perintah Linux mungkin sedikit membingungkan, tetapi setelah menyelesaikan tutorial ini seharusnya sudah ada sedikit gambaran. Sekarang Anda telah melihat dasar bagaimana pengalihan/redireksi dan penyaluran/pipe bekerja, Anda akan mampu memulai ‘penggerebekan’ ke dalam dunia skrip shell, yang sering digunakan dalam program dan pola yang disorot di dalam panduan ini.

Apabila Anda ingin menggali lebih dalam ke dalam perintah tersebut yang diperkenalkan di dalam tutorial ini, Anda dapat melakukannya dengan perintah man perintah | less. Contoh:

man tee | less

Perintah ini akan menunjukkan kepada Anda daftar penuh dari perintah-perintah yang tersedia untuk program tee. Anda dapat menggunakan pola ini untuk menampilkan informasi dan opsi penggunaan untuk suatu program atau perintah di Linux.

Anda juga dapat melakukan pencarian di Google untuk suatu perintah tertentu, atau untuk sesuatu yang ingin Anda lakukan di dalam command line (misal “menghapus file dalam suatu direktori yang dimulai dengan huruf besar”) juga terbukti dapat membantu ketika Anda perlu menyelesaikan suatu tugas tertentu menggunakan command line.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to Top