#·· и создается новая база данных. Если личная база данных. slocatedbis пустая,
#·· вместо нее используется системная.
locatedb="/var/locate.db"
slocatedb="$HOME/.slocatedb"
if [! -e $slocatedb −o "$1" = "-explain"]; then
··cat << "EOF" >&2
Warning: Secure locate keeps a private database for each user, and your
database hasn't yet been created. Until it is (probably late tonight),
I'll just use the public locate database, which will show you all
publicly accessible matches rather than those explicitly available to
account ${USER:-$LOGNAME}.
EOF
··if ["$1" = "-explain"]; then
····exit 0
··fi
··# Перед продолжением создать файл. slocatedb, чтобы задание cron заполнило
··#·· его, когда в следующий раз сценарий mkslocatedb будет запущен.
··touch $slocatedb···· # mkslocatedb заполнит этот файл при следующем запуске
··chmod 600 $slocatedb # Установить безопасные привилегии
elif [-s $slocatedb]; then
··locatedb=$slocatedb
else
··echo "Warning: using public database. Use \"$0 −explain\" for details." >&2
fi
if [-z "$1"]; then
··echo "Usage: $0 pattern" >&2
··exit 1
fi
exec grep −i "$1" $locatedb
Как это работает
Сценарий mkslocatedb основан на идее, что процесс, запущенный с привилегиями root, может временно приобретать привилегии разных пользователей, используя команду su −fm
Еще одна необычная конструкция в строке
Запуск сценария
mkslocatedb — сценарий, необычный не только тем, что должен запускаться с привилегиями root, но и тем, что использования команды sudo для его запуска будет недостаточно. Вы должны войти в систему как пользователь root или использовать более мощную команду su, чтобы приобрести привилегии root перед запуском сценария. Это объясняется тем, что su фактически превращает вас в суперпользователя root, тогда как sudo просто дает текущему пользователю привилегии root на время. Команда sudo устанавливает другие права доступа к файлам, чем команда su. Сценарий slocate, конечно, не предъявляет таких требований.
Результаты
В результате попытки создать базы данных для пользователей nobody (общедоступная база данных) и taylor в системе Linux на экран будут выведены строки, как показано в листинге 5.13.
Листинг 5.13. Запуск сценария mkslocatedb с привилегиями root
# mkslocatedb
building default slocate database (user = nobody)
… result is 99809 lines long.
building slocate database for user taylor
… result is 99808 lines long.
Теперь давайте сначала попробуем найти конкретный файл или группу файлов, соответствующих заданному шаблону, зарегистрировавшись в системе как пользователь tintin (в домашнем каталоге которого нет файла
tintin $ slocate Taylor-Self-Assess.doc