Creating, Viewing, and Editing Text Files
Tags: ramadhanbersamaredhat
Published: 2024-04-01 07:05:06

**Mengarahkan Output ke File atau Program**


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pkq2fktf1lltepjabvb1.png)

Dalam konteks pengalihan I/O, proses atau program dapat mengubah cara mereka menerima input dan mengirimkan output. Sebagai contoh, alih-alih menerima masukan dari keyboard dan menampilkan outputnya di terminal, proses dapat membaca atau menulis ke dalam file.

Dalam sistem operasi, setiap proses memiliki deskriptor file yang digunakan untuk mengelola masukan dan keluaran. Ada tiga deskriptor file yang umumnya digunakan: stdin (nomor 0) untuk masukan standar dari keyboard, stdout (nomor 1) untuk keluaran standar ke terminal, dan stderr (nomor 2) untuk pesan kesalahan ke terminal.

**Mengarahkan Output ke File**

Pengalihan I/O memungkinkan kita untuk mengarahkan output dari sebuah program ke dalam file, sehingga pesan yang biasanya ditampilkan di terminal dapat disimpan di file tersebut. Selain itu, kita juga dapat menggunakan pengalihan untuk mengabaikan atau membuang keluaran atau pesan kesalahan, sehingga tidak ditampilkan di terminal atau disimpan.

Misalnya, dengan melakukan pengalihan stdout, kita dapat menekan keluaran dari proses agar tidak muncul di terminal. Namun, penting untuk diingat bahwa pengalihan hanya stdout tidak akan menyembunyikan pesan kesalahan (stderr) agar tidak ditampilkan di terminal. Jika file yang dituju tidak ada, sistem akan membuatnya. Tetapi, jika file sudah ada dan pengalihannya bukan untuk menambahkan isi ke file, maka konten file akan ditimpa dengan keluaran dari proses tersebut.

Urutan operasi pengalihan itu penting. Urutan berikut mengalihkan keluaran standar ke file dan kemudian mengalihkan kesalahan standar ke tempat yang sama dengan keluaran standar (file).

```
> berkas 2>&1
```
Namun, urutan selanjutnya melakukan pengalihan dalam urutan sebaliknya. Ini mengalihkan kesalahan standar ke tempat default untuk keluaran standar (jendela terminal, jadi tidak ada perubahan) dan kemudian hanya mengalihkan keluaran standar ke file.

```
2>&1 > berkas
```


**contoh pengalihan output**

Banyak tugas administrasi rutin disederhanakan dengan menggunakan pengalihan. Gunakan tabel sebelumnya untuk membantu sambil mempertimbangkan contoh berikut. 
Simpan stempel waktu untuk referensi nanti.

```
[user@host ~]$ date > /tmp/saved-timestamp
```
Salin 100 baris terakhir dari file log ke file lain.

```
[user@host ~]$ tail -n 100 /var/log/dmesg > /tmp/last-100-boot-messages
```
Gabungkan empat file menjadi satu.

```
[user@host ~]$ cat file1 file2 file3 file4 > /tmp/all-four-in-one
```
Cantumkan nama file tersembunyi dan biasa dari direktori home ke dalam sebuah file.

```
[user@host ~]$ ls -a > /tmp/my-file-names
[user@host ~]$ echo "new line of information" >> /tmp/many-lines-of-information
[user@host ~]$ diff previous-file current-file >> /tmp/tracking-changes-made
```
Beberapa perintah berikutnya menghasilkan pesan kesalahan karena beberapa direktori sistem tidak dapat diakses oleh pengguna normal. Amati saat pesan kesalahan dialihkan. 

```
[user@host ~]$ find /etc -name passwd 2> /tmp/errors
[user@host ~]$ find /etc -name passwd > /tmp/output 2> /tmp/errors
[user@host ~]$ find /etc -name passwd > /tmp/output 2> /dev/null
[user@host ~]$ find /etc -name passwd &> /tmp/save-both
[user@host ~]$ find /etc -name passwd >> /tmp/save-both 2>&1
```

