Вывожу строку на терминал
$ exec > log
$ echo "Вывожу строку в файл"
$ echo "И эту в файл"
$ exec > /dev/pts/2
$ echo "А эту снова на терминал "
А эту снова на терминал
$
Второй способ заключается в использовании команды script, которая копирует в файл весь сеанс работы в текстовой консоли: ввод пользователя и вывод команд. Это должен быть в полном смысле слова сеанс работы в командной строке: полноэкранные команды, такие, как редактор vi и даже man, оставляют в файле протокола мусор. Если вы запускаете команду script вручную, то остановить протоколирование можно командой exit.
$ LOGFILE=my_log
$ if [ "$LOGGING" == "true" ]; then
> script my_script $LOGFILE; else
> my_script;
> fi
$
Вызов сценария изнутри него самого должен выглядеть так:
exec script $0 $LOGFILE
Начать знакомство с чужими сценариями вы можете с инициализационных файлов bash /etc/bashrc
и /etc/profile
. Команда «.» (точка) в оболочке sh и ее производных (bash, ksh), подобно команде source, означает чтение и выполнение команд из файла-аргумента этой команды в текущем процессе.
Глава 9
Управление процессами
9.1. Как загружается Linux
9.1.1. Начальная загрузка: LILO и GRUB
Как известно, первая программа, которая выполняется после включения компьютера, — это BIOS. Она находит загрузочное устройство, считывает в память его первый (нулевой) сектор и передает на него управление. В этом секторе находится MBR (
♦ первичный загрузчик;
♦ таблица разделов диска (
♦ «волшебное число» (0xAA55), предназначенное для проверки, служит ли данный сектор загрузочным.
Формат MBR стандартен для всех операционных систем, а содержание области, отведенной под первичный загрузчик, может различаться. Этот загрузчик очень мал, поэтому перед ним стоит всего одна задача: найти на диске и считать в память код загрузчика следующего этапа, разворачивающего уже саму операционную систему, и передать ему управление.
В ОС Windows 9x первичный загрузчик передает управление на /boot
, о котором говорилось в п.1.2.2 в связи с «барьером 1024 цилиндра», необходим еще и поэтому: на нем должна быть создана файловая система ext2fs или ext3fs, а для всех остальных разделов файловые системы можно выбирать произвольно.
Стандартный загрузчик Linux — LILO (/boot/boot.b
). О файловых системах LI не знает, поэтому карта размещения этого файла хранится в нем в виде «цилиндр/головка/сектор». Помещает ее туда утилита /sbin/lilo, которую нужно запускать после любого изменения LO или его конфигурационного файла /etc/lilo.conf
.
У вторичного загрузчика LO есть собственная карта размещения файлов (по умолчанию /boot/map
). По ней он ищет загружаемое ядро и образ виртуального диска, поэтому после любого изменения ядра или загружаемых модулей тоже обязательно запускать утилиту lilo.
Что такое виртуальный диск? Представьте себе загрузку Linux со SCSI-диска или другого устройства, драйвер которого не вкомпилирован в ядро, а подгружается в виде модуля. LILO сможет найти и прочитать с него файл образа ядра. Теперь ядру предстоит смонтировать корневую файловую систему. Чтобы сделать это, нужно подключить драйвер SCSI, а чтобы найти драйвер в /lib/modules
, нужно смонтировать корневую файловую систему.