Определение и назначение
POSIX (Portable Operating System Interface) — это набор стандартов, описывающих:
- Интерфейсы между операционной системой и прикладными программами
- Совместимость между различными UNIX-подобными системами
- Основные API, утилиты командной строки и оболочки
Разработан IEEE (Институтом инженеров электротехники и электроники) для обеспечения переносимости приложений между UNIX-системами.
Ключевые аспекты POSIX
1. Совместимость на уровне API
- Системные вызовы (open, read, write, fork)
- Библиотеки libc (стандартная библиотека C)
- Межпроцессное взаимодействие
Пример совместимого кода:
#include <unistd.h>
#include <fcntl.h>
int main() {
int fd = open("file.txt", O_RDONLY);
char buf[100];
read(fd, buf, sizeof(buf));
write(STDOUT_FILENO, buf, sizeof(buf));
close(fd);
return 0;
}
2. Стандартизированные утилиты командной строки
- Базовые команды (ls, grep, awk, sed)
- Их параметры и поведение
- Регулярные выражения
3. Оболочка
- Совместимость между sh, bash, ksh и др.
- Скриптовая переносимость
Пример POSIX-совместимого скрипта:
#!/bin/sh
for file in *.txt; do
echo "Processing $file"
grep "pattern" "$file"
done
Уровни совместимости POSIX
- POSIX.1 (Core Services) - базовые системные интерфейсы
- POSIX.2 (Shell and Utilities) - утилиты командной строки
- POSIX.4 (Real-time Extensions) - расширения реального времени
Как проверить POSIX-совместимость?
Проверка системы:
# Проверить соответствие стандарту
getconf _POSIX_VERSION
Ограничения в скриптах:
#!/bin/sh
# Явное указание на POSIX-совместимость
set -o posix
Современные реализации
- Linux: В основном POSIX-совместим, но не сертифицирован
- macOS: Сертифицированная UNIX-система (POSIX-совместима)
- FreeBSD/OpenBSD: Высокий уровень совместимости
Практическое значение для DevOps
- Переносимость скриптов между разными системами
- Предсказуемое поведение утилит
- Стандартизированное окружение для разработки
Пример проблемы несовместимости:
# GNU-специфичный синтаксис (не POSIX)
find . -printf "%f\n"
# POSIX-совместимая альтернатива
find . -exec basename {} \;
Резюмируем
POSIX — это:
- Набор стандартов для UNIX-подобных систем
- Гарантия переносимости приложений и скриптов
- Основа совместимости между Linux, macOS, BSD
Для профессионалов:
- Используйте
#!/bin/sh
для максимально переносимых скриптов
- Проверяйте код с помощью
checkbashisms
(для выявления не-POSIX конструкций)
- Помните, что многие современные утилиты имеют GNU-расширения, нарушающие POSIX