Windows vs Linux

Операционные системы Windows и Linux очень похожи, так как решают одни и те же задачи, работают в общей компьютерной сети и на одном и том же «железе», но вместе с тем они имеют ряд отличий, знание которых поможет вам сделать быстрый старт. В данном разделе мы постарались кратко отразить наиболее важные из них.

Подход к работе с дисками

В системе Windows есть понятие дисков или логических томов, которые обозначаются буквами латинского алфавита (например, A:\, B:\, C:\ и т.д.), а полный путь к файлу указывается, начиная с имени диска (например, C:\Windows\System32\drivers\etc\hosts). В Windows есть возможность монтировать диск в пустую папку NTFS, однако эта операция не используется широко.

В системе Linux используется единая иерархия каталогов и файловых систем, а полный путь к файлу указывается от корня файловой системы, который обозначается наклонной чертой «/» (например, /etc/hosts). Корень файловой системы физически расположен на системном диске компьютера, а дополнительные диски можно смонтировать в любую точку, что позволяет, например, перенести папку /home с рабочими каталогами пользователей на отдельный физический диск.


Подход к хранению файлов программ

В системе Windows служебные файлы операционной системы находятся в каталоге C:\Windows, а файлы приложений в каталоге C:\Program Files, причем для каждого приложения создается отдельная папка, в которой хранятся все его файлы, организованные любым способом на усмотрение разработчиков приложения. Для хранения настроек приложений обычно используются файлы *.ini, и только приложения продвинутых вендоров используют специальную базу данных, которая называется реестром Windows.

В Linux для организации файлов придерживаются так называемого стандарта иерархии файловых систем (Filesystem Hierarchy Standard, FHS), который унифицирует размещение файлов по их назначению. Например, все исполняемые файлы должны находиться в каталогах /bin и /sbin (от англ. binary, бинарные файлы), конфигурационные файлы всех установленных приложений находятся в папке /etc (от et cetera, прочие), а изменяемые файлы, такие как журналы, всегда можно найти в каталоге /var (от англ. variable, изменчивый).


Концепция «все есть файл» vs «все есть объект»

В системе Windows файлы – это просто файлы, а для реализации межпроцессного взаимодействия используются такие технологии, как API, COM, RPC, Pipes и др.

В Linux есть аналоги этих технологий, например, шина D-Bus, но для того, чтобы без разработки специальных интерфейсов предоставить простой унифицированный доступ ко всем возможностям операционной системы, Linux заимствовал у Unix концепцию «все есть файл». Поэтому в иерархии файлов Linux некоторые каталоги являются точками монтирования псевдо-систем или так называемых виртуальных файловых систем.

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

Еще необычнее для Windows-администраторов могут показаться возможности взаимодействия между приложениями через так называемые сокеты домена Unix или IPC-сокеты (от inter-process communication). Эти сокеты представляют собой специальные файлы на диске, через которые приложения могут устанавливать быстрые соединения, исключающие накладные расходы, связанные с TCP/IP стеком. Например, если в Windows для отправки задания на печать приложения обращаются напрямую к API операционной системы, то в Linux они обращаются к общей службе печати CUPS (Common Unix Printing System) по сокету /var/run/cups/cups.sock.


Регистрозависимость в именах файлов

В Windows имена файлов могут содержать как прописные, так и строчные символы, но два файла с именами readme.txt и README.txt не могут находиться в одном каталоге, т.к. не пройдут проверку на уникальность.

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

localadmin@astra:~$ touch readme.txt
localadmin@astra:~$ touch README.txt
localadmin@astra:~$ ls
Desktop   readme.txt  Видео      Загрузки     Музыка
Desktops  README.txt  Документы  Изображения  Общедоступные

Подход к использованию ссылок

Несмотря на то, что команда mklink для создания ссылок появилась в системе Windows еще со времен NT, большинство пользователей Windows ограничиваются использованием ярлыков, которые представляют собой обычные файлы с расширением *.lnk, содержащие настройки для быстрого доступа к файлам и папкам. Аналогом lnk-файлов в Linux являются файлы *.desktop.

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

