Какую среду я получаю с sudo?

Я предположу, что Ваша команда фильтрации - то, что я назову фильтром уменьшения префикса, который имеет свойство, что байт N в выводе никогда не пишется прежде считал, по крайней мере, N байты входа. grep имеет это свойство (как долго, поскольку оно только фильтрует и не делает другие вещи как добавление номеров строки для соответствий). С таким фильтром можно перезаписать вход, как Вы продвигаетесь. Конечно, необходимо быть уверены в не делании любой ошибки, так как перезаписанная часть в начале файла будет потеряна навсегда.

Большинство инструментов Unix только дает выбор добавления в файл или усечения его без возможности перезаписи его. Одно исключение на стандартной панели инструментов dd, которому можно сказать не усечь его выходной файл. Таким образом, план состоит в том, чтобы проникнуть команду в dd conv=notrunc. Это не изменяет размер файла, таким образом, мы также захватываем длину нового содержания и усекаем файл к той длине (снова с dd). Обратите внимание, что эта задача по сути неустойчива — если ошибка происходит, Вы самостоятельно.

export LC_ALL=C
n=$({ grep -v foo &1 | wc -c)
dd if=/dev/null of=big_file bs=1 seek=$n

Можно записать примерно эквивалентный Perl. Вот быстрая реализация, которая не пытается быть эффективной. Конечно, можно хотеть сделать начальную букву, фильтрующую непосредственно на том языке также.

grep -v foo ) {print}
  truncate STDOUT, tell STDOUT or die
' big_file

15
05.07.2011, 18:06
4 ответа

Я не знаю о значениях по умолчанию на Fedora, но на Debian sudo значения по умолчанию к использованию secure_path опция со значением по умолчанию /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin.

Это означает, что путь изменяется на то значение каждый раз, когда Вы используете sudo; но когда Вы используете sudo -i, путь изменяется после этого полностью файлы RC пользователя.

6
27.01.2020, 19:50
  • 1
    я не знал о secure_path опция. Значение по умолчанию не включало /usr/local/bin на моей установке. Спасибо, это действительно помогло ясному материалу встать! –  beatgammit 09.07.2011, 08:29

Можно проверить это довольно легкое с вещами как

Сравните вывод от

sudo env 
env

И вещи как

sudo whoami 
whoami

Тем путем можно попытаться узнать то, что отсутствует в установке.

3
27.01.2020, 19:50
  • 1
    Охладитесь, не знайте об этом. Так или иначе, /usr/local/bin не находится в моем sudo ENV, но это находится в моем корневом ENV и пользовательском ENV. Почему это? возвраты –  beatgammit 05.07.2011, 12:16
  • 2
    sudo whoami root, как ожидаемый. Что могло заставлять мой sudo ENV отличаться, чем мой корневой ENV? –  beatgammit 05.07.2011, 12:19
  • 3
    Не знайте, но где-нибудь должна быть некоторая недостающая установка,/usr/local/bin обычно включается. Возможно, Вы очистили ENV $PATH по ошибке в некотором configfile? –  Johan 05.07.2011, 12:20
  • 4
    Действительно ли sudo получает/root/.bashrc? Это - то, где я добавляю /usr/local/bin к пути корня (я должен был сделать это вручную, к сожалению)? –  beatgammit 05.07.2011, 12:21
  • 5
    я думаю, что необходимо изменить оболочки глобальная конфигурация и видеть то, что происходит. При выполнении удара, это было бы что-то как/etc/bash.bashrc –  Johan 05.07.2011, 12:24

sudo -i команда моделирует начальный вход в систему. В моей системе Debian это также указывает что:

Это означает, что определенные для входа в систему файлы ресурсов, такие как .profile или .login будут считаны оболочкой. Если команда указана, она передается оболочке для выполнения. Иначе интерактивная оболочка выполняется. sudo пытается измениться на корневой каталог того пользователя прежде, чем выполнить оболочку. Это также инициализирует среду, оставляя без изменений ДИСПЛЕЙ и ТЕРМИН, установку HOME, ПОЧТУ, SHELL, ПОЛЬЗОВАТЕЛЯ, LOGNAME, и ПУТЬ, а также содержание/etc/environment в системах AIX и Linux. Все другие переменные среды удалены.

2
27.01.2020, 19:50

Можно корректироваться sudo env_keep параметр для включения PATH, хотя необходимо иметь в виду последствия безопасности выполнения этого.

visudo

... запустит Ваш $EDITOR, затем можно внести изменения в Defaults env_keep =...по обстоятельствам.

Кроме того, можно добавить/usr/local/bin к пути системы путем добавления файлов к /etc/profile.d.

например:

cat <<EOF > /etc/profile.d/tjameson.sh
export PATH=$PATH:/usr/local/bin
EOF
0
27.01.2020, 19:50
  • 1
    sudo имеет специальную обработку PATH таким образом, Вы не должны делать этого. –  Arrowmaster 05.07.2011, 20:47

Теги

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