Введение в Linux (110
..pdfрые UNIX системы, например Minix, так и содержат там домашние директории, только они монтируются с сервера по сети.
/usr/bin – некритичные для системы исполняемые файлы, /usr/include – заголовочные файлы,
/usr/lib – некритичные для системы библиотеки,
/usr/libexec – некритичные для системы библиотеки, которые применяются как исполняемые файлы (пример: sendmail),
/usr/local – локально установленное ПО, /var – различная изменяемая информация ОС, /var/cache – кэш различных приложений,
/var/lock – блокировки процессов-синглтонов (сервисов), /var/log – журналы (логи) системы,
/var/log/messages – основной лог системы, /var/mail – почтовые аккаунты,
/var/run – различные файлы-пиды, открытые сокеты, /var/spool – задания планировщика,
/var/tmp – временная директория (не очищается при перезагрузке),
. – текущая директория,
.. – родительская директория, ~ – домашняя директория (для обычных пользователей это
/home/<username>) – содержит настройки, историю, кэш, прочую информацию приложений для текущего пользователя,
~/.mc или ~/.config/mc – конфиг Midnight Commander,
~/.ssh – конфиги ssh,
~/.bashrc – конфиг bash для конкретного пользователя, ~/.bash_history – история команд bash для пользователя,
~/Desktop – для GUI-оболочек – содержимое попадает на рабочий стол, ~/Downloads – для GUI – директория загрузок по умолчанию.
11
6. УСТАНОВКА ПАКЕТОВ (rpm, deb, apt, yum, yast2, emerge)
6.1. Red Hat Packet Manager (rpm)
Применяется в ОС: Red Hat(Fedora, CentOS), Novell Netware, IBM
AIX.
Название файла пакета
<name>-<version>-<release>.<arc>.rpm
Например, oracle-xe-11.2.0-1.0.x86_64.rpm
rpm -i <package file> – установить пакет (указывается файл), rpm -e <package name> – удалить пакет (указывается пакет), rpm -q <package name> – проверить, установлен ли пакет.
RPM – низкоуровневый менеджер, для него есть много надстроек
(front-ends)
yum used in Fedora, CentOS 5, Red Hat Enterprise Linux 5 and above, Scientific Linux, Yellow Dog Linux and Oracle Linux
up2date used in Red Hat Enterprise Linux, CentOS (CentOS 3 and CentOS 4), and Oracle Linux
Zypper used in MeeGo,[8] openSUSE and SUSE Linux Enterprise urpmi used in Mandriva Linux, Rosa Linux and Mageia
apt-rpm, a port of Debian's Advanced Packaging Tool (APT) used in Ark Linux,[9] PCLinuxOS and ALT Linux
Smart Package Manager, used in Unity Linux, available for many distributions including Fedora.
rpmquery, a command-line utility available in (for example) Red Hat Enterprise Linux
yast2 – GUI для OpenSUSE
Пример использования yum:
yum install <package name> – установить пакет,
12
yum erase <package name> – удалить пакет,
yum search <package name> – поиск пакета по базе,
yum самостоятельно синхронизирует свою БД при любом действии.
6.2. Debian Package Manager (dpkg)
Применяется в ОС семейства Debian (Ubuntu,...)
dpkg
dpkg -i debFileName – установить пакет, dpkg -r packagename – удалить пакет,
dpkg – также низкоуровневый, имеется надстройка apt (Advanced Package Tool),
apt-get – утилита для манипуляций, apt-cache – утилита для поиска,
aptitude – понимает все ключи обеих команд, apt-get install <package name> – установить пакет, apt-get remove <package name> – удалить пакет, apt-get update – обновить пакет,
aptitude search – поиск пакета.
Tarball
tar.gz, tar.bz2, … – ужатые архивы исходников. emerge – gentoo front-end for tarballs,
emerge <package name> – установить, emerge -C <package name> – удалить пакет, emerge -av <package name> – поиск,
emerge --sync – синхронизация локальной БД софта, eix <package name> – утилита для быстрого поиска.
13
7. АРХИВАТОРЫ И КОМПРЕССОРЫ
Принципиальный момент – в Linux все разделено и понятия не смешиваются. Архиватор нужен для слияния нескольких файлов, директорий, дерева файлов в один файл. Компрессор осуществляет сжатие этого файла.
Основной архиватор в Linux – tar. tar -c – создать архив,
tar -f – параметром передается файл, tar -v – расширенный вывод,
tar -x – извлечь из архива,
tar -p – при извлечении сохранить права на файлы, tar -C – указать путь распаковки.
tar -cf arc.tar 1.txt 2.txt 3.txt tar -cf arc.tzr *.txt
tar -cf arc.tar /home/alexandro/results tar -xf arc.tar -C /home/alexandro/test
ar – старый архиватор. Сейчас применяется для упаковки объектных файлов(*.o) в статические библиотеки (*.a)
Компрессоров в Linux имеется много:
gzip – самый распространенный, работает быстро, сжимает простым алгоритмом.
Пример работы: gzip file – сжать файл,
gzip -d file.gz – разжать файл, gunzip file.gz – тоже разжать файл,
gzip -1 – степень сжатия 1 – минимальная, gzip -9 – степень сжатия 9 – максимальная,
14
bzip2, bunzip2 – сжимает лучше и дольше (тоже распространен), xz, unxz – сжимает хорошо, особенно xz -9,
compress – очень старый компрессор, встречается в различных старых скриптах.
lzip, lzop, zip – также применяются.
Tar умеет применять сжатие. Опция -z – gzip, опция -j – bzip2 tar -czf arc.tar.gz /home/alexandro/projects
tar -xzf arc.tar.gz -C /home/alexandro
8.BASH
8.1.Основы синтаксиса
Команда – некая последовательность символов, разделенных пробелами, заканчивается переносом строки, и которая делает некое действие. Каждая команда имеет код возврата. 0 считается успешным выполнением, не 0 – неуспешным. Во всех циклах 0 – это true.
1) pipeline
com1 | com2 | com3
2) list
com1 & com2 – параллельный запуск
com1; com2 – последовательный запуск (точка с запятой равносильна \n)
com1 && com2 – и (вторая только если первая завершится с 0)
com1 || com2 – или (вторая только если первая завершится не с 0)
3)for name [in word]; do list; done
4)for ((expr1; expr2; expr3)); do list; done 5)case word in [ [(] pattern [|pattern...)]; list;;
] esac
6)if list; then list [elif list; then list;]...[else list;] fi
7)while list; do list; done
8)until list; do list; done
15
8.2. Переменные
Переменная в скрипты задается через присваивание. Пока переменная не определена, её значение пусто. Все переменные – строковые, для вычисления арифметики надо использовать специальные утилиты.
VAR1=1 – присвоить единицу переменной VAR1, VAR2= – опустошить переменную VAR2.
Переменные окружения – переменные, которые заданы глобально в сессии (системе).
BASH – полный путь к шеллу (башу),
GROUPS – список групп текущего пользователя (аналог команды groups), HOSTNAME – сетевое имя машины,
PWD – текущая директория. аналог команды pwd, RANDOM – случайное число (0...32767),
HOME – домашняя директория пользователя, LANG – параметры языка и локали,
PATH – путь к исполняемым файлам,
PS1 – подсказка в строке набора команд.
8.3. Параметры скрипта $1-$9 – параметры, переданные в командной строке,
shift – сдвиг параметров (по умолчанию на 1, можно указать на сколько), $@ – все параметры через ПРОБЕЛ ($1 $2),
$* – все параметры через первый символ IFS (Input Field Separator) ($1c$2), $# – количество параметров, $? – код возврата последней команды, $- – флаги шелла,
$$ – PID текущего процесса,
$! – PID последнего запущенного фонового процесса, $0 – имя скрипта (как запускали)
16
Массивы – все ассоциативные, присваиваются просто к индексу, если такого нет, то будет пустое значение.
a[1]=5
Arrays are assigned to using compound assignments of the form name=(value1 ... valuen), where each value is of the form [subscript]=string. Only string is required.
Any element of an array may be referenced using ${name[subscript]}.
8.4. EXPANSION – процесс разворачивания команды
Brace Expansion – сначала разворачиваются фигурные скобки, для раскрытия множеств.
a{d,c,b}e expands into ‘ade ace abe’. a{1..3}e expands into ‘a1e a2e a3e’.
Tilde Expansion – замена тильды на путь домашней директории. ~ → хомяк
Parameter Expansion – замена параметров. ${parameter}
AAA='112233'
BBB=
${parameter:-word} – заменяет на word если null. ${AAA:-22} → 112233
${BBB:-22} → 22
${parameter:-word} – заменяет на word если null и присваивает переменной. ${AAA:-22} → 112233
${BBB:-22} → 22 ${BBB} → 22
и т. д.
Command Substitution – выполняются команды и подставляется их вывод.
17
$(command) ‘command‘
Arithmetic Expansion – подсчёт арифметики. $((expression))
Pathname Expansion – замена путей с паттернами
*Matches any string, including the null string.
?Matches any single character.
[...] Matches any one of the enclosed characters. ?(pattern-list)
Matches zero or one occurrence of the given patterns *(pattern-list)
Matches zero or more occurrences of the given patterns +(pattern-list)
Matches one or more occurrences of the given patterns @(pattern-list)
Matches one of the given patterns !(pattern-list)
Matches anything except one of the given patterns Quote Removal – удаление кавычек.
After the preceding expansions, all unquoted occurrences of the characters \, ', and " that did not result from one of the above expansions are removed. REDIRECTION
/dev/fd/fd
If fd is a valid integer, file descriptor fd is duplicated. /dev/stdin
File descriptor 0 is duplicated. /dev/stdout
File descriptor 1 is duplicated.
18
/dev/stderr
File descriptor 2 is duplicated. /dev/tcp/host/port
If host is a valid hostname or Internet address, and port is an integer port number or service name, bash attempts to open a TCP connection to the corresponding socket.
/dev/udp/host/port
If host is a valid hostname or Internet address, and port is an integer port number or service name, bash attempts to open a UDP connection to the corresponding socket.
8.5.Навыки работы shell
1.Виртуальные консоли, X.
1)Alt-F1...F6 – переключение консолей;
2)Alt-F7(иногда F8) – переключение в X;
3)в X для переключения в консоли – Ctrl-Alt-F1..F6.
2.Авто-дополнение – TAB, с различными сочетаниями может подсказывать известные хосты, пользователей и др.
3.История.
1)history – выводит историю команд;
2)!127 – запустить команду 127 из истории;
3)вверх стрелка – предыдущая команда;
4)Ctrl-R – поиск по истории;
5)С-p/C-n – предыдущая/следующая команда;
6)иногда при частичном наборе команды можно нажать PgUp, вызовется поиск команд с таким началом.
4.Перемещение.
1)C-a/C-e – начало/конец строки;
2)C-f/ C-b – следующий/предыдущий символ;
19
3)M-f/M-b – следующее/предыдущее слово.
5.Редактирование.
1)M-u/M-l/M-c – upcase, lowercase, capitalize;
2)C-k – kill to end;
3)M-d/M-Backspace – kill word forward\backward.
8.6.Правила и приемы при написании скриптов
Правила:
1.Параметризация (передача параметров, взятие текущего места, пользователя, использование переменных окружения, использование файлов настроек, как вариант – включаемого скрипта).
2.Структурирование, чтобы скрипты было легко читать.
3.Использование внятных названий.
4.Указание интерпретатора в начале скрипта.
5.Внятный вывод.
6.При перспективной возможности работы с большими массивами данных – хотя бы минимальная оптимизация.
7.Использование регулярных выражений для поиска имен файлов, текста в файлах.
8.Использование по возможности конвейерной обработки.
9.При теоретической возможности использования скриптов на других шеллах помнить о разнице между ними и придерживаться стандарта.
Приемы:
1.Использование отладочного режима (#!/bin/bash -x).
2.Писать логи (команда tee).
3.Убирать ненужную информацию, использовать silent режим команд либо перенаправлять в /dev/null.
4.Комментировать.
20