20 нояб. 2000 г.

Азы linux (для детей) урок 41

Здесь список команд, так или иначе связанных с созданием резервной копии файла:
Таблица 9.1. Новые команды из главы 9: Резервное копирование
Команда Значение
bzip2 Блок-сортирующий компрессор файлов.
cdrecord Запись владельцем CD с аудио и данными.
dd Конвертация и копирование файла.
fdformat Низкоуровневое форматирование дискеты.
gpg Шифрование и дешифрование данных.
gzip Сжатие или распаковка файлов.
mcopy Копирование файлов MSDOS в/из UNIX.
mdir Отображение каталога MSDOS.
mformat Добавление файловой системы MSDOS к низкоуровнево-отформатированной дискете.
mkbootdisk Создание загрузочной дискеты для текущей системы.
mount Монтирование файловой системы (включение ее в текущую файловую систему, подключение к точке монтирования).
rsync Синхронизация каталогов.
tar Утилита архивирования на ленту, также используется для создания архивов на дисках.
umount Размонтирование файловых систем.


Азы linux (для детей) урок 40

Использование rsync

Программа rsync представляет собой быстрый и гибкий инструмент для удаленного резервного копирования. Она часто встречается на UNIX и UNIX-подобных системах, легко настраивается и используется в сценариях. Хотя r в rsync означает "удаленный", вы не должны понимать это слишком буквально. Ваше "удаленное" устройство может быть просто устройством USB или другим разделом жесткого диска, вам не обязательно иметь две отдельные машины.

Пример: применение rsync к устройству USB

Как уже говорилось в Разделе 3.1.2.3 "Точки монтирования", мы сначала должны смонтировать устройство. Возможно, это должно быть сделано под root'ом:
root@theserver# mkdir /mnt/usbstore

root@theserver# mount -t vfat /dev/sda1 /mnt/usbstore
Удобство для пользователя
Все больше и больше дистрибутивов предоставляют доступ к съемным устройствам для непривилегированных пользователей и монтируют USB-устройства, CD-диски и другие съемные устройства автоматически.
Заметим, что такая директива требует USB поддержку, которая устанавливается на вашей системе. Проверьте с dmesg, что /dev/sda1 действительно является устройством для монтирования.
Затем вы можете непосредственно начать создавать резервную копию, например, каталога /home/karl:
karl@theserver:~> rsync -avz /home/karl/ /mnt/usbstore
Как обычно, за дополнительной информацией обращайтесь к man-страницам.

Шифрование


Общие замечания

Почему вам следует шифровать данные?

Шифрование - это синоним секретности. Совместно с резервным копированием, шифрование может быть очень полезно, например, если вам нужно оставить зарезервированные данные в месте, где вы не можете контролировать доступ, допустим, на сервере вашего провайдера.
Кроме того, шифрование может быть также применено к электронной почте: обычно, почта не шифруется и часто пересылается в открытом виде по местной сети или Интернет. Если ваше сообщение содержит конфиденциальную информацию, лучше его зашифровать.

GNU Privacy Guard

В операционных системах Linux вы найдете GnuPG, GNU Privacy Guard, который представляет собой набор программ, совместимых с инструментами PGP (Pretty Good Privacy), который имеется в продаже.
В этом руководстве мы обсудим только очень простое использование инструментов шифрования и покажем, что вам следует делать, чтобы генерировать ключ шифрования и использовать его для шифрования данных, после чего вы сможет безопасно хранить их в общественном месте. Более сложные способы использования можно найти на man-страницах различных команд.

Генерирование ключа

Перед началом шифрования данных, необходимо создать пару ключей. Пара состоит из закрытого и открытого ключа. Вы можете отправить открытый ключ корреспондентам, которые могут использовать его для шифрования данных для вас, которые вы будете расшифровывать вашим закрытым ключом. Вы всегда должны хранить закрытый ключ, никогда не делиться им с кем-то еще, иначе другие будут иметь возможность расшифровать данные, предназначенные только для вас. Просто чтобы была уверенность, что ничего не случится, закрытый ключ защищается паролем. Пара ключей создается с помощью следующей команды:
willy@ubuntu:~$ gpg --gen-key
gpg (GnuPG) 1.4.2.2; Copyright (C) 2005 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions.  See the file COPYING for details.

gpg: directory `/home/willy.gnupg' created
gpg: new configuration file `/home/willy/.gnupg/gpg.conf' created
gpg: WARNING: options in `/home/willy/.gnupg/gpg.conf' are not yet
 active during this run
gpg: keyring `/home/willy/.gnupg/secring.gpg' created
gpg: keyring `/home/willy/.gnupg/pubring.gpg' created
Please select what kind of key you want:
    (1) DSA and Elgamal (default)
    (2) DSA (sign only)
    (5) RSA (sign only)
Your selection? 1
DSA keypair will have 1024 bits.
ELG-E keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
Requested keysize is 4096 bits
Please specify how long the key should be valid.
         0 = key does not expire
        = key expires in n days
      w = key expires in n weeks
      m = key expires in n month
      y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the
user ID from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) "

Real name: Willy De Wandel
Email address: wdw@mvg.vl
Comment: Willem
You selected this USER-ID:
    "Willy De Wandel (Willem) "

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.
					 
Passphrase:
Теперь введите свой пароль. Это может быть фраза любой длины и содержания, единственным условием является то, что вы должны быть в состоянии запомнить ее навсегда. Для проверки необходимо ввести ту же фразу еще раз.
Теперь пара ключей генерируется программой, которая порождает случайные числа, и эта деятельность, среди прочих факторов, обеспечивается текущей активностью системы. Так что хорошей идеей будет запуск в это время каких-нибудь программ, перемещение курсора мыши или ввод некоторых случайных символов в окне терминала. Это повысит шансы генерирования числа, которое содержит множество различных цифр, и ключ будет труднее взломать.

О вашем ключе

Когда ваш ключ будет создан, вы получите сообщение об "отпечатках пальцев". Это последовательность из 40 шестнадцатеричных чисел, которая представляет собой достаточно длинную последовательность, ее почти невозможно создать дважды на любом компьютере. Вы можете быть в достаточной степени уверены, что это уникальная последовательность. Краткая форма этого ключа состоит из вашего имени, потом следуют последние 8 шестнадцатеричных чисел.
Вы можете получить информацию о вашем ключе следующим образом:
willy@ubuntu:~$ gpg --list-keys
/home/willy/.gnupg/pubring.gpg
------------------------------
pub     1024D/BF5C3DBB 2006-08-08
uid                    Willy De Wandel (Willem) 
sub     4096g/A3449CF7 2006-08-08
Для данного ключа key ID имеет значение "BF5C3DBB". Вы можете отправить ваши key ID и имя на сервер ключей, таким образом другие люди смогут получить эту информацию о вас и использовать ее для шифрования данных для вас. Кроме того, вы можете непосредственно отправить ваш открытый ключ людям, которым он нужен. Открытая часть ключа представляет собой длинный ряд цифр, которые вы можете увидеть при использовании опции --export команды gpg:
gpg --export -a
Однако, мы считаем, что в пределах данного руководства вам потребуется только ключ для шифрования и дешифрования данных для себя. Читайте man-страницы команды gpg, если хотите знать больше.

Шифрование данных

Теперь вы можете шифровать архивы .tar или сжатые архивы, перед сохранением их на резервном носителе или транспортировке на сервер, предназначенный для бэкапов. Используйте команду gpg вот так:
gpg -e -r (part of) uid archive
Опция -e говорит gpg шифровать данные, опция -r указывает, для кого выполняется шифрование. Имейте в виду, что только пользователи, чьи имена следуют после опции -r будут в состоянии расшифровать данные. Например:
willy@ubuntu:~$ gpg -e -r Willy /var/tmp/home-willy-20060808.tar

Расшифровка файлов

Используя опцию -d, вы можете расшифровать файлы, которые были зашифрованы для вас. Данные будут прокручиваться на экране, но зашифрованная копия останется на диске. Таким образом, для файлов, которые имеют отличный от обычного текста формат, вы захотите сохранить расшифрованные данные, чтобы посмотреть их соответствующей программой. Это делается с помощью опции -o команды gpg:
willy@ubuntu:~$ gpg -d -o /var/tmp/home-willy-decrypt.tar /var/tmp/home-willy-20060808.tar.gpg

You need a passphrase to unlock the secret key for
user: "Willy De Wandel (Willem) "
4096 ELG-E key, ID A3449CF7, created 2006-08-08 (main key ID BF5C3DBB)

gpg: encrypted with 4096-bit ELG-E key, ID A3449CF7, created 2006-08-08
        "Willy De Wandel (Willem) "
Нет пароля = нет данных
Если вы не сможете вспомнить свой пароль, данные будут потеряны. И даже системный администратор не сможет расшифровать данные. Именно поэтому копии важных ключей иногда хранят в запечатанном сейфе в банке.

Азы linux (для детей) урок 39


Перемещение данных на устройство резервного копирования

Создание копии на дискете

Форматирование дискеты

На большинстве систем Linux, пользователи имеют доступ к дисководу. Название устройства может варьировать в зависимости от размера и количества гибких дисков. На некоторых системах, вероятно, это будет ссылка /dev/floppy, указывающая на нужное устройство, возможно /dev/fd0 (при автоматическом обнаружении дисковода гибких дисков) или /dev/fd0H1440 (для дискет в 1,44 Мб).
fdformat представляет собой инструмент низкоуровневого форматирования дискеты. Команда принимает имя устройства в качестве опции. fdformat сообщит об ошибке, если дискета защищена от записи.
emma:~> fdformat /dev/fd0H1440
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
Verifying ... done
emma:~>
Команда mformat (из пакета mtools) используется для создания DOS-совместимых дискет, которые затем могут быть доступны через mcopy, mdir и другие m-команды.
Кроме того, доступны графические инструменты.
Рисунок 9.1. Форматирование дискеты
Форматирование дискеты в Linux
После того как дискета отформатирована, она может быть примонтирована к файловой системе и доступна как обычный, хотя маленький, каталог, обычно через /mnt/floppy.
Если вам это нужно, установите утилиту mkbootdisk, которая создает дискету, с которой может загрузиться текущая система.

Использование команды dd для сбрасывания данных

Команда dd может использоваться для перемещения данных на диск, или обратно на дискету, в зависимости от заданных устройств ввода и вывода. Например:
gaby:~> dd if=images-without-dir.tar.gz of=/dev/fd0H1440
98+1 records in
98+1 records out

gaby~> dd if=/dev/fd0H1440 of=/var/tmp/images.tar.gz
2880+0 records in
2880+0 records out

gaby:~> ls /var/tmp/images*
/var/tmp/images.tar.gz
Заметьте, что сброс производится на демонтированное устройство. Дискеты, созданные с помощью этого метода не монтируются к файловой системе, это способ для создания загрузочных или спасательных дисков. Для получения дополнительной информации о возможностях dd читайте man-страницы.
Этот инструмент является частью пакета GNU coreutils.
Сбрасывание дисков.
Команда dd также может быть использована для создания "сырого" дампа всего жесткого диска.

Создание копии на CD

На некоторых системах пользователи могут использовать записывающие CD-устройства. Сначала ваши данные должны быть отформатированы. Используйте команду mkisofs, чтобы сделать это в каталоге, содержащем файлы, для которых вы хотите сделать резервную копию. Проверьте командой df, что на диске достаточно свободное места, так как новый файл будет примерно такого же размера, как вся текущая директория:
[rose@blob recordables] df -h .
Filesystem            Size  Used Avail Use% Mounted on
/dev/hde5              19G   15G  3.2G  82% /home

[rose@blob recordables] du -h -s .
325M    .

[rose@blob recordables] mkisofs -J -r -o cd.iso .
<--snap-->
making a lot of conversions
<--/snap-->
98.95% done, estimate finish Fri Apr  5 13:54:25 2002
Total translation table size: 0
Total rockridge attributes bytes: 35971
Total directory bytes: 94208
Path table size(bytes): 452
Max brk space used 37e84
166768 extents written (325 Mb)
Опции -J и -r используются для монтирования CD-ROM на различных системах, см. man-страницы. После этого, компакт-диск можно создать с помощью инструмента cdrecord с соответствующими опциями:
[rose@blob recordables] cdrecord -dev 0,0,0 -speed=8 cd.iso
Cdrecord 1.10 (i686-pc-linux-gnu) (C) 1995-2001 Joerg Schilling
scsidev: '0,0,0'
scsibus: 0 target: 0 lun: 0
Linux sg driver version: 3.1.20
Using libscg version 'schily-0.5'
Device type    : Removable CD-ROM
Version        : 0
Response Format: 1
Vendor_info    : 'HP      '
Identification : 'CD-Writer+ 8100 '
Revision       : '1.0g'
Device seems to be: Generic mmc CD-RW.
Using generic SCSI-3/mmc CD-R driver (mmc_cdr).
Driver flags   : SWABAUDIO
Starting to write CD/DVD at speed 4 in write mode for single session.
Last chance to quit, starting real write in 0 seconds. 
Operation starts.
В зависимости от скорости вашего CD-дисковода, у вас появится время, чтобы перекусить. Когда задание будет выполнено, вы получите подтверждающее сообщение:
Track 01: Total bytes read/written: 341540864/341540864 
          (166768 sectors).
Существуют некоторые графические инструменты, облегчающие создание дисков. Одним из популярных является xcdroast, который находится в свободном доступе на сайте http://www.xcdroast.org и включен во многие системы и в каталог GNU. Менеджеры рабочего стола KDE и Gnome имеют собственные средства для создания компакт-дисков.

Бэкапы на/с jazz дисков, USB-устройств и других съемных носителей

Эти устройства обычно монтируются к файловой системе. После процедуры монтирования они доступны как обычные каталоги, так что вы можете использовать стандартные команды для работы с файлами.
В примере, приведенном ниже, подготавливается копирование изображений с камеры на жесткий диск:
robin:~> mount /mnt/camera

robin:~> mount | grep camera
/dev/sda1 on /mnt/camera type vfat (rw,nosuid,nodev)
Если у камеры есть только USB-устройство хранения, которое вы когда-нибудь подключали к вашей системе, это безопасно. Но имейте в виду, что USB-устройства присваиваются записям в /dev, как только они подключены к системе. Таким образом, если вы сначала подключите USB-устройство к системе, оно окажется на /dev/sda входе, и если вы подключите камеру после этого, ей будет назначен в /dev/sdb - при условии, что у вас нет каких-либо SCSI-дисков, которые также монтируются на /dev/sd*. На новых системах, где ядро 2.6, автоопределение системы под названием HAL (Hardware Abstraction Layer) гарантирует, что пользователи не должны иметь дело с этим бременем. Если вы хотите проверить, где устройство, введите dmesg после его вставки.
Теперь можно копировать файлы:
robin:~> cp -R /mnt/camera/* images/

robin:~> umount /mnt/camera
Кроме того, джаз-диск может быть смонтирован в /mnt/jazz.
Чтобы это произошло, соответствующие строки должны быть добавлены в /etc/modules.conf и /etc/fstab. Обратитесь к специальным HOWTO аппаратного обеспечения для получения дополнительной информации. В системах с ядром 2.6.x или выше, вы также можете посмотреть man-страницы modprobe и modprobe.conf.

Резервирование данных с помощью ленточных устройств

Это делается с помощью tar (см. ранее). Инструмент mt используется для контроля магнитного ленточного устройства, подобно /dev/st0. Целые книги были написаны о резервном копировании на ленту, поэтому обратитесь к Приложению B, Сравнение команд DOS и Linux. Имейте в виду, что базы данных могут потребовать другие процедуры резервного копирования из-за своей архитектуры.
Соответствующие команды резервного копирования обычно помещают в один из каталогов cron с тем, чтобы они выполнялись регулярно.

Инструменты вашего дистрибутива

Большинство дистрибутивов Linux предлагают свои собственные инструменты для облегчения жизни. Вот краткий перечень:
  • SuSE: YaST теперь включает расширенные модули для резервного копирования и восстановления.
  • RedHat: инструмент File Roller обеспечивает визуальное управление сжатыми архивами. Похоже, они предпочитают X-CD-Roast для перемещения бэкапов на внешние устройства.
  • Mandrake: X-CD-Roast.
  • Большинство дистрибутивов поставляются с утилитами BSD dump и restore для создания резервных копий файловых систем ext2 и ext3. Этот инструмент может записывать на различные устройства и буквально сбрасывать файл(ы) или файловую систему бит за битом на указанное устройство. Подобно dd, это позволяет создавать бэкапы для специальных типов файлов, подобных тем, что находятся в /dev.

Азы linux (для детей) урок 38

 Глава 9. Основные методы резервного копирования

Аварии рано или поздно случаются. В этой главе мы обсудим, как сохранить данные в безопасном месте с помощью других компьютеров, дискет, компакт-дисков и лент. Мы также рассмотрим наиболее популярные команды для сжатия и архивирования. По завершении этой главы вы будете знать, как: Создавать и распаковывать файловые архивы, а также получать о них сведения Обходиться дискетой и создавать загрузочный диск для вашей системы Записывать CD-диски Создавать обновляемые резервные копии Создавать Java-архивы Находить документацию по использованию других устройств и программ резервного копирования Как шифровать ваши данные.

Хотя Linux является одной из самых безопасных операционных систем существующих на данный момент, и даже если он проектировался, чтобы быть еще более надежным, данные могут быть потеряны. К потере данных чаще всего приводят ошибки пользователей, но иногда причиной является неисправность системы, такая как сбой питания или выход из строя диска, так что неплохо всегда иметь дополнительные копии личных и/или важных данных.

Подготовка данных

Архивирование с помощью tar

В большинстве случаев, сначала принято собирать все данные для резервного копирования в один архивный файл, который затем сжимают. Сам процесс архивирования представляет собой объединение всех перечисленных файлов и устранение бесполезных пустот. В Linux для этого часто используют команду tar. Эта команда была первоначально создана для архивирования данных на ленты, но она также может создавать архивы, известные как тарболы (tarballs).
У tar есть множество опций, наиболее важные из них приведены ниже:
-v: подробный вывод
-t: тест, показывающий содержимое архива
-x: извлечение архива
-c: создание архива
-f archivedevice: использование archivedevice в качестве источника/назначения для архива, устройство по умолчанию — первый накопитель на магнитной ленте (обычно /dev/st0 или что-то подобное)
-j: фильтр через bzip2, см. Раздел "Обновление бэкапов с помощью tar"
Перед опциями tar обычно пропускают штрих-префикс, что видно в примерах ниже.
Использование GNU tar для совместимости.
Архивы, созданные с помощью проприетарной версии tar в одной системе, могут быть несовместимы с tar на другой проприетарной системе. Это может доставить головную боль, например, если архив может быть восстановлен только в системе, которая больше не существует. Используйте GNU-версию tar на всех системах, чтобы ваш системный администратор не рыдал. Linux всегда использует GNU tar. При работе на других машинах UNIX, введите tar –help, чтобы выяснить, какую версию вы используете. Свяжитесь с системным администратором, если вы не заметите слова GNU.
В приведенном ниже примере архив создается и распаковывается.
gaby:~> ls images/
me+tux.jpg  nimf.jpg

gaby:~> tar cvf images-in-a-dir.tar images/
images/
images/nimf.jpg
images/me+tux.jpg

gaby:~> cd images

gaby:~/images> tar cvf images-without-a-dir.tar *.jpg
me+tux.jpg
nimf.jpg

gaby:~/images> cd

gaby:~> ls */*.tar
images/images-without-a-dir.tar

gaby:~> ls *.tar
images-in-a-dir.tar 

gaby:~> tar xvf images-in-a-dir.tar 
images/
images/nimf.jpg
images/me+tux.jpg

gaby:~> tar tvf images/images-without-dir.tar 
-rw-r--r-- gaby/gaby  42888 1999-06-30 20:52:25 me+tux.jpg
-rw-r--r-- gaby/gaby   7578 2000-01-26 12:58:46 nimf.jpg

gaby:~> tar xvf images/images-without-a-dir.tar 
me+tux.jpg
nimf.jpg

gaby:~> ls *.jpg
me+tux.jpg  nimf.jpg
Этот пример также иллюстрирует разницу между заархивированными каталогом и группой файлов. Желательно сжимать только каталоги, так как файлы могут не распаковаться вместе (архив может быть на другой системе, и вы можете не знать, какие файлы уже существовали, а какие те, которые из архива).
Если магнитный накопитель подключен к вашей машине и настроен системным администратором, имена файлов, оканчивающиеся на .tar заменяются именем устройства, например:
tar cvf /dev/tape mail/
Каталог почты и все файлы, которые он содержит, сжимаются в файл, который записывается сразу на носитель. Содержание листинга отображается, потому что мы использовали соответствующую опцию.

Обновление бэкапов с помощью tar

Программа tar поддерживает создание дополняющихся резервных копий, с помощью опции -N. С помощью этой опции можно указать дату, и tar будет проверять время изменения всех указанных файлов от этой даты. Если файлы будут изменены позже, они будут включены в бэкап. В приведенном ниже примере используется метка на предыдущий архив как значение даты. Сначала создается начальный архив и метка указывает на этот архивный файл. Затем создается новый файл, который принимает новую резервную копию, содержащую только этот новый файл:
jimmy:~> tar cvpf /var/tmp/javaproggies.tar java/*.java
java/btw.java
java/error.java
java/hello.java
java/income2.java
java/income.java
java/inputdevice.java
java/input.java
java/master.java
java/method1.java
java/mood.java
java/moodywaitress.java
java/test3.java
java/TestOne.java
java/TestTwo.java
java/Vehicle.java

jimmy:~> ls -l /var/tmp/javaproggies.tar
-rw-rw-r-- 1 jimmy   jimmy   10240 Jan 21 11:58 /var/tmp/javaproggies.tar

jimmy:~> touch java/newprog.java

jimmy:~> tar -N /var/tmp/javaproggies.tar \
-cvp /var/tmp/incremental1-javaproggies.tar java/*.java 2> /dev/null
java/newprog.java

jimmy:~> cd /var/tmp/

jimmy:~> tar xvf incremental1-javaproggies.tar
java/newprog.java
Стандартные ошибки перенаправляются в /dev/null. Если вы не сделаете этого, tar будет выводить сообщение для каждого неизмеренного файла, сообщая вам, что он не будет сбрасываться.
У такого способа работы есть неудобство, т.к. просматриваются метки на файлы. Скажем, вы загрузили архив в каталог, содержащий ваши бэкапы, и этот архив содержит файлы, которые были созданы два года назад. При сверке меток этих файлов с метками на начальный архив, новые файлы действительно окажутся старым для tar и не будут добавлены в резервную копию с помощью опции -N.
Лучшим выбором будет опция -g, которая создаст список файлов для резервного копирования. При обновлении резервной копии, файлы сверяются с этим списком. Вот как это работает:
jimmy:~> tar cvpf work-20030121.tar -g snapshot-20030121 work/
work/
work/file1
work/file2
work/file3

jimmy:~> file snapshot-20030121
snapshot-20030121: ASCII text
На следующий день, пользователь jimmy немного поработал с file3 и создал file4. В конце дня он создает новый бэкап:
jimmy:~> tar cvpf work-20030122.tar -g snapshot-20030121 work/
work/
work/file3
work/file4
Это очень простые примеры, но вы также можете использовать этот вид команды в работе хрона (см. Раздел "Cron и crontab"), который указывает, например, снимок файла для еженедельного резервного копирования и один для ежедневного резервного копирования. Снимки файлов должны быть заменены, в случае, когда создается полная резервная копия.
Более подробную информацию можно найти в документации к tar.
Важно знать.
Как вы могли, вероятно, заметить, tar хорошо работает, когда речь идет о простом каталоге с набором лежащих вместе файлов. Однако есть инструменты, которые легче в управлении, когда вам нужен архив целых разделов, дисков или больших проектов. Мы же рассказываем про tar потому, что это очень популярный инструмент для распространения архивов. Довольно часто бывает ситуация, когда вам необходимо установить программное обеспечение, входящее в так называемый "сжатый тарбол". См. Раздел "Использование rsync", чтобы узнать более простой способ выполнять регулярное резервное копирование.

Сжатие и распаковка с помощью gzip и bzip2

Данные, в том числе архивы, могут быть сжаты с использованием инструментов zip. Команда gzip добавит суффикс .gz к имени файла и удаляет исходный файл.
jimmy:~> ls -la | grep tar
-rw-rw-r-- 1 jimmy  jimmy    61440 Jun  6 14:08 images-without-dir.tar

jimmy:~> gzip images-without-dir.tar 

jimmy:~> ls -la images-without-dir.tar.gz 
-rw-rw-r-- 1 jimmy  jimmy    50562 Jun  6 14:08 images-without-dir.tar.gz
Распаковываются сжатые файлы с помощью опции -d.
bzip2 работает аналогично, но использует улучшенный алгоритм сжатия, поэтому файлы получаются меньшего размера. За дополнительной информацией обратитесь к info-страницам bzip2.
Пакеты софта для Linux часто распространяются как сжатые архивы. После распаковки такого архива разумно найти README и прочитать его. Он обычно содержат руководство для установки пакета.
Команда GNU tar понимает сжатые файлы. Используйте команду
tar zxvf file.tar.gz
для распаковки файлов tar.gz или .tgz. Используйте
tar jxvf file.tar.bz2
для распаковки tar-архивов, которые были сжаты c помощью bzip2.

Архивы Java

Проект GNU предоставляет также jar для создания Java-архивов. Это приложение Java, которая объединяет несколько файлов в один архивный файл JAR. Хотя он поддерживает обычное архивирование и сжатие, основанное на ZIP и ZLIB форматах сжатия, jar в основном предназначен для облегчения упаковки кода Java, апплетов и/или приложений в один файл. Скомбинированные в одном архиве, компоненты приложения Java, могут быть скачаны гораздо быстрее.
В отличие от tar, jar сжимает по умолчанию, независимо от других инструментов - потому что это в основном java-версия zip. Кроме того, jar позволяет на отдельные записи в архиве ставить подпись автора, что дает возможность проверять происхождение.
Синтаксис практически идентичен команде tar. Чтобы найти различия обратитесь к info-страницам jar.
tar, jar и символические ссылки.
То, на что следует обратить внимание в упомянутой документации, jar следует по символьным ссылкам. Данные, к которым эти ссылки указывают, будут включены в архив. По умолчанию tar делает резервную копию самой символьной ссылки, но это поведение можно изменить с помощью опции -h для tar.

Транспортировка данных

Сохранение копии ваших данных на другом компьютере является наиболее надежным способом создания резервных копий. См. Главу 10, Сеть для дополнительной информации по scp, ftp и др.
В следующем разделе мы обсудим иные устройства для резервного копирования.

Азы linux (для детей) урок 37

Команда для печати

Получение файла для принтера

Очень легко распечатать документ из приложения, выбрав в меню пункт Печать.
Для печати из командной строки используйте команду lp или lpr.
lp file(s)
lpr file(s)

Эти команды могут читать из канала, так что вы можете распечатать вывод какой-либо команды вот так
command | lp
Существует множество опций, осуществляющих настройку макета страницы, установку количества копий, выбор принтер, на который вы хотите отправить печать, если у вас их больше, чем один, размер бумаги, одностороннюю или двустороннюю печать, если принтер поддерживает эту функцию, поля и т.д. Читайте man-страницы для полного обзора.

Статус вашего задания на печать

После того как файл принят в очередь печати, данному заданию на печать присваивается идентификационный номер:
davy:~> lp /etc/profile
request id is blob-253 (1 file(s))
Для просмотра очереди печати используются команды lpq или lpstat. Когда они вводятся без аргументов, то отображается по умолчанию содержимое очереди печати.
davy:~> lpq
blob is ready and printing
Rank	Owner	Job	File(s)		Total Size
active	davy	253	profile		1024 bytes
davy:~> lpstat
blob-253	davy	1024	Tue 25 Jul 2006 10:20_01 AM CEST

Статус принтера

Какой принтер установлен по умолчанию в системе, которая имеет доступ к нескольким принтерам?
davy:~> lpstat -d
system default destination: blob
Какой статус у моего принтера(ов)?
davy:~> lpstat -p
printer blob now printing blob-253. enabled since Jan 01 18:01

Удаление заданий из очереди печати

Если вам не нравится, что вы видите из состояния команд, используйте lprm или cancel для удаления заданий.
davy:~> lprm 253
В графической среде вы можете увидеть всплывающее окно, сообщающее вам, что задание было отменено.
В больших системах lpc может быть использована для управления несколькими принтерами. Смотрите info- или man-страницы для каждой команды.
Существует множество GUI инструментов для печати, которые используются как интерфейс для lp, и у большинства графических приложений есть функции печати, которые используют lp. См. встроенную справку по функциям и специальную документацию к программам для получения дополнительной информации.
Почему существует две команды для каждой задачи, связанной с печатью?
Печать на UNIX и подобных системах имеет длинную историю. Когда-то использовались два весьма различных подхода: BSD-стиль печати и SystemV-стиль печати. Для совместимости Linux CUPS поддерживает команды обоих способов. Также следует отметить, что lp не ведет себя так же, как lpr, у lpq есть несколько различных опций, почти lpstat и lprm, но не совсем, как cancel. Не важно какую вы используете, просто используйте команды, которые наиболее удобный для вас, или с которыми у вас есть опыт работы в других UNIX-подобных системах.

Форматирование

Инструменты и языки

Если мы хотим получить что-то разумное от принтера, в первую очередь файл должен быть отформатирован. Помимо того, что существует обилие программного обеспечения для оформления, Linux поставляется с базовыми UNIX-инструментами и языками для форматирования.
Современные системы Linux поддерживают прямую печать, без форматирования пользователем целого ряда типов файлов: текст, PDF, PostScript и несколько графических форматов, таких как PNG, JPEG, BMP и GIF.
Для тех форматов файлов, которым необходимо форматирование, Linux поставляется с большим количеством соответствующих инструментов, таких как команды pdf2ps, fax2ps и a2ps, которые преобразуют другие форматов в PostScript. Эти команды могут создавать файлы, которые затем могут использоваться в других системах, в которых не установлены все инструменты для преобразования формата.
Помимо этих инструментов командной строки существует много графических программ для обработки текста. Доступно несколько офисных комплектов, многие из которых свободны. Они выполняют оформление автоматически после подачи задания на печать. Вот некоторые: OpenOffice.org, KOffice, AbiWord, WordPerfect и т.д.
Ниже приведены распространенные языки по отношению к печати:
  • groff: GNU версия команды roff UNIX. Является интерфейсом к groff-системе форматирования документов. Обычно она запускает команду troff, а для выбранного устройства назначается пост-процессор. Это позволяет создавать файлы PostScript.
  • TeX и макропакет LaTeX: один из наиболее широко используемых языков разметки в системах UNIX. Обычно вызывается как tex, который форматирует файлы и выводит соответствующее аппаратно-независимое представление набранного документа.
    Технические работы по-прежнему часто создаются в LaTeX из-за его поддержки математических формул, хотя усилия, чтобы включить эту функцию в другие приложениях, предпринимаются W3C (World Wide Web Consortium).
  • SGML и XML: Свободные парсеры, доступные для UNIX и Linux. XML является следующим поколением SGML, он образует основу для DocBook XML — системы документов (эта книга написана на XML, например).
Печать документации
Man-страницы содержат предварительно отформатированные troff данные, которые должны быть приведены к соответствующему виду, прежде чем они могут быть распечатаны на принтере. Печать выполняется с использованием опции -t команды man:
man -t command > man-command.ps
После чего распечатывается файл PostScript. Если место назначения печати настроено для вашей системы/аккаунта по умолчанию, вы можете просто выполнить команду man -t command для отправки напрямую отформатированных страниц на принтер.

Предварительный просмотр отформатированных файлов

Все, что вы можете отправить на принтер, может с таким же успехом быть отображено на экране. В зависимости от формата файла, можно использовать одну из следующих команд:
  • Файлы PostScript: с помощью команды gv (GhostView).
  • TeX dvi файлов: xdvi, или с помощью варианта для KDE - kdvi.
  • PDF файлы: xpdf, kpdf, gpdf или программа для просмотра Adobe, acroread, которая также доступна для бесплатного использования, но не является свободным программным обеспечением.
  • В таких приложениях как Firefox или OpenOffice обычно можно выбрать предварительный просмотр печати из меню.
Когда-то выбор для пользователей Linux был прост: все использовали один и тот же старый LPD от принадлежащего BSD кода Net-2. В то время LPR был более популярным, однако в настоящее время современные дистрибутивы Linux используют CUPS, Common UNIX Printing System (общую систему печати UNIX). CUPS представляет собой реализацию Internet Printing Protocol (IPP), подобного HTTP стандарта RFC, заменяющего почтенный (и неуклюжий) протокол LPD. CUPS распространяется под GNU Public License. CUPS также является системой печати по умолчанию в MacOS X.

Графическая конфигурация принтера

Большинство дистрибутивов поставляются с графическим интерфейсом для настройки сетевых и локальных (через параллельный порт или USB) принтеров. Они позволяют выбрать принтер из списка и проверить его работоспособность. Вам не придется беспокоиться о содержимом и местонахождении конфигурационных файлов. Перед установкой принтера смотрите системную документацию.
CUPS можно также настроить с помощью веб-интерфейса, который работает на порте 631 вашего компьютера. Чтобы проверить, что такая возможность включена, попробуйте просмотреть localhost:631/help или localhost:631/.

Проблемы печати

Не тот файл

При печати не того файла, задание может быть отменено с помощью команды lprm jobID, где jobID указывается в формате printername-printjobnumber (получить такую информацию можно с помощью команд lpq или lpstat). Это будет работать, когда другие задания ожидают печати в очереди этого принтера. Однако, вы должны действовать очень быстро, если единолично используете принтер, так как задания, как правило, становятся в очередь и отправляются на принтер в считанные секунды. Как только они появляются на принтере, то становится уже слишком поздно удалять задания инструментами Linux.
В подобных случаях, а также когда неправильно настроен драйвер печати, и выходит только какой-то мусор, вы можете попробовать выключить принтер. Однако, это может быть не лучшим путем решения проблемы, так как может привести к замятию бумаги и прочим нарушениям.

Не получается распечатать

С помощью команды lpq вы можете увидеть статус вашего задания:
elly:~> lpq
Printer: lp@blob
 Queue: 2 printable jobs
 Server: pid 29998 active
 Unspooler: pid 29999 active
 Status: waiting for subserver to exit at 09:43:20.699
 Rank   Owner/ID             Class Job Files          Size Time
1      elly@blob+997           A   997 (STDIN)         129 09:42:54
2      elly@blob+22            A    22 /etc/profile    917 09:43:20
В наши дни многие принтеры имеют веб-интерфейсы, которые могут отображать информацию о состоянии, если ввести IP-адрес принтера в веб-браузере:
Рисунок 8.1. Состояние принтера через веб-интерфейс
Веб-интерфейс принтера в Linux
Веб-интерфейс CUPS в сравнении с веб-интерфейсом принтера
Заметьте, что это не веб-интерфейс CUPS и работает только для принтеров, поддерживающих такую функцию. Проверьте документацию вашего принтера.
Если ID вашего задания нет в системе и нет на принтере, обратитесь к системному администратору. Если ID вашего задания указан в выходных данных, убедитесь, что принтер в настоящее время печатает. Если это так, просто подождите, ваше задание будет выполнено в свое время.
Если принтер не печатает, проверьте, что там есть бумага, физическое подключение к электроэнергии и сети передачи данных. Если все нормально, принтер может нуждаться в перезагрузке. Узнайте мнение системного администратора.
В случае сетевого принтера, попробуйте выполнить печать с другого хоста. Если принтер доступен с вашего собственного хоста (см. Главу 10, Сеть), вы можете попробовать отправить файл в его формате, file.ps в случае принтера PostScript, используя клиент FTP. Если это сработает, ваша система печати неправильно сконфигурирована. Если не сработает, возможно принтер не понимает формат, который вы ему скармливаете.

Служба печати Linux поставляется с рядом инструментов, основанных на стандартных инструментах UNIX LPD, будь то варианты от SystemV или BSD. Ниже приведен список команд, связанных с печатью.
Таблица 8.1. Новые команды в главе 8: Печать
Команда Значение
lpr или lp Печать файла
lpq или lpstat Запрос очереди печати
lprm или cancel Удаление задания на печать
acroread Просмотр документов pdf
groff Инструмент форматирования
gv Просмотр файлов PostScript
printconf Настройка принтеров
xdvi Просмотр документов dvi
xpdf Просмотр документов pdf
*2ps Конвертация файлов в PostScript



20 окт. 2000 г.

Азы linux (для детей) урок 36

Таблица 7.2. Новые команды главы 7: Создай себе дом
Команда Значение
aptitude Управление пакетами в стиле Debian
automount Автоматическое подключение вновь добавленной файловой системы
dpkg Пакетный менеджер Debian
dselect Управление пакетами в стиле Debian
loadkeys Загрузка конфигурации клавиатуры
lsof Определяет процессы
mount Подключает новые файловые системы к существующему дереву каталогов
ntpdate Устанавливает системное время и дату использования времени сервера
quota Отображает информацию о разрешенном к использованию дисковом пространстве
recode Конвертирует файлы в другие таблицы символов
rpm Управление RPM-пакетами
setfont Выбор шрифтов
timezone Установка временной зоны
tzconfig Установка временной зоны
ulimit Установка или отображение ограничения ресурсов
up2date Управление RPM-пакетами
urpmi Управление RPM-пакетами
yum Управление RPM-пакетами


Азы linux (для детей) урок 35

Форматы пакетов

Пакеты RPM

Что такое RPM?
RPM, RedHat Package Manager, представляет собой мощный менеджер пакетов, который вы можете использовать для установки, обновления и удаления пакетов. Он позволяет вам находить пакеты и отслеживает файлы, которые поставляются с каждым пакетом. Система построена таким образом, что вы можете проверить подлинность пакетов, скаченных из Интернета. Опытные пользователи могут создавать свои собственные пакеты RPM.
Пакет RPM состоит из архива файлов и метаданных, используемых для установки и удаления файлов архива. Метаданные включают вспомогательные скрипты, атрибуты файлов, и информацию со сведениями о пакете. Пакеты выпускаются в двух вариантах: бинарные, используется для упаковки программного обеспечения для установки, и пакеты с исходным кодом и предписанием, необходимым для создания бинарных пакетов.
Многие другие дистрибутивы поддерживают пакеты RPM, среди популярных - RedHat Enterprise Linux, Mandriva (бывший Mandrake), Fedora Core и SuSE Linux. Помимо советов для вашего дистрибутива, вы захотите прочитать man rpm.
Примеры работы с RPM
Большинство пакетов просто устанавливаются при использовании опции обновления -U, и не важно установлен уже пакет или нет. Пакет RPM содержит полную версию программы, которая перезаписывает существующую версию или инсталлируется как новый пакет. Типичное использование выглядит следующим образом:
rpm -Uvh /path/to/rpm-package(s)
Опция -v генерирует более подробный вывод, -h заставляет rpm выводить индикатор прогресса установки:
[root@jupiter tmp]# rpm -Uvh totem-0.99.5-1.fr.i386.rpm
Preparing...                ########################################### [100%]
   1:totem                  ########################################### [100%]
[root@jupiter tmp]#
При этом новые пакеты ядра, устанавливаются с опцией -i, которая не перезаписывает существующую версию пакета. Таким образом, вы по-прежнему сможете загрузить систему со старым ядром, если новое окажется не рабочим.
Вы также можете использовать rpm для проверки, установлен ли пакет в вашей системе:
[david@jupiter ~] rpm -qa | grep vim
vim-minimal-6.1-29
vim-X11-6.1-29
vim-enhanced-6.1-29
vim-common-6.1-29
Или вы можете узнать, какой пакет содержит определенный файл или исполняемый файл:
[david@jupiter ~] rpm -qf /etc/profile
setup-2.5.25-1

[david@jupiter ~] which cat
cat is /bin/cat

[david@jupiter ~] rpm -qf /bin/cat
coreutils-4.5.3-19
Заметьте, вам не нужно иметь доступ к административным привилегиям, чтобы использовать rpm для запроса к базе данных RPM. Аккаутн root требуется только при добавлении, изменении или удалении пакетов.
Ниже приведен еще один пример, демонстрирующий, как удалить пакет при помощи rpm:
[root@jupiter root]# rpm -e totem
[root@jupiter root]#
Обратите внимание, что удаление по умолчанию происходит без подробностей, это нормально, что вы не видите многое из того, что происходит. Если вы сомневаетесь, используйте rpm -qa опять, чтобы убедиться, что пакет был удален.
RPM может делать гораздо больше, чем те несколько основных функций, которые мы привели здесь.

Пакеты DEB (.deb)

Что из себя представляют пакеты Debian?
Этот формат пакетов используется по умолчанию в Debian GNU/Linux, где dselect, и, в настоящее время все более распространенный, aptitude являются стандартными инструментами для управления пакетами. Они используются для выбора пакетов, которые вы хотите установить или обновить, но также работают во время установки системы Debian и помогают вам определить метод доступа для использования, список доступных пакетов и их настройки.
Веб-сайт Debian содержит всю необходимую информацию.
Формат пакетов Debian становится все более и более популярным. Также apt-get становится популярным на не-DEB системах.
Примеры с инструментами DEB
Проверка, установлен ли пакет, осуществляется с помощью команды dpkg. Например, если вы хотите узнать, какая версия Gallery установлена на вашем компьютере, то следует выполнить такую команду:
nghtwsh@gorefest:~$ dpkg -l *gallery*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name           Version        Description
+++-==============-==============-============================================
ii  gallery        1.5-1sarge2    a web-based photo album written in php
Префикс "ii" означает, что пакет установлен. Если вы увидите префикс "un", это означает, что пакет известен в списке, который поддерживает ваша система, но не установлен.
Поиск, какому пакету принадлежит файл, выполняется путем использования -S для dpkg:
nghtwsh@gorefest:~$ dpkg -S /bin/cat
coreutils: /bin/cat
Больше информации можно найти на info-страницах dpkg.

Пакеты с исходным кодом

Наибольшая часть программ Linux является Free/Open Source, что означает, что пакеты с исходными кодами доступны для этих программ. Исходники необходимы для компиляции собственного варианта программы. Истодные коды программы можно скачать с ее веб-сайта, обычно в виде сжатого архива (program-version.tar.gz или аналогичного). Для дистрибутивов, основанных на RPM, исходники часто поставляются как program-version.src.rpm. Debian и большинство дистрибутивов на его основе, предоставляют для себя адаптированные исходники, который можно получить с помощью apt-get source.
Особые требования, зависимости и инструкции по установке приведены в файле README. Вам, вероятно, понадобится компилятор с языка C gcc. Этот компилятор GNU входит в большинство систем Linux и портирован на множество других платформ.

Автоматизация управления пакетами и обновлениями

Общие замечания

Первое, что вы делаете после установки новой системы, - это обновляете ее; это относится ко всем операционным системам и Linux не исключение.
Обновления для большинства систем Linux обычно могут быть найдены на ближайшем сайте-зеркале вашего дистрибутива. Списки сайтов, предлагающих такую возможность, можно найти на веб-сайте вашего дистрибутива, см. Приложение A, Куда идти дальше?.
Обновления следует применять регулярно, если это возможно, то ежедневно, но можно начать с того, чтобы проводить обновление каждые несколько недель. Вы действительно должны стремиться к тому, чтобы иметь самую последнюю версию дистрибутива, так как Linux изменяется постоянно. Как было прежде отмечено, появление новых возможностей, улучшений и исправлений ошибок происходит регулярно, иногда решаются важные проблемы безопасности.
Хорошей новостью является то, что большинство дистрибутивов Linux предоставляют инструменты, поэтому вам не придется ежедневно обновлять десятки пакетов вручную. Следующие разделы дают обзор менеджеров пакетов. Это достаточно обширная тема, даже регулярные обновления пакетов с исходными кодами управляются автоматически; мы перечислим лишь наиболее широко известных системы. Всегда обращайтесь к документации для вашего конкретного дистрибутива для выяснения действий.

APT

Advanced Package Tool является системой управления пакетами программного обеспечения. Команда инструмента для обработки пакетов – apt-get, который поставляется с превосходной man-страницей, описывающей как установить и обновить пакеты или весь дистрибутив. APT зародился в дистрибутиве Debian GNU/Linux, где он по умолчанию является менеджером пакетов. Также APT был портирован для работы с пакетами RPM. Главное преимущество APT заключается в том, что он является свободным и гибким в использовании. Это позволит вам создать системы, подобные конкретным дистрибутивам (и в некоторых случаях коммерческие), перечисленные в следующих разделах.
Как правило, при первом использовании apt-get, вы должны будете получить индекс доступных пакетов. Это делается с помощью команды
apt-get update
После этого, вы можете использовать apt-get для обновления вашей системы:
apt-get upgrade
Делайте это часто, это легкий способ сохранять вашу систему современной и, следовательно, безопасной.
Помимо этого общего пользования, apt-get также очень быстр для установки отдельных пакетов. Вот как это работает:
[david@jupiter ~] su - -c "apt-get install xsnow"
Password:
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
  xsnow
0 packages upgraded, 1 newly installed, 0 removed and 3 not upgraded.
Need to get 33.6kB of archives.
After unpacking 104kB of additional disk space will be used.
Get:1 http://ayo.freshrpms.net redhat/9/i386/os xsnow 1.42-10 [33.6kB]
Fetched 33.6kB in 0s (106kB/s)
Executing RPM (-Uvh)...
Preparing...                ########################################### [100%]
   1:xsnow                  ########################################### [100%]
Обратите внимание на опцию -c команды su, которая указывает, чтобы shell администратора выполнила только эту команду, а затем вернуться к среде пользователя. Таким образом, у вас не получится забыть осуществить выход из учетной записи суперпользователя.
Если существуют какие-либо зависимости от других пакетов, apt-get загрузит и установит эти вспомогательные пакеты.

Системы, использующие пакеты RPM

Update Agent, который изначально поддерживал только пакеты RPM RedHat, теперь перенесен на более широкий набор программного обеспечения, в том числе не-RedHat репозитории. Этот инструмент предоставляет полную систему для обновления RPM пакетов на системах RedHat или Fedora Core. Для обновления вашей системы в командной строке следует ввести up2date. На рабочем столе по умолчанию активируется маленький значок, говорящий вам, нет ли обновлений для вашей системы.
Yellowdog's Updater Modified (yum) является еще одним инструментом, который в последнее время стал достаточно популярным. Это интерактивная, но автоматически работающая программа для инсталляции, обновления или удаления пакетов RPM в системе. Этот инструмент выбран на системах Fedora.
В SuSE Linux, все это делается с YaST, Yet another Setup Tool, который поддерживает широкий спектр задач системного администрирования, среди которых и обновление RPM пакетов. Начиная с SuSE Linux 7.1 вы можете производить обновление также с помощью веб-интерфейса и YOU, Yast Online Update.
Mandrake Linux и Mandriva предоставлять так называемые URPMI инструменты, ряд программ-оберток, которые делают установку нового программного обеспечения проще для пользователя. Эти инструменты в сочетании с RPMDrake и MandrakeUpdate обеспечить все необходимое для упрощения установки и удаления пакетов программного обеспечения. MandrakeOnline предлагает расширенный спектр услуг и может автоматически уведомлять администраторов, когда обновления доступны для вашей конкретной системы. Помимо прочего посмотрите man urpmi для дополнительной информации.
Также среды KDE и Gnome имеют собственные (графический) варианты пакетных менеджеров.

Обновление ядра

Большинство установок в Linux протекает без проблем, если вы периодически обновляете ваш дистрибутив. Процедура обновления при необходимости установит новое ядро и сделает все необходимые изменения в вашей системе. Вам придется компилировать или устанавливать новое ядро вручную, если вам нужны функции ядра, которые не включены в ядро вашего дистрибутива Linux по умолчанию.
Компилируете ли вы собственное оптимизированное ядро или используете предварительно скомпилированный пакет ядра, установите его так, чтобы старое и новое ядра существовали вместе, пока вы не убедитесь, что все работает как надо.
Затем создайте двойную загрузку системы, что позволит вам выбрать ядро для загрузки, обновив загрузочный конфигурационный файл grub.conf. Вот простой пример:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making config changes. 
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, e.g.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/hde8
#          initrd /initrd-version.img
#boot=/dev/hde
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux new (2.4.9-31)
	root (hd0,0)
	kernel /vmlinuz-2.4.9-31 ro root=/dev/hde8
	initrd /initrd-2.4.9-31.img
title old-kernel
        root (hd0,0)
        kernel /vmlinuz-2.4.9-21 ro root=/dev/hde8
        initrd /initrd-2.4.9-21.img
После того, как новое ядро окажется рабочим, вы можете удалить строки для загрузки старого из конфигурационного файла GRUB, хотя лучше подождать пару дней, просто чтобы быть уверенным.

Установка дополнительных пакетов с установочных CD

Монтирование CD

В основном это происходит так же, как и установка пакетов вручную, кроме того, вы должны добавить файловую систему CD к файловой системе вашего компьютера, чтобы сделать ее доступной. На большинстве систем, это будет сделано автоматически при вставке компакт-диска в привод, потому что во время загрузки запускается демон automount. Если ваш компакт-диск не становится доступным автоматически, выполните команду mount в окне терминала. В зависимости от вашей конкретной системной конфигурации, строка, подобная этой, обычно делает свое дело:
mount /dev/cdrom /mnt/cdrom
На некоторых системах только суперпользователь может монтировать сменные носители, это зависит от конфигурации.
Для того, чтобы все происходило автоматически, устройство для чтения CD обычно имеет запись в /etc/fstab, в котором перечислены файловые системы и их точки монтирования, в результате чего получается дерево файловой системы. Вот подобная строка:
[david@jupiter ~] grep cdrom /etc/fstab
/dev/cdrom	/mnt/cdrom	iso9660		noauto,owner,ro 0 0
Это означает, что система будет понимать команду mount /mnt/cdrom. Опция noauto означает, что на этой системе компакт-диски не монтируются во время загрузки.
Вы даже можете попробовать щелкнуть правой кнопкой мыши на значке компакт-диска на рабочем столе для монтирования CD, если ваш файловый менеджер не сделает это за вас. Вы можете проверить, сработало ли это, с помощью команды mount без аргументов:
[david@jupiter ~] mount | grep cdrom
/dev/cdrom on /mnt/cdrom type iso9660 (ro,nosuid,nodev)

Использование CD

После монтирования CD, вы можете перемещаться по его каталогам, как правило, в точке монтирования /mnt/cdrom, где вы можете получить доступ к содержимому CD-ROM. Используйте те же команды для работы с файлами и каталогами, какие вы бы использовали для файлов на жестком диске.

Извлечение CD

Для того, чтобы вытащить компакт-диск из дисковода после того, как вы закончили использовать его, файловая система CD не должна использоваться. Даже нахождение в одном из подкаталогов точки монтирования, /mnt/cdrom в нашем примере, будет рассматриваться как "использование файловой системы", поэтому вам следует выйти оттуда. Сделайте это, например, введя cd без аргументов, эта команда вернет вас обратно в домашний каталог. После этого, вы можете использовать команду
umount /mnt/cdrom
или
eject cdrom
Заблокированные диски
Никогда не применяйте силу к дисководу. Трюк со скрепкой является плохой идеей, и хотя это, в конечном итоге, выдернет CD, но ваша система будет думать, что CD по-прежнему там, т.к. обычные процедуры не были соблюдены. Скорее всего, вам придется перезагрузиться, чтобы привести систему в согласованное состояние.
Если вы продолжаете получать сообщения "устройство занято", сначала проверьте, что все сессии shell вышли из файловой системы CD, а также графические приложения не используют его больше. Если есть сомнения, используйте инструмент lsof, чтобы убрать процесс(ы), которые продолжают использовать ресурсы компакт-диска.

Азы linux (для детей) урок 34

Графическая среда

Система X Window

X Window System представляет собой явно сетевое окно системы, которая работает на широком спектре вычислительных и графических машин. Серверы X Window System работают на компьютерах с растровыми дисплеями. X сервер распределяет пользовательский ввод и принимает запросы на вывод от нескольких клиентских программ через различные межпроцессорные каналы связи. Хотя самый распространенный случай – клиентские программы работают на той же машине, что и сервер, но клиенты могут также прозрачно работать от других машин (включая машины с различными архитектурами и операционными системами). Мы узнаем, как это делается в Главе 10, Сеть, в которой рассказывается о сетях и удаленных приложениях.
X поддерживает параллельные иерархические окна, текст и графические операции как на монохромных, так и цветных дисплеях. Число клиентских программ X, которые используют X-сервер достаточно велико. Некоторые программы, внедренные в ядро распределением X Consortium, включают:
  • xterm: эмулятор терминала
  • twm: минималистичный оконный менеджер
  • xdm: менеджер дисплеев
  • xconsole: программа перенаправления консоли
  • bitmap: растровый редактор
  • xauth, xhost и iceauth: программы контроля доступа
  • xset, xmodmap и многие другие: предпочитаемые пользователем настройки программ
  • xclock: часы
  • xlsfonts и другие: экранный шрифт, утилиты для просмотра информации о шрифтах, окна и отображения
  • xfs: сервер шрифтов
  • ...
Мы опять отсылаем к man-страницам этих команд за подробной информацией. Подробнее разъяснения доступных функций можно найти в руководстве Xlib - C language X Interface, которое поставляется с вашим X дистрибутивом, спецификацией X Window System Protocol, а также различные руководства и документация по X. Каталог /usr/share/doc содержит ссылки на эти и многие другие документы.
Многие другие утилиты, оконные менеджеры, игры, пособия и гаджеты включены распределением X Consortium как дополнительное пользовательское программное обеспечение, или доступны с помощью анонимного ftp по Интернету. Хорошими местами для начала являются http://www.x.org и http://www.xfree.org.
Кроме того, все ваши графические приложения, такие как браузер, программа для электронной почты, программа для просмотра изображений, инструменты для проигрывания звуков и так далее являются клиентами X сервера. Отметим, что в обычных условиях эксплуатации графического режима X клиенты и X сервер Linux работают на одной и той же машине.

Имена дисплеев

С точки зрения пользователя, у каждого X сервера есть отображаемое имя в такой форме:
hostname:displaynumber.screennumber
Эта информация используется приложением для определения того, как ему следует соединиться с X сервером и какой экран он должен использовать по умолчанию (на настольных компьютерах с несколькими мониторами):
  • hostname: Имя хоста указывает имени компьютера-клиента, какой дисплей физически подключен. Если имя хоста не задано, будет использоваться наиболее целесообразный способ общения к серверу на одной и той же машине.
  • displaynumber: Фраза "display", обычно используется для обозначения коллекции мониторов, которые разделяют общие клавиатуру и указатель (мышь, планшет, и т.д.). У большинства рабочих станций, как правило, только одна клавиатура, и, следовательно, только один дисплей. Большие многопользовательские системы, однако, часто имеют несколько дисплеев, так что группа людей сразу могут выполнять графическую работу. Чтобы избежать путаницы, каждому дисплею компьютера присваивается номер (начиная с 0), когда запускается X сервер для этого дисплея. Номер дисплея должен всегда быть приведен в отображаемом имени.
  • screen number: Некоторые дисплеи разделяют одну клавиатуру и указатель между двумя или более мониторами. Так как у каждого монитора есть собственный ряд окон, каждому экрану присваивается номер (начиная с 0), когда запускается X сервер для данного дисплея. Если номер экрана не указан, будет использоваться экран 0.
В POSIX-системах имя дисплея по умолчанию хранится в переменной окружения DISPLAY. Эта переменная автоматически устанавливается эмулятором терминала xterm. Однако, когда вы по сети входите на другой компьютер, может потребоваться установить DISPLAY вручную, чтобы указать на ваш дисплей, смотрите Раздел "Telnet и X".
Более подробную информацию можно найти в man-страницах для X.

Менеджеры окон и рабочего стола

Расположение окон на экране находится под контролем специальных программ, которые называются оконными менеджерами. Хотя многие оконные менеджеры соблюдают предоставленные геометрические характеристики экрана, существуют такие, которые могут их игнорировать (требуя от пользователя точного указания области окна на экране с помощью указателя, например).
Поскольку оконные менеджеры обычные (хотя и сложные) клиентские программы, могут быть построены разнообразные пользовательские интерфейсы. От X Consortium предоставляется оконный менеджер под названием twm, но большинство пользователей предпочитают что-то более изощренное, когда позволяют ресурсы системы. Sawfish и Enlightenment являются популярными примерами, которые позволяют каждому пользователю иметь рабочий стол под соответствующее настроение и стиль.
Менеджер рабочего стола использует один или другой оконный менеджер для организации вашего графического экрана в удобном виде, с панелями, выпадающими меню, информационными сообщениями, часами, менеджерами программ, файловыми менеджерами и т.д. Среди наиболее популярных менеджеров рабочего стола выделяют Gnome и KDE, оба работают почти на любом дистрибутиве Linux и многих других UNIX-системах.
Приложения KDE в Gnome/приложений Gnome в KDE
Вам не обязательно запускать рабочий стол KDE для того, чтобы иметь возможность запускать приложения KDE. Если у вас установлены библиотеки KDE (пакет kdelibs), вы можете запустить эти приложения из меню Gnome или его терминала.
Запуск приложений Gnome в среде KDE немного сложнее, потому что нет единого набора базовых библиотек в Gnome. Однако при запуске или установке таких приложений станут ясны зависимости и, следовательно, дополнительные пакеты, которые вам, возможно, придется установить.

Конфигурация X сервера

Распределение X, которое поставляется с Linux, XFree86, использует конфигурационный файл XF86Config для ее начальной установки. Этот файл настраивает вашу видеокарту и может быть найден в ряде мест, хотя обычно это /etc/X11.
Если вы видите, что файл /etc/X11/XF86Config присутствует в вашей системе, полное описание можно найти в info- или man-страницах о XF86Config.
Из-за проблем с лицензированием XFree86, более новые системы обычно поставляются с вариантом X сервера и инструментов от X.Org. Главный конфигурационный файл здесь xorg.conf, обычно находится также в /etc/X11. Файл состоит из нескольких разделов, которые могут находиться в любом порядке. Разделы содержат информацию о вашем мониторе, видеоадаптере, конфигурации экрана, клавиатуры и т.д. В качестве пользователя, вам не надо слишком беспокоиться о том, что в этом файле, так как все обычно определяется на момент, когда система установлена.
Однако, если вам потребуется изменить настройки графического сервера, вы можете запустить инструменты для настройки или редактировать конфигурационный файл, которые обеспечивает инфраструктуру для использования сервера XFree86. Смотрите man-страницы для получения дополнительной информации; у вашего дистрибутива могут быть собственные инструменты. Поскольку неверная конфигурация может привести к нечитаемой чуши в графическом режиме, вам следует сделать резервную копию конфигурационного файла, чтобы обезопасить себя, прежде, чем приступать к его изменению.

Настройка клавиатуры

Настройка раскладки клавиатуры для текстовых консолей производится с помощью команды loadkeys. Используйте ваши локальные инструменты конфигурации X или изменяйте раздел Keyboard в XF86Config вручную, чтобы настроить раскладку для графического режима. XkbdLayout является тем, что вам требуется установить:
XkbLayout       "us"
Это по умолчанию. Измените на ваши локальные настройки путем замены значения в кавычках на любые имена, перечисленные в подкаталогах папки keymaps. Если вы не можете найти keymaps, попробуйте отобразить их местонахождение в вашей системе с помощью команды
locate keymaps
Можно комбинировать настройки раскладки, как показано в этом примере:
Xkblayout      "us,ru"
Сделайте резервную копию файла /etc/X11/XF86Config перед его редактированием! Чтобы сделать это, вам придется использовать аккаунт суперпользователя.
Выйдите и снова войдите в систему, чтобы перезагрузить настройки X.
Апплет клавиатуры Gnome позволяет в режиме реального времени переключаться между раскладками, для использования этой программы специальных разрешений не требуется. KDE также имеет подобный инструмент для переключения между раскладками клавиатуры.

Шрифты

Используйте инструмент setfont для загрузки шрифтов в текстовом режиме. Большинство систем поставляются со стандартным файлом inputrc, который позволяет сочетание символов, таких как французский "é" (метасимволы). Для этого системный администратор должен добавить строку
export INPUTRC="/etc/inputrc"
к файлу /etc/bashrc.

Зона даты и времени

Настройка информации о времени обычно происходит во время установки. После этого, она постоянно соответствует текущей дате за счет использования клиента NTP (Network Time Protocol). Большинство Linux системы запускают ntpd по умолчанию:
debby:~> ps -ef | grep ntpd
ntp      24678     1  0  2002 ?        00:00:33 ntpd -U ntp
Вы можете запустить ntpdate вручную, чтобы установить время, при условии, что можете подсоединиться к серверу времени. Демон ntpd не должен быть запущен, когда вы устанавливаете время с использованием ntpdate. Используйте сервер времени в качестве аргумента для команды:
root@box:~# ntpdate 10.2.5.200
26 Oct 14:35:42 ntpdate[20364]: adjust time server 10.2.5.200 offset
 -0.008049 sec
Смотрите ваши системные руководства и документацию, которые поставляются с пакетом NTP. Большинство менеджеров рабочего стола включают инструменты для установки системного времени при условии, что у вас есть доступ к учетной записи системного администратора.
Для установки правильного часового пояса, вы можете использовать команды tzconfig или timezone. Обычно информация о часовом поясе задается во время установки вашей операционной системы. Многие системы имеют специфичные для дистрибутива инструменты для настройки; обратитесь к документации по системе.

Язык

Если вы предпочитаете получать сообщения от системы на голландском или французском языке, то можете установить переменные окружения LANG и LANGUAGE, что позволит поддерживать нужный язык и, в конечном итоге, шрифты, связанные с символами на этом языке.
В большинстве графических систем входа, таких как gdm или kdm, у вас есть возможность настроить параметры языка до входа в учетную запись.
Обратите внимание, сейчас на большинстве систем по умолчанию имеется тенденция к использованию en_US.UTF-8. Это не проблема, потому что системы, где такое существует по умолчанию, будут также поставляться со всеми программами, поддерживающими эту кодировку. Таким образом, vi может редактировать все файлы на вашей системе, а cat не будет вести себя странно и т.п.
Проблема начинается тогда, когда вы подключаетесь к более старой системе, не поддерживающей эту кодировку шрифта, или при открытии файла, закодированного с помощью UTF-8, на системе, поддерживающей шрифты, у которых символы кодируются 1 байтом. Может пригодиться утилита recode для конвертирования файлов из одного ряда символов в другой. Читайте man-страницы для обзора возможностей и их использования. Другим решением может быть временная работа в другой кодировке, настроив для этого переменную окружения LANG:
debby:~> acroread /var/tmp/51434s.pdf
Warning: charset "UTF-8" not supported, using "ISO8859-1".
Aborted

debby:~> set | grep UTF
LANG=en_US.UTF-8

debby:~> export LANG=en_US

debby:~> acroread /var/tmp/51434s.pdf
<--new window opens--> 
 
 



Азы linux (для детей) урок 33


Ваше текстовое окружение

Главное

Мы уже упоминали несколько переменных окружения, таких как PATH и HOME. До сих пор мы видели только примеры, в которых они используются в оболочке для определенной цели. Но в Linux существует множество других утилит, для нормальной работы которых необходима информация о вас.
Какая еще информация нужна программам, кроме путей и домашних каталогов?
Многим программам необходима информация о том, какой терминал вы используете; эта информация хранится в переменной TERM. В текстовом режиме, это будет эмуляция терминала linux, в графическом режиме, скорее всего, вы используете xterm. Многим программам требуется информация о предпочитаемом вами редакторе на случай, если они должны будут запускать редактор как дочерний процесс. Оболочка, которую вы используете, хранится в переменной SHELL, тип операционной системы - в OS и так далее. Список всех текущих переменных, определенных для вашей сессии, можно посмотреть, введя команду printenv.
Переменные окружения управляются оболочкой. В отличие от регулярных переменных оболочки, переменные окружения наследуются любой программой, которую вы запускаете, в том числе другой оболочкой. Новым процессам присваиваются копии этих переменных; процессы могут их читать, изменять и, в свою очередь, передавать собственным дочерним процессам.
В именах переменных нет ничего особенного, за исключением того, что по соглашению используют прописные буквы. Вы можете придумать любое имя, какое захотите, хотя существуют стандартные переменные, которые являются достаточно важными, поэтому они одинаковы во всех системах Linux, например PATH и HOME.

Экспорт переменных

Содержимое отдельных переменной обычно отображается с помощью команды echo, как в этих примерах:
debby:~> echo $PATH
/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin:/usr/local/bin

debby:~> echo $MANPATH
/usr/man:/usr/share/man/:/usr/local/man:/usr/X11R6/man
Если вы хотите изменить содержимое переменной таким, чтобы она была полезна для других программ, вам следует экспортировать новое значение из вашего окружения в окружение, которое запускают эти программы. Типичным примером является экспорт переменной PATH. Вы можете объявить ее добавлением очередного пути, например, с тем чтобы иметь возможность играть в симулятор полетов, который находится в /opt/FlightGear/bin:
debby:~> PATH=$PATH:/opt/FlightGear/bin
Такая запись указывает оболочке искать программ не только в текущем пути $PATH, но и в дополнительном каталоге /opt/FlightGear/bin.
Но если новое значение переменной PATH не известно окружению, то работать ничего не будет:
debby:~> runfgfs
bash: runfgfs: command not found
В Bash мы обычно делаем это с помощью одного элегантного шага:
export VARIABLE=value
Тот же самый способ используется для переменной MANPATH, которая сообщает команде man, где искать сжатые man-страницы. Когда новые программы устанавливаются в новые или необычные каталоги, документация для них, вероятно, также будет в нестандартных каталогах. Если вы хотите прочитать справочные страницы этих новых программ, расширьте переменную MANPATH:
debby:~> export MANPATH=$MANPATH:/opt/FlightGear/man

debby:~> echo $MANPATH
/usr/man:/usr/share/man:/usr/local/man:/usr/X11R6/man:/opt/FlightGear/man
Вы можете избежать повторного ввода этой команды в каждом окне, которое вы открываете, добавив эту строку в один из ваших установочных файлов оболочки, см. Раздел "Установочные файлы shell".

Зарезервированные переменные

Следующая таблица дает обзор наиболее распространенных предопределенных переменных:
Таблица. Стандартные переменные окружения
Имя переменной Хранимая информация
DISPLAY используется системой X Window для определения сервера, который отображает на дисплей
DOMAIN доменное имя
EDITOR хранит предпочитаемый вами редактор
HISTSIZE размер файла истории shell (в количестве строк)
HOME адресный путь вашего домашнего каталога
HOSTNAME имя локального хоста
INPUTRC определяет местоположение файлов устройств ввода, например, клавиатуры
LANG предпочитаемый язык
LOGNAME логин
MAIL местонахождение вашей папки для входящей почты
MANPATH пути поиска для man-страниц
OS строка, описывающая операционную систему
OSTYPE дополнительные сведения о версии и т.п.
PAGER используется программами, такими как man, которым требуется знать, что делать в случае, если вывод больше, чем окно терминала
PATH поиск путей для команд
PS1 первоначальное приглашение
PS2 вторичное приглашение
PWD текущий рабочий каталог
SHELL текущая оболочка
TERM тип терминала
UID ID пользователя
USER(NAME) имя пользователя
VISUAL ваш предпочитаемый полноэкранный редактор
XENVIRONMENT местонахождение ваших личных настроек поведения X
XFILESEARCHPATH пути поиска графических библиотек
Многие переменные не только предопределены, но также их значения устанавливаются заранее, при этом используются конфигурационные файлы. Мы обсудим это в следующем разделе.

Установочные файлы shell

При вводе команды ls -al для получения расширенного списка всех файлов, в том числе начинающихся с точки, содержащихся в вашем домашнем каталоге, вы увидите один или несколько файлов, начинающихся с . и заканчивающихся на rc. Для Bash это будет .bashrc. Это копия общесистемного конфигурационного файла /etc/bashrc.
При входе логина в shell, login выполнит идентификацию, установит окружение и запустит вашу оболочку. В случае bash следующим шагом будет чтение общего профиля из /etc, если такой файл существует. Затем bash ищет ~/.bash_profile, ~/.bash_login и ~/.profile в указанном порядке, читает и выполняет команды из первого, который существует и который можно прочитать. Если таких файлов нет, то используется /etc/bashrc.
Когда происходит выход их оболочки, bash считывает и выполняет команды из файла ~/.bash_logout, если он существует.
Эта процедура подробно описана в man-страницах login и bash.

Стандартный набор установочных файлов

Пример /etc/profile

Давайте посмотрим на некоторые из этих конфигурационных файлов. Первый для чтения — это /etc/profile, в котором устанавливаются такие важные переменные, как PATH, USER и HOSTNAME:
debby:~> cat /etc/profile
# /etc/profile

# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc


# Path manipulation
if [ `id -u` = 0 ] && ! echo $PATH | /bin/grep -q "/sbin" ; then
    PATH=/sbin:$PATH
fi

if [ `id -u` = 0 ] && ! echo $PATH | /bin/grep -q "/usr/sbin" ; then
    PATH=/usr/sbin:$PATH
fi

if [ `id -u` = 0 ] && ! echo $PATH | /bin/grep -q "/usr/local/sbin"
    then
    PATH=/usr/local/sbin:$PATH
fi

if ! echo $PATH | /bin/grep -q "/usr/X11R6/bin" ; then
    PATH="$PATH:/usr/X11R6/bin"
fi
Эти строки проверяют устанавливаемые пути: если root открывает оболочку (ID пользователя 0), проверяется пути /sbin, /usr/sbin и /usr/local/sbin. Если нет, то они добавляются. Для всех проверяется путь /usr/X11R6/bin.
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1
Все, что не нужно отправляется в /dev/null, если пользователь не меняет эту настройку.
USER=`id -un`
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"

HOSTNAME=`/bin/hostname`
HISTSIZE=1000
Здесь общим переменным назначаются их стандартные значения.
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
    INPUTRC=/etc/inputrc
fi
Если переменная INPUTRC не установлена, и нет .inputrc в домашнем каталоге пользователя, то будет загружен файл, отвечающий за ввод по умолчанию.
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
Все переменные экспортируются, поэтому они доступны для других программ, запрашивающих информацию о вашем окружении.

Каталог profile.d

for i in /etc/profile.d/*.sh ; do
    if [ -r $i ]; then
    	. $i
    fi
done
unset i
Все читаемые скрипты shell из каталога /etc/profile.d читаются и выполняются. Это то, что делает возможным color-ls, похожесть vi на vim, локальные настройки и т.д. Временная переменная i не устанавливается для предотвращения неадекватного поведения оболочки позже.

Пример .bash_profile

Затем bash ищет .bash_profile в домашнем каталоге пользователя:
debby:~> cat .bash_profile 
#####################################################
#                                                   #
#   .bash_profile file                              #
#                                                   #
#   Executed from the bash shell when you log in.   #
#                                                   #
#####################################################

source ~/.bashrc
source ~/.bash_login
В файле содержаться указания оболочке сначала прочитать ~/.bashrc, потом ~/.bash_login. При работе с окружением оболочки вы будете сталкиваться с встроенной в shell командой source достаточно часто: она используется для применения изменений конфигурации к текущему окружению.

Пример .bash_login

Файл ~/.bash_login определяет по умолчанию защиту файлов, устанавливая значение umask, см. Раздел "Вступление в другую группу". Файл ~/.bashrc используется для определения группы пользовательских псевдонимов, функции и личные переменных окружения. Сначала читается /etc/bashrc, который описывает стандартное приглашение (PS1) и значение по умолчанию umask. После этого вы можете добавить собственные настройки. Если нет ~/.bashrc, то по умолчанию читается /etc/bashrc.

Пример /etc/bashrc

Ваш файл /etc/bashrc может выглядеть следующим образом:
debby:~> cat /etc/bashrc
# /etc/bashrc

# System wide functions and aliases
# Environment stuff goes in /etc/profile

# by default, we want this to get set.
# Even for non-interactive, non-login shells.
if [ `id -gn` = `id -un` -a `id -u` -gt 99 ]; then
	umask 002
else
	umask 022
fi
Эти строки устанавливают значение umask. Затем, в зависимости от типа shell, устанавливается приглашение:
# are we an interactive shell?
if [ "$PS1" ]; then
  if [ -x /usr/bin/tput ]; then
    if [ "x`tput kbs`" != "x" ]; then 
# We can't do this with "dumb" terminal
      stty erase `tput kbs`
    elif [ -x /usr/bin/wc ]; then
      if [ "`tput kbs|wc -c `" -gt 0 ]; then 
# We can't do this with "dumb" terminal
        stty erase `tput kbs`
      fi
    fi
  fi
  case $TERM in
	xterm*)
	if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
		PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
	else
   PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:\
${PWD/$HOME/~}\007"'
	fi
    ;;
	*)
   [ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=\
/etc/sysconfig/bash-prompt-default
	    ;;
    esac
    [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
    
    if [ "x$SHLVL" != "x1" ]; then # We're not a login shell
        for i in /etc/profile.d/*.sh; do
	    if [ -x $i ]; then
	        . $i
	    fi
	done
    fi
fi

Пример .bash_logout

Во время выхода из системы, выполняются команды из ~/.bash_logout, которые могут, например, очищать терминал, так что у вас появляется чистое окно при входе из удаленного сеанса или при выходе из системной консоли:
debby:~> cat .bash_logout
# ~/.bash_logout

clear
Давайте ближе рассмотрим, как эти скрипты работают в следующем разделе. Храните info bash под рукой.

Приглашение Bash

Введение

Приглашение Bash может делать гораздо больше, чем отображение такой простой информации, как имя пользователя, имя машины и некоторое указание на текущий рабочий каталог. Мы можем добавить другую информацию, такую как дата и время, количество подключенных пользователей и т.д.
Однако, прежде чем мы начнем, сохраним наше текущее приглашение в другую переменную окружения:
[jerry@nowhere jerry]$ MYPROMPT=$PS1

[jerry@nowhere jerry]$ echo $MYPROMPT
[\u@\h \W]\$

[jerry@nowhere jerry]$
Когда мы теперь будем изменять строку приглашения, например, с помощью команды PS1="->", то всегда сможем получить нашу оригинальную строку обратно с помощью команды PS1=$MYPROMPT. Конечно, вы получите ее обратно, и когда подключитесь снова; так будет до тех пор, пока вы возитесь с приглашением в командной строке и не вставляете его в файл конфигурации оболочки.

Некоторые примеры

Для того, чтобы понять эти приглашения и используемые управляющие последовательности, обратитесь к info- и man-страницам Bash.
  • export PS1="[\t \j] "
Отображает время и количество выполняемых заданий.
  • export PS1="[\d][\u@\h \w] : "
Отображает дату, имя пользователя, название хоста и текущую рабочую директорию. Заметьте, что \W отображает только конечные имена текущего каталога.
  • export PS1="{\!} "
Отображает номер каждой команды в истории.
  • export PS1="\[\033[1;35m\]\u@\h\[\033[0m\] "
Делает user@host розовым.
  • export PS1="\[\033[1;35m\]\u\[\033[0m\] \[\033[1;34m\]\w\[\033[0m\] "
Раскрашивает имя пользователя в розовый цвет, а рабочий каталог в голубой.
  • export PS1="\[\033[1;44m\]$USER is in \w\[\033[0m\] "
Приглашение для людей, которым трудно видеть разницу между приглашением и тем, что они вводят.
  • export PS1="\[\033[4;34m\]\u@\h \w \[\033[0m\]"
Подчеркнутое приглашение.
  • export PS1="\[\033[7;34m\]\u@\h \w \[\033[0m\] "
Белые символы на синем фоне.
  • export PS1="\[\033[3;35m\]\u@\h \w \[\033[0m\]\a"
Розовая строка иным шрифтом, которая предупреждает вас, когда ваши команды закончили работу.
  • export PS1=...
Переменные экспортируются, так что впоследствии выполняющиеся команды также будут знать об окружении. Для конфигурации строки приглашения лучше изменить конфигурационный файл оболочки, ~/.bashrc.
Если вам захочется, то приглашения могут выполнять shell-скрипты и вести себя по-разному в зависимости от условий. У вас может даже строка приглашения играть мелодию при выполнении команды, хотя это вам быстро надоест. Более подробную информацию можно найти в Bash-Prompt HOWTO.

Сценарии оболочки

Что такое сценарии?

Скрипт оболочки, как мы видели в примерах конфигурации shell, представляет собой текстовый файл, содержащий команды оболочки. Когда такой файл используется в качестве первого аргумента без опции при вызове Bash, и без опций -c или -s, Bash считывает и выполняет команды из файла, затем выходит. Этот режим работы создает неинтерактивную оболочку. Когда Bash запускает shell-скрипт, он устанавливает специальный параметр 0 к имени файла, а не имя к оболочке, и позиционные параметры (все, что следует за именем скрипта) устанавливаются в остальные аргументы, если таковые задаются. Если дополнительные аргументы не задаются, позиционные параметры не включаются.
Скрипт оболочки можно сделать исполняемым с помощью команды chmod за счет включения бита исполнения. Когда Bash находит такой файл при поиске в PATH по отношению к команде, он порождает подоболочку для его выполнения. Другими словами, выполнение
filename ARGUMENTS
эквивалентно выполнению
bash filename ARGUMENTS
если "filename" представляет собой исполняемый скрипт. Эта подоболочка инициализирует себя, так что эффект такой, как если бы новая оболочка интерпретировала сценарий, с тем исключением, что места команд, запомненные родителем (см. hash в info-страницах), сохраняются ребенком.
Большинство версий UNIX наделяют эту часть команд операционной системы исполняемым механизмом. Если первая строка сценария начинается с двух символов "#!", оставшаяся часть строки указывает интерпретатор для программы. Таким образом, вы можете указать bash, awk, perl или другой интерпретатор или оболочку и писать остальную часть файла сценария на этом языке.
Аргументы для интерпретатора состоят из одного дополнительного аргумента, который следует за именем интерпретатора в первой строке файла сценария, после следует имя файла сценария, а затем остальные аргументы. Bash будет выполнять это действие на операционных системах, которые не обрабатывают это самостоятельно.
Сценарии Bash часто начинаются с
#! /bin/bash
(предполагая, что Bash была установлена в /bin), так как это гарантирует использование Bash для интерпретации сценариев, даже если скрипт выполняется под другой оболочкой.

Некоторые простые примеры

Очень простой скрипт, состоящий только из одной команды, которая приветствует пользователя, выполняется так:
[jerry@nowhere ~] cat hello.sh
#!/bin/bash
echo "Hello $USER"
Сценарий фактически состоит только из одной команды echo, которая использует значение ($) переменной окружения USER, чтобы напечатать строку, настроенную на пользователя, который вызывает скрипт.
Другой однострочный пример, используемый для отображения подключенных пользователей:
#!/bin/bash
who | cut -d " " -f 1 | sort -u
Вот скрипт, состоящий из несколько строк, которые я использую, чтобы создать резервные копии всех файлов в каталоге. Сначала скрипт создает список всех файлов в текущем каталоге и помещает его в переменную LIST. Затем он устанавливает имя копии для каждого файла, и затем копирует файл. Для каждого файла выводится сообщение:
tille:~> cat bin/makebackupfiles.sh
#!/bin/bash
# make copies of all files in a directory
LIST=`ls`
for i in $LIST; do
	ORIG=$i
	DEST=$i.old
	cp $ORIG $DEST
	echo "copied $i"
done
Просто ввод строки подобной mv * *.old не будет работать, как вы заметите при попытке выполнить это на ряд тестовых файлов. Команда echo была добавлена для отображения какой-либо деятельности. echo обычно полезна, когда сценарий не работает: постепенно просматривая код, вы найдете ошибку в кратчайшие сроки.
Каталог /etc/rc.d/init.d содержит множество примеров. Давайте посмотрим на этот сценарий, который управляет фиктивным сервером IcanSeeYou:
#!/bin/sh
# description: ICanSeeYou allows you to see networked people

# process name: ICanSeeYou
# pidfile: /var/run/ICanSeeYou/ICanSeeYou.pid
# config: /etc/ICanSeeYou.cfg

# Source function library.
. /etc/rc.d/init.d/functions

# See how (with which arguments) we were called.
case "$1" in
	start)
		echo -n "Starting ICanSeeYou: "
		daemon ICanSeeYou
		echo
		touch /var/lock/subsys/ICanSeeYou
		;;
	stop)
		echo -n "Shutting down ICanSeeYou: "
		killproc ICanSeeYou
		echo
		rm -f /var/lock/subsys/ICanSeeYou
		rm -f /var/run/ICanSeeYou/ICanSeeYou.pid
		;;
	status)
		status ICanSeeYou
		;;
	restart)
		$0 stop
		$0 start
		;;
	*)
		echo "Usage: $0 {start|stop|restart|status}"
		exit 1
esac

exit 0
Во-первых, размещается . (точка), которая управляет множеством функций оболочки и используется практически во всех скриптах в /etc/rc.d/init.d. Затем размещается команда case, которая определяет 4 различных способа выполнения сценария. Например, это может быть ICanSeeYou start. Решением в этом случае будет чтение (первого) аргумента сценария с выражением $1.
Когда дается не совместимый вход, то срабатывает код, отмеченный звездочкой, в котором скрипт выдает сообщение об ошибке. Список case заканчивается инструкцией esac. В случае start программа сервера запускается как демон, и назначаются ID процесса и шлюз. В случае stop процесс сервера сходит на нет и останавливается, шлюз и PID удаляются. Опции, такие как опции daemon и функции как killproc определены в файле /etc/rc.d/init.d/functions. Эта установка специфична для дистрибутива, используемого в этом примере. Запускающие скрипты в вашей системе могут использовать другие функции, определенные в других файлах, или вообще никакие.
В случае успеха сценарий возвращает код выхода нуля к его родителю.
Этот сценарий является прекрасным примером использования функций, которые позволяют легче читать сценарий и делать работу быстрее. Заметьте, что здесь используется sh вместо bash, чтобы сделать их полезными для более широкого круга систем. В системе Linux, вызывая bash как sh, результаты в оболочке работают в POSIX-совместимом режиме.
Man-страницы bash содержат больше информации об объединении команд, for- и while-петлях, регулярных выражений, а также примеры. Понятный Bash для системных администраторов и опытных пользователей, с упражнениями, от того же автора, как "Введение в руководство Linux", находится на http://tille.garrels.be/training/bash/. Подробное описание особенностей Bash и приложений есть в справочном руководстве "Продвинутые сценарии Bash".