Вы не должны использовать find
для этого вообще; grep может обработать открытие файлов любой из списка шарика всего в текущем каталоге:
grep chrome *
... или даже рекурсивно для папки и всего под ним:
grep chrome . -R
POSIX сначала был стандартом в 1988 задолго до Единственной Спецификации UNIX. Это была одна из попыток объединения всех различных ветвлений UNIX и подобных UNIX систем. POSIX является Стандарт IEEE, но поскольку IEEE не владеет товарным знаком UNIX®, стандартом не является UNIX®, хотя он основан на существующем UNIX API в то время. Первый стандартный POSIX.1 официально известен как станд. IEEE 1003.1-1988. [1] IEEE взимал существенный сбор для получения копии стандарта.
Open Group выпустила Единственную Спецификацию (SUSv2) UNIX в 1997 на основе работы IEEE стандарта POSIX. SUSv3 был выпущен в 2001 от совместной рабочей группы между IEEE и Open Group, известной как Austin Group. SUSv3 также известен как POSIX:2001[2]. Существует теперь также POSIX:2004 и POSIX:2008, который является ядром SUSv4. Что касается того, каков UNIX®, UNIX® - то, что текущий держатель зарегистрированной торговой марки говорит, что это. С 1994 это - Open Group.
Novell получил системный бизнес UNIX® от AT&T/USL, который является, где UNIX® родился. В 1994 они продали право на товарный знак UNIX® к X/Open[3], теперь знают как Open Group. Они затем продали исходный код UNIX® SCO как UNIXWARE®. [3] сам UNIX® много раз разветвлялся 4[] 5[] частично из-за модели лицензирования AT&T. Покупательный UNIX® дал Вам полный источник операционной системы и полного набора инструментальных средств для создания его. Модификации к источнику могут распределяться и использоваться любым, кто владел лицензией на UNIX® из AT&T. Лицензионный сбор был в тысячах.
BSD был проектом в Беркли, который добавил много улучшений к операционной системе UNIX®. Код BSD был выпущен в соответствии с намного более либеральной лицензией, чем источник AT&T и не потребовал, чтобы лицензионный сбор или даже требование были распределены с источником, в отличие от GPL, который используют Проект GNU и Linux. Это заставило хорошую часть кода BSD быть включенной с различными коммерческими ветвлениями UNIX. Приблизительно 4.3BSD, они почти заменили любую потребность в исходном исходном коде AT&T UNIX®. FreeBSD/NetBSD/OpenBSD являются всеми ветвлениями 4.3BSD, которые являются полной операционной системой и не имеют ни одного из исходного исходного кода AT&T. И при этом они не имеют права на товарный знак UNIX®, но большая часть их кода используется коммерческими операционными системами UNIX. Сокет API, используемый на UNIX, был разработан на BSD и Unix Быстрый код Файловой системы, одалживался и использовался в различных Операционных системах UNIX как Солярис с их собственными улучшениями.
Linux был разработан в 1991, но был разработан с нуля в отличие от BSD и использует существующий Проект GNU, который является реализацией чистого помещения большой части пространства пользователя UNIX. Это реализует большую часть POSIX для совместимости и подобно UNIX в дизайне, но это не имеет близкого соединения с AT&T или UNIX®, который имеют BSDs.
POSIX является стандартом Переносимой информационной системы. Это описывает определенные утилиты, API, и обслуживает совместимую операционную систему, должен обеспечить к программному обеспечению (например, сокеты, файловый ввод-вывод и распараллеливающий) наряду с конвенциями по тому, как их нужно назвать из программы.
Идея состоит в том, что программа, записанная для одной Совместимой POSIX ОС, была бы легче к порту к другой совместимой POSIX ОС, чем портирование между non-POSIX-compliant Ose. Поэтому намного легче портировать приложение от, скажем, FreeBSD до Linux, чем это должно портировать его от FreeBSD до Windows (хотя Windows якобы поддерживает подмножество POSIX.)
POSIX является подмножеством UNIX, который предназначается для покрытия различных подобных Unix сред для других операционных систем; это первоначально включенные среды, такие как Eunice для VMS, личность POSIX Windows NT, и Домен/ОС Apollo. Можно думать о нем как о стандартной мобильности API для подмножества служб операционной системы, поведение которых вместе между Unix и не-Unix. См. http://standards.ieee.org/develop/wg/POSIX.html для получения дополнительной информации.
Самые важные вещи POSIX 7 определяет
В значительной степени расширяет ANSI C такими вещами, как:
mkdir
, имя каталога
, символическая ссылка
, ссылка для чтения
, ссылка
(жесткие ссылки), опрос ()
, stat
, sync
, nftw ()
fork
, execl
, wait
, канал
, семафоры sem _ *
, разделяемая память ( shm _ *
), kill
, параметры планирования ( nice
, sched _ *
), sleep
, mkfifo
, setpgid ()
socket ()
mmap
, mlock
, mprotect
, madvise
, brk ()
reg *
) Эти API также определяют в соответствии с концепции лежащих систем, от которых они зависят, например fork
требует концепции процесса.
Многие системные вызовы Linux существуют для реализации конкретной функции API POSIX C и обеспечения совместимости с Linux, например sys_write
, sys_read
, ... Однако многие из этих системных вызовов также имеют расширения, специфичные для Linux.
Основная реализация рабочего стола Linux: glibc, которая во многих случаях просто предоставляет поверхностную оболочку для системных вызовов.
Например: cd
, ls
, echo
, ...
Многие утилиты являются непосредственными интерфейсами оболочки для соответствующей функции C API, например mkdir
.
Основная реализация рабочего стола Linux: GNU Coreutils для маленьких, отдельные проекты GNU для больших: sed
, grep
, awk
, ... Некоторые утилиты CLI реализованы Bash как встроенные .
Например, a = b; echo "$ a"
Основная реализация рабочего стола Linux: GNU Bash .
Например: HOME
, ПУТЬ
.
Семантика поиска PATH
указана , включая , как косая черта предотвращает поиск PATH
.
ANSI C сообщает 0
или EXIT_SUCCESS
в случае успеха, EXIT_FAILURE
в случае ошибки, а остальную реализацию оставляет определенным.
POSIX добавляет:
126
: команда найдена, но не исполняется.
127
: команда не найдена.
> 128
: завершено сигналом.
Но POSIX, похоже, не определяет правило 128 + SIGNAL_ID
, используемое Bash: Код выхода по умолчанию при завершении процесса?
Есть два типа: BRE (Базовый) и ERE (Расширенный). Базовая версия устарела и предназначена только для того, чтобы не нарушать работу API.
Они реализуются функциями C API и используются во всех утилитах CLI, например grep
принимает BRE по умолчанию, а ERE с -E
.
Например: echo 'a.1' | grep -E 'a.[[: digit:]] '
Основная реализация Linux: glibc реализует функции из regex.h , которые программы, подобные grep
, могут использовать в качестве бэкэнда.
Например: / dev / null
, / tmp
Linux FHS значительно расширяет POSIX.
/
- разделитель путей NUL
не может использоваться .
- это cwd
, ..
родительские a-zA-Z0-9 ._-
См. также: https://stackoverflow.com/questions/18550253/what-is-posix-compliance- for-filesystem
Соглашения об API утилиты командной строки
Не является обязательным, используется в POSIX, но почти нигде больше, особенно в GNU. Но правда, это слишком ограничительно, например только однобуквенные флаги (например, -a
), не использовать длинные версии с двойным дефисом (например, - все
).
Несколько широко используемых соглашений:
-
означает stdin, где ожидается файл -
завершает флаги, например ls - -l
для отображения каталога с именем -l
«ACL POSIX» (списки контроля доступа), например как бэкэнд для setfacl
.
Этот был отозван , но он был реализован в нескольких операционных системах, включая в Linux с setxattr
.
Кто соответствует POSIX?
Многие системы строго следуют POSIX, но лишь немногие из них действительно сертифицированы Open Group, которая поддерживает этот стандарт. Среди известных сертифицированных:
Большинство дистрибутивов Linux очень совместимы, но не сертифицированы, потому что не хотят оплачивать проверку соответствия. Inspur K-UX и Huawei EulerOS являются двумя сертифицированными примерами.
Официальный список сертифицированных систем можно найти по адресу: https://www.opengroup.org/openbrand/register/ , а также на вики-странице .
Windows
Windows реализовала POSIX в некоторых своих профессиональных дистрибутивах.
Поскольку это была дополнительная функция, программисты не могли полагаться на нее для большинства приложений конечных пользователей.
Поддержка в Windows 8 устарела:
В 2016 году был анонсирован новый официальный Linux-подобный API под названием «Подсистема Windows для Linux». Он включает системные вызовы Linux, запуск ELF, части файловой системы / proc
, Bash, GCC, (TODO, вероятно, glibc?), apt-get
и многое другое: https: //channel9.msdn.com/Events/Build/2016/P488, поэтому я считаю, что это позволит Windows запускать большую часть, если не все, POSIX. Однако он ориентирован на разработчиков / развертывание, а не на конечных пользователей.В частности, не было планов разрешить доступ к графическому интерфейсу Windows.
Исторический обзор официальной совместимости Microsoft POSIX: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/
Cygwin - это хорошо известный сторонний проект под GPL, который «обеспечивает существенную функциональность POSIX API» для Windows, но требует, чтобы вы «перестроили приложение из исходного кода, если хотите, чтобы оно работало в Windows». MSYS2 - это связанный проект, который, кажется, добавляет больше функций поверх Cygwin.
Android
Android имеет собственную библиотеку C (Bionic), которая не полностью поддерживает POSIX с Android O: https://stackoverflow.com/questions/27604455/is-android-posix-compatible
Бонусный уровень
Linux Standard Base является дальнейшим расширением POSIX.
Используйте индексы без фреймов, они более читабельны и доступны для поиска: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
Получить полную версию HTML-страниц в сжатом виде для grepping: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939