Генерация имен файлов (расширение имен файлов):введение • Символы генерации имен файлов интерпретируются shell`ом • Shell будет генерировать имена файлов, удовлетворяющие заданному шаблону • Генерация имен файлов осуществляется перед выполнением команды • Команда будет оперировать со сгенерированными именами файлов Символы генерации имен файлов ? Соответствует любому одному символу за исключением лидирующей точки [] - Определяет группу символов Определяет группу символов, принадлежащих заданному диапазону Отвергает заданную группу символов ! * Соответствует произвольному числу символов, в том числе и нулевому, исключая лидирующую точку Генерация имен файлов и файлы с точкой • Символы генерации имен файлов никогда не породят имя файла, начинающееся с точки • В файлах, чьи имена начинаются с точки, она должна быть всегда указана явно Генерация имен файлов:символ ? ? Соответствует любому одному символу за исключением лидирующей точки Примеры # ls -a …. .zz abc abcd abcdef abcz bbabb cyz zzayy # echo ??? Результат: abc cyz # echo abc? Результат: abcd abcz # echo ??a?? Результат: bbabb zzayy # echo .?? Результат: .zz # echo ? Результат: ? Генерация имен файлов:символы [ ] [] Определяет группу символов, из которой может подойти лишь один Примеры # ls -a …. .zz 1G 2G 7G 15G Ant Cat Dog abc abcdef ba cyz # echo [abc]?? Результат: abc cyz # echo [1-9][A-Z] Результат: 1G 2G 7G # echo [!A-Z]?? Результат: 15G abc cyz Генерация имен файлов:символ * * Соответствует произвольному числу символов, в том числе и нулевому, исключая лидирующую точку Примеры # ls -a …. .profile ab.dat abcd.dat abcde abcde.dat # echo * Результат: ab.dat abcd.dat abcde abcde.dat # echo .* Результат: .profile # echo *.dat Результат: abcd.dat abcde.dat # echo *e Результат: abcde Использование кавычек:введение • Ряд символов имеет «специальный» смысл для shell`а: - пробел - возврат каретки -$ -# -* - <> • Экранирование («Закавычивание») позволяет особый смысл специальных символов. отменить Символы экранирования \ Обратный слэш Одиночные кавычки Двойные кавычки ‘ “ Экранирование: символ \ \ Отменяет специальный смысл непосредственно следующего за ним символа Пример: # echo the \$text the $text # color=red\ white\ and\ blue # echo the value of \$color is $color the value of $color is red white and blue # echo one two \<Enter> >three four one two three four Экранирование: символ ‘ ‘ Отменяет специальный смысл всех символов, заключенных между одиночными кавычками Пример: # color=‘red white and blue’ # echo ‘the value of \$color is $color’ the value of \$color is $color # echo ‘the value of $color is’ $color the value of $color is red white and blue Экранирование: символ “ “ Отменяет специальный смысл всех символов, заключенных между двойными кавычками, за исключением \, $, {имя переменной}, $(команда) и “ Пример: # color=“red white and blue” # echo “the value of \$color is $color” the value of $color is red white and blue # cur_dir=“$LOGNAME - your current directory is $(pwd)” # echo $cur_dir user3 - your current directory is /home/user3/tree # echo “they’re all here, \\, ‘, \” “ they’re all here, \, ‘, “ Перенаправление ввода и вывода Перенаправление ввода и вывода: введение • Перенаправление вывода позволяет направить вывод команды в некоторый файл, отличный от терминала пользователя. • Перенаправление ввода дает возможность команде получить исходную информацию из файла, а не с клавиатуры. stdin, stdout, stderr Файл Устройство Дескриптор файла stdin Клавиатура 0 stdout Экран 1 stderr Экран 2 Перенаправление ввода: < Любая команда, читающая ввод со стандартного ввода, может за счет перенаправления принимать его из другого файла Пример: $ cat remind Your mother’s birthday is November 29 $ mail user < remind ! Перенаправление ввода не изменяет содержимое файла ввода Перенаправление вывода: > и >> Любая команда, отправляющая результат на stdout, может перенаправить его в другой файл Пример: Создание/Перезапись Создание/Добавление $ date > date.out $ ls >> ls.out $ date > who.log $ who >> who.log $ cat > cat.out $ ls >> who.log ввод текста <Ctrl>+<d> ! Один и тот же файл не может быть одновременно открыт для перенаправления и ввода и вывода. Файлы ввода и вывода должны быть разными. В противном случае можно потерять исходное содержимое файла. cat f1 f2 > f1 - здесь будет потеряно содержимое файла f1. Перенаправление протокола: 2> и 2>> Любая команда, выводящая сообщения об ошибках в стандартный протокол, может перенаправить его в другой файл Пример: $ cp 2> cp.err $ cp 2>> cp.err $ more cp.err …… …… Создание/Перезапись Создание/Добавление Псевдоустройство /dev/null Подавление вывода на stdout # cat $filename >/dev/null Подавление вывода на stderr # rm $badname 2>/dev/null Подавление вывода, как на stdout, так и на stderr # cat $filename 2>/dev/null >/dev/null Если "$filename" не будет найден, не будет сообщения об ошибке. Если "$filename" существует, то не будет вывода его содержимое. Такая методика бывает полезной, когда необходимо лишь проверить код завершения команды # cat $filename &>/dev/null тот же результат Что такое фильтр? •Читает стандартный ввод и генерирует стандартный вывод. •Осуществляет фильтрацию входного потока или файла. •Посылает результаты на экран, не изменяя входной поток или файл. •Обрабатывает вывод других команд, когда они используются совместно с перенаправлением вывода Пример: cat, grep,sort,wc wc - подсчет количества строк Синтаксис: wc [-lwc ] [файл...] Примеры $ wc file 115 567 3345 file $ wc -l file 115 file $ ls > ls.out $ wc -w ls.out 72 ls.out Подсчитывает число строк(-l), слов (-w) и символов (c) в файле рассматривается как аргумент команды подсчет количества файлов в каталоге wc - подсчет количества строк Примеры $ wc <Return> ab cde dvbnvnsbvbnd dhjhjdhfkdhjf <Ctrl><d> 3 4 30 $ wc < file 105 715 2456 $ wc -w file 715 file подсчитывается количество строк, слов и символов, вводимых со стандартного ввода стандартный файл заменяется на файл file, имя файла не выводится sort - алфавитная и числовая сортировка Синтаксис: sort [-ndutX ] [-k номер_поля] [файл...] Сортирует строки Примеры $ sort file рассматривается как аргумент команды $ tail -1 /etc/passwd user3:xyzbkd:303:30:student user3:/home/user3:/usr/bin/sh 1 2 3 4 5 6 7 $ sort -nt: -k 3 < /etc/passwd $ who > who1 $ sort who1 упорядочивание пользователей в системе по алфавиту $ sort -u who1 упорядочивание с исключением повторяющихся строк sort - опции сортировки none -d -n -u -tX -kn -r лексикографическая (по кодам ASCII) по принципу словаря (игнорируя любые символы, не являющиеся буквами, цифрами или пробелами) числовая уникальная (исключаются повторяющиеся строки) указание разделителя (X - символ-разделитель полей) выбор базового поля n для сортировки( по умолчанию n=1) сортировка в обратном порядке grep - поиск по модели Синтаксис: grep [-cinv] [-e] модель [-e модель][файл...] grep [-cinv] -f файл_с_моделями [файл...] Примеры $ grep user /etc/passwd $ grep -v user /etc/passwd $ grep -in -e like -e love file $ who > who1 $ grep -f who1 /etc/passwd grep - опции -c -i -n -v подсчитывать только число строк, содержащих заданную модель игнорировать регистр букв в модели сопровождать выводимые строки номерами выводить строки, не содержащие заданную модель поиска grep - построение модели В качестве модели можно задать некоторый текст. Такая модель называется регулярным выражением. Для их задания можно использовать некоторые специальные символы: ^ поиск совпадения в начале строки $ поиск совпадения с конца строки . соответствует любому одному символу * предшествующая модель повторяется 0 или более раз [] задается совокупность символов [-] задается диапазон символов [^] инвертирует процесс отбора ! Во избежание проблем при интерпретации shell’ом указанных специальных символов, лучше заключить регулярное выражение в кавычки. Перенаправление ввода и вывода: обзор cmd < файл cmd > файл cmd > > файл Перенаправляет ввод команды cmd из файла cmd 2> файл_ошибок Перенаправляет протокод команды cmd в файл_ошибок Фильтр Команда, которая читает со стандартного ввода и генерирует стандартный вывод. wc sort Подсчет количества слов, строк и символов. grep Осуществляет поиск строк, содержащих модель. Перенаправляет вывод команды cmd в файла Перенаправляет вывод команды cmd и добавляет к файлу Cортировка строк в алфавитном или числовом порядке. Каналы Зачем используются конвейеры? $ who > temp_file $ wc -l < temp_file $ rm temp_file who ----> wc -l Конвейеры позволяют напрямую использовать вывод одной команды в качестве ввода другой, без создания временного файла. Символ | (символ канала) прием stdin cmd A cmd B прием stdin cmd C генерирует генерирует генерирует генерирует генерирует генерирует stderr stdout stderr stdout stderr stdout Пример: $ ps -ef | more $ ls | more $ ls | sort -r |more Примечание: cmd B должна быть фильтром Требования к командам в конвейере •Любая команда, расположенная слева от символа | должна направлять свой вывод в стандартный вывод (stdout) •Любая команда, расположенная справа от символа | должна читать свой ввод из стандартного ввода (stdin) •Любая команда, расположенная в середине конвейера должна читать свой ввод из стандартного ввода (stdin) и направлять свой вывод в стандартный вывод (stdout), т.е. быть фильтром Перенаправление вывода или конвейеры? Перенаправление ввода/вывода Синтаксис: cmd_out > file or cmd_in < file Пример: who > who.out sort < sort.out Конвейеры cmd_out | cmd_in who | sort Перенаправление в конвейере 3 потока для каждой команды: stdin, stdout, stderr Можно перенаправить потоки, которые не предназначены для конвейера stdout stdin Доступны для перенаправления Доступны для перенаправления cmd A stdin stderr cmd B stdout stderr stdout stdin stdout stdin cmd A stdin stderr cmd B stderr cmd C stdout stderr Пример: $ grep user /etc/passwd | sort > sort.out Требования к командам при перенаправлении в конвейере •Любая команда, расположенная слева от символа | может перенаправить стандартный ввод и протокол, поскольку ее вывод передается следующей команде конвейера. •Любая команда, расположенная справа от символа | может перенаправить стандартный вывод и протокол, поскольку она читает свой ввод с предшествующей команды конвейера. •Любая команда, расположенная между двумя символами | может перенаправить стандартный протокол, т.к. она читает ввод с предшествующей команды и направляет свой вывод следующей команде конвейера. Фильтры cut выделяет указанные столбцы или поля и выводит на stdout tr преобразует символы tee передает вывод в файл и на stdout pr форматирует вывод и направляет на stdout Команда cut (1) Синтаксис: cut -cсписок [файл...] Выделяет колонки или поля из файлов или стандартного ввода cut -fсписок [-dсимвол] [-s] [файл...] Опции: -с выделение колонок -f выделение полей -dсимвол указание символа - разделителя полей -s указание на пропуск любой строки, в которой нет разделителя Команда cut (2) Список - последовательность чисел, которая указывает на подлежащие выделению поля или колонки. Форматы для задания списка полей или колонок: А-В Поля или колонки от А до В включительно АОт поля или колонки А до конца строки -В С начала строки до поля или колонки В А, В Поля или колонки А и В Допустимо использовать любую комбинацию форматов. Команда cut (3) Примеры: $ date | cut -c1-3 Fri $ tail -1 /etc/passwd user3:mdhbmkdj:303:30:student user3:/home/user3:/usr/bin/sh 1 2 3 4 5 6 7 $ cut -f1,6 -d: /etc/passwd user3: /home/user3 $ cut -f1,6 -d: /etc/passwd |sort -r … $ cut -f1,3,5-7 /etc/passwd user3:303:student user3:/home/user3:/usr/bin/sh Команда tr Синтаксис: tr [-s ] строка1 [строка2] Опции: -s строка1 Примеры $ who | tr -s “ “ Преобразует символы строки1на соответствующие им символы строки2 Заменяет все символы строки1, встречающиеся несколько раз подряд на одиночное вхождение преобразование нескольких последовательно расположенных пробелов в один $ date |cut -c1-3 | tr “[[:lower:]]” “[[:upper:]]” перевод символов строк из нижнего регистра в верхний Команда tee (1) Синтаксис: tee [-a ] файл [файл...] Разветвляет конвейер, направляя вывод на стандартный вывод и одновременно в файл Опции: -a Команда tee добавляет вывод в конец файла, не перезаписывая его Когда используется tee ? •Для сбора данных промежуточного вывода в конвейере (tee ставится в середину конвейера). •Для передачи результирующего вывода команды на экран и в файл для удобства протоколирования. Команда tee (2) Примеры: $ who | sort $ who | tee unsorted | sort $ who | tee unsorted | sort | tee sorted $ who | wc -l $ who | tee whoatsystem | wc -l Команда pr (1) Синтаксис: pr [-опция] [файл...] Форматирует стандартный ввод и направляет его в стандартный вывод Опции: Обеспечивает вывод k столбцов сверху вниз Обеспечивает вывод в несколько столбцов, используется совместно с опцией - k, печать осуществляется построчно -t Удаляет заголовок и хвостовик на страницах -d Разделяет строки пустой строкой -wN Устанавливает длину строки в N символов -lN Устанавливает N строк на странице -nCK Задает нумерацию из K цифр, отделяемых от строки символом С ( по умолчанию С - знак табуляции <Tab>) -oN Смещает вывод на N столбцов от левого края страницы -p Устанавливает режим ожидания нажатия клавиши <Return> перед каждой страницей -hстрока Следующая за этой опцией строка используется в качестве заголовка -k -a Команда pr (2) Примеры: $ pr -n3 file нумерует строки $ pr -n3 file | more $ ls | pr -3 вывод 3 столбцов $ grep home /etc/passwd | pr -h “User accounts” добавление заголовка Печать из конвейера … | lp Ставится в конце конвейера, направляет вывод на печать Примеры: $ pr -158 file | lp Request id is laser-226 (standart input). $ ls -F $HOME | pr -3 | tee homedir | lp Request id is laser-227 (standart input). $ grep home /etc/passwd | pr -h “user accounts” | lp Request id is laser-228 (standart input). Конвейеры: обзор Конвейер cmd_out | cmd_in cmd_out | cmd_in_out | cmd_in cut Выделяет указанные колонки или поля для стандартного вывода tr Преобразует символы tee Посылает свой вывод в файл и на стандартный вывод pr Выводит на экран отформатированный вывод, обычно используется командой lp. Управление процессами Команда ps Синтаксис: ps [-efl] Пример: $ ps PID 1324 1387 $ ps -ef UID root root root root user3 user3 Выводит информацию о состоянии процесса TTY ttyp2 ttyp2 PID 0 1 2 3 1324 1390 PPID 0 0 0 0 1 1324 TIME 0:00 0:00 C 0 0 0 0 3 22 STIME Jun 1 Jun 23 Jun 23 Jun23 18:03:21 18:30:23 COMMAND sh ps TTY ? ? ? ? ttyp2 ttyp2 TIME 0:20 0:00 0:16 12:14 0:00 0:00 COMMAND swapper init vhand statdeamon -sh ps-ef Опции команды ps Без опций -e -f -l Выдача краткой информации о процессах, связанных только с сеансом работы с системой запустившего ее пользователя. Выдача списка всех процессов, развивающихся в системе Получение полной информации о состоянии процессов Получение информации о процессах в т.н. длинном формате Фоновые процессы(1) Синтаксис: командная строка > cmd.out & •Планирует командную строку как задание для фонового режима. •Возвращает приглашение на ввод как только задание запущено. •Перенаправляет вывод фонового процесса с тем, чтобы его вывод не смешивался с интерактивными командами. •Выход из системы приведет к завершению процессов, выполняемых в фоновом режиме. Пользователь получит предупреждение в тот момент, когда попытается выйти из системы,следующего содержания: “There are running jobs”, и поэтому он снова должен ввести команду exit или нажать <Ctrl>+<d>. •Любая из выполняемых в фоновом режиме команд, требующая стандартного ввода, должна читать его из файла за счет перенаправления ввода. Фоновые процессы(2) Пример: $ grep user * > grep.out & [1] 194 $ ps PID TTY TIME COMMAND 164 ttyp2 0:00 sh 194 ttype2 0:00 grep 195 ttyp2 0:00 ps •Shell сообщает номер задания и идентификатор процесса при переводе команды в фоновый режим в том случае, если указана опция monitor в команде set (set -o monitor).При указании этой опции по завершении фонового процесса будет выдано на экран соответствующее сообщение. •Команду, выполняемую в фоновом режиме,нельзя прервать нажатием <Ctrl>+<c>. Такого рода команды могут быть прекращены с помощью команды kill. Весь ввод и вывод фонового процесса должен быть безусловно перенаправлен. Запуск заданий в фоновом/оперативном режиме jobs Выводит список выполняемых заданий <Ctrl>+<z> Приостанавливает оперативный процесс (Символ приостановки определяется во время входа в систему в файле .profile с помощью команды stty susp ^z), выдает приглашение shell’а fg [%номер] Переводит задание с номером в оперативный режим fg [%строка] Переводит любое задание, запущенное командной строкой, начинающееся со строки в оперативный режим bg [%номер] Переводит задание с номером в фоновый режим bg [%строка] Переводит любое задание, запущенное командной строкой, начинающееся со строки в фоновый режим Команда nohup(1) Синтаксис: nohup команда & Делает команду защищенной от выхода пользователя из системы Пример: $ nohup cat * > bigfile [1] 972 $ <Ctrl>+<d> <Return> login: user3 Password: ... $ ps -ef | grep cat UID PID user3 972 PPID 1 … COMMAND cat * > bigfile & Команда nohup(2) •Эта команда является прификсной, т.е. указывается перед запускамой командой. •Если команда запускается с префиксной командой nohup, пользователь может выйти из системы, и при этом UNIX продолжит выполнение фонового процесса даже несмотря на то, что родительский shell уже завершен. При этом родителем команды становится процесс с номером 1 (init). •Если файл вывода не указан, команда nohup сама обеспечит перенаправление вывода в файл nohup.out. Причем в этот файл будет записываться и стандартный вывод (stdout) и стандартный протокол (stderr) Команда nice Синтаксис: nice [-N] командная_строка Запускает процесс на выполнение с пониженным приоритетом. N число в диапазоне от 0 до 19. Пример: $ nice -10 cc myprog.c -o myprog $ nice -5 sort * > sort.out •По умолчанию базовый приоритет равен 10. Большее значение числа соответствует меньшему приоритету. •Приоритеты процессов можно определить с помощью команды ps -l. Они выводятся в столбце с заголовком PRI.Базовое значение приоритета выводится в столбце с заголовком NI. Команда kill(1) Синтаксис: kill [-s имя_сигнала ] PID [PID…] Посылает сигнал указанному процессу. •Прекращает выполнение любой команды, включая запущенные с прификс-командой nohup. •Команда kill не может использоваться по отношению к процессам других пользователей (исключение - суперпользователь). •По умолчанию процессу посылается сигнал TERM. Другие сигналы задаются с помощью опции -s. Наибольшую гарантию, что процесс будет действительно уничтожен обеспечивает сигнал KILL. •Для уничтожения процесс должен быть специфицирован указанием идентификатора процесса, либо номера задания (перед числом следует поставить символ %). •Если процесс указан цифрой 0, kill уничтожает все процессы, связанные текущим shell’ом, включая и его самого. Команда kill(2) Примеры $ cat /usr/share/ man/cat1/* > bigfile1 & [1] 995 $ cat /usr/share/ man/cat2/* > bigfile2 & [2] 996 $ kill 995 [1] - Terminated cat /usr/share/ man/cat1/* > bigfile1 & $ kill -s INT %2 [2] - Interrupt cat /usr/share/ man/cat2/* > bigfile2 & $ kill -s KILL 0 •Команда kill -l выводит все имена сигналов, допустимых в соответствующей реализации системы.