Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
16.73 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

 

 

unixoidw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ДВЕРАЗНЫЕГРАФИЧЕСКИЕТЕМЫGRUB2

системы меню. Они могут коренным образом отличаться друг от друга. Загрузчик стал гораздо умнее: конфигурационный файл /boot/grub/grub.cfg теперь содержит прямое упоминание о том, что вместо его ручного редактирования следует воспользоваться командой update-grub. Команда сама найдет все установленные операционные системы и подсобные самодостаточные утилиты (memtest86, например) и добавит их в конфигурационный файл.

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

ОСОБОЕ МНЕНИЕ РАЗРАБОТЧИКОВ

DEBIAN

В отличие от BSD-систем, большинство компонентов которых развивает одна команда разработчиков, дистрибутивы Linux держатся на кирпичиках, созданных независимыми командами. Дворец, именуемый «операционная система Linux», построен огромным количеством людей, и каждый из них имеет собственное представление об удобстве, стиле и подходе к написанию приложений. Такая ситуация доставляет множество проблем создателям дистрибутивов, но зато оставляет право выбора (не нравится — приготовь сам). Разработчики дистрибутива Debian воспользовались этим правом, чтобы заменить один из главных компонентов ОС Linux — стандартную библиотеку языка Си.

Это может показаться странным, но мантейнеры наиважнейшего компонента ОС Linux, библиотеки glibc (GNU C Library), умудрились довести свою разработку до такого состояния, что недовольным пришлось создать собственную группу поддержки их продукта. Стартовавший совсем недавно проект eglibc занялся поддержкой особой версии glibc, которая бы не только решала проблемы сопровождения библиотеки, но и позволяла использовать ее во встраиваемых системах. Проект был быстро взят на вооружение мантейнерами Debian. Их аргументы были более чем весомы:

• Более открытое сообщество разработчиков.

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

Поддержка встраиваемых систем (glibc ориентирована на десктопы и серверы).

Поддержка множества командных интерпретаторов (glibc поддерживает только bash).

Возможность сборки библиотеки с оптимизацией по размеру (флаг gcc ‘-Os’).

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

Библиотека eglibc полностью бинарно совместима с glibc и уже используется другим известным проектом

OpenWrt (openwrt.org).

БОРЬБА ЗА БЕЗОПАСНОСТЬ

В начале 2006 года компания Novell анонсировала новую систему создания политик безопасности для приложений. Проект получил имя AppArmor и был нацелен на тех пользователей и системных администраторов, которым требовалась более удобная и простая

всопровождении альтернатива SELinux. Однако, к несчастью компании, AppArmor не смог составить достойной конкуренции SELinux, и Novell пришлось отказаться от применения новой разработки в своих дистрибутивах.

Провал AppArmor не был вызван головотяпством маркетологов Novell. Причины неудачи носили чисто технический характер. Одной из них был неэффективный, по мнению специалистов, способ привязки политик безопасности к файловому пути (а не к объекту, как это сделано в SELinux). Другая проблема — костыли

вкоде, которые пришлось нагородить, потому что механизм LSM (Linux Security Modules) не предусмат-

ривал возможности привязки действий по обеспечению ограничений приложения к файловому пути. Мантейнеры Linux-ядра обозвали присланные Novell патчи кашей, которую просто некошерно включать в основной код.

Несмотря на все это, идея привязки политик безопасности к файловому пути была слишком лакомым кусочком, чтобы кто-то другой не заинтересовался ей

INFO

info

Несмотрянавсе достоинства иуникальныечерты,

файловаясистема ext4 — недолгосрочноерешение, алишь промежуточныйшаг напутикbtrfs, файловойсистеменового поколения, которая должнастатьофициальнойФСLinux черезнескольколет.

Врамкахакциипо защитеавстралийскогоТасманского Дьяволаотвымирания, Linux-ядровер- сии2.6.29 получило новыйлоготип, накоторыйтыможешьполюбоваться, открыв файлDocumentation/ logo.svg.

XÀÊÅÐ 07 /127/ 09

079

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

BUY

>>m

 

 

 

w

Click

to

 

 

 

 

unixoid

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

КРИТИКА

EXT4

 

 

МИГРИРУЕМ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Многочисленные техники, направленные на увеличение произ-

 

 

 

НАEXT4FS

 

 

 

 

 

водительности новой файловой системы, сыграли злую шутку с ее

 

 

 

 

 

 

 

 

 

 

 

 

 

создателями. Резкая критика обрушилась в их адрес после вклю-

 

 

Сейчас мы разберемся, как перейти на ext4 без потери

данных.

 

 

 

 

 

чения поддержки ext4 в дистрибутив Ubuntu. Суть проблемы за-

 

 

Сразу должен предупредить: после выполнения приведенных

 

 

 

 

 

 

 

 

 

 

 

 

ключалась в следующем: благодаря отложенному распределению

 

 

действий ext3-раздел больше нельзя будет смонтировать как

 

 

 

 

 

и увеличению периода сброса данных на диск, между созданием

 

 

ext3 — только как ext4! Открой терминал и набери:

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

до 150 секунд. Если в течение этого периода происходило отклю

-

 

 

 

# tune2fs -O extents,uninit_bg,dir_index /dev/èìÿ_óñò-

 

 

 

 

 

чение питания компа, файл бесследно исчезал. Разработчики

 

 

 

ройства

 

 

 

 

 

 

 

 

 

 

ext4 сняли с себя ответственность, сказав, что подобным образом

 

 

 

 

 

 

 

 

 

 

 

 

 

