Saya ditanya dalam sebuah wawancara mengapa 777 ditugaskan untuk mengambil semua izin untuk sebuah file. Kenapa tidak 555? Dia mengatakan bahwa ada alasan untuk semuanya. Jadi, apa alasan 777? Kenapa tidak ada nomor lain? Apakah ada signifikansi dalam jumlah ini?
permissions
user-management
Halo sayang
sumber
sumber
Jawaban:
Saya akan mencoba untuk membahas alasan mendasar mengapa itu adalah 777, bukan aaa, atau 999.
Ingatlah bahwa izin datang dalam format berikut:
di mana u = pengguna, g = grup, o = lainnya.
Sekarang, bayangkan Anda mewakili masing-masing grup ini sebagai biner. 1 benar, 0 salah.
Jika Anda ingin memberikan akses penuh kepada semua orang, Anda akan menetapkan izin berikut dalam biner:
Sekarang, jika Anda tahu biner, Anda akan menyadari bahwa ketika Anda mengonversi
111
dari biner ke desimal, Anda mendapatkannya7
.Dengan demikian, Anda dapat mewakili akses penuh sebagai
777
.Catatan: Kami benar-benar mengonversi dari biner ke oktal. Lihat hasil edit di bawah.
Ini bekerja untuk semua mode akses lainnya juga.
Sebagai contoh, kita dapat dengan mudah mengetahui apa
555
artinya dengan mengonversikannya5
menjadi biner, dan menuliskannya dalam format di atas.5
dalam biner adalah101
, jadi kami memiliki izin berikut:Demikian pula, jika kami ingin memberikan semua izin kepada pengguna, tetapi hanya mengizinkan orang lain untuk membaca, kami dapat menemukan representasi angka.
Sekarang, kita tahu bahwa
111
dalam biner adalah7
dalam desimal, dan100
dalam biner adalah4
dalam desimal. Dengan demikian, izinnya adalah744
.Sunting:
Secara teknis, seperti yang disorot oleh @ LưuVĩnhPhúc dan @Braiam, kami mengkonversi dari biner ke oktal, seperti dijelaskan di bawah ini. Namun, representasi desimal dan oktal dari angka <8 adalah sama, jadi untuk angka biner dengan 3 digit atau kurang, representasi desimal dan oktal sama.
Ketika direpresentasikan sebagai angka oktal, daripada membaginya menjadi tiga kelompok, dan melakukan konversi biner ke desimal pada masing-masing grup, Anda dapat benar-benar menggabungkan ketiga grup menjadi satu angka biner, dan mengonversinya menjadi oktal.
Misalnya, berikut adalah beberapa konversi biner ke oktal:
Perhatikan bahwa saya menambahkan "0b" dan "0o" untuk membedakan antara angka biner dan oktal.
Jika Anda ingin bermain-main dengan ini, buka terminal, jalankan
python
dan kemudian mainkan dengan perintah berikut:Ingatlah untuk menambahkan "0b" atau "0o" ke angka-angka agar komputer tahu basis apa yang Anda minati. (Jika tidak, ia akan menganggap basis 10.)
sumber
7
adalah sama dalam desimal dan oktal - namun,777
tidak. Ketika Anda berbicara tentang membalik bit, itu membuat perbedaan.777
kadang-kadang disebut sebagai Tuhan.Membaca izin file berarti
4
, menulis izin file berarti2
dan melaksanakan izin file berarti1
.Jadi totalnya adalah ini
7
.Sekarang apa 777: pertama
7
adalah untuk pemilik file yang berarti pemilik file telah membaca, benar dan menjalankan izin.2
7
adalah untuk grup yang dimiliki file tersebut, itu berarti grup juga memiliki semua izin baca, tulis, dan eksekusi.Dan ke
7
- 3 untuk izin orang lainJika Anda memberikan izin file,
555
maka fileowner, group and others
tersebut hanya memilikiread
danexecute
izinnot write
izin karena izin baca berarti 4 dan mengeksekusi berarti 1 sehingga total mendapat5
sumber
Dengan tidak banyak kata sebagai jawaban teratas:
Setiap file memiliki 3 opsi izin: membaca, menulis, dan mengeksekusi. Anda dapat memilih tidak satu pun dari ini, salah satunya, dua di antaranya, atau semuanya:
C (3,0) + C (3,1) + C (3,2) + C (3,3) = 8
1 + 3 + 3 + 1 = 8
Jadi, secara keseluruhan, ada 8 kombinasi; 8 opsi untuk izin. Menghitung dari 0, angka terakhir adalah 7 (dari 0 hingga 7). Jadi, diwakili oleh angka, berikut ini semua opsi:
Ada tiga angka karena urutannya [izin pengguna] [izin grup] [izin lain]
Jadi, 777 berarti bahwa ketiga grup telah membaca, menulis, dan mengeksekusi izin.
Juga (terkait secara tidak langsung sehingga Anda tidak perlu membaca bagian ini), karena saya pikir relevansinya penting: Mengapa
read
nomor 4 dan bukan nomor 3?Satu-satunya cara untuk mendapatkan kombinasi unik untuk semua kemungkinan adalah menggunakan kekuatan 2 untuk opsi dasar. 2 0 = 1 (jalankan), 2 1 = 2 (tulis), 2 2 = 4 (baca), dan jika ada opsi dasar ke-4 itu akan diberi nomor 2 3 = 8. Catatan yang
write
tidak terdaftar sampai semua kombinasi dari opsi sebelumnya telah terdaftar (yang hanya satu opsi, karena hanya sajaexecute
).read
tidak terdaftar sampai semua kombinasi opsi sebelumnya telah terdaftar (sekali lagi satu, karena hanya ada satu kombinasi dengan dua opsi -execute
+write
).execute
+write
+read
tidak terdaftar sampai semua kombinasi sebelumnya terdaftar, yaitu 3, karena sekarang ada dua pilihan dari tiga izin. Daftar akan berlanjut dengan cara ini, tidak peduli berapa banyak opsi dasar yang ada. Sebagai contoh, dengan 4 opsi dasar (perhatikan bahwa kami juga tahu akan ada total 16 kombinasi karena ada 4 opsi dan 2 4 = 16):sumber
Saya terkejut begitu banyak jawaban serupa yang sama sekali meleset dari sasaran.
Setelah menentukan 3 kelas yang dibutuhkan baca, tulis, dan eksekusi. Mereka pergi dengan oktal (3 bit) untuk meminimalkan ruang yang dibutuhkan untuk mengelola sistem file .
sumber
Untuk beberapa alasan, desainer UNIX memutuskan untuk menggunakan nomor OCTAL untuk izin file. Seperti yang Anda ketahui, nilai maksimum untuk satu digit angka oktal adalah 7. Ternyata satu digit oktal untuk akses pengguna, satu untuk akses grup dan satu untuk akses dunia sudah cukup untuk hampir semuanya. Jumlah oktal 3digit maksimum adalah 777, dan itu hanya masuk akal bahwa itu menandakan "akses ke semua orang / segalanya".
sumber
Saat ini, kita semua tahu bahwa byte adalah 8 bit : ini telah disepakati secara universal selama beberapa dekade. Tapi itu tidak selalu terjadi, dan Unix (yang mengilhami Linux dalam banyak hal) ditulis pada saat ini masih diperdebatkan. Secara khusus, itu perlu portabel untuk sistem yang menggunakan 6-bit byte atau 8-bit. Beberapa orang yang menulisnya ada di satu sisi perdebatan, dan yang lain di sisi lain.
Pada catatan terkait, Basis-2 (biner) bukan notasi yang sangat nyaman untuk menuliskan nilai. Saat ini, sebagian besar programmer menulis notasi yang lebih kompak yang menggunakan Base-16 (hexadecimal) sebagai gantinya. 16 adalah basis yang cukup besar sehingga Anda bisa mengemas empat bit menjadi satu hex-digit: misalnya, "0000" dalam biner adalah 0x0 dalam heksadesimal ("0x" adalah cara umum untuk mencatat bahwa Anda akan tulis angka heksadesimal), sedangkan "1111" adalah 0xF (atau 15 dalam desimal). Anda benar-benar dapat menulis kombinasi yang mungkin dari empat bit menggunakan satu digit hex tunggal, hanya dengan menghitung dalam biner, dan karena cara kerja aritmatika posisional, Anda dapat menumpuknya: dua digit hex dapat mengkodekan kemungkinan kombinasi dari delapan bit, hanya dengan menghitung, dan seterusnya. Jadi orang 8-bit menyukai ini.
Orang-orang 6-bit memiliki cara mereka sendiri untuk melakukan ini, tetapi alih-alih menggunakan Basis-16, mereka menggunakan Basis-8 (oktal). Ini memiliki keuntungan yang mirip dengan heksadesimal: Anda dapat menyimpan posisi tiga bit dalam digit oktal, dan Anda dapat menumpuk angka dengan cara yang sama. Jadi seperti halnya orang-orang 8-bit menggunakan dua digit hex untuk byte, orang-orang 6-bit menggunakan dua digit oktal untuk byte. Anda tidak melihat oktal lagi, tetapi biasanya dicatat dengan nol di depan: misalnya, "111" adalah 07 dalam oktal.
Sekarang, apa hubungannya semua ini dengan izin Unix? Sejauh menyangkut Unix, ada tiga hal yang bisa Anda lakukan dengan file: Anda bisa membacanya, Anda bisa menulis ke sana, atau Anda bisa menjalankannya sebagai sebuah program. Jika Anda akan membatasi itu dengan izin, maka Anda perlu sedikit untuk masing-masing: nyalakan untuk hal-hal yang boleh dilakukan seseorang, dan tinggalkan untuk hal-hal yang tidak boleh dilakukan seseorang. Karena ada tiga hal yang dilacak, Anda memerlukan tiga bit, dan karena Unix melacaknya sepanjang tiga baris (pemilik, grup, dan semua orang), Anda membutuhkan total sembilan bit.
Pada titik tertentu, seseorang - mungkin di camp 6-bit - berkata, "Hei, kita bisa menggunakan digit oktal untuk ini" . Dan ini ternyata menjadi notasi yang sangat nyaman: tiga digit oktal hanya cukup untuk menyandikan setiap kombinasi yang mungkin dari bidang bit. Begitu mereka memutuskan untuk melakukan ini, nasib 777 (dan 000) disegel, karena angka-angka itu akan sama tidak peduli bagaimana mereka mengatur bit, tetapi pesanan penting untuk semua angka lainnya, jadi mereka mulai melakukan ini.
Mereka mengatur izin menjadi bidang tiga-bit: membaca di awal, menulis di tengah, dan mengeksekusi di akhir. Kemudian mereka mengatur ladang sendiri: pemilik di awal, kelompok di tengah, dan yang lainnya di akhir. Setelah mereka melakukan ini, yang harus mereka lakukan untuk menetapkan sisa angka adalah hitung.
Karena itu adalah bidang 3-bit, Anda dapat mengatakan bahwa setiap digit oktal mengontrol salah satu bidang : digit pertama mengontrol izin pemilik, digit kedua mengontrol izin grup, dan digit ketiga mengontrol izin lainnya. Dengan demikian, 777 (111 111 111) adalah semua izin untuk semua orang, sedangkan 700 (111 000 000) adalah semua izin hanya untuk pemilik. Kombinasi lain juga umum: 666 (110 110 110) dibaca / ditulis untuk semua orang tetapi tidak dieksekusi), sedangkan 555 (101 101 101) dibaca / dieksekusi untuk semua orang tetapi tidak menulis, dan 400 (100 000 000) dibaca- hanya untuk pemilik dan tidak ada akses untuk orang lain.
Dan itu sebabnya 777 berarti semua izin. Saat ini, itu mungkin alasan paling populer bagi orang untuk menggunakan oktal sama sekali, meskipun Unix dan turunannya masih memiliki beberapa sisa lainnya. Sebagai contoh,,
od
atau Octal Dump, adalah cara untuk mendapatkan kesedihan biner dari file dalam bentuk oktal (memiliki sepupu heksadesimal, disebutxxd
, tetapi itu tidak begitu terkenal dan tidak tersedia di mana-mana). Itu juga mengapa Anda harus berhati-hati dengan memimpin nol dalam beberapa bahasa pemrograman, karena mereka mungkin berpikir bahwa Anda berniat untuk menulis angka dalam oktal ketika itu sebenarnya bukan niat Anda.sumber