ZFS не находится в официальном ядре Linux и никогда не будет, если Oracle не повторно лицензирует код под чем-то совместимым с GPL.
Эта несовместимость оспаривается. Основные аргументы в пользу ZFS, позволяемого в системах Linux, вращают вокруг длины так называемой "руки" правило. То правило применяется в этом случае, только если ZFS обеспечивается как отдельный модуль от ядра, эти два связываются только через опубликованные API, и обе кодовых базы могут функционировать друг независимо от друга. Требование затем состоит в том, что лицензия никакой кодовой базы не заражает другой, потому что ни один не полученная работа другого; они независимы, но сотрудничают. Тем не менее, даже при этой интерпретации, это означает, что модули ZFS должны все еще быть поставлены отдельно от ядра Linux, которое является, как мы видим, что он обеспечивается сегодня Ubuntu.
Вполне отдельно от CDDL по сравнению с аргументом GPL, NetApp утверждает, что они владеют патентами на некоторой технологии, используемой в ZFS. NetApp уладил их судебный процесс с Sun после выкупа Oracle, но то урегулирование не защищает никакого другого дистрибьютора Linux. (Red Hat, Ubuntu, SuSE...)
Поскольку я вижу его, это Ваши альтернативы:
Используйте btrfs вместо этого, поскольку он имеет подобные функции к ZFS, но не имеет конфликта лицензии GPL и был в ядре магистрали для тестирования с тех пор 2.6.29 (выпущен в январе 2009).
Основная проблема с btrfs состоит в том, что он имел долгую историю проблем с ее RAID 5/6 функциональность. Эти проблемы разрабатываются, но каждый раз одна из этих проблемных поверхностей, это сбрасывает "часы устойчивости".
Другое беспокойство - то, что Red Hat указал, что следующий выпуск Red Hat Enterprise Linux не будет включать btrfs.
Одна из причин, Red Hat занимает ту позицию на btrfs, - то, что у них есть план предложить схожую функциональность с помощью другого технологического стека, который они называют Stratis. Поэтому другая опция, которую Вы имеете, состоит в том, чтобы ожидать Stratis, чтобы появиться, с 1,0 запланированными на первую половину 2018, по-видимому, совпасть с Red Hat Enterprise Linux 8.
Используйте другую ОС для своего файлового сервера (FreeBSD, скажите), и используйте NFS для соединения его с полями Linux
Используйте ZFS на FUSE, реализации пространства пользователя, которая работает аккуратно вокруг проблемы лицензирования ядра за счет существенного количества производительности
Интегрируйте ZFS на Linux после установки ОС.
Конфликт лицензии делает распределение объединенной системы за пределами Вашей организации юридически сомнительным. Я не адвокат, но мой смысл состоит в том, что, доступные проблемы в стороне, распределяя ZFS на Linux являются почти столь же беспокоящими как распределяющий non-GPL двоичные драйверы (такие как те, которые для определенных видеокарт) с системой. Если одно из этих беспокойств Вы, другой должен, также.
Переключитесь на Ubuntu, которая поставляла модули ядра ZFS с ОС с тех пор 16.04. Канонический полагает, что юридически безопасно распределить модуль ядра ZFS с самой ОС. Необходимо было бы решить, доверяете ли Вы мнению Canonical; полагайте также, что они не могут быть готовы возместить Вас, если юридический вопрос подходит.
Остерегайтесь этого, не в настоящее время возможно загрузиться от ZFS с Ubuntu без большого ручного хакерства.
Кстати, btrfs также поддерживается Oracle, но был запущенными годами перед приобретением Sun. Я не полагаю, что эти два будут когда-либо объединяться, или один быть удержанными от использования в пользу другое должное к конфликту лицензии и доступной проблеме. ZFS слишком популярен, чтобы уйти, но туда продолжит быть спросом на альтернативу ZFS.
Вы не должны обрабатывать вещи как ~
, оболочка делает это для Вас. Вот почему можно передать ~/filename
к любому сценарию или программа и это работают - все те программы не обрабатывают ~
самостоятельно, Ваша оболочка преобразовывает аргумент /home/username/filename
и передачи, что к программе вместо этого:
$ echo ~/filename
/home/mrozekma/filename
Если Вам нужно каноническое имя файла (тот, который не включает вещи как ..
), используйте realpath
(спасибо Neil):
$ realpath ~/../filename
/home/filename
Что касается разделения пути к имени каталога и имени файла, использовать dirname
и basename
:
$ dirname /foo/bar/baz
/foo/bar
$ basename /foo/bar/baz
baz
Используя dirname и базовое имя любят упомянутый Michael, должен быть самый безопасный способ получить то, что Вы хотите.
Так или иначе, если Вы действительно хотите сделать это с "ударом только инструменты", Вы могли бы использовать замену параметра:
echo `basename $PWD` # Basename of current working directory.
echo "${PWD##*/}" # Basename of current working directory.
echo
echo `basename $0` # Name of script.
echo $0 # Name of script.
echo "${0##*/}" # Name of script.
echo
filename=test.data
echo "${filename##*.}" # data
# Extension of filename.
Этот пример непосредственно взят из Усовершенствованного Руководства по созданию сценариев Bash, которое является достойное внимания.
Объяснение довольно просто:
$ {var#Pattern} Удаляют из $var самую короткую часть $Pattern, который соответствует фронтэнду $var. $ {var##Pattern} Удаляют из $var самую длинную часть $Pattern, который соответствует фронтэнду $var.
Посмотрите на шаблон как некоторый regex и #
или ##
как некоторый greedy/non-greedy модификатор.
Это могло бы стать полезным, если необходимо будет сделать некоторые более сложные извлечения части путей.
${...##...}
и друзья, а не dirname
и basename
то, что они не работают во всех случаях. Например, оба ${0##*/}
и ${0%/*}
расширьтесь до того же как $0
если $0
не содержит a /
.
– Gilles 'SO- stop being evil'
08.09.2010, 01:11
${0%/*}
не хорошая альтернатива dirname
. Однако что случилось с использованием ${0##*/}
вместо basename
?
– toxalot
16.03.2014, 11:24
$0
имя каталога с запаздыванием /
. Но я сожалею о своем совете, потому что dirname
не делает немного лучше.
– Gilles 'SO- stop being evil'
16.03.2014, 16:18
realpath
команда, которая говорит, Вы реальный путь (удаляет.. и символьные ссылки и т.д.)
Это стандартно с FreeBSD. Согласно этому обсуждению это также доступно для Linux:
http://www.unix.com/shell-programming-scripting/89294-geting-real-path.html
То обсуждение также предлагает решение для удара:
$ bash -c "cd /foo/../bar/ ; pwd"
realpath
лучше, ноreadlink
кажется, работает, когда я пробую его; Вы знаете о примере, где он перестал работать? – Michael Mrozek♦ 11.09.2010, 11:44cd /tmp; touch foo; ln -s foo bar; cd; readlink /tmp/bar
. Это возвращаетсяfoo
иrealpath
возвраты/tmp/foo
, который является тем, что Вы хотите. – Neil Mayhew 12.09.2010, 02:47readlink -f
(примечание-f
) почти эквивалентноrealpath
, и это более портативно:readlink -f
в GNU coreutils и существует в нескольких других системах также;realpath
упаковывается отдельно и может не быть установлен (например, только 5 not-that-common пакетов зависят от него в Ubuntu 10.04 или Debian lenny). – Gilles 'SO- stop being evil' 13.11.2010, 13:33