Обычно как root
:
mkdir /etc/bind
chown bind:bind /etc/bind
Я реализовал скрипт, который делает именно это.
if [ $# -eq 0 ]; then
PATTERNS=(NAME AUTHOR EXAMPLES FILES)
else
PATTERNS=( "$@" )
fi
[ ${#PATTERNS[@]} -lt 1 ] && echo "Needs at least 1 pattern to search for" && exit 1
for i in $(find /usr/share/man/ -type f); do
TMPOUT=$(zgrep -l "${PATTERNS[0]}" "$i")
[ -z "$TMPOUT" ] && continue
for c in `seq 1 $((${#PATTERNS[@]}-1))`; do
TMPOUT=$(echo "$TMPOUT" | xargs zgrep -l "${PATTERNS[$c]}")
[ -z "$TMPOUT" ] && break
done
if [ ! -z "$TMPOUT" ]; then
#echo "$TMPOUT" # Prints the whole path
MANNAME="$(basename "$TMPOUT")"
man "${MANNAME%%.*}"
fi
done
Думаю, это была пустая трата времени :(
Edit: Похоже, что
man -K expr1 expr2 expr3
не сработало?
Edit: Теперь вы можете передать скрипты для поиска через . /script foo bar
Не так полно, как ответ @polym, но я собирался предложить что-то вроде
while IFS= read -rd $'\0' f; do
zgrep -qwm1 'foo' "$f" && \
zgrep -qwm1 'bar' "$f" && \
zgrep -qwm1 'baz' "$f" && \
printf '%s\n' "$f"
done < <(find /usr/share/man -name '*.gz' -print0)
Обратите внимание, что я добавил переключатель -w
(соответствие слов) в greps
- который может быть не тем, что вы хотите (хотите ли вы включить соответствия типа foolish и nutbar?)
Размещение другое решение, поскольку файл записывается случайным образом, нарушает мой хвост
. Мышление RSYNC
здесь может быть многообещающим, поскольку rsync
может работать с использованием алгоритма передачи Delta, сохраняя время передачи, только отправляя измененные части файла. Если вы запустите rsync
на двух локальных файлах, он будет по умолчанию - весь файл
режим, который не то, что вы хотите.
Предлагаемое
rsync -av --inplace --no-whole-file /your/local/file.dat /your/remote/file.dat
... или, может быть, (если крепление CIFS не согласуется с Delta Transfer), используйте Pure rsync
:
rsync -av --inplace --no-whole-file /your/local/file.dat remoteserver:/your/directory/file.dat
, поэтому вы запускаете это несколько раз, когда ваш файл 200 ГБ заполняется. Каждый раз, когда вы запускаете его, он обновляет удаленный файл постепенно. Это даже должно работать, когда исходный файл обновляется случайным образом. Может быть, вы могли бы запустить это каждые 15 минут. Затем, когда ваша PID заканчивается, вы бы запустили его еще раз, и это просто будет быстрой инкрементной дельтой.
-121--83288-Несколько мыслей о сценарии этого:
с использованием Manpath
, чтобы получить местоположение (ы) страниц человека. Если я добавлю /home/graeme/.cabal/bin
к моему путь
, Manpath
(и Man
) найдет страницы человека в /home/graeme/.cabal/share/man
.
Используйте себе человека, чтобы распаковать и форматировать страницы перед поиском, таким образом, вы просто ищете сам текст человека, а не комментарию и т. Д. В файл RAW. Использование Man
потенциально будет иметь дело с несколькими форматами.
Сохранение отформатированных страниц в TEMPFILE позволит избежать нескольких распаковцев и должна значительно ускорить вещи.
Вот идет (с Bash
и GNU найти):
#!/bin/bash
set -f; IFS=:
trap 'rm -f "$temp"' EXIT
temp=$(mktemp --tmpdir search_man.XXXXXXXXXX)
while IFS= read -rd '' file; do
man "$file" >"$temp" 2>/dev/null
unset fail
for arg; do
if ! grep -Fq -- "$arg" "$temp"; then
fail=true
break
fi
done
if [ -z "$fail" ]; then
file=${file##*/}
printf '%s\n' "${file%.gz}"
fi
done < <(find $(manpath) -type d ! -name 'man*' -prune -o -type f -print0)
Этот подход не проверен, но довольно прост (глупо прост )и я ожидаю, что он должен работать, даже если он неэффективен:
#!/bin/bash
if [ "$#" -eq 0 ]; then
echo "Provide arguments to search all man pages for all arguments." >&2
echo "Putting rare search terms first will improve performance." >&2
exit
fi
if [ "$#" -eq 1 ]; then
exec man -K "$@"
fi
pages=( $(man -wK "$1") )
shift
while [ "$#" -gt 1 ]; do
pages=( $(zgrep -l "$1" "${pages[@]}") )
shift
done
exec man "${pages[@]}"