> ## Documentation Index
> Fetch the complete documentation index at: https://docs.skanesgalab.my.id/llms.txt
> Use this file to discover all available pages before exploring further.

# Operator Shell: Pipa (Pipe), Redirection & Simbol Khusus Linux

> Panduan mendalam operator shell Linux: Pipe (|), Redirection (>, >>, <), Operator Logika (&&, ||, ;), Karakter Wildcard (*, ?), Subshell, dan Eksekusi Background (&).

Dalam sistem operasi berbasis Unix/Linux, berlaku filosofi legendaris:

> *"Tulis program yang hanya melakukan satu hal dengan sangat baik. Tulis program yang dapat bekerja sama. Tulis program yang menangani aliran teks, karena itu adalah antarmuka universal."* — Doug McIlroy

Kekuatan magis terminal Linux bukan berasal dari satu perintah raksasa, melainkan dari kemampuan **menggabungkan (*chaining*) beberapa perintah kecil menggunakan Pipa (Pipe) dan Simbol Khusus**.

***

## 1. Operator Pipa (*Pipe* — `|`)

Simbol pipa (**`|`**) mengambil luaran (*Standard Output - stdout*) dari perintah di sebelah kiri, lalu langsung menjadikannya sebagai masukan (*Standard Input - stdin*) bagi perintah di sebelah kanan.

```mermaid theme={null}
flowchart LR
    Cmd1["Perintah 1\n(cat /var/log/nginx/access.log)"] -->|stdout diumpankan via Pipe (|)| Cmd2["Perintah 2\n(grep '404')"]
    Cmd2 -->|stdout diumpankan via Pipe (|)| Cmd3["Perintah 3\n(wc -l)"]
    Cmd3 --> Term["Terminal Output: '124'"]
```

### Contoh Kombinasi Sakti Pipe:

```bash theme={null}
# 1. Menghitung berapa banyak proses yang sedang berjalan
ps aux | wc -l

# 2. Melihat 10 proses yang paling boros memakan RAM server
ps aux --sort=-%mem | head -n 11

# 3. Mencari IP pengakses yang paling sering memicu error 404 di Nginx:
cat /var/log/nginx/access.log | grep " 404 " | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 5
# Alur: Baca file -> Filter status 404 -> Ambil kolom IP -> Urutkan -> Hitung frekuensi -> Urutkan terbanyak -> Ambil 5 teratas!
```

***

## 2. Operator Pengalihan (*I/O Redirection* — `>`, `>>`, `<`)

Secara default, Linux memiliki 3 aliran data (*Standard Streams*):

* **File Descriptor 0 (stdin):** Input standar dari keyboard.
* **File Descriptor 1 (stdout):** Output standar ke layar terminal.
* **File Descriptor 2 (stderr):** Pesan kesalahan (error) ke layar terminal.

### Tabel Operator Redirection:

| Simbol | Nama Operator | Fungsi & Cara Kerja |
| :- | :- | :- |
| **`>`** | Overwrite Redirection | Mengalihkan output ke file baru. **Menimpa (*menghapus*)** isi file lama jika file sudah ada. |
| **`>>`** | Append Redirection | Mengalihkan output ke file. **Menambahkan baris di ujung akhir file** tanpa menghapus isi lama. |
| **`<`** | Input Redirection | Mengambil input dari isi sebuah berkas alih-alih dari ketikan keyboard. |
| **`2>`** | Error Redirection | Mengalihkan HANYA pesan kesalahan (*stderr*) ke file tertentu. |
| **`&>`** atau `2>&1` | Combine Redirection | Mengalihkan output normal (*stdout*) DAN pesan error (*stderr*) secara bersamaan. |
| **`2>/dev/null`** | Black Hole (Silence) | Membuang seluruh pesan error agar layar terminal tidak terganggu teks error izin ditolak (*Permission Denied*). |

### Contoh Penggunaan Nyata:

```bash theme={null}
# Menyimpan daftar file ke file teks baru (menimpa)
ls -la /etc > daftar_konfigurasi.txt

# Menambahkan catatan waktu log baru (append tanpa menghapus)
echo "Backup selesai pada $(date)" >> /var/log/backup.log

# Restore database MySQL dari file backup SQL
mysql -u root -p basisdata < backup_kemarin.sql

# Mencari file di seluruh server dan membuang ratusan pesan "Permission Denied"
find / -name "*.conf" 2>/dev/null

# Menjalankan skrip cron dan mencatat semua output sukses maupun error ke 1 file log
/opt/myscript.sh > /var/log/cron.log 2>&1
```

***

## 3. Operator Pengendali Alur Logika (`&&`, `||`, `;`)

Mengatur kondisi bagaimana perintah selanjutnya harus dieksekusi:

### 1. Operator AND (`&&`)

Perintah kedua **HANYA AKAN DIJALANKAN JIKA perintah pertama berhasil (exit code 0)**.

```bash theme={null}
# Update repo, dan jika SUKSES lanjutkan langsung upgrade sistem
sudo apt update && sudo apt upgrade -y

# Masuk ke folder proyek, dan JIKA BERHASIL jalankan build
cd /opt/myapp && npm run build
# (Jika folder /opt/myapp tidak ada, npm tidak akan dieksekusi di tempat yang salah!)
```

### 2. Operator OR (`||`)

Perintah kedua **HANYA AKAN DIJALANKAN JIKA perintah pertama GAGAL (exit code non-zero)**.

```bash theme={null}
# Ping Google, jika gagal kirim pesan peringatan
ping -c 1 8.8.8.8 >/dev/null || echo "Koneksi internet terputus!"
```

### 3. Operator Titik Koma (`;`)

Menjalankan perintah secara berurutan satu per satu, **tidak peduli** apakah perintah sebelumnya sukses atau gagal.

```bash theme={null}
echo "Perintah 1"; sleep 2; echo "Perintah 2"
```

***

## 4. Eksekusi Latar Belakang (*Background Job* — `&`)

Secara default perintah berjalan di latar depan (*foreground*) dan mengunci terminalmu sampai selesai.

* **`&` (Ampersand Tunggal):** Menjalankan perintah di latar belakang (*background*), sehingga kamu bisa langsung mengetikkan perintah lain di terminal.

```bash theme={null}
# Menjalankan script Python di background
python3 worker.py &
# Output: [1] 2345 (Job ID 1, Process ID 2345)
```

### Manajemen Job Shell:

* **`jobs`:** Melihat daftar proses background di terminal saat ini.
* **`fg %1`:** Mengembalikan job nomor 1 ke layar depan (*foreground*).
* **`Ctrl + Z`:** Menjeda sementara proses foreground yang sedang berjalan.
* **`bg %1`:** Melanjutkan proses yang tadi dijeda agar berjalan di background.
* **`nohup command &`:** Memastikan proses tetap berjalan di server meskipun koneksi SSH kamu terputus atau laptopmu ditutup.

***

## 5. Karakter Wildcard (Pencocokan Pola — `*`, `?`, `[]`)

Karakter pengganti untuk memilih banyak berkas sekaligus:

* **`*` (Asterisk):** Mencocokkan nol, satu, atau banyak karakter sembarang apa saja.
  ```bash theme={null}
  rm *.log          # Menghapus semua file yang berakhiran ekstensi .log
  cp backup_* /tmp/ # Menyalin semua file yang berawalan kata "backup_"
  ```
* **`?` (Tanda Tanya):** Mencocokkan tepat **satu** karakter sembarang.
  ```bash theme={null}
  ls file?.txt      # Mencocokkan file1.txt, fileA.txt (tetapi TIDAK mencocokkan file10.txt)
  ```
* **`[abc]` atau `[0-9]` (Karakter Set):** Mencocokkan satu karakter yang berada di dalam tanda kurung siku.
  ```bash theme={null}
  ls gambar[1-3].jpg # Hanya mencocokkan gambar1.jpg, gambar2.jpg, gambar3.jpg
  ```

***

## 6. Substitusi Perintah (*Command Substitution* — `$()`)

Menyuntikkan luaran dari suatu perintah langsung ke dalam argumen perintah lain:

```bash theme={null}
# Membuat file backup dengan nama yang otomatis memuat tanggal hari ini
tar -czvf backup-$(date +%Y-%m-%d).tar.gz /var/www/html

# Mematikan semua container docker yang sedang berjalan
docker stop $(docker ps -q)

# Menghitung berapa baris file konfigurasi yang ada di /etc
echo "Terdapat $(ls /etc | wc -l) berkas di direktori konfigurasi."
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.