Гаразд, я перечитав підручні сторінки "chmod" для Mac OS X, BSD та Linux і зробив кілька експериментів. Ось що я дізнався про символічні режими. Це може ускладнитися, але це варто зрозуміти:
- Загальною формою є пункт [, пункт ...] де:
- пункт : = [ugoa] [+ - =] [rwxXstugo]
- [ugoa] ( хто ) (вказати кілька) означає встановити дозвіл для користувача, групи, інших або всіх. Якщо не вказано, за замовчуванням є "a", але umask діє.
- [+ - =] ( дія ) (вказати одну) означає:
- + означає додати вказані дозволи до вже наявних дозволів
- - означає видалити вказані дозволи з уже наявних дозволів
- = означає встановити дозволи на вказані дозволи, очистивши всі інші
- [rwxXstugo] ( дозвіл ) (вкажіть кілька rwxXst АБО один з ugo) встановлює дозволи для вказаних користувачів (-ів) таким чином:
- r - читати
- w - пишіть
- x - виконання / пошук
- X - каталог виконувати / шукати iff АБО будь-який біт виконання вже встановлений.
- s - суїд або жорсткий
- т - липкий
- u - копіювати дозвіл користувача
- g - копія дозволу групи
- o - скопіюйте інший дозвіл
Так, наприклад, a+x
зробить файл виконуваним усіма. a+X
зробить файл виконуваним усіма, якби його хтось виконав.
a+x
зробить пошук у каталозі всім. a+X
також зробив би пошук у каталозі всім.
Ключова відмінність BSD від Linux полягає в тому, що для BSD визначення визначається на основі дозволів файлу до виконання chmod. Незважаючи на те, що з Linux, визначення здійснюється безпосередньо перед виконанням пункту + X.
Таким чином, з BSD, комбінація a-x,a+X
видалить дозвіл на виконання / пошук, а потім зробить каталог, який можна шукати всім, і зробить файл, який виконується всіма, якщо його спочатку хтось виконував.
За допомогою Linux a-x,a+X
видалить дозвіл на виконання / пошук, а потім зробить каталог, який можна шукати всім, залишаючи файл виконуваним ніхто.
Ось конкретний приклад: на BSD-машині: каталог, виконуваний файл та невиконаний файл:
drwxr-x--- 2 falk staff 68 Jul 19 18:01 fee/
-rwxr-x--- 1 falk staff 0 Jul 19 18:01 fie*
-rw-r----- 1 falk staff 0 Jul 19 18:01 foe
Зауважте, що і каталог, і "fie" користувач може виконувати / шукати, а не інші.
Тепер ми виконуємо chmod a-x,a+X *
. Перший пункт позбавить біт виконання / пошуку для всіх користувачів усіх файлів, але другий додаток додасть його як для "комісії", так і для "фіе". "гонорар", тому що це каталог, і "fie", оскільки він мав принаймні один виконуваний біт для початку.
drwxr-x--x 2 falk staff 68 Jul 19 18:01 fee/
-rwxr-x--x 1 falk staff 0 Jul 19 18:01 fie*
-rw-r----- 1 falk staff 0 Jul 19 18:01 foe
У мене був такий самий результат виконання chmod -x+X
.
Висновок: рішення Jak Gibb буде працювати на Linux, але для BSD вам потрібно зробити два проходи.
Я не тестував це на SVr4 або інших варіантах Unix.