Если бы я хотел сделать что-то вроде

sudo fdisk -l > test.txt

но я хотел, чтобы test.txt был под моим собственным идентификатором пользователя (а не root) без необходимости сокращать его впоследствии, есть ли способ сделать это?

В частности, моя настоящая цель - заставить скрипт на python выполнить кучу операций с разрешением sudo и вывести выходные данные. Каким образом мне следует запрашивать разрешения sudo, если поток выглядит примерно так:

somescripts
 \-> runs python script, grabs sudo
      \-> runs operation with sudo permissions
      |     like fdisk -l > test.txt
      \-> runs operation with sudo permissions, reads stdout, writes stdout to file
            like fdisk -l --> reads stdout --> make file --> writes data to file

Спасибо.

2 ответа2

2

Вы можете использовать tee . То, что делает, это пишет stdin в файл и выводит его на stdout. Использование его с конвейером и sudo эффективно меняет активного пользователя для перенаправления вывода. Имейте в виду, что левая сторона канала должна на самом деле писать в stdout, а не в stderr.

sudo fdisk -l | sudo -u myuser tee <file>
2
$ sudo fdisk -l > test.txt
$ ls -l test.txt
-rw-r--r-- 1 daniel daniel 1848 apr 22 14:20 fd

Нет необходимости менять владельца файла впоследствии при использовании перенаправления, как вы описали.

При использовании tee как было предложено, он не должен использовать sudo -u myuser:

sudo fdisk -l | tee test.txt

достаточно (но это не нужно в этом случае, как показано выше).


В контексте сценария Python, если вы запустите весь сценарий от имени root помощью sudo , то перенаправление также будет выполнено с root , но если вы просто используете sudo как в предыдущем примере командной строки в сценарии, то он будет вести себя как указано выше.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .