Почему стоит полюбить Linux : возможности и трюки
Запуская интернет клуб под линуксом с бездисковой загрузкой мне пришлось углубиться в детальное изучение этой системы. Теперь эти детали созрели и сформировались в окончательные мысли, которые я способен выложить с помощью клавиатуры читателю.
В интернете есть множество заметок, расказывающих о преимуществе Linux перед Windows. Я не берусь сравнивать ибо очень давно практически не пользуюсь виндой. Внесу свою лепту о прелестях линукса без особого сравнения с чем либо. Я раскажу о тех вещах, за которые я люблю и выбираю линукс. Многие из этих моментов вряд ли возможны в винде и вряд ли когда то будут возможны благодаря проприетарному закрытому коду.
Сразу оговорюсь, что речь идет о Gentoo Linux, хотя почти все описаное актуально под любым другим дистрибутивом этой операционной системы.
Командная строка
Самая страшная ассоциация Линукса, которая нагоняет страх на всех юзеров - это командная строка. Пользователи ненавидят командную строку! Миф о том, что в линуксе все делается только с помощью команд на черном экране пересказывают миллионы чайников друг другу ночью, слушая потрескивание дровишек в торрент клиенте, докачивающем свежую порнушку. Сколько не объясняй чайнику, что свои любимые видеофильмы на немецком про любовь он сможет спокойно смотреть на линуксе, все равно распространенность мифа не дает побороть ужас неизвестного: "А вдруг не смогу?".
На самом деле, практически любое действие, которое выполняется из графического интерфейса имеет свой аналог из командной строки (обратное утверждение неверно). Это дает невероятную суперсилу и суперскорость пользователю линукса.
К примеру, возникла потребность скачать файл по ссылке. Требуется быстро выбрать директорию для сохранения и скачать файл.
Классическое решение: вставляем ссылку в браузер и кликаем, выбирая директорию для сохранения.
Решение из командной строки состоит из двух команд: изменить текущую директорию куда будет сохраняться файл и собственно скачивание файла
$ cd /tmp
$ wget http://example.com/das-ist-fantastich.avi
Что? Говорите преймущество неочевидно? Тогда представим что у нас есть список URL по которым надо скачать тысячу файлов. В командной строке для решения достаточно указать в каком файле или по какому URL лежит этот список:
$wget -i /tmp/spisok.txt
Командная строка удобна при составлении списков заданий. Следующая строка подождет два часа (7200 секунд) пока доиграет жена, запустит обновление системы, после чего запакует директорию /mnt/work в архив /tmp/work.tar.gz и запишет архив на DVD на восьмой скорости без создания файловой системы для экономии места:
sleep 7200; emerge -DuN world; tar -zcvf /tmp/work.tar.gz /mnt/work; cdrecord dev=/dev/sr0 speed=8 /tmp/work.tar.gz
В общем, командная строка ускоряет, облегчает и даже отстраняет пользователя от нудной работы. Из командной строки можно выполнять такие действия, которые казалось бы ну никакой логикой с ней не связаны. К примеру, обработка графических изображений. Следующая строка открывает изображение in.png , уменьшает его пропорционально до 800 пикселей по ширине и сохраняет в out.jpg с качеством "90". Эта манипуляция требует установленый пакет ImageMagick
$convert -quality 90 -resize 800 -strip in.png out.jpg
Следующий пример сложен, но способен сохранить вам дни и недели нудной работы в фотошопе, если требуется обработать тысячи изображений. Следующая строка находит с помощью команды find в текущей директории все файлы с расширением .jpg. Названия найденых файлов передаются через xargs команде convert как параметр {}. Эта команда в каждый найденый графический файл в координатах 80x80 вписывает время и дату съемки фотографии, которые берет из EXIF. Файл сохраняется с тем же названием в директорию /tmp :
$find . -iname "*.jpg" | xargs -l -i convert -font Arial -pointsize 72 -fill white -annotate +80+80 %[exif:DateTimeOriginal] {} /tmp/{}
Пользователь оценивший суперсилу командной строки больше никогда не захочет чувствовать себя калекой, возможности которого ограничены указательным пальцем, кликающем по мыши.
Интерфейс отделен от функционала
На сервере баз данных, на веб-сервере, роутере, видеорегистраторе, ячейке распределенной вычислительной системы абсолютно не требуется наличие графического интерфейса. Такие системы работают без монитора годами. Линукс предоставляет отличную возможность выполнять все задачи не запуская графическую подсистему. Это отличная возможность использовать ресурсы компьютера более эффективно.
Ведь действительно, если у компьютера задача просто захватывать видео с камеры, сохранять его на жесткий диск и предоставлять ограниченый доступ к видеоархивам через интернет, то зачем на этой системе графический интерфейс? Гораздо удобней для такой цели веб-интерфейс.
Удаленный запуск программ
Допустим на домашнем компьютере у меня в браузере прикреплены сертификаты для электронных платежей. С собой я их не ношу. С любого линукс-компьютера я подключаюсь на домашний линукс-компьютер командой
ssh -X login@homeip
и запускаю браузер
$opera
Происходит чудо: я вижу графический интерфейс моей оперы с домашнего компьютера. Захожу на нужные сайты, делаю необходимые платежи и закрываю браузер.
Так можно запустить на удаленном компьютере любое графическое приложение, скорость работы которого упрется лишь в производительность компьютеров для шифрования и дешифрования траффика по SSH соединению и в саму скорость соединения. Приложение в таком случае использует вычислительные ресурсы одного компьютера, а графическое окно отрисовывается на другом. Это позволяет запускать требовательную к ресурсам программу на сервере, но работать с ней на древнем дохлом компьютере клиента.
Уточню, что это не аналог Rdesktop протокола, который тупо подключается к рабочему столу. Окно удаленно-запущеного приложения выглядит абсолютно как окно локального.
Ограничение прав пользователей
Обычно под ограничением пользовательских прав подразумевают ограничение к определенным файлам. Но так как в линуксе для доступа к аппаратным ресурсам компьютера используются файлы, то на любое устройство можно дать или убрать доступ.
Смотрим в каких группах состоим. Читай: какие права имеются у пользователя, под которым мы работаем в системе.
$groups
tty wheel uucp audio cdrom video usb users plugdev oper
Не хотим чтоб сотрудники использовали видеоускоритель для игры в 3D игры?
$gpasswd -d username video
Таким же макаром можно перекрыть доступ к звуковой карте, USB-портам, рекордеру дисков и т.п.
Использование песочницы
Если на очень важном сервере необходимо запустить приложение, которое является потенциальной брешью безопасности, то проблема решается созданием директории с упрощенным дубликатом linux системы. В эту директорию (назовем /mnt/sandbox ) скидывается программа и все необходимые программе части системы: например /bin, /sbin, /usr/sbin/, /var.
Запускаем вебсервер Apache, который теоретически через кривые скрипты сайтов может стать причиной взлома всю имеющейся системы
$chroot /mnt/sandbox /usr/sbin/apache
Если же злоумышленик через кривой скрипт получит доступ к серверу, то он будет ограничен директорией /mnt/sandbox. Если он получит пароли или даже сотрёт всё из этой директории, то на работу сервера за пределами этой директории его деятельность никак не повлияет.
Виртуальные машины
Предыдущий инструмент chroot - прост, но не решает проблему разделения ресурсов. Не только злоумышленик, но и обычный владелец сайт может разместить скрипт чрезмерно прожорливый к ресурсам, отобрав ценные ресурсы (память и процессорное время) у других пользователей и программ. Эта задача решается через виртуальные машины.
Виртуальные машины в линуксе - это очень серьезная и сложная тема. В рамках этой заметки я лишь поверхностно на примерах покажу какие задачи они способны решать.
Одной из распространенных бесплатных программ для создания виртуальной машины является программа VirtualBox. Запустив VirtualBox мы можем создать вирутуальный компьютер, выделив место под жесткий диск, данные которого будут лежать в файле выделенного нами размера. Мы можем настроить для этого виртуального компьютера количество выделеной памяти, количество выделеных ядер процессора, выбрать ISO образ диска, который будет вставлен в виртуальный DVD. После настройки запускаем виртуальный компьютер, загружаемся с DVD-образа и устанаваливаем на виртуальный жесткий диск операционную систему. Вся прелесть такой виртуальной машины в том, что мы можем установить не только линукс, а любую операционную систему: Windows, Solaris, MacOS, FreeBSD.
Какое практическое применение можно придумать таким виртуальным машинам?
- эксперименты с установкой новых программ, неудачи которых мгновенно откатываются в исходное состояние
- одновременный запуск нескольких различных операционных систем на одном компьютере
- сдача в аренду множества вирутуальных серверов, которые физически запущены на одном компьютере, но не мешают друг другу.
KSM
Запуск вируальной машины вполне возможен на множестве других операционных систем. Почему это находится в статье про Linux? Linux превосходно справляется с запуском множества виртуальных машин! Одной из функций улучшающих эффективность запуска множества виртуальных машин на одном физическом компьютере является KSM - Kernel Samepage Merging.
Допустим мы запустили на одном компьютере 10 виртуальных Windows-машин, каждой из которых выделено по полгига памяти. Элементарная математика говорит о том, что сожрут они 5 гиг памяти. Чем же заняты эти пять гиг памяти? В основном дубликатом операционной системы Windows и дубликатами одинаковых программ, которые запущены на этих виртуальных машинах. Допустим из 512 мегабайт виртуальной машины 200 уходит на код одинаковой системы и программ. Подсистема KSM в линуксе отслеживает одинаковые страницы памяти и объединяет их таким образом, что они находятся в одном экземпляре для всех запущеных виртуальных машин. Таким образом можно серьезно сэкономить память предоставляя в аренду виртуальные хостинговые и виртуальные сервера на одном физическом сервере.
Драйвера
На производителей оборудования в плане драйверов под линукс надеяться пока не приходится: большинство производителей железа либо не делает дров под линукс либо делает что либо кривое чтоб отмахнуться. Драйвера различных устройств в линуксе как правило идут вместе с ядром и поддержка новых устройств появляется с выходом свежих ядер. Поэтому линукс всегда имеет поддержку всего распространенного оборудования.
Вся прелесть драйверов в линуксе заключается в том, что мизерный по размерам драйвер какого либо чипсета поддерживает устройства всех производителей. Скажем, если я знаю что материнская плата на чипе NVidia, то совсем нет необходимости разбираться кто является фирмой-производителем Asus, Palit, Gigabyte или еще какая то китайская контора. Очень удобно когда втыкаеш вебкамеру в USB и с большой вероятностью ядро ее определяет и тут же позволяет работать.
Однако, в том мизерном проценте случаев, когда ядро не смогло сразу подгрузить необходимый модуль начинается линуксовый ад: приходится искать драйвер в виде модуля. А зачастую приходится искать исходный код на сайте производителя и компилировать модуль ядра. Поспешу успокоить: при всей моей любви к компиляции ядер под свои нужды в линуксе у меня не было еще ни разу потребности компилировать драйвера самостоятельно из сторонних исходников. А в FreeBSD так приходилось делать.
Оптимизация ядра и системы
Раз уж зашла речь о компилировании ядра под себя, то прийдется расказывать подробней.
Возьмем для примера элементарный инструмент. Какой должна быть удобная и эффективная лопата? Надо прикинуть кто будет пользователем лопаты и какие задачи лопатой он будет выполнять. Можно конечно штыковой лопатой перекидывать снег с тропинок, но это не эффективно. Поэтому берут совковые лопаты. Почитаем что пишет википедия про совковые лопаты
Совковая лопата — глубокая, с закраинами. Предназначена для работы с сыпучими грузами. Для каждого вида груза разработана своя форма. Песочная — обычный прямоугольник; зерновая — то же увеличенной длины и ширины; растворная — с увеличенной глубиной. угольная, породная — заостренный треугольник.
Как думаете если такой элементарный инструмент как лопата имеет такое количество специализированных моделей, можно ли сделать универсальную операционную систему, которая со всеми задачами будет справляться идеально?
Правильный ответ: Gentoo Linux! Конечно же я немного утрирую насчет идеальности, но именно эта система дает невероятные возможности для тюнига такого инструмента как компьютер.
Сейчас раскажу каким образом. Программисты пишут на Си++ и потом его компилируют в бинарный код, который непосредственно выполняется процессором компьютера. Компиляция - очень сложный процесс, который имеет множество настроек. Чтоб бинарный код одинаково хорошо работал на всех компьютерах всегда главным условием идет универсальность. Именно с расчетом на универсальность поставляются почти все операционные системы. Я говорю о всех бинарных системах, которыми являются так же и большинство Linux систем: Arch, Ubuntu, Debian, Slackware.
В отличие от бинарных систем Gentoo Linux компилируется из исходных кодов во время установки в соответствии с настройками компилятора. Таким образом, я записываю настройки в файл /etc/make.conf:
CFLAGS="-march=k8-sse3 -O2 -pipe"
CHOST="x86_64-pc-linux-gnu"
ACCEPT_KEYWORDS=~amd64
При компиляции ядра и всех программ операционной системы компилятор будет использовать оптимизацию под процессор AMD Athlon64. В результате моя операционная система получает большой прирост производительности при работе на Атлонах, но будет хуже работать на процессорах Intel (или вообще не будет работать на Intel).
Кроме настроек компилятора имеется огромное количество настроек ядра, которые позволяют улучшить работу компьютера при выполнении каждой специализированной задачи, сэкономить память, улучшить отклик системы.
Конечно же, такой тюнинг оправдывает себя лишь в редких случаях. Но оправдывает с лихвой. К примеру, сервер хостинга для динамичных игр вроде Counter-Strike обязан иметь как можно более шустрый отклик. Тюнинг ядра в этом направлении повышает общую нагрузку на процессор. Такой тюнинг абсолютно противоречит настройке вебсервера, которому не важны милисекунды в отклике, а важно снижение общей нагрузки на процессор.
Работа под администраторскими правами
Как то раз меня вызвали в полицейское отделение и задали вопрос, знаю ли я человека с фотографии. Я человека знал. Он терся у меня в клубе и был клиентом. Об этом я и поведал сотрудникам полиции. На что они мне говорят
- А вот он пишет, что он у вас работает. Его принял на работу один из операторов. Вот читайте.
- А вам не режет глаза логическая ошибка. Каким образом оператор принял на работу человека с улицы?
Менты мне поведали в чем заключается дело, я им расказал свои догадки и на этом разговор был исчерпан. Но всерьез задумался, как будет работать фирма, в которой оператор будет принимать на работу, уборщик будет оформлять бухгалтерские документы, секретарша будет перенастраивать под себя сервер и вообще любой человек будет иметь возможность все улучшать. Конечно же это удобно когда можно попросить уборщика подписать документ о получении товара и оставить ему печать фирмы. Даже при всей доброжелательности уборщика вполне вероятен момент, когда ему подсунут вместо товарно-транспортной накладной документы на оформление кредита в миллион долларов. Если организация будет работать с таким количеством степеней работы, то это будет не фирма, а бардак.
С операционной системой получается аналогичная ситуация. Очень удобно работать с правами администратора на компьютере, но вот операционная система в таком режиме долго не живет. Я люблю линукс за то что он не лоялен к работе за компьютером с администраторскими правами. Именно это является причиной отсутствия вирусов под эту систему, а не его малая распространенность.
Права на запись
Мне очень нравится принцип всех линукс программ: не записывать свои файлы где попадет. Для работы системы требуется запись в /tmp и в домашнюю директорию пользователя. В случае запуска более сложных программ требуется еще /var (например, mysql хранит в этой директории базу данных).
С использованием различных инструментов системы линукс можно подключить все необходимые для записи директории в память, на сетевой диск или на любой другой удобный носитель. Это позволяет легко и непринужденно запускать систему любым удобным способом: с CD, DVD, с флэшки и даже по сети с сервера.
Именно это свойство позволило мне сделать бездисковый компьютерный зал, где Linux загружается по сети с сервера. Такая схема позволяет работать пользователю абсолютно не замечая того факта, что на компьютере нет жесткого диска. А самое главное - на таких бездисковых станциях можно запускать OpenGL приложения и в частности игры. Это возможно потому что тут клиентский компьютер не является тонким клиентом, а использует в полной мере все свои ресурсы: процессор, память, графический адаптер. О своем интернет клубе под Gentoo Linux я подробно расказывал тут http://www.newmoldova.com/node/438 .
Обновления
Чтоб обновить систему я пишу команду
#emerge --sync; emerge -DuN world
Обновления в линуксе - это отличное событие. В программах появляются новые функции, убираются надоевшие глюки, улучшается производительность. С новыми ядрами добавляется поддержка нового оборудования и улучшается поддержка старого оборудования. Появляются новые возможности для тюнинга системы.
Я замерял и заметил, что после обновления Xorg сервера и драйверов nvidia тест glxgears показывает на одном и том же железе лучшие цифры. Разница не существенная, но прогресс есть всегда.
Иногда, надо сказать, обновления могут принести глюки и деградацию. Для решения этой проблемы новый пакет можно замаскировать и выбрать одну из предыдущих версий. Так, например в неэмуляторе винды WINE регулярно начинают переписывать какую то сложную подсистему и тогда новые версии несут в себе глюки. В этом году была проблема, когда отлично работающая в линуксе гама Warcraft DOTA перестала работать по сети с выходом новых версий WINE.
И самое главное, если вам надоели проблемы с вирусами, переходите на линукс. Linux - это единственное верное решение!
Комментарии
gentoo это конечно очень
gentoo это конечно очень классная вещь,
но с первых разов можно накосячить)
бинарный аналог -- арч)
Только Ubuntu пока работает
Только Ubuntu пока работает над тем что бы появились коммерческие игры для Linux.
Делает ядро Linux более распространенным на desktop.
Ubuntu работает плохо.
Ubuntu работает плохо. Использую RPM-based дистрибутив.
Может дело не в убунте? У
Может дело не в убунте?
У всех вроде работает хорошо.
Хороших коммерческих игр
Хороших коммерческих игр только нет. А так, да, лучше.