Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
9.01 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Длинный, часто обновляющийся список опубликованных уязвимостей на сайте Zero Day Initiative

атак, даже если система залатана и атака обломалась. То есть, если ты делаешь попытку атаки, а админ врубил сниффер, то он просечет фишку. Ну а если админ получит 100 000 алертов в логе? И пусть все эти 100 000 — это старые и неактуальные дыры, зато попробуй разбери, как все-таки атаковали. Так что пентестерам нужен хороший эксплойт-пак, и даже если дыра уже год как залатана, она им все равно полезна. Обслуживают такой контингент компании вроде Immunity, Core Security и Rapid7, в

иструментарий которых, в числе прочего, входят и эксплойты с дырками. Кстати, не гнушаются пентестеры и покупкой багов с рук, у частных лиц. Заплатят они меньше, чем крупные скупщики, но зато не особенно привередливы в выборе.

Скомпаниями, стоящиминапередовойлиниикомпьютернойбезопасности, ситуация обратная. Представьсебе: клиенткупил IPS некойфирмы, аэтотIPS невидитине отражаетновыхатак. Самособой, здесь пахнетвыброшенныминаветерденьгами, судамиидругимималоприятнымиштуками. Такчтоsecure-компаниямжизненноважно узнаватьобуязвимостяхкакможнобыстрее. Такиекомпаниинетолькопокупаютдырки заденьги, ноинанимаютсобственных

специалистов-ломастеров. Ктомужеесть связи. Всеболее-менеекрупныеигроки рынкатесноработаютспроизводителями иихпроблемами. Онивидятсорцы. Игроки поменьше, неимеющиеширокойпаутины связейиденегнаштатныхреверсеров, вынужденыпокупатьинформациюодырках, какидругие«простыесмертные». Производителямсофта, всвоюочередь, вообщеторопитьсянекуда. Подумайсам, чтообычноотвечаеттотжеMicrosoft, когда ихспрашиваютодырах? Верно, MS говорит что-товроде«ладно, мытутподумалии решиливыпуститьвнеплановыйпатч, ибо, да-да, планетавогне, всегорит, полыхнуло так, чтодажемызаметили». Болеетого, производители(дажете, которыесерьезно относятсякэтимвопросам) инфуодырках получаютвосновномнахаляву, ненапрягаясь. Схемапроста: кто-тонашелдыру, обрадовалсяипо-тихомупродалеенекому кул-хацкеру, который, всвоюочередь, с помощьюэтойдырыатаковал«большую рыбу». Админ«большойрыбы» оказался недурак— унегостоиткучаснифферови логгеров. Зафиксироваватаку, онотослал вседанныеаверскойкомпании. Аверская компанияпосвоимвнутреннимвзаимным договоренностямтутжесообщилапроиз-

XÀÊÅÐ 02 (145) 2011

водителюсофта, чтовегопродуктенашли уязвимость. Такимобразом— всеголишь перваяреальнаяэксплуатациябага, а информацияонемужедошладопроизводителя. Да, конечно, еслипроизводитель будетсуетитьсясам— онвыиграетвремя. Нозачем? Насозданиепатчавсеравно потребуетсянекоторыйсрок, даиреальных убытковотдырокпроизводительпочти никогданенесет. Такчто, получается, чтооб уязвимостивсеравноузнают. Ивсеравно еепридетсяфиксить. Нопроизводителю нетсмыслаплатитьзато, чтобыузнатьо нейпервым. Именнопоэтомупредложения

Mozilla иGoogle — этообычныйPR, особен-

носучетомтого, что«крутость» дырыони определяютсами.

Напоследокзамечу, чтовсенетакстрашно, какможетпоказаться. Соднойстороны, дыроквсовременномсофтебессчетное количество, онистоятнеплохихденег, продаютсяиперепродаютсяизруквруки, а такжевесьмамедленнопатчатся. Сдругой стороны, нестоитзабыватьотом, чтореальнодлямассовыхисерьезныхатакиспользуетсяничтожныйпроцентэтихсамыхуязвимостей. Статистика, видишьли, утверждает, чтохакерывбольшинствесвоемленивыдо ужаса:). z

079

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

P

 

 

 

 

 

NOW!

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

 

 

UNIXOID

 

 

 

 

 

 

 

 

m

 

Евгений Зобнин zobnin@gmail.com

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Âпоисках слабогозвена

Какнайтиузкиеместавприложениях

Существует такая статистика: 20% кода выполняется 80% времени. Точность ее вряд ли полностью соответствует реальному положению вещей, а вот общий смысл довольно интересен: получается, что оптимизация всего приложения — занятие неблагодарное и глупое, а реальные результаты может дать только оптимизация тех 20% приложения, которые выполняются дольше всего. Причем найти эти 20% не так уж и сложно.

Вэтойстатьемыбудемговоритьопрофилировании. ЕсливеритьВикипедии, тоэто

