- /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»)):
-
- /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
-
- Страница для печати
- 17701 просмотр