Прежде всего, обратите внимание, что apt-get update
по-прежнему обновляет свои индексы соответствующим образом, он просто жалуется, что не может загрузить информацию, необходимую для некоторых из своих репозиториев.
sarah
- это кодовое имя Mint, а не кодовое имя Ubuntu, поэтому нет смысла пытаться использовать репозиторий sarah
, размещенный на Canonical; вы можете безопасно удалить дополнительные репозитории:
sudo rm /etc/apt/sources.list.d/additional-repositories.list
Это исправит наблюдаемые вами ошибки.
Определение вручную будет трудно обнаружить (возможно, в журналах истории), хотя оболочка просит показать, что она делает, а затем grep
должен помочь найти те, которые заданы в файле rc:
bash -ixlc : 2>&1 | grep ...
zsh -ixc : 2>&1 | grep ...
Если оболочка не точно захватывает необходимые параметры с помощью одного из вышеуказанных вызовов (которые интерактивно запускают нулевую команду), то сценарий
:
script somethingtogrep thatstrangeshell -x
...
grep ... somethingtogrep
Другой вариант - использовать что-то вроде strace
или sysdig
, чтобы найти все файлы, которых касается оболочка, а затем ввести grep
те вручную (удобно, если оболочка или программа не имеют флага -x
); стандартных файлов RC недостаточно для ручной проверки имени файла, если что-то вроде oh-my-zsh или конфигурации для конкретного сайта вытягивают код неизвестно откуда (или также могут быть переменные среды, как указывает sorontar в своем ответе) .
Вот где я нахожу grep -rl
очень полезным:
grep -rl alias ~/.bash* ~/.profile /etc/profile /etc/bash.bashrc
скажет вам, в каком файле используется слово alias
.
Вероятно, в ~/.bashrc
и наверняка в ~/.bash_aliases
, если он существует.
Однако невозможно быть абсолютно уверенным, что это охватывает все опции.
Эти файлы также могут вызывать или загружать любые другие файлы.
Переменная окружения типа ENV или $BASH_ENV
может направить bash на загрузку других файлов.
ищет переменную BASH_ENV в окружении, расширяет ее значение, если оно там появляется, и использует расширенное значение как имя файла для чтения и выполнения.
А псевдонимы можно даже определить, задав переменную (выделение мое):
BASH_ALIASES
Переменная ассоциативного массива, члены которого соответствуют внутреннему списку псевдонимов, поддерживаемому встроенным модулем псевдонимов. Элементы, добавленные в этот массив, появляются в списке псевдонимов
Объединив ответ thrig с предложением @MarkPlotnick , вы можете проверить, установлен ли BASH_ALIASES[ll]
для сужения круга вопросов. Здесь особенно полезны массив BASH_SOURCE
и переменные LINENO
. К сожалению, проверка того, установлен ли BASH_ALIASES[ll]
, будет успешной только после установки псевдонима, поэтому первая такая строка может быть вообще в другом файле.
PS4='${BASH_ALIASES["ll"]+"The ll alias has been defined before"} ${BASH_SOURCE}:$LINENO ' bash -lixc : |&
grep 'll alias' -m1 -B1
Вывод в виде:
/home/muru/.bash_aliases:1 alias 'll=ls -AlhF'
TThe ll alias has been defined before /home/muru/.bashrc:116 alias 'ping=ping -c5'
С помощью этой проверки можно даже завершить работу оболочки:
$ PS4='${BASH_ALIASES["ll"]+"$(kill -9 $$)"} ${BASH_SOURCE}:$LINENO ' bash -lixc : |& tail -n1
/home/muru/.bash_aliases:1 alias 'll=ls -AlhF'
Наконец-то я нашел ll
определение псевдонима для нашего веб-сервера (CentOS )в двух сценариях оболочки в/etc/profile.d/
:
/etc/profile.d/colorls.csh
/etc/profile.d/colorls.sh
Я нашел это, сначала узнав из комментариев выше, где системный -широкий профиль был:/etc/profile
. В этом файле указано, что широкие псевдонимы системы -определены в /etc/bashrc
, и в этом файле я увидел, что он перебирает несколько сценариев оболочки в /etc/profile.d/
, поэтому я использовал grep
в этом каталоге и, наконец, нашел определения. Я также обнаружил, что существует псевдоним l.
, в котором перечислены все файлы с точками :
Изcolorls.sh
:
alias ll='ls -l --color=auto' 2>/dev/null
alias l.='ls -d.* --color=auto' 2>/dev/null
alias ls='ls --color=auto' 2>/dev/null
(В colorls.csh
есть эквивалентные псевдонимы.)
functions
alias
bash -ixlc : 2>&1 | grep thingToSearchHere
zsh -ixc : 2>&1 | grep thingToSearchHere
-i Force shell to be interactive.
-c Take the first argument as a command to execute
-x -- equivalent to --xtrace
-l Make bash act as if invoked as a login shell