— «сборхарактеристикработыпрограммы, такихкаквремявыполненияотдельных фрагментов, числовернопредсказанных условныхпереходов, числокэш-прома- ховитакдалее». Впереводеэтоозначает «выявлениеузкихместпрограммы» (или, какговорятанглофилы, «бутылочных горлышек»), аименно— всехтехучастковкода, накоторыхпрограмманачинает «пробуксовывать», заставляяпользователя

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

GNU Profiler (илиgprof). Ониспоконвеков используетсядляпрофилированиякода, генерируемогокомпиляторомGCC. Второй

— GNU Coverage testing tool (gcov), утилита дляболеедетальногоанализапроизводительности. Третий— наборинструментов

отладкиипрофилированияподобщим именемGoogle Performance Tools (сокра-

щенноGPT). Нуачетвертый— этоValgrind, которыйхотьипредназначендляпоиска ошибокработыспамятью, носодержитв своемарсеналерядутилитдляанализа производительностипрограмм. Начнем, как иполагается, склассики.

GNUProfiler

GNU Profiler (gprof) — одинизстарейших

профайлеров, доступныхдляоперационных

080

XÀÊÅÐ 02 (145) 2011

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Рис.1 Таблицы, генерируемые gprof, интуитивно понятны

Рис.2 На первый взгляд граф gprof выглядит несколько путаным, но со временем все встает на свои места

системтипаUNIX. Онвходитвсоставпакетаgcc, иможетбытьиспользовандляпрофилированияпрограмм, написанныхналюбомподдерживаемомимязыке(а

этонетолькоC/C++, ноиObjective-C, Ada, Java). Сампо себеgprof неявляетсяинструментомпрофилирования, алишьпозволяетотобразитьпрофильнуюстатистику, котораянакапливаетсяприложениемвовремяработы (самособойразумеется, поумолчаниюникакоеприложениеэтогонеделает, номожетначать, еслисобрать программусаргументом'-pg').

Рассмотрим, какэтоработаетвреальныхусловиях. Чтобыощутитьвседостоинстваgprof, мыприменимеенек какому-нибудьабстрактному, искусственносозданному приложению, аксамомунастоящемуповседневноиспользуемому. Пустьэтобудетgzip. Получаемираспаковываемисходникиархиватора:

$ wget www.gzip.org/gzip-1.3.3.tar.gz

$ tar -xzf gzip-1.3.3.tar.gz $ cd gzip-1.3.3

Устанавливаеминструменты, необходимыедлясборки (вUbuntu этоделаетсячерезинсталляциюмета-пакета build-essential):

$ sudo apt-get install build-essential

Запускаемконфигураторсборки, передаввпеременной окруженияCFLAGS аргумент'-pg':

$ CFLAGS='-pg' ./configure

Компилируемпрограмму: make. Унасестьбинарник gzip, способныйвестистатистикусвоегоисполнения. Каждыйегозапускбудетсопровождатьсягенерацией файлаgmon.out:

$ ./gzip ~/ubuntu-10.10-desktop-i386.iso $ ls -l gmon.out

-rw-r--r-- 1 j1m j1m 24406 2010-11-19 14:47 gmon.out

Этотфайлнепредназначендлячтениячеловеком, но можетбытьиспользовандлясозданияподробногоотчетаобисполнении:

$ gprof ./gzip gmon.out > gzip-profile.txt

Важнаячастьполученногофайлапоказананаскриншоте1. Каждаястрока— этостатистикаисполненияодной функции, столбцы— различныепоказатели. Насинтересуютпервый, третий, четвертыйиседьмойстолбцы.

Ониотображаютинформациюобобщемколичестве времени, затраченномнаисполнениефункции(первый столбец— впроцентах, третий— всекундах), количествееевызововиимени. Попробуемпроанализировать отчет. Первойвспискеидетфункцияdeflate, которая былавызванавсегоодинраз, но«сожрала» 29% всего времениисполненияпрограммы.

Этореализацияалгоритмакомпрессии, и, еслибы переднамистоялазадачаоптимизироватьgzip, мы должныбылибыначатьименноснее. 22% времени ушлонаисполнениефункцииlongest_match, но, в отличиеотdeflate, онабылавызванааж450 613 081 раз,

INFO

info

По умолчанию gprof не выводит профильной информации для функций библиотеки libc, но ситуацию можно исправить, установив пакет libc6-prof и собрав тестируемое с библиотекой libc_p: «export LD_FLAGS= '-lc_p'».

Активировать профайлер GPT можно не только с помощью переменной

окружения CPUPROFILE, но и обрамив тестируемый участок кода функциями

ProfilerStart() и ProfilerStop(), которые объявлены в google/ profiler.h.

WARNING

warning

Из-за требований к безопасности GPT не сработает в отношении приложений с установленным битом SUID.

XÀÊÅÐ 02 (145) 2011

