Apa perbedaan antara "chmod + x" dan "chmod 755"?


62

Ketika datang untuk membuat file yang dapat dieksekusi apa perbedaan antara chmod 755dan chmod +xdan kapan saya akan menggunakan yang mana? Saya sejauh ini hanya menggunakan chmod +xdan saya hanya membaca sesuatu dan itu digunakan chmod 755dan saya tidak bisa mengatakan apakah itu lebih baik digunakan chmod 755atau tidak chmod +x.


9
chmod +xmenyetel semua flag yang dapat dieksekusi tanpa mengubah izin lainnya. chmod 755set rwxr-xr-x
ravery


5
@ravery: Hai, di sana! Anda telah menemukan bagian komentar, yang merupakan area yang didedikasikan untuk mengkritik dan meminta klarifikasi. Untuk memberikan jawaban / solusi, Anda harus menggunakan bagian "jawaban" di bawah ini (cari tombol merah besar "Posting Jawaban Anda"). Semoga itu bisa membantu!
Lightness Races dengan Monica

Jawaban:


145

Versi pendek:

Untuk dapat membandingkannya, kita harus melihatnya dari perspektif yang sama, jadi:

  • chmod +xsama dengan chmod ugo+x(Berdasarkan umasknilai)
  • chmod 755 adalah sama dengan chmod u=rwx,go=rx

Penjelasan:

Pertama, Anda harus tahu bahwa:

  1. + berarti menambahkan izin ini ke izin lain yang sudah dimiliki file.
  2. = berarti mengabaikan semua izin, atur persis seperti yang saya berikan.

    • Jadi semua "baca, tulis, jalankan, bit sticky, suid dan guid" akan diabaikan dan hanya yang disediakan yang akan ditetapkan.
  3. baca = 4, tulis = 2, jalankan = 1

    • Berikut adalah logika biner di baliknya (jika Anda tertarik):

      Symbolic:  r-- -w- --x  |  421
      Binary:    100 010 001  |  -------
      Decimal:    4   2   1   |  000 = 0
                              |  001 = 1
      Symbolic:  rwx r-x r-x  |  010 = 2
      Binary:    111 101 101  |  011 = 3
      Decimal:    7   5   5   |  100 = 4
                 /   /   /    |  101 = 5
      Owner  ---/   /   /     |  110 = 6
      Group  ------/   /      |  111 = 7
      Others ---------/       |  Binary to Octal chart
      

Menggunakan +xAnda mengatakan untuk menambahkan ( +) bit yang dapat dieksekusi ( x) ke pemilik, grup dan lain-lain.

  • sama dengan ugo+xatauu+x,g+x,o+x
  • Saat Anda tidak menentukan pemilik, grup, atau orang lain mana yang menjadi target Anda, seandainya xitu akan mempertimbangkan semuanya. Dan seperti yang ditunjukkan oleh @Rinzwind, ini berdasarkan pada umasknilai, itu menambahkan bit ke yang umaskmemungkinkan. ingat jika Anda menentukan target seperti o+ritu umasktidak memiliki efek apa pun lagi.
  • Itu tidak menyentuh mod lainnya (izin).
  • Anda juga bisa menggunakan u+xuntuk hanya menambahkan bit yang dapat dieksekusi ke pemilik.

Menggunakan 755Anda menentukan:

  • 7 -> u=rwx(4 + 2 + 1 untuk pemilik)
  • 5 -> g=rx(4 +1 untuk grup)
  • 5 -> o=rx(4 +1 untuk orang lain)

Begitu chmod 755juga seperti: chmod u=rwx,g=rx,o=rxatau chmod u=rwx,go=rx.

masukkan deskripsi gambar di sini


15
tambahan yang sangat penting: saat menggunakan chmod 755Anda mengatur bit-bit DAN Anda juga menghapus semua bit suid / sgid / sticky (yang mungkin ada di sana) (untuk contoh: TIDAK PERNAH chmod 755 /tmp). 755 harus selalu dianggap sebagai 0755, yaitu himpunan bit oktal pertama juga diatur ke 0.
Olivier Dulac

1
hampir sempurna jadi +1 prematur (yay Anda mendapat lencana itu dari saya
:)

@OlivierDulac Terima kasih, saya tidak ingin terlalu banyak detail, tetapi saya akan memperbarui jawabannya ...
Ravexina

1
Saya pikir saya baru saja memahami cara kerja izin, terima kasih!
Fabich


37

chmod +x menambahkan izin eksekusi untuk semua pengguna ke izin yang ada.

chmod 755menetapkan 755izin untuk file.

755 berarti izin penuh untuk pemilik dan membaca dan mengeksekusi izin untuk orang lain.


7

Cara lain untuk melihatnya (yang menurut saya lebih mudah dipahami) chmod +xadalah dengan mengatur izin secara relatif , sedangkan chmod 755mengaturnya secara absolut .

Setelah chmod 755dijalankan pada file, izinnya akan menjadi 755, atau rwxr-xr-x.

