GNU/Linux >> Belajar Linux >  >> Linux

Pengalihan Input Output di Linux Dijelaskan

Untuk administrator sistem, sangat umum untuk melakukan pengalihan input atau output selama pekerjaannya sehari-hari.

Pengalihan input dan output adalah alat yang sangat kuat, memungkinkan Anda untuk menghubungkan beberapa perintah bersama-sama serta mensintesis output dari beberapa perintah.

Pengalihan masukan / keluaran adalah konsep inti dari sistem berbasis Unix – dan dapat digunakan sebagai cara untuk meningkatkan produktivitas programmer sangat.

Namun, pengalihan input &output adalah subjek besar dan ada beberapa dasar yang perlu Anda pahami jika Anda ingin menjadi produktif.

Dengan tutorial ini, Anda akan memahami semuanya yang perlu diketahui tentang pengalihan input dan output pada sistem Linux.

Kami akan merenungkan desain kernel Linux pada file serta cara kerja proses untuk memiliki pemahaman yang mendalam dan lengkap tentang apa itu pengalihan input &output.

Beberapa contoh akan diberikan di sepanjang jalan untuk memastikan bahwa pengetahuan teoretis dikaitkan dengan latihan praktis.

Siap?

Yang Akan Anda Pelajari

Jika Anda mengikuti tutorial ini sampai akhir, Anda akan mempelajari konsep-konsep berikut.

  • Apa deskriptor file dan bagaimana hubungannya dengan masukan dan keluaran standar;
  • Cara memeriksa input dan output standar untuk proses tertentu di Linux;
  • Cara mengalihkan input dan output standar di Linux;
  • Cara menggunakan saluran pipa untuk menghubungkan input dan output untuk perintah yang panjang;

Itu adalah program yang cukup panjang, tanpa basa-basi lagi, mari kita lihat apa itu deskriptor file dan bagaimana file dikonsep oleh kernel Linux.

1 – Apa itu proses Linux?

Sebelum memahami input dan output pada sistem Linux, sangat penting untuk memiliki beberapa dasar tentang apa itu proses Linux dan bagaimana mereka berinteraksi dengan perangkat keras Anda.

Jika Anda hanya tertarik pada baris perintah pengalihan input dan output, Anda dapat melompat ke bagian berikutnya. Bagian ini ditujukan untuk administrator sistem yang ingin mempelajari subjek lebih dalam.

a – Bagaimana proses Linux dibuat?

Anda mungkin pernah mendengarnya sebelumnya, karena ini adalah pepatah yang cukup populer, tetapi di Linux semuanya adalah file .

Artinya, proses, perangkat, keyboard, hard drive direpresentasikan sebagai file yang hidup di sistem file.

Kernel Linux dapat membedakan file tersebut dengan menetapkan jenis file (misalnya file, direktori, soft link, atau soket) tetapi disimpan dalam struktur data yang sama oleh Kernel.

Seperti yang mungkin sudah Anda ketahui, proses Linux dibuat sebagai garpu dari proses yang ada yang mungkin merupakan proses init atau proses systemd pada distribusi yang lebih baru.

Saat membuat proses baru, Kernel Linux akan melakukan fork pada proses induk dan akan menduplikasi struktur yang berikut ini.

b – Bagaimana file disimpan di Linux?

Saya percaya bahwa diagram berbicara seratus kata, jadi inilah cara file disimpan secara konseptual di sistem Linux.

Seperti yang Anda lihat, untuk setiap proses yang dibuat, task_struct new baru dibuat di host Linux Anda.

Struktur ini menyimpan dua referensi, satu untuk metadata sistem file (disebut fs ) di mana Anda dapat menemukan informasi seperti filesystem mask misalnya.

Yang lainnya adalah struktur untuk file yang menyimpan apa yang kami sebut deskriptor file .

Ini juga berisi metadata tentang file yang digunakan oleh proses tetapi kami akan fokus pada deskriptor file untuk bab ini.

Dalam ilmu komputer, deskriptor file adalah referensi ke file lain yang saat ini digunakan oleh kernel itu sendiri.

Tapi apa yang sebenarnya ditunjukkan oleh file-file itu?

c – Bagaimana deskriptor file digunakan di Linux?