**Membangun Saluran Pipa / Pipelines**

Saluran pipa adalah urutan satu atau lebih perintah yang dipisahkan oleh pipa karakter (|). Sebuah pipa menghubungkan keluaran standar dari perintah pertama ke masukan standar dari perintah berikutnya.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/agf1r75q5j4nr3ubpary.png)

Pipeline memungkinkan keluaran suatu proses dimanipulasi dan diformat oleh proses lain sebelum dikeluarkan ke terminal. Salah satu gambaran mental yang berguna adalah membayangkan bahwa data "mengalir" melalui pipeline dari satu proses ke proses lainnya, diubah sedikit oleh setiap perintah dalam pipeline yang dilaluinya.

Saluran pipa dan pengalihan I/O memanipulasi keluaran standar dan masukan standar. Pengalihan mengirimkan keluaran standar ke file atau mendapatkan masukan standar dari file. Pipa mengirimkan keluaran standar dari satu proses ke masukan standar dari proses lainnya.

**Contoh Saluran Pipa / Pipelines**

Contoh ini mengambil output dari perintah ls dan menggunakan less untuk menampilkannya di layar terminal satu per satu.

```
[user@host ~]$ ls -l /usr/bin | less
```
Output dari perintah ls disalurkan ke wc -l , yang menghitung jumlah baris yang diterima dari ls dan mencetaknya ke terminal. Dalam pipa ini, head akan menampilkan 10 baris keluaran pertama dari ls -t , dengan hasil akhir dialihkan ke sebuah file.

```
[user@host ~]$ ls | wc -l
[user@host ~]$ ls -t | head -n 10 > /tmp/ten-last-changed-files
```

**Saluran Pipa, Pengalihan, dan Perintah tee**

Ketika pengalihan digabungkan dengan saluran pipa, shell menyiapkan seluruh saluran pipa terlebih dahulu, kemudian mengalihkan input/output. Jika pengalihan keluaran digunakan di tengah dari sebuah pipeline, outputnya akan menuju ke file dan bukan ke perintah berikutnya dalam pipeline. Dalam contoh ini, output dari perintah ls masuk ke file, dan less tidak menampilkan apa pun di terminal.

```
[user@host ~]$ ls > /tmp/saved-output | less
```
Perintah tee mengatasi batasan ini. Dalam pipeline, tee menyalin masukan standarnya ke keluaran standarnya dan juga mengalihkan keluaran standarnya ke file yang diberi nama sebagai argumen pada perintah. Jika Anda membayangkan data sebagai air yang mengalir melalui pipa, tee dapat divisualisasikan sebagai sambungan "T" pada pipa yang mengarahkan keluaran ke dua arah.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/do9j5kd6wjrx7xim4s5w.png)


## **Mengedit File Teks dari Shell Prompt**

**Mengedit File dengan Vim**

Prinsip desain utama Linux adalah informasi dan pengaturan konfigurasi biasanya disimpan dalam file berbasis teks. File-file ini dapat disusun dalam berbagai cara, sebagai daftar pengaturan, dalam format mirip INI, sebagai XML terstruktur atau YAML, dan seterusnya. Namun, kelebihan file teks adalah dapat dilihat dan diedit menggunakan editor teks sederhana apa pun.

Vim adalah versi perbaikan dari editor vi yang didistribusikan dengan sistem Linux dan UNIX. Vim sangat dapat dikonfigurasi dan efisien untuk pengguna terlatih, termasuk fitur-fitur seperti pengeditan layar terpisah, pemformatan warna, dan penyorotan untuk mengedit teks.

**Mengapa Belajar Vim?**

Vim adalah salah satu editor teks yang biasanya sudah terpasang di server jika ada editor teks lainnya. Ini karena Vim adalah versi yang diperbarui dari editor teks yang lebih tua yang disebut vi, yang hampir selalu ada di sistem UNIX dan Linux. 