ведет себя любая современная ФС (XFS, Reiser4), а пинать следует

 

 

На момент ввода этой команды

устройство

должно быть размон-

 

 

 

 

 

разработчиков приложений, которые не заботятся о выполнении

 

 

тировано. Если требуется

преобразовать

корневую файловую

 

 

 

 

 

системного вызова sync() после записи важных данных. В пример

 

 

систему в ext4, то команду следует вводить с LiveCD.

 

 

 

 

 

был поставлен редактор emacs, который никогда не теряет файлы

 

 

После этого проверим файловую систему:

 

 

 

 

 

íà ext4.

 

 

# fsck -pf /dev/имя_устройства

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Монтирование производится следующим образом:

 

 

 

 

 

 

 

 

 

 

 

 

# mount -t ext4 /dev/имя_устройства /точка_монтирования

 

 

 

 

 

 

 

 

 

 

 

# mount -t ext4 /dev/disk/by-uuid/UUID-устройства /точ-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ка_монтирования

 

 

 

 

 

 

 

 

 

 

 

Если раздел автоматически монтируется через /etc/fstab, не

 

 

 

 

 

 

 

 

 

 

 

забудь исправить файловую систему на ext4:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ECLIPS-ПЛАГИНДЛЯРЕДАКТИРОВАНИЯПОЛИТИК

TOMOYO LINUX

КОНФИГУРАТОРПОЛИТИКTOMOYO LINUX

и не попытался реализовать вновь. Одними из таких людей стали разработчики MAC-системы TOMOYO Linux (elinux.org/TomoyoLinux).

Пройдя долгий и тернистый путь, сопровождаемый множеством переработок дизайна, они добились-таки включения своей разработки в ядро версии 2.6.30. Набор модулей ядра TOMOYO Linux очень похож на AppArmor, но концептуально более изящен. Он прост

080

UUID=UUID-раздела

/точка ext4

 

defaults,errors=remount-ro,relatime

0 1

Если ты изменил тип файловой системы корневого раздела, то необходимо отредактировать файл /boot/grub/menu.lst и добавить опцию «rootfstype=ext4» в список параметров ядра. Например:

title Linux root (hd0,1)

kernel /boot/vmlinuz-2.6.28.1 root=UUID=879f797c- 944d-4c28-a720-249730705714 ro quiet splash rootfstype=ext4

initrd /boot/initrd.img-2.6.28.1 quiet

Денис Колисниченко (dhsilabs@mail.ru, www.dkws.org.ua), автор многих книг и статей, посвященных Linux.

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

Другая система обеспечения безопасности, принятая в ядро версии 2.6.30, была разработана сотрудниками IBM. Она представляет собой инфраструктуру для контроля целостности исполняемых файлов. Ее следует использовать совместно с SELinux или Slim (Simple Linux Integrity Module — простая реализация песочницы, используемая в серверном ПО IBM).

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

XÀÊÅÐ 07 /127/ 09

 

 

 

 

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

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

BUY

>>m

 

 

w

Click

to

 

 

 

 

unixoid

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

INODE

...

БЛОКИ С ПРЯМОЙ

АДРЕСАЦИЕЙ

БЛОКИ С КОСВЕННОЙ

АДРЕСАЦИЕЙ

БЛОКИ С ДВОЙНОЙ

КОСВЕННОЙ АДРЕСАЦИЕЙ

МАКСИМ «HATCHET» ПОЛЕВОЙ

/MAKS.HATCHET@YANDEX.RU/

ОПЕРАЦИЯ «РЕИНКАРНАЦИЯ»

РучноевосстановлениеданныхвLinux

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

Придетсяполагатьсятольконасебяисобственныезнания.

 

 

 

 

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

 

 

 

 

>> unixoid

Сегоднямыпоговориморучномвосстановле-

# tune2fs -l /dev/hda1

Таблицапредставляетсобоймассивструктур

ниифайловсфайловыхсистемext2 иext3. Сра-

 

типаext2_inode, размеркоторогозадается

 

зухочутебяпредупредить, чтоничегосложного

Тыувидишьмассуинформации, отражающей

вовремясозданияфайловойсистемыине

вэтомнет. Дизайнофициальныхфайловыхсис-

текущеесостояниефайловойсистемы, атакже

изменяетсясовременем(смотриполе«Inode

темLinux оченьпростипонятендаженовичку.

значения, заданныеприеесозданииинеизме-

Count» супер-блока). Каждыйэлементэтого

Все, чтооттебяпотребуется— внимательность

няемыесовременем. Одноизтакихзначений

массиваописываетодинфайлихраниттакую

иголованаплечах.

— «Block size», которое, скореевсего, будет

информацию, кактип(обычный, каталог, ссылка

Следующиедваразделапосвященытому, как

равно4096, тоесть4 Кб. Эторазмеродного

ит.д.), схемаразмещениянадиске, логический/

организованохранениефайловвext2/3, ичто

блокафайловойсистемы, базовойнеделимой

физическийразмер, дата/времясоздания/

происходит, когдапользовательвыполняет

единицыхранимойинформации. Все, что

модификации/последнегодоступа/удаления,

командуrm. Последующиеразделыописывают

находитсявФС, разбитонаогромноеколичест-

количествоссылокнафайлиправадоступа.

техникувосстановления, основаннуюнаинфор-

вотакихблоков, идажееслиразмерфайла

Структураext2_inode, выступающаявроли

мациипервыхдвух.

меньшеразмераблока, дляегохранениябудет

элементамассива, определенавфайлеsource/

