Bab 1. Tutorial GNU/Linux

# Bab 1. Tutorial GNU/Linux

Saya rasa belajar sistem komputer seperti belajar bahasa asing baru. Meskipun buku dan dokumentasi tutorial sangat membantu, Anda harus mempraktikkannya sendiri. Untuk membantu Anda memulai dengan lancar, saya menguraikan beberapa hal mendasar.

Desain kuat dari Debian GNU/Linux berasal dari sistem operasi Unix, yaitu, suatu sistem operasi yang multiuser, multitasking. Anda harus belajar untuk mengambil keuntungan dari kekuatan fitur-fitur ini dan kemiripan antara Unix dan GNU/Linux.

Jangan menghindar dari teks yang berorientasi Unix dan jangan hanya mengandalkan teks GNU/Linux, karena ini merampas banyak informasi berguna.

| Catatan
Jika Anda telah menggunakan salah satu sistem mirip Unix untuk sementara waktu dengan baris perintah, Anda mungkin tahu segala sesuatu yang saya jelaskan di sini. Harap gunakan ini sebagai uji realita dan penyegaran.

## 1.1. Dasar-dasar konsol

### 1.1.1. Prompt shell

Saat memulai sistem, Anda disajikan layar login berbasis karakter bila Anda tidak memasang lingkungan GUI seperti misalnya sistem desktop GNOME atau KDE. Misalnya nama host Anda adalah `foo`, sapaan login tampak sebagai berikut.

Bila Anda memasang suatu lingkungan GUI , maka Anda masih dapat menuju ke sapaan login berbasis karakter dengan Ctrl-Alt-F3, dan Anda dapat kembali ke lingkungan GUI melalui Ctrl-Alt-F2 (lihat Bagian 1.1.6, “Konsol virtual” di bawah untuk lebih lanjut).

    foo login:

Pada sapaan login, Anda mengetikkan nama pengguna Anda, mis. `penguin`, dan menekan tombol Enter, lalu ketikkan kata sandi Anda dan tekan tombol Enter lagi.

| Catatan
Mengikuti tradisi Unix, nama pengguna dan kata sandi sistem Debian membedakan huruf besar kecil. Nama pengguna biasanya dipilih hanya dari huruf kecil. Akun pengguna pertama biasanya dibuat saat instalasi. Akun pengguna tambahan dapat dibuat dengan adduser(8) oleh root.

Sistem mengawali dengan pesan sapaan yang disimpan dalam "`/etc/motd`" (Message Of The Day, Pesan Hari Ini) dan menyajikan suatu sapaan perintah.

    Debian GNU/Linux 12 foo tty3

    foo login: penguin
    Password:

    Linux foo 6.5.0-0.deb12.4-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.5.10-1~bpo12+1 (2023-11-23) x86_64

    The programs included with the Debian GNU/Linux system are free software;
    the exact distribution terms for each program are described in the
    individual files in /usr/share/doc/*/copyright.

    Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
    permitted by applicable law.

    Last login: Wed Dec 20 09:39:00 JST 2023 on tty3
    foo:~$

Sekarang Anda berada di shell. Shell menafsirkan perintah-perintah Anda.

### 1.1.2. Prompt shell di bawah GUI

Jika Anda menginstall lingkungan GUI selama instalasi, Anda akan disajikan dengan layar login grafis saat memulai sistem Anda. Anda mengetikkan nama pengguna dan kata sandi Anda untuk log masuk ke akun pengguna biasa. Gunakan tab untuk menavigasi antara nama pengguna dan kata sandi, atau gunakan klik primer tetikus.

Anda bisa mendapatkan prompt shell di bawah lingkungan GUI dengan memulai program `x-terminal-emulator` seperti gnome-terminal(1), rxvt(1), atau xterm(1). Di bawah lingkungan Desktop GNOME, menekan tombol SUPER (tombol Windows) dan mengetikkan "terminal" ke prompt pencarian akan melakukan itu.

Di bawah beberapa sistem Desktop lain (seperti `fluxbox`), mungkin ada titik awal yang jelas untuk menu. Jika ini terjadi, cobalah mengklik (kanan) latar belakang layar desktop dan berharap untuk munculnya suatu menu.

### 1.1.3. Akun root

Akun root juga disebut superuser atau pengguna istimewa. Dari akun ini, Anda dapat melakukan tugas-tugas administrasi sistem berikut.

- Baca, tulis, dan hapus berkas apapun di sistem terlepas dari hak akses berkas mereka

- Setel kepemilikan berkas dan hak akses berkas apapun pada sistem

- Tetapkan kata sandi pengguna non-istimewa di sistem

- Login ke akun manapun tanpa kata sandi mereka

Kekuatan akun root tak terbatas ini mengharuskan Anda untuk mempertimbangkan dan bertanggung jawab saat menggunakannya.

| Awas
Jangan pernah berbagi kata sandi root dengan orang lain.

| Catatan

Izin dalam sebuah berkas (termasuk perangkat keras seperti dll. CD-ROM yang sekedar suatu berkas lain untuk sistem Debian) dapat membuatnya tidak dapat digunakan atau tidak dapat diakses oleh pengguna non-root. Meskipun penggunaan akun root adalah cara cepat untuk menguji situasi semacam ini, resolusi harus dilakukan melalui pengaturan hak akses berkas dan keanggotaan grup pengguna yang tepat (Lihat Bagian 1.2.3, “Hak akses sistem berkas”).

### 1.1.4. Prompt shell root

Berikut adalah beberapa metode dasar untuk mendapatkan prompt shell root dengan menggunakan kata sandi root.

- Ketikkan `root` pada prompt login mode teks.

- Ketik "`su -l`" dari sebarang prompt shell pengguna.

  - Ini tidak mempertahankan lingkungan pengguna saat ini.

- Ketik "`su`" dari sebarang prompt shell pengguna.

  - Ini mempertahankan sebagian lingkungan pengguna saat ini.

### 1.1.5. Alat administrasi sistem GUI

Ketika menu desktop Anda tidak memulai alat administrasi sistem GUI secara otomatis dengan hak istimewa yang sesuai, Anda dapat memulai mereka dari prompt shell root dari emulator terminal, seperti gnome-terminal(1), rxvt(1), atau xterm(1). Lihat Bagian 1.1.4, “Prompt shell root” dan Bagian 7.9, “Sambungan server X”.

| Awas
Jangan pernah memulai pengelola tampilan/sesi GUI di bawah akun root dengan mengetikkan `root` ke prompt manajer tampilan seperti gdm3(1). Jangan pernah menjalankan program GUI remote tidak terpercaya di bawah X Window ketika informasi penting ditampilkan karena itu dapat menguping X layar Anda.

### 1.1.6. Konsol virtual

Dalam sistem Debian default, ada enam konsol mode teks mirip VT100 yang dapat ditukar, tersedia untuk memulai shell perintah langsung pada host Linux. Kecuali Anda berada di lingkungan GUI, Anda dapat beralih antara konsol virtual dengan menekan `tombol Alt kiri` dan salah satu tombol `F1`-`F6` secara bersamaan. Setiap konsol mode teks memungkinkan login yang independen ke akun dan menawarkan lingkungan multiuser. Lingkungan multiuser ini adalah fitur Unix yang hebat, dan sangat adiktif.

Jika Anda berada dalam lingkungan GUI, Anda mendapatkan akses ke konsol mode teks 3 dengan menekan tombol `Ctrl-Alt-F3`, yaitu `tombol Ctrl kiri`, `tombol Alt kiri`, dan `tombol F3` ditekan bersamaan. Anda dapat bisa kembali ke lingkungan GUI, biasanya berjalan pada konsol virtual 2, dengan menekan `Alt-F2`.

Anda juga dapat berpindah ke konsol virtual lain, mis. ke konsol 3, dari baris perintah.

    # chvt 3

### 1.1.7. Cara meninggalkan command prompt

Anda mengetik `Ctrl-D`, yaitu `tombol Ctrl kiri` dan `tombol d` ditekan bersama-sama, pada prompt perintah untuk menutup kegiatan shell. Jika Anda berada pada konsol mode teks, Anda kembali ke prompt login dengan ini. Meskipun karakter kontrol ini disebut sebagai "kontrol D" dengan huruf besar, Anda tidak perlu menekan tombol Shift. Ekspresi singkat, `^D`, juga digunakan untuk `Ctrl-D`. Sebagai alternatif, Anda dapat mengetikkan "exit".

Jika Anda di x-terminal-emulator(1), Anda bisa menutup jendela `x-terminal-emulator` dengan ini.

### 1.1.8. Bagaimana mematikan sistem

Sama seperti OS moden lain manapun dimana operasi berkas melibatkan penyinggahan data dalam memori untuk peningkatan kinerja, sistem Debian memerlukan prosedur shutdown yang tepat sebelum daya aman dimatikan. Ini adalah untuk mempertahankan integritas berkas, dengan memaksa semua perubahan dalam memori harus ditulis ke disk. Jika perangkat lunak kendali daya tersedia, prosedur shutdown secara otomatis mematikan daya sistem. (Jika tidak, Anda mungkin harus menekan tombol power selama beberapa detik setelah prosedur shutdown.)

Anda bisa mematikan sistem di bawah mode multi user normal dari command line.

    # shutdown -h now

Anda bisa mematikan sistem di bawah mode single-user dari commandline.

    # poweroff -i -f

Lihat Bagian 6.3.8, “Cara mematikan sistem jarak jauh di SSH”.

### 1.1.9. Memulihkan suatu konsol yang waras

Ketika layar mengamuk setelah melakukan beberapa hal lucu seperti "`cat suatu-berkas-biner`", ketikkan "`reset`" pada prompt perintah. Anda mungkin tidak dapat melihat perintah dipantulkan saat Anda mengetik. Anda dapat juga memerintahkan "`clear`" untuk membersihkan layar.

### 1.1.10. Saran paket tambahan untuk newbie

Meskipun instalasi minimal sistem Debian tanpa task lingkungan desktop apa pun telah menyediakan fungsionalitas dasar Unix, ide yang baik untuk menginstall beberapa perintah tambahan dan paket terminal karakter berbasis curses seperti `mc` dan `vim` dengan apt-get(8) bagi pemula untuk mengawali dengan yang berikut ini.

    # apt-get update
     ...
    # apt-get install mc vim sudo aptitude
     ...

Jika Anda sudah menginstall paket ini, tidak ada paket baru yang diinstal.

Tabel 1.1. Daftar paket program mode teks yang menarik

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`mc` | V:41, I:182 | 1590 | Manajer berkas layar penuh mode teks
`sudo` | V:750, I:866 | 6774 | Sebuah program untuk mengizinkan hak istimewa root terbatas kepada pengguna
`vim` | V:85, I:347 | 4135 | Editor teks Unix Vi IMproved, editor teks pemrogram (versi standar)
`vim-tiny` | V:57, I:979 | 1862 | Editor teks Unix, Vi IMproved, editor teks programmer (versi ringkas)
`emacs-nox` | V:3, I:13 | 46564 | Proyek GNU Emacs, penyunting teks yang dapat diperluas berbasis Lisp
`w3m` | V:11, I:137 | 2853 | Peramban WWW mode teks
`gpm` | V:8.7, I:9.5 | 524 | Potong dan tempel gaya Unix pada konsol mode teks (daemon)

Mungkin ada baiknya membaca beberapa dokumentasi informatif.

Tabel 1.2. Daftar paket dokumentasi informatif

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`doc-debian` | I:883 | 185 | Dokumentasi Proyek Debian, (FAQ Debian) dan dokumen lainnya
`debian-policy` | I:7.4 | 5147 | Manual Kebijakan Debian dan dokumen terkait
`developers-reference` | V:0.2, I:2.4 | 2635 | Panduan dan informasi untuk pengembang Debian
`debmake-doc` | I:0.37 | 11807 | Panduan untuk Pengelola Debian
`debian-history` | I:0.52 | 6251 | Sejarah Proyek Debian
`debian-faq` | I:881 | 791 | FAQ Debian

Anda dapat menginstall beberapa paket berikut ini.

    # apt-get install package_name

### 1.1.11. Akun pengguna tambahan

Jika Anda tidak ingin menggunakan akun pengguna utama untuk kegiatan pelatihan berikut, Anda dapat membuat akun pengguna pelatihan, misalnya `fish` dengan cara berikut.

    # adduser fish

Jawablah semua pertanyaan.

Ini membuat akun baru bernama `fish`. Setelah latihan Anda, Anda dapat menghapus akun pengguna ini dan direktori home-nya dengan cara berikut.

    # deluser --remove-home fish

Pada sistem Debian terspesialisasi dan non-Debian, kegiatan di atas perlu menggunakan utilitas level bawah useradd(8) dan userdel(8).

### 1.1.12. konfigurasi sudo

Untuk workstation pengguna tunggal biasa seperti sistem Debian desktop pada PC laptop, biasanya menggunakan konfigurasi sederhana sudo(8) sebagai berikut untuk membiarkan pengguna yang tidak memiliki hak istimewa, mis. `penguin`, untuk mendapatkan hak administratif hanya dengan kata sandi penggunanya tetapi tanpa kata sandi root.

    # echo "penguin  ALL=(ALL) ALL" >> /etc/sudoers

Sebagai alternatif, juga biasa dilakukan sebagai berikut untuk membiarkan pengguna biasa, mis. `penguin`, untuk mendapatkan hak administratif tanpa kata sandi.

    # echo "penguin  ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

Trik ini hanya boleh digunakan untuk workstation pengguna tunggal yang Anda kelola dan di mana Anda adalah satu-satunya pengguna.

| Awas
Jangan membuat akun pengguna biasa di workstation multiuser seperti ini karena akan sangat buruk bagi keamanan sistem.

| Perhatian

Kata sandi dan akun `penguin` dalam contoh di atas membutuhkan perlindungan seperti kata sandi root dan akun root.

Hak administratif dalam konteks ini adalah milik seseorang yang berwenang untuk melakukan tugas administrasi sistem pada workstation. Jangan pernah memberikan hak semacam itu kepada manajer di departemen Admin di perusahaan Anda atau bos Anda, kecuali mereka memiliki wewenang dan kemampuan.

| Catatan

Untuk memberikan hak akses ke perangkat terbatas dan berkas terbatas, Anda mesti mempertimbangkan untuk menggunakan group untuk memberikan akses terbatas daripada menggunakan hak istimewa `root` melalui sudo(8) .

Dengan konfigurasi yang lebih bijaksana dan hati-hati, sudo(8) dapat memberikan hak administratif terbatas kepada pengguna lain pada sistem bersama tanpa membagikan kata sandi root. Ini dapat membantu akuntabilitas dengan host dengan banyak administrator sehingga Anda dapat mengetahui siapa yang melakukan apa. Di sisi lain, Anda mungkin tidak ingin orang lain memiliki hak istimewa seperti itu.

### 1.1.13. Waktu bermain

Sekarang Anda siap untuk bermain dengan sistem Debian tanpa risiko selama Anda menggunakan akun pengguna yang tidak memiliki hak istimewa.

Ini karena sistem Debian, bahkan setelah instalasi baku, dikonfigurasi dengan izin berkas yang tepat yang mencegah pengguna yang tidak memiliki hak istimewa merusak sistem. Tentu saja, mungkin masih ada beberapa lubang yang dapat dieksploitasi tetapi mereka yang khawatir tentang masalah ini tidak boleh membaca bagian ini tetapi harus membaca Manual Mengamankan Debian.

Kami mempelajari sistem Debian sebagai sebuah sistem mirip Unix dengan yang berikut ini.

- Bagian 1.2, “Sistem berkas mirip Unix” (konsep dasar)

- Bagian 1.3, “Midnight Commander (MC)” (metode survival)

- Bagian 1.4, “Lingkungan kerja dasar mirip Unix” (metode dasar)

- Bagian 1.5, “Perintah shell sederhana” (mekanisme shell)

- Bagian 1.6, “Pemrosesan teks mirip Unix” (metode pengolahan teks)

## 1.2. Sistem berkas mirip Unix

Di GNU/Linux dan sistem operasi mirip Unix lainnya, berkas diatur ke dalam direktori. Semua berkas dan direktori diatur dalam satu pohon besar yang berakar pada "`/`". Disebut pohon karena jika Anda menggambar sistem berkas, itu terlihat seperti pohon tetapi terbalik.

Berkas dan direktori ini dapat tersebar di beberapa perangkat. mount(8) berfungsi untuk mencantolkan sistem berkas yang ditemukan pada beberapa perangkat ke pohon berkas besar. Sebaliknya, umount(8) melepaskannya lagi. Pada kernel Linux terbaru, mount(8) dengan beberapa opsi dapat mengikat bagian dari pohon berkas di tempat lain atau dapat mengait sistem berkas sebagai shared, private, slave, atau unbindable. Opsi pemasangan yang didukung untuk setiap sistem berkas tersedia di "`/usr/share/doc/linux-doc-*/Documentation/filesystems/`".

Direktori pada sistem Unix disebut folder pada beberapa sistem lain. Harap perhatikan juga bahwa tidak ada konsep untuk drive seperti "`A:`" pada sistem Unix mana pun. Ada satu sistem berkas, dan semuanya disertakan. Ini adalah keuntungan besar dibandingkan dengan Windows.

### 1.2.1. Dasar-dasar berkas Unix

Berikut adalah beberapa dasar berkas Unix.

- Nama berkas peka huruf besar/kecil. Artinya, "`MYFILE`" dan "`MyFile`" adalah berkas yang berbeda.

- Direktori root berarti akar dari sistem berkas yang disebut sebagai "`/`". Jangan bingung dengan direktori home untuk pengguna root: "`/root`".

- Setiap direktori memiliki nama yang dapat berisi huruf atau simbol kecuali "`/`". Direktori root adalah pengecualian; namanya adalah "`/`" (diucapkan "slash" atau "direktori root") dan tidak dapat diganti namanya.

- Setiap berkas atau direktori ditunjuk oleh fully-qualified filename, nama berkas absolut, atau path, memberikan urutan direktori yang harus dilalui untuk mencapainya. Ketiga istilah tersebut sinonim.

- Semua fully-qualified filenames dimulai dengan direktori "`/`", dan ada "`/`" di antara setiap direktori atau berkas dalam nama berkas. "`/`" pertama adalah direktori tingkat puncak, dan subdirektori terpisah "`/`" lainnya, sampai kita mencapai entri terakhir yang merupakan nama berkas sebenarnya. Kata-kata yang digunakan di sini bisa membingungkan. Ambil fully-qualified filenames berikut sebagai contoh: "`/usr/share/keytables/us.map.gz`". Namun, orang juga merujuk ke nama dasarnya "`us.map.gz`" saja sebagai nama berkas.

- Direktori root memiliki sejumlah cabang, seperti "`/etc/`" dan "`/usr/`". Subdirektori ini pada gilirannya bercabang menjadi lebih banyak subdirektori, seperti "`/etc/systemd/`" dan "`/usr/local/`". Semua itu dilihat secara kolektif disebut sebagai pohon direktori. Anda dapat menganggap nama berkas absolut sebagai rute dari dasar pohon ("`/`") ke akhir beberapa cabang (berkas). Anda juga mendengar orang berbicara tentang pohon direktori seolah-olah itu adalah pohon keluarga yang mencakup semua keturunan langsung dari satu figur yang disebut direktori root ("`/`"): jadi subdirektori memiliki induk, dan sebuah path menunjukkan keturunan lengkap dari sebuah berkas. Ada juga jalur relatif yang dimulai di suatu tempat selain direktori root. Anda harus ingat bahwa direktori "`../`" merujuk ke direktori induk. Terminologi ini juga berlaku untuk direktori lain seperti struktur, seperti struktur data hierarkis.

- Tidak ada komponen nama path direktori khusus yang sesuai dengan perangkat fisik, seperti hard disk Anda. Ini berbeda dari RT-11, CP/M, OpenVMS, MS-DOS, AmigaOS, dan Microsoft Windows, dengan path berisi nama perangkat seperti "`C:\`". (Namun, entri direktori memang ada yang merujuk ke perangkat fisik sebagai bagian dari sistem berkas normal. Lihat Bagian 1.2.2, “Internal sistem berkas”.)

| Catatan

Meskipun Anda dapat menggunakan hampir semua huruf atau simbol dalam nama berkas, dalam praktiknya adalah ide yang buruk untuk melakukannya. Sebaiknya hindari karakter yang sering memiliki arti khusus pada baris perintah, termasuk spasi, tab, baris baru, dan karakter khusus lainnya: `{ } ( ) [ ] ' ` " \ / > < | ; ! # & ^ * % @ $` . Jika Anda ingin memisahkan kata dalam sebuah nama, pilihan yang baik adalah titik, tanda hubung, dan garis bawah. Anda juga dapat menggunakan huruf besar untuk setiap kata, "`SepertiIni`". Pengguna Linux yang berpengalaman cenderung menghindari spasi dalam nama berkas.