Mempelajari Vim penting karena Anda dapat mengedit file konfigurasi langsung dari terminal tanpa perlu akses ke desktop grafis. Ini sangat berguna ketika Anda harus mengelola server dari jarak jauh melalui SSH atau Konsol Web. 

Selain itu, keahlian dalam menggunakan Vim dapat membantu Anda di berbagai sistem operasi, termasuk macOS yang kini memiliki Vim sebagai editor teks bawaan. Jadi, belajar Vim tidak hanya membantu Anda dalam mengelola server Linux, tetapi juga dalam mengatasi tugas di platform lain.

**Memulai Vim**

Vim dapat diinstal di Red Hat Enterprise Linux dengan dua cara berbeda. Hal ini dapat mempengaruhi fitur dan perintah Vim yang tersedia untuk Anda. Server Anda mungkin hanya menginstal paket vim-minimal . Ini adalah instalasi yang sangat ringan yang hanya mencakup kumpulan fitur inti dan perintah dasar vi . Dalam hal ini, Anda dapat membuka file untuk diedit dengan vifilename, dan semua fitur inti yang dibahas di bagian ini akan tersedia untuk Anda.

Alternatifnya, server Anda mungkin telah menginstal paket yang disempurnakan dengan vim . Ini menyediakan serangkaian fitur yang jauh lebih komprehensif, sistem bantuan online, dan program tutorial. Untuk memulai Vim dalam mode yang ditingkatkan ini, Anda menggunakan perintah vim .

```
[user@host ~]$ vim filename
```
Jika vim-enhanced diinstal, pengguna biasa akan memiliki alias shell yang disetel sehingga jika mereka menjalankan perintah vi , mereka secara otomatis akan mendapatkan perintah vim . Ini tidak berlaku untuk root pengguna lain dengan UID di bawah 200 (yang digunakan oleh layanan sistem).

Jika Anda mengedit file sebagai root pengguna dan Anda mengharapkan vi berjalan dalam mode yang disempurnakan, ini bisa menjadi kejutan. Demikian pula, jika vim-enhanced diinstal dan pengguna biasa menginginkan vi sederhana karena alasan tertentu, mereka mungkin perlu menggunakan \vi untuk mengganti alias sementara.

Pengguna tingkat lanjut dapat menggunakan \vi --version dan vim --version untuk membandingkan rangkaian fitur dari kedua perintah.

**Mode Operasi Vim**

Vim memiliki beberapa mode operasi yang memungkinkan Anda melakukan berbagai tindakan saat mengedit teks. Mode-mode tersebut antara lain:

1. _Mode Perintah_: Ini adalah mode awal saat Anda membuka Vim. Di sini, Anda dapat navigasi, potong dan tempel, serta melakukan manipulasi teks lainnya.
2. _Mode Penyisipan_: Masuk ke mode ini dengan menekan tombol "i". Di sini, semua teks yang Anda ketik akan langsung ditambahkan ke konten file. Untuk kembali ke mode perintah, cukup tekan tombol "Esc".
3. _Mode Visual_: Masuk ke mode ini dengan menekan tombol "v". Anda bisa memilih beberapa karakter untuk melakukan manipulasi teks. Gunakan "Shift + V" untuk pemilihan beberapa baris, dan "Ctrl + V" untuk pemilihan blok. Untuk keluar dari mode visual, tekan tombol yang sama (v, Shift + V, atau Ctrl + V) yang digunakan untuk keluar.

Jika Anda tidak yakin mode apa yang sedang digunakan Vim, Anda bisa mencoba menekan tombol "Esc" beberapa kali untuk kembali ke mode perintah. Ini tidak akan berbahaya, jadi tidak masalah jika Anda menekan tombol tambahan.

**Alur Kerja Vim Dasar Minimum**