АНАТОМИЯФАЙЛОВОЙ

использованцелыйблок, абольшиефайлы

include/linux/ext2_fs.h ивыглядиттак:

могутзаниматьсотнитысячблоков. Общееко-

 

 

 

СИСТЕМЫEXT2/EXT3

личествоблоковфайловойсистемыпрописано

 

Структураinode

Вначалеразделарасположенboot-сектордли-

вполе«Block count», аколичествосвободных

 

struct ext2_inode {

 

ной1024 байта. Ониспользуетсянекоторыми

— во«Free blocks».

 

/* Режим доступа к файлу */

 

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

Сразузасупер-блокомследуютдескрипторы

 

__u16 i_mode;

 

(например, Grub записываеттудакодStage 1.5).

группикартысвободногопространства(битма-

 

/* UID владельца файла */

 

Далееследуетсупер-блок, вкоторомхранится

пы), накоторыхмынебудемостанавливаться.

 

__u16 i_uid;

 

ключеваяинформацияоструктурефайловой

Авотрасположеннаясразузанимиinode-

 

/* Размер файла в байтах */

 

системы(своегородаглавныйконфиг). Чтобы

таблицавызываетособыйинтерес, потому

 

__u32 i_size;

 

прочитатьинформациюсупер-блока, запусти

какименноонаявляетсяцентрализованным

 

/* Время последнего доступа */

 

следующуюкоманду:

хранилищемвсейинформацииокаждомфайле.

 

__u32 i_atime;

 

 

 

 

 

 

082

XÀÊÅÐ 07 /127/ 09

 

 

 

 

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

 

 

unixoidw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

разделу. Этохорошодляустойчивостифайлак

 

 

 

 

 

 

 

 

 

разрушению, ноплохосточкизренияпростоты

 

 

 

 

 

 

 

 

 

егопоследующеговосстановления.

 

 

 

 

 

 

 

 

 

Именафайловхранятсявкаталогах, которые

 

 

 

 

 

 

 

 

 

насамомделеестьнечтоиное, какфайлы

 

 

 

 

 

 

 

 

 

специальноготипа. Вкаталогзаписанапосле-

 

 

 

 

 

 

 

 

 

довательностьструктуртипаext2_dir_entry_2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(илиext2_dir_entry встарыхядрах), которая

 

 

 

 

 

 

 

 

 

выглядитследующимобразом:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СТРУКТУРАКАТАЛОГОВОЙЗАПИСИ

 

 

 

 

 

 

 

 

 

 

struct ext2_dir_entry_2 {

 

 

 

 

 

 

 

 

 

 

/* Ссылка на inode */

 

 

 

 

 

 

 

 

 

 

__u32 inode;

 

 

 

 

 

 

 

 

 

 

/* Длина данной записи */

 

 

 

 

 

 

 

 

 

 

__u16 rec_len;

 

 

 

 

 

 

 

 

 

 

/* Длина имени файла */

 

 

 

 

 

 

 

 

 

 

__u8 name_len;

 

 

 

 

 

 

 

 

 

 

/* Тип файла */

 

 

 

 

 

 

 

 

 

 

__u8 file_type;

 

 

 

 

 

 

 

 

 

 

/* Имя файла */

 

 

 

 

 

 

 

 

 

 

char name [EXT2_NAME_LEN];

 

 

 

 

 

 

 

 

 

 

};

 

 

 

 

 

 

 

 

 

 

#define EXT2_NAME_LEN 255

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Когдаприложениевыполняетсистемныйвы-

 

 

 

 

 

 

 

 

 

зовopen() илиcreat() длясозданияфайла, ядро

 

ДАМПСУПЕР-БЛОКАСПОМОЩЬЮDUMPE2FS

заполняетсвободныйinode вinode-таблице

 

новымиданными. Затемдобавляетвтекущий

 

 

 

 

 

 

 

 

 

каталогновуюзаписьтипаext2_dir_entry_2,

 

 

 

 

 

 

 

 

 

записываетвнееимяфайла(полеname), его

 

 

 

 

 

 

 

 

 

 

/* Время создания */

 

 

#define EXT2_IND_BLOCK EXT2_DIR_

 

тип(file_type) ипомещаетссылкунасозданный

 

__u32 i_ctime;

 

 

BLOCKS

 

inode водноименноеполе. Витоге, пройдя

 

/* Время модификации */

 

 

#define EXT2_DIND_BLOCK (EXT2_IND_

 

поцепочкеструктуримассивоввобратном

 

__u32 i_mtime;

 

 

BLOCK + 1)

 

порядке, можнобыстронайтиданные, закреп-

 

/* Время удаления */

 

 

#define EXT2_TIND_BLOCK (EXT2_DIND_

 

ленныезафайлом— покаонжив.

 

__u32 i_dtime;

 

 

BLOCK + 1)

 

КАКПРОИСХОДИТ

 

/* GID группы */

 

 

#define EXT2_N_BLOCKS (EXT2_TIND_

 

 

__u16 i_gid;

 

 

BLOCK + 1)

 

УДАЛЕНИЕФАЙЛА

 

/* Количество ссылок на файл (0 —

 

 

 

 

 

 

Вобщихчертахпроцедураудаления(разлин-

 

 

 

 

 

файл удален) */

 

 

 

Ссылкиназакрепленныезафайломблоки

ковки) файлавыглядитследующимобразом.

 

__u16 i_links_count;

 

 

хранятсявмассивеi_block, первые12 элемен-

Драйверфайловойсистемыопределяет

 