chmod +xhanya akan mengambil izin yang ada, dan menambahkan izin eksekusi ke file.


6

Saya sarankan meninjau halaman manual chmod untuk detail lengkap. Anda hanya melihat dua mode operasi berbeda yang tersedia dengan perintah chmod untuk menyelesaikan tugas yang sama untuk mengubah izin.

Mode oktal menggunakan angka dan menetapkan seluruh izin file. Mode karakter menggunakan huruf-huruf dan umumnya digunakan untuk hanya mengubah izin yang ada.

chmod 755set rwxr-xr-xsementara chmod +xmenyesuaikan izin sehingga pemilik, grup, dan dunia semua memiliki izin yang dapat dieksekusi ditambahkan. Dengan asumsi izin file default rwxr--r--akan menyesuaikannya dengan izin yang sama seperti 755 dari rwxr-xr-x.


5

Perbedaannya adalah hak akses yang diatur dan mode mana yang Anda gunakan untuk mengaturnya.

Dengan chmod +xAnda mengatur bit yang dapat dieksekusi untuk semua - pemilik, grup pemilik, dan pengguna lain. Ini dikenal sebagai mode simbolik. Mengutip man chmod:

Operator + menyebabkan bit mode file yang dipilih ditambahkan ke bit mode file yang ada dari setiap file; - menyebabkan mereka dihapus; dan = menyebabkan mereka ditambahkan dan menyebabkan bit yang tidak disebutkan harus dihapus kecuali bahwa bit ID pengguna dan grup yang tidak disebutkan direktori tidak terpengaruh.

Dengan chmod 755Anda menggunakan angka oktal, representasi biner yang digunakan untuk mengatur bit izin tertentu. Pertama (kiri) 3 bit sesuai dengan izin pemilik, 3 tengah ke izin grup, dan terakhir (paling kanan) sesuai dengan izin semua pengguna lain. Urutan bit selalu sama, read,write,executeatau rwxDengan demikian, tepat karena urutannya sama, nomor individual ketika dikonversi ke representasi biner, akan menetapkan bit izin yang bit posisional terkait dalam angka adalah 1 dan tidak mengatur yang bit 0 Secara khusus:

  • Angka oktal 7adalah 111 dalam biner, jadi Anda mengatur semua membaca, menulis, dan mengeksekusi bit untuk pemilik; rwxdiatur.
  • Angka oktal 5adalah 101 dalam biner, jadi Anda mengatur baca dan eksekusi tetapi menonaktifkan bit tulis, dan karena 5 untuk grup dan pengguna lain, kedua kategori tersebut akan memiliki izin yang sama. Dengan demikian r-xdiatur.

Ini demo kecilnya:

    bash-4.3$ touch file1 file2
    bash-4.3$ chmod +x file1
    bash-4.3$ chmod 755 file2
    bash-4.3$ ls -l file1 file2
    -rwxrwxr-x 1 xieerqi xieerqi 0 7月   6 13:54 file1
    -rwxr-xr-x 1 xieerqi xieerqi 0 7月   6 13:54 file2

3

Satu perbedaan penting adalah bahwa chmod + tunduk pada batasan umask, dan chmod <octal> tidak.

Perhatikan contoh berikut:

$ ls -l foo bar
---------- 1 gowenfawr users 0 Jul  7 16:40 bar
---------- 1 gowenfawr users 0 Jul  7 16:39 foo
$ umask
0022
$ chmod +w bar
$ umask 0002
$ chmod +w foo
$ ls -l foo bar
--w------- 1 gowenfawr users 0 Jul  7 16:40 bar
--w--w---- 1 gowenfawr users 0 Jul  7 16:39 foo
$

Jadi, jika Anda ingin membuat perubahan delta untuk izin dengan cara yang sesuai dengan pengaturan umask Anda, gunakan sintaks '+'. Tetapi jika Anda ingin menyetelnya secara absolut tanpa memperhatikan umask, gunakan format <octal>, dan sadar Anda harus menentukan semua bit dan bukan hanya delta.


1

Selain jawaban yang indah ini saya ingin menyebutkan perbedaan kecil tapi mungkin penting. Perintah chmod 755 fileini setara dengan chmod 0755 file. Jika kita menjalankan perintah ini pada file yang memiliki set-bit SETUID atau SETGID, itu akan menghapus bit SETUID / SETGID. chmod +x fileakan membiarkan bit SETUID / SETGID tidak tersentuh. Kita bisa melihat ini dalam contoh berikut:

~ $ touch test
~ $ chmod u + s test
~ $ ll tes
-rwSrw-r-- 1 mook mook 0 Sep 14 00:49 uji
~ $ chmod + x test
~ $ ll tes
-rwsrwxr-x 1 mook mook 0 Sep 14 00:49 uji
~ $ chmod 755 test
~ $ ll tes
-rwxr-xr-x 1 mook mook 0 Sep 14 00:49 uji
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.