Kunci i menempatkan Vim ke mode penyisipan. Semua teks yang dimasukkan setelah ini dianggap sebagai konten file sampai Anda keluar dari mode penyisipan. Kunci Esc keluar dari mode penyisipan dan mengembalikan Vim ke mode perintah. Tombol u akan membatalkan pengeditan terbaru. Tekan tombol x untuk menghapus satu karakter. Perintah :w menulis (menyimpan) file dan tetap dalam mode perintah untuk pengeditan lebih lanjut. Perintah :wq menulis (menyimpan) file dan keluar dari Vim. : q ! perintah keluar dari Vim, membuang semua perubahan file sejak penulisan terakhir. 

**Menata Ulang Teks yang Ada**

Di Vim, salin dan tempel dikenal sebagai tarik dan letakkan, menggunakan karakter perintah y dan p . Mulailah dengan memposisikan kursor pada karakter pertama yang akan dipilih, lalu masuk ke mode visual. Gunakan tombol panah untuk memperluas pilihan visual. Jika sudah siap, tekan y untuk merenggut seleksi ke dalam memori. Posisikan kursor di lokasi baru, lalu tekan p untuk meletakkan pilihan pada kursor.

Mode Visual di Vim
1. _Mode Karakter_: Menyorot karakter per karakter dengan menekan "v".
2. _Mode Garis_: Menyorot satu baris teks pada satu waktu dengan menekan "Shift + v".
3. _Mode Blok_: Cocok untuk menyorot blok teks secara vertikal atau horizontal dengan menekan "Ctrl + v".
Ini memudahkan Anda untuk memanipulasi teks sesuai kebutuhan.


## **Mengubah Lingkungan Shell**

**Menggunakan Variabel Shell**

Dalam Bash shell, Anda bisa membuat dan mengatur variabel yang membantu dalam menjalankan perintah atau mengubah perilaku shell. Anda juga bisa mengekspor variabel shell sebagai variabel lingkungan, yang akan diwariskan ke program yang dijalankan dari shell tersebut.

Variabel shell hanya berlaku untuk sesi shell tertentu. Jika Anda memiliki beberapa jendela terminal atau sesi login ke server yang sama, setiap shell memiliki nilai variabelnya sendiri. Ini memungkinkan Anda untuk memiliki pengaturan yang berbeda untuk setiap sesi shell yang berjalan secara independen.

**Menetapkan Nilai ke Variabel**

Tetapkan nilai ke variabel shell menggunakan sintaks berikut:

```
NAMA VARIABEL=nilai
```
Nama variabel dapat berisi huruf besar atau kecil, angka, dan karakter garis bawah (_). Misalnya, perintah berikut mengatur variabel shell :

```
[user@host ~]$ COUNT=40
[user@host ~]$ first_name=John
[user@host ~]$ file1=/tmp/abc
[user@host ~]$ _ID=RH123
```
Anda dapat menggunakan perintah set untuk membuat daftar semua variabel shell yang saat ini disetel. (Ini juga mencantumkan semua fungsi shell, yang dapat Anda abaikan). Daftar ini cukup panjang sehingga Anda mungkin ingin menyalurkan output ke perintah less sehingga Anda dapat melihatnya satu halaman dalam satu waktu.

```
[user@host ~]$ set | less
```

**Mengambil Nilai dengan Ekspansi Variabel**

Anda dapat gunakan ekspansi variabel untuk merujuk pada nilai variabel yang telah Anda tetapkan. Untuk melakukan ini, awali nama variabel dengan tanda dolar ($). Dalam contoh berikut, perintah echo mencetak sisa baris perintah yang dimasukkan, tetapi setelah perluasan variabel dilakukan. Misalnya, perintah berikut menyetel variabel COUNT menjadi 40.

```
[user@host ~]$ COUNT=40
```
Jika Anda memasukkan perintah echo COUNT, string akan dicetak COUNT.

```
[user@host ~]$ echo COUNT
COUNT
```
Namun jika Anda memasukkan perintah echo $COUNT , maka akan dicetak nilai variabelnya COUNT.

```
[user@host ~]$ echo $COUNT
40
```
Contoh yang lebih praktis adalah menggunakan variabel untuk merujuk ke nama file yang panjang untuk beberapa perintah.