/* Количество блоков, принадлежа-

 

 

товкоторогопредставляютсобой32-битные

каталог, закоторымзакрепленудаляемыйфайл

 

щих файлу */

 

 

 

адресапервых12 блоковфайла. Ихназывают

инаходитinode файлавпоследовательности

 

__u32 i_blocks;

 

 

блокамиспрямойадресацией. Тринадцатый

структуртипаext2_dir_entry_2. Послечего

 

/* Разные флаги */

 

 

 

элементмассивахранитссылкунаблок, храня-

отыскиваетнужныйinode вinode-таблицеи

 

__u32 i_flags;

 

 

щийадресаследующихблоковданных(«блок

уменьшаетегосчетчикссылок(i_links_count)

 

/* Зависимые от ОС значения */

 

 

косвеннойадресации»). Четырнадцатый

наединицу. Еслисчетчикнестановитсяравен

 

union osd1;

 

 

элементмассива— ссылканаблок, хранящий

нулю, удалениянепроисходит(ссылканафайл

 

/* Ссылки на блоки */

 

 

 

ссылкинаблокикосвеннойадресации(«двой-

моглаостатьсявдругомкаталоге); впротивном

 

__u32 i_block [EXT2_N_BLOCKS];

 

 

нойблоккосвеннойадресации»). И, наконец,

случае— пишитеписьма, драйверприступает

 

 

 

 

 

 

 

 

 

 

 

 

/* Версия файла (используется

 

 

в15 элементемассивахранитсяссылкана

кгрязнойработе. Всепринадлежащиефайлу

 

NFS) */

 

 

блок, содержащийссылкинаблокидвойной

блокипомечаютсякакнеиспользуемыевкарте

 

__u32 i_version;

 

 

косвеннойадресации.

свободногопространства. Обновляетсяполе

 

/* ACL-атрибуты файла */

 

 

Такаявотпутаная(ноэффективная) древовид-

времениудаления, иinode освобождается. В

 

__u32 i_file_acl;

 

 

наясхемаразмещенияданныхвфайловых

концеконцов, драйверобнуляетполеinode

 

/* ACL-атрибуты каталога (наследу-

 

 

системахext2 иext3. Приэтомблокикосвенной

файлавфайлекаталогаиувеличиваетдлину

 

ются во время создания файла) */

 

 

адресациинеобязательнодолжныследо-

предыдущейзаписинаразмерудаляемой

 

__u32 i_dir_acl;

 

 

ватьдругзадругом, дляфайловойсистемы

(именнодляэтогонужнополеrec_len).

 

/* Положение последнего фрагмента */

 

 

— этоточнотакиежеблокиданных. Дляих

Нетруднозаметить, чтофактическогоудаления

 

__u32 i_faddr;

 

 

распределенияиспользуетсястандартный

информациинепроисходит. Болеетого, inode

 

/* Зависимые от ОС значения */

 

 

механизм, которыйможетвернутьссылкуна

файлаостаетсянаместеипродолжаетхранить

 

union osd2;

 

 

блок, расположенныйвлюбойточкеразде-

всюинформациюобудаленномфайле. Ссылки

 

};

 

 

 

ла. Врезультатесхемаразмещенияданных

наблокиданныхтакжеостаютсянаместе, но

 

#define EXT2_DIR_BLOCKS 12

 

 

файламожетоказатьсяразбросаннойповсему

самиблокипомечаютсякакнеиспользуемые,

 

 

 

 

 

 

 

 

 

 

 

XÀÊÅÐ 07 /127/ 09

083

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

BUY

>>m

 

w

Click

to

 

 

 

 

unixoid

 

 

 

 

 

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

 

 

 

 

СТРУКТУРАКАТАЛОГАВEXT2/3

 

ВСТРАНЕМЕРТВЫХ

INFO

Чтобыизбежатьперезаписиблоковудаленногофайла, вос-

становлениеследуетначатьснемедленногоразмонтирова-

 

 

нияраздела. Еслижефайлнаходилсянакорневомразделе,

 

лучшеесредство— кнопкаRESET насистемномблокеи

info

последующаязагрузкасLiveCD.

Длянизкоуровневойнавигациипофайловойсистеме

 

• Дляисследования

необязательноиспользоватьшестнадцатеричныйредактор,

файловойсистемы

существуетнесколькоутилит, которыеоблегчаютэтотпро-

ext2 необязатель-

цесс. Однаизних— стандартнаякомандаdebugfs изпакета

ноиспользовать

e2fsprogs.

стандартнуюутилиту

Запустиеесуказаниемраздела, содержащегоподопытную

debugfs. Естьболее

файловуюсистему:

дружественная

 

инаглядная

$ debugfs /dev/sda1

альтернативапод

 

названиемLDE

Откроетсякоманднаястрока, котораяпринимаетмножество

(Linux Disk Editor, lde. команд. Набериhelp, чтобыувидетьих. Наиболееинтерес-

sourceforge.net).

ныедлянаскоманды: lsdel, stat, cat иdump. Командаlsdel

 

показываетвсеудаленныеinode. Выполниее:

Файловаясистема ext2 быласпроектированапообразу

иподобиюUFS (Unix File System), поэтому тылегковникнешь втему, еслизахочешь разобратьсявособенностяхвосстановленияфайлов

вBSD-системах.

Существует множествоутилит, автоматизирующих процессвосстановленияданных вфайловыхсистемах

ext2 иext3, наиболее функциональныеиз которых: TestDisk (www.cgsecurity. org/wiki/TestDisk), undelete (www.stud. tu-ilmenau.de/~mojo/ undelete.html) и sleuthkit (www. sleuthkit.org).

