Dengan OS X Yosemite, menggunakan perintah berikut, saya mendapatkan yang berikut:
$ touch .a
$ touch b
$ /bin/ls
b
$ /bin/ls -A
.a b
$ sudo /bin/ls
.a b
Ini menunjukkan file tersembunyi (yang memiliki nama dimulai dengan titik) ketika dipanggil oleh root dan tidak menunjukkan mereka (seperti yang diharapkan) saat berjalan sebagai pengguna normal. Ini berbeda dari apa yang ls
di Linux (yang berasal dari coreutils
) tidak.
Mengapa ls
berperilaku seperti ini?
BSD
danOSX
lebih sesuai di sini.Jawaban:
Ternyata fitur ini tidak spesifik untuk Apple. Ini adalah fitur sistem BSD secara umum.
Awalnya, saya bisa melacaknya kembali ke sumber 4.4BSD-Lite . Sudah ada dalam komitmen FreeBSD ini sejak tahun 1994 yang mengimpor sumber-sumber tersebut.
Fitur ini juga hadir di OpenBSD dan dapat ditemukan di komit ini dari tahun 1995 yang mengklaim akan mengimpor kode dari NetBSD, jadi ini sudah ada di NetBSD .
Kemudian seseorang menemukan komitmen NetBSD dari tahun 1993 yang mengklaim akan mengimpor kode dari 386BSD , dan fitur tersebut sudah ada di sana . Lebih jauh, komit ini menunjukkan bahwa itu ada di sana selama pengembangan versi 386BSD 0.0 pada tahun 1991 yang bercabang dari BSD sekitar 4.3, sejauh yang saya tahu.
Komentar tersebut muncul untuk pertama kalinya selama pengembangan 4.3BSD-Reno dalam komit ini (27 Juni 1989) berjudul "versi pertama yang berfungsi dari ls baru". Komentar asli mengatakan:
yang diubah kemudian hari itu (saya tidak yakin cap waktu sepenuhnya benar dalam repositori ini) menjadi:
Dan hanya pada tahun 1992 huruf kapital dan periode ditambahkan mengubah komentar menjadi apa yang kita miliki sekarang:
Tetapi perilaku itu hadir di 2BSD pada 9 Mei 1979 seperti yang terlihat dalam cuplikan ini :
Saya tidak dapat menemukan riwayat sebenarnya dari masa-masa itu, tetapi ada juga cuplikan 1BSD dari 1977 tanpa garis-garis itu. Dan tanpa
-A
bendera sebenarnya.Jadi sepertinya fitur tersebut diperkenalkan di suatu tempat antara November 1977 (1BSD sedang dikembangkan saat itu) dan rilis 2BSD pada Mei 1979.
Apa yang juga saya temukan selama investigasi ini, adalah
-I
bendera yang ditambahkan ke FreeBSD pada tahun 2005 untuk mengesampingkan perilaku ini dan dikerjakan ulang sedikit kemudian.sumber
.
bug sederhana -ls
hanya seharusnya menyembunyikan.
direktori, tidak semuanya dimulai dengan.
. Maju cepat selama beberapa dekade, dan biasanya digunakan untuk menyembunyikan file berbahaya dll., Sementara juga digunakan untuk menyembunyikan konfigurasi sistem dll. - jadi masuk akal untuk membiarkan admin melihat file-file tersebut (untuk mempertahankan konfigurasi atau menemukan malware tersembunyi dll.) .Berikut tautan ke kode sumber. Catatan
/* Root is -A automatically. */
. Ini adalah fitur BSD versi Applels
.sumber
Root is -A automatically
string untuk mencari petunjuk.IIRC, ada utas tentang hal ini di masa-masa awal Usenet (awal 80-an). Fitur ini ditambahkan sebagai tindakan pencegahan keamanan sehingga pengguna jahat tidak dapat dengan mudah menyembunyikan file / direktori / executable dari sysadmin / root. Teorinya pada dasarnya adalah "root memiliki akses ke semuanya sehingga harus bisa melihat semuanya".
sumber