| Catatan
Kata "root" dapat berarti "pengguna root" atau "direktori root". Konteks penggunaannya harus membuatnya jelas.

| Catatan
Kata path digunakan tidak hanya untuk nama berkas lengkap seperti di atas tetapi juga untuk path pencarian perintah. Makna yang dimaksud biasanya jelas dari konteksnya.

Praktik terbaik terperinci untuk hierarki berkas dijelaskan dalam Standar Hierarki Sistem Berkas/Filesystem Hierarchy Standard ("`/usr/share/doc/debian-policy/fhs/fhs-2.3.txt.gz`" dan hier(7)). Anda harus mengingat fakta-fakta berikut di awal.

Tabel 1.3. Daftar penggunaan direktori kunci

direktori | penggunaan direktori
--- | ---
`/` | direktori root
`/etc/` | berkas konfigurasi seluruh sistem
`/var/log/` | berkas log sistem
`/home/` | semua direktori rumah bagi semua pengguna tanpa hak istimewa

### 1.2.2. Internal sistem berkas

Mengikuti tradisi Unix, sistem GNU/Linux Debian menyediakan sistem berkas di mana data fisik pada hard disk dan perangkat penyimpanan lainnya berada, dan interaksi dengan perangkat keras seperti layar konsol dan konsol serial jarak jauh diwakili secara terpadu di bawah "`/dev/`".

Setiap berkas, direktori, pipa bernama (cara dua program dapat berbagi data), atau perangkat fisik pada sistem Debian GNU/Linux memiliki struktur data yang disebut inode yang menjelaskan atribut terkait seperti pengguna yang memilikinya (pemilik), grup yang diikutinya, waktu terakhir diakses, dll. Gagasan untuk mewakili hampir semua hal dalam sistem berkas adalah inovasi Unix, dan kernel Linux modern telah mengembangkan gagasan ini lebih jauh. Sekarang, bahkan informasi tentang proses yang berjalan di komputer dapat ditemukan di sistem berkas.

Representasi abstrak dan kesatuan entitas fisik dan proses internal ini sangat kuat karena ini memungkinkan kita untuk menggunakan perintah yang sama untuk jenis operasi yang sama pada banyak perangkat yang sama sekali berbeda. Bahkan dimungkinkan untuk mengubah cara kerja kernel dengan menulis data ke berkas khusus yang terkait dengan proses yang berjalan.

| Tip
Jika Anda perlu mengidentifikasi korespondensi antara pohon berkas dan entitas fisik, jalankan mount(8) tanpa argumen.

### 1.2.3. Hak akses sistem berkas

Izin sistem berkas dari sistem seperti Unix ditentukan untuk tiga kategori pengguna yang terpengaruh.

- pengguna yang memiliki berkas (u)

- Pengguna lain di grup tempat berkas tersebut termasuk (g)

- Semua pengguna lainnya (o) juga disebut sebagai "dunia" dan "semua orang"

Untuk berkas tersebut, setiap izin yang sesuai memungkinkan tindakan berikut.

- Izin baca (r) memungkinkan pemilik untuk memeriksa konten berkas.

- Izin tulis (w) memungkinkan pemilik untuk memodifikasi berkas.

- Izin eksekusi (x) memungkinkan pemilik untuk menjalankan berkas sebagai perintah.

Untuk direktori, setiap izin yang sesuai memungkinkan tindakan berikut.

- Izin baca (r) memungkinkan pemilik untuk membuat daftar isi direktori.

- Izin tulis (w) memungkinkan pemilik untuk menambah atau menghapus berkas dalam direktori.

- Izin eksekusi (x) memungkinkan pemilik untuk mengakses berkas dalam direktori.

Di sini, izin eksekusi pada direktori berarti tidak hanya mengizinkan pembacaan berkas di direktori itu tetapi juga untuk memungkinkan melihat atribut mereka, seperti ukuran dan waktu modifikasi.

ls(1) digunakan untuk menampilkan informasi izin (dan lebih banyak lagi) untuk berkas dan direktori. Ketika dipanggil dengan opsi "`-l`", ini menampilkan informasi berikut dalam urutan yang diberikan.

- Tipe berkas (karakter pertama)

- Izin akses berkas (sembilan karakter, masing-masing terdiri dari tiga karakter untuk pengguna, grup, dan lainnya dalam urutan ini)

- Banyaknya hard link ke berkas

- Nama dari pengguna yang memiliki berkas tersebut

- Nama dari grup pemilik berkas tersebut

- Ukuran berkas dalam karakter (byte)

- Tanggal dan waktu berkas (mtime)

- Nama berkas

Tabel 1.4. Daftar karakter pertama dari keluaran "`ls -l`"

karakter | arti
--- | ---
`-` | berkas biasa
`d` | direktori
`l` | symlink
`c` | simpul perangkat karakter
`b` | simpul perangkat blok
`p` | pipa bernama
`s` | soket

chown(1) digunakan dari akun root untuk mengubah pemilik berkas. chgrp(1) digunakan dari pemilik berkas atau akun root untuk mengubah grup berkas. chmod(1) digunakan dari pemilik berkas atau akun root untuk mengubah izin akses berkas dan direktori. Sintaks dasar untuk memanipulasi berkas `foo` adalah sebagai berikut.

    # chown newowner foo
    # chgrp newgroup foo
    # chmod  [ugoa][+-=][rwxXst][,...] foo

Misalnya, Anda dapat membuat pohon direktori agar dimiliki oleh pengguna `foo` dan dipakai bersama oleh grup `bar` dengan cara berikut ini.

    # cd /some/location/
    # chown -R foo:bar .
    # chmod -R ug+rwX,o=rX .

Ada tiga bit izin khusus lagi.

- Bit set user ID (s atau S alih-alih x pengguna)

- Bit set group ID (s atau S alih-alih x grup)

- Bit sticky (t atau T alih-alih x lainnya)

Di sini keluaran dari "`ls -l`" untuk bit ini adalah dalam kapital jika bit eksekusi yang disembunyikan oleh keluaran ini tak ditata.

Menyetel set ID pengguna pada berkas executable memungkinkan pengguna untuk menjalankan berkas executable dengan ID pemilik berkas (misalnya root). Demikian pula, pengaturan set ID grup pada berkas executable memungkinkan pengguna untuk menjalankan berkas executable dengan ID grup berkas (misalnya root). Karena pengaturan ini dapat menyebabkan risiko keamanan, mengaktifkannya memerlukan kehati-hatian ekstra.

Mengatur set ID grup pada direktori akan mengaktifkan skema pembuatan berkas seperti BSD di mana semua berkas yang dibuat dalam direktori menjadi milik grup dari direktori.

Menyetel sticky bit pada direktori mencegah berkas dalam direktori dihapus oleh pengguna yang bukan pemilik berkas. Untuk mengamankan konten berkas di direktori yang dapat ditulis dunia seperti "`/tmp`" atau dalam direktori yang dapat ditulis grup, seseorang tidak hanya harus mengatur ulang izin tulis untuk berkas tersebut, tetapi juga mengatur sticky bit pada direktori. Jika tidak, berkas dapat dihapus dan berkas baru dapat dibuat dengan nama yang sama oleh setiap pengguna yang memiliki akses tulis ke direktori.

Berikut adalah beberapa contoh menarik dari izin berkas.

    $ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/exim4
    crw------T 1 root root   108, 0 Oct 16 20:57 /dev/ppp
    -rw-r--r-- 1 root root     2761 Aug 30 10:38 /etc/passwd
    -rw-r----- 1 root shadow   1695 Aug 30 10:38 /etc/shadow
    -rwsr-xr-x 1 root root   973824 Sep 23 20:04 /usr/sbin/exim4
    $ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src
    drwxrwxrwt 14 root root  20480 Oct 16 21:25 /tmp
    drwxrwsr-x 10 root staff  4096 Sep 29 22:50 /usr/local
    drwxr-xr-x 10 root root   4096 Oct 11 00:28 /usr/src
    drwxrwsr-x  2 root mail   4096 Oct 15 21:40 /var/mail
    drwxrwxrwt  3 root root   4096 Oct 16 21:20 /var/tmp

Ada mode numerik alternatif untuk menjelaskan izin berkas dengan chmod(1). Mode numerik ini menggunakan 3 hingga 4 digit angka oktal lebar (radix = 8).

