Как использовать sudo для перенаправления вывода в местоположение, в которое у меня нет разрешения на запись?

Для python 3.3

CyMySQL https://github.com/nakagami/CyMySQL

У меня есть pip, установленный на моих окнах 7, просто pip установить cymysql

(вам не нужен cython) быстро и безболезненно

804
задан smci 24 October 2017 в 22:09
поделиться

7 ответов

Ваша команда не работает, потому что перенаправление выполняется Вашей оболочкой, которая не имеет разрешения записать в /root/test.out. Перенаправление вывода не выполнено sudo.

существует несколько решений:

  • Выполнение оболочка с sudo и дают команду ему при помощи -c опция:

    sudo sh -c 'ls -hal /root/ > /root/test.out'
    
  • Создают сценарий с Вашими командами и выполняют тот сценарий с sudo:

    #!/bin/sh
    ls -hal /root/ > /root/test.out
    

    Выполнение sudo ls.sh. Посмотрите Steve Bennett ответ , если Вы не хотите создавать временный файл.

  • Запуск оболочка с sudo -s тогда выполняет Ваши команды:

    [nobody@so]$ sudo -s
    [root@so]# ls -hal /root/ > /root/test.out
    [root@so]# ^D
    [nobody@so]$
    
  • Использование sudo tee (если необходимо выйти из много при использовании -c опция):

    sudo ls -hal /root/ | sudo tee /root/test.out > /dev/null
    

    перенаправление к [1 110] необходимо для остановки мишень от выведения до экрана. К [1 120] добавляют вместо того, чтобы перезаписать выходной файл (>>), используют tee -a, или tee --append (последний характерен для [1 116] GNU coreutils).

Спасибо переходит в [1 117] Jd, Adam J. Forster и Johnathan для вторых, третьих и четвертых решений.

1124
ответ дан Community 24 October 2017 в 22:09
поделиться

Как насчет того, чтобы писать сценарий?

Имя файла: myscript

#!/bin/sh

/bin/ls -lah /root > /root/test.out

# end script

Тогда использует sudo для выполнения сценария:

sudo ./myscript
5
ответ дан 24 October 2017 в 22:09
поделиться

Заставьте sudo выполнить оболочку, как это:

sudo sh -c "echo foo > ~root/out"
16
ответ дан Penfold 24 October 2017 в 22:09
поделиться

Возможно, Вы предоставленный sudo доступ только к некоторым программам/путям? Тогда нет никакого способа сделать то, что Вы хотите. (если Вы не взломаете его так или иначе)

, Если это будет не иметь место тогда, возможно, можно записать сценарий удара:

cat > myscript.sh
#!/bin/sh
ls -hal /root/ > /root/test.out 

Нажатие ctrl + d :

chmod a+x myscript.sh
sudo myscript.sh

Hope это помогает.

1
ответ дан franzlorenzon 24 October 2017 в 22:09
поделиться

Каждый раз, когда я должен сделать что-то вроде этого, что я просто становлюсь корнем:

# sudo -s
# ls -hal /root/ > /root/test.out
# exit

Это - вероятно, не лучший способ, но это работает.

3
ответ дан Adam J. Forster 24 October 2017 в 22:09
поделиться

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

sudo command > /some/file.log
`-----v-----'`-------v-------'
   command       redirection

обычные способы обойти это:

  • Обертка команды в сценарии, который Вы называете под sudo.

    , Если команды и/или изменения файла журнала, можно заставить сценарий взять их в качестве аргументов. Например:

    sudo log_script command /log/file.txt
    
  • Вызов оболочка и передача командная строка в качестве параметра с -c

    Это особенно полезно для одного от составных команд. Например:

    sudo bash -c "{ command1 arg; command2 arg; } > /log/file.txt"
    
40
ответ дан wisbucky 24 October 2017 в 22:09
поделиться

Кто-то здесь только что предложил мишень sudoing:

sudo ls -hal /root/ | sudo tee /root/test.out > /dev/null

Это могло также использоваться для перенаправления любой команды к каталогу, к которому у Вас нет доступа. Это работает, потому что программа мишени является эффективно "эхом в файл" программа, и перенаправление к/dev/null должно остановить его также выведение на экран для хранения его тем же как исходный изобретенный пример выше.

94
ответ дан Jonathan 24 October 2017 в 22:09
поделиться
Другие вопросы по тегам:

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