Seperti yang mungkin sudah Anda ketahui, kernel bertindak sebagai sebuah antarmuka antar perangkat keras Anda (layar, mouse, CD-ROM, atau keyboard).

Ini berarti Kernel Anda dapat memahami bahwa Anda ingin mentransfer beberapa file antar disk, atau bahwa Anda mungkin ingin membuat video baru di drive sekunder Anda misalnya.

Akibatnya, Kernel Linux secara permanen memindahkan data dari perangkat input (misalnya keyboard) ke perangkat output (misalnya hard drive).

Menggunakan abstraksi ini, proses pada dasarnya adalah cara untuk memanipulasi input (sebagai baca operasi) untuk membuat berbagai keluaran (sebagai tulis operasi)

Tapi bagaimana proses mengetahui kemana data harus dikirim?

Proses mengetahui ke mana data harus dikirim menggunakan deskriptor file.

Di Linux, deskriptor file 0 (atau fd[0]) ditetapkan ke masukan standar.

Demikian pula deskriptor file 1 (atau fd[1]) ditetapkan ke keluaran standar , dan deskriptor file 2 (atau fd[2]) ditetapkan ke kesalahan standar.

Ini adalah konstanta pada sistem Linux, untuk setiap proses, tiga deskriptor file pertama dicadangkan untuk input, output, dan kesalahan standar.

Deskriptor file tersebut dipetakan ke perangkat di sistem Linux Anda.

Perangkat yang terdaftar saat kernel dipakai, mereka dapat dilihat di /dev direktori host Anda.

Jika Anda melihat deskriptor file dari proses tertentu, katakanlah proses bash misalnya, Anda dapat melihat bahwa deskriptor file pada dasarnya adalah tautan lunak ke perangkat keras nyata di host Anda.

Seperti yang Anda lihat, ketika mengisolasi deskriptor file dari proses bash saya (yang memiliki 5151 PID di Host saya), saya dapat melihat perangkat berinteraksi dengan proses saya (atau file yang dibuka oleh kernel untuk proses saya).

Dalam hal ini, /dev/pts/0 mewakili terminal yang merupakan perangkat virtual (atau tty) pada sistem file virtual saya. Dalam istilah yang lebih sederhana, ini berarti bahwa instance bash saya (berjalan di antarmuka terminal Gnome) menunggu input dari keyboard saya, mencetaknya ke layar, dan mengeksekusinya saat diminta.

Sekarang setelah Anda memiliki pemahaman yang lebih jelas tentang deskriptor file dan bagaimana mereka digunakan oleh proses, kami siap menjelaskan cara melakukan pengalihan input dan output di Linux .

2 – Apa itu pengalihan Output di Linux?

Pengalihan input dan output adalah teknik yang digunakan untuk mengalihkan/mengubah input dan output standar, yang pada dasarnya mengubah dari mana data dibaca, atau dari mana data ditulis.

Misalnya, jika saya menjalankan perintah pada shell Linux saya, output mungkin dicetak langsung ke terminal saya (misalnya perintah cat).

Namun, dengan pengalihan output, saya dapat memilih untuk menyimpan output dari perintah cat saya ke file untuk penyimpanan jangka panjang.

a – Bagaimana cara kerja pengalihan keluaran?

Pengalihan output adalah tindakan mengarahkan ulang output dari suatu proses ke tempat yang dipilih seperti file, database, terminal, atau perangkat apa pun (atau perangkat virtual) yang dapat digunakan untuk menulis.

Sebagai contoh, mari kita lihat perintah echo.

Secara default, fungsi echo akan mengambil parameter string dan mencetaknya ke perangkat output default.

Akibatnya, jika Anda menjalankan fungsi echo terminal, output akan dicetak di terminal itu sendiri.

Sekarang katakanlah saya ingin string dicetak ke file sebagai gantinya, untuk penyimpanan jangka panjang.

Untuk mengalihkan keluaran standar di Linux, Anda harus menggunakan operator ">".

Sebagai contoh, untuk mengarahkan output standar dari fungsi gema ke file, Anda harus menjalankan

$ echo devconnected > file

Jika file tidak ada, itu akan dibuat.

Selanjutnya, Anda dapat melihat konten file dan melihat bahwa string "terhubung" telah dicetak dengan benar ke dalamnya.

Atau, dimungkinkan untuk mengarahkan ulang output dengan menggunakan "1> ” sintaks.