Tabel 1.5. Mode numerik untuk izin berkas dalam perintah chmod(1)

nomor | arti
--- | ---
digit opsional pertama | jumlahdari set ID pengguna (=4), set ID grup (=2), dan sticky bit (=1)
angka ke-2 | jumlah dari izin baca (=4), tulis (=2), dan eksekusi (=1) untuk pengguna
angka ke-3 | begitu juga untuk grup
angka ke-4 | begitu juga untuk lainnya

Ini terdengar rumit tetapi sebenarnya cukup sederhana. Jika Anda melihat beberapa (2-10) kolom pertama dari keluaran perintah "`ls -l`" dan membacanya sebagai representasi biner (basis=2) dari izin berkas ("-" menjadi "0" dan "rwx" menjadi "1"), 3 digit terakhir dari nilai mode numerik harus masuk akal sebagai representasi oktal (basis=8) dari izin berkas bagi Anda.

Misalnya, coba yang berikut ini

    $ touch foo bar
    $ chmod u=rw,go=r foo
    $ chmod 644 bar
    $ ls -l foo bar
    -rw-r--r-- 1 penguin penguin 0 Oct 16 21:39 bar
    -rw-r--r-- 1 penguin penguin 0 Oct 16 21:35 foo

| Tip
Jika Anda perlu mengakses informasi yang ditampilkan oleh "`ls -l`" dalam skrip shell, Anda harus menggunakan perintah terkait seperti test(1), `stat`(1 ), dan readlink(1). Bawaan shell seperti "`[`" atau "`test`" dapat digunakan juga.

### 1.2.4. Kontrol izin untuk berkas yang baru dibuat: umask

Izin apa yang diterapkan ke berkas atau direktori yang baru dibuat dibatasi oleh perintah bawaan shell `umask`. Lihat dasbd(1), bash(1), dan builtins(7).

     (file permissions) = (requested file permissions) & ~(umask value)

Tabel 1.6. Contoh-contoh nilai umask

umask | izin berkas dibuat | izin direktori dibuat | pengunaan
--- | --- | --- | ---
`0022` | `-rw-r--r--` | `-rwxr-xr-x` | hanya dapat ditulis oleh pengguna
`0002` | `-rw-rw-r--` | `-rwxrwxr-x` | dapat ditulis oleh grup

Sistem Debian menggunakan skema grup privat pengguna (user private group/UPG) sebagai bakunya. UPG dibuat setiap kali pengguna baru ditambahkan ke sistem. UPG memiliki nama yang sama dengan pengguna yang dibuat dan pengguna itu adalah satu-satunya anggota UPG. Skema UPG membuatnya aman untuk mengatur umask ke `0002` karena setiap pengguna memiliki grup pribadi mereka sendiri. (Dalam beberapa varian Unix, sangat umum untuk mengatur semua pengguna normal yang termasuk dalam satu grup `users` dan merupakan ide yang baik untuk mengatur umask ke `0022` untuk keamanan dalam kasus seperti itu.)

| Tip
Aktifkan UPG dengan meletakkan "`umask 002`" di berkas `~/.bashrc`.

### 1.2.5. Izin untuk grup pengguna (grup)

| Awas
Pastikan untuk menyimpan perubahan yang belum tersimpan sebelum melakukan reboot atau tindakan serupa.

Anda dapat menambahkan pengguna `penguin` ke grup `bird` dalam dua langkah:

- Ubah konfigurasi grup menggunakan salah satu dari yang berikut:

  - Jalankan "`sudo usermod -aG bird penguin`".

  - Jalankan "`sudo adduser penguin bird`". (hanya pada sistem Debian umum)

  - Jalankan "`sudo vigr`" bagi `/etc/group` dan "`sudo vigr -s`" bagi `/etc/gshadow` untuk mengimbuhkan `penguin` dalam baris bagi `bird`.

- Terapkan konfigurasi menggunakan salah satu yang berikut:

  - Boot ulang cold (matikan daya lalu nyalakan lagi) dan log masuk. (Pilihan terbaik)

  - Log keluar melalui menu GUI dan log masuk. (Ini mungkin tidak berjalan di bawah lingkungan Desktop modern.)

Anda dapat menghapus pengguna `penguin` dari grup `bird` dalam dua langkah:

- Ubah konfigurasi grup menggunakan salah satu dari yang berikut:

  - Jalankan "`sudo usermod -rG bird penguin`".

  - Jalankan "`sudo deluser penguin bird`". (hanya pada sistem Debian umum)

  - Jalankan "`sudo vigr`" bagi `/etc/group` dan "`sudo vigr -s`" bagi `/etc/gshadow` untuk membuang `penguin` dalam baris bagi `bird`.

- Terapkan konfigurasi menggunakan salah satu yang berikut:

  - Boot ulang cold (matikan daya lalu nyalakan lagi) dan log masuk. (Pilihan terbaik)

  - Jalankan "`kill -TERM -1`" dan lakukan beberapa tindakan perbaikan seperti "`systemctl restart NetworkManager.service`".

  - Log keluar melalui menu GUI bukanlah suatu opsi bagi Desktop Gnome.

Sebarang upaya boot ulang warm adalah pengganti yang rentan dari boot ulang cold di bawah sistem desktop modern.

| Catatan
Atau, Anda dapat secara dinamis menambahkan pengguna ke grup selama proses otentikasi dengan menambahkan baris "`auth optional pam_group.so`" ke "`/etc/pam.d/common-auth`" dan pengaturan "`/etc/security/group.conf`". (Lihat Bab 4, Kontrol akses dan autentikasi.)

Perangkat keras hanyalah jenis berkas lain pada sistem Debian. Jika Anda mengalami masalah dalam mengakses perangkat seperti USB flash drive dan CD-ROM dari akun pengguna, Anda harus menjadikan pengguna tersebut anggota grup yang relevan.

Beberapa grup terkenal yang disediakan sistem mengizinkan anggotanya mengakses berkas dan perangkat tertentu tanpa hak istimewa `root`.

Tabel 1.7. Daftar grup yang disediakan sistem terkenal untuk akses berkas

kelompok | deskripsi untuk berkas dan perangkat yang dapat diakses
--- | ---
`dialout` | akses penuh dan langsung ke port serial ("`/dev/ttyS[0-3]`")
`dip` | akses terbatas ke port serial untuk koneksi IP Dialup ke rekan tepercaya
`cdrom` | Drive CD-ROM, DVD+/-RW
`audio` | perangkat audio
`video` | perangkat video
`scanner` | pemindai
`adm` | log pemantauan sistem
`staff` | beberapa direktori untuk pekerjaan administratif junior: "`/usr/local`", "`/home`"

| Tip
Anda harus tergabung dalam grup `dialout` untuk mengkonfigurasi ulang modem, dial ke mana pun, dll. Tetapi jika `root` membuat berkas konfigurasi yang telah ditentukan sebelumnya untuk rekan tepercaya di "`/etc/ppp/peers/`", Anda hanya perlu menjadi bagian dari grup `dip` untuk membuat koneksi IP Dialup ke rekan tepercaya tersebut menggunakan perintah pppd(8), pon(1), dan poff(1).

Beberapa grup terkenal yang disediakan sistem mengizinkan anggotanya untuk menjalankan perintah tertentu tanpa hak istimewa `root`.

Tabel 1.8. Daftar grup penting yang disediakan untuk eksekusi perintah tertentu

kelompok | perintah yang dapat diakses
--- | ---
`sudo` | menjalankan sebarang perintah dengan hak superuser
`lpadmin` | menjalankan perintah untuk menambah, memodifikasi, dan menghapus printer dari database printer

Untuk daftar lengkap pengguna dan grup yang disediakan sistem, lihat versi terbaru dari dokumen "Pengguna dan Grup" di "`/usr/share/doc/base-passwd/users-and-groups.html`" yang disediakan oleh paket `base-passwd`.

Lihat passwd(5), group(5), shadow(5), newgrp(1), vipw(8), vigr(8), dan pam_group(8) untuk perintah manajemen pengguna dan sistem grup.

### 1.2.6. Stempel waktu

Ada tiga jenis stempel waktu untuk berkas GNU/Linux.

Tabel 1.9. Daftar jenis stempel waktu

jenis | artinya (definisi Unix historis)
--- | ---
mtime | waktu modifikasi berkas (`ls -l`)
ctime | waktu perubahan status berkas (`ls -lc`)
atime | waktu akses berkas terakhir (`ls -lu`)

| Catatan
ctime bukanlah waktu pembuatan berkas.

| Catatan
Nilai sebenarnya dari atime pada sistem GNU/Linux mungkin berbeda dari definisi Unix historis.

- Menimpa berkas mengubah semua atribut mtime, ctime, dan atime dari berkas.

- Mengubah kepemilikan atau izin berkas mengubah atribut ctime dan atime berkas.

- Membaca berkas mengubah atribut atime berkas pada sistem Unix bersejarah.

- Membaca berkas mengubah atribut atime berkas pada sistem GNU/Linux jika sistem berkasnya dikait dengan "`strictatime`".

