Яка різниця між "chmod + x" і "chmod 755"?


61

Коли справа доходить до створення файлу виконуваного файлу , що є різницею між chmod 755і chmod +xі коли б використовувати якісь? Я поки що тільки використовував, chmod +xі я просто щось читав, і це використовувалося, chmod 755і я не міг сказати, чи краще це використовувати chmod 755чи ні chmod +x.


9
chmod +xвстановлює весь виконуваний прапор без зміни інших дозволів. chmod 755встановлює rwxr-xr-x
ravery


5
@ravery: Привіт! Ви знайшли розділ коментарів, який є областю, присвяченою критиці та вимагає роз'яснення. Щоб надати відповідь / рішення, слід скористатися розділом "відповідь" нижче (шукайте велику червону кнопку "Опублікувати свою відповідь"). Сподіваюся, що це допомагає!
Гонки легкості по орбіті

Відповіді:


144

Коротка версія:

Щоб мати можливість їх порівняти, ми повинні дивитись на них з тієї ж точки зору, тож:

  • chmod +xдорівнює chmod ugo+x(На основі umaskзначення)
  • chmod 755 дорівнює chmod u=rwx,go=rx

Пояснення:

По-перше, ви повинні знати, що:

  1. + означає додати цей дозвіл до інших дозволів, які файл вже має.
  2. = означає ігнорувати всі дозволи, встановлювати їх точно так, як я надаю.

    • Тож усі "читання, запис, виконання, клейкий біт, суїд та настанови" будуть ігноровані, і буде встановлено лише ті, що надаються.
  3. прочитати = 4, написати = 2, виконати = 1

    • Ось бінарна логіка за нею (якщо вам цікаво):

      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
      

Використовуючи, +xви говорите, щоб додати ( +) виконавчий біт ( x) до власника, групи та інших.

  • вона дорівнює ugo+xабоu+x,g+x,o+x
  • Якщо ви не вкажете, хто з власників, групи чи інших є вашою ціллю, у випадку цього xвін розгляне їх усіх. І як зазначав @Rinzwind, він базується на umaskвартості, він додає біт до тих, що umaskдозволяє. пам'ятайте, якщо ви вказуєте ціль, як, наприклад, o+rтоді umaskвже не впливає.
  • Він не торкається інших мод (дозволів).
  • Ви також u+xможете додати власника лише біт.

Використовуючи 755ви вказуєте:

  • 7 -> u=rwx(4 + 2 + 1 для власника)
  • 5 -> g=rx(4 + 1 для групи)
  • 5 -> o=rx(4 + 1 для інших)

Так chmod 755, як: chmod u=rwx,g=rx,o=rxабо chmod u=rwx,go=rx.

введіть тут опис зображення


15
дуже важливе доповнення: при використанні chmod 755ви встановлюєте ці біти І ви також очищаєте всі біти suid / sgid / sticky (які, можливо, були там) (наприклад, НІКОЛИ chmod 755 /tmp). 755 завжди слід вважати 0755, тобто перший восьмеричний набір бітів також встановлений 0.
Олів'є Дулак

1
майже ідеальний, тому передчасний +1 (так, ви отримали цей знак від мене
:)

@OlivierDulac Спасибі, я не хотів вникати в надто багато деталей, але я оновив відповідь ...
Ravexina

1
Я думаю, що я просто зрозумів, як працюють дозволи, дякую!
Фабіч


37

chmod +x додає дозвіл на виконання для всіх користувачів до наявних дозволів.

chmod 755встановлює 755дозвіл на файл.

755 означає повний дозвіл для власника, а також читати та виконувати дозвіл для інших.


7

Ще один спосіб поглянути на це (який мені легше зрозуміти) - chmod +xце встановлення дозволів відносно , тоді chmod 755як встановлення їх абсолютно .

Після chmod 755запуску файлу, його дозволи будуть 755, або rwxr-xr-x.

chmod +xпросто візьме наявні дозволи та додасть у файл дозволи.


6

Рекомендую переглянути сторінку chmod man для отримання детальної інформації. Ви просто бачите два різних режими роботи, доступні за допомогою команди chmod, щоб виконати те саме завдання зміни дозволів.

У восьмеричному режимі використовуються числа та встановлюються всі дозволи файлу. У режимі символів використовуються літери і зазвичай використовується лише для зміни існуючих дозволів.

chmod 755встановлює в rwxr-xr-xтой час, як chmod +xкоригує дозволи, так що всі власники, групи та світ додано виконувані дозволи. Якщо припустити дозвіл на файли за замовчуванням, rwxr--r--він налаштував би його на ті ж дозволи, що й 755 rwxr-xr-x.


5

Різниця полягає в тому, які дозволи встановлюються та в якому режимі ви їх використовуєте.

З chmod +xвами встановлюється виконавчий біт для всіх - власника, групи власників та інших користувачів. Це відомо як символічний режим. Цитувати man chmod:

Оператор + викликає додавання вибраних бітів режиму файлів до існуючих бітів режиму файлів кожного файлу; - викликає їх видалення; і = спричиняє їх додавання і видаляє невідомі біти, за винятком того, що невказані біти ідентифікатора користувача та групи ідентифікаторів каталогу не впливають.

З chmod 755ви використовуєте восьмеричні числа, двійкове подання , яке використовується для установки певних біт дозволів. Перший (зліва) 3 біти відповідають дозволам власника, середній 3 - груповим дозволам, а останній (крайній правий) - дозволам усіх інших користувачів. Порядок бітів завжди однаковий, read,write,executeабо rwxТаким чином, саме тому, що порядок той самий, індивідуальне число при перетворенні у двійкове представлення встановлюватиме біти дозволу, для яких відповідний позиційний біт у номері дорівнює 1, і скидає той, який дорівнює 0 Конкретно:

  • Восьме число 7- двійкове число 111, тож ви встановлюєте всі читання, запис та виконання бітів для власника; rwxвстановлюється.
  • Восьме число 5у двійковій цифрі 101, тож ви встановлюєте читання та виконання, але вимикаєте біти запису, і оскільки це 5 для групових та інших користувачів, ці дві категорії матимуть однакові дозволи. Таким чином r-xвстановлюється.

Ось невеличка демонстрація:

    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

Важливою відмінністю є те, що chmod + підпадає під обмеження umask, а chmod <octal> - ні.

Розглянемо наступний приклад:

$ 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
$

Отже, якщо ви хочете внести дельта змінити дозволи на спосіб, відповідний вашим налаштуванням umask, використовуйте синтаксис "+". Але якщо ви хочете встановити його абсолютно без огляду на umask, скористайтеся форматом <octal> і зрозумійте, що вам потрібно вказати всі біти, а не лише дельту.


1

Окрім цих прекрасних відповідей, я хочу зазначити невелику, але, ймовірно, важливу різницю. Команда chmod 755 fileеквівалентна chmod 0755 file. Якщо ми запустимо цю команду у файлі, у якого встановлено біт SETUID або біт SETGID, він видалить біт SETUID / SETGID. chmod +x fileзалишить SETUID / SETGID-біт недоторканим. Це ми бачимо на наступному прикладі:

~ $ сенсорний тест
~ $ chmod u + s тест
~ $ ll тест
-rwSrw-r-- 1 mook mook 0 14 вересня 00:49 тест
~ $ chmod + x тест
~ $ ll тест
-rwsrwxr-x 1 mook mook 0 14 вересня 00:49 тест
~ $ chmod 755 тест
~ $ ll тест
-rwxr-xr-x 1 mook mook 0 14 вересня 00:49 тест
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.