От ssh (1) страница руководства (мой акцент):
Если команда указана, она выполняется на удаленном хосте вместо оболочки входа в систему.
Другими словами, это не делает "вход в систему" в удаленной системе при передаче команды ssh. Это выполняет Вашу оболочку в невходе в систему, неинтерактивном режиме, который заставляет другой набор файлов инициализации работать.
Необходимо проверить, где переменная ПУТИ устанавливается, и переместите это в соответствующий файл. Если Ваша оболочка является ударом, например, необходимо использовать .bashrc
, и нет .bash_profile
.
Мне удалось решить проблему, связанную с символьными ссылками в 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
команда, но возможно в этом можно выполнить просто одноэтапное.
IIRC, хинду информация о пакете хранилищ в простом тексте (/var/db/, возможно), прямой поиск может быть медленным.
Лучший способ сделать так, создают sqlitedatabase (или безотносительно дб) для всех файлов пакета, затем перечисляют все файлы в Вашей системе, ищут их в дб один за другим, если не найденный, это не принадлежит перевозке.
То, что вы ищете, может быть 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.
cat /var/db/pkg/*/*/CONTENTS | sed -r 's/^... //; s/ ([0-9a-f]+ )[0-9]+$//; s/ -> .*$//'
непосредственно, вместо удивительно медленного Pythonequery files '*'
– Evi1M4chine 30.08.2016, 14:10