Вы можете выяснить это с помощью
lsof -i TCP:6010
Как root, это покажет всех TCP-слушателей, использующих дисплей X11: 10; измените 6010 на 6011 для отображения: 11 и так далее; или используйте диапазон, например TCP: 6000-6020
.
Вы можете аналогичным образом проверить прослушиватели файловых сокетов, если это тоже проблема для вас (вы получаете сообщение об ошибке только для прослушивателя INET выше, так что это не так - пока). Например, если вы запустите свой Xorg с помощью -nolisten tcp
, вы увидите это в результатах lsof /tmp/.X11-unix/*
.
Вы можете объединить оба:
lsof -iTCP:6000-6020 /tmp/.X11-unix/*
Мы можем просто изменить запрос rpm, чтобы выводилось только имя.
rpm -qa --queryformat "%{NAME}\n"
Или мы можем сделать это с помощью regex
Не совсем "прямолинейно", но вот sed regex, который должен быть в состоянии сделать это.
sed -e 's/\([^\.]*\).*/\1/;s/-[0-9]*$//' <<< "perl-Text-ParseWords-3.30-1.fc22.i686"
Это должно справиться со всем, кроме случаев, когда в имени пакета есть точка (я даже не думаю, что это допустимо).
Быстрая разбивка
s/\([^\.]*\).*/\1/
берет все до первой точки. Таким образом perl-Text-ParseWords-3.30-1.fc22.i686
становится perl-Text-ParseWords-3
s/-[0-9]*$//
избавляемся от трейлинга -
и первой цифры версии. So perl-Text-ParseWords-3
becomes perl-Text-ParseWords
.
Непосредственно в bash:
a='perl-Text-ParseWords-3.30-1.fc22.i686'
r='(^[^0-9]+)'
[[ $a =~ $r ]]
echo "${BASH_REMATCH[1]%?}"