Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Утилиты для работы с текстовой информацией






Лабораторная работа 4

Простейшие утилиты оболочки UNIX

 

Цель работы: изучить простейшие утилиты оболочки UNIX.

 

Краткие теоретические сведения

 

Основной функцией утилиты является перенос информации в пределах ОС. При рассмотрении каждой конкретной утилиты пользователя системы интересуют функции этой утилиты, а также ее имя, используемое для передачи в систему через пользовательский интерфейс в качестве команды для ОС. При работе с системойUNIX общий формат такой пользовательской команды следующий:

имя [флаги] [файлы],

где:

1) квадратные скобки заключают необязательную часть команды;

2) имя – пользовательское имя исполняемого файла, содержащего загрузочный модуль (машинный код) утилиты;

3) файлы – имена файлов, над которыми утилита выполняет свои действия. Различают входные файлы, информация из которых (или информация о которых) используется утилитой в качестве ее исходных данных, а также выходные файлы, в которые утилита помещает результаты своей работы. По умолчанию большинство системных утилит использует в качестве входного файла клавиатуру, а в качестве выходного файла – экран. Эти устройства (и соответствующие им файлы) часто называют соответственно стандартным вводом и стандартным выводом;

4) флаги – двоичные параметры команды, уточняющие действие, которое должна выполнить запускаемая утилита. Флаг задается своим именем из одной буквы, которой предшествует символ «-». Некоторые флаги уточняются своими параметрами, которые отделяются от имени флага пробелами.

Ниже приводится краткое описание утилит, используемых пользователями операционной системыUNIX для работы с файлами. После имени каждой утилиты в скобках приводится название аналогичной или близкой команды вMS-DOS. Рассматриваемые утилиты можно разбить на группы:

1) работа с файловой структурой системы;

2) создание каталогов и анализ их содержимого;

3) копирование, переименование и перенос файлов;

4) уничтожение файлов и каталогов;

5) работа с текстовой информацией;

6) поиск информации;

7) выдача справочной информации;

8) упрощение пользовательского интерфейса.

 

Утилиты для работы с файловой структурой системы

 

Первая важная задача, которую необходимо решить при изучении любого языка управления ОС, – освоение команд, предназначенных для работы с файловой структурой системы.

1. Вывод абсолютного имени текущего каталога (вMS-DOSотсутствует, так как это имя является частью приглашения к вводу команды):

Pwd

 

Это наиболее простая командаUNIX, которая не имеет ни одного параметра. Как и другие команды, она вводится пользователем в ответ на приглашениеUNIX (а точнее shell) в виде символов «$» или " #".

Пример

# pwd < Enter>

/home/user #

где < Enter> — клавиша, нажатие которой завершает ввод текущей строки символов. Далее мы будем опускать запись этой клавиши, предполагая, что всякая командная строка, которой предшествует приглашение «#», должна завершаться нажатием этой клавиши.

 

2. Замена текущего каталога (вMS-DOS – cd):

cd [каталог]

 

Если каталог опущен, то текущим каталогом станет корневой каталог поддерева каталогов данного пользователя.

Имя каталога может быть как абсолютным, так и относительным. Если в начале относительного имени каталога записать символы «~/», то смещение нового текущего каталога вычисляется относительно корневого каталога данного пользователя. Если в качестве имени каталога задать символы «..», то новым текущим каталогом станет «родитель» действующего текущего каталога.

Данная утилита не имеет флагов. К этому добавим, что cd, вообще-то говоря, не является утилитой в полном смысле этого слова, так как она существует не в виде отдельного исполняемого файла, а в виде подпрограммы ОС (точнее ее интерпретатора команд). Подобное свойство обусловлено небольшими размерами данной подпрограммы и для пользователя не заметно.

Примеры:

а) # pwd

/home/user/11

# cd

# pwd

/home/user

#

б) # pwd

/home/user

# cd 11

# pwd

/home/user/11

#

в) # pwd

/home/user/11

# cd..

# pwd

/home/user

#

г) # pwd

/home/user/11

cd../..

# pwd

/home

#

