Генерация имен файлов (расширение имен файлов):введение

advertisement
Генерация имен файлов (расширение имен
файлов):введение
• Символы генерации имен файлов интерпретируются 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 выводит все имена сигналов, допустимых в
соответствующей реализации системы.
Download