Этот небольшой сценарий 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;
Если Вы используете env
управляйте для отображения переменных, они должны обнаружиться примерно в порядке, в котором они были созданы. Можно использовать это в качестве руководства по тому, если они были установлены системой очень рано в начальной загрузке, или более поздним .profile или другим конфигурационным файлом. По моему опыту, set
и export
команды отсортируют свои переменные по алфавитному порядку, так, чтобы список не был так же полезен.
@Cian корректен. Кроме использования find
и grep
, нет очень, можно сделать для обнаружения, куда это прибыло из. Знание, что это - действительно переменная среды, я делал бы попытку фокусировки Вашего поиска в/etc/и Вашего корневого каталога. Замена VARIABLE
с соответствующей переменной Вы ищете:
$ grep -r VARIABLE /etc/*
$ grep -r VARIABLE ~/.*
Если Вы помещаете 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_
).
Проверьте свои сценарии запуска на файлы, что они получают использование .
(точка) или source
. Те файлы могли быть в других каталогах, кроме того, /etc
и $HOME
.
Если 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 {} +
может помочь.
Переменные среды хранятся в / etc / профиль файла, чтобы сделать More / etc / Профиль и просто проверьте наличие переменных Env И если / etc / profile нет, то lokk for .profile файл в вашем домашнем каталоге
Некоторые места, которые нужно искать в первую очередь:
Общесистемные
/ etc / environment
: специально предназначены для переменных среды /etc/env.d / *
: переменных среды, разделенных на несколько файлов / etc / profile
: все типы сценариев инициализации / и т. д. /profile.d/*
: сценарии инициализации / etc / bashrc
, /etc/bash.bashrc
: предназначены для функций и псевдонимов Для конкретных пользователей
~ /.bash_profile
: инициализация для оболочек входа (bash-) ~ / .bashrc
: инициализация для всех интерактивных (bash-) оболочек ~ / .profile
: используется для всех оболочек ~ / .cshrc
, ~ / .zshrc
, ~ / .tcshrc
: аналогично для оболочек без поддержки bash Например, если вы хотите найти переменную HISTFILE и ее значение или хотите узнать, какие переменные определены для истории, вы должны ввести это в оболочке:
set | grep HIST
env | grep HIST
printenv | grep HIST
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