- Membaca berkas untuk pertama kalinya atau setelah satu hari mengubah atribut atime berkas pada sistem GNU/Linux jika sistem berkasnya dikait dengan "`"relatime`". (perilaku baku sejak Linux 2.6.30)

- Membaca berkas tidak mengubah atribut atime berkas pada sistem GNU/Linux jika sistem berkasnya dikait dengan "`noatime`".

| Catatan
Opsi kait "`noatime`" dan "`relatime`" diperkenalkan untuk meningkatkan kinerja baca sistem berkas di bawah kasus penggunaan normal. Operasi baca berkas sederhana di bawah opsi "`strictatime`" menyertai operasi tulis yang memakan waktu untuk memperbarui atribut atime. Tetapi atribut atime jarang digunakan kecuali untuk berkas mbox(5). Lihat mount(8).

Gunakan perintah touch(1) untuk mengubah stempel waktu berkas yang ada.

Untuk stempel waktu, perintah `ls` menghasilkan string terlokalkan di bawah lokal non-Inggris ("`fr_FR.UTF-8`").

    $ LANG=C  ls -l foo
    -rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo
    $ LANG=en_US.UTF-8  ls -l foo
    -rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo
    $ LANG=fr_FR.UTF-8  ls -l foo
    -rw-rw-r-- 1 penguin penguin 0 oct. 16 21:35 foo

| Tip
Lihat Bagian 9.3.4, “Tampilan waktu dan tanggal yang disesuaikan” untuk menyesuaikan keluaran "`ls -l`".

### 1.2.7. Taut

Ada dua metode untuk menghubungkan berkas "`foo`" dengan nama berkas yang berbeda "`bar`".

- Hard link

  - Nama duplikat untuk berkas yang sudah ada

  - "`ln foo bar`"

- Tautan simbolik atau symlink

  - Berkas khusus yang menunjuk ke berkas lain berdasarkan nama

  - "`ln -s foo bar`"

Lihat contoh berikut untuk perubahan cacah tautan dan perbedaan halus dalam hasil perintah `rm`.

    $ umask 002
    $ echo "Original Content" > foo
    $ ls -li foo
    1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 foo
    $ ln foo bar     # hard link
    $ ln -s foo baz  # symlink
    $ ls -li foo bar baz
    1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 bar
    1450180 lrwxrwxrwx 1 penguin penguin  3 Oct 16 21:47 baz -> foo
    1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 foo
    $ rm foo
    $ echo "New Content" > foo
    $ ls -li foo bar baz
    1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 bar
    1450180 lrwxrwxrwx 1 penguin penguin  3 Oct 16 21:47 baz -> foo
    1450183 -rw-rw-r-- 1 penguin penguin 12 Oct 16 21:48 foo
    $ cat bar
    Original Content
    $ cat baz
    New Content

Hardlink dapat dibuat dalam sistem berkas yang sama dan memiliki nomor inode yang sama yang diungkap oleh opsi "`-i`" ls(1).

Symlink selalu memiliki izin akses berkas nominal "`rwxrwxrwx`", seperti yang ditunjukkan pada contoh di atas, dengan izin akses efektif ditentukan oleh izin berkas yang diacunya.

| Perhatian
Hal ini umumnya ide yang baik untuk tidak membuat taut simbolis yang rumit atau hardlink sama sekali kecuali Anda memiliki alasan yang sangat baik. Hal ini dapat menyebabkan mimpi buruk di mana kombinasi logis dari taut simbolis menghasilkan loop dalam sistem berkas.

| Catatan
Umumnya lebih baik untuk menggunakan taut simbolis daripada hardlink kecuali Anda memiliki alasan yang baik untuk menggunakan hardlink.

Direktori "`.`" menaut ke direktori tempat itu muncul, sehingga cacah taut dari setiap direktori baru dimulai pada 2. Direktori "`..`" menaut ke direktori induk, sehingga cacah taut dari direktori meningkat dengan penambahan subdirektori baru.

Jika Anda baru saja pindah ke Linux dari Windows, segera menjadi jelas seberapa baik dirancang penautan nama berkas Unix, dibandingkan dengan yang setara pada Windows terdekat yaitu "pintasan". Karena diimplementasikan dalam sistem berkas, aplikasi tidak dapat melihat perbedaan antara berkas yang ditautkan dan yang asli. Dalam kasus hardlink, benar-benar tidak ada perbedaan.

### 1.2.8. Pipa bernama (FIFO)

Suatu pipa bernama (named pipe) adalah berkas yang bertindak seperti pipa. Anda memasukkan sesuatu ke dalam berkas, dan itu keluar di ujung yang lain. Jadi itu disebut FIFO, atau First-In-First-Out: hal pertama yang Anda masukkan ke dalam pipa adalah hal pertama yang keluar dari ujung yang lain.

Jika Anda menulis ke pipa bernama, proses yang menulis ke pipa tidak berakhir sampai informasi yang ditulis dibaca dari pipa. Jika Anda membaca dari pipa bernama, proses membaca menunggu sampai tidak ada yang bisa dibaca sebelum mengakhiri. Ukuran pipa selalu nol --- itu tidak menyimpan data, itu hanya menghubungkan dua proses seperti fungsi yang ditawarkan oleh sintaks shell "`|`". Namun, karena pipa ini memiliki nama, kedua proses tidak harus berada di baris perintah yang sama atau bahkan dijalankan oleh pengguna yang sama. Pipa adalah inovasi Unix yang sangat berpengaruh.

Misalnya, coba yang berikut ini

    $ cd; mkfifo mypipe
    $ echo "hello" >mypipe & # put into background
    [1] 8022
    $ ls -l mypipe
    prw-rw-r-- 1 penguin penguin 0 Oct 16 21:49 mypipe
    $ cat mypipe
    hello
    [1]+  Done                    echo "hello" >mypipe
    $ ls mypipe
    mypipe
    $ rm mypipe

### 1.2.9. Soket

Soket digunakan secara luas oleh semua komunikasi Internet, basis data, dan sistem operasi itu sendiri. Hal ini mirip dengan pipa bernama (FIFO) dan memungkinkan proses untuk bertukar informasi bahkan antara komputer yang berbeda. Untuk soket, proses tersebut tidak perlu berjalan pada saat yang sama atau berjalan sebagai anak dari proses leluhur yang sama. Ini adalah titik akhir untuk komunikasi antar proses (inter process communication/IPC). Pertukaran informasi dapat terjadi melalui jaringan antara host yang berbeda. Dua yang paling umum adalah soket Internet dan soket domain Unix.

| Tip
"`ss -t -u -a`" (from the `iproute2` package) provides a very useful overview of sockets that are open on a given system.

### 1.2.10. Berkas perangkat

Berkas perangkat mengacu pada perangkat fisik atau virtual pada sistem Anda, seperti hard disk, kartu video, layar, atau papan ketik Anda. Contoh perangkat virtual adalah konsol, diwakili oleh "`/dev/console`".

Ada dua jenis berkas perangkat.

- Perangkat karakter

  - Mengakses satu karakter pada satu waktu

  - 1 karakter = 1 byte

  - Mis. perangkat papan ketik, port serial, …

- Perangkat blok

  - diakses dalam unit yang lebih besar yang disebut blok

  - 1 blok > 1 byte

  - Mis. hard disk, …

Anda dapat membaca dan menulis berkas perangkat, meskipun berkas mungkin berisi data biner yang mungkin tidak dapat dimengerti oleh manusia. Menulis data langsung ke berkas-berkas ini kadang-kadang berguna untuk pemecahan masalah koneksi perangkat keras. Misalnya, Anda dapat mencurahkan berkas teks ke perangkat pencetak "`/dev/lp0`" atau mengirim perintah modem ke port serial yang sesuai "`/dev/ttyS0`". Tapi, kecuali ini dilakukan dengan hati-hati, itu dapat menyebabkan bencana besar. Jadi berhati-hatilah.

| Catatan
Untuk akses normal ke pencetak, gunakan lp(1).

Nomor simpul perangkat ditampilkan dengan mengeksekusi ls(1) sebagai berikut.

    $ ls -l /dev/sda /dev/sr0 /dev/ttyS0 /dev/zero
    brw-rw---T  1 root disk     8,  0 Oct 16 20:57 /dev/sda
    brw-rw---T+ 1 root cdrom   11,  0 Oct 16 21:53 /dev/sr0
    crw-rw---T  1 root dialout  4, 64 Oct 16 20:57 /dev/ttyS0
    crw-rw-rw-  1 root root     1,  5 Oct 16 20:57 /dev/zero

- "`/dev/sda`" memiliki nomor perangkat mayor 8 dan nomor perangkat minor 0. Ini dapat dibaca/tulis oleh pengguna yang termasuk dalam grup `disk`.

- "`/dev/sr0`" memiliki nomor perangkat mayor 11 dan nomor perangkat minor 0. Ini dapat dibaca/tulis oleh pengguna yang tergabung dalam grup `cdrom`.

- "`/dev/ttyS0`" memiliki nomor perangkat mayor 4 dan nomor perangkat minor 64. Ini dapat dibaca/tulis oleh pengguna yang termasuk dalam grup `dialout`.

- "`/dev/zero`" memiliki nomor perangkat mayor 1 dan perangkat minor nomor 5. Ini dapat dibaca/ditulis oleh siapa saja.

Pada sistem Linux modern, sistem berkas di bawah "`/dev/`" secara otomatis dihuni oleh mekanisme udev(7).

### 1.2.11. Berkas perangkat khusus

Ada beberapa berkas perangkat khusus.

Tabel 1.10. Daftar berkas perangkat khusus

berkas perangkat | aksi | deskripsi respon
--- | --- | ---
`/dev/null` | baca | mengembalikan "karakter end-of-file (EOF)"
`/dev/null` | tulis | tidak mengembalikan apa-apa (lubang pembuangan data tanpa dasar)
`/dev/zero` | baca | mengembalikan "karakter `\0` (NUL)" (tidak sama dengan angka nol ASCII)
`/dev/random` | baca | mengembalikan karakter acak dari pembangkit angka acak sejati, memberikan entropi nyata (lambat)
`/dev/urandom` | baca | mengembalikan karakter acak dari pembangkit angka pseudorandom yang aman secara kriptografis
`/dev/full` | tulis | mengembalikan kesalahan disk-full (ENOSPC)

Ini sering digunakan bersamaan dengan pengalihan shell (lihat Bagian 1.5.8, “Urutan perintah umum dan pengalihan shell”).

### 1.2.12. procfs dan sysfs

procfs dan sysfs yang dipasang pada "`/proc`" dan "`/sys`" adalah pseudo-filesystem dan mengekspos struktur data internal kernel ke userspace. Dengan kata lain, entri ini bersifat virtual, yang berarti bahwa mereka bertindak sebagai jendela yang nyaman ke dalam pengoperasian sistem operasi.

Direktori "`/proc`" berisi (antara lain) satu subdirektori untuk setiap proses yang berjalan pada sistem, yang dinamai dengan id proses (PID). Utilitas sistem yang mengakses informasi proses, seperti ps(1), mendapatkan informasi mereka dari struktur direktori ini.

Direktori di bawah "`/proc/sys/`" berisi antarmuka untuk mengubah parameter kernel tertentu pada saat berjalan. (Anda dapat melakukan hal yang sama melalui perintah khusus sysctl(8) atau berkas preload/konfigurasinya "`/etc/sysctl.d/*.conf`".)

Orang sering panik ketika mereka melihat satu berkas khususnya - "`/proc/kcore`" - yang umumnya sangat besar. Ini (kurang lebih) salinan konten memori komputer Anda. Ini digunakan untuk men-debug kernel. Ini adalah berkas virtual yang menunjuk ke memori komputer, jadi jangan khawatir tentang ukurannya.

Direktori di bawah "`/sys`" berisi struktur data kernel yang diekspor, atributnya, dan hubungan di antara mereka. Ini juga berisi antarmuka untuk mengubah parameter kernel tertentu pada saat berjalan.

Lihat "`proc.txt(.gz)`", "`sysfs.txt(.gz)`", dan dokumen terkait lainnya dalam dokumentasi kernel Linux ("`/usr/share/doc/linux-doc-*/Documentation/filesystems/*`") yang disediakan oleh paket `linux-doc-*`.

### 1.2.13. tmpfs

tmpfs adalah sistem berkas sementara yang menyimpan semua berkas dalam memori virtual. Data tmpfs dalam cache halaman pada memori dapat ditukar ke ruang swap pada disk sesuai kebutuhan.

Direktori "`/run`" dikait sebagai tmpfs dalam proses boot awal. Hal ini memungkinkan menulis ke sana bahkan ketika direktori "`/`" dikait sebagai hanya-baca. Ini adalah lokasi baru untuk penyimpanan berkas keadaan sementara dan menggantikan beberapa lokasi yang dijelaskan dalam Filesystem Hierarchy Standard versi 2.3:

- "`/var/run`" → "`/run`"

- "`/var/lock`" → "`/run/lock`"

- "`/dev/shm`" → "`/run/shm`"

Lihat "`tmpfs.txt(.gz)`" dalam dokumentasi kernel Linux ("`/usr/share/doc/linux-doc-*/Documentation/filesystems/*`") yang disediakan oleh paket `linux-doc-*`.

## 1.3. Midnight Commander (MC)

Midnight Commander (MC) adalah GNU "pisau tentara Swiss" untuk konsol Linux dan lingkungan terminal lainnya. Ini memberi pemula pengalaman konsol berbasis menu yang jauh lebih mudah dipelajari daripada perintah Unix standar.

Anda mungkin perlu menginstall paket Midnight Commander yang berjudul "`mc`" dengan yang berikut ini.

    $ sudo apt-get install mc

Gunakan perintah mc(1) untuk menjelajahi sistem Debian. Ini adalah cara terbaik untuk belajar. Silakan jelajahi beberapa lokasi menarik hanya dengan menggunakan tombol kursor dan tombol Enter.

- "`/etc`" dan subdirektorinya

- "`/var/log`" dan subdirektorinya

- "`/usr/share/doc`" dan subdirektorinya

- "`/usr/sbin`" dan "`/usr/bin`"

### 1.3.1. Penyesuaian MC

Untuk membuat MC mengubah direktori kerja saat keluar dan `cd` ke direktori, saya sarankan untuk memodifikasi "`~/.bashrc`" untuk menyertakan skrip yang disediakan oleh paket `mc`.

    . /usr/lib/mc/mc.sh

Lihat mc(1) (di bawah opsi "`-P`" karena alasan tersebut. (Jika Anda tidak mengerti apa sebenarnya yang saya bicarakan di sini, Anda dapat melakukan ini nanti.)

### 1.3.2. Memulai MC

MC dapat dimulai dengan yang berikut.

    $ mc

MC menangani semua operasi berkas melalui menunya, membutuhkan upaya pengguna minimal. Cukup tekan F1 untuk mendapatkan layar bantuan. Anda dapat bermain dengan MC hanya dengan menekan tombol kursor dan tombol fungsi.

| Catatan
Di beberapa konsol seperti gnome-terminal(1), ketukan tombol fungsi dapat dicuri oleh program konsol. Anda dapat menonaktifkan fitur-fitur ini di menu "Preferensi" → "Umum" dan "Pintasan" untuk `gnome-terminal`.

Jika Anda menemui masalah pengkodean karakter yang menampilkan karakter sampah, menambahkan "`-a`" ke baris perintah MC dapat membantu mencegah masalah.

Jika ini tidak menjernihkan masalah tampilan Anda dengan MC, lihat Bagian 8.3.1, “Konfigurasi terminal”.

### 1.3.3. Manajer berkas di MC

Default adalah dua panel direktori yang berisi daftar berkas. Mode lain yang berguna adalah mengatur jendela yang tepat ke "informasi" untuk melihat informasi hak istimewa akses berkas, dll. Berikut ini adalah beberapa penekanan tombol penting. Dengan daemon gpm(8) berjalan, seseorang dapat menggunakan tetikus pada konsol karakter Linux juga. (Pastikan untuk menekan tombol shift untuk mendapatkan perilaku normal potong and tempel di MC.)

Tabel 1.11. Pengikatan tombol MC

tombol | pengikatan tombol
--- | ---
`F1` | menu bantuan
`F3` | penampil berkas internal
`F4` | penyunting internal
`F9` | mengaktifkan menu tarik turun
`F10` | keluar dari Midnight Commander
`Tab` | berpindah di antara dua jendela
`Insert` atau `Ctrl-T` | menandai berkas untuk operasi beberapa berkas seperti menyalin
`Del` | menghapus berkas (hati-hati---atur MC ke mode hapus yang aman)
Tombol kursor | sudah jelas

### 1.3.4. Trik baris perintah di MC

- Perintah `cd` mengubah direktori yang ditampilkan pada layar yang dipilih.

- `Ctrl-Enter` atau `Alt-Enter` menyalin nama berkas ke baris perintah. Gunakan ini dengan perintah cp(1) dan mv(1) bersama dengan penyuntingan baris perintah.

- `Alt-Tab` memperlihatkan pilihan ekspansi nama berkas shell.

- Kita dapat menentukan direktori awal untuk kedua jendela sebagai argumen untuk MC; misalnya, "`mc /etc /root`".

- `Esc` + `n-key` → `Fn` (yaitu, `Esc` + `1` → `F1`, dll.; `Esc` + `0` → `F10`)

- Menekan `Esc` sebelum tombol memiliki efek yang sama seperti menekan `Alt` dan tombol bersama-sama.; yaitu, ketik `Esc` + `c` untuk `Alt-C`. `Esc` disebut tombol meta dan kadang-kadang ditulis sebagai "`M-`".

### 1.3.5. Penyunting internal di MC

Penyunting internal memiliki skema potong dan tempel yang menarik. Menekan `F3` menandai dimulainya pilihan, `F3` kedua menandai akhir seleksi dan menyoroti pilihan. Kemudian Anda dapat memindahkan kursor Anda. Jika Anda menekan F6, area yang dipilih dipindahkan ke lokasi kursor. Jika Anda menekan F5, area yang dipilih disalin dan disisipkan di lokasi kursor. `F2` menyimpan berkas. `F10` mengeluarkanmu. Sebagian besar tombol kursor bekerja secara intuitif.

Penyunting ini dapat langsung dimulai pada sebuah berkas menggunakan salah satu perintah berikut.

    $ mc -e filename_to_edit

    $ mcedit filename_to_edit

Ini bukan penyunting multi-jendela, tetapi seseorang dapat menggunakan beberapa konsol Linux untuk mencapai efek yang sama. Untuk menyalin antar jendela, gunakan tombol Alt-Fn untuk beralih konsol virtual dan gunakan "Berkas→Sisipkan berkas" atau "Berkas→Salin ke berkas" untuk memindahkan sebagian berkas ke berkas lain.

Penyunting internal ini dapat diganti dengan penyunting pilihan eksternal.

Juga, banyak program menggunakan variabel lingkungan "`$EDITOR`" atau "`$VISUAL`" untuk memutuskan penyunting mana yang akan digunakan. Jika Anda tidak nyaman dengan vim(1) atau nano(1) pada awalnya, Anda dapat mengatur ini ke "`mcedit`" dengan menambahkan baris berikut ke "`~/.bashrc`".

    export EDITOR=mcedit
    export VISUAL=mcedit

Saya sarankan untuk mengatur ini ke "`vim`" jika memungkinkan.

Jika Anda merasa tidak nyaman dengan vim(1), Anda dapat terus menggunakan mcedit(1) untuk sebagian besar tugas pemeliharaan sistem.

### 1.3.6. Penampil internal di MC

MC adalah penampil yang sangat cerdas. Ini adalah alat yang hebat untuk mencari kata-kata dalam dokumen. Saya selalu menggunakan ini untuk berkas-berkas di direktori "`/usr/share/doc`". Ini adalah cara tercepat untuk menelusuri banyak informasi Linux. Penampil ini dapat langsung dimulai dengan menggunakan salah satu perintah berikut.

    $ mc -v path/to/filename_to_view

    $ mcview path/to/filename_to_view

### 1.3.7. Fitur mulai sendiri dari MC

Tekan Enter pada berkas, dan program yang sesuai menangani konten berkas (lihat Bagian 9.4.11, “Menyesuaikan program yang akan dimulai”). Ini adalah fitur MC yang sangat nyaman.

Tabel 1.12. Reaksi terhadap tombol enter di MC

jenis berkas | reaksi untuk tombol enter
--- | ---
berkas yang dapat dieksekusi | menjalankan perintah
berkas man | menyalurkan konten ke perangkat lunak penampil
berkas html | menyalurkan konten ke peramban web
berkas "`*.tar.gz`" dan "`*.deb`" | menelusuri isinya seolah-olah subdirektori

Untuk memungkinkan fitur penampil dan berkas virtual ini berfungsi, berkas-berkas yang dapat dilihat tidak boleh diatur sebagai executable. Ubah status mereka menggunakan chmod(1) atau melalui menu berkas MC.

### 1.3.8. Sistem berkas virtual MC

MC dapat digunakan untuk mengakses berkas-berkas melalui Internet. Buka menu dengan menekan `F9`, lalu ketik "`Enter`" dan "`h`" untuk mengaktifkan sistem berkas Shell. Masukkan URL dalam bentuk "`sh://[pengguna@]mesin[:opsi]/[dir-jauh]`", yang mengambil direktori jarak jauh dan muncul seperti direktori lokal memakai `ssh`.

## 1.4. Lingkungan kerja dasar mirip Unix

Meskipun MC memungkinkan Anda untuk melakukan hampir segalanya, sangat penting bagi Anda untuk belajar bagaimana menggunakan alat baris perintah yang dipanggil dari prompt shell dan menjadi akrab dengan lingkungan kerja mirip Unix.

### 1.4.1. Shell log masuk

Karena shell log masuk mungkin dipakai oleh beberapa program inisialisasi sistem, bijaksana untuk mempertahankannya sebagai bash(1) dan menghindari beralih shell log masuk dengan chsh(1).

Bila Anda ingin memakai prompt shell interaktif lain, atur itu dari konfigurasi emulator terminal GUI atau mulailah itu dari `~/.bashrc`. mis., dengan menempatkan "`exec /usr/bin/zsh -i -l`" atau "`exec /usr/bin/fish -i -l`" di dalamnya.

Tabel 1.13. Daftar program shell

paket | popcon | ukuran | Shell POSIX | deskripsi
--- | --- | --- | --- | ---
`bash` | V:888, I:999 | 7276 | Ya | Bash: GNU Bourne Again SHell (standar de facto)
`bash-completion` | V:36, I:958 | 1952 | T/T | penyelesaian yang dapat diprogram untuk shell bash
`dash` | V:928, I:998 | 207 | Ya | Debian Almquist Shell, bagus untuk skrip shell
`zsh` | V:41, I:70 | 2499 | Ya | Z shell: shell standar dengan banyak tambahan
`tcsh` | V:4, I:15 | 1366 | Tidak | TENEX C Shell: versi yang disempurnakan dari Berkeley csh
`mksh` | V:5.4, I:7.9 | 7713 | Ya | Versi dari shell Korn
`csh` | V:1.1, I:5.4 | 348 | Tidak | C Shell OpenBSD, suatu versi dari Berkeley csh
`sash` | V:0.3, I:5.2 | 1245 | Ya | Stand-alone dengan perintah-perintah bawaan (Tidak dimaksudkan untuk standar "`/usr/bin/sh`")
`ksh` | V:0.3, I:8.4 | 65 | Ya | versi AT&T yang sebenarnya dari shell Korn
`rc` | V:0.10, I:0.73 | 182 | Tidak | implementasi dari AT&T Plan 9 rc shell
`posh` | V:0.01, I:0.23 | 191 | Ya | Policy-compliant Ordinary SHell (turunan `pdksh`)

| Tip
Meskipun shell mirip POSIX berbagi sintaks dasar, mereka dapat berbeda dalam perilaku untuk hal-hal yang mendasar seperti variabel shell dan ekspansi glob. Silakan periksa dokumentasi mereka untuk rinciannya.

Dalam bab tutorial ini, shell interaktif selalu berarti `bash`.

### 1.4.2. Menyesuaikan bash

Anda dapat menyesuaikan perilaku bash(1) dengan "`~/.bashrc`".

Misalnya, coba yang berikut.

    # enable bash-completion
    if ! shopt -oq posix; then
      if [ -f /usr/share/bash-completion/bash_completion ]; then
        . /usr/share/bash-completion/bash_completion
      elif [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
      fi
    fi

    # CD upon exiting MC
    . /usr/lib/mc/mc.sh

    # set CDPATH to a good one
    CDPATH=.:/usr/share/doc:~:~/Desktop:~
    export CDPATH

    PATH="${PATH+$PATH:}/usr/sbin:/sbin"
    # set PATH so it includes user's private bin if it exists
    if [ -d ~/bin ] ; then
      PATH="~/bin${PATH+:$PATH}"
    fi
    export PATH

    EDITOR=vim
    export EDITOR

| Tip
Anda dapat menemukan lebih banyak tips penyesuaian `bash`, seperti Bagian 9.3.6, “Perintah berwarna”, dalam Bab 9, Tips sistem.

| Tip
Paket `bash-completion` memungkinkan penyelesaian yang dapat diprogram untuk `bash`.

### 1.4.3. Ketukan tombol khusus

Dalam lingkungan mirip Unix, ada beberapa ketukan tombol yang memiliki arti khusus. Harap dicatat bahwa pada konsol karakter Linux normal, hanya tombol `Ctrl` dan `Alt` kiri yang berfungsi seperti yang diharapkan. Berikut adalah beberapa ketukan kunci yang penting untuk diingat.

Tabel 1.14. Daftar pengikatan kunci untuk bash

tombol | deskripsi pengikatan kunci
--- | ---
`Ctrl-U` | menghapus baris sebelum kursor
`Ctrl-H` | menghapus satu karakter sebelum kursor
`Ctrl-D` | mengakhiri masukan (keluar shell jika Anda menggunakan shell)
`Ctrl-C` | mengakhiri program yang sedang berjalan
`Ctrl-Z` | menghentikan sementara program dengan memindahkannya ke pekerjaan latar belakang
`Ctrl-S` | menghentikan keluaran ke layar
`Ctrl-Q` | mengaktifkan kembali keluaran ke layar
`Ctrl-Alt-Del` | reboot/halt sistem, lihat inittab(5)
`tombol Alt Kiri` (opsional, `tombol Windows`) | tombol meta untuk Emacs dan UI serupa
`Up-arrow` | mulai pencarian riwayat perintah di bawah `bash`
`Ctrl-R` | memulai pencarian riwayat perintah inkremental di bawah `bash`
`Tab` | melengkapi masukan nama berkas ke baris perintah di bawah `bash`
`Ctrl-V` `Tab` | memasukkan `tab` tanpa ekspansi ke baris perintah di bawah `bash`

| Tip
Fitur terminal `Ctrl-S` dapat dinonaktifkan menggunakan stty(1).

### 1.4.4. Operasi tetikus

Operasi tetikus untuk teks pada sistem Debian mencampur 2 gaya dengan beberapa keunikan:

- Operasi tetikus gaya Unix tradisional:

  - gunakan tombol 3 (klik)

  - gunakan PRIMER

  - digunakan oleh aplikasi X seperti `xterm` dan aplikasi teks di konsol Linux

- Operasi tetikus gaya GUI modern:

  - gunakan tombol 2 (seret + klik)

  - gunakan PRIMER dan PAPANKLIP

  - digunakan dalam aplikasi GUI modern seperti `gnome-terminal`

Tabel 1.15. Daftar operasi tetikus dan tindakan tombol terkait pada Debian

aksi | respon
--- | ---
Kiri-klik-dan-seret tetikus | pilih rentang sebagai pilihan PRIMER
Klik kiri | pilih awal rentang untuk pilihan PRIMER
Klik kanan (tradisional) | pilih akhir rentang untuk pilihan PRIMER
Klik kanan (modern) | menu bergantung konteks (potong/salin/tempel)
Klik tengah atau Shift-`Ins` | menyisipkan pilihan PRIMER di kursor
`Ctrl-X` | memotong pilihan PRIMER ke PAPANKLIP
`Ctrl-C` (`Shift-Ctrl-C` dalam terminal) | menyalin pilihan PRIMER ke PAPANKLIP
`Ctrl-V` | menempelkan PAPANKLIP pada kursor

Di sini, pilihan PRIMER adalah rentang teks yang disorot. Dalam program terminal, `Shift-Ctrl-C` digunakan sebagai gantinya untuk menghindari menghentikan program yang sedang berjalan.

Roda tengah pada tetikus roda modern dianggap tombol tetikus tengah dan dapat digunakan untuk klik tengah. Mengklik tombol kiri dan kanan tetikus bersama-sama berfungsi sebagai klik tengah di bawah situasi sistem tetikus 2 tombol.

Untuk menggunakan tetikus di konsol karakter Linux, Anda harus menjalankan gpm(8) sebagai daemon.

### 1.4.5. Pager

Perintah less(1) adalah pager yang disempurnakan (peramban konten berkas). Ini membaca berkas yang ditentukan oleh argumen perintah atau masukan standarnya. Tekan "`h`" jika Anda memerlukan bantuan saat menjelajah dengan perintah `less`. Ini dapat melakukan jauh lebih banyak daripada more(1) dan dapat didongkrak dengan mengeksekusi "`eval $(lesspipe)`" atau "`eval $(lessfile)`" dalam skrip awal mula shell. Lihat lebih lanjut di "`/usr/share/doc/less/LESSOPEN`". Opsi "`-R`" memungkinkan keluaran karakter mentah dan memfungsikan escape sequence warna ANSI. Lihat less(1).

| Tip
Dalam perintah `less`, ketik "`h`" untuk melihat layar bantuan, ketik "`/`" atau "`?`" untuk mencari string, dan ketik "`-i`" untuk mengubah sensitivitas atas huruf besar kecil.

### 1.4.6. Penyunting teks

Anda harus menjadi mahir dalam salah satu varian program Vim atau Emacs yang populer di sistem mirip Unix.

Saya pikir membiasakan diri dengan perintah Vim adalah hal yang benar untuk dilakukan, karena Vi-editor selalu ada di dunia Linux/Unix. (Sebenarnya, `vi` asli atau `nvi` baru adalah program yang Anda temukan di mana-mana. Saya memilih Vim sebagai gantinya untuk pemula karena menawarkan bantuan melalui tombol `F1` sementara itu cukup mirip dan lebih kuat.)

Jika Anda memilih Emacs atau XEmacs sebagai pilihan penyunting Anda, itu adalah pilihan lain yang baik memang, terutama untuk pemrograman. Emacs memiliki sejumlah besar fitur lain juga, termasuk berfungsi sebagai pembaca berita, penyunting direktori, program surat, dll. Ketika digunakan untuk pemrograman atau menyunting skrip shell, itu secara cerdas mengenali format dari apa yang sedang Anda kerjakan, dan mencoba memberikan bantuan. Beberapa orang berpendapat bahwa satu-satunya program yang mereka butuhkan di Linux adalah Emacs. Sepuluh menit belajar Emacs sekarang dapat menghemat berjam-jam kemudian. Memiliki manual GNU Emacs untuk referensi ketika belajar Emacs sangat dianjurkan.

Semua program ini biasanya datang dengan program bimbingan belajar bagi Anda untuk mempelajarinya dengan latihan. Mulailah Vim dengan mengetik "`vim`" dan tekan tombol F1. Anda setidaknya harus membaca 35 baris pertama. Kemudian lakukan kursus pelatihan daring dengan memindahkan kursor ke "`|tutor|`" dan menekan `Ctrl-]`.

| Catatan
Penyunting yang baik, seperti Vim dan Emacs, dapat menangani UTF-8 dan pengodean teks eksotis lainnya dengan benar. Ide yang baik untuk menggunakan lingkungan GUI di lokal UTF-8 dan untuk memasang program yang diperlukan dan fonta untuk itu. Penyunting memiliki opsi untuk mengatur pengodean berkas independen dari lingkungan GUI. Silakan lihat dokumentasi mereka tentang teks multi-byte.

### 1.4.7. Menyiapkan penyunting teks default

Debian hadir dengan sejumlah penyunting yang berbeda. Kami sarankan untuk memasang paket `vim`, seperti yang disebutkan di atas.

Debian menyediakan akses terpadu ke penyunting baku sistem melalui perintah "`/usr/bin/editor`" sehingga program lain (misalnya, reportbug(1)) dapat memanggilnya. Anda dapat mengubahnya dengan yang berikut.

    $ sudo update-alternatives --config editor

Pilihan "`/usr/bin/vim.basic`" daripada "`/usr/bin/vim.tiny`" adalah rekomendasi saya untuk pemula karena mendukung penyorotan sintaksis.

| Tip
Banyak program menggunakan variabel lingkungan "`$EDITOR`" atau "`$VISUAL`" untuk memutuskan penyunting mana yang akan digunakan (lihat Bagian 1.3.5, “Penyunting internal di MC” dan Bagian 9.4.11, “Menyesuaikan program yang akan dimulai”). Untuk konsistensi pada sistem Debian, atur ini ke "`/usr/bin/editor`". (Secara historis, "`$EDITOR`" adalah "`ed`" dan "`$VISUAL`" adalah "`vi`".)

### 1.4.8. Menggunakan vim

vim(1) baru-baru ini memulai dirinya dalam opsi "`nocompatible`" waras dan masuk ke mode `NORMAL`.[1]

Tabel 1.16. Daftar ketukan tombol Vim dasar

mode | ketikan tombol | aksi
--- | --- | ---
`NORMAL` | `:help|only` | menampilkan berkas bantuan
`NORMAL` | `:e filename.ext` | membuka penyangga baru untuk menyunting `namaberkas.ext`
`NORMAL` | `:w` | menimpa penyangga saat ini ke berkas asli
`NORMAL` | `:w filename.ext` | menulis penyangga saat ini ke `namaberkas.ext`
`NORMAL` | `:q` | keluar `vim`
`NORMAL` | `:q!` | memaksa keluar `vim`
`NORMAL` | `:only` | tutup semua jendela belah terbuka lainnya
`NORMAL` | `:set nocompatible?` | periksa apakah `vim` berada dalam mode `nocompatible`
`NORMAL` | `:set nocompatible` | atur `vim` ke mode `nocompatible` yang waras
`NORMAL` | `i` | masuk ke mode `SISIP`
`NORMAL` | `R` | masuk ke mode `TIMPA`
`NORMAL` | `v` | masuk ke mode `VISUAL`
`NORMAL` | `V` | masuk ke mode `VISUAL` baris
`NORMAL` | Ctrl-`V` | masuk ke mode `VISUAL` blok
selain `TERMINAL-JOB` | `ESC`-key | masuk mode `NORMAL`
`NORMAL` | `:term` | masuk ke mode `TERMINAL-JOB`
`TERMINAL-NORMAL` | `i` | masuk ke mode `TERMINAL-JOB`
`TERMINAL-JOB` | Ctrl-`W` `N` (atau Ctrl-`\` Ctrl-`N`) | masuk ke mode `TERMINAL-NORMAL`
`TERMINAL-JOB` | Ctrl-`W` `:` | masuk mode `Ex` dalam mode `TERMINAL-NORMAL`

Harap gunakan program "`vimtutor`" untuk belajar `vim` melalui suatu kursus tutorial interaktif.

Program `vim` mengubah perilakunya ke tombol yang diketik berdasarkan mode. Mengetikkan tombol ke buffer sebagian besar dilakukan dalam mode `INSERT` dan mode `REPLACE`. Menggerakkan kursor sebagian besar dilakukan dalam mode `NORMAL`. Pemilihan interaktif dilakukan dalam mode `VISUAL`. Mengetik "`:`" dalam mode `NORMAL` mengubah mode menjadi mode `Ex`. Mode `Ex` menerima perintah.

| Tip
Vim hadir dengan paket Netrw. Netrw mendukung membaca berkas, menulis berkas, meramban direktori melalui jaringan, dan meramban lokal! Cobalah Netrw dengan "`vim .`" (sebuah titik sebagai argumen) dan membaca manualnya di "`:help netrw`".

Untuk konfigurasi tingkat lanjut `vim`, lihat Bagian 9.2, “Menyesuaikan vim”.

### 1.4.9. Merekam aktivitas shell

Keluaran dari perintah shell dapat bergulir keluar layar Anda dan mungkin hilang selamanya. Adalah praktik yang baik untuk mencatat aktivitas shell ke dalam berkas bagi Anda untuk meninjaunya nanti. Catatan semacam ini sangat penting ketika Anda melakukan tugas-tugas manajemen sistem apa pun.

| Tip
Vim baru (versi>=8.2) dapat digunakan untuk merekam aktivitas shell secara bersih menggunakan mode `TERMINAL-JOB`. Lihat Bagian 1.4.8, “Menggunakan vim”.

Metode dasar untuk merekam aktivitas shell adalah menjalankannya di bawah script(1).

Misalnya, coba yang berikut ini

    $ script
    Script started, file is typescript

Lakukan perintah shell apa pun di bawah `script`.

Tekan `Ctrl-D` untuk keluar dari `script`.

    $ vim typescript

Lihat Bagian 9.1.1, “Merekam aktivitas shell secara bersih” .

### 1.4.10. Perintah Unix Dasar

Mari kita pelajari perintah dasar Unix. Di sini saya menggunakan "Unix" dalam arti generiknya. Setiap OS klon Unix biasanya menawarkan perintah yang setara. Sistem Debian tidak terkecuali. Jangan khawatir jika beberapa perintah tidak berfungsi seperti yang Anda inginkan sekarang. Jika `alias` digunakan dalam shell, keluaran perintah yang sesuai akan berbeda. Contoh-contoh ini tidak dimaksudkan untuk dieksekusi dalam urutan ini.

Cobalah semua perintah berikut dari akun pengguna yang tidak memiliki hak istimewa.

Tabel 1.17. Daftar perintah dasar Unix

perintah | deskripsi
--- | ---
`pwd` | menampilkan nama direktori kerja/saat ini
`whoami` | menampilkan nama pengguna saat ini
`id` | menampilkan identitas pengguna saat ini (nama, uid, gid, dan grup terkait)
`file foo` | menampilkan jenis berkas untuk berkas "`foo`"
`type -p commandname` | menampilkan lokasi berkas perintah "`nama_perintah`"
`which commandname` | , ,
`type commandname` | menampilkan informasi tentang perintah "`nama_perintah`"
`apropos key-word` | temukan perintah yang terkait dengan "`"kata-kunci`"
`man -k kata-kunci` | , ,
`whatis namaperintah` | tampilkan penjelasan satu baris pada perintah "`namaperintah`"
`man -a commandname` | menampilkan penjelasan pada perintah "`namaperintah`" (gaya Unix)
`info commandname` | menampilkan penjelasan yang agak panjang pada perintah "`namaperintah`" (gaya GNU)
`ls` | menampilkan isi direktori (berkas non-dot dan direktori)
`ls -a` | menampilkan isi direktori (semua berkas dan direktori)
`ls -A` | menampilkan daftar isi direktori (hampir semua berkas dan direktori, yaitu, melewati "`..`" dan "`.`")
`ls -la` | menampilkan semua isi direktori dengan informasi detail
`ls -lai` | menampilkan semua isi direktori dengan nomor inode dan informasi detail
`ls -d` | menampilkan semua direktori di bawah direktori saat ini
`tree` | menampilkan konten pohon berkas
`lsof foo` | menampilkan daftar status terbuka dari berkas "`foo`"
`lsof -p pid` | menampilkan daftar berkas yang dibuka oleh ID proses: "`pid`"
`mkdir foo` | membuat direktori baru "`foo`" di direktori saat ini
`rmdir foo` | menghapus direktori "`foo`" di direktori saat ini
`cd foo` | berpindah direktori ke direktori "`foo`" di direktori saat ini atau di direktori yang tercantum dalam variabel "`$CDPATH`"
`cd /` | berpindah direktori ke direktori root
`cd` | berpindah direktori ke direktori beranda pengguna saat ini
`cd /foo` | berpindah direktori ke direktori path absolut "`/foo`"
`cd ..` | berpindah direktori ke direktori induk
`cd ~foo` | berpindah direktori ke direktori rumah pengguna "`foo`"
`cd -` | berpindah direktori ke direktori sebelumnya
`</etc/motd pager` | menampilkan isi "`/etc/motd`" menggunakan pager baku
`touch junkfile` | membuat berkas kosong "`junkfile`"
`cp foo bar` | menyalin berkas yang ada "`foo`" ke berkas baru "`bar`"
`rm junkfile` | menghapus berkas "`junkfile`"
`mv foo bar` | mengganti nama berkas yang ada "`foo`" menjadi nama baru "`bar`" ("`bar`" tidak boleh ada)
`mv foo bar` | memindahkan berkas yang ada "`foo`" ke lokasi baru "`bar/foo`" (direktori "`bar`" harus ada)
`mv foo bar/baz` | memindahkan berkas yang ada "`foo`" ke lokasi baru dengan nama baru "`bar/baz`" (direktori "`bar`" harus ada tetapi direktori "`bar/baz`" tidak boleh ada)
`chmod 600 foo` | membuat berkas yang ada "`foo`" menjadi tidak dapat dibaca dan tidak dapat ditulis oleh orang lain (tidak dapat dieksekusi untuk semua)
`chmod 644 foo` | membuat berkas yang ada "`foo`" menjadi bisa dibaca tetapi tidak dapat ditulis oleh orang lain (tidak dapat dieksekusi untuk semua)
`chmod 755 foo` | membuat berkas yang ada "`foo`" menjadi bisa dibaca tetapi tidak dapat ditulis oleh orang lain (dapat dieksekusi untuk semua)
`find . -name pattern` | mencari nama berkas yang cocok menggunakan "`pola`" shell (lebih lambat)
`locate -d . pattern` | mencari nama berkas yang cocok menggunakan "`pola`" shell (lebih cepat menggunakan basis data yang dihasilkan secara teratur)
`grep -e "pattern" *.html` | mencari suatu "`pola`" di semua berkas yang berakhiran "`.html`" di direktori saat ini dan tampilkan semuanya
`top` | menampilkan informasi proses menggunakan layar penuh, ketik "`q`" untuk berhenti
`ps aux | pager` | menampilkan informasi tentang semua proses yang berjalan menggunakan keluaran gaya BSD
`ps -ef | pager` | menampilkan informasi tentang semua proses yang berjalan menggunakan keluaran gaya Sistem-V Unix
`ps aux | grep -e "[e]xim4*"` | menampilkan semua proses "`exim`" dan "`exim4`" yang sedang berjalan
`ps axf | pager` | menampilkan informasi tentang semua proses yang berjalan dengan keluaran seni ASCII
`kill 1234` | membunuh proses yang diidentifikasi oleh id proses: "1234"
`gzip foo` | mengompresi "`foo`" untuk membuat "`foo.gz`" menggunakan pengkodean Lempel-Ziv (LZ77)
`gunzip foo.gz` | mendekompresi "`foo.gz`" untuk membuat "`foo`"
`bzip2 foo` | mengompresi "`foo`" untuk membuat "`foo.bz2`" menggunakan algoritma kompresi teks penyortiran blok Burrows-Wheeler, dan pengkodean Huffman (kompresi yang lebih baik daripada `gzip)`
`bunzip2 foo.bz2` | mendekompresi "`foo.bz2`" untuk membuat "`foo`"
`xz foo` | mengompresi "`foo`" untuk membuat "`foo.xz`" menggunakan algoritma rantai Lempel-Ziv-Markov (kompresi yang lebih baik daripada `bzip2`)
`unxz foo.xz` | mendekompresi "`foo.xz`" untuk membuat "`foo`"
`tar -xvf foo.tar` | mengekstrak berkas dari arsip "`foo.tar`"
`tar -xvzf foo.tar.gz` | mengekstrak berkas dari arsip "`foo.tar.gz`" yang di-gzip
`tar -xvjf foo.tar.bz2` | mengekstrak berkas dari arsip "`foo.tar.bz2`"
`tar -xvJf foo.tar.xz` | mengekstrak berkas dari arsip "`foo.tar.xz`"
`tar -cvf foo.tar bar/` | mengarsipkan isi folder "`bar/`" dalam arsip "`foo.tar`"
`tar -cvzf foo.tar.gz bar/` | mengarsipkan isi folder "`bar/`" dalam arsip "`foo.tar.gz`" terkompresi
`tar -cvjf foo.tar.bz2 bar/` | mengarsipkan isi folder "`bar/`" dalam arsip "`foo.tar.bz2`"
`tar -cvJf foo.tar.xz bar/` | mengarsipkan isi folder "`bar/`" dalam arsip "`foo.tar.xz`"
`zcat README.gz | pager` | menampilkan isi "`README.gz`" yang terkompresi menggunakan pager baku
`zcat README.gz > foo` | membuat berkas "`foo`" dengan konten yang didekompresi dari "`README.gz`"
`zcat README.gz >> foo` | menambahkan konten yang didekompresi dari "`README.gz`" ke akhir berkas "`foo`" (jika tidak ada, buat dulu)

| Catatan

Unix memiliki tradisi untuk menyembunyikan nama berkas yang dimulai dengan "`.`". Mereka secara tradisional adalah berkas-berkas yang berisi informasi konfigurasi dan preferensi pengguna.

Untuk perintah `cd`, lihat builtins(7).

Pager baku dari sistem Debian polos adalah more(1) yang tidak dapat menggulir balik. Dengan memasang paket `less` menggunakan baris perintah "`"apt-get install less`", less(1) menjadi pager baku dan Anda dapat menggulir balik dengan tombol-tombol kursor.

"`[`" dan "`]`" dalam ekspresi reguler dari perintah "`ps aux | grep -e "[e]xim4*"`" di atas memungkinkan `grep` untuk menghindari pencocokan dirinya sendiri. "`4*`" dalam ekspresi reguler berarti 0 atau lebih pengulangan karakter "`4`" sehingga memungkinkan `grep` untuk mencocokkan "`exim`" dan "`exim4`". Meskipun "`*`" digunakan dalam glob namaberkas shell dan ekspresi reguler, maknanya berbeda. Pelajari ekspresi reguler dari grep(1).

Silakan melintasi direktori dan mengintip ke dalam sistem menggunakan perintah di atas sebagai pelatihan. Jika Anda memiliki pertanyaan tentang perintah konsol apa pun, pastikan untuk membaca halaman manual.

Misalnya, coba yang berikut ini

    $ man man
    $ man bash
    $ man builtins
    $ man grep
    $ man ls

Gaya halaman man mungkin sedikit sulit untuk dibiasakan, karena mereka agak singkat, terutama yang sangat tradisional, yang lebih tua. Tetapi begitu Anda terbiasa, Anda akan menghargai ringkasnya.

Harap dicatat bahwa banyak perintah mirip Unix termasuk yang dari GNU dan BSD menampilkan informasi bantuan singkat jika Anda memanggil mereka dalam salah satu cara berikut (atau tanpa argumen dalam beberapa kasus).

    $ commandname --help
    $ commandname -h

## 1.5. Perintah shell sederhana

Sekarang Anda mulai merasakan tentang cara menggunakan sistem Debian. Mari kita lihat jauh ke dalam mekanisme eksekusi perintah dalam sistem Debian. Di sini, saya telah menyederhanakan realitas untuk pemula. Lihat bash(1) untuk penjelasan yang tepat.

Perintah sederhana adalah urutan komponen.

1. Penugasan variabel (opsional)

2. Nama perintah

3. Argumen (opsional)

4. Pengalihan (opsional: `>` , `>>` , `<` , `<<` , dll.)

5. Operator kontrol (opsional: `&&` , `||` , newline , `;` , `&` , `(` , `)` )

### 1.5.1. Eksekusi perintah dan variabel lingkungan

Nilai-nilai dari beberapa variabel lingkungan mengubah perilaku beberapa perintah Unix.

Nilai baku variabel lingkungan pada awalnya ditetapkan oleh sistem PAM dan kemudian beberapa di antaranya dapat diatur ulang oleh beberapa program aplikasi.

- Sistem PAM seperti `pam_env` dapat mengatur variabel lingkungan dengan `/etc/pam.conf`", "`/etc/environment`", dan "/etc/default/locale``".

- The modern GUI environment run from the user mode systemd unit (see systemd.unit(5)) sets its environment variables by a file in the "`~/.config/environment.d/`" directory.

- Inisialisasi program spesifik pengguna dapat mengatur ulang variabel lingkungan dengan "`~/.profile`", "`~/.bash_profile`", dan "`~/.bashrc`".

### 1.5.2. Variabel "`$LANG`"

Lokal baku didefinisikan dalam variabel lingkungan "`$LANG`" dan dikonfigurasi sebagai "`LANG=xx_YY.UTF-8`" oleh installer atau dengan konfigurasi GUI berikutnya, mis., "Pengaturan" → "Wilayah & Bahasa" → "Bahasa" / "Format" untuk GNOME.

| Catatan
Saya sarankan Anda untuk mengkonfigurasi lingkungan sistem hanya dengan variabel "`$LANG`" untuk saat ini dan untuk menjauh dari variabel "`$LC_*`" kecuali itu benar-benar diperlukan.

Nilai lokal lengkap yang diberikan kepada variabel "`$LANG`" terdiri dari 3 bagian: "`xx_YY.ZZZZ`".

Tabel 1.18. 3 bagian dari nilai lokal

nilai lokal | arti
--- | ---
`xx` | Kode bahasa ISO 639 (huruf kecil) seperti "en"
`YY` | Kode negara ISO 3166 (huruf besar) seperti "US"
`ZZZZ` | codeset, selalu diatur ke "UTF-8"

Tabel 1.19. Daftar rekomendasi lokal

rekomendasi lokal | Bahasa (area)
--- | ---
`en_US.UTF-8` | Inggris (Amerika Serikat)
`en_GB.UTF-8` | Inggris (Inggris Raya)
`fr_FR.UTF-8` | Prancis (Prancis)
`de_DE.UTF-8` | Jerman (Jerman)
`it_IT.UTF-8` | Italia (Italia)
`es_ES.UTF-8` | Spanyol (Spanyol)
`ca_ES.UTF-8` | Katala (Spanyol)
`sv_SE.UTF-8` | Swedia (Swedia)
`pt_BR.UTF-8` | Portugis (Brasil)
`ru_RU.UTF-8` | Rusia (Rusia)
`zh_CN.UTF-8` | Cina (Republik Rakyat Cina)
`zh_TW.UTF-8` | Cina (Taiwan)
`ja_JP.UTF-8` | Jepang (Jepang)
`ko_KR.UTF-8` | Korea (Republik Korea)
`vi_VN.UTF-8` | Vietnam (Vietnam)

Eksekusi perintah umum menggunakan urutan baris shell sebagai berikut.

    $ echo $LANG
    en_US.UTF-8
    $ date -u
    Wed 19 May 2021 03:18:43 PM UTC
    $ LANG=fr_FR.UTF-8 date -u
    mer. 19 mai 2021 15:19:02 UTC

Di sini, program date(1) dijalankan dengan nilai lokal yang berbeda.

- Untuk perintah pertama, "`$LANG`" diatur ke nilai lokal baku sistem "`en_US.UTF-8`".

- Untuk perintah kedua, "`$LANG`" diatur ke nilai lokal UTF-8 Prancis "`fr_FR.UTF-8`".

Sebagian besar eksekusi perintah biasanya tidak memiliki definisi variabel lingkungan sebelumnya. Untuk contoh di atas, Anda dapat mengeksekusi sebagai berikut.

    $ LANG=fr_FR.UTF-8
    $ date -u
    mer. 19 mai 2021 15:19:24 UTC

| Tip
Saat mengajukan laporan bug, menjalankan dan memeriksa perintah di bawah lokal "`en_US. UTF-8`" adalah ide yang baik, jika Anda menggunakan lingkungan non-Inggris.

Untuk detail lengkap konfigurasi lokal, lihat Bagian 8.1, “Lokal”.

### 1.5.3. Variabel "`$PATH`"

Ketika Anda mengetik perintah ke dalam shell, shell mencari perintah dalam daftar direktori yang terkandung dalam variabel lingkungan "`$PATH`". Nilai variabel lingkungan "`$PATH`" juga disebut path pencarian shell.

Dalam instalasi Debian baku, variabel lingkungan "`$PATH`" dari akun pengguna mungkin tidak termasuk "`/usr/sbin`" dan "`/usr/sbin`". Misalnya, perintah `ifconfig` perlu dijalankan dengan path lengkap sebagai "`/usr/sbin/ifconfig`". (Perintah `ip` yang serupa terletak di "`/usr/bin`".)

Anda dapat mengubah variabel lingkungan "`$PATH`" dari shell Bash dengan berkas "`~/.bash_profile`" atau "`~/.bashrc`".

### 1.5.4. Variabel "`$HOME`"

Banyak perintah menyimpan konfigurasi spesifik pengguna di direktori rumah dan mengubah perilaku mereka dengan isinya. Direktori rumah diidentifikasi oleh variabel lingkungan "`$HOME`".

Tabel 1.20. Daftar nilai "`$HOME`"

nilai "`$HOME`" | situasi eksekusi program
--- | ---
`/` | program yang dijalankan oleh proses init (daemon)
`/root` | program yang dijalankan dari shell root normal
`/home/normal_user` | program yang dijalankan dari shell pengguna normal
`/home/normal_user` | program yang dijalankan dari menu desktop GUI pengguna normal
`/home/normal_user` | program dijalankan sebagai root dengan "`sudo program`"
`/root` | program dijalankan sebagai root dengan "`sudo -H program`"

| Tip
Shell mengekspansi "`~/`" ke direktori rumah pengguna saat ini, yaitu, "`$HOME/`". Shell mengekspansi "`~foo/`" ke direktori rumah `foo` yaitu "`/home/foo/`".

Lihat Bagian 12.1.5, “Variabel lingkungan shell” bila `$HOME` tidak tersedia bagi program Anda.

### 1.5.5. Opsi baris perintah

Beberapa perintah menerima argumen. Argumen yang dimulai dengan "`-`" atau "`--`" disebut opsi dan mengontrol perilaku perintah.

    $ date
    Thu 20 May 2021 01:08:08 AM JST
    $ date -R
    Thu, 20 May 2021 01:08:12 +0900

Di sini argumen baris perintah "`-R`" mengubah perilaku date(1) untuk menghasilkan string tanggal yang patuh RFC2822.

### 1.5.6. Glob shell

Seringkali Anda ingin perintah untuk bekerja dengan sekelompok berkas tanpa mengetik semuanya. Pola ekspansi nama berkas menggunakan glob shell, (kadang-kadang disebut sebagai wildcard), memfasilitasi kebutuhan ini.

Tabel 1.21. Pola glob shell

pola glob shell | deskripsi aturan kecocokan
--- | ---
`*` | nama berkas (segmen) tidak dimulai dengan "`.`"
`.*` | nama berkas (segmen) dimulai dengan "`.`"
`?` | tepat satu karakter
`[…]` | tepat satu karakter dengan karakter apa pun dalam tanda kurung
`[a-z]` | tepat satu karakter dengan karakter apapun antara "`a`" dan "`z`"
`[^…]` | tepat satu karakter selain karakter apa pun yang dilampirkan dalam tanda kurung (tidak termasuk "`^`")

Misalnya, coba yang berikut ini

    $ mkdir junk; cd junk; touch 1.txt 2.txt 3.c 4.h .5.txt ..6.txt
    $ echo *.txt
    1.txt 2.txt
    $ echo *
    1.txt 2.txt 3.c 4.h
    $ echo *.[hc]
    3.c 4.h
    $ echo .*
    . .. .5.txt ..6.txt
    $ echo .*[^.]*
    .5.txt ..6.txt
    $ echo [^1-3]*
    4.h
    $ cd ..; rm -rf junk

Lihat glob(7).

| Catatan
Tidak seperti ekspansi nama berkas normal oleh shell, pola shell "`*`" yang diuji dalam find(1) dengan uji "`-nama`" dll., cocok dengan awal "`.`" dari nama berkas. (Fitur POSIX baru)

| Catatan
BASH dapat disetel untuk mengubah perilaku glob dengan opsi bawaan shopt builtin "`dotglob`", "`noglob`", "`nocaseglob`", "`nullglob`", "`extglob`", dll. Lihat bash(1).

### 1.5.7. Nilai kembalian perintah

Setiap perintah mengembalikan status keluarnya (variabel: "`$?`") sebagai nilai kembalian.

Tabel 1.22. Kode keluar perintah

status keluar perintah | nilai kembalian numerik | nilai kembalian logis
--- | --- | ---
sukses | nol, 0 | TRUE
galat | bukan-nol, -1 | FALSE

Misalnya, coba yang berikut.

    $ [ 1 = 1 ] ; echo $?
    0
    $ [ 1 = 2 ] ; echo $?
    1

| Catatan
Harap dicatat bahwa, dalam konteks logis untuk shell, sukses diperlakukan sebagai TRUE logis yang memiliki 0 (nol) sebagai nilainya. Ini agak tidak intuitif dan perlu diingatkan di sini.

### 1.5.8. Urutan perintah umum dan pengalihan shell

Mari kita coba mengingat idiom perintah shell berikut yang diketik dalam satu baris sebagai bagian dari perintah shell.

Tabel 1.23. Idiom perintah Shell

idiom perintah | deskripsi
--- | ---
`command &` | eksekusi latar belakang `perintah` dalam subshell
`command1 | command2` | Menyalurkan lewat pipa keluaran standar `perintah1` ke masukan standar `perintah2` (eksekusibersamaan)
`command1 2>&1 | command2` | Menyalurkan lewat pipa keluaran standar dan kesalahan standar `perintah1` ke masukan standar `perintah2` (eksekusibersamaan)
`command1 ; command2` | menjalankan `perintah1` dan `perintah2` secara berurutan
`command1 && command2` | menjalankan `perintah1`; jika berhasil, menjalankan `perintah2` secara berurutan (mengembalikan sukses jika `perintah1` dan `perintah2` berhasil)
`command1 || command2` | menjalankan `perintah1`; jika tidak berhasil, menjalankan `perintah2` secara berurutan (mengembalikan sukses jika `perintah1` atau `perintah2` berhasil)
`command > foo` | mengalihkan keluaran standar dari `perintah` ke berkas `foo` (menimpa)
`command 2> foo` | mengalihkan kesalahan standar `perintah` ke berkas `foo` (menimpa)
`command >> foo` | mengalihkan keluaran standar `perintah` ke berkas `foo` (menambah)
`command 2>> foo` | mengalihkan kesalahan standar `perintah` ke berkas `foo` (menambah)
`command > foo 2>&1` | mengalihkan keluaran dan kesalahan standar `perintah` ke berkas `foo`
`command < foo` | mengalihkan masukan standar `perintah` ke berkas `foo`
`command << delimiter` | mengalihkan masukan standar `perintah` ke baris berikut sampai "`pembatas`" dijumpai (di sini dokumen)
`command <<- delimiter` | mengalihkan masukan standar `perintah` ke baris berikut sampai "`pembatas`" dijumpai (di sini dokumen, karakter tab di awal dibuang dari baris masukan)

Sistem Debian adalah sistem multi-tasking. Pekerjaan latar belakang memungkinkan pengguna untuk menjalankan beberapa program dalam satu shell. Manajemen proses latar belakang melibatkan bawaan shell: `jobs`, `fg`, `bg`, dan `kill`. Silakan baca bagian bash(1) di bawah "SIGNALS", dan "JOB CONTROL", dan builtins(1).

Misalnya, coba yang berikut ini

    $ </etc/motd pager

    $ pager </etc/motd

    $ pager /etc/motd

    $ cat /etc/motd | pager

Meskipun semua 4 contoh pengalihan shell menampilkan hal yang sama, contoh terakhir menjalankan perintah `cat` tambahan dan menghamburkan sumber daya tanpa alasan.

Shell memungkinkan Anda untuk membuka berkas menggunakan `exec` bawaan dengan sembarang deskriptor berkas.

    $ echo Hello >foo
    $ exec 3<foo 4>bar  # open files
    $ cat <&3 >&4       # redirect stdin to 3, stdout to 4
    $ exec 3<&- 4>&-    # close files
    $ cat bar
    Hello

Deskriptor berkas 0-2 sudah ditentukan.

Tabel 1.24. Deskriptor berkas yang telah ditentukan

perangkat | deskripsi | deskriptor berkas
--- | --- | ---
`stdin` | masukan standar | 0
`stdout` | keluaran standar | 1
`stderr` | galat standar | 2

### 1.5.9. Alias perintah

Anda dapat mengatur alias untuk perintah yang sering digunakan.

Misalnya, coba yang berikut ini

    $ alias la='ls -la'

Sekarang, "`la`" bekerja sebagai singkatan untuk "`ls-la`" yang mencantumkan semua berkas dalam format daftar panjang.

Anda dapat menampilkan daftar alias yang ada dengan `alias` (lihat bash(1) di bawah "PERINTAH BAWAAN SHELL").

    $ alias
    ...
    alias la='ls -la'

Anda dapat mengidentifikasi path atau identitas yang tepat dari perintah berdasarkan `tipe` (lihat bash(1) di bawah "PERINTAH BAWAAN SHELL").

Misalnya, coba yang berikut ini

    $ type ls
    ls is hashed (/bin/ls)
    $ type la
    la is aliased to ls -la
    $ type echo
    echo is a shell builtin
    $ type file
    file is /usr/bin/file

Di sini `ls` baru-baru ini dicari sementara "`file`" tidak, sehingga "`ls`" adalah "di-hash", yaitu, shell memiliki catatan internal untuk akses cepat ke lokasi perintah "`ls`".

| Tip
Lihat Bagian 9.3.6, “Perintah berwarna”.

## 1.6. Pemrosesan teks mirip Unix

Dalam lingkungan kerja mirip Unix, pemrosesan teks dilakukan dengan menyalurkan teks melalui rantai alat pemrosesan teks standar. Ini adalah inovasi Unix penting lainnya.

### 1.6.1. Alat teks Unix

Ada beberapa alat pemrosesan teks standar yang sangat sering digunakan pada sistem mirip Unix.

- Tidak ada ekspresi reguler yang digunakan:

  - cat(1) menyambungkan berkas-berkas dan mengeluarkan seluruh konten.

  - tac(1) menyambungkan berkas-berkas dan mengeluarkan secara terbalik.

  - cut(1) memilih bagian dari baris dan keluaran.

  - head(1) mengeluarkan bagian pertama dari berkas.

  - tail(1) mengeluarkan bagian terakhir dari berkas.

  - sort(1) mengurutkan baris-baris berkas teks.

  - uniq(1) menghapus baris duplikat dari suatu berkas terurut.

  - tr(1) menerjemahkan atau menghapus karakter.

  - diff(1) membandingkan berkas-berkas baris demi baris.

- Ekspresi reguler dasar (BRE) dipakai sebagai baku:

  - ed(1) adalah penyunting baris primitif.

  - sed(1) adalah penyunting stream.

  - grep(1) mencocokkan teks dengan pola.

  - vim(1) adalah penyunting layar.

  - emacs(1) adalah penyunting layar. (BRE yang agak diperluas)

- Extended regular expression (ERE) digunakan untuk:

  - awk(1) melakukan pemrosesan teks sederhana.

  - egrep(1) mencocokkan teks dengan pola.

  - `tcl`(3tcl) dapat melakukan setiap pemrosesan teks yang mungkin: Lihat re_syntax(3). Sering digunakan dengan `tk`(3tk).

  - perl(1) dapat melakukan setiap pemrosesan teks yang mungkin. Lihat perlre(1).

  - pcre2grep(1) dari paket `pcre2-util` mencocokkan teks dengan pola Perl Compatible Regular Expressions (PCRE).

  - python(1) dengan modul `re` dapat melakukan setiap pemrosesan teks yang mungkin. Lihat "`/usr/share/doc/python/html/index.html`".

Jika Anda tidak yakin apa sebenarnya perintah ini, silakan gunakan "`perintah man`" untuk mencari tahu sendiri.

| Catatan
Pengurutan dan ekspresi rentang tergantung lokal. Jika Anda ingin mendapatkan perilaku tradisional untuk perintah, gunakan lokal C atau C.UTF-8 bukan UTF-8 normal (lihat Bagian 8.1, “Lokal”).

| Catatan
Ekspresi reguler Perl (perlre(1)), Perl Compatible Regular Expressions (PCRE), dan ekspresi reguler Python yang ditawarkan oleh modul `re` memiliki banyak ekstensi yang sama ke ERE normal.

### 1.6.2. Ekspresi reguler

Ekspresi reguler digunakan di banyak alat pemrosesan teks. Mereka serupa dengan glob shell, tetapi mereka lebih rumit dan kuat.

Ekspresi reguler menggambarkan pola pencocokan dan terdiri dari karakter teks dan karakter meta.

Suatu karakter meta hanyalah karakter dengan makna khusus. Ada 2 gaya utama, BRE dan ERE, tergantung pada alat teks seperti yang dijelaskan di atas.

Tabel 1.25. Karakter meta untuk BRE dan ERE

BRE | ERE | deskripsi ekspresi reguler
--- | --- | ---
`\ . [ ] ^ $ *` | `\ . [ ] ^ $ *` | karakter meta umum
`\+ \? \( \) \{ \} \|` |  | karakter meta yang di-escape "`\`" hanya oleh BRE
| `+ ? ( ) { } |` | karakter meta yang tidak di-escape "`\`" hanya oleh ERE
`c` | `c` | cocok bukan karakter meta "`c`"
`\c` | `\c` | cocok karakter literal "`c`" bahkan jika "`c`" adalah karakter meta dengan sendirinya
`.` | `.` | cocok dengan karakter apa pun termasuk baris baru
`^` | `^` | posisi di awal string
`$` | `$` | posisi di akhir string
`\<` | `\<` | posisi di awal sebuah kata
`\>` | `\>` | posisi di akhir sebuah kata
`[abc…]` | `[abc…]` | cocok dengan karakter apa pun dalam "`abc…`"
`[^abc…]` | `[^abc…]` | cocok dengan karakter apa pun kecuali dalam "`abc…`"
`r*` | `r*` | cocok dengan nol atau lebih ekspresi reguler yang diidentifikasi oleh "`r`"
`r\+` | `r+` | cocok dengan satu atau lebih ekspresi reguler yang diidentifikasi oleh "`r`"
`r\?` | `r?` | cocok dengan nol atau satu ekspresi reguler yang diidentifikasi oleh "`r`"
`r1\|r2` | `r1|r2` | cocok dengan salah satu ekspresi reguler yang diidentifikasi oleh "`r1`" atau "`r2`"
`\(r1\|r2\)` | `(r1|r2)` | cocok dengan salah satu ekspresi reguler yang diidentifikasi oleh "`r1`" atau "`r2`" dan memperlakukannya sebagai ekspresi reguler yang dikurung

Ekspresi reguler `emacs` pada dasarnya adalah BRE tetapi telah diperluas untuk memperlakukan "`+`" dan "`?`" sebagai karakter meta seperti dalam ERE. Dengan demikian, tidak perlu meng-escape mereka dengan "`\`" dalam ekspresi reguler `emacs`.

grep(1) dapat digunakan untuk melakukan pencarian teks menggunakan ekspresi reguler.

Misalnya, coba yang berikut ini

    $ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL
    GNU GENERAL PUBLIC LICENSE
    GNU GENERAL PUBLIC LICENSE
    Yoyodyne, Inc., hereby disclaims all copyright interest in the program

| Tip
Lihat Bagian 9.3.6, “Perintah berwarna”.

### 1.6.3. Ekspresi penggantian

Untuk ekspresi pengganti, beberapa karakter memiliki arti khusus.

Tabel 1.26. Ekspresi penggantian

ekspresi penggantian | deskripsi teks untuk menggantikan ekspresi pengganti
--- | ---
`&` | apa yang cocok dengan ekspresi reguler (gunakan `\&` dalam `emacs`)
`\n` | apa yang cocok dengan ekspresi reguler dikurung ke-n ("n" adalah angka)

Untuk string pengganti Perl, "$&" digunakan sebagai pengganti "&" dan "$n" digunakan sebagai pengganti "\n".

Misalnya, coba yang berikut ini

    $ echo zzz1abc2efg3hij4 | \
    sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/'
    zzz=1abc2efg3hij4=
    $ echo zzz1abc2efg3hij4 | \
    sed -E -e 's/(1[a-z]*)[0-9]*(.*)$/=&=/'
    zzz=1abc2efg3hij4=
    $ echo zzz1abc2efg3hij4 | \
    perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=$&=/'
    zzz=1abc2efg3hij4=
    $ echo zzz1abc2efg3hij4 | \
    sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/'
    zzzefg3hij4===1abc
    $ echo zzz1abc2efg3hij4 | \
    sed -E -e 's/(1[a-z]*)[0-9]*(.*)$/\2===\1/'
    zzzefg3hij4===1abc
    $ echo zzz1abc2efg3hij4 | \
    perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/'
    zzzefg3hij4===1abc

Di sini harap perhatikan lebih lanjut gaya ekspresi reguler yang dikurung dan bagaimana string yang cocok digunakan dalam proses penggantian teks pada alat yang berbeda.

Ekspresi reguler ini juga dapat digunakan untuk gerakan kursor dan tindakan penggantian teks di beberapa penyunting.

Garis miring balik "`\`" di akhir baris di baris perintah shell meng-escape baris baru sebagai karakter white space dan melanjutkan masukan baris perintah shell ke baris berikutnya.

Silakan baca semua halaman manual terkait untuk mempelajari perintah ini.

### 1.6.4. Substitusi global dengan ekspresi reguler

Perintah ed(1) dapat menggantikan semua kemunculan "`FROM_REGEX`" dengan "`TO_TEXT`" dalam "`berkas`".

    $ ed file <<EOF
    ,s/FROM_REGEX/TO_TEXT/g
    w
    q
    EOF

Perintah sed(1) dapat menggantikan semua kemunculan "`FROM_REGEX`" dengan "`TO_TEXT`" dalam "`berkas`".

    $ sed -i -e 's/FROM_REGEX/TO_TEXT/g' file

Perintah vim(1) dapat menggantikan semua kemunculan "`FROM_REGEX`" dengan "`TO_TEXT`" dalam "`berkas`" dengan menggunakan perintah ex(1).

    $ vim '+%s/FROM_REGEX/TO_TEXT/gc' '+update' '+q' file

| Tip
Bendera "`c`" di atas memastikan konfirmasi interaktif untuk setiap substitusi.

Beberapa berkas ("`berkas1`", "`berkas2`", dan "`berkas3`") dapat diproses dengan ekspresi reguler secara serupa dengan vim(1) atau perl(1).

    $ vim '+argdo %s/FROM_REGEX/TO_TEXT/gce|update' '+q' file1 file2 file3

| Tip
Bendera "`e`" di atas mencegah kesalahan "Tidak ada yang cocok" dari merusak pemetaan.

    $ perl -i -p -e 's/FROM_REGEX/TO_TEXT/g;' file1 file2 file3

Dalam contoh perl(1), "`-i`" adalah untuk penyuntingan di tempat dari setiap berkas target, dan "`-p`" adalah untuk pengulangan implisit atas semua berkas yang diberikan.

| Tip
Penggunaan argumen "`-i.bak`" bukan "`-i`" menyimpan setiap berkas asli dengan menambahkan "`.bak`" ke nama berkasnya. Hal ini membuat pemulihan dari kesalahan lebih mudah untuk substitusi yang kompleks.

| Catatan
ed(1) dan vim(1) adalah BRE; perl(1) adalah ERE.

### 1.6.5. Mengekstrak data dari tabel berkas teks

Mari kita pertimbangkan berkas teks yang disebut "`DPL`" dimana beberapa nama pemimpin proyek Debian pra-2004 dan tanggal inisiasi mereka tercantum dalam format yang dipisah spasi.

    Ian     Murdock   August  1993
    Bruce   Perens    April   1996
    Ian     Jackson   January 1998
    Wichert Akkerman  January 1999
    Ben     Collins   April   2001
    Bdale   Garbee    April   2002
    Martin  Michlmayr March   2003

| Tip
Lihat "Sejarah Singkat Debian" untuk sejarah kepemimpinan Debian terbaru.

Awk sering digunakan untuk mengekstrak data dari jenis berkas ini.

Misalnya, coba yang berikut ini

    $ awk '{ print $3 }' <DPL                   # month started
    August
    April
    January
    January
    April
    April
    March
    $ awk '($1=="Ian") { print }' <DPL          # DPL called Ian
    Ian     Murdock   August  1993
    Ian     Jackson   January 1998
    $ awk '($2=="Perens") { print $3,$4 }' <DPL # When Perens started
    April 1996

Shell seperti Bash juga dapat digunakan untuk mengurai berkas semacam ini.

Misalnya, coba yang berikut ini

    $ while read first last month year; do
        echo $month
      done <DPL
    ... same output as the first Awk example

Di sini, perintah `read` bawaan menggunakan karakter dalam "`$IFS`" (internal field separators/pemisah ruas internal) untuk memecah baris menjadi kata-kata.

Jika Anda mengubah "`$IFS`" menjadi "`:`", Anda dapat mengurai "`/etc/passwd`" memakai shell dengan baik.

    $ oldIFS="$IFS"   # save old value
    $ IFS=':'
    $ while read user password uid gid rest_of_line; do
        if [ "$user" = "bozo" ]; then
          echo "$user's ID is $uid"
        fi
      done < /etc/passwd
    bozo's ID is 1000
    $ IFS="$oldIFS"   # restore old value

(Jika Awk digunakan untuk melakukan yang setara, gunakan "`FS=':'`" untuk mengatur pemisah ruas.)

IFS juga digunakan oleh shell untuk memecah hasil ekspansi parameter, substitusi perintah, dan ekspansi aritmatika. Ini tidak terjadi dalam kata-kata yang dikutip ganda atau tunggal. Nilai baku IFS adalah spasi, tab, dan baris baru digabungkan.

Berhati-hatilah dalam menggunakan trik IFS shell ini. Hal-hal aneh dapat terjadi, ketika shell menafsirkan beberapa bagian dari skrip sebagai masukan.

    $ IFS=":,"                        # use ":" and "," as IFS
    $ echo IFS=$IFS,   IFS="$IFS"     # echo is a Bash builtin
    IFS=  , IFS=:,
    $ date -R                         # just a command output
    Sat, 23 Aug 2003 08:30:15 +0200
    $ echo $(date -R)                 # sub shell --> input to main shell
    Sat  23 Aug 2003 08 30 36 +0200
    $ unset IFS                       # reset IFS to the default
    $ echo $(date -R)
    Sat, 23 Aug 2003 08:30:50 +0200

### 1.6.6. Cuplikan skrip untuk perintah perpipaan

Skrip berikut melakukan hal-hal baik sebagai bagian dari pipa.

Tabel 1.27. Daftar cuplikan skrip untuk perintah perpipaan

cuplikan skrip (ketik dalam satu baris) | efek perintah
--- | ---
`find /usr -print` | cari semua berkas di bawah "`/usr`"
`seq 1 100` | cetak 1 hingga 100
`| xargs -n 1 command` | jalankan perintah berulang kali dengan setiap butir dari pipa sebagai argumennya
`| xargs -n 1 echo` | memecah butir yang dipisah white-space dari pipa ke dalam baris-baris
`| xargs echo` | menggabungkan semua baris dari pipa ke dalam satu baris
`| grep -e regex_pattern` | mengekstrak baris-baris dari pipa yang mengandung pola_regex
`| grep -v -e regex_pattern` | mengekstrak baris-baris dari pipa yang tidak mengandung pola_regex
`| cut -d: -f3 -` | ekstrak ruas ketiga dari pipa yang dipisahkan oleh "`:`" (berkas passwd dll.)
`| awk '{ print $3 }'` | mengekstrak ruas ketiga dari pipa yang dipisah oleh whitespace
`| awk -F'\t' '{ print $3 }'` | mengekstrak ruas ketiga dari pipa yang dipisah oleh tab
`| col -bx` | menghapus backspace dan mengekspansi tab ke spasi
`| expand -` | mengekspansi tab
`| sort| uniq` | mengurutkan dan menghapus duplikat
`| tr 'A-Z' 'a-z'` | mengonversi huruf besar menjadi huruf kecil
`| tr -d '\n'` | menyambung baris-baris menjadi satu
`| tr -d '\r'` | menghapus CR
`| sed 's/^/# /'` | menambahkan "`#`" ke awal setiap baris
`| sed 's/\.ext//g'` | menghapus "`.ext`"
`| sed -n -e 2p` | mencetak baris kedua
`| head -n 2 -` | mencetak 2 baris pertama
`| tail -n 2 -` | mencetak 2 baris terakhir

Skrip shell satu baris dapat mengulang atas banyak berkas menggunakan find(1) dan xargs(1) untuk melakukan tugas yang cukup rumit. Lihat Bagian 10.1.5, “Idiom untuk pemilihan berkas” dan Bagian 9.4.9, “Mengulangi perintah atas berkas”.

Saat menggunakan mode interaktif shell menjadi terlalu rumit, silakan pertimbangkan untuk menulis skrip shell (lihat Bagian 12.1, “Skrip shell”).

[1] Bahkan `vim` yang lebih tua dapat dimulai dalam mode "`nocompatible`" yang waras dengan memulainya dengan opsi "`-N`".

Kata Pengantar |  | Bab 2. Manajemen paket Debian