081

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

UNIXOID

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Рис.3 Утилита gcov позволяет выявить проблемные места на уровне строк исходного кода

поэтомукаждыйотдельныйвызовфункциизанималничтожное количествовремени. Этовторойкандидатнаоптимизацию. Функцияfill_window отняла13% всеговремениибылавызвана«всего» 22 180 раз. Возможно, ивэтомслучаеоптимизациямоглабыдать результаты.

Промотавфайлотчетадосередины(кстати, сразузатаблицейидет подробнаясправкаобовсехеестолбцах, чтооченьудобно), мы доберемсядотакназываемого«графавызовов» (Call graph). Он представляетсобойтаблицу, разбитуюназаписи, отделенныедруг отдругапунктиром(повторяющимисязнакамиминуса). Каждаязаписьсостоитизнесколькихстрок, приэтомвтораястрокавопреки здравомусмыслуназывается«первичной» иописываетфункцию, которойпосвященазапись. Строкойвышерасполагаетсяописание вызывающейеефункции, аниже— вызываемыхей.

Столбцысодержатследующее(слеванаправо): индекс(index, он естьтольковпервичнойстрокеиничегонезначит); процентвремени, уходящийнавыполнениефункции(% time); количествовремени, затрачиваемоенаеевыполнениевсекундах(self); количество времени, затрачиваемоенавыполнениефункцииивсехвызываемыхеюфункций(children); количествовызововфункции(called) иееимя(name). Графвызововоказываетсяоченьполезен, для оптимизациичужогокода: cтановятсявиднынетолькоузкиеместа программы, ноилогикаееработы, котораяможетбытьнеочевидна приизученииисходников.

GNUCoveragetestingtool

Кромеgprof, компиляторGCC имеетвсвоемсоставеещеодин инструментпрофилирования, которыйпозволяетполучитьболее детальныйотчетовыполненииприложения. Утилитаназывается gcov ипредназначенадлягенерациитакназываемогоаннотированногоисходногокода, которыйнапротивкаждойстрокисодержит количествоееисполнений.

Этоможетпонадобитьсядляболееглубокогоизученияпроблем приложения, когдафункции, виновныев«тормозах», найдены, асутьпроблемытакиостаетсянеясна(например, непонятно, какаястрокавмногократновложенномциклевнутридлиннющей функциинесетответственностьзааномальноепадениепроизводительности). Gcov неможетполагатьсянастатистику, генерируе-

муюприложениемприсборкесфлагом'-pg', итребуетпересборкис флагами'-fprofile-arcs' и'-ftest-coverage':

$ CFLAGS='-fprofile-arcs -ftest-coverage'

./configure && make

Далееприложениенеобходимозапустить:

$ ./gzip ~/ubuntu-10.10-desktop-i386.iso

Длякаждогофайлаисходногокодабудетсгенерированграфвызовов, наосновекоторогоможносоздатьподготовленныйдлячтения человекоманнотированныйисходник:

$ gcov deflate.c

File 'deflate.c'

Lines executed:76.98% of 139 deflate.c:creating 'deflate.c.gcov'

Полученныйврезультатефайлсостоитизтрехколонок: количествоисполненийстроки, номерстрокиисамастрока. Приэтомдля строк, несодержащихкода, впервойколонкебудетстоятьзнак минуса, адлястрок, ниразуневыполненных— последовательность шарпов: #####.

GooglePerformanceTools

Google Performance Tools (сокращенноGPT) — эторазработка сотрудниковGoogle, предназначеннаядляпоискаутечекпамятии узкихместприложений. Какиgprof, GPT неявляетсявнешнейпо

Чтобыпроизвестипрофилированиевручную, достаточнопоместить вызовыстандартнойPOSIX-функцииgettimeofday() вокругвсехнуждающихсявпрофилированиифункций, азатемвычестьзначение, полученноепослевызовафункции, иззначения, полученногодоее вызова. Результатомбудетдлительностьисполненияфункции.

082

XÀÊÅÐ 02 (145) 2011

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Рис.4 Таблица, генерируемая GPT, очень похожа на таблицы gprof

отношениюктестируемомуприложениюпрограммойизаставляет егосамостоятельновестистатистикусвоегоисполнения. Однакоиспользуетсядляэтогоневнедренныйнаэтапесборки

приложениякод, абиблиотеки, которыемогутбытьприлинкованык приложениювовремясборкиилиподключеныпризапуске. Всего разработчикамдоступнодвеподключаемыхбиблиотеки: tcmalloc (которая, поуверениюавторовGPT, представляетсобойсамую быструюнасветереализациюфункцииmalloc, атакжепозволяет производитьанализтого, какпамятьрасходуется, выделяетсяи течет) иprofiler, генерирующаяотчетовыполнениипрограммы, наподобиеgprof. Такжевкомплектвходитутилитаpprof, предназначеннаядляанализаивизуализациинакопленныхданных. Исходныйкод, атакжеrpm- иdeb-пакетывсегоэтогонабора доступнынаофициальнойстраничке(code.google.com/p/googleperftools), однакоябынесоветовалзаморачиватьсясручнойустановкой, таккакнабордоступенвстандартныхрепозиторияхFedora иUbuntu, иегоможноустановитьоднойпростойкомандой:

$ sudo apt-get install google-perftools \ libgoogle-perftools0 libgoogle-perftools-dev

Далееприступаемкпрофилированию. Легчевсегоэтосделать, простоподсунувнужнуюбиблиотекупрямововремязапускапрограммыспомощьюLD_PRELOAD:

$ LD_PRELOAD=/usr/lib/libprofiler.so.0.0.0 \ CPUPROFILE=gzip-profile.log ./gzip \ /home/j1m/ubuntu-10.10-desktop-i386.iso

Однакосамигугловцынесоветуютприменятьэтотметод(очевидно из-запроблемспрограммами, написанныминаC++), рекомендуя линковатьбиблиотекувовремясборки. Чтож, небудемспорить.

Дляэкспериментоввозьмемвсетотжеgzip иповторнопересоберемего, слинковавбинарникснужнойбиблиотекой:

$ cd ~/gzip-1.3.3 $ make clean

$ ./configure

$ LDFLAGS='-lprofiler' ./configure && make

Теперьgzip вновьготоввестилогсвоегоисполнения, нонебудет делатьэтогопоумолчанию. Чтобыактивироватьпрофайлер, необходимообъявитьпеременнуюокруженияCPUPFOFILE иприсвоить ейпутьдофайлапрофиля:

$ CPUPROFILE=gzip-cpu-profile.log ./gzip \ ~/ubuntu-10.10-desktop-i386.iso

PROFILE: interrupts/evictions/bytes = 4696/946/91976

Какивслучаесgprof, получившийсяотчетимеетбинарнуюформу иможетбытьпрочитантолькосиспользованиемспециальной утилиты. ВGPT еерольвыполняетperl-скриптpprof (вUbuntu во избежаниепутаницысдругойодноименнойутилитойонпереиме- нованвgoogle-pprof), которыйгенерируетнетолькотаблицыи аннотированныеисходникинаманерgcov, ноивизуальныеграфы вызовов. Существует11 типоввыводаэтойутилиты, закаждым закрепленсоответствующийаргументкоманднойстроки:

1.Текстовый(--text) — таблица, подобнаявыводуgprof;

2.Callgrind (--callgrind) — выводвформате, совместимомсутили-

тойkcachegrind (изпакетаvalgrind);

3.Графический(--gv) — графвызовов, немедленноотображаемый наэкране;

4.Листинг(--list=<regexp>) — аннотированныйлистингуказанной функции;

5.Дизассемблированныйлистинг(--disasm=<regexp>) — аннотированныйдизассемблированныйлистингуказаннойфункции;

6.Символьный(--symbols) — листингдекодированныхсимвольных имен;

7.Графическийфайл(--dot, --ps, --pdf, --gif) — графвызовов, сохраняемыйвфайл;

8.Сырой(--raw) — подготовкабинарногофайлапрофилякпередачепосети(перекодируетсяспомощьюпечатаемыхсимволов). Наибольшийинтересдлянаспредставляюттекстовый('--text') и графический('--gv') типывызовов. Толькоонимогутдатьполную

XÀÊÅÐ 02 (145) 2011

083

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY

 

 

 

 

 

UNIXOID

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Рис.5 Граф, генерируемый GPT, очень прост и нагляден

информациюовыполненииприложенияивсехегопроблемных местах. Текстовыйвыводгенерируетсяследующимобразом:

$ google-pprof --text ./gzip gzip-cpu-profile.log

Каквиднонаскриншоте4, выводпредставляетсобойтаблицус перечислениемвсехфункцийизатратнаихисполнение. Напервый взглядонакажетсяоченьпохожейнатаблицу, генерируемуюутилитойgprof, ноэтонетак. Будучивсеголишьбиблиотекой, GPT не можетвестистатистикуисполненияпрограммытакжедетальнои точно, какэтоделаеткод, внедренныйпрямовприложение. Поэтомувместозаписивсехфактоввызоваивыходаизфункций (поведениепрограммы, собраннойсфлагом'-pg'), GPT применяет метод, называемыйсэмплированием. Сторазвсекундубиблиотека активируетспециальнуюфункцию, взадачикоторойвходитсбор данныхотом, вкакойточкевтекущиймоментпроисходитвыполнениепрограммы, изаписьэтихданныхвбуфер. Позавершению работыпрограммыизэтихданныхформируетсяизаписываетсяна дискпрофильныйфайл. Именнопоэтомуввыводеpprof нетинформацииотом, сколькоразфункциябылавызваназавремяработы программы, илисколькопроцентоввремениушлонаееисполнение. Вместоэтогодлякаждойфункцииуказываетсяколичество проверок, вовремякоторыхбыловыяснено, чтовданныймомент программазанималасьисполнениемэтойфункции. Поэтомуколичествопроверок, приведенноедлякаждойфункции, можносмело считатьзаобщеевремяееисполнения.

