Filosofi Linux yang paling sering dikutip berbunyi everything is a file: konfigurasi, program, bahkan perangkat keras dijangkau lewat path dan perintah yang sama. Namun bila dibedah, kata “file” itu sendiri mencakup tujuh jenis entri yang berbeda — dari file reguler tempat dokumen kita tersimpan sampai saluran khusus yang dipakai proses untuk saling berbicara. Pada Chapter ini kita mengenali ketujuh jenis itu, menandainya dengan ls -F, stat, dan ls -l, lalu membuktikan bahwa ekstensi seperti .txt dan .jpg sesungguhnya tidak menentukan apa pun bagi Linux.
Tujuh Jenis File di Linux #
Setiap entri di pohon direktori membawa catatan jenisnya di inode — struktur data tempat kernel menyimpan identitas sebuah file. Tanda jenis itu paling mudah dilihat pada karakter pertama kolom ls -l, dan ketujuhnya dirangkum berikut:
| Jenis | Tanda ls -l | Contoh | Peran |
|---|---|---|---|
| Regular file | - | catatan.txt | dokumen, program, gambar, arsip |
| Directory | d | proyek | wadah berisi entri lain |
| Symbolic link | l | tautan | nama yang menunjuk entri lain |
| Character device | c | /dev/null | perangkat yang mengalir per karakter |
| Block device | b | /dev/sda | perangkat blok seperti disk |
| FIFO (named pipe) | p | pipa | saluran dua arah antar proses |
| Socket | s | /run/*.sock | titik komunikasi proses lokal |
Empat jenis pertama menyita hampir seluruh kehidupan harian kita; tiga sisanya lebih teknis. Character dan block device adalah pintu menuju perangkat keras atau tiruannya — /dev/null misalnya, “lubang hitam” yang menelan semua data yang dituliskan kepadanya. FIFO dipakai dua proses untuk bertukar data lewat nama file, dan socket menjadi alamat komunikasi layanan lokal seperti daemon. Uraian resmi semua jenis ini tercantum pada halaman manual inode(7)
.
Menandai Jenis dengan ls -F #
Option -F menempelkan satu tanda di belakang setiap nama sehingga jenisnya terbaca sekilas. Kita siapkan satu folder berisi empat jenis:
mkdir -p proyek
printf 'v1\n' > data.txt
printf '#!/bin/bash\necho halo\n' > salam.sh
chmod +x salam.sh
ln -s data.txt tautan
mkfifo pipa
ls -FOutput yang Dihasilkan:
data.txt
pipa|
proyek/
salam.sh*
tautan@Mari kita telaah baris-baris di atas:
- Baris 1 (
mkdir -p proyek): membuat direktori contoh. - Baris 2-4 (
printf ... ; chmod +x): membuat dua file reguler;salam.shdiberi hak eksekusi lewatchmod +x. - Baris 5-6 (
ln -s ... ; mkfifo ...): membuat symbolic linktautanyang menunjukdata.txt(bedah tuntasnya menyusul di Chapter Symbolic Links dan Hard Links) dan FIFO bernamapipa. - Baris 7 (
ls -F): mendaftar kelima entri beserta tandanya:/untuk direktori,*untuk file yang punya hak eksekusi,@untuk symlink,|untuk FIFO.
Perhatikan bahwa file reguler data.txt tidak membawa tanda apa pun — kebalikan dari kebiasaan Windows yang menandai direktori, bukan file. Tanda * pada salam.sh pun berasal dari hak eksekusinya, bukan dari akhiran .sh: menghapus chmod +x akan menghilangkan tanda bintang seketika.
Menanyakan Jenis Secara Langsung dengan stat #
Untuk jawaban dalam bentuk kata, stat dengan format %F mencetak jenis setiap entri yang diberikan. Kita uji pada fixture yang sama ditambah /dev/null dari sistem sungguhan:
mkdir -p proyek
printf 'v1\n' > data.txt
ln -s data.txt tautan
mkfifo pipa
stat -c '%F %n' data.txt proyek tautan pipa /dev/nullOutput yang Dihasilkan:
regular file data.txt
directory proyek
symbolic link tautan
fifo pipa
character special file /dev/nullLima baris hasil menjawab lima jenis: regular file, directory, symbolic link, fifo, dan character special file. Perintah stat yang sama mengurus detail inode lain — ukuran, pemilik, jumlah hard link — dengan format pilihan kita. Dua jenis tersisa, block device dan socket, melekat pada perangkat dan layanan sungguhan sehingga tidak bisa diciptakan secuil latihan; keduanya tetap dikenali dengan cara yang sama, misalnya stat -c '%F' /dev/sda pada komputer berdisk SATA.
Huruf Jenis pada Kolom Pertama ls -l #
Bentuk ls -l menampilkan huruf jenis berdampingan dengan permission dan waktu modifikasi. Karena waktu itu berbeda-beda di setiap komputer, berikut contoh tampilan pada folder latihan, bukan output terverifikasi:
total 8
drwxr-xr-x 2 budi budi 4096 Jan 15 08:30 proyek
-rw-r--r-- 1 budi budi 2 Jan 15 08:31 data.txt
lrwxrwxrwx 1 budi budi 8 Jan 15 08:31 tautan -> data.txt
prw-r--r-- 1 budi budi 0 Jan 15 08:31 pipaKarakter pertama tiap baris adalah huruf jenis dari tabel di awal: d, -, l, dan p; sembilan karakter sisanya menyandikan permission (materi Section User dan Permissions). Baris symlink ditutup -> data.txt yang menunjuk targetnya — satu pandangan cukup untuk tahu bahwa tautan bukan file sungguhan melainkan penunjuk.
Ekstensi Hanyalah Konvensi #
Inilah kejutan bagi pendatang dari Windows: kernel Linux tidak pernah membaca ekstensi untuk menentukan jenis maupun perlakuannya. Nama laporan.txt dan laporan sama-sama valid untuk file teks; yang membuat sebuah file bisa dijalankan adalah hak eksekusi, bukan akhiran .exe atau .sh. Ekstensi tetap dipakai luas karena membantu manusia dan sebagian aplikasi — file manager memilih ikon dengannya, editor menebak bahasa — tetapi itu kebiasaan, bukan mekanisme sistem.
Cara paling jujur mengetahui isi sebuah file adalah perintah file, yang membaca beberapa byte pertama dari isi file — disebut magic number — untuk menebak jenisnya. Kita buat empat file dengan nama yang sengaja menyesatkan:
printf 'Halo dari file teks\n' > catatan.txt
cp catatan.txt catatan-tanpa-ekstensi
printf 'teks menyamar\n' > foto.jpg
printf '#!/bin/bash\necho halo\n' > salam
file catatan.txt catatan-tanpa-ekstensi foto.jpg salamOutput yang Dihasilkan:
catatan.txt: ASCII text
catatan-tanpa-ekstensi: ASCII text
foto.jpg: ASCII text
salam: Bourne-Again shell script, ASCII text executableMari kita telaah baris-baris di atas:
- Baris 1-2 (
printf ... ; cp ...): membuat file tekscatatan.txtlalu menyalin isinya kecatatan-tanpa-ekstensi— isi keduanya identik, beda hanya nama. - Baris 3 (
printf ... > foto.jpg): membuat file bernamafoto.jpgyang isinya teks biasa, bukan gambar. - Baris 4 (
printf ... > salam): membuat file tanpa ekstensi yang diawali baris#!/bin/bash(shebang). - Baris 5 (
file ...): memeriksa keempatnya sekaligus.
Hasilnya konsisten pada isi, bukan nama: catatan.txt dan catatan-tanpa-ekstensi sama-sama dilaporkan ASCII text, foto.jpg juga ASCII text meski namanya mengklaim gambar, dan salam dikenali sebagai Bourne-Again shell script karena shebang di baris pertamanya. Daftar jenis lain yang dikenal file terdokumentasi pada halaman manual file(1)
.
Kita kini bisa membaca jenis setiap entri dengan tiga cara dan tahu bahwa nama hanyalah label. Satu kebiasaan penamaan di Linux masih tertinggal dan sering membuat bingung: nama yang diawali titik, yang oleh ls polos seolah-olah tidak ada — materi Chapter Hidden Files.