Mengapa menggunakan `chmod 644` alih-alih` chmod u = rw, go = r, ... `?

38

Saya telah mengerjakan * nix selama beberapa tahun sekarang, dan salah satu hal yang saya tidak bisa biasakan adalah izin oktal dalam kode. Apakah ada alasan lain selain panjang garis yang chmod 644 ...lebih disukai chmod u=rw,go=r ...?

PS: Saya tidak mencari penjelasan tentang izin oktal. Saya tahu cara kerjanya, dan dijelaskan dengan baik dalam manual. Saya bertanya mengapa oktal tampaknya lebih disukai daripada bentuk yang lebih bisa dibaca manusia.

l0b0
sumber

Jawaban:

40

Menggunakan kode oktal memiliki dua keunggulan yang dapat saya pikirkan, yang keduanya tidak begitu besar:

  1. Mereka lebih pendek, lebih mudah untuk mengetik.
  2. Beberapa hal hanya memahaminya, dan jika Anda menggunakannya secara rutin, Anda tidak akan menggaruk-garuk kepala (atau berlari ke dokumentasi) saat Anda bertemu dengannya. Misalnya, Anda harus menggunakan oktal untuk chmoddi Perl atau C.

Terkadang utilitas yang sangat sederhana tidak akan menangani versi "ramah"; khususnya di wilayah pengguna non-GNU.

Lebih lanjut, beberapa utilitas memuntahkan oktal. Misalnya, jika Anda menjalankan umaskuntuk melihat apa umask Anda saat ini, ia akan memuntahkannya dalam oktal (meskipun dalam bash, umask -Stidak simbolik).

Jadi, singkatnya, saya akan mengatakan satu-satunya alasan untuk memilih mereka adalah untuk mengetik lebih sedikit karakter, tetapi bahkan jika Anda memilih untuk tidak menggunakannya, Anda harus tahu bagaimana mereka memetakan sehingga Anda dapat mengetahui kode oktal jika Anda menjalankan menjadi salah satu hal yang hanya oktal. Tapi Anda tidak perlu langsung tahu bahwa 5 peta untuk rx, Anda hanya perlu dapat mengetahui itu.

derobert
sumber
1
Mengatakan bahwa chmoddalam Perl atau C perlu menggunakan representasi oktal tidak benar-benar keuntungan mengingat representasi sudah ada di tempat pertama.
n0pe
@ MaxMackie: Ini keuntungan bagi Anda menggunakannya. Saya akan mengklarifikasi.
derobert
18

Kira saya sudah menggunakan oktal terlalu lama.

7 adalah rwx (melakukan apa saja dengan itu), 5 adalah rx (harus membacanya untuk menjalankannya), 6 adalah wr (file data apa pun yang perlu Anda modifikasi), 4 adalah r (kami akan membiarkan Anda melihatnya), dan 0 adalah - (maaf, tidak ada yang bisa dilihat di sini). Dan urutannya adalah Aku, Kita, Semuanya. Ini adalah kombinasi dasar.

755 Saya bisa mengubah dan menjalankannya, semua orang bisa menjalankannya.

644 Saya bisa mengubahnya, semua orang bisa membacanya.

444 Baca hanya untuk semua orang, kami lewat sini.

500 saya bisa menjalankannya, tidak ingin itu berubah, semua orang lepas tangan.

Bagi saya, singkat, to the point. 9 karakter dan spesifikasi file dan teruskan.

Laboratorium Fiasco
sumber
Nah, oktal (basis-8), bukan hex (basis-16).
derobert
Yap, yang itu, setengah hex. <grin>
Fiasco Labs
Sama di sini, saya menemukan oktal lebih mudah dibaca daripada versi teks ...
Brian Knoblauch
13

Saya tidak pernah benar-benar menikmati representasi oktal, saya selalu menggunakan rwxr-xr-xnotasi langsung karena tampaknya lebih sederhana bagi saya. Namun, dari apa yang saya kumpulkan, perwakilan oktal ada untuk benar-benar membuatnya lebih mudah bagi kita untuk mengingat (saya tidak melihat bagaimana cara kerjanya).

Satu-satunya manfaat lain yang mungkin saya lihat membawa oktal ke meja adalah kurangnya ambiguitas. 8 konfigurasi bit izin yang berbeda diwakili oleh satu nomor berbeda, yang saya yakin membantu beberapa orang secara tidak sengaja menempatkan di wtempat yang seharusnya tidak mereka miliki.

Sayangnya, saya hafal tabel ini:

#  r  w  x
0  0  0  0
1  0  0  1
2  0  1  0
3  0  1  1
4  1  0  0
5  1  0  1
6  1  1  0
7  1  1  1
n0pe
sumber
8
Saya mempelajarinya sebagai menggunakan biner untuk setiap set 3. jadi rw ------- akan menjadi (110) (000) (000), yaitu (6) (0) (0). rwxr-xr-x adalah (111) (101) (101), jadi (7) (5) (5).
Rob
4
The utama alasan representasi oktal ada adalah karena itulah bagaimana sistem izin Unix asli diprogram, dari C. 4 oktal digit (ingat yang khusus, seperti 1777 untuk /tmp, termasuk bit sticky) mengambil 12 bit, ukuran yang nyaman di PDPs, khususnya PDP-8. Jika mereka menggunakan hex, pemetaan alami satu set izin per hex digit akan membutuhkan mesin 16-bit + kata, yang tidak semua PDP. Itu juga akan membuang-buang 3 bit atau mengharuskan mereka menciptakan penggunaan untuk bit-bit itu, yang mungkin akan mempersulit perms Unix tanpa manfaat nyata.
Warren Young
⁺¹ pergi ke @Rob btw. Memang, setelah itu menghitung angka aktual dari representasi biner adalah kombinatorik dasar, dan Anda bahkan tidak perlu mengingat tentang memiliki "oktal" karena jumlah maksimum (yaitu 111b) tidak akan melebihi 7.
Hi-Angel
Tabel ini membuatnya sangat jelas. Itu keren!!!
Little Roys
6

