Говорите на BASH/Введение

Материал из Викиверситета
Эта статья — часть материалов: кафедры Программирование

Рекомендуется при освоении курса запускать команды в терминале вашего компьютера (Не запускайте их с правами суперпользователя).

Как запустить консоль[править]

Xterm в Ubuntu Karmic Koala

Операционные системы GNU/Linux и BSD поддерживают несколько виртуальных консолей. Графический сервер обычно работает на седьмой, то есть чтобы вернуться оттуда, куда мы сейчас направимся нужно будет нажать одновременно Ctrl+Alt+F7.

Теперь нажмите Ctrl+Alt+F1.

Вы только что переключались в виртуальную консоль. Всего пользователю доступно 7 таких консолей. В каждой консоли можно войти в систему под именем разных пользователей.

Переключаться последовательно между консолями можно с помощью сочетания Alt+"Стрелка влево" и Alt+"Стрелка вправо".

В оконной среде удобно использовать так называемые эмуляторы терминала. Их можно запустить через меню. Если Вы знаете, какие эмуляторы установлены у Вас, можно вызвать комбинацией Alt+F2 окно "Выполнить программу" и набрать в строке название эмулятора. В среде GNOME это xterm или gnome-terminal, в среде KDE - konsole

Вместо предисловия[править]

В общем виде команда состоит из имени программы, параметров и аргументов.

rm -ri /home/user/anime
rm -ri "/home/user/anime"
имя программы
для удаления
параметры аргумент
Назначение:Удалить каталог, требуя подтверждение перед удалением
каждого файла

Трюки[править]

Если Вы читаете эти строки, значит Вы хоть раз задавали себе вопрос:"На какие удобства можно рассчитываь в терминале". Ответ:"Автозаполнение." Это опция чрезвычайно удобна при работе с длинными командами и файлами с длинными названиями. Чтобы увидеть как она работает, наберите в командной строке cle и нажмите клавишу TAB. Компьютер закончит за вас: "clear". Аналогично дополняются аргументы: ls / ,два нажатия TAB, и компьютер выведет содержимое корневого каталога.

Клавиша "Стрелка вверх" выводит на экран предыдущую команду. Это позволяет легко повторить выполненную программу. Более того, Вы можете её отредактировать.

Файлы и каталоги[править]

cd /var/log
перейти куда (каталог)
cd (без аргументов) - перейти в домашний каталог
cd .. перейти на уровень вверх (в родительский каталог текущего каталога)
ls -l /home
список файлов подробно

Перенаправления[править]

Перенаправление потоков - мощный инструмент, который позволяет организовывать взаимодействие разных программ. Это - важнейший элемент философии UNIX. Приведённый ниже пример состоит из двух частей - команда до перенаправления (">>") и после. Попробуйте выполнить команду cat /dev/urandom саму по себе и вы увидите как по экрану "поползут крякозаблики" (нажмите Ctrl+C для остановки). Командой ">>" эти "крякозяблики" отправятся на вход звуковой карты. ( Услышите ли Вы звук зависит от конфигурации системы.)

cat /dev/urandom >> /dev/dsp
cat /dev/urandom ">>" /dev/dsp
вывести содержимое
файла в стандартный
вывод
генератор
псевдослучайных
символов
перенаправить вывод
в файл
файл звуковой
карты
Назначение:Быстро проверить работоспособность звуковой карты

Здесь используется "конвейер" - символ ("|"). Он перенаправляет стандартный вывод одной программы на стандартный ввод другой программы.

man useradd | grep -i -- -e
man useradd "конвейер" grep -i -- -e
вызвать справку для программы useradd перенаправить вывод
на ввод фильтра
фильтр не учитывать
регистр
конец
списка опций
что ищем
Назначение:Быстро проверить назначение опции
for FILE in *.md5;do md5sum -c $FILE;done
for FILE "in " *.md5 do md5sum -c $FILE; done
Управляющий
элемент
Помещаем имя
в переменную
Управляющий
элемент
маска
файла
Управляющий
элемент
программа для работы
с md5-хешами
опция
проверки
подставляем имя
файла
Управляющий
элемент
Назначение:Проверить md5-хеши всех пакетов в каталоге (для который есть файл с хешем)

Золотое правило[править]

Команда или программа?

В терминологии командных оболочек UNIX, командами одинаково называются и встроенные команды, и сторонние программы. Это объясняется тем, что в UNIX- подобных ОС программы вызываются по имени. Хотя подобное смешение может вызвать поначалу некоторую путаницу, на самом деле представляет собой большое удобство.

Существует не менее двух способов сделать что-то. Следующие команды выполняют одну и ту же операцию распаковывают все targz- архивы(тарболлы) в текущем каталоге.

for FILE in *.tar.gz;do tar -xzf $FILE;done
ls -f `pwd` | grep gz | xargs tar -xzf '{}'
for FILE in *.tar.gz;do unzip $FILE | tar -xf -;done
find . -maxdepth 1 -type f | xargs tar -xzf '{}'
find . -maxdepth 1 -type f -name '*.tar.gz' -exec tar -xzf '{}' \;

Фильтр[править]

Одна из полезнейших программ. Вместе с механизмом перенаправления позволяет очень легко осуществлять нетривиальную обработку информации. Сравните два примера.

for FILE in *.md5;do md5sum -c $FILE;done
for FILE in *.md5;do md5sum -c $FILE;done | grep -v OK

grep, как мы уже знаем, - это фильтр. Опция -v инвертирует условие поиска (шаблон), "OK" - наш шаблон. Что выведет на экран вторая команда?

Задания для отработки материала[править]

1 Команда mount, вызванная без аргументов, выводит на экран список отмонтированных устройств. Напишите команду, выводящую только устройства, отмонтированные в каталог /media.

2 Напишите команду, выводящую список всех отмонтированных устройств в файл mounted.list


Проверочный тест[править]

1 Назначение команды

rm ls pwd man grepcat
Вывести содержимое файла на экран
удалить файл
вывести название текущего каталога
Вызов справки
Вывести содержимое текущего каталога
Вывести строки, отвечающие условию

2 укажите команды-синонимы

pwd | grep -i cats
ls | grep -i cats
find `pwd` -maxdepth 1 | grep -i cats
find . -iname cats


Примечания[править]