Contoh Redirection di Bash

Redirection dan pemipaan adalah dua fitur berguna dalam skrip bash yang sering digunakan oleh sysadmin dan pengembang. Dalam panduan ini, kita akan membahas apa itu Redirection Bash dan bagaimana bekerja dengan Redirection di Bash dengan contoh perintah.

Sebelum memahami cara kerja redirection, penting untuk mempelajari apa itu deskriptor file.

Ketika Anda membuka file di Linux, setiap file akan diberi bilangan bulat dan informasi ini disimpan di kernel. Dengan cara ini kernel mengetahui file apa yang dibuka dan proses mana yang telah membuka file tersebut. Nomor Integer yang ditetapkan adalah apa yang kita sebut deskriptor file (disingkat FD).

Secara default, setiap program akan dimulai dengan tiga deskriptor file.
FD 0 -> Input Standar(stdin) -> KeyboardFD 1 -> Output Standar(Stdout) -> Tampilan(Terminal)FD 2 -> Kesalahan Standar(Stderr) -> Tampilan(Terminal)
Anda dapat melihat deskriptor file di direktori /dev:

$ ls -l /dev/std* lrwxrwxrwx 1 root root 15 Agustus 27 21:32 /dev/stderr -> /proc/self/fd/2 lrwxrwxrwx 1 root root 15 27 Agustus 21:32 /dev/stdin -> /proc/self/fd/0 lrwxrwxrwx 1 root root 15 27 Agustus 21:32 /dev /stdout -> /proc/self/fd/1

Stdin (FD0) mendapat input dari keyboard. stdout (FD1) dan stderr (FD2) dikirim ke terminal. Saat menggunakan Pipes dan Redirections, Anda dapat mengubah cara input dilewatkan dan output serta error dikirim ke.
Mengarahkan output ke file

Seperti yang dinyatakan sebelumnya, output (stdout) dan error (stderr) dari program apa pun dikirim ke terminal. Anda dapat menggunakan operator redirection “>” untuk menulis stdout dan stderr ke file.

Lihat contoh di bawah ini. Saya menjalankan perintah uname -mrs dan mengarahkan output ke file bernama uname.log.

$ uname -mrs > uname.log
$ cat uname.logLinux 5.10.0-8-amd64 x86_64

Perhatian: Saat menggunakan operator “>”, jika file tidak tersedia, file akan dibuat. Dan jika file sudah ada, file akan dibuat ditimpa dengan isi baru.

Anda juga dapat menggunakan nomor deskriptor file untuk stdout(1) sebelum operator pengalihan untuk mengarahkan output ke file.

$ uname -mrs 1> uname.log

Seperti yang telah saya sebutkan, operator pengalihan tunggal (> ) hanya akan menimpa konten file, jika file sudah ada. Namun, jika Anda ingin menambahkan konten alih-alih menimpa file yang sama, gunakan operator pengalihan ganda (yaitu >>). Anda juga dapat menggunakan deskriptor file stdout (1) di sini juga.

$ whoami >> uname.log
$ echo $SHELL 1>> uname.log
$ cat uname.log Linux 5.10.0-8-amd64 x86_64 ostechnix /bin/bash

Bagaimana menangani Stderr

Setiap program menghasilkan keluaran dan kesalahan dan keduanya dikirim ke terminal. Dalam banyak kasus, Anda mungkin ingin mengabaikan kesalahan atau mengisolasi kesalahan dan mengarahkannya ke file terpisah untuk pemecahan masalah.

Mari kita ambil contoh sederhana menjalankan perintah ls untuk melihat cara kerjanya. Saya mencoba membuat daftar dua file yang hanya ada satu. Saya mendapatkan error dan output di terminal seperti yang sudah saya katakan.

$ ls -l uname.log u1.log ls: can access 'u1.log': No such file or directory -rw-r--r- - 1 ostechnix ostechnix 48 27 Agustus 07:37 uname.log

Saya menjalankan perintah ls yang sama lagi tetapi kali ini mengarahkan output ke file. Seperti yang Anda lihat dari output > operator mengalihkan stdout(1) ke file tetapi stderr(2) dikirim ke terminal.

$ ls -l uname.log u1.log > ls.op ls: tidak dapat mengakses 'u1. log': Tidak ada file atau direktori seperti itu