$ echo test 1> file

b – Output Redirection ke file dengan cara yang tidak merusak

Saat mengarahkan output standar ke file, Anda mungkin memperhatikan bahwa itu menghapus konten file yang ada.

Terkadang, ini bisa menjadi masalah karena Anda ingin menyimpan konten file yang sudah ada, dan hanya menambahkan beberapa perubahan di akhir file.

Untuk menambahkan konten ke file menggunakan pengalihan output, gunakan operator ">>" daripada operator ">".

Mengingat contoh yang baru saja kita gunakan sebelumnya, mari tambahkan baris kedua ke file yang ada.

$ echo a second line >> file

Hebat!

Seperti yang Anda lihat, konten telah ditambahkan ke file, alih-alih menimpanya sepenuhnya.

c – Pengalihan keluaran gotchas

Saat berurusan dengan pengalihan output, Anda mungkin tergoda untuk menjalankan perintah ke file hanya untuk mengarahkan output ke file yang sama.

Mengalihkan ke file yang sama

echo 'This a cool butterfly' > file
sed 's/butterfly/parrot/g' file > file

Apa yang Anda harapkan untuk dilihat dalam file pengujian?

Hasilnya adalah file tersebut benar-benar kosong.

Mengapa?

Secara default, saat mengurai perintah Anda, kernel tidak akan menjalankan perintah secara berurutan.

Artinya, perintah sed tidak akan menunggu akhir untuk membuka file baru Anda dan menulis konten ke dalamnya.

Sebaliknya, kernel akan membuka file Anda, menghapus semua konten di dalamnya, dan menunggu hasil operasi sed Anda diproses.

Saat operasi sed Anda melihat file kosong (karena semua konten dihapus oleh operasi pengalihan output), konten menjadi kosong.

Akibatnya, tidak ada yang ditambahkan ke file, dan konten benar-benar kosong.

Untuk mengarahkan output ke file yang sama, Anda mungkin ingin menggunakan pipa atau lebih banyak perintah lanjutan seperti

command … input_file > temp_file  &&  mv temp_file input_file

Melindungi file agar tidak ditimpa

Di Linux, dimungkinkan untuk melindungi file agar tidak ditimpa oleh operator ">".

Anda dapat melindungi file Anda dengan menyetel parameter “noclobber” pada lingkungan shell saat ini.

$ set -o noclobber

Dimungkinkan juga untuk membatasi pengalihan keluaran dengan menjalankan

$ set -C

Catatan :untuk mengaktifkan kembali pengalihan output, cukup jalankan set +C

Seperti yang Anda lihat, file tidak dapat ditimpa saat menyetel parameter ini.

Jika saya benar-benar ingin memaksakan penggantian, saya dapat menggunakan tombol “>| ” operator untuk memaksanya.

3 – Apa itu Pengalihan Input di Linux?

a – Bagaimana cara kerja pengalihan input?

Pengalihan input adalah tindakan mengalihkan input dari suatu proses ke perangkat tertentu (atau perangkat virtual) sehingga mulai membaca dari perangkat ini dan bukan dari default yang ditetapkan oleh Kernel.

Sebagai contoh, ketika Anda membuka terminal, Anda berinteraksi dengannya dengan keyboard Anda.

Namun, ada beberapa kasus di mana Anda mungkin ingin bekerja dengan konten file, karena Anda ingin mengirim konten file secara terprogram ke perintah Anda.

Untuk mengalihkan input standar di Linux, Anda harus menggunakan operator “<”.

Sebagai contoh, katakanlah Anda ingin menggunakan konten file dan menjalankan perintah khusus pada file tersebut.

Dalam hal ini, saya akan menggunakan file yang berisi domain, dan perintahnya adalah perintah sortir sederhana.

Dengan cara ini, domain akan diurutkan berdasarkan abjad.

Dengan pengalihan input, saya dapat menjalankan perintah berikut

Jika saya ingin mengurutkan domain tersebut, saya dapat mengarahkan konten file domain ke input standar dari fungsi sortir.

$ sort < domains

Dengan sintaks ini, konten file domain dialihkan ke input fungsi sortir. Ini sangat berbeda dengan sintaks berikut

$ sort domains

Bahkan jika outputnya mungkin sama, dalam hal ini, fungsi sortir mengambil file sebagai parameter.

