Pada Chapter Navigasi Direktori kita sudah berpindah-pindah dengan cd dan memeriksa posisi dengan pwd; sekarang kita bedah bahan bakarnya: path, yaitu cara Linux menuliskan alamat sebuah file atau direktori. Ada dua cara menulis path: absolut, yang selalu dimulai dari akar / dan berarti sama di posisi mana pun, serta relatif, yang dihitung dari direktori kerja kita saat ini. Pada Chapter ini kita melatih keduanya, memahami notasi . dan .., lalu mengurai path menjadi potongan yang berguna dengan readlink, realpath, dirname, dan basename.

Path Absolut Selalu Dimulai dari Akar #

Path absolut mudah dikenali: karakter pertamanya adalah /. Karena penunjuk arahnya sudah jelas — mulai dari akar pohon — path absolut tidak pernah bergantung pada posisi kita ketika mengetiknya. Path /etc/os-release menunjuk file yang sama, baik kita berada di home directory, di /tmp, maupun di mana pun. Mari kita buktikan dua bentuk perpindahan sekaligus:

bash
mkdir -p latihan-path/dokumen/laporan
cd latihan-path/dokumen
pwd
cd /etc
pwd
cd "$HOME/latihan-path/dokumen/laporan"
pwd

Output yang Dihasilkan:

text
/home/budi/latihan-path/dokumen
/etc
/home/budi/latihan-path/dokumen/laporan

Mari kita telaah baris-baris di atas:

  1. Baris 1 (mkdir -p ...): membuat struktur tiga tingkat sekaligus di bawah home directory.
  2. Baris 2-3 (cd latihan-path/dokumen lalu pwd): perpindahan relatif — shell menghitung latihan-path/dokumen dari direktori kerja saat ini, yaitu home directory. Perhatikan bahwa pwd tetap mencetak hasil akhirnya sebagai path absolut.
  3. Baris 4-5 (cd /etc lalu pwd): perpindahan absolut — path dimulai dari / sehingga posisi sebelumnya tidak berpengaruh.
  4. Baris 6-7 (cd "$HOME/..." lalu pwd): variabel HOME berkembang menjadi path absolut home directory (/home/budi di mesin latihan), sehingga gabungannya juga absolut. Di komputer pembaca, nilainya mengikuti nama user masing-masing, misalnya /home/siti.

Bentuk "$HOME/..." adalah cara paling aman menulis alamat home directory dalam skrip: alamatnya tetap benar di komputer siapa pun tanpa perlu menebak nama user. Bagaimana kernel membaca path langkah demi langkah dijabarkan rinci pada halaman manual path_resolution(7) .

Path Relatif Berangkat dari Posisi Sekarang #

Path relatif tidak diawali /, sehingga artinya melekat pada lokasi kita saat mengetik. Dua nama khusus memperkaya notasi ini: . berarti “direktori sekarang” dan .. berarti “direktori induk satu tingkat di atas”. Keduanya bisa dirangkai dengan nama biasa seperti biasa:

NotasiArti
./laporansubdirektori laporan di posisi sekarang
../dokumennaik satu tingkat, lalu masuk ke dokumen
../..naik dua tingkat sekaligus
./penjualan.txtfile penjualan.txt di direktori sekarang

Mari kita praktikkan kombinasinya pada struktur yang sama:

bash
mkdir -p latihan-path/dokumen/laporan
printf 'v1\n' > latihan-path/dokumen/laporan/penjualan.txt
cd latihan-path/dokumen/laporan
pwd
ls ..
cat ./penjualan.txt
cat ../laporan/penjualan.txt

Output yang Dihasilkan:

text
/home/budi/latihan-path/dokumen/laporan
laporan
v1
v1

Mari kita telaah baris-baris di atas:

  1. Baris 3 (cd latihan-path/dokumen/laporan): turun sampai ke folder terdalam.
  2. Baris 4 (pwd): mencetak posisi baru sebagai path absolut — shell selalu tahu alamat lengkap kita.
  3. Baris 5 (ls ..): mendaftar isi .., yaitu folder dokumen; satu-satunya isiannya adalah laporan.
  4. Baris 6 (cat ./penjualan.txt): membaca file di direktori sekarang; awalan ./ boleh ditulis eksplisit untuk menegaskan maksud.
  5. Baris 7 (cat ../laporan/penjualan.txt): naik satu tingkat ke dokumen, lalu turun lagi ke laporan — melebar sebentar tapi mendarat di file yang sama, terbukti dari isi v1 yang tercetak dua kali.

Kadang kita butuh bentuk absolut dari sebuah path relatif — misalnya skrip yang harus mencatat lokasi file secara penuh di log-nya. Dua perintah siap menelusurinya: readlink -f dan realpath. Keduanya menormalkan path: mengurai setiap komponen . dan .., lalu mencetak hasil absolut yang setara:

bash
mkdir -p latihan-path/dokumen/laporan
printf 'v1\n' > latihan-path/dokumen/laporan/penjualan.txt
cd latihan-path
readlink -f dokumen/laporan/penjualan.txt
realpath dokumen/laporan

Output yang Dihasilkan:

text
/home/budi/latihan-path/dokumen/laporan/penjualan.txt
/home/budi/latihan-path/dokumen/laporan

Kedua hasilnya identik dengan menuliskan alamat lengkap dari akar. Perbedaan keduanya tipis: readlink lahir untuk membaca isi symlink (materi Chapter Symbolic Links dan Hard Links) dan opsi -f memintanya menelusuri jalur sampai file sungguhan, sedangkan realpath memang dirancang khusus untuk menormalkan path. Keduanya juga menelusuri symlink yang muncul di tengah jalur, sehingga hasilnya selalu alamat final, bukan alamat perantara.

Memecah Path dengan dirname dan basename #

Dua perintah terakhir memotong path menjadi bagiannya. dirname mencetak bagian direktori — semua sebelum garis miring terakhir — sedangkan basename mencetak nama entri terakhir. Keduanya bekerja murni pada teks path: tidak ada pengecekan apakah file tersebut sungguh ada di disk, sehingga aman dipakai untuk path hipotetis sekalipun:

bash
path=latihan-path/dokumen/laporan/penjualan.txt
dirname "$path"
basename "$path"
basename "$path" .txt

Output yang Dihasilkan:

text
latihan-path/dokumen/laporan
penjualan.txt
penjualan

Mari kita telaah baris-baris di atas:

  1. Baris 1 (path=...): menyimpan contoh path dalam variabel path; tanda sama dengan menempel tanpa spasi di kiri-kanannya.
  2. Baris 2 (dirname "$path"): mencetak latihan-path/dokumen/laporan — lokasi folder tempat file itu berada.
  3. Baris 3 (basename "$path"): mencetak penjualan.txt, nama file itu sendiri.
  4. Baris 4 (basename "$path" .txt): argumen kedua meminta akhiran .txt ikut dibuang, menyisakan penjualan — trik yang sering dipakai untuk membangun nama file keluaran dari nama file masukan.

Kombinasi ini mengisi banyak baris skrip nyata: mengambil daftar file, memotong namanya, lalu menulis hasil olahan di folder yang sama. Rincian kedua perintah tercantum pada halaman manual basename(1) .

Kita kini bisa menulis alamat file dengan dua gaya dan mengurainya menjadi bagian-bagian. Pertanyaan berikutnya menyangkut file itu sendiri: di Linux, “file” ternyata bukan hanya dokumen dan folder — ada tujuh jenis entri yang bisa menempati pohon, dan ekstensi nama sama sekali tidak menentukan jenisnya — materi Chapter File Types dan File Extensions.