11. Input, Output, dan Redirection
Summary
Standard Input Standard Output Standard Error Redirection Null Device
Apa yang akan dipelajari
- Tiga tipe I/O (Input/Output)
- Bagaimana me-redirect I/O tersebut
Jenis Input/Output
| Nama I/O | Singkatan | File Descriptor |
|---|---|---|
| Standard Input | stdin | 0 |
| Standard Output | stdout | 1 |
| Standard Error | stderr | 2 |
- Secara default standard input berasal dari keyboard
- Sedangkan standard output dan standar error ditampilkan ke layar
- Linux mewakili hampir semuanya sebagai file, abstraksi ini memungkinkan kita untuk melakukan beberapa hal, seperti mengambil standard output dari sebuah perintah yang biasanya ditampilkan ke layar dan menggunakannya sebagai input ke perintah lain atau bahkan me-redirect output tersebut ke sebuah file.
Redirection
> = Redirect output dari command ke sebuah file. Jika ada konten di file tersebut maka akan di overwrites
>> = Redirect output dari command ke sebuah file, Jika ada konten di file tersebut maka akan ditambahkan/append (dibaris bawah)
< = Redirect input dari sebuah file ke sebuah command
- Cara eksplisit menggunakan redirection adalah dengan memasukkan file descriptor, namun jika satu dihilangkan, maka file descriptor 0 diasumsikan untuk input dan 1 untuk output redirection.
- Biasanya redirection file mengikuti redirection operator
& = Untuk menggunakan file descriptor sebagai ganti nama file (append/gabungkan std in, out, atau err)
ex :
2>file_name = Redirect standard error ke sebuah file
2>&1 = Kombinasikan stderr dan stdout (sama seperti 2>file_name)
The Null Device
/dev/null = Redirect output ke perangkat null device (mengabaikan output)
note :
- null device adalah file khusus yang membuang apapun yang dimasukkan ke dalamnya. Biasa disebut juga bitbucket
- Jika kita tidak ingin melihat error pada layar dan tidak ingin menyimpannya ke file, kita bisa me-redirectnya ke /dev/null
ex :
ls here not-here 2> /dev/null
ls here not-here > /dev/null 2>&1
Implementasi
Output redirection :
ls -l
ls -l > files.txt = redirect output dari command ls -l ke file files.txt
cat files.txt
ls >> files.txt = Menambahkan/append output ls ke file files.txt
less files.txt
Input redirection :
sort < files.txt = Mengambil konten files.txt dan mengarahkan konten ke dalam command sort (perintah sort akan dijalankan)
note : perintah diatas sama dengan "sort files.txt"
File descriptor :
ls -l > files.txt === ls -l 1> files.txt
Input dan Output redirection :
sort < files.txt > sorted_files.txt = Men-sortir isi konten files.txt dan me-redirect outputnya ke file sorted_files.txt
cat sorted_files.txt
Standard error :
- Ketika sebuah program menemukan error, ia akan melaporkannya ke standard error
- Tidak semua output yang dihasilkan dari sebuah command masuk ke dalam standard output, jika yang tampil merupakan pesan error maka ia masuk ke standard error
ex :
ls files.txt not-here
ls files.txt not-here > out
cat out
output :
ls: cannot access not-here: No such file or directory
files.txt
ls: cannot access not-here: No such file or directory
files.txt
note : Dalam kasus diatas, file descriptor 1 (stdout) diredirect ke file out. stderr tidak diredirect melainkan ditampilkan ke layar
ex :
ls files.txt not-here 2> out.err
cat out err
output :
files.txt
ls: cannot access not-here: No such file or directory
- Ini sebenarnya berguna karena kita dapat mengirim standard output ke satu tempat dan standard error ke tempat lain.
ex :
ls files.txt not-her 1>out 2>out.err
cat out
cat out.err
output :
file.txt
ls: cannot access not-here: No such file or directory
- Bisa juga menggabungkan stdout dan stderr ke satu tempat
ex :
ls file.txt not-here > out.both 2>&1
cat out.both
output :
ls: cannot access not-here: No such file or directory
file.txt
note : pada command diatas me-redirect output ke out.both kemudian mengambil standard error dan menambahkannya ke standard input. Perintah diatas hampir sama seperti "ls file.txt not-here 1>out.both 2>out.both" hanya saja yang tampil adalah stdout terlebih dahulu.
ex :
ls files.txt not-here 2>/dev/null
ls files.txt not-here >/dev/null
ls files.txt not-here >/dev/null 2>&1
output :
files.txt
ls: cannot access not-here: No such file or directory
note : pada perintah diatas kita akan mengabaikan standard error, standard output, atau keduanya dengan memasukkannya ke /dev/null