Опция Bash 4 'globstar' силы проигнорировать символьные ссылки

Хорошие слова о преимуществах и недостатках.

Мой первый и последний опыт с EXT4 на debian Linux сжимает (более старая версия 6.0.0 x64) был с жесткими дисками на 2x500 ГБ без RAID.

До сих пор я не абсолютно знаю то, что произошло, но после нескольких дней я понял, что я вне пространства. Свободных 0 байтов. Много свободных узлов. du-sh для целого раздела wrotes меня только 250 ГБ пространства взят. Куда пошел, оставшись 250 ГБ? Я не помню, как я решал эту проблему, но начиная с той ситуации, я решил вернуться к EXT3. С EXT3 у меня никогда не было той же проблемы. Я думаю, что была проблема в версии сжатия, я работал с. Более новые версии уже должны быть в порядке. Если Вы хотите это для обычного ПК, просто используйте EXT4. В моем случае для сервера я доволен EXT3. Если Вы - менеджер безопасности своей IT-компании - используют ReiserFS или Reiser4.

ReiserFS, который я могу рекомендовать всем, кто хочет действительно серьезную безопасность и шифрование данных. Но если некоторые произойдут, и Вы забываете пароль, то у Вас, вероятно, будут больше, чем огромные проблемы. ReiserFS является только одной файловой системой с открытым исходным кодом, которая делает американское армейское использование из-за безопасности и шифрования.

Таким образом в моем случае, я ИСПОЛЬЗУЮ EXT3, и я не забочусь, является ли EXT4 о немногих % быстрее или нет. Я нуждаюсь в стабильной файловой системе без проблем и надеюсь, что Вы поймете мои неудачные опыты с EXT4.

Однако я желаю Вам счастливой и легкой работы с использованием любого этого FS.

править: Парни, на основе этого теста - EXT4 быстрее, чем ext3 в большинстве случаев: http://www.abclinuxu.cz/blog/rb/2010/9/maly-domaci-test-filesystemu-ext3-ext4-xfs-jfs-reiser4-btrfs

График производительности там также. Это могла быть полезная информация для Вас.

5
18.10.2013, 20:04
3 ответа

Нет никакого способа предотвратить ** от того, чтобы переходить по символьным ссылкам в ударе, ни имеет запрос для позволения встреченный любой ответ.

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

Нет никакого способа изменить поведение ** с псевдонимом. Если Вы используете промежуточный массив для хранения результата расширения, вот то, как можно использовать find вместо этого:

find . … -print0 | {
  a=()
  while read -r -d "" line; do 
    a+=("$line")
  done
  frobnicate "${a[@]}"
}

Обратите внимание, что целая часть программы, которая использует вывод find должен быть в правой стороне конвейера, так как удар выполняет правую сторону конвейера в подпроцессе.

Если нормально исключать файлы, имя которых содержит символ новой строки, это легче:

set -f; IFS=
a=($(find . … ! -name $'*\n*' -print))
set +f; unset IFS
frobnicate "${a[@]}"

Вы могли попытаться запустить свои существующие скрипты в ksh режиме эмуляции zsh. Zsh не реализует все опции удара — почти вся функциональность удара существует в zsh, но иногда с несовместимым синтаксисом. Вы могли также попытаться выполнить сценарии wih ksh93: версии с тех пор 93o + поддержка ** как в zsh, и большинство (но снова, не все) функций удара от ksh, таким образом, Ваши сценарии могут быть легкими к порту к ksh93. Переключение на ksh обладает дополнительным преимуществом, что это имеет тенденцию быть быстрее или, чем удар или, чем zsh.

3
27.01.2020, 20:38
  • 1
    я не уверен, под чем Вы подразумеваете ", нет никакого способа изменить поведение ** с псевдонимом", так как можно действительно исказить ** к имени функции. Конечно, функция не может вести себя как синтаксис шарика, но использование в качестве примера, которое я дал выше, работает просто великолепно. –  Kyle Strand 21.10.2013, 19:48
  • 2
    @KyleStrand можно определить псевдоним для **, но это не изменяет его поведение, когда оно используется в качестве шарика. –  Gilles 'SO- stop being evil' 21.10.2013, 20:03
  • 3
    я не думал, что он будет. Мы говорим то же самое. Последние предложения пары моего исходного вопроса на самом деле указывают на раздражения контакта с синтаксисом функций, когда то, что Вы действительно хотите, является шариком. –  Kyle Strand 21.10.2013, 20:06
  • 4
    В любом случае, спасибо за ссылку на существующий запрос новых функций и предложенные обходные решения, особенно ksh функция эмуляции, о которой я ранее не знал. Я должен буду провести еще некоторое время, играя с ним, но похоже, что это может быть эффективным решением. –  Kyle Strand 22.10.2013, 02:28

Я выяснил более простое обходное решение: просто используйте zsh для оценки этих шариков.

В моих сценариях конфигурации удара у меня есть следующее:

function zeval () {
    echo $@ | zsh
}
alias z*='zeval echo'

Теперь, везде, где я использовал бы /path/with/**/glob в zsh я могу сделать следующее в ударе:

$(z* sandbox/rmall_gdsarc/**/*gds)

Так как контексты, в которых псевдонимы расширены и контексты, в которых globbing желаем обычно, не накладываются, псевдоним z* никогда не должно быть неоднозначным.

(Единственный контекст я могу думать в который беспорядок между псевдонимом z* и синтаксис шарика Bash был бы то, если бы Вы были в каталоге, который уже был на Вашем пути, содержащем исполняемый сценарий, запускающийся с 'z', и Вы хотели выполнить его с помощью шарика..., который не будет иметь большого смысла так или иначе.)

-1
27.01.2020, 20:38
  • 1
    Wonder, почему downvote.... Я не колочу bash. –  Kyle Strand 04.02.2016, 20:26

** не следует по символическим ссылкам, начиная с bash-4.3 .

См. ИЗМЕНЕНИЯ между bash-4.3-release и bash-4.3-rc2 :

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

4
27.01.2020, 20:38

Теги

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