Вовсемостальномтаблицасильнонапоминаетвыводgprof: пофункциинастроку, попоказателюнастолбец. Всегостолбцовшесть:

1.Количествопроверокдляданнойфункции;

2.Тожечисловпроцентахотобщегоколичествапроверок;

3.Процентпроверокнавсеостальныефункциипрограммы;

4.Количествопроверокдляданнойфункцииивсехеепотомков;

5.Тожечисловпроцентахотобщегоколичествапроверок;

6.Имяфункции.

Поначалутакойподходкизмерениювремениисполнениякажется слишкомнеточным, ноеслисравнитьтаблицы, полученныеспомощьюgprof, стаблицамиpprof, становитсяясно, чтоонипоказывают

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

НесомненнымдостоинствомGPT передgprof являетсяумение представлятьинформациювграфическомвиде. Дляактивации этойфункцииpprof следуетзапускатьсфлагом'--gv' (кстати, для показаграфабудетиспользованаодноименнаяутилита):

$ google-pprof --gv ./gzip gzip-cpu-profile.log

Генерируемыйврезультатевыполненияэтойфункцииграфвызовов функцийоченьнаглядныйигораздоболеепростойдлявосприятияиизучения, чеманалогичныйтекстовыйграф, генерируемый командойgprof. Имяистатистикаисполнениякаждойфункции размещенывпрямоугольниках, размеркоторыхпрямопропорционаленколичествувремени, затраченномунаисполнениефункции. Внутрипрямоугольникаразмещеныданныеотом, скольковремени ушлонаисполнениесамойфункциииеепотомков(времяизмеряетсявпроверках). Связимеждупрямоугольникамиуказывают наочередностьвызовафункций, ачисловыезначения, указанные рядомсосвязями— навремяисполнениявызываемойфункциии всехеепотомков. ЕщеоднодостоинствоGPT заключаетсявспособностииспользоватьразныеуровнидетализациидлявыводаданных, позволяяпользователюсамомувыбиратьединицыдробления. Поумолчаниювкачестветакойединицыиспользуетсяфункция, поэтомулюбойвыводpprof логическиразделеннафункции. Однакоприжеланиивкачествеединицыдробленияможноисполь- зоватьстрокиисходногокода(аргумент'--lines'), файлы('--files') илидажефизическиеадресапамяти('--addresses'). БлагодарятакойфункциональностиGPT оченьудобноиспользоватьдляпоиска узкихмествбольшихприложениях, когдасначалатыанализируешь производительностьнауровнеотдельныхфайлов, затемпереходишькфункциями, наконец, находишьпроблемноеместонауровне исходногокодаилиадресовпамяти.

084

XÀÊÅÐ 02 (145) 2011

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис.6 Valgrind с плагином callgrind

Ипоследнее. Какяговорилвыше, GPT — этонетолькохороший профайлер, ноиинструментдляпоискаутечекпамяти, поэтомуу негоестьодинприятныйпобочныйэффектввидеспособностик анализупотребленияпамятиприложением. Дляэтогоприложение должнобытьсобраноилизапущеносподдержкойбиблиотеки tcmalloc, авпеременнуюHEAPPROFILE записанадресдляразмещенияпрофильногофайла. Например:

$ LD_PRELOAD=/usr/lib/libtcmalloc.so.0.0.0 \ HEAPPROFILE=gzip-heap-profile.log \

./gzip ~/ubuntu-10.10-desktop-i386.iso Starting tracking the heap

Dumping heap profile to gzip-heap-profile.log.0001. heap (Exiting)

Кполученномуфайлубудетдобавленоокончание0000.heap. Еслинатравитьнаэтотфайлутилитуpprof иуказатьфлаг'--text', онавыведетнаэкрантаблицуфункцийиуровеньпотребления памятикаждойизних. Столбцызначатвсетожесамое, чтоив случаеобычногопрофилирования, стемисключением, чтовместо количествапроверокиихпроцентныхотношенийтаблицатеперь содержитколичествопотребляемойпамятиипроцентотобщего потребленияпамяти.

Принеобходимостиэтуинформациюможнополучитьвграфическомвиде, атакжеизменитьединицыдробления. Библиотекаможет бытьнастроенаспомощьюразличныхпеременныхокружения, наиболееполезнаяизкоторыхноситимяHEAP_PROFILE_MMAP. Онавключаетпрофилированиедлясистемноговызоваmmap (по умолчаниюGPT собираетстатистикутолькодлявызововmalloc, calloc, realloc иnew).

Онимеетмодульнуюархитектуру, котораястечениемвремени позволилаемуобрастинесколькимиплагинами, неотносящимися напрямуюкотладке. Всеготакихплагинатри:

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

2.Massif — профайлеркучи, схожийпофункциональностисаналогомизпакетаGPT.

3.Callgrind — профайлер, вомногомпохожийнатаковойвgprof иGPT. ПоумолчаниювкачествеосновногоплагинаValgrind использует memcheck (отладчикпамяти), поэтомудляегозапускаврежиме профилированиянеобходимоуказатьнужныйплагинвручную. Например:

$ valgrind --tool=callgrind ./program

Послеэтоговтекущемкаталогебудетсозданфайлсименемcallgrind. out.PID-программы, которыйможнопроанализироватьспомощью утилитыcallgrind_annotate илиграфическойпрограммыkcachegrind (устанавливаетсяотдельно). Янебудурасписыватьформатгенерируемыхэтимипрограммамиданных(онхорошопредставленв одноименныхman-страницах), скажулишь, чтоcallgrind_annotate лучшезапускатьсфлагом'--auto', чтобыонсмогсамостоятельно найтифайлыисходныхтекстовпрограммы. Дляанализарасхода памятиValgrind следуетзапускатьсаргументом'--tool=massif'. После чеговтекущемкаталогепоявитсяфайлmassif.out.PID-программы, которыйможетбытьпроанализированспомощьюутилитыms_print. Вотличиеотpprof, онаумеетвыводитьданныенетольковвидестандартнойтаблицы, ноигенерироватькрасивыеascii-art графики.

ПарасловоValgrind

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

XÀÊÅÐ 02 (145) 2011

Выводы

Такиеинструменты, какgprof, gcov иGPT, позволяютпровести анализработыприложенияивыявитьвсеегоузкиеместавплоть доотдельнойпроцессорнойинструкции, аподключивкпроцессу профилированияещеиValgrind, можнодобитьсяудивительных результатов. z

085

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

P

 

 

 

 

 

NOW!

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY

 

 

 

 

 

 

 

 

UNIXOID

 

 

 

 

 

 

 

 

m

 

Евгений Зобнин zobnin@gmail.com

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Максимальный

минимум

Создаемгиковыйдесктопизподручныхматериалов

Современные дистрибутивы Linux чрезмерно дружелюбны к новичкам и совершенно неэффективны в повседневном использовании. Следуя же нашим инструкциям, ты получишь минималистическое, быстрое и удобное окружение рабочего стола, как у многих гиков.

Устанавливаем дисплейныйменеджер

Первыйшагнапутикновомудесктопу— установкадисплейного менеджера(DM), взадачикотороговходитформированиеграфическогоокнасполямидлявводаимениипароля, атакжезапусквсех остальныхкомпонентовDE.

НаиболеепродвинутыеиудобныеDM распространяютсявкомплекте спопулярнымидесктопнымисредами, такимикакKDE иGnome, нов силусвоейраздутостииадскогоколичествазависимостейдлянашего минималистичногодесктопаониподходятплохо. Поэтомуявыбрал легкийиудобныйдисплейныйменеджерSLiM (Simple LogIn Manager). SLiM доступенвосновномрепозиторииUbuntu, поэтомуеголегко установитьспомощьюлюбогоapt-клиента. Входеустановкинеоб-

ходимосогласитьсяспредложениемсделатьSLiM менеджеромпо умолчанию. Какой-либодополнительнойнастройкинетребуется, но дляудобствалучшеизменитьнесколькострокконфигурационного файла. Открываем/etc/slim.conf, находимвсамомначалеопцию default_path идобавляемвконецеезначенияследующуюзапись (опцииизначенияразделеныпробелом):

:/sbin:/usr/sbin:/usr/local/sbin

Этастрокапозволитиспользоватьадминистративныекоманды внутриDE. Далеенаходимопциюsessions иуказываемвкачестве еезначениястроку"default,awesome,xterm". Такунасбудетвсего тритипасессии: прошлая, менеджероконawesome иголыйxterm (вместокучиразличныхWM).

086

XÀÊÅÐ 02 (145) 2011

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Выбираем менеджерокон

Менеджерокон— ключевойкомпонентлюбогорабочегостола. Отеговыборазависитнетолькото, какбудет выглядетьтвойдесктоп, ноимножестводругиххарактеристик: способрасположенияоконнаэкране, наличие илиотсутствиепанелей, системыменю, возможностизаскриптоватьдействия, поддержкастандартов freedesktop, наличиетреяимногоедругое. Большинствосовременныхменеджеровоконпохожи

другнадругаипредлагаютпользователюсходныйфунк-

ционал. Fluxbox, windowmaker, kwm, compiz иогромное количестводругихWM реализуютоднуитужемодель перекрывающихсяокон, болеетридцатилетназад предложеннуюкомпаниейXerox. Междутеммногие пользователиужедавнозаметили, чтомодельнеперекрывающихсяокон(каждоеизкоторыхрастягиваетсяна вседоступноепространствоэкрана) гораздоболееудобна длявосприятияинформациииуправленияокнами. Менеджерыокон, реализующиетакуюмодель, называются тайловыми(отанглийскогословаtail — плитка, черепица). Онинестольпопулярны, какостальные, нопо-настоящему ценятсявсредегиков. Всегосуществуетоколодесятка тайловыхWM, средикоторыхестькаксовершенноминималистичные(например, ratpoison иdwm), такиочень функциональные(ion3, awesome). Болеетого, бытьтайловымумеетдажеменеджероконkwm (начинаясKDE 4.5). Длягиковскогорабочегостолаявыбралменеджерокон awesome. Онфункционаленинастраиваем, имеетвсенеобходимоедляжизни, включаяпанельуправления, меню итрей, носамоеглавное— awesome способенработатьв разныхрежимах, начинаяотклассического(стандартные перекрывающиесяокна) изаканчиваядесяткомрежимов снеперекрывающимисяокнами. Какивсеостальное, awesome доступенврепозиторииUbuntu, поэтомуего можноустановитьспомощьюapt-get:

$ sudo apt-get install awesome awesome-extra

Пакетawesome-extra содержитдополнительныемодули awesome, онинампонадобятсяпринастройке, которую мыпроизведемводномизследующихразделов.

Настраиваемэмулятор терминала

ТруднопредставитьсебеUNIX-десктопбезэмулятора терминала, агиковыйдесктоп— темболее. Ниодинпро-

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Так выглядит slim, простой и быстрый дисплейный менеджер

двинутыйпользовательиднянепроживетбезтерминала, наборасамопальныхскриптовиmc, поэтомуквыбору заменыxterm нужноподходитьсовсейсерьезностью.

Существуетмассаразличныхэмуляторовтерминалов, однаконаиболееудобнымвиспользованииинепритязательнымксистемнымресурсамясчитаютерминал rxvt-unicode. Онумеетвсе, чтотолькоможетпотребоватьсяоттерминала, ипочтинеимеетзависимостей. Кроме того, нампонадобитсявнятныймоноширинныйшрифт, удобочитаемыйинережущийглаз. Наэтурольлучшевсего подходитклассическийконсольныйшрифтterminus, уже многиегодывосхваляемыйUNIX-старожилами. Устанавливаемнеобходимыекомпоненты, плюс(во избежаниепутаницы) удаляемвсеостальныеэмуляторы терминалаизсистемы:

$ sudo apt-get install rxvt-unicode \ xfonts-terminus

$ sudo apt-get remove xterm gnome-terminal

Создаемфайл~/.Xdefaults ипишемвнегонастройки:

$ vi ~/.Xdefaults

!Для совместимости прикидываемся xterm URxvt*termName: xterm

!Желтый ненавязчивый фон URxvt*background: #e0e0ac

!Черные буквы

URxvt*foreground: Black

!Отключаем скроллбар URxvt*scrollBar: false

!Небольшой отступ от краев окна для лучшего восприятия

URxvt*internalBorder: 5

!Наш шрифт

URxvt.font: xft:Terminus:size=14

Все. Осталосьтолькоустановитьменеджерсетевых подключений, иможносчитать, чтокаркасбудущего десктопаготов.

Менеджерсетевых подключений

Безинтернетажитьнельзя, поэтомумыдолжныразобратьсястем, каксобираемсякнемуподключаться. По умолчаниювUbuntu установленменеджерсоединений NetworkManager, нопослепереездавсобственныйDE

INFO

info

• Предложенный в статье интерфейс как нельзя лучше подходит для нетбуков, на экранах которых многооконный (да еще и управляемый

мизерным тачпадом) интерфейс выглядит несколько странно.

Особенно удобным браузер uzbl становится после активации механизма подписи ссылок, который доступен по команде fl (fl* — отключить). После его включения напротив каждой ссылки появляется число, введя которое, ты попадешь на адресуемую ссылкой страницу.

Браузер uzbl можно безгранично расширять с помощью скриптов,

большое количество которых можно найти на страничке www. uzbl.org/wiki/scripts.

В любой момент тему GTK-приложений можно поменять с помощью программы gtk- theme-switch (дополнительные темы находятся

в пакетах gtk2-en- gines-*).

HTTP://WWW

links

awesome.naquadah. org/wiki/User_Contributed_Widgets

— виджеты для awesome;

awesome.naquadah. org/wiki/Beautiful_themes — темы для awesome.

XÀÊÅÐ 02 (145) 2011

087

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY

 

 

 

 

 

UNIXOID

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

Три эмулятора терминала в режиме тайлинга

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Три окна и классический режим их расположения

переднамивстанетвыбор, продолжатьлииспользоватьего, поменятьнадругойилинастраиватьвсевручную.

Япредлагаюостановитьсянаменеджереподключенийwicd, который мнекажетсяболееудобнымистабильным, актомужеимеетконсольныйинтерфейс. Установимего, заодноудаливNetworkManager:

$ sudo apt-get remove network-manager

$ sudo apt-get install wicd wicd-curses wicd-cli

Установщикавтоматическипропишетwicd вавтозапуск, поэтому послеперезагрузкинамостанетсятолькозапуститьклиент.

Собираемвсевместе

Теперьунасестьчетыреосновныхкомпонентарабочегостола, поэтомумыужеможемначатьегоиспользовать. Прощевсего этосделать, простоперезагрузивмашину. Послеэтогонаэкране

должнопоявитьсяокноslim. Нажимаем<F1> (чтобывыбратьсессию awesome), вводимимяипароль. Наэкранепоявитсяawesome в своемдефолтовомвиде(смотрискриншот).

Начинаеммедитировать. Строкасверху— этостатус-бар, егозадача— показыватьтекущеесостояниеменеджераокониуправлятьим(несмотрянаориентированностьнаклавиатурноеуправление, awesome можно контролироватьспомощьюмыши). Квадратныйзначоксеголевойстороны— стандартнаякнопкаменю, спомощьюкоторойможнозапускать приложенияиуправлятьWM. Менюможновызватьбезиспользования мыши, простонажавкомбинацию<Win+W>. Последовательностьцифр от1 до9, расположеннаясразузакнопкойменю— этотакназываемые теги, аналогивиртуальныхрабочихстоловвдругихWM. Междуними можнопереключатьсямышкойиликомбинацией<Win+номер>. С правойсторонырасположениндикатортекущейраскладкиокон(онем

мыпоговоримчутьпозже), передним— часы, апередчасами— трей(он невиден, покавнегонебудетсвернутоприложение). Междусписком теговитреемрасполагаетсястандартныйтаск-лист, показывающийоткрытыевданныймоментокна(приложения). Самиприложенияможно запускатьтремяразнымиспособами:

1.Черезменю;

2.Спомощьюгорячихклавиш(например, комбинация<Win+Enter> запускаеттерминал);

3.Черезстрокузапуска, доступнуюпонажатию<Win+R> (аналогокна запускапо<Alt+F2> вдругихWM, появляетсяпрямовстатус-баре, рядомсоспискомтегов, поддерживаетисториюиавтодополнение). Переключениемеждуприложениямисоднимтегом(тоестьрасположенныминаодномвиртуальномрабочемстоле) осуществляетсяспомощьюкомбинаций<Win+J> (вперед), <Win+K> (назад) и <Win+Tab> (междудвумяпоследними).

Поумолчаниюawesome работаетвклассическомрежиме, позволяя таскатьокнапоэкрануинакладыватьихдругнадруга. Однаковсеизменитсяпосленажатиякомбинации<Win+пробел>, котораяпереведет менеджероконвтайловыйрежим: всеокнаокажутсянаэкране, деля егомеждусобой.

Еслиокноодно— онозайметвесьэкран, дваокнаподелятэкраннадве частиповертикали, три— натричастиитакдалее. Awesome умеетрасполагатьокнаболеечемдесяткомразличныхспособов, переключаться междукоторымиможноспомощьюкликапоиндикаторураскладкив правойсторонестатус-бара(левыйклик— вперед, правый— назад), либоспомощьювсетойжеклавиатурнойкомбинации<Win+пробел> (вперед) или<Win+Shift+пробел> (назад). Оченьтруднообъяснить различиямеждувсемираскладками, поэтомурекомендуюхорошенько поэкспериментировать. Добавлюлишь, чтонаиболеепрактичнымия считаютриизних:

1.Плавающиеокна. Перваяидефолтоваяраскладка. Реализуетмодель обычныхперекрывающихсяокон, которыеможноспокойнотаскатьпо экрануспомощьюкомбинации<Win+леваякнопкамыши>, изменять размерспомощью<Alt+праваякнопкамыши> инакладыватьдругна друга. Идеальноподходитдлямногооконныхприложений(такихкак gimp) идлялюдей, которыенемогутпривыкнутьктайлингу.

2.Первыйслева, всеостальныесправа. Втораяпосчетураскладка, онаоченьудобнадляоткрытиямножестватерминалов(водномtop, в другомbash, втретьем— irc-клиентитакдалее).

3.Всеокнанамаксимум. Третьясконцараскладка, котораяраспахиваетвсеоткрытыеокнанаполныйэкран(оникакбыналоженыдругна друга). Оченьудобнадлязапускабольшихграфическихприложений, требующихмногопространства: браузеры, mail-клиенты, редакторы, таблицыипрочие.

088

XÀÊÅÐ 02 (145) 2011

Соседние файлы в папке журнал хакер