Залишайтеся в тому ж робочому каталозі, переходячи на sudo


25

Під час роботи над командним рядком я часто переходжу на використання sudo sudo -i. Однак мій робочий каталог автоматично змінюється на /root. Я ніколи не хочу туди їхати; Я хочу залишитися там, де був! Як я можу цього досягти?

Відповіді:


28

Ви можете скористатися sudo -sнатомість, це не змінить поточний каталог на /root, хоча деякі з змінних вашого середовища не будуть такими, що мають кореневий характер.

На цій сторінці з форумів Ubuntu є хороший підсумок:

Summary of the differences found   
                                               corrupted by user's 
                HOME=/root      uses root's PATH     env vars
sudo -i         Y               Y[2]                 N
sudo -s         N               Y[2]                 Y
sudo bash       N               Y[2]                 Y
sudo su         Y               N[1]                 Y

На цій сторінці з документації Ubuntu є набагато більше довідкової інформації про sudo .


1
Гарний! Дякую купу, простий, але чудовий маленький огляд!
Відновіть Моніку

@ user1162541 Щасливий, що можемо допомогти.
Левон

sudo -iuпрацює для мене ubuntuforums.org/…
rofrol

Під час мого тестування env vars of sudo -iвсе ще пошкоджується env vars користувача. Єдиний спосіб уникнути цього - використовувати su -l.
Сімба

5

Якщо ви хочете скористатися su, є спосіб залишитися в одному каталозі.

su - user -c "cd` pwd`; bash "

Що тут відбувається:

  • su - user = вхід як user
  • -c що означає "запустити команду в оболонці нового користувача"
  • -c "cd `pwd`"команда, яку ми даємо, - це переключитися на поточний каталог ( `pwd`) - але, оскільки ми використовуємо зворотні посилання у подвійних лапках, pwdкоманда оцінюється перед тим, як запустити suкоманду, так що ми переходимо до каталогу, який ми знаходимо ЗАРАЗ, як старий користувач.

    • Навпаки, -c 'cd `pwd`'виконував би pwdкоманду в новій оболонці, так що це буде оцінюватися cd /root, що, звичайно, нічого не виконає.

    Єдина проблема тут полягає в тому, що нова оболонка виходить відразу після запуску команди, тому ми додаємо:

  • -c "cd `pwd`; bash"що означає "запустити bash(нова оболонка) після запуску cdкоманди. Оболонка bash не виходить, поки ми не вийдемо з неї.

Зауважте, що ви можете замінити `pwd`на $(pwd). Вони функціонально однакові, але безліч символів, що нагадують цитати, можуть стати важкими для читання.


0

Я зіткнувся з тією ж проблемою, і мені заборонено запускати щось, окрім sudo su - devuserсервера dev, тому ось що я придумав:

  1. Якщо файл знайдений .profile повернеться до попереднього дому користувача, якщо його знайдено:
prev_user_home=$(~/bin/home.sh)
if [ -n $prev_user_home ] ; then
        cd $prev_user_home
fi
  1. Сценарій для визначення попереднього користувача. Сценарій розміщується у каталозі бін devuser:
#!/bin/bash
#brings you back home after sudo su

function get_owner {
  pid=$1
  echo $(ps ouid -p $pid h | tr -d ' ')
}

pid=$$
my_uid=$(get_owner $pid)
uid=$my_uid
i=0
while [[ $uid == $my_uid && $i -lt 20 ]] ; do
    pid=$(ps -o ppid= $pid)
    uid=$(get_owner $pid)
    i=$((i+1))
done

user_home=$(getent passwd $uid | cut -d ':' -f '6')
if [[ -d $user_home && $uid != 0 ]] ; then
    echo $user_home
fi

Він піднімає дерево процесів і перевіряє, чи змінився користувач, який володіє процесом.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.