Вам, вероятно, лучше определить, каким пакетам соответствуют эти разделяемые библиотеки, и использовать этот список пакетов для установки через yum на второй машине. Таким образом вы будете получать обновления, когда их найдет yum.
Навскидку, вы можете не делать это, если:
Сбор информации о пакете осуществляется с помощью rpm -qf
для каждого файла, например,
rpm -qf /usr/lib64/libfreebl3.so
, который предоставит вам пакет и его версию - достаточно информации для установки того же пакета с помощью yum на другой машине. .
Если вы настраиваете разделяемые библиотеки, вы также должны знать, что они могут зависеть от файлов конфигурации (включая те, которые будут установлены в /etc/ld.so.conf.d
). Вы можете найти файлы, которые являются частью того же пакета , используя rpm -ql
, например,
rpm -ql $(rpm -qf /usr/lib64/libfreebl3.so)
Конечно, у вас будут дубликаты. Кроме того, эти библиотеки могут зависеть от других пакетов (со своими собственными файлами конфигурации), которые не очевидны. В этом случае rpm -qR
помогает , но необходимо немного поработать, чтобы убедиться, что у вас есть нужные файлы).
Работа со списком библиотек:
ldd Xvfb | grep '/usr/lib64/'
вы можете составить список пакетов с помощью
ldd Xvfb | grep '/usr/lib64/' | xargs rpm -qf
и получить соответствующий список файлов
ldd Xvfb | grep '/usr/lib64/' | xargs -n 1 rpm -qf | xargs -n 1 rpm -ql
и tar , которые вверху:
tar czf /tmp/blob.tar.gz $(ldd Xvfb | grep '/usr/lib64/' | xargs -n 1 rpm -qf | xargs -n 1 rpm -ql)
хотя вы можете добавить этап с помощью sort -u
, чтобы отфильтровать повторяющиеся пакеты. rpm
будет принимать несколько пакетов в одних строках, но не в других, поэтому я использовал параметр -n 1
на всякий случай (r).
Если, как предлагалось, вам просто нужны файлы библиотеки, это можно сделать следующим образом:
#!/bin/sh
mkdir /tmp/xvfb
cd /usr/lib64
tar czf /tmp/xvfb/Xvfb.tar.gz $(ldd /usr/bin/Xvfb | grep '/usr/lib64/' | cut -d '=' -f1 | awk '{print $1}' | while read IN; do OUT=`readlink $IN`; cp -rf $OUT /tmp/xvfb/$IN; echo /tmp/xvfb/$IN; done)
в то время как подход, который я предложил с использованием rpm -q
, предоставит символические ссылки для файлов. (Быстрая проверка с помощью CentOS6: здесь нет файлов ldconfig, но есть много файлов / usr / share
, которые вы бы отфильтровали).
с awk
awk -F, '{z=0; for (i=2; i<=NF; i++) if ($i == 0) z++} z != 5' file > newfile
Perl спешит на помощь!
perl -aF, -ne 'print unless 5 == grep /^0$/, @F;' < input > output
-n
читает строку за строкой -a
разбивает каждую строку на массив @F -F
указывает, как разделить (в данном случае запятой) grep
, используемый в скалярном контексте, возвращает количество совпадений. При условии, что ни одно число, кроме 0
, не начинается с 0
в вашем файле и что первое поле не является числом, как в вашем примере, вы могли бы сделать:
sed -ne 's/,0//5;t' -e p < input > output
Обратите внимание, что это удаляет те строки, которые имеют по крайней мере 5 нулей.
При использовании вашего примера можно сделать:
grep ',.*[1-9].*,.*[1-9]'
(поиск двух ненулевых полей после первого).