INTERFACE31 Telegram 4165
​​Перенаправление и права в Linux

Если нам нужно что-либо записать или дописать в файл, то мы обычно делаем так:

echo “Hello” > file.txt


Или

echo “Hello” >> file.txt


В первом случае мы перепишем содержимое файла, во втором – допишем в конец. Кстати, это важный момент, запомните и не путайте!

Но как быть, если нужно выполнить запись в файл, который не принадлежит текущему пользователю?

Напрашивается привычное:

sudo echo “Hello” >> file.txt


Но неожиданно получим «Отказано в доступе», почему? Давайте разбираться кто за что отвечает. При входе пользователя в систему в ней сразу запускается командная оболочка, тоже самое происходит если мы запускаем эмулятор терминала.

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

Команда sudo позволяет нам выполнить команду с правами суперпользователя и этой командой будет echo, которая выведет указанный текст в стандартный поток вывода. На этом ее работа закончилась. Перенаправлением потока будет заниматься оболочка, которая запущена от обычного пользователя.

Чтобы все-таки выполнить запись в файл мы можем сделать так:

sudo bash -c ‘echo “Hello” >> file.txt’


В этом случае мы запустим с повышенными правами еще один экземпляр оболочки, который выполнит указанную команду и завершит свою работу. А так как оболочка запущена с повышенными правами, то и проблем с перенаправлением у нас не возникнет.

Аналогичная ситуация возникает и с конвейером, так как этим занимается оболочка, то все команды в цепочке будут выполняться от имени того пользователя, кто запустил оболочку, если не указано иного.

Например, для решения нашей задачи можно использовать:

echo “Hello” | tee -a file.txt


Если мы напишем:

sudo echo “Hello” | tee -a file.txt


То с повышенными правами будет выполнено только echo, а tee получит отказ в доступе, так как запустивший ее пользователь не имеет прав доступа.

Правильно:

echo “Hello” | sudo tee -a file.txt


Для выполнения первой команды нам повышенные права не нужны, а вот tee нужно дать доступ к файлу и поэтому мы запускаем ее через sudo.

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



tgoop.com/interface31/4165
Create:
Last Update:

​​Перенаправление и права в Linux

Если нам нужно что-либо записать или дописать в файл, то мы обычно делаем так:

echo “Hello” > file.txt


Или

echo “Hello” >> file.txt


В первом случае мы перепишем содержимое файла, во втором – допишем в конец. Кстати, это важный момент, запомните и не путайте!

Но как быть, если нужно выполнить запись в файл, который не принадлежит текущему пользователю?

Напрашивается привычное:

sudo echo “Hello” >> file.txt


Но неожиданно получим «Отказано в доступе», почему? Давайте разбираться кто за что отвечает. При входе пользователя в систему в ней сразу запускается командная оболочка, тоже самое происходит если мы запускаем эмулятор терминала.

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

Команда sudo позволяет нам выполнить команду с правами суперпользователя и этой командой будет echo, которая выведет указанный текст в стандартный поток вывода. На этом ее работа закончилась. Перенаправлением потока будет заниматься оболочка, которая запущена от обычного пользователя.

Чтобы все-таки выполнить запись в файл мы можем сделать так:

sudo bash -c ‘echo “Hello” >> file.txt’


В этом случае мы запустим с повышенными правами еще один экземпляр оболочки, который выполнит указанную команду и завершит свою работу. А так как оболочка запущена с повышенными правами, то и проблем с перенаправлением у нас не возникнет.

Аналогичная ситуация возникает и с конвейером, так как этим занимается оболочка, то все команды в цепочке будут выполняться от имени того пользователя, кто запустил оболочку, если не указано иного.

Например, для решения нашей задачи можно использовать:

echo “Hello” | tee -a file.txt


Если мы напишем:

sudo echo “Hello” | tee -a file.txt


То с повышенными правами будет выполнено только echo, а tee получит отказ в доступе, так как запустивший ее пользователь не имеет прав доступа.

Правильно:

echo “Hello” | sudo tee -a file.txt


Для выполнения первой команды нам повышенные права не нужны, а вот tee нужно дать доступ к файлу и поэтому мы запускаем ее через sudo.

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

BY Записки IT специалиста




Share with your friend now:
tgoop.com/interface31/4165

View MORE
Open in Telegram


Telegram News

Date: |

4How to customize a Telegram channel? You can invite up to 200 people from your contacts to join your channel as the next step. Select the users you want to add and click “Invite.” You can skip this step altogether. How to Create a Private or Public Channel on Telegram? To delete a channel with over 1,000 subscribers, you need to contact user support Concise
from us


Telegram Записки IT специалиста
FROM American