```
[user@host ~]$ file1=/tmp/tmp.z9pXW0HqcC
[user@host ~]$ ls -l $file1
-rw-------. 1 pelajar pelajar 1452 22 Jan 14:39 /tmp/tmp.z9pXW0HqcC
[user@host ~]$ rm $file1
[user@host ~]$ ls -l $file1
jumlah 0

```
Jika ada karakter tambahan yang berdekatan dengan nama variabel, Anda mungkin perlu melindungi nama variabel dengan kurung kurawal. Anda selalu dapat menggunakan kurung kurawal dalam ekspansi variabel, tetapi Anda juga akan melihat banyak contoh di mana kurung kurawal tidak diperlukan dan dihilangkan.

Dalam contoh berikut, perintah echo pertama mencoba memperluas variabel yang tidak ada COUNTx, yang tidak menyebabkan kesalahan tetapi tidak mengembalikan apa pun.

```
[user@host ~]$ echo Repeat $COUNTx
Repeat
[user@host ~]$ echo Repeat ${COUNT}x
Repeat 40x
```
Mengonfigurasi Bash dengan Variabel Shell
Beberapa variabel shell dapat disetel saat Bash dimulai dan dapat dimodifikasi untuk menyesuaikan perilaku shell.

Contohnya adalah HISTFILE dan HISTFILESIZE yang memengaruhi riwayat shell dan perintah history. HISTFILE menentukan lokasi file penyimpanan riwayat shell, dan secara default berada di ~/.bash_history. HISTFILESIZE menentukan jumlah perintah yang disimpan dalam file tersebut. Contoh lainnya adalah PS1, variabel shell yang mengontrol tampilan prompt shell. Mengubah nilai PS1 akan mengubah tampilan prompt shell Anda. Beberapa ekstensi karakter khusus yang didukung oleh prompt dapat ditemukan di bagian "PROMPTING" pada halaman manual bash (1).

```
[user@host ~]$ PS1="bash\$ "
bash$ PS1="[\u@\h \W]\$ "
[user@host ~]$ 
```
Dua hal yang perlu diperhatikan tentang contoh di atas, pertama selalu tambahkan spasi tambahan di akhir nilai PS1 untuk prompt yang baik. kedua Saat nilai variabel mengandung spasi, pastikan untuk mengapit nilainya dengan tanda kutip (bisa tunggal atau ganda) untuk menghindari hasil yang tidak terduga.

**Mengonfigurasi Program dengan Variabel Lingkungan**

Shell menyediakan lingkungan ke program yang Anda jalankan dari shell itu. Antara lain, lingkungan ini mencakup informasi tentang direktori kerja saat ini pada sistem file, opsi baris perintah yang diteruskan ke program, dan nilai-nilai dari variabel lingkungan. Program dapat menggunakan variabel lingkungan ini untuk mengubah perilaku atau pengaturan defaultnya. Variabel shell yang bukan variabel lingkungan hanya dapat digunakan oleh shell. Variabel lingkungan dapat digunakan oleh shell Dan oleh program yang dijalankan dari shell itu.

HISTFILE, HISTFILESIZE, dan PS1, yang dipelajari di bagian sebelumnya, tidak perlu diekspor sebagai variabel lingkungan karena hanya digunakan oleh shell itu sendiri, bukan oleh program yang Anda jalankan dari shell. Anda dapat membuat variabel apa pun yang ditentukan di shell menjadi variabel lingkungan dengan menandainya untuk diekspor dengan perintah ekspor .

```
[user@host ~]$ EDITOR=vim
[user@host ~]$ export EDITOR
```
Anda dapat mengatur dan mengekspor variabel dalam satu langkah:

```
[user@host ~]$ export EDITOR=vim
```
Aplikasi dan sesi menggunakan variabel ini untuk menyesuaikan perilakunya. Misalnya, variabel HOME secara otomatis disetel oleh shell ke direktori home pengguna, yang membantu program menentukan lokasi penyimpanan file.
Contoh lainnya adalah variabel LANG, yang menentukan pengaturan lokal. Ini memengaruhi bahasa, format tanggal, angka, dan mata uang yang digunakan dalam output program. 

