Некоторые специальные файлы в Unix

has_all_iregexps() {
  awk '
    BEGIN {
      if (ARGC <= 1) exit
      for (i = 1; i < ARGC; i++) s[tolower(ARGV[i])]
      n = ARGC - 1
      ARGC = 1
    }
    {
      for (i in s) if (tolower($0) ~ i) {
        delete s[i]; if (!--n) exit
      }
    }
    END {
      if (n) {
        print "Those regexps were not matched:"
        for (i in s) print "  " i
        exit(1)
      }
    }' "$@" >&2
}

А затем:

nginx -V 2>&1 |
  has_all_iregexps 'nginx/1\.9\.10' \
                   'ngx_pagespeed-release-1\.9\.32\.10' \
                   'openssl-1\.0\.2f' \
                   'modsecurity-2\.9\.‌​0' &&
  echo "has the stuff we need"

Или:

has_all_istrings() {
  awk '
    BEGIN {
      if (ARGC <= 1) exit
      for (i = 1; i < ARGC; i++) s[tolower(ARGV[i])]
      n = ARGC - 1
      ARGC = 1
    }
    {
      for (i in s) if (index(tolower($0), i)) {
        delete s[i]; if (!--n) exit
      }
    }
    END {
      if (n) {
        print "Those strings were not found:"
        for (i in s) print "  " i
        exit(1)
      }
    }' "$@" >&2
}

nginx -V 2>&1 |
  has_all_istrings 'nginx/1.9.10' \
                   'ngx_pagespeed-release-1.9.32.10' \
                   'openssl-1.0.2f' \
                   'modsecurity-2.9.‌​0' &&
  echo "has the stuff we need"

(tolower- для нечувствительного к регистру сопоставления, чтобы соответствовать вашему использованию -i, хотя я не уверен, почему вы хотите сделать нечувствительное к регистру сопоставление здесь).

3
19.03.2019, 17:59
1 ответ

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

Как файлы хранятся и какие файлы могут храниться, зависит от файловой системы. Некоторые файловые системы поддерживают подмножество типов файлов в стиле Unix -; например, FAT не может хранить ничего, кроме файлов или каталогов (и меток томов ). Это означает, что хранилище «специального» файла зависит от файловой системы, и вы не можете копировать биты, представляющие файл, из одной файловой системы в другую, как -.

Симлинки хранят текстовое представление своей цели. В большинстве современных файловых систем в стиле Unix -есть место для коротких целей наряду с «основной» информацией символической ссылки (в ее индексном узле ); более длинные ссылки требуют выделения блока данных.

Узлы устройств хранят идентификаторы, известные как основной и второстепенный узлы.Это два небольших -числа с фиксированными требованиями к хранилищу, и в индексном узле для них есть место. Цифры зависят от ОС -, поэтому вы не можете скопировать узел из Linux в BSD, сохранив при этом его функции.

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

6
27.01.2020, 21:13

Теги

Похожие вопросы