Простое решение, как derobert предложил в комментарии, состоит в том, чтобы оставить (большинство) существующих файлов там, где они есть, переместить только один каталог, который будет получать большие файлы, и создать символическую ссылку, чтобы ожидаемый путь указывал на то место, где файлы будут храниться на самом деле. Например, если вы переделываете сервер для хранения большого количества почты, вы можете сделать
service postfix stop # or whatever you need to do to stop writing to /var/mail
mv /var/mail /home
ln -s ../home/mail /var/mail
service postfix start
Если файлы попадут в новый каталог, вам нечего перемещать, просто создайте каталог в большом разделе и создайте символическую ссылку на него в /var
.
Если файлы действительно должны находиться под /var
, вы можете переместить /home
на маленький раздел и переместить /var
на большой раздел. Но чтобы сделать это безопасно, вам нужно убедиться, что ничто не использует перемещаемые файлы, что проблематично, если у вас нет физического доступа.
Я бы порекомендовал сделать это, чтобы вместо этого использовать ваш (и системный )файл известных хостов ssh:
zstyle -e ':completion:*:(ssh|scp|sftp|rsh|rsync):hosts' hosts 'reply=(${=${${(f)"$(cat {/etc/ssh_,~/.ssh/known_}hosts(|2)(N) /dev/null)"}%%[# ]*}//,/ })'
Если вы все еще хотите использовать /etc/hosts вместо этого:
strip='[:blank:]#[^[:blank:]]#'
zstyle -e ':completion:*:(ssh|scp|sftp|rsh|rsync):hosts' hosts 'reply=(${(s: :)${(ps:\t:)${${(f)~~"$(</etc/hosts)"}%%\#*}##${~strip}}})'
Удачи!
Добавить функцию фильтра в/usr/share/zsh/functions/Completion/Unix/_hosts
:
provide_missing_ip() {
while read x ; do
set -- $x
if [ ! "$1" ] || [ "${1%%[^#]*}" ] || [ "$2" ] ; then
echo "$x"
else
ip=`dig +short $2`
[ "$ip" ] || ip="240.0.0.0"
printf "%s\t%s\n" $1 $2
fi
done
}
Как это работает:
dig
. Используйте новую функцию для анализа вывода getent
или < /etc/hosts
в проблемном коде завершения:
if (( ${+commands[getent]} )); then
_cache_hosts=(${(s: :)${(ps:\t:)${(f)~~"$(_call_program hosts getent hosts 2>/dev/null | provide_missing_ip )"}##${~ipstrip}}})
else
_cache_hosts=(${(s: :)${(ps:\t:)${${(f)~~"$(provide_missing_ip </etc/hosts)"}%%\#*}##${~ipstrip}}})
fi
Файл hosts
должен быть в формате IP_address canonical_hostname [aliases...]
, поэтому ваш подход должен заключаться в том, чтобы исправить ваш файл hosts, а не заставить один фрагмент программы работать с вашим поврежденным файлом. Другие программы тоже могут работать с проблемами, если ваш hosts
неисправен, так что это будет единственное разумное решение для вашего варианта использования. Если вы ориентируетесь на динамический IP-адрес и не хотите использовать какой-либо из лучших обходных путей, представленных выше, рассмотрите возможность написания сценария, который динамически изменяет ваш hosts
в соответствии с этим изменяющимся адресом.