Например, с помощью команд stat /run/cups/cups.sock и stat /var/run/cups/cups.sock вы можете убедиться, что эти файлы указывают на inode с одним и тем же номером, а все потому, что папка /var/run является мягкой ссылкой на папку /run, что было сделано для обратной совместимости. Проверьте это командой ls -l /var/run.

Еще интереснее, когда на один и тот же файл указывают сразу несколько жестких ссылок. Например, с помощью команд stat /usr/bin/gunzip и stat /usr/bin/uncompress вы можете легко убедиться, что это действительно две разные жесткие ссылки, которые указывают на один и тот же inode, поэтому до тех пор, пока мы не удалим обе ссылки, этот файл будет физически оставаться на диске.


Подход к распространению программного обеспечения

Для установки Windows-приложений администраторам обычно достаточно одного файла *.exe или *.msi, и мы очень редко сталкивается с зависимостями, когда перед установкой приложения нужно поставить что-то еще, например, .NET Framework, Java, DirectX, медиа-кодеки. Хорошим тоном считается, когда Windows-разработчики добавляют в свой установочный пакет все необходимые библиотеки, и администратор устанавливает несколько приложений подряд, просто кликая «далее > далее > далее».

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

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

В разных дистрибутивах Linux используются разные пакетные менеджеры. Например, Astra Linux основана на Debian, поэтому для установки приложений используются менеджеры dpkg (от англ. Debian Package) и apt (от англ. Advanced Packaging Tool).

Официальные репозитории операционной системы доступны по адресу https://download.astralinux.ru, но так как индексация каталогов внутри репозитория запрещена, то просматривать вручную эти каталоги не получится, и с ними нужно работать через менеджер пакетов apt, см. Модуль 15. Управление ПО в Astra Linux.


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

В системе Windows с незапамятных времен используется файловая система NTFS, которая позволяет назначать права доступа с помощью так называемых списков контроля доступа (Access Control Lists, ACL), поэтому мы без проблем можем назначить права доступа любому количеству пользователей и групп. Данная модель является очень гибкой и позволяет решить любые задачи бизнеса в части распределения прав доступа.

В системе Linux изначально была реализована упрощенная модель «владелец-группа-остальные» (User-Group-Others, UGO), которая обеспечивала простой и безопасный способ управления правами, но не обладала гибкостью ACL. В дальнейшем эта модель была расширена возможностями POSIX ACL, и современные Linux дистрибутивы поставляются уже с предустановленными пакетами, реализующими эти функции. Однако, концепция UGO осталась, по сути, прежней, поэтому любому уважающему себя администратору нужно хорошо ориентироваться в том, что означают числа 755, 644 и почему за 777 может потребоваться писать объяснительную. Этой теме обязательно будет посвящено одно из наших следующих занятий.


Роль суперпользователя в системе

В системе Windows учетная запись суперпользователя называется Administrator и имеет идентификатор безопасности SID, заканчивающийся на 500, но жесткой привязки к идентификатору нет, и эти привилегии можно назначить любому другому пользователю. Службы Windows работают от различных системных учетных записей, например, System, Local Service, Network Service.

В Linux суперпользователь имеет имя root и POSIX-идентификатор 0, который до версии ядра 2.2 использовался в качестве исключения во всех проверках прав доступа. В современных системах Linux полномочия суперпользователя разделены на блоки, которые называются привилегиями (от англ. capabilities), и так же, как в Windows, могут быть назначены любому пользователю, см. справку на утилиту capsh (от capability shell).


Отношение к графическим интерфейсам

Разработчики Windows изначально делали ставку на графический интерфейс, чтобы сделать свою систему доступной для широкого круга пользователей, поэтому администраторы долгое время избегали работу в командной строке. С появлением PowerShell ситуация стала меняться, но количество установок Windows Server Core без графического интерфейса все еще крайне незначительно.

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

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


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