Apakah ada perbedaan antara nilai mode 0777 dan 777

51

Saya melihat perubahan kode di tempat kerja, di mana nilai mode diubah dari 777 menjadi 0777 untuk membuat setftr nfs bekerja. Apa perbedaan dalam 2 nilai?

pengguna1071840
sumber
Datang di masalah yang sama saat menggunakan fungsi built-in FS terkait php seperti mkdir(). 0777 vs 777
Niket Pathak

Jawaban:

76

Jika Anda meneruskannya ke chmod(program baris perintah), tidak ada perbedaan. Tetapi dalam program C atau yang serupa, 0777adalah oktal (tiga set tiga 1 bit, yang adalah apa yang Anda inginkan), sementara 777desimal, dan itu pola bit yang sangat berbeda. ( chmodakan menafsirkan argumen numerik apa pun sebagai oktal, oleh karena itu tidak diperlukan nol di depan.)

0777 (oktal) == biner 0b 111 111 111    == izin rwxrwxrwx   (== desimal 511)

777 (desimal) == biner 0b 1 100 001 001== izin sr----x--x(== oktal 1411)

alexis
sumber
14
Supaya jelas - nilai yang Anda berikan ke chmodperintah selalu diartikan sebagai oktal. Menggunakan chmod 888akan memberikan kesalahan.
mattdm
tetapi setiap digit adalah oktal, bukan seluruh angka itu sendiri.
Drake Clarris
1
String digit oktal adalah angka oktal. chmodmenafsirkan argumen numerik sebagai oktal, terlepas dari awalan. (Tapi sebenarnya nomor itu sendiri tidak memiliki fungsi; hanya digit, atau lebih tepatnya bit.)
alexis
Jadi, dalam program C, jika Anda ingin lulus 1777, Anda perlu menulis 01777?
Faheem Mitha
1
@ Faheem, itu benar. Oktal 1777ditulis 01777dalam C. (Atau Anda bisa menulis 1023, yang merupakan angka yang sama dalam desimal. Tapi jangan :-)
alexis
4

Bit pertama digunakan untuk bit yang lengket http://en.wikipedia.org/wiki/Sticky_bit

Jika Anda menetapkan izin menggunakan 4 digit, yang pertama akan mengatur atau menghapus bit ini.

alfredocambera
sumber
3
Bit yang lengket bukan yang pertama tetapi yang ketiga. Yang pertama adalah bit suid dan yang kedua adalah sgid. Jika Anda menetapkan izin menggunakan tiga digit, digit pertama yang hilang juga akan memengaruhi (yaitu menghapus) tiga bit ini.
jlliagre
Kamu benar. Ergo, "jawaban yang diberikan oleh alexis diperas.
alfredocambera
2
@jlliagre Dari halaman manual chmod - "Digit yang dihilangkan dianggap sebagai nol di depan." Juga, digit pertama dari 4 adalah bit yang lengket. Dari halaman manual lagi: "Digit pertama memilih set ID pengguna (4) dan ID grup (2) dan atribut penghapusan atau lengket terbatas (1). Digit kedua memilih izin untuk pengguna yang memiliki file: baca ( 4), tulis (2), dan jalankan (1); yang ketiga memilih izin untuk pengguna lain dalam grup file, dengan nilai yang sama; dan yang keempat untuk pengguna lain yang tidak dalam grup file, dengan nilai yang sama. "
Faheem Mitha
1
@FaheemMitha, digit yang dihilangkan dianggap sebagai nol di depan sehingga akan menghapus bit yang disebutkan di atas. Juga, Anda tampaknya membingungkan bit dan digit, saya berkomentar tentang bit pertama, bukan digit pertama.
jlliagre
1
@ jlliagre Ok, cukup adil.
Faheem Mitha
1

Jawaban yang menarik adalah:

  • tidak ada perbedaan antara 0700dan 700, seperti yang dijelaskan dalam jawaban lain
  • tapi ada adalah perbedaan antara 00700dan 0700(untuk direktori)

Setidaknya itulah yang terjadi pada versi chmod GNU coreutils, yang merupakan default di Linux.

Lihat contoh ini:

$ ls -ld mydir
drws--s--- 4 myuser mygroup 4096 Jul  8 09:27 mydir
$ chmod 0710 mydir ; ls -ld mydir                   # surprise ahead -- s-bits remain:
drws--s--- 4 myuser mygroup 4096 Jul  8 09:27 mydir
$ chmod 00710 mydir ; ls -ld mydir                  # _now_ they're gone:
drwx--x--- 4 myuser mygroup 4096 Jul  8 09:27 mydir

Ini untuk menghindari penghapusan bit setuid / setgid secara tidak sengaja untuk direktori. Untuk detailnya, lihat dokumentasi chmod .

Alex O
sumber
-1

Di sistem Linux ada dua jenis izin yang tersedia:

  1. Izin File
  2. Izin khusus

Dalam Izin file, kami menetapkan izin pada file dan folder:

Izinnya adalah:

  • baca (4)
  • tulis (2)
  • mengeksekusi (1)

Sedangkan dalam izin khusus, tiga jenis izin adalah:

  • SUID (4)
  • SGID (2)
  • Sticky Bit (1)

Dalam pertanyaan Anda, Anda bertanya apa perbedaannya, jadi tidak ada perbedaan antara chmod 777 and 0777karena ada no any octal valueyang menunjukkan nilai (0) nol.

Tanggul Purushottam
sumber