debugfs: lsdel

Скореевсего, списокбудеточеньдлинным, поэтомулучше сразуперенаправитьеговфайл:

$ echo lsdel | debugfs /dev/sda1 > /tmp/lsdel. out

Откройполученныйфайлипопытайсянайтиразыскиваемогоповремениудаления, размеру, владельцуидругим данным. Запомниномерегоinode ивыполникомандуstat в команднойстрокеdebugfs:

debugfs: stat <номер_inode>

На экране появится вся информация об inode (номер, тип, владелец, время создания и удаления и пр.). В конце вывода будет присутствовать информация о блоках, занимаемых файлом на диске, и их количество. На основе этих данных можно восстановить любой файл, воспользовавшись командой dd в качестве инструмента. Но есть более простой способ. Команда dump делает снимок всех блоков, принадлежащих указанному inode, и записывает их в указанный файл. Попробуй:

debugfs: dump -p <номер_inode> /tmp/восстановленный_файл

Ключ‘-p’ сохраняетзафайломпрежниеправадоступа, владельцаигруппу. Имяфайлапридетсяподобратьпопамяти, онохранилосьвкаталогеибылозатертововремяудаления. Еслитыищешьтекстовыйфайл, тодляполнойуверенности лучшесначалавыполникомандуcat надinode, которая выведетсодержимоефайлапрямонаэкран:

debugfs: cat <номер_inode>

Чтобыидентифицироватьфайлпослееговосстановления, можешьприменитьутилитыfile иstrings. Перваяпокажет типфайла, автораявыведетнаэкранвсечитаемыестроки, которыеонсодержит.

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

# debugfs -w /dev/sda1

Находимописаннымвышеспособомinode удаленногофайлаиоткрываемегонаредактирование:

debugfs: mi <номер_inode>

Командаmi расшифровываетсякак«modify inode» ипредназначенадляручногоредактированияinode. Онавыводит наэкранвсеполяinode иихтекущиезначения, заключенныевквадратныескобки. Курсорбудетостанавливаться укаждогополя, ожидаявводановогозначения, которое

можнопропустить, нажав<Enter>. Насинтересуеттолькодва поля: времяудаления(Deletion time) иколичествоссылок (Link count). Первоеследуетобнулить, авторомуприсвоить значение1. Такмывернеммертвыйфайлкжизни, новведем файловуюсистемувскомпрометированноесостояние: файл есть, нонайтиегоневозможно(записькаталога, содержащаяегоимяиссылкунаinode, ужезатерта). Сточкизрения файловойсистемыэтоошибка, котораядаетнамдвавариантапоследующихдействий.

Мыможемзапуститьfsck, которыйнайдетнесоответствияв файловойсистемеиисправитих, поместивнашихпризраковвкаталогlost+found:

# e2fsck -f /dev/sda1

Илижевоспользоватьсяметодомпрямоговмешательства: создатьжесткуюссылкунафайл, используякомандуlink

утилитыdebugfs:

debugfs: link <номер_inode> восстановленный_файл

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

КАКБЫТЬСEXT3?

Как мы уже упоминали, Linux-драйвер ext3 использует другой механизм разлинковки. Он затирает всю таблицу соответствия в inode, делая процесс восстановления данных чрезвычайно трудным, если не сказать невозможным. Но попробуем мыслить логически. Файл представляет собой последовательность блоков определенного размера, разбросанных по всему жесткому диску. У каждого типа файла есть набор признаков, по которым

084

XÀÊÅÐ 07 /127/ 09

 

 

 

 

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

 

 

unixoidw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

DEBUGFS: ИНФОРМАЦИЯОБINODE

DEBUGFS: МОДИФИКАЦИЯINODE

его можно идентифицировать. Любой медиа-файл (изображение, аудио, видео — неважно) имеет заголовок, в котором в большинстве случаев размещен не только его тип и размер, но и сведения об авторе и времени создания (id3-теги в mp3, например). Текстовые файлы сразу бросаются в глаза, благодаря своему читаемому без специальных средств содержимому. HTML, DOC и другие документы, напичканные высокоуровневыми системами разметки, также имеют заголовок и набор узнаваемых признаков.

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

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

Однакоописанныйприемсработаетлишьвоченьнебольшомпроцентеслучаев(например, файл, удаленныйна толькочтосозданнойФС). Востальных99% файлокажется сильнофрагментирован; частиубитогобудутразбросаны повсейфайловойсистеме, анасборихвединоецелое придетсяпотратитьуймувремениинервов, атоивообще смиритьсясутратой.

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

втом, что метаданные многих типов файлов хранят

еще и контрольную сумму самих данных. Для восстановления информации с небольшого носителя начала 90-х мы могли бы воспользоваться знаниями языка Си и написать программу, которая находила бы первый блок файла по его метаданным и определяла размер. А затем — просто подбирала остальные свободные блоки файловой системы в надежде составить весь файл, контрольная сумма которого будет правильной. К сожалению, если применить такую программу к современному хранилищу данных, мы дождемся скорее выхода из строя жесткого диска (вследствие износа), чем реинкарнации файла.

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

ВОССТАНОВЛЕНИЕСУПЕР-БЛОКА

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

Файловыесистемыext2 иext3 используютсвоегорода мета-блоки(группыблоков), вначалекаждогоизкоторых расположенакопиясупер-блока. Размермета-блокаравен размерублокафайловойсистемы, умноженномунавосемь. Так, перваякопиясупер-блокавФС, размерблокакоторой равен4 Кб, будетрасположенапосмещению4096*8=32768, вторая— 65536 ит.д.

