Linux Redirection : 2>&1
Redirection dalam sistem unix dan Linux merupakan salah satu cara untuk melewatkan output dari suatu program ke program lain, dengan redirection kita bisa menyimpan output suatu file baik kedalam sebuah file atau diproses dengan program lain.
Ada 3 redirection yang sering dijumpai dalam perintah linux.
- Standar input (stdin)
- Standar output (stdout)
- Standar error (stderr)
- Pipe
Seperti halnya filosofi *nix, yaitu “Everything is file”, semuanya adalah file begitu juga dengan 3 standar output,input dan error diatas, yang didefinisikan dengan angka(deskriptor file), stdin adalah 0, stdout = 1, dan stderr dengan angka 2. Semua angka ini didefinisikan pada file /usr/include/unistd.h
$grep -n STDIN -2 /usr/include/unistd.h 181- 182-/* Standard file descriptors. */ 183:#define STDIN_FILENO 0 /* Standard input. */ 184-#define STDOUT_FILENO 1 /* Standard output. */ 185-#define STDERR_FILENO 2 /* Standard error output. */
Standar Input (stdin)
Hampir semua program menerima input dari pemakainya, baik dari keyboard atau device input lainnya. Secara default stdin adalah keyboard. Disini penggunaan stdin bisa dengan tanda ‘<’.
Contoh:
$cat < its.file line 1 line 2
pada perintah diatas ‘cat’ menerima input ‘its.file’ dan kemudian
menampilkannya di stdout.
Standar Output (stdout)
Begitu juga dengan stdout, kebanyakan program di Linux juga memprint outputnya di stdout. Misalkan program_ ls_, program ini akan menampilkan isi direktori aktif kemudian mencetaknya di stdout.
Contoh:
$ls > listdirektori.txt
dari perintah diatas maka semua output dari ls akan disimpan ke dalam
file_‘listdirektori.txt’, perintah ini (>) membuat file baru bernama
‘listdirektori.txt’ jika file tersebut telah ada maka isi file tersebut akan
diganti dengan output dari_ls.
Agar file yang telah ada tidak diganti/ditimpa dengan yang baru gunakan 2
tanda ‘>’
$ls >> listdirektori.txt
Isi file ‘listdirektori.txt’ akan ditambahkan dengan output ls.
Perintah ini juga bisa digunakan untuk copi file ke file lain.
$cat file1 > file2
Selain output pada file kita juga bisa melakukan redirect pada device.
$cat musik.wav > /dev/audio
Seperti memainkan file musik lewat pemutar mp3 kita, kita akan mendengarkan
suara ketika melakukan perintah ini. Karena /dev/audio adalah file
deskriptor dari speaker yang kita punya.
Pipe
Dari 2 hal diatas kita telah lihat bagaimana melakukan redirection input ke dalam suatu program dan redirection output suatu program ke dalam sebuah file. Dengan pipe kita bisa melakukan redirection output suatu program menjadi input bagi program lain.
Contoh:
$cat 'file.txt' | grep 'linux'
Perintah ini berarti kita mencari kata ‘linux‘ di dalam file ‘file.txt‘,
meski sebenarnya bisa dengan perintah grep ‘linux’ ‘file.txt’ namun pipe akan
sangat berguna untuk melakukan proses secara berulang terhadap output
tersebut, seperti contoh berikut:
$cat 'file.txt' | grep 'linux' | tr a-z A-Z
Yaitu menampilkan file ‘file.txt’, kemudian hanya menampilkan kata ‘linux’
kemudian mengubahnya menjadi huruf besar semua (tr a-z A-z
).
Ketika melakukan perintah pada Linux, sering kita menemui error, dan kemudian
error ini akan ditampilkan lewat stderr.
$cat 'not_exist_file' cat: not_exist_file: No such file or directory
Output dari perintah diatas ditampilkan di screen (terminal) lewat stderr,
untuk menghindari error ini bisa dilakukan dengan cara berikut.
$cat not_exist_file 2> /dev/null
tanda 2 diatas berarti semua output dari stderr akan diteruskan ke
/dev/null, dan tidak akan menampilkan apapun, jika file not_exist_file
benar-benar tidak ada.
Mungkin tidak begitu terlihat perbedaannya tapi coba jalankan 2 perintah
berikut, agar lebih memahami
$find / -name *.txt $find / -name *.txt 2>/dev/null
perintah pertama pasti akan mengeluarkan banyak output karena error yang
didapat perintah find ketika mengakses file/direktori, sedangkan perintah
kedua semua output error (dari stderr , angka 2) akan dilewatkan ke /dev/null.
Penggunaan redirection diatas juga bisa digabung dengan redirection lainnya.
Bagaimana dengan judul dari posting diatas 2>&1, kalimat ini dalam suatu perintah di Linux berarti melewatkan setiap output dari stderr ke stdin, jadi setiap error yang dikeluarkan akan diteruskan menuju standar output. tanda**>** sendiri adalah redirection pada suatu file tapi karena tanda & maka output tersebut diteruskan lagi ke stdout / 1. Jika tanda & tidak ada maka outputnya adalah sebuah file dengan nama 1.
Referensi:
+ [http://linuxhelp.blogspot.com](http://linuxhelp.blogspot.com/2006/01 /inputoutput-redirection-made-simple-in.html)