Dalam contoh pengalihan input, fungsi sort dipanggil tanpa parameter.

Akibatnya, ketika tidak ada parameter file yang diberikan ke fungsi, fungsi membacanya dari input standar secara default.

Dalam hal ini, ia membaca konten file yang disediakan.

b – Mengarahkan input standar dengan file yang berisi banyak baris

Jika file Anda berisi beberapa baris, Anda masih dapat mengalihkan input standar dari perintah Anda untuk setiap baris file Anda.

Katakanlah misalnya Anda ingin memiliki permintaan ping untuk setiap entri dalam file domain.

Secara default, perintah ping mengharapkan satu IP atau URL untuk di-ping.

Namun, Anda dapat mengalihkan konten file domain Anda ke fungsi khusus yang akan menjalankan fungsi ping untuk setiap entri.

$ ( while read ip; do ping -c 2 $ip; done ) < ips

c – Menggabungkan pengalihan input dengan pengalihan output

Sekarang setelah Anda mengetahui bahwa input standar dapat dialihkan ke suatu perintah, perlu disebutkan bahwa pengalihan input dan output dapat dilakukan dalam perintah yang sama.

Sekarang setelah Anda melakukan perintah ping, Anda mendapatkan statistik ping untuk setiap situs web di daftar domain.

Hasilnya dicetak pada keluaran standar, yang dalam hal ini terminal.

Tetapi bagaimana jika Anda ingin menyimpan hasilnya ke file?

Ini dapat dicapai dengan menggabungkan pengalihan input dan output pada perintah yang sama .

$ ( while read ip; do ping -c 2 $ip; done ) < domains > stats.txt

Besar!

Hasilnya disimpan dengan benar ke file dan dapat dianalisis nanti oleh tim lain di perusahaan Anda.

d – Membuang output standar sepenuhnya

Dalam beberapa kasus, mungkin berguna untuk membuang keluaran standar sepenuhnya.

Mungkin karena Anda tidak tertarik dengan keluaran standar suatu proses atau karena proses ini mencetak terlalu banyak baris pada keluaran standar.

Untuk membuang keluaran standar sepenuhnya di Linux, arahkan ulang keluaran standar ke /dev/null.

Pengalihan ke /dev/null menyebabkan data benar-benar dibuang dan dihapus.

$ cat file > /dev/null

Catatan :mengalihkan ke /dev/null tidak menghapus konten file tetapi hanya membuang konten output standar.

4 – Apa yang dimaksud dengan pengalihan kesalahan standar di Linux?

Terakhir, setelah pengalihan input dan output, mari kita lihat bagaimana kesalahan standar dapat dialihkan.

a – Bagaimana cara kerja pengalihan kesalahan standar?

Sangat mirip dengan apa yang kita lihat sebelumnya, pengalihan kesalahan adalah pengalihan kesalahan yang dikembalikan oleh proses ke perangkat yang ditentukan di host Anda.

Misalnya, jika saya menjalankan perintah dengan parameter buruk, yang saya lihat di layar adalah pesan kesalahan dan telah diproses melalui deskriptor file yang bertanggung jawab atas pesan kesalahan (fd[2]).

Perhatikan bahwa tidak ada cara sepele untuk membedakan pesan kesalahan dari pesan keluaran standar di terminal, Anda harus bergantung pada pemrogram yang mengirim pesan kesalahan ke deskriptor file yang benar.

Untuk mengarahkan ulang keluaran kesalahan di Linux, gunakan perintah “2> ” operator

$ command 2> file

Mari kita gunakan contoh perintah ping untuk menghasilkan pesan kesalahan di terminal.

Sekarang mari kita lihat versi di mana keluaran kesalahan dialihkan ke file kesalahan.

Seperti yang Anda lihat, saya menggunakan operator "2>" untuk mengarahkan kesalahan ke file "file kesalahan".

Jika saya hanya mengarahkan output standar ke file, tidak ada yang akan dicetak ke sana.

Seperti yang Anda lihat, pesan kesalahan dicetak ke terminal saya dan tidak ada yang ditambahkan ke output "file normal" saya.

b – Menggabungkan kesalahan standar dengan keluaran standar

Dalam beberapa kasus, Anda mungkin ingin menggabungkan pesan kesalahan dengan keluaran standar dan mengarahkannya ke file.