Восстановитьсупер-блокизкопииможноспомощьювсетой жеутилитыe2fsck:

# e2fsck -b 32768 /dev/sda1

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

ПОДРУГУЮСТОРОНУФРОНТА

Мырассмотрелиспособывосстановленияудаленных файлов, нонислованесказалиотом, какобезопаситьсебя оттех, ктоиспользуетописанныеметодикивкорыстныхили изобличительныхцелях. Ведьхорошийспециалист, страстножелающийзавладетьтвоимиданнымиилипаролями, не остановитсянипередчем; емунебудутпомехойниспецификаработыext3, ниразрушениетаблицыinode.

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

$ dd if=/home/yulya/Последний_хит_Киркорова. mp3 of=/home/vasya/Важный_файл

$ sync

$ rm /home/vasya/Важный_файл $ sync

Вкачествеисточникамусораможноиспользовать/dev/ zero или/dev/random, комукакбольшенравится. Особенно этоактуальнодлязачисткивсегодиска(передпродажей, например):

# grep -a -B1 -A200 'root:x:0' /dev/sda1

 

$ dd if=/dev/zero of=/dev/sda1 z

 

 

 

HTTP://WWW

links

www.xs4all. nl/~carlo17/howto/ undelete_ext3.html

объемныйдокумент, описывающийпроцессвосстановления файловвфайловой системеext3.

XÀÊÅÐ 07 /127/ 09

085

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

w Click

 

 

>>m

 

 

 

 

 

++++ BUY

 

 

 

 

 

 

 

 

 

to

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

++++

++++

++++

coding

1

2

3

 

 

 

 

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

 

 

 

 

++++

++++

++++

++++

++++

++++

++++

++++

++++

++++

++ ++

++++

++++

++++

LAMP

LAMP

LAMP

АЛЕКСАНДР КРАСНОЩЕКОВ

/ AKRASNOSCHEKOV@GMAIL.COM /

ТРИПОЛНЫХПЭ

Python,PHPилиPerl?

Выбираемпоследнююбуквувслове«LAMP»

Врамкахэтойстатьимыбудемвыбиратьлампочку. Длятех, ктоещене

вкурсе, поясню: LAMP=Linux+Apache+MySQL+PHP/Python/Perl — са-

маяпопулярная, одобреннаяГорСветомиз«ДневногоДозора», электротехническаясвязкадляосвещениявсемирнойСети. Спервыми тремябуквамиакронимавсеясно(насамомделе, этотолькокажется), авотсвыборомчетвертоймысейчасипопытаемсяразобраться.

PHP A.K.A. ПРОСТОЙ

мирования, PHP-скриптыобычнохранятсяв

Вэтомвесьон: характерныйпримерскрипта

исходникахдаженапроизводственныхweb-

на«пыхе». Выводит: var

PHP (такжеизвестный, какPersonal Home Page

серверах. Этоувеличиваетвремяихвыполне-

<?php

и PHP: Hypertext Preprocessor) — этоскрип-

ниязасчеткомпиляцииналету.

$a = 'var';

тинговыйязык, которыйотличноподходитдля

PHP выполняеткод, заключенныйвтэг<?php

$b = 'iable';

web-разработки. PHP — нечтоиное, какобо-

... ?> иегоподвиды, аостальноесодержимое

$variable = 'var';

лочкавокругязыкаС, суправлениемпамятью

файлавыводитсяпрямонастраницу. Пере-

echo ${$a.$b};

(подсчетссылок) игибкойсистемойтипов.

менныепредваряютсязнаком$ инетребуют

?>

ОбычноPHP выполняетсянаweb-сервере,

указаниятипа. Ключевыесловаисинтаксис

 

 

обрабатываякоднавходеигенерируяweb-

языкапохожинабольшинствовысокоуровне-

Огромноеколичествосайтов(около20 млн.)

страницынавыходе. Также, какивомногих

выхязыковпрограммирования, следующих

вСетинаписанонаPHP, включаятаких

другихинтерпретируемыхязыкахпрограм-

синтаксисуязыкаC.

гигантов, какWikipedia, Yahoo!, Facebook,

++++

086

XÀÊÅÐ 07 /127/ 09

 

 

 

 

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

 

 

>> coding

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Digg, WordPress, YouTube. ПопулярностьPHP

основананатом, чтоеголегкоиспользовать, ивставкилегкочитаемывHTML-документах. ИспользованиеPHP впарествоимлюбимым HTML-редактором— этоотличныйпутьксозданиюдинамическогоконтентаприминимуме затратнапрограммирование.

Легкостьразработки, основаннаянафилософииPHP («Структураневажна»), имеетиобратнуюсторону. Быстронаучившисьписатьна «простом» PHP, тызабываешьособлюдении грамотнойструктурыприложения, правилах хорошеготона, икогдатвоеприложениепереходитграницы«небольшого», тыначинаешь вязнутьвсобственноручнонаписанномкоде. Вкачествеаргумента«против» можнопривестиистатистикууязвимостейPHP изNational Vulnerability Database: 35.87%(!) уязвимостей всегопрограммногообеспеченияберетнасебя

PHP.

ТРЮКИНАPHP

Проверка длины строки работает быстрее, если проверить наличие символа:

if (!isset($foo{5})) { echo "Foo is too short"; }

…а не считать длину всей строки:

if (strlen($foo) < 5) { echo "Foo is too short"; }

Поиск в массиве по ключу:

$keys = array("apples"=>1, "oranges"=>1, ...);

