File apa pun pada sistem file UNIX yang dirancang secara konvensional yang jumlah rujukannya (mis. Jumlah jumlah hardlink dan jumlah pegangan file terbuka *) mencapai 0 dihapus. Namun, pada sistem UNIX modern, rmdir
pemanggilan sistem menghapus direktori kosong dalam satu operasi daripada menghapus .
dan ..
satu-per-satu.
Namun, dalam sistem UNIX historis, pemanggilan sistem ini tidak ada. Sebaliknya, rmdir
perintahnya adalah program setuid ( kode sumber dapat ditemukan di sini ) yang memeriksa bahwa direktori kosong (selain entri khusus), dan kemudian dihapus ..
dan .
, dalam urutan itu, dan kemudian menghapus direktori itu sendiri, semua dengan unlink
system call yang hanya root yang diizinkan untuk digunakan pada direktori (karenanya mengapa perintah itu ditetapkan). Jadi, pada sistem-sistem itu, jumlah tautan suatu direktori untuk sementara akan menjadi 1 setelah .
dihapus tetapi sebelum direktori dihapus dari direktori induk, maka itu akan menjadi 0.
The rm
perintah, kebetulan, dicegah bahkan akar dari menghapus direktori. Dan rm -r
akan memanggil rmdir
perintah untuk menghapus direktori setelah mengosongkan isinya.
Pada sistem historis ini, menyalahgunakan unlink
panggilan dari program yang berjalan sebagai root, berlari ke kondisi balapan dengan rmdir
atau mv
, atau membuat file dalam suatu proses yang direktori saat ini telah dihapus (sistem modern mencegah ini), dapat mengakibatkan menjuntai file atau direktori yang memiliki jumlah hardlink di atas 0 tetapi tidak ada di pohon direktori. Kondisi ini terdeteksi oleh dcheck
, dan masih menjadi salah satu pemeriksaan fsck
karena masih dimungkinkan secara fisik pada sebagian besar sistem file.
Sistem file , secara kebetulan, tidak diharuskan untuk mengimplementasikan direktori (termasuk .
dan ..
) sebagai file normal yang memiliki hardlink. Pada sistem file ini, jumlah hardlink dari suatu direktori akan selalu dilaporkan sebagai 0
(tetapi tentu saja, keberadaannya di dalam direktori induk memenuhi syarat untuk "jumlah referensi" dari 1).
Perilaku direktori yang dihapus (misalnya ketika diperiksa oleh suatu proses yang sudah terbuka atau memilikinya sebagai direktori saat ini) dan makna yang tepat dari "jumlah tautan" direktori tidak ditentukan. Pada Mac OS X, misalnya, ia akan melaporkan jumlah hardlink 2 , meskipun tidak memiliki hardlink nyata. Meskipun .
dan ..
tidak muncul dalam daftar, direktori dapat dibuka dan stat
dapat dipanggil dengan nama .
atau ..
. Di Linux, jumlah tautannya adalah 0 tetapi .
dan ..
juga masih berfungsi.
Mac OS X juga melaporkan jumlah semua file dalam direktori sebagai jumlah tautan, alih-alih hanya jumlah subdirektori. Tetapi sekarang sudah 2 .
dan ..
sudah tiada.
* Ini termasuk deskriptor terbuka normal, bagian yang dipetakan dengan memori (termasuk misalnya mengeksekusi binari dan perpustakaan bersama), dan memproses direktori saat ini.
..
, hanya ketika memiliki subdirektori, benar? Jadi..
tidak selalu hadir untuk direktori, bukan?