Untuk mengalihkan stderr ke file, gunakan operator “2>”. Wajib menggunakan deskriptor file untuk stderr(2) sebelum operator pengalihan > yang akan mengirim kesalahan sendiri ke file.

$ ls -l uname.log u1.log > ls.op 2> ls.err
$ cat ls.err ls: tidak dapat mengakses 'u1.log': Tidak ada file atau direktori seperti itu

Sekarang, stdout dan stderr ditulis ke file terpisah. Anda juga dapat mengirim stdout dan stderr ke satu file juga.

$ ls -l uname.log u1.log 1> ls.op 2> ls.op

Dari bash 4.4, Anda juga dapat menggunakan tanda &> untuk mengarahkan ulang stdout dan stderr ke file.

$ ls -l uname.log u1.log &> ls.op

Apa itu /dev/null?

Null adalah file karakter khusus yang menerima input dan membuang input dan tidak menghasilkan output. Sederhananya, null membuang apa pun yang Anda arahkan ke it.

$ ls -l /dev/null crw-rw-rw- 1 root root 1, 3 Agustus 27 06:01 /dev/null

Mengapa null penting dalam pengalihan? Anda mungkin bertanya-tanya. Dalam beberapa kasus, Anda mungkin tidak ingin mencetak atau menyimpan stdout atau stderr. Dalam hal ini, Anda dapat mengarahkan ulang stdout atau stderr ke /dev/null yang akan membuang aliran input.

$ date > /dev/null $ date 1> /dev/null # Stdout to Null $ dateee 2> /dev /null # PERINTAH SALAH, Stderr ke Null $ tanggal &> /dev/null # Stdout/Stderr ke Null

Input Pengalihan di Bash

Serupa dengan cara Anda mengarahkan output dan kesalahan ke file, Anda juga dapat meneruskan input ke perintah menggunakan pengalihan input operator ( /tmp/wc.op

$ cat /tmp/wc.op 10

Input redirection akan digunakan bersama dengan while loop untuk membaca isi file baris demi baris. /etc/passwd file sebagai input ke perintah while Di sini perintah read akan membaca baris demi baris dan menyimpannya dalam variabel VAL dan selanjutnya dalam kondisi loop ditulis untuk memeriksa apakah pengguna tersedia.

while read VAL; lakukan NAME=$(echo $VAL | awk -F ":" '/1/ {print $1}' ) if [[ $NAME = "karthick" ]] lalu echo "User spo tted" fi done < /etc/passwd

A script untuk menemukan sistem user

Ganti “karthick” dalam kode di atas dengan nama pengguna sistem Anda. Simpan file dan tutup.

Ini bukan cara optimal untuk mencapai tugas menemukan pengguna tetapi untuk tujuan demonstrasi, ini akan dilakukan.

Sekarang, buat skrip dapat dieksekusi dan jalankan:
$ chmod +x ostechnix.sh

$ ./ostechnix.sh Pengguna spott

Bash mendukung bentuk lain dari pengalihan input yang dikenal sebagai Heredoc. Kita akan membahasnya di artikel berikutnya.
Summary

Dalam panduan ini, kita mempelajari beberapa konsep skrip penting seperti apa itu pengalihan Bash, apa itu deskriptor file, cara mengarahkan output ke file, cara menangani stderr, apa itu / dev/null dan bagaimana itu digunakan dalam pengalihan Bash, dan akhirnya kami mengakhiri panduan dengan pengalihan Input di Bash.

Jika Anda ingin mempelajari skrip Bash, Anda harus mempelajari dan membiasakan diri dengan konsep yang dijelaskan di sini. Untuk membuat diri Anda nyaman, saya sarankan Anda untuk mencoba semua perintah yang telah kami tunjukkan dalam artikel ini di sistem Anda.

Jika Anda memiliki umpan balik atau tip yang akan membantu komunitas Linux dan pembaca kami untuk mempelajari skrip bash, jangan ragu untuk membiarkan kami tahu di bagian komentar di bawah.

Disarankan baca:
Daftar Pintasan Keyboard Bash yang Berguna Perbedaan Antara Mendefinisikan Variabel Bash Dengan Dan Tanpa Ekspor