** Обновление 2045/09/21 **
Чтобы установить Catalyst 15.7 на Kali 2.0, мы должны быть очень осторожны. Я постараюсь вкратце объяснить, куда устанавливается драйвер.
Прежде всего, мы знаем, что Kali 2.0 основан на Debian 8, поэтому, когда X-сервер начинает загружать модули драйвера, он делает это в каталоге /usr/lib. В Debian это происходит следующим образом.
Когда запускается сценарий установки Catalyst, он определяет архитектуру нашего компьютера и ищет следующие папки в следующем порядке: Если архитектура x86_x64, то будет искать каталог /usr/lib64, если каталог не существует, то использует /usr/lib для установки. Нечто подобное происходит и с архитектурой i386.
В Kali есть обе директории, /usr/lib и /usr/lib64. Ранее упоминалось, что Kali основан на Debian, поэтому в Kali X-сервер будет загружать модули драйвера из каталога /usr/lib, но поскольку в Kali также есть каталог /usr/lib64, при установке Catalyst он будет установлен в каталог /usr/lib64, а не в /usr/lib, куда он должен быть установлен.
Чтобы исправить вышеуказанную проблему, нам нужно переименовать каталоги /usr/lib64 и /usr/x86_64-linux-gnu, добавив точку перед именем, это приведет к тому, что каталоги будут скрыты, и поэтому скрипт установки не найдет их и вместо этого будет использовать /usr/lib для установки драйвера.
Выполните следующие команды для успешной установки.
Сначала мы переименуем каталоги:
mv /usr/lib64 /usr/.lib64
mv /usr/x86_64-linux-gnu /usr/.x86_64-linux-gnu
Поскольку в Kali установлено ядро 4.0, нам потребуется патчить Catalyst, чтобы он работал с этой версией ядра, но мы можем сэкономить этот шаг, скачав следующий пакет, уже пропатченный для меня.
Прежде чем мы начнем, нам нужно установить некоторые зависимости, поэтому мы откроем терминал и выполним следующую команду:
apt-get install gcc g++ make dkms fakeroot
После загрузки Catalyst, мы должны распаковать его. В папке, куда вы распаковали Catalyst, откроем терминал и выполним следующие команды:
cd Setup-Experimental
mkdir /lib/modules/4.0.0-kali1-amd64/build/include/linux
cp /usr/include/linux/version. h /lib/modules/4.0.0-kali1-amd64/build/include/linux/
sh ati-installer.sh 15.20 --install
После установки драйвера появится запрос о необходимости перезагрузки компьютера. Выберите "нет".
Теперь нам нужно создать конфигурационный файл для X-сервера, поэтому выполните следующую команду:
aticonfig --initial
Примечание: Если вам нужно использовать различные опции с командой aticonfig, пожалуйста, прочитайте справку к ней, выполнив в терминале следующую команду:
aticonfig --help
По умолчанию Kali поставляется с GNOME, поэтому нам нужно выполнить следующие шаги, если мы хотим, чтобы GNOME работал правильно.
К сожалению, Catalyst имеет некоторые проблемы совместимости с GNOME, поэтому, чтобы исправить ситуацию, мы должны выполнить в терминале следующие команды:
echo "export COGL_DRIVER=gl" >> /etc/environment
echo "export COGL_OVERRIDE_GL_VERSION=1.4" >> /etc/environment
echo "export COGL_RENDERER=GLX" >> /etc/environment
echo "export LD_PRELOAD=/usr/lib/fglrx/fglrx-libGL.so.1.2" >> /etc/environment
Предыдущие команды помогают mutter определить версию OpenGL, с этим проблема с GDM решена.
Теперь нам нужно помочь mutter определить версию OpenGL, чтобы наша сессия GNOME могла правильно загружаться. Для этого выполните в терминале следующие команды:
echo "export COGL_DRIVER=gl" > ~/.xsession
echo "export COGL_OVERRIDE_GL_VERSION=1.4" >> ~/.xsession
echo "export COGL_RENDERER=GLX" >> ~/.xsession
echo "export LD_PRELOAD=/usr/lib/fglrx/fglrx-libGL.so.1.2" >> ~/.xsession
echo "gnome-session" >> ~/.xsession
Только для пользователей ноутбуков GNOME.
В ноутбуках крах gnome-shell, причина краха - X-ошибка утверждения аргументов XRRChangeOutputProperty, вызываемых из mutter-3.14.4/src/backends/x11/meta-monitor-manager-xrandr.c:output_set_presentation_xrandr
Чтобы исправить эту ошибку, необходимо перекомпилировать "mutter" с исходниками патча. Для пользователей архитектуры amd64 можно избавить себя от этой работы, скачав следующие файлы, которые скомпилировал и упаковал сам.
gir1.2-mutter-3.0_3.14.4-1~deb8u1_amd64.deb
libmutter-dev_3.14.4-1~deb8u1_amd64.deb
libmutter0e_3.14.4-1~deb8u1_amd64.deb
mutter_3.14.4-1~deb8u1_amd64.deb
Для пользователей архитектуры i386, скоро я выложу скомпилированные и упакованные пакеты, так что следите за этим руководством.
Для установки пакетов необходимо открыть терминал в папке, куда вы скачали пакеты, и выполнить следующую команду:
sudo dpkg -i *.deb
Если при установке пакетов возникнут проблемы с некоторыми зависимостями, достаточно выполнить следующую команду:
sudo apt-get -...f install
Перед перезагрузкой компьютера мы должны изначально переименовать переименованные каталоги, поскольку в них содержатся файлы, необходимые нашей системе.
В терминале выполните следующие команды:
mv /usr/.lib64 /usr/lib64
mv /usr/.x86_64-linux-gnu /usr/x86_64-linux-gnu
И с этим мы закончили. Теперь нам осталось перезагрузить компьютер, чтобы насладиться Catalyst 15.7.
Предположим, я беру строку типа:
can cats eat plants?
Использование жадного оператора c.*s
будет соответствовать всей строке, поскольку она начинается с c
и заканчивается s
, будучи жадным оператором, он продолжает соответствовать до последнего вхождения s.
В то время как использование ленивого c.*?s
будет соответствовать только до тех пор, пока не будет найдено первое вхождение s
, то есть строка can cats
.
Из приведенного выше примера вы можете понять, что:
"Жадный" означает соответствие максимально длинной строке. «Ленивый» означает сопоставление самой короткой строки. Добавление ?
к квантификатору, такому как *
, +
, ?
или {n,m}
, делает его ленивым.
Строка может быть сопоставлена несколькими способами (от простого к более сложному):
В виде статической строки (Предположим, что var='Hello World!'):
оболочка[ "$var" = "Hello World!" ] && echo yes
группаecho "$var" | grep -F "Hello"
башgrep -F "Hello" <<<"$var"
Как шарик:
оболочкаecho./*
#список все файлы в pwd.
оболочкаcase $var in (*Worl*) echo yes;; (*) echo no;; esac
баш[[ "$var" == *"Worl"* ]] && echo yes
Существуют базовые и расширенные подстановки. В примере case
используются базовые подстановки. В примере bash [[
используются расширенные подстановочные знаки. Первое сопоставление файлов может быть базовым или расширенным в какой-либо оболочке, например параметром extglob
в bash. Оба в данном случае идентичны. Grep не может использовать globs.
Звездочка в глобусе означает нечто иное, чем звездочка в регулярном выражении:
глобус* matches any number (including none) of
любые символы .
регулярное выражение* matches any number (including none) of the
предшествующий элемент .
В качестве базового регулярного выражения (BRE):
sedecho "$var" | sed 's/W.*d//'
#print :Здравствуйте!
grepgrep -o 'W.*d' <<<"$var"
#print World !
В (базовых )оболочках или awk нет BRE.
Расширенные регулярные выражения (ERE):
bash[[ "$var" =~ (H.*l) ]]
#совпадение :Hello World
sedecho "$var" | sed -E 's/(d|o)//g'
#print :Hell Wrl!
awkawk '/W.*d/{print $1}' <<<"$var"
#печать :Привет
grepgrep -oE 'H.*l' <<<"$var"
#печать :Hello World
Perl-совместимые регулярные выражения:
grepgrep -oP 'H.*?l
#печать :Хел
Только в PCRE *?
имеет определенное синтаксическое значение.
Это делает звездочку ленивой (нежадной):Лень вместо жадности .
$ grep -oP 'e.*l' <<<"$var"
ello Worl
$ grep -oP 'e.*?l' <<<"$var"
el
Это только верхушка айсберга, есть жадные, ленивые и послушные или притяжательные . Существуют также просмотр вперед и назад , но они не применяются к звездочке *
.
Существует альтернатива, позволяющая получить тот же эффект, что и не -жадное регулярное выражение:
$ grep -o 'e[^o]*o' <<<"$var"
ello
Идея очень проста :не используйте точку .
, инвертируйте следующий символ для соответствия [^o]
. С веб-тегом:
$ grep -o '<[^>]*>' <<<'<script type="text/javascript">document.write(5 + 6);</script>'
<script type="text/javascript">
</script>
Вышеизложенное должно полностью прояснить все комментарии @Bob 3. Перефразируя:
.*
жадный .*?
нет. Каковы различия в использовании. ? против.. ?
.*?
допустимо только в синтаксисе PCRE. .*
более портативный. [^a]*
Что лучше и при каких обстоятельствах? Пожалуйста, приведите примеры.
Лучше? Это зависит от цели. Лучшего нет, каждый полезен для разных целей. Я привел несколько примеров выше. Вам нужно больше?