Saya pikir alasannya lagi - sejarah. Pada awalnya nilai oktal adalah satu-satunya. Yang simbolis datang kemudian.

Saya lebih suka yang simbolis. Terutama jika Anda ingin mengubah nilai yang ada tanpa menyentuh bagian lain.

Seperti chmod -R u=rwx,g-w+X,o=-melakukan itu di oktal ...

Nils
sumber
3

Perhatikan bahwa mode oktal dapat menghapus bit setuid dan setgid pada beberapa sistem.

Fedora 16:

$ mkdir dir
$ chmod 2775 dir
$ stat -c %a dir
2775
$ chmod 770 dir
$ stat -c %a dir
2770

( 2dilestarikan)

FreeBSD 9:

$ mkdir dir
$ chmod 2775 dir
$ stat -f %Mp%Lp dir
2775
$ chmod 770 dir
$ stat -f %Mp%Lp dir
0770

( 2a menjadi 0)

Jika Anda ingin mengubah izin file atau direktori, lebih baik tentukan bit yang ingin Anda ubah (mis. chmod o= dirAtau chmod o-rwx dirdalam contoh di atas).

Mikel
sumber
2

Sejarah menjelaskan mengapa mode oktal ada , tapi saya pikir fungsionalitas adalah alasan mengapa bentuk mnemonik ada. Dan semua poin tentang alat-alat lain menggunakan mode oktal secara eksklusif sangat valid dan saya pikir Anda harus belajar dan mengenal mereka. Namun demikian saya menemukan bahwa admin konservatif tidak melihat utilitas sejati yang berasal dari bentuk mnemonik.

Bentuk oktal, terutama ketika digunakan secara rekursif, cenderung memaksa admin untuk melakukan hal-hal bodoh. Atau lebih tepatnya menambahkan hasil kelalaian di dalamnya ternyata bodoh. Setiap kali Anda menjalankan beberapa folder dengan banyak file teks dan xbit yang diset, Anda punya bukti.

Mengapa ada orang yang mengatur xbit seperti itu? Karena sulit untuk tidak kecuali Anda menggunakan bentuk mnemonik untuk mode. Pertimbangkan bahwa Anda ingin mengatur ulang izin /var/wwwdan Anda tidak menjalankan CGI gaya lama, sehingga xbit tersebut harus dihapus. Namun, xbit melayani tujuan lain pada direktori. Jadi Anda akhirnya melakukan sesuatu rootseperti:

chmod -R 666 /var/www
find /var/www -type d -exec chmod 777 {} \;

Namun, jika Anda menggunakan formulir mnemonik, Anda bisa memberinya "resep":

chmod -R a=rwX /var/www

yang merupakan bentuk singkat chmod -R ugo=rwX /var/www(mencapai jalan yang sama, tetapi berbeda:) chmod -R a-x,a+rwX /var/www.

Tetapi ada hal lain yang lebih sepele yang tidak dapat dicapai dengan mode oktal. Anda tidak dapat menyesuaikan useratau groupatau othermasker secara individual dengan bentuk oktal.

Singkatnya: ini seperti membandingkan pisau bedah (mnemonik) dan pisau dapur tajam (oktal) ... tetapi Anda masih harus mengetahui bit mode oktal karena alasan lain :)

Alasan mengapa mode oktal masih lebih disukai , saya pikir, tidak lebih banyak mengetik dalam bentuk mnemonik, tetapi admin yang terlalu konservatif. Dan ya, panggilan 2013, admin yang terlalu konservatif masih ada dan di sini untuk tinggal selama beberapa waktu.

0xC0000022L
sumber
0

Ketika Anda harus memodifikasi izin file sepanjang waktu , Anda menghargai 3 karakter. Banyak waktu saya menggunakan versi +atau -untuk mengubah izin.

Misalnya, saya membuat PHP, Python, atau skrip baru di folder apache saya. chmod a+xadalah semua yang saya lakukan agar bisa dijalankan. Saya membacanya sebagai "semua plus eksekusi". Sekarang saya tahu ini akan berhasil, dan saya hanya membutuhkan 3 karakter.

Lain kali saya menggunakan 644 dan 755 secara otomatis. Saya hanya menganggapnya sebagai 644sarana file, 755berarti skrip.

Perampok
sumber
0

Ini cocok dengan pengaturan umask, yang biasanya diberikan dalam tulisan oktal (dalam pamatau fstab).

Nikodemus RIP
sumber
0

Saya menyarankan bahwa satu alasan penting adalah bahwa representasi oktal sangat cocok dengan apa yang Anda lihat ls -l(atau, lebih tepatnya, itu terjadi ketika Anda secara mental mengkonversi antara oktal dan biner).

Conor O'Neill
sumber