Почему chmod не выполняет то, что я хочу? [дубликат]

Я создал короткий сценарий bash, чтобы запустить некоторую программу 10 раз и сохранить результат в файл. Пока я устанавливал разрешения для исполняемых файлов, я подумал, что было бы неплохо удалить разрешение на запись, чтобы сценарий нельзя было изменить без доступа sudo / root. Но я получил следующее:

use@ubuntu:~/some/folder$ sudo chmod -w Run_SIM.sh 
chmod: Run_SIM.sh: new permissions are r-xrwxr-x, not r-xr-xr-x

Почему?

0
задан 1 August 2019 в 08:13

1 ответ

Короче говоря, потому что Вы удаляете разрешение для пользователя, когда Вы не указываете, что измениться. Можно указать который из uсер, gаукцион, oтам установить полномочия для:

$ ls -l bar
-rwxrwxrwx 1 vidarlo users 0 Nov 11 10:52 bar 
$ chmod u-w bar 
$ ls -l bar
-r-xrwxrwx 1 vidarlo users 0 Nov 11 10:52 bar
$ chmod g-w bar 
$ ls -l bar
-r-xr-xrwx 1 vidarlo users 0 Nov 11 10:52 bar
$ chmod o-w bar 
$ ls -l bar
-r-xr-xr-x 1 vidarlo users 0 Nov 11 10:52 bar

U, g, o перед разрешением указывает который из полей разрешения для изменения - для пользователя, группы и другого.

Кроме того, у Вас есть специальное предложение all:

$ chmod a+w bar
$ ls -l bar
-rwxrwxrwx 1 vidarlo users 0 Nov 11 10:52 bar

Стенография, наиболее часто используемая многими, является восьмеричными полномочиями, который создается с тремя цифрами, 0-7. Первая цифра представляет пользователя, вторую группу и треть другой.

В восьмеричной системе, 1 средство expecute, 2 записи средств и 4 чтения средств. Вы добавляете вместе режимы, которые Вы хотите, таким образом читайте и выполнитесь, 5, и только для чтения 4. Для создания чтения файла + выполняются для всех и пишут для владельца в восьмеричном, который Вы сделали бы chmod 755 filename. Режим 740 был бы всеми для владельца, читать для группы и ни одного для другого.

Хорошая вещь о восьмеричных режимах состоит в том, что Вы устанавливаете все режимы сразу, таким образом, нет никаких скрытых перенесенных неожиданностей.

Для резервирования редактирования сценария для корня необходимо было бы сначала установить владельца файла для укоренения, с помощью sudo chown root:root filename, и затем sudo chmod g-w,o-w filename - или восьмеричное использование sudo chmod 755 filename

Если Вы пойдете для выравнивания 301 из исходного кода, то Вы будете видеть исходный код, ответственный за печать этого предупреждающего сообщения. В основном это вычисляет то, что начинающие пользователи могут предназначить и распечатать различие. Это - немного интересное поведение, о котором я не знал :)

2
ответ дан 1 November 2019 в 06:01

Другие вопросы по тегам:

Похожие вопросы: