Найдите файлы, которые не были установлены диспетчером пакетов

От ssh (1) страница руководства (мой акцент):

Если команда указана, она выполняется на удаленном хосте вместо оболочки входа в систему.

Другими словами, это не делает "вход в систему" в удаленной системе при передаче команды ssh. Это выполняет Вашу оболочку в невходе в систему, неинтерактивном режиме, который заставляет другой набор файлов инициализации работать.

Необходимо проверить, где переменная ПУТИ устанавливается, и переместите это в соответствующий файл. Если Ваша оболочка является ударом, например, необходимо использовать .bashrc, и нет .bash_profile.

8
14.10.2012, 16:47
3 ответа

Мне удалось решить проблему, связанную с символьными ссылками в portage.txt путем выполнения следующей команды:

equery files '*' | while read i; do readlink -e "${i}"; done | sort | uniq \
       > portage.txt

Это служит, чтобы вставить portage.txt символьные ссылки файлов указывают на, и не сами символьные ссылки. Это необходимо потому что find команда, которая создает all.txt не перечисляет символьной ссылки, но просто файлов, на которые они указывают, таким образом, было бы много ложных положительных сторон иначе. Это - вполне медленная команда, когда это работает readlink на тысячах файлов, но я не мог найти лучшее решение. Любое предложение приветствуется.

Другая вещь, которую я понял (это было легче) состоит в том почему portage.txt было больше, чем all.txt. Это главным образом вследствие того, что я explicitely, сокращенный /usr/src каталог и все файлы под от результатов find команда, но equery перечисленный их независимо.

Последняя вещь, которую я сделал, даже если это не было в вопросе, состояла в том, чтобы проигнорировать материал Python (главным образом __pycache__ файлы и файлы с .pyc или .pyo суффикс):

grep '\(\.cpython-32\)\?\.py[co]$\|/__pycache__' candidates.txt \
     > candidates-bytecode.txt
sed -e 's/\(\.cpython-32\)\?\.py[co]$/.py/' \
    -e 's/\/__pycache__//' \
    candidates-bytecode.txt | sort | uniq \
    > candidates-bytecode-source.txt
comm -23 candidates-bytecode-source.txt portage.txt \
     > orphaned-bytecode.txt

Таким образом, я прослеживаю источник всего материала Python и проверки, если это находится в portage.txt. Поскольку Вы видите, что я записал то же регулярное выражение два раза, один для grep команда и другой для sed команда, но возможно в этом можно выполнить просто одноэтапное.

0
27.01.2020, 20:13
  • 1
    Это, вероятно, было бы намного быстрее путем простого использования cat /var/db/pkg/*/*/CONTENTS | sed -r 's/^... //; s/ ([0-9a-f]+ )[0-9]+$//; s/ -> .*$//' непосредственно, вместо удивительно медленного Python equery files '*' –  Evi1M4chine 30.08.2016, 14:10

IIRC, хинду информация о пакете хранилищ в простом тексте (/var/db/, возможно), прямой поиск может быть медленным.

Лучший способ сделать так, создают sqlitedatabase (или безотносительно дб) для всех файлов пакета, затем перечисляют все файлы в Вашей системе, ищут их в дб один за другим, если не найденный, это не принадлежит перевозке.

0
27.01.2020, 20:13

То, что вы ищете, может быть qfile. Он является частью пакета app-portage/portage-utils и предоставляет опцию -o или --orphans. Вы можете использовать что-то вроде

find /usr/bin | xargs -I{} qfile -o {}

для получения списка осиротевших файлов в /usr/bin.

Замечание: К сожалению, qfile в текущей стабильной версии portage-utils не поддерживает readin из stdin, а решение, упомянутое в man-странице qfile qfile -o $(find /usr/bin) не работает, если набор результатов find большой, поэтому нам придется немного обойти это, используя xargs.

BTW, это не то, что я сам придумал, но я нашел это на gossamer-threads, комментарий yvasilev.

1
27.01.2020, 20:13

Теги

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