Какое пространство на установочном диске занимает Fedora Atomic (r25)?

Использование mkdir -p - простой способ для большинства современных ОС:

mkdir -p foo/bar/zoo/andsoforth

Однако, mkdir -p не рекомендуется во многих руководствах. Читайте документацию к GNU make и autoconf о проблемах с использованием mkdir -p:

Кроссплатформенные системы установки и настройки имеют свои безопасные альтернативы для mkdir -p.

CMake для использования в командной строке shell:

 cmake -E make_directory foo/bar/zoo/andsoforth

Autoconf для использования в скрипте с препроцессингом:

AS_MKDIR_P(foo/bar/zoo/andsoforth)

или:

AC_PROG_MKDIR_P(foo/bar/zoo/andsoforth)

Но эти решения требуют установки инструментов cmake или autoconf (M4) (и возможной предварительной обработки)

Вы можете использовать также скрипт install-sh с опцией -d:

install-sh -d foo/bar/zoo/andsoforth

Этот скрипт используется в проектах autoconf и automake. Я думаю, что это должно быть самое безопасное решение.

В то время я искал кроссплатформенное решение для стандартного /bin/sh без зависимостей, но не нашел. Поэтому я написал следующий скрипт, который может быть не идеален, но я думаю, что он соответствует большинству кроссплатформенных требований:

#! /bin/sh

cdirname() # cross platform alternative for 'dirname'
{
  # $1 - path
  test $# -eq 1 || { echo "Procedure 'cdirname' must have only one parameter. Scripting error."; exit 1; }
  echo "$1" | sed -n -e '1p' | sed  -e 's#//*#/#g' -e 's#\(.\)/$#\1#' -e 's#^[^/]*$#.#' -e 's#\(.\)/[^/]*$#\1#' -
}

mkd() # cross platform alternative for 'mkdir -p'
{
  # $1 - directory to create
  test $# -eq 1 || { echo "Function 'mkd' can create only one directory (with it's parent directories)."; exit 1; }
  test -d "$1"  && return 0
  test -d "$(cdirname "$1")" || { mkd "$(cdirname "$1")" || return 1; }
  test -d "$1" || { mkdir "$1" || return 1; }
  return 0
}

Этот скрипт можно использовать для старых систем, где отсутствует опция -p для mkdir. В код добавлена

sed-базированная кроссплатформенная версия dirname. Она работает аналогично dirname (корректно с путями /, путями только с базовым именем, путями с трейлингом /, путями с трейлингом \ns и без него). Эта функция не может работать корректно, если путь содержит новые строки или некоторые недопустимые символы для текущей локали. Она также заменяет любую комбинацию / (//, ///) на одну /

Измененная строка mkdir "$1" || return 1 на test -d "$1" || { mkdir "$1" || return 1; } потому что mkdir завершается с ошибкой, если путь существует, а эта проверка необходима для путей, содержащих конструкции типа aaa\. (Если aaa не существует, предыдущая версия создает aaa, а затем пытается создать его снова).

Эта версия mkd не выдает ошибку, если путь уже существует (но все еще имеет возможность выдать такую ошибку при параллельном выполнении) и не может получить несколько каталогов в командной строке.

1
13.06.2017, 22:12
1 ответ

Установка Fedora-Atomic-ostree-x86_64-25-20161221.0 в загрузочную виртуальную машину BIOS (не EFI) перечисляет:

Для установки требуется в общей сложности 596 МБ для системных данных.

Project Atomic - Installation requires a total of 596 MiB for system data.

После завершения установки потребление диска согласно df будет другим.

Used (1MB-blocks) 
1279 MB in /sysroot
  79 MB in /boot
3
29.04.2021, 00:06

Теги

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