Misalnya, jika diatur ke en_US.UTF-8, maka akan menggunakan pengaturan bahasa Inggris AS dengan pengkodean karakter UTF-8. Sedangkan jika diatur ke fr_FR.UTF-8, maka akan menggunakan pengaturan bahasa Perancis dengan pengkodean karakter UTF-8.

```
[user@host ~]$ date
Sel 22 Jan 16:37:45 CST 2019
[user@host ~]$ export LANG=fr_FR.UTF-8
[user@host ~]$ date
Maret. Januari. 22 16:38:14 WIB 2019
```
Variabel lingkungan penting lainnya adalah PATH. Variabel PATH berisi daftar direktori yang dipisahkan titik dua yang berisi program:

```
[user@host ~]$ echo $PATH
/home/user/.local/bin:/home/user/bin:/usr/share/Modules/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
```
Saat Anda menjalankan perintah seperti ls , shell mencari file yang dapat dieksekusi ls di setiap direktori tersebut secara berurutan, dan menjalankan file pertama yang cocok yang ditemukannya. (Pada sistem tipikal, ini adalah /usr/bin/ls.) Anda dapat dengan mudah menambahkan direktori tambahan di akhir file PATH. Misalnya, mungkin Anda memiliki program atau skrip yang dapat dijalankan yang ingin Anda jalankan seperti perintah biasa di /home/user/sbin. Anda dapat menambahkan /home/user/sbindi akhir PATH sesi saat ini seperti ini:

```
[user@host ~]$ export PATH=${PATH}:/home/user/sbin
```
Untuk membuat daftar semua variabel lingkungan untuk shell tertentu, jalankan perintah env :

```
[user@host ~]$ env
```
Variabel EDITOR lingkungan menentukan program yang ingin Anda gunakan sebagai editor teks default untuk program baris perintah. Banyak program menggunakan vi atau vim jika tidak ditentukan, namun Anda dapat mengesampingkan preferensi ini jika diperlukan:

```
[user@host ~]$ export EDITOR=nano
```
Berdasarkan konvensi, variabel lingkungan dan variabel shell yang secara otomatis ditetapkan oleh shell memiliki nama yang menggunakan semua karakter huruf besar. Jika Anda menyetel variabel sendiri, Anda mungkin ingin menggunakan nama yang terdiri dari karakter huruf kecil untuk membantu menghindari tabrakan penamaan.

**Mengatur Variabel Secara Otomatis**

Untuk mengatur variabel shell atau lingkungan secara otomatis saat shell dimulai, Anda bisa mengedit skrip startup Bash. Bash akan menjalankan beberapa file teks saat dimulai, tergantung pada jenis shell yang digunakan, apakah itu shell login interaktif, shell non-login interaktif, atau skrip shell.

Secara umum, jika Anda ingin membuat perubahan yang memengaruhi semua perintah shell interaktif saat startup, Anda bisa mengedit file ~/.bashrc di direktori home pengguna Anda. Misalnya, Anda bisa menyetel editor default dengan mengedit file tersebut.

Cara terbaik untuk menyesuaikan pengaturan yang mempengaruhi semua akun pengguna adalah dengan menambahkan file dengan nama akhiran yang .sh berisi perubahan ke /etc/profile.ddirektori. Untuk melakukan ini, Anda harus masuk sebagai root pengguna. Untuk menghapus dan mengekspor seluruh variabel, gunakan perintah unset :

```
[user@host ~]$ echo $file1
/tmp/tmp.z9pXW0HqcC
[user@host ~]$ unset file1
[user@host ~]$ echo $file1
```
Untuk membatalkan ekspor variabel tanpa menghapus pengaturannya, gunakan perintah ekspor -n :

```
[user@host ~]$ export -n PS1
```

Anda dapat mempraktikan materi ini untuk menambah wawasan serta pemahaman anda.