GNU/Linux >> Belajar Linux >  >> Linux

Pengalihan Bash Dijelaskan Dengan Contoh

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

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

Apa yang dimaksud dengan deskriptor File?

Saat 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 yang kami sebut deskriptor file (disingkat FD).

Secara default, setiap program akan dimulai dengan tiga deskriptor file.

  • FD 0 -> Input Standar(stdin) -> Keyboard
  • FD 1 -> Output Standar(Stdout) -> Tampilan(Terminal)
  • FD 2 -> Kesalahan Standar(Stderr) -> Tampilan(Terminal)

Anda dapat melihat deskriptor file di /dev direktori:

$ ls -l /dev/std* lrwxrwxrwx 1 root root 15 Agustus 27 21:32 /dev/stderr -> /proc/self/fd/2lrwxrwxrwx 1 root root 15 Agustus 27 21:32 /dev/stdin -> /proc/self/fd/0lrwxrwxrwx 1 root root 15 Agustus 27 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 diteruskan dan output serta error dikirim.

Mengalihkan output ke file

Seperti yang dinyatakan sebelumnya, output (stdout) dan error (stderr) dari setiap program dikirim ke terminal. Anda dapat menggunakan operator pengalihan ">” untuk menulis stdout dan stderr ke file.

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

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

Perhatian: Saat menggunakan ">" operator, jika file tidak tersedia, itu akan dibuat. Dan jika file sudah ada, itu akan diganti dengan konten baru.

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

$ uname -mrs 1> uname.log

Seperti yang telah saya sebutkan, satu operator pengalihan (> ) hanya akan menimpa konten file, jika file tersebut 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.

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

Cara 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 ls perintah untuk melihat cara kerjanya. Saya mencoba membuat daftar dua file yang hanya ada satu. Saya mendapatkan kesalahan dan keluaran di terminal seperti yang sudah saya katakan.

$ ls -l uname.log u1.log ls:tidak dapat mengakses 'u1.log':Tidak ada file atau direktori seperti itu-rw-r--r-- 1 ostechnix ostechnix 48 Aug 27 07:37 uname.log

Saya menjalankan ls . yang sama perintah lagi tapi 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 "2>" operator. Wajib menggunakan deskriptor file untuk stderr(2) sebelum operator pengalihan> yang akan mengirimkan 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 yang 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 &> sign untuk mengarahkan stdout dan stderr ke file.

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

Apa itu /dev/null?

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

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

Mengapa nol 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.

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

Masukkan Pengalihan di Bash

Mirip dengan bagaimana Anda mengarahkan output dan kesalahan ke file, Anda juga dapat meneruskan input ke perintah menggunakan operator pengalihan input (< ).

Mari kita mulai dengan program penghitungan kata sederhana. Di sini, saya mengarahkan ulang konten ostechnix.txt file ke jumlah kata untuk menemukan jumlah baris.

$ wc -l <​​ostechnix.txt  10

Anda juga dapat meneruskan deskriptor file stdin (0) saat mengarahkan ulang input.

$ wc -l 0 10

Anda dapat menggabungkan operator pengalihan input dan output seperti yang ditunjukkan di bawah ini.

$ wc -l <​​ostechnix.txt &> /tmp/wc.op
$ cat /tmp/wc.op  10

Pengalihan input akan digunakan bersama dengan loop sementara untuk membaca konten file baris demi baris.

Lihatlah contoh di bawah ini. Saya melewati /etc/passwd file sebagai input ke while memerintah. Di sini read perintah akan membaca baris demi baris dan menyimpannya dalam variabel VAL dan selanjutnya dalam kondisi loop ditulis untuk memeriksa apakah pengguna tersedia.

saat membaca VAL; lakukan NAME=$(echo $VAL | awk -F ":" '/1/ {print $1}' ) if [[ $NAME ="karthick" ]] then echo "User spot" fidone   

Skrip untuk menemukan pengguna sistem

Ganti "karthick" pada kode di atas dengan nama pengguna sistem Anda. Simpan file dan tutup.

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

Sekarang, buat skrip tersebut dapat dieksekusi dan jalankan:

$ chmod +x ostechnix.sh 
$ ./ostechnix.sh 
Pengguna terlihat

Bash mendukung bentuk lain dari pengalihan input yang dikenal sebagai Heredoc . Untuk lebih jelasnya, lihat panduan berikut:

  • Tutorial Bash Heredoc Untuk Pemula

Ringkasan

Dalam panduan ini, kami mempelajari beberapa konsep skrip penting seperti apa itu pengalihan Bash, apa itu deskriptor file, bagaimana mengarahkan output ke file, bagaimana menangani stderr, apa itu /dev/null dan bagaimana itu digunakan di Bash redirection, dan akhirnya kami mengakhiri panduan dengan redirection 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 tips apa pun yang akan membantu komunitas Linux dan pembaca kami untuk mempelajari skrip bash, jangan ragu untuk memberi tahu kami di bagian komentar di bawah.

Bacaan yang disarankan:

  • Bash Scripting – Variabel Dijelaskan Dengan Contoh
  • Bash Scripting – Fungsi Dijelaskan Dengan Contoh
  • Skrip Bash – Untuk Pengulangan Dijelaskan Dengan Contoh
  • Bash Scripting – Sementara Dan Sampai Perulangan Dijelaskan Dengan Contoh
  • Perintah Bash Echo Dijelaskan Dengan Contoh Di Linux
  • Daftar Pintasan Keyboard Bash yang Berguna
  • Perbedaan Antara Mendefinisikan Variabel Bash Dengan Dan Tanpa Ekspor

Linux
  1. Cara Menulis Skrip Bash dengan Contoh

  2. Pernyataan Bash If-Else Dengan Contoh

  3. Cara membuat dan memasang sistem file Btrfs (dijelaskan dengan contoh)

  1. Tutorial Bash HereDoc Dengan Contoh

  2. Perintah cksum Linux dijelaskan untuk pemula (dengan contoh)

  3. Perintah WC Linux dengan contoh

  1. 35 Contoh Skrip Bash

  2. Stempel Waktu File Linux Dijelaskan Dengan Contoh

  3. Perintah Bash Echo Dijelaskan Dengan Contoh Di Linux