В примере (а) параметр у команды cd опущен. В этом случае текущим каталогом становится корневой каталог поддерева каталогов данного пользователя (в примере это каталог user). В примере (б) происходит «спуск» в подкаталог текущего каталога. В примере (в) происходит «подъем» на один уровень файловой структуры, а в примере (г) – сразу на два уровня.

Добавим, что задание абсолютного имени позволяет сделать текущим любой каталог. Это же можно сделать, используяв относительном имени символы «..». Относительное имя без этих символов позволяет задать только каталог, являющийся прямым потомком действующего текущего каталога.

3. Вывод содержимого каталога на экран (в MS-DOS – dir):

ls [каталог или файлы]

 

Если параметр опущен, то на экран выводится содержимое текущего каталога в алфавитном порядке, иначе – содержимое заданного каталога. Если заданы имена файлов, то на экран выводятся сведения об этих файлах, если их имена присутствуютв текущем каталоге.

Данная утилита имеет 23 флага. Приведем только некоторые из них:

1) -R – рекурсивный вывод подкаталогов заданного ката­лога;

2) -F – пометить исполняемые файлы символом «*», каталоги – символом «/», а символические связи – «@»;

3) -l – вывод наиболее подробной информации о файлах;

4) – вывод списка всех файлов и подкаталогов заданного каталога (по умолчанию имена, начинающиеся с символа «.», не выводятся).

В простейшем случае команда не содержит флагов и позволяет вывести лишь имена файлов (в том числе и подкаталогов).

Примеры:

а) # ls

a.txt b1 file prog

#

б) # ls file

file

#

Если в примере (б) текущий каталог не содержал бы запрашиваемый файл, то на экран было бы выведено сообщение об отсутствии требуемого файла.

 

 

4. Создание нового каталога (каталогов) (в MS-DOS – mkdir):

 

mkdir каталоги

 

Имена создаваемых каталогов могут быть заданы в любом виде: простые, относительные, абсолютные. Один из флагов данной утилиты:

- m – создать каталог с заданным режимом доступа.

Примеры:

а) # ls

1 22 prog

# mkdir 333

# ls

1 22 333 prog

#

б) # pwd

/home/user/111

# ls..

111 a fl

# mkdir../222../333

# ls..

111 222 333 a f1

#

 

5. Удаление каталогов:

 

1) удаление пустых каталогов (вMS-DOS – rmdir):

rmdir каталоги

Применение этой команды аналогично команде mkdir, хотя ее действие противоположно. Данная команда может уничтожить каталог только в том случае, если он не содержит файлов и подкаталогов;

 

2) удаление любых каталогов (вMS-DOS - deltree):

rm -r каталоги

 

Данная команда выполнит удаление заданного каталога и всех содержащихся в нем файлов и подкаталогов. Другие флаги этой команды:

-f – удаление файлов (подкаталогов) без запроса подтверждения;

-i – обязательный запрос подтверждения при удалении каждого файла (подкаталога).

Примеры:

а) # ls

1 22 prog

# rm –r 1 prog

# ls

22

#

б) # pwd

/home/user/111

# ls..

111 a f1

# rm –r../f1../a

# ls..

111

#

Обратим внимание, что нельзя уничтожить каталог, если он является в данный момент текущим каталогом. Например, в примере (б) нельзя задать имя уничтожаемого каталога как «../111».

6. Копирование содержимого одного каталога в качестве содержимого другого каталога (вMS-DOS – хсору):

 

ср-r каталог_1 каталог 2

 

В качестве первого параметра команды записывается имя каталога-источника, а в качестве второго параметра – имя каталога-приемника.

Копирование производится рекурсивно. То есть если каталог-источник имеет подкаталоги, то их содержимое также будет скопировано. При этом копирование каждого файла (подкаталога) означает создание на диске новой физической копии файла (подкаталога), имеющей такое же простое имя, что и копируемый файл (подкаталог). В том случае, если в каталоге-приемнике уже существует файл (подкаталог) с таким же простым именем, что и копируемый, то прежний файл (подкаталог) будет уничтожен.

 

Утилиты для работы с текстовой информацией

 

