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

Поэтому, работая с оболочкой всегда помните, кто выполняет те или иные действия и какие права при этом имеет, что поможет избежать подобных ошибок и недоразумений.
  • 👍 74
  • ❤ 2
  • 🌭 2
  • 🍌 2
More from @interface31
  1. Oct 17, 2026Сакральная желтая бумажка С завидным постоянством наблюдем необъяснимое, можно даже сказат…
  2. Oct 17, 2026Post #6894
  3. Oct 17, 2026В чем сходство и в чем различие ZRAM и ZSWAP Каждый раз при упоминании этих технологий воз…
  4. Oct 16, 2026Авторское право – не пустой звук Сегодня с одним нашим коллегой и молодым автором произоше…
  5. Oct 16, 2026Post #6891
  6. Oct 16, 2026Selectel обновил пользовательское соглашение. А что там? Правильно: 6.4. Исполнитель не не…
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 →