|
Поиск по сайту:
Главная
О проекте
Web-мастеру
HTML & JavaScript
SSI
Perl
PHP
XML & XSLT
Unix Shell
MySQL
Безопасность
Хостинг
Другое
|
|
Глава 28. /dev/zero и /dev/null
- /dev/null
-
Псевдоустройство /dev/null
-- это, своего рода, "черная
дыра" в системе. Это, пожалуй, самый близкий
смысловой эквивалент. Все, что записывается в этот файл,
"исчезает" навсегда. Попытки записи или чтения
из этого файла не дают, ровным счетом, никакого
результата. Тем не менее, псевдоустройство /dev/null вполне может пригодиться.
Подавление вывода на stdout.
cat $filename >/dev/null
# Содержимое файла $filename не появится на stdout.
Подавление вывода на stderr
(from Пример 12-3).
rm $badname 2>/dev/null
# Сообщение об ошибке "уйдет в никуда".
Подавление вывода, как на stdout, так и на stderr.
cat $filename 2>/dev/null >/dev/null
# Если "$filename" не будет найден, то вы не увидите сообщения об ошибке.
# Если "$filename" существует, то вы не увидите его содержимое.
# Таким образом, вышеприведенная команда ничего не выводит на экран.
#
# Такая методика бывает полезной, когда необходимо лишь проверить код завершения команды
#+ и нежелательно выводить результат работы команды на экран.
#
# cat $filename &>/dev/null
# дает тот же результат, автор примечания Baris Cicek.
Удаление содержимого файла, сохраняя, при этом, сам
файл, со всеми его правами доступа (очистка файла) (из
Пример 2-1 и Пример
2-2):
cat /dev/null > /var/log/messages
# : > /var/log/messages дает тот же эффект, но не порождает дочерний процесс.
cat /dev/null > /var/log/wtmp
Автоматическая очистка содержимого системного журнала
(logfile) (особенно хороша для борьбы с надоедливыми
рекламными идентификационными файлами ("cookies")):
Пример 28-1. Удаление
cookie-файлов
if [ -f ~/.netscape/cookies ] # Удалить, если имеются.
then
rm -f ~/.netscape/cookies
fi
ln -s /dev/null ~/.netscape/cookies
# Теперь, все cookie-файлы, вместо того, чтобы сохраняться на диске, будут "вылетать в трубу".
- /dev/zero
-
Подобно псевдоустройству /dev/null, /dev/zero так же является
псевдоустройством, с той лишь разницей, что содержит нули
(здесь имеются ввиду двоичные нули, а не символы
"0" ASCII). Информация, выводимая в этот файл,
так же бесследно исчезает. Чтение нулей из этого файла
может вызвать некоторые затруднения, однако это можно
сделать, к примеру, с помощью команды od или шестнадцатиричного редактора. В
основном, /dev/zero
используется для создания заготовки файла с заданой
длиной.
Пример 28-2. Создание файла подкачки
(swapfile), с помощью /dev/zero
#!/bin/bash
# Создание файла подкачки.
# Этот сценарий должен запускаться с правами root.
ROOT_UID=0 # Для root -- $UID 0.
E_WRONG_USER=65 # Не root?
FILE=/swap
BLOCKSIZE=1024
MINBLOCKS=40
SUCCESS=0
if [ "$UID" -ne "$ROOT_UID" ]
then
echo; echo "Этот сценарий должен запускаться с правами root."; echo
exit $E_WRONG_USER
fi
blocks=${1:-$MINBLOCKS} # По-умолчанию -- 40 блоков,
#+ если размер не задан из командной строки.
# Ниже приводится эквивалентный набор команд.
# --------------------------------------------------
# if [ -n "$1" ]
# then
# blocks=$1
# else
# blocks=$MINBLOCKS
# fi
# --------------------------------------------------
if [ "$blocks" -lt $MINBLOCKS ]
then
blocks=$MINBLOCKS # Должно быть как минимум 40 блоков.
fi
echo "Создание файла подкачки размером $blocks блоков (KB)."
dd if=/dev/zero of=$FILE bs=$BLOCKSIZE count=$blocks # "Забить" нулями.
mkswap $FILE $blocks # Назначить как файл подкачки.
swapon $FILE # Активировать.
echo "Файл подкачки создан и активирован."
exit $SUCCESS
Еще одна область применения /dev/zero -- "очистка" специального файла
заданного размера, например файлов, монтируемых как
loopback-устройства (см.
Пример 13-7) или для безопасного
удаления файла (см. Пример
12-45).
Пример 28-3. Создание электронного
диска
#!/bin/bash
# ramdisk.sh
# "электронный диск" -- это область в ОЗУ компьютера
#+ с которой система взаимодействует как с файловой системой.
# Основное преимущество -- очень высокая скорость чтения/записи.
# Недостатки -- энергозависимость, уменьшение объема ОЗУ, доступного системе,
# относительно небольшой размер.
#
# Чем хорош электронный диск?
# При хранении наборов данных, таких как таблиц баз данных или словарей, на электронном диске
#+ вы получаете высокую скорость работы с этими наборами, поскольку время доступа к ОЗУ
# неизмеримо меньше времени доступа к жесткому диску.
E_NON_ROOT_USER=70 # Сценарий должен запускаться с правами root.
ROOTUSER_NAME=root
MOUNTPT=/mnt/ramdisk
SIZE=2000 # 2K блоков (измените, если это необходимо)
BLOCKSIZE=1024 # размер блока -- 1K (1024 байт)
DEVICE=/dev/ram0 # Первое устройство ram
username=`id -nu`
if [ "$username" != "$ROOTUSER_NAME" ]
then
echo "Сценарий должен запускаться с правами root."
exit $E_NON_ROOT_USER
fi
if [ ! -d "$MOUNTPT" ] # Проверка наличия точки монтирования,
then #+ благодаря этой проверке, при повторных запусках сценария
mkdir $MOUNTPT #+ ошибки возникать не будет.
fi
dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE # Очистить электронный диск.
mke2fs $DEVICE # Создать файловую систему ext2.
mount $DEVICE $MOUNTPT # Смонтировать.
chmod 777 $MOUNTPT # Сделать электронный диск доступным для обычных пользователей.
# Но при этом, только root сможет его отмонтировать.
echo "Электронный диск \"$MOUNTPT\" готов к работе."
# Теперь электронный диск доступен для любого пользователя в системе.
# Внимание! Электронный диск -- это энергозависимое устройство! Все данные, хранящиеся на нем,
#+ будут утеряны при остановке или перезагрузке системы.
# Если эти данные представляют для вас интерес, то сохраняйте их копии в обычном каталоге.
# После перезагрузки, чтобы вновь создать электронный диск, запустите этот сценарий.
# Простое монтирование /mnt/ramdisk, без выполнения подготовительных действий, не будет работать.
exit 0
Назад | Вперед
Содержание (общее) | Содержание раздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|
|
|