1. Вывод текстового файла на экран (вMS-DOS – type), создание файла с клавиатуры (в MS-DOS – copy con):

cat [файлы] – вывод текстового файла на экран

cat > имя_файла – создание файлы с клавиатуры

 

Данная утилита выводит на экран содержимое всех текстовых файлов, заданных в качестве ее параметров. При этом содержимое выводимых файлов на экране никак не разделяется. Если ни один из файлов не задан, то на экран выводится последовательность символов, введенная с клавиатуры (напомним, что клавиатура – тоже файл). Ввод с клавиатуры будет выполняться также в том случае, если вместо любого имени файла записан символ «–». Для завершения ввода символов с клавиатуры следует одновременно нажать две клавиши: < Ctrl> & < D> («конец файла»).

Примеры:

а) # cat fa б) # cat fa - fb

aaaaaaa aaaaaaa

# catfb xxxxxxx

bbbbbbb xxxxxxx

# cat fc ууууууу

ccccccc ууууууу

# cat fa fb fc < Ctrl> & < D>

aaaaaaa bbbbbbb

bbbbbbb #

ccccccc

#

 

В примере (а) сначала выводится содержимое файлов , fb, fc по отдельности, а затем вместе. В примере (б) на экран выводится то же содержимое файлов fa и fb, что и в примере (а). Между этими двумя выводами на экран выводится текст, набранный на клавиатуре. Данный текст состоит из двух строк: «xxxxxxx» и «ууууууу». После нажатия клавиши, соответствующей символу «х» или «у», мы тут же видим на экране его изображение – «эхо» символа. После того как набрана вся строка и нажата < Enter >, на экране опять появляется изображение этой строки. Это результат деятельности программы cat, которая выполняет вывод строки, не дожидаясь завершения входного текста.

При создании файла, после того как набран весь текст, одновременно следует нажать две клавиши: < Ctrl> & < D>. Обратите внимание, что эти клавиши следует нажимать не в конце последней строки вводимого текста, а в начале следующей строки, то есть после нажатия < Enter >. Благодаря этому символ «конец строки» будет помещен в конец нашего файла (напомним, что клавиатура и экран – тоже файлы). Поэтому вывод на экран следующего файла (в примере это fb) начнется с новой строки.

 

2. Вывод строки символов на экран (в MS-DOS – echo):

echo строка

 

Как и команда cd, данная команда выполняется не отдельной утилитой, а подпрограммой интерпретатора команд ОС.

Примеры:

а) # echo " Good morning! " б) # echo Good morning

Good morning! Good morning!

# #

В примере (а) выводимая строка символов заключена в двойные кавычки, наличие которых требует воспринимать строку символов в качестве единого параметра команды echo. В примере (б) таких кавычек нет, и поэтому строка представляет собой два параметра. На результат выполнения команды echo подобное различие не влияет.

 

3. Вывод текста, вводимого с клавиатуры, на экран и одновременное копирование этого текста в заданный файл (файлы):

tee файлы

Один из флагов этой команды:

– запись текста не в начало файла (при этом файл создается заново), а его добавление в конец существующего файла (файлов).

Примеры:

а) # cat f1 б) # cat fa

aaaaaaa xxxxxx

# cat f2 # tee -a fa

bbbbbbb ууууууу

# tee f1 f2 ууууууу

ccccccc < Ctr! > & < D>

ccccccc # cat fa

< Ctri> & < D> xxxxxx

# cat f1 f2 ууууууу

ccccccc #

ccccccc

#

В примере (а) введенная с клавиатуры строка текста «ccccccc» записана в качестве нового содержимого файлов fl и f2. Наличие на экране двух таких строк обусловлено тем, что одна из них представляет собой «эхо» введенных символов, а вторая является одним из результатов выполнения команды tee.

В примере (б) задание в команде tee флага привело к тому, что введенная с клавиатуры строка была добавлена к прежнему содержимому файла fa.

 

4. Создание новых текстовых файлов и корректировка существующих. Данную функцию выполняют утилиты, называемые текстовыми редакторами. Примеры текстовых редакторов: ed, ее, sed, vi (текстовый редактор в MS-DOS – edit). В качестве примера приведем вызов редактора sed:

sed [файлы]

 

Данный редактор редактирует заданные в команде файлы построчно, от меньших номеров строк к большим, без возврата к ранее пройденным строкам. Редактирование строк производится согласно командам редактирования, заданным одним из двух способов:

1) в качестве параметров флага - е;

2) команды редактирования содержатся в файле, имя которого задано в качестве параметра флага

Если ни одно имя файла в команде не задано, то по умолчанию входным файлом считается клавиатура. Набираемые на ней строки и будут подвергаться редактированию. В этом случае произойдет создание нового текстового файла, который с помощью интерпретатора команд ОС может быть записан на диск.

Более подробно редактор sed рассматривается в подразделе 5.2.

 

5. Сортировка и слияние файлов (вMS-DOS – sort):

sort файлы

 

Если флагов нет, то данная команда выполняет слияние перечисленных файлов в единый файл. Причем строки этого файла сортируются в лексографическом порядке. По умолчанию результат выводится на экран. Два флага этой команды:

-u – при наличии нескольких одинаковых строк результат содержит только одну строку;

-o файл – вывод результата делается не на экран, а в заданный файл.

6. Поиск файлов (в MS-DOS – find):

find каталог [флаги]

 

Данная утилита осуществляет поиск файлов в поддереве файловой структуры, корнем которого является заданный каталог. Условия поиска задаются с помощью флагов. В отличие от ранее перечисленных утилит флаги задаются в конце команды. Из всех многочисленных флагов обратим внимание на два:

1) - type тип – поиск файлов указанного типа. Аргумент тип может принимать следующие значения: b (файл – блочное устройство), с (файл – символьное устройство), d (файл – каталог), f (обычный файл), l (файл – символическая связь), p (файл – именованный канал);

2) - пате имя – поиск файлов с указанным именем.

В одной команде find можно задать несколько условий поиска, соединив их при помощи следующих логических опера­торов:

– логическое И; -o – логическое ИЛИ; \! – логическое НЕ.

Примеры:

 

а) # find./ -name fa б) # find / -name find

./2/fa /usr/share/irc/heip/note/find

./fa #

# find./ -name f9

#

 

В примере (а) осуществляется поиск файлов сначала с простым именем , а затем с именем f9. При этом найдено два файла с именем fa и ни одного с именем f9. В примере (б) задан поиск утилиты find, выполняющей рассматриваемую команду. В результате поиска на экран выведено абсолютное имя соответствующего файла.

В отличие от ранее рассмотренных команд, find имеет собственные метасимволы. Метасимвол – символ, имеющий для рассматриваемой команды специальное значение:

* – любая последовательность символов, в том числе пустая, за исключением символов «пробел» и «/»;

? – любой одиночный символ, за исключением «пробел»и «/»;

[...] — соответствует любому одиночному символу из тех, что перечислены через пробел в квадратных скобках. Пара символов, разделенных символом «–», соответствует одиночному символу, код которого попадает в диапазон между кодами указанных символов, включая их самих.

Примеры:

 

в) # find / -name " sed*" г) # find /home -name 'f[1-3]'

/etc/setup/sed.ist.gz /home/111/1/2/f1

/bin/sed.exe /home/111/1/3/f1

/usr/info/sed.info /home/111/1/12

/usr/man/man1/sed.1 /home/111/1/f3

# #

В примере (в) осуществлен поиск по всей файловой структуре файлов, «родственных» текстовому редактору sed. В примере (г) осуществлен поиск в поддереве с корнем home файлов, простое имя каждого из которых состоит из двух символов: " f " и цифры от 1 до 3.

Обратите внимание, что при использовании метасимволов имя файла обязательно заключено в кавычки (одиночные или двойные). Это объясняется тем, что shell имеет свои метасимволы, одноименные только что рассмотренным метасимволам find. Кавычки играют роль «экранирующих» символов, сообщая shell о том, что все символы, заключенные в кавычки, являются для shell обычными символами, которые должны быть переданы без изменений в запускаемую программу (в данном случае – в программу find).

 

Примеры:

 

д) # find./ -type d е) # find./ -type d -a -name 'k*'

././k4

./ak3./k4/k77

./ak3/d6./k8

./k4 #

./k4/k77

./k8

./ab

#

В примере (д) выполняется поиск всех каталогов в поддереве, корнем которого является текущий каталог. Обратим внимание, что, в отличие от команды ls, вывод найденных каталогов производится не в алфавитном порядке. В примере (е) выводятся только те каталоги, простое имя которых начинается на букву k.

 

7. Поиск строк в текстовых файлах (вMS-DOS – findstr):

fgrep подстрока [файлы]

 

Данная утилита осуществляет поиск в перечисленных файлах строк, имеющих в своем составе шаблон – заданную подстроку. Найденные строки выводятся на экран. Если имена файлов опущены, то поиск осуществляется в тексте, вводимом с клавиатуры. При вводе с клавиатуры каждая строка, содержащая требуемую подстроку, повторяется дважды: первый раз она содержит «эхо» вводимых с клавиатуры символов, а второй раз выводится командой fgrep.

Некоторые флаги этой команды:

– выводятся только строки, полностью совпадающие с шаблоном;

– выводится только количество строк, содержащих шаблон;

-i – при поиске не различаются строчные и прописные буквы;

-l – выводятся только имена файлов, содержащих требуемые подстроки;

-п – перед каждой выводимой строкой записывается ее относительный номер в файле.

Если задан поиск в нескольких файлах, то перед выводом каждой строки выводится имя соответствующего файла. Заметим, что команда fgrep имеет нулевой код завершения в том случае, если найдена хотя бы одна строка, включающая заданную подстроку.

Примеры:  
а) # cat f3 б) # fgrep -i d f314
ODD f3: DDD
ddd f3: ddd
HHH D f3: HHH D
# cat f4 f4: tttt dd
tttt dd f4: DDD
DDD #
# fgrep d f3 f4  
f3: ddd  
f4: tttt dd  
#  

в) # fgrep -/' h d' f3 f4 г) # fgrep -ic d f3 f4

f3: HHH D f3: 3

# f4: 2

#

Во всех четырех примерах поиск требуемых строк выполняется в файлах f3 и f4, содержимое которых показано в примере (а). В этом примере выполнен поиск строк, содержащих символ «d». В примере (б) на экран выводятся строки, содержащие как символ «d», так и «D». В примере (в) производится поиск строк, содержащих подстроку «h d». Так как эта подстрока содержит пробел, то она обязательно должна быть заключена в кавычки (одиночные или двойные). Наличие кавычек сообщает shell о том, что набор символов между ними должен быть передан в программу fgrep как единый параметр. В примере (г) одновременно заданы два флага: -i и .

 

8. Выдача статистики о текстовых файлах (вMS-DOSотсутствует):

wc [файлы]

 

Данная утилита выдает статистику о своих входных файлах. Если эти файлы не заданы, выдается статистика о тексте, введенном с клавиатуры.

Флаги этой команды:

-l – вывод числа строк;

-w – вывод числа слов;

– вывод числа символов.

По умолчанию все три флага установлены (-lwc). Поэтому флаги записываются в этой команде только тогда, когда требуется ограничить выходную статистику.

Примеры:

а) # cat f1 б) # wc -с

хх хх This is a test to see if / am

yy yy entering text in the file " letter"

# cat f2 Once I have completed it I shall

zzzzz that I have created 4 new lines of

# wc f1 f2 < Ctrl> & < D>

2 4 14 f1 145

1 1 7 f2 #

3 5 21 total

#

В примере (а) выдается статистика о файлах fl и f2. Отсутствие флагов означает, что должна быть выведена полная статистика: число строк (первый столбец на экране), число слов (второй столбец) и число символов (третий столбец). Полученное число символов обусловлено тем, что в результате нажатия клавиши < Enter> в текстовую строку записывается не один, а два символа: «перевод строки» и «возврат каретки. В примере (б) выполнен подсчет символов, введенных с клавиатуры. Такая команда может быть использована, например, для определения скорости набора текста.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.