Ini bisa sangat berguna karena beberapa program tidak hanya mengembalikan pesan standar atau pesan kesalahan tetapi campuran keduanya.

Mari kita ambil contoh temukan memerintah.

Jika saya menjalankan perintah find di direktori root tanpa hak sudo, saya mungkin tidak berhak mengakses beberapa direktori, seperti proses yang tidak saya miliki misalnya.

Akibatnya, akan ada campuran pesan standar (file milik pengguna saya) dan pesan kesalahan (ketika mencoba mengakses direktori yang bukan milik saya).

Dalam hal ini, saya ingin kedua output disimpan ke dalam file.

Untuk mengalihkan keluaran standar serta keluaran kesalahan ke file, gunakan sintaks “2<&1” dengan ">". sebelumnya.

$ find / -user devconnected > file 2>&1

Atau, Anda dapat menggunakan “&>” sintaks sebagai cara yang lebih singkat untuk mengarahkan ulang baik keluaran maupun kesalahan.

$ find / -user devconnected &> file

Jadi apa yang terjadi di sini?

Saat bash melihat beberapa pengalihan, bash memprosesnya dari kiri ke kanan.

Akibatnya, output dari fungsi find pertama-tama diarahkan ke file.

Selanjutnya, pengalihan kedua diproses dan mengarahkan kesalahan standar ke keluaran standar (yang sebelumnya ditetapkan ke file).

5 – Apa itu pipeline di Linux?

Pipeline sedikit berbeda dari redirection.

Saat melakukan pengalihan input atau output standar, pada dasarnya Anda menimpa input atau output default ke file khusus.

Dengan pipeline, Anda tidak menimpa input atau output, tetapi Anda menghubungkannya bersama-sama.

Pipeline digunakan pada sistem Linux untuk menghubungkan proses bersama, menghubungkan output standar dari satu program ke input standar program lainnya.

Beberapa proses dapat dihubungkan bersama dengan pipa (atau pipa )

Pipa banyak digunakan oleh administrator sistem untuk membuat kueri kompleks dengan menggabungkan kueri sederhana.

Salah satu contoh paling populer mungkin menghitung jumlah baris dalam file teks, setelah menerapkan beberapa filter khusus pada konten file.

Mari kembali ke file domain yang kita buat di bagian sebelumnya dan ubah ekstensi negaranya untuk menyertakan domain .net.

Sekarang katakanlah Anda ingin menghitung jumlah domain .com dalam file.

Bagaimana Anda melakukannya? Dengan menggunakan pipa.

Pertama, Anda ingin memfilter hasil untuk mengisolasi hanya domain .com dalam file. Kemudian, Anda ingin menyalurkan hasilnya ke perintah “wc” untuk menghitungnya.

Berikut adalah cara menghitung domain .com dalam file.

$ grep .com domains | wc -l

Inilah yang terjadi dengan diagram jika Anda masih tidak dapat memahaminya.

Luar biasa!

6 – Kesimpulan

Dalam tutorial hari ini, Anda telah mempelajari apa itu pengalihan input dan output dan bagaimana hal itu dapat digunakan secara efektif untuk melakukan operasi administratif pada sistem Linux Anda.

Anda juga mempelajari tentang pipa (atau pipa) yang digunakan untuk merangkai perintah untuk menjalankan perintah yang lebih lama dan lebih kompleks di host Anda.

Jika Anda ingin tahu tentang administrasi Linux, kami memiliki seluruh kategori yang didedikasikan untuk itu di devconnected, jadi pastikan untuk memeriksanya!


Linux
  1. Perintah Sejarah di Linux Dijelaskan Secara Mendalam

  2. Pengalihan Input/Output di Linux/Unix

  3. Linux – Output Dari Ps Lstart Berubah?

  1. Pelajari Dasar-dasar Cara Kerja Pengalihan I/O (Input/Output) Linux

  2. Dekripsi cookie terenkripsi Chrome Linux BLOB dengan Python

  3. Bagaimana cara menafsirkan dan memperbaiki kesalahan Input/output di Linux?

  1. Bekerja dengan Input Output dan Error Redirection di Linux

  2. Pipes dan Redirection di Linux - Dijelaskan!

  3. RHEL 7 – Catatan RHCSA – pengalihan input / output