if (isset($keys['mangoes'])) { ... }

Работает в три раза быстрее, чем по данным:

$keys = array("apples", "oranges",

...);

if (in_array('mangoes', $keys)) {

... }?>

НесмотрянанедостаткиPHP иордынедовольныхимразработчиков, значительнобольшемупроцентукодеровоннравится. Можно сказатьобъективно: сегодняPHP — «рабочая лошадка» интернета. Егоаргументывнушительны: простовыучить, простописать, просто размещать.

PYTHON A.K.A. КРАСИВЫЙ

Питон— преимущественноночноеживотное. Деньпроводитвукрытии(норы, дупла, груды опавшихлистьев), аночьюиливсумерках выходитнаохоту. Хорошоплавает. Вырастает до1,5 метров. Крометого, Python — этоодин изязыковвысокогоуровня, общегоназначения. БазовыйсинтаксисисемантикаPython’а минималистичны, астандартныебиблиотеки, напротив, огромныисложны. Python поддер-

живаетнесколькопарадигмпрограммирования(ООП, императивноеифункциональное)

иобладаеттакимифичами, какполностью динамическаясистематиповиавтоматическое управлениепамятью.

Python разрабатывалсякаклегкочитаемый язык. Егоключеваяидея: «Долженбытьтолько один, илучшевсегоочевидный, способсделать это». Отсюдаследует, чтокод, написанныйоднимразработчиком, можетлегкоразвиваться

иподдерживатьсядругим. Крометого, Python «навязывает» программистамдисциплину (использованиемотступовисинтаксисомкода). Этопозволяетлегкоподдерживатькрупные приложения. Яговорю«отступыисинтаксис», потомучтовPython’едляотделенияблоков кодаиспользуютсяотступы, анефигурные скобки(каквС, С++,...) илиключевыеслова(как вDelphi) — вобщем-то, исключениеизправил. Увеличениеотступаидетпослеопределенных операторов(if, def, for, try ...), a уменьшение указываетнаконецтекущегоблока.

БыстраясортировканаPython. Однослово— элегантный

def qsort(L): if L == []:

return [] pivot = L[0]

return (qsort([x for x in L[1:] \ if x < pivot]) + [pivot] + \ qsort([x for x in L[1:] \

if x >= pivot]))

Python успешновнедряетсявпрограммные продуктыкакскриптинговыйязык, исполь-

зуетсяв3D-анимации(Maya, Softimage XSI, Blender) иредакторахизображений(GIMP, Inkscape, Scribus, Paint Shop Pro). Нанемдаже написанапаравидеоигр.

ТРЮКИНАПИТОНЕ

Декоратор позволяет завернуть одну функцию в другую:

def decorator1(func): return lambda: func() + 2

def decorator2(func): def print_func(): print func() return print_func

Говорим, что нужно использовать декораторы:

@decorator2

@decorator1 def function():

return 62

И... вуаля, вызов function() магиче- ски напечатает 64

Несмотрянатотфакт, чтоPython использу-

ютGoogle, Yahoo!, CERN иNASA, унегоесть

серьезнаяпроблемаспопулярностью, аточнее

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

20 книжекпроPHP/MySQL идвепроPython,

создаетсявпечатление, чтоширокиепрограммерскиемассыидутневтомнаправлении. Причинавсетаже— PHP прощеи, несмотря навсенедостатки, тысходусможешьнаписать web-страничкунаPHP, втовремякакPython потребует, какминимум, подключениябиблиотекиуменияработатьсними.

Люди, перешедшие с PHP на Python, сразу начинают кричать, что PHP не имеет шансов против Python’a и что они ни за что не вернутся обратно. Конечно, можно не обращать внимания, но эти крики основаны на фактах: выучив Python, ты начинаешь получать от него удовольствие. Однако необходимо уточнить: мало его просто выучить, нужно разобраться с использованием платформ для создания web-приложений. В связи

с этим программеры часто задают себе вопрос: «А зачем мне тратить свое время (время — деньги) на изучение Python’а, если за неделю с нуля можно начать писать на PHP?». Ответ прост: потому что разработка приложений на Python’e идет быстрее на 30%, а его уязвимости составляют всего 0.67% от общего числа, против 36% у PHP (Python неуязвим :)).

PERL A.K.A СИЛЬНЫЙ

Perl относитсякязыкампрограммирования общегоназначения. Разработанондлярутиннойобработкитекстовисоставленияотчетов исейчасиспользуетсядлярешенияширокого кругазадач, включаясистемноеадминистрирование, web-разработку, сетевоепрограммирование, игрыисозданиеGUI.

Perl, скорее, призванбытьпрактичным(легким виспользовании, эффективнымиполным), чем красивым. Онподдерживаетнесколькопарадигмпрограммирования(впрочем, какиPython сPHP), управлениепамятью(подсчетссылок), встроеннуюобработкутекстаикучусторонних модулей.

ПростыечисланаPerl. Сильно, нонепонятно

perl -wle '(1 x $_) !~ /^(11+)\1+$/ && print while ++ $_'

Perl чем-то похож на волшебную палочку. Гуру Perl’а часто считают себя волшебниками с толстыми волшебными жезлами в руках. Perl обладает богатым синтаксисом и следует философии «Должно быть много способов сделать это». Однако встретить серьезного программиста на Perl в наше время уже не так легко. Perl нужно учить дольше, чем Python, не говоря уже о PHP, и за ним закрепилась прочная репутация языка «только на запись».

XÀÊÅÐ 07 /127/ 09

087

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

E

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

-

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

++++ BUY

>>m

 

 

 

 

 

coding

 

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

++++

 

 

 

МНЕНИЕЭКСПЕРТОВ

++++

 

 

 

 

 

 

 

РОМАН«SPIRIT» ХОМЕНКО,

 

 

 

 

 

 

 

 

 

ЛЕЙТЕНАНТМИЛИЦИИ,

++++

 

 

 

ПОСТОЯННЫЙАВТОРРАЗДЕЛА«КОДИНГ»

 

 

 

 

 

 

 

 

 

 

Роман, оправданоливсеобщеевосхищение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Python’ом? Действительнолиразработкананемидет

 

 

 

 

 

 

 

 

 

вразыбыстрее?

++++

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

++++

 

 

 

 

 

 

 

++++

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

++++

 

 

 

 

 

 

 

++++

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

МИХАИЛФЛЕНОВ,

ПРОФЕССИОНАЛЬНЫЙПРОГРАММИСТ. АВТОРМНОЖЕСТВАБЕСТСЕЛЛЕРОВ. ОСНО-

ВАЛКОМПАНИИHEAPAR SOFTWARE ИCYD SOFTWARE LABS

Михаил, какимвывидитебудущееPHP? PHP становитсялучшеилимедленновытесняетсяконкурентами?

 

 

 

 

IMHO, язык PHP будет жить еще долго и счастливо. Одна из

 

 

 

 

++++

 

 

причин тому — тот факт, что в свое время язык получил большую

 

 

 

 

популярность и на нем написали множество крупных и мелких

 

 

 

 

проектов. У меня 10 сайтов (не считая двуязычных вариантов),

 

 

 

 

и из них 8 написано на PHP и два на ASP.NET. Буду ли я пере-

++++

 

 

писывать 8 сайтов на более мощном языке программирования

 

 

 

 

только потому, что он мощнее? Конечно же, НЕТ. И точно так

 

 

 

 

же поступят большинство человекоразумных в тех компаниях,

 

 

 

 

 

 

 

 

которые используют PHP.

++++

 

 

 

 

Для того чтобы Yahoo переписала все свои программы, нужны

 

 

 

 

сотни миллионов долларов. Даже если какая-то платформа ра-

 

 

 

 

ботает на 50% эффективнее и можно будет сэкономить ресурсы

 

 

 

Теоретически я тут во всю должен расхваливать Python, говорить

датацентров, намного дешевле будет расширить мощности да-

++++

 

какой он суперовый, и я бы мог, ведь это чистейшая правда. Но... если

тацентров, чем переписывать код. Возможно, новые разработки

 

 

 

ты новичок в веб-программинге, то учи PHP — не ошибешься. Ведь

будут писаться на новой платформе, но существующий код

 

 

 

Python представляет собой язык общего назначения, а PHP — полно-

большинство переписывать не станет. Поэтому PHP еще долго

 

 

 

 

 

 

стью веб-ориентирован, все в нем заточено под веб-кодинг.

будет жить счастливо, вне зависимости от действий конкурен-

++++

 

 

Когда же выучишь PHP достаточно хорошо, поймешь ООП, MVC и дру-

тов — уж слишком он популярен.

 

 

 

гие сложные слова, а потом еще и начнешь использовать фреймвор-

Чтобы меня что-то заставило перейти на другую платформу

 

 

 

ки... Вот тогда попробуй связку Python + Django (или какой-то другой

или язык, я должен увидеть реальное преимущество для себя и

 

 

 

фреймворк) и, скорее всего, ты полюбишь Питон за красоту про-

посетителей моих сайтов. Единственное, чего может не хватать

++ ++

грамм, за библиотеки, за скорость как разработки, так и его работы

крупным разработчикам в PHP — хорошей поддержки многоя-

 

 

 

— за то, что он просто есть :).

дерности и многопроцессорности. Это может стать серьезной

 

 

 

Python — мощнейший язык, красоту которого не поймешь при на-

проблемой в среде Web 3.0 или даже Web 4.0, где свою эф-

 

 

 

 

 

 

писании простенькой домашней страницы. Лишь при разработке

фективность смогут показать платформы .NET и Java, которые

++++

 

 

больших проектов можно почувствовать его силу. Хотя может быть, ты

лучше готовы к будущему на уровне платформы. Но рынок таких

 

 

 

считаешь, что уже готов к нему? Тогда приготовься к следующему:

задач настолько мал, что большинство не обращает внимания

 

 

 

• мало хостингов, что поддерживают Python;

на это «узкое место».

 

 

 

• заказчики больше ориентируются на PHP;

PHP не идеален, но он прост, удобен и достаточно эффективен

++++

 

• собрать команду хороших питоновских программеров сложновато;

для построения малых и средних сайтов. Некоторые компании

 

 

 

• лучшие веб-движки (гостевых, форумов и прочего) созданы на PHP.

умудряются строить на нем целые порталы, хотя это не главная

 

 

 

Но это мелочи. За Python’ом будущее. Он сейчас маленький ребенок,

стихия PHP. На рынке крупных систем (уровня предприятия)

 

 

 

 

 

 

который только научился ходить, но скоро вырастет. И может, именно

позиции PHP слабые и таковыми останутся, но для домашних

++++

 

 

тебе суждено написать лучший питоновский блог-движок, форум-

страничек, CMS, форумов и даже сайтов компаний платформа

 

 

 

движок, да и просто лучший сайт.

LAMP с PHP в хвосте будет жить.

++++

088

XÀÊÅÐ 07 /127/ 09

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