Автор: Пользователь скрыл имя, 31 Марта 2013 в 11:22, лабораторная работа
В операционной системе UNIX большинство информации хранится в текстовом виде. Поэтому команды по обработке текстовой информации играют очень важную роль в этой операционной системе.
Познакомимся еще с одной командой, аналог котоpой имеется в DOS-си- темах. Это команда echo (эхо).
Она имеет фоpмат: echo [-n] [arg ...]
Команда echo выводит на устройство стандартного вывода заданные ей аргументы, разделяя их пробелами и завершая их символом новой строки (\n).
user@desktop test $ cat multiline.txt
Simple text:
blah-blah-blah
1 2 3 4 5 6 7 8 9 0
bye!
user@desktop test $ cat orig.txt second.txt multiline.txt > big.txt
user@desktop test $ cat big.txt
Hello, world
One line
A line
Simple text:
blah-blah-blah
1 2 3 4 5 6 7 8 9 0
bye!
В данном сценарии изучается, как выделять информацию, разбитую на части с помощью специального символа-разделителя (например, прообела или символа :), из файлов и создавать новые структурированные файлы.
Начальные условия: Командная строка.
user@desktop test $ cat /etc/passwd
root:x:0:0:root:/root:/bin/
bin:x:1:1:bin:/bin:/bin/false
daemon:x:2:2:daemon:/sbin:/
adm:x:3:4:adm:/var/adm:/bin/
lp:x:4:7:lp:/var/spool/lpd:/
sync:x:5:0:sync:/sbin:/bin/
shutdown:x:6:0:shutdown:/sbin:
...
Каждая строка хранит запись об отдельном пользователе. Запись состоит из полей, разделённых символом «:».
user@desktop test $ cat /etc/passwd | cut -f1 -d:
root
bin
daemon
adm
lp
sync
shutdown
...
user@desktop test $ cat /etc/passwd | cut -f1 -d: | sort
adm
alias
apache
at
bin
cron
cyrus
...
user@desktop test $ cat /etc/passwd | cut -f7 -d:
/bin/bash
/bin/false
/bin/false
/bin/false
/bin/false
/bin/sync
...
Список содержит много повторяющихся строк.
user@desktop test $ cat /etc/passwd | cut -f7 -d: | uniq
/bin/bash
/bin/false
/bin/sync
/sbin/shutdown
/sbin/halt
/bin/false
...
Некоторые повторяющиеся строки остались, так как сравниваются только последовательные строки.
user@desktop test $ cat /etc/passwd | cut -f7 -d: | sort | uniq
/bin/bash
/bin/false
/bin/sync
/dev/null
/sbin/halt
/sbin/shutdown
user@desktop test $ cat /etc/passwd | cut -f1 -d: > users
user@desktop test $ cat /etc/passwd | cut -f7 -d: > shells
user@desktop test $ paste users shells
root /bin/bash
bin /bin/false
daemon /bin/false
adm /bin/false
lp /bin/false
sync /bin/sync
...
В данном сценарии изучаются команды, которые позволяют провести первичный анализ файла: с чего он начинается, как заканчивается и каков его размер.
Начальные условия: Командная строка.
user@desktop test $ wc -l /etc/passwd
44 /etc/passwd
user@desktop test $ cat users | wc -w
44
user@desktop test $ head logs/Xorg.0.log
X Window System Version 6.8.2
Release Date: 9 February 2005
X Protocol Version 11, Revision 0, Release 6.8.2
Build Operating System: Linux 2.6.13-gentoo i686 [ELF]
Current Operating System: Linux thinkpad 2.6.13-gentoo #1 Wed Sep 7 01:03:14 MSD 2005 i686
Build Date: 08 October 2005
Before reporting problems, check http://wiki.X.Org
to make sure that you have the latest version.
Module Loader present
user@desktop test $ tail logs/Xorg.0.log
(II) RADEON(0): [RESUME] Attempting to re-init Radeon hardware.
(II) RADEON(0): [agp] Mode 0x1f000201 [AGP 0x8086/0x3340; Card 0x1002/0x4c66]
(II) Mouse1: ps2EnableDataReporting: succeeded
SetClientVersion: 0 8
SetGrabKeysState - disabled
SetGrabKeysState - enabled
(II) 3rd Button detected: disabling emulate3Button
SetClientVersion: 0 8
SetGrabKeysState - disabled
SetGrabKeysState - enabled
Это бывает полезно при просмотре системных журналов — в них самые последние события содержатся в конце файлов.
В данном сценарии рассматривается практическое использование регулярных выражений для поиска по текстовым файлам.
Начальные условия: Командная строка. Каталог test/log с найденными системными журналами.
user@desktop ~ $ less test/log/XFree86.0.log
Выйти из просмоторщика можно нажатием клавиши q.
user@desktop ~ $ grep "^(WW)" test/log/XFree86.0.log
(WW) The directory "/usr/share/fonts/freefonts/" does not exist.
(WW) The directory "/usr/share/fonts/unifont/" does not exist.
(WW) The directory "/usr/share/fonts/artwiz/" does not exist.
...
user@desktop ~ $ grep "[a-zA-z0-9]\+@[a-zA-z0-9\.]\+
/etc/devfsd.conf:# Richard Gooch <rgooch@atnf.csiro.au>
/etc/inittab:# Author: Miquel van Smoorenburg, <miquels@cistron.nl>
/etc/inittab:# Modified by: Patrick J. Volkerding, <volkerdi@ftp.cdrom.com>
...
При работе с несколькими файлами grep по умолчанию использует вывод имени файла перед найденной стокой.
user@desktop ~ $ grep -h "[a-zA-z0-9]\+@[a-zA-z0-9\.]\+
# Richard Gooch
<rgooch@atnf.csiro.au>
# Author: Miquel van Smoorenburg, <miquels@cistron.nl>
# Modified by: Patrick J. Volkerding, <volkerdi@ftp.cdrom.com>
...
user@desktop ~ $ grep -ho "[a-zA-Z0-9]\+@[a-zA-Z0-9\.]\+
rgooch@atnf.csiro.au
miquels@cistron.nl
volkerdi@ftp.cdrom.com
...
user@desktop ~ $ find /etc -type f 2>/dev/null
/etc/X11/xorg.conf.example
/etc/X11/Sessions/kde-3.4
/etc/X11/Sessions/Xsession
/etc/X11/chooser.sh
...
user@desktop ~ $ find /etc -type f -exec grep "nameserver" {} \; 2>/dev/null
# merge the new nameservers with the other options from the old ...
grep --invert-match '^nameserver[[:space:]]' $REALRESOLVCONF
nameserver 10.22.10.20
...
user@desktop ~ $ find /etc -type f -exec grep -Hn "nameserver" {} \; 2>/dev/null
/etc/ppp/ip-up:24:
/etc/ppp/ip-up:26:
/etc/ppp/resolv.conf:1:
...
Таким образом, команда grep может эффективно использоваться вместе с командой find для нахождения информации в файлах.