TGViewer
Записки IT специалиста Записки IT специалиста @interface31 · 8.98K subscribers
Post #6712 1.82K
Перенаправление и права в 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.

Поэтому, работая с оболочкой, всегда помните, кто выполняет те или иные действия и какие права при этом имеет, что поможет избежать подобных ошибок и недоразумений.
  • 🔥 17
  • ❤ 3
  • 👌 2
  • 👍 1
More from @interface31
  1. Sep 22, 2026Post #6781
  2. Sep 22, 2026Debian или Ubuntu Нам достаточно часто задают вопрос: какой именно из этих дистрибутивов и…
  3. Sep 22, 2026Девопсы, сисадмины, архитекторы, техлиды (и вообще все, кто принимает технические или бизн…
  4. Sep 22, 2026Прекращена поддержка Debian 11 31 августа 2026 года поддержка дистрибутива Debian 11 прекр…
  5. Sep 22, 2026🚀 AI-Driven Digital Q: прямая трансляция новой ИИ-версии экосистемы для команд разработки…
  6. Sep 21, 2026Мертвые форматы Встретился случайно с одним своим знакомым, который работает в бюджетной о…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →