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

Этот небольшой сценарий Perl добивается цели. Сохраните его как duh (или независимо от того, что Вы хотите), и назовите его с duh /dir/*

#!/usr/bin/perl -w
use strict;

my @line;

sub to_human_readable {
        my ($number) = @_;
        my @postfix = qw( k M G T P );
        my $post;
        my $divide = 1;
        foreach (@postfix) {
                $post = $_;
                last if (($number / ($divide * 1024)) < 1);
                $divide = $divide * 1024;
        }
        $number = int($number/$divide + 0.5);
        return $number . $post;
}

sub trimlengthright {
        my ($txt, $len) = @_;
        if ( length($txt) >= $len ) {
                $txt = substr($txt,0,$len - 1) . " ";
        } else {
                $txt = $txt . " " x ($len - length($txt));
        }
        return $txt;
}

sub trimlengthleft {
        my ($txt, $len) = @_;
        if ( length($txt) >= $len ) {
                $txt = substr($txt,0,$len - 1) . " ";
        } else {
                $txt = " " x ($len - length($txt)) . $txt;
        }
        return $txt;
}

open(DF,"du -ks @ARGV | sort -n |");
while (<DF>) {
        @line = split;
        print &trimlengthleft(&to_human_readable($line[0]),5)," "; # size
        print &trimlengthright($line[1],70),"\n"; # directory
}
close DF;
162
29.01.2019, 17:20
9 ответов

Если Вы используете env управляйте для отображения переменных, они должны обнаружиться примерно в порядке, в котором они были созданы. Можно использовать это в качестве руководства по тому, если они были установлены системой очень рано в начальной загрузке, или более поздним .profile или другим конфигурационным файлом. По моему опыту, set и export команды отсортируют свои переменные по алфавитному порядку, так, чтобы список не был так же полезен.

58
27.01.2020, 19:28
  • 1
    Это является большим... кроме, я пытаюсь узнать то, что очищает переменную среды (набор в/etc/environment). :-) (И да, это устанавливается первоначально... Я добавляю строки в сценариях в различном для входа, где это очищено...) –  Michael Scheper 23.07.2015, 05:12

@Cian корректен. Кроме использования find и grep, нет очень, можно сделать для обнаружения, куда это прибыло из. Знание, что это - действительно переменная среды, я делал бы попытку фокусировки Вашего поиска в/etc/и Вашего корневого каталога. Замена VARIABLE с соответствующей переменной Вы ищете:

$ grep -r VARIABLE /etc/*

$ grep -r VARIABLE ~/.*

33
27.01.2020, 19:28
  • 1
    Удивительно, что ответ, в котором говоритесь 'Вы, не может', окруженный ответами, говоря 'да Вы можете', иметь даже эти много upvotes. –  Michael Scheper 23.07.2015, 05:14
  • 2
    я не вижу ответов, которые на самом деле дают способ определить, ГДЕ переменная была установлена. Существуют некоторые полезные подсказки, но никакая острота, которая может сделать задание. –  Andrew Wagner 31.07.2015, 17:13
  • 3
    , Эта вещь решила мое время. Спасибо. –  Hassan Raza 01.03.2016, 12:03

Если Вы помещаете set -x в Вашем .profile или .bash_profile, все последующие команды оболочки будут зарегистрированы к стандартной погрешности, и Вы видите, устанавливает ли один из них эти переменные. Можно поместить set -x наверху /etc/profile прослеживать его также. Вывод может быть очень подробным, таким образом, Вы могли бы хотеть перенаправить его в файл с чем-то как exec 2>/tmp/profile.log.

Если Ваша система использует PAM, искать pam_env загрузите запросы в /etc/pam.conf или /etc/pam.d/*. Этот модуль загружает переменные среды из указанных файлов, или из системного значения по умолчанию, если никакой файл не указан (/etc/environment и /etc/security/pam_env.conf на Debian и Ubuntu). Другой файл с определениями переменной среды на Linux /etc/login.defs (ищите начало строк ENV_).

23
27.01.2020, 19:28

Проверьте свои сценарии запуска на файлы, что они получают использование . (точка) или source. Те файлы могли быть в других каталогах, кроме того, /etc и $HOME.

5
27.01.2020, 19:28

Если ZSH ZSH - это ваша система входа в систему:

zsh -xl

с bash :

PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7>&2

, который будет имитировать систему входа в систему и показывать все, что сделано (Кроме в областях, где СтДерр перенаправлен с ZSH ) вместе с именем файла, который в настоящее время интерпретируется.

Так что все, что вам нужно сделать, это искать имя вашей переменной окружающей среды в этом выходе. (Вы можете использовать команду скрипта , чтобы помочь вам хранить весь вывод сеанса оболочки, или для подхода Bash , используйте 7> file.log вместо 7> & 2 Для хранения XTRACE вывод в file.log вместо на терминале).

Если ваша переменная нет там, то, вероятно, оболочка унаследована его на запуска, поэтому она была установлена ​​до того, как в конфигурации PAM, в ~ / .ssh / Environment , или вещи, прочитанные на вашем X11 Запуск сеанса ( ~ / .xinitrc , ~ / .xsession ) Или установите на определение сервиса, который начал свой менеджер входа в систему или даже ранее в некотором сценарии загрузки. Тогда Найти / etc -type f -exec grep -f the_var {} + может помочь.

138
27.01.2020, 19:28

Переменные среды хранятся в / etc / профиль файла, чтобы сделать More / etc / Профиль и просто проверьте наличие переменных Env И если / etc / profile нет, то lokk for .profile файл в вашем домашнем каталоге

0
27.01.2020, 19:28

Некоторые места, которые нужно искать в первую очередь:

Общесистемные

  • / etc / environment : специально предназначены для переменных среды
  • /etc/env.d / * : переменных среды, разделенных на несколько файлов
  • / etc / profile : все типы сценариев инициализации
  • / и т. д. /profile.d/*: сценарии инициализации
  • / etc / bashrc , /etc/bash.bashrc : предназначены для функций и псевдонимов

Для конкретных пользователей

  • ~ /.bash_profile: инициализация для оболочек входа (bash-)
  • ~ / .bashrc : инициализация для всех интерактивных (bash-) оболочек
  • ~ / .profile : используется для всех оболочек
  • ~ / .cshrc , ~ / .zshrc , ~ / .tcshrc : аналогично для оболочек без поддержки bash
57
27.01.2020, 19:28

Например, если вы хотите найти переменную HISTFILE и ее значение или хотите узнать, какие переменные определены для истории, вы должны ввести это в оболочке:

set | grep HIST
env | grep HIST
printenv | grep HIST
-2
27.01.2020, 19:28

Para los usuarios zsh, rastrear los archivos a los que se accede (durante el inicio )puede ser útil, no son demasiados y uno puede revisarlos uno -por -uno para encontrar dónde se definió algo.

zsh -o SOURCE_TRACE
5
27.01.2020, 19:28

Теги

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