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:
mkdir -p latihan-path/dokumen/laporan
cd latihan-path/dokumen
pwd
cd /etc
pwd
cd "$HOME/latihan-path/dokumen/laporan"
pwdOutput yang Dihasilkan:
/home/budi/latihan-path/dokumen
/etc
/home/budi/latihan-path/dokumen/laporanMari kita telaah baris-baris di atas:
- Baris 1 (
mkdir -p ...): membuat struktur tiga tingkat sekaligus di bawah home directory. - Baris 2-3 (
cd latihan-path/dokumenlalupwd): perpindahan relatif — shell menghitunglatihan-path/dokumendari direktori kerja saat ini, yaitu home directory. Perhatikan bahwapwdtetap mencetak hasil akhirnya sebagai path absolut. - Baris 4-5 (
cd /etclalupwd): perpindahan absolut — path dimulai dari/sehingga posisi sebelumnya tidak berpengaruh. - Baris 6-7 (
cd "$HOME/..."lalupwd): variabelHOMEberkembang menjadi path absolut home directory (/home/budidi 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:
| Notasi | Arti |
|---|---|
./laporan | subdirektori laporan di posisi sekarang |
../dokumen | naik satu tingkat, lalu masuk ke dokumen |
../.. | naik dua tingkat sekaligus |
./penjualan.txt | file penjualan.txt di direktori sekarang |
Mari kita praktikkan kombinasinya pada struktur yang sama:
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.txtOutput yang Dihasilkan:
/home/budi/latihan-path/dokumen/laporan
laporan
v1
v1Mari kita telaah baris-baris di atas:
- Baris 3 (
cd latihan-path/dokumen/laporan): turun sampai ke folder terdalam. - Baris 4 (
pwd): mencetak posisi baru sebagai path absolut — shell selalu tahu alamat lengkap kita. - Baris 5 (
ls ..): mendaftar isi.., yaitu folderdokumen; satu-satunya isiannya adalahlaporan. - Baris 6 (
cat ./penjualan.txt): membaca file di direktori sekarang; awalan./boleh ditulis eksplisit untuk menegaskan maksud. - Baris 7 (
cat ../laporan/penjualan.txt): naik satu tingkat kedokumen, lalu turun lagi kelaporan— melebar sebentar tapi mendarat di file yang sama, terbukti dari isiv1yang tercetak dua kali.
Menelusuri Path Sampai Tuntas dengan readlink dan realpath #
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:
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/laporanOutput yang Dihasilkan:
/home/budi/latihan-path/dokumen/laporan/penjualan.txt
/home/budi/latihan-path/dokumen/laporanKedua 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:
path=latihan-path/dokumen/laporan/penjualan.txt
dirname "$path"
basename "$path"
basename "$path" .txtOutput yang Dihasilkan:
latihan-path/dokumen/laporan
penjualan.txt
penjualanMari kita telaah baris-baris di atas:
- Baris 1 (
path=...): menyimpan contoh path dalam variabelpath; tanda sama dengan menempel tanpa spasi di kiri-kanannya. - Baris 2 (
dirname "$path"): mencetaklatihan-path/dokumen/laporan— lokasi folder tempat file itu berada. - Baris 3 (
basename "$path"): mencetakpenjualan.txt, nama file itu sendiri. - Baris 4 (
basename "$path" .txt): argumen kedua meminta akhiran.txtikut dibuang, menyisakanpenjualan— 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.