Рейтинговые книги
Читем онлайн Искусство программирования на языке сценариев командной оболочки - Мендель Купер

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 31 32 33 34 35 36 37 38 39 ... 96

Пример 12-1. Создание оглавления диска для записи CDR, с помощью команды ls

#!/bin/bash

# burn-cd.sh

# Сценарий, автоматизирующий процесс прожигания CDR.

SPEED=2 # Если ваше "железо" поддерживает более высокую скорость записи -- можете увеличить этот параметр

IMAGEFILE=cdimage.iso

CONTENTSFILE=contents

DEFAULTDIR=/opt # В этом каталоге находятся файлы, которые будут записаны на CD.

# Каталог должен существовать.

# Используется пакет "cdrecord" от Joerg Schilling.

# (http://www.fokus.gmd.de/nthp/employees/schilling/cdrecord.html)

# Если этот сценарий предполагается запускать с правами обычного пользователя,

#+ то необходимо установить флаг suid на cdrecord

#+ (chmod u+s /usr/bin/cdrecord, эта команда должна быть выполнена root-ом).

if [ -z "$1" ]

then

IMAGE_DIRECTORY=$DEFAULTDIR

# Каталог по-умолчанию, если иной каталог не задан из командной строки.

else

IMAGE_DIRECTORY=$1

fi

# Создать файл "table of contents".

ls -lRF $IMAGE_DIRECTORY > $IMAGE_DIRECTORY/$CONTENTSFILE

# Ключ "l" -- "расширенный" формат вывода списка файлов.

# Ключ "R" -- рекурсивный обход дерева каталогов.

# Ключ "F" -- добавляет дополнительные метки к именам файлов (к именам каталогов добавдяет оконечный символ /).

echo "Создано оглавление."

# Создать iso-образ.

mkisofs -r -o $IMAGFILE $IMAGE_DIRECTORY

echo "Создан iso-образ файловой системы ISO9660 ($IMAGEFILE)."

# "Прожигание" CDR.

cdrecord -v -isosize speed=$SPEED dev=0,0 $IMAGEFILE

echo "Запись диска."

echo "Наберитесь терпения, это может потребовать некоторого времени."

exit 0

cat, tac

cat -- это акроним от concatenate, выводит содержимое списка файлов на stdout. Для объединения файлов в один файл может использоваться в комбинации с операциями перенаправления (> или >>).

cat filename cat file.1 file.2 file.3 > file.123

Ключ -n, команды cat, вставляет порядковые номера строк в выходном файле. Ключ -b -- нумерут только не пустые строки. Ключ -v выводит непечатаемые символы в нотации с символом ^. Ключ -s заменяет несколько пустых строк, идущих подряд, одной пустой строкой.

см. также Пример 12-21 and Пример 12-17.

tac -- выводит содержимое файлов в обратном порядке, от последней строки к первой.

rev

выводит все строки файла задом наперед на stdout. Это не то же самое, что tac. Команда rev сохраняет порядок следования строк, но переворачивает каждую строку задом наперед.

bash$ cat file1.txt

Это строка 1.

Это строка 2.

bash$ tac file1.txt

Это строка 2.

Это строка 1.

bash$ rev file1.txt

.1 акортс отЭ

.2 акортс отЭ

cp

Команда копирования файлов. cp file1 file2 скопирует file1 в file2, перезаписав file2 если он уже существовал (см. Пример 12-5).

С флагами -a и -r, или -R выполняет копирование дерева каталогов.

mv

Команда перемещения файла. Эквивалентна комбинации команд cp и rm. Может использоваться для перемещения большого количества файлов или для переименования каталогов. Примеры использования команды mv вы найдете в Пример 9-17 и Пример A-3.

При использовании в неинтерактивных сценариях, команде mv следует передавать ключ -f, чтобы подавить запрос подтверждения на перемещение.

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

bash$ mv source_directory target_directory

bash$ ls -lF target_directory

total 1

drwxrwxr-x 2 bozo bozo 1024 May 28 19:20 source_directory/

rm

Удаляет (remove) файл(ы). Ключ -f позволяет удалять даже файлы ТОЛЬКО-ДЛЯ-ЧТЕНИЯ и подавляет запрос подтверждения на удаление.

С ключом -r, удаляет все файлы в подкаталогах.

rmdir

Удаляет каталог. Удаляемый каталог не должен содержать файлов, включая "скрытые файлы"[ 28 ], иначе каталог не будет удален.

mkdir

Создает новый каталог. mkdir -p project/programs/December создает каталог с заданным именем в требуемом каталоге. Ключ -p позволяет создавать промежуточные родительские каталоги.

chmod

Изменяет атрибуты существующего файла (см. Пример 11-10).

chmod +x filename

# Делает файл "filename" доступным для исполнения всем пользователям.

chmod u+s filename

# Устанавливается бит "suid" для "filename".

# В результате, любой пользователь сможет запустить "filename" с привилегиями владельца файла.

# (Это не относится к файлам-сценариям на языке командной оболочки.)

chmod 644 filename

# Выдает право на запись/чтение владельцу файла "filename", и право на чтение

# всем остальным

# (восьмеричное число).

chmod 1777 directory-name

# Выдает право на чтение, запись и исполнение файлов в каталоге,

# дополнительно устанавливает "sticky bit".

# Это означает, что удалять файлы в этом каталоге могут только владельцы файлов,

# владелец каталога и, само собой разумеется, root.

chattr

Изменяет атрибуты файла. Эта команда подобна команде chmod, за исключением синтаксиса вызова, и работает исключительно в файловой системе ext2.

ln

Создает ссылку на существующий файл. Чаще всего используется с ключом -s, что означает символическую, или "мягкую" (symbolic или "soft") ссылку. Позволяет задавать несколько имен одному и тому же файлу и превосходная альтернатива "псевдонимам" (алиасам) (см. Пример 4-6).

ln -s oldfile newfile создает ссылку, с именем newfile, на существующий файл oldfile, .

man, info

Команды доступа к справочным и информационным страницам по системным командам и установленным программам и утилитам. Как правило, страницы info содержат более подробную информацию, чем man.

12.2. Более сложные команды

Команды для более опытных пользователей

find

-exec COMMAND ;

Для каждого найденного файла, соответствующего заданному шаблону поиска, выполняет команду COMMAND. Командная строка должна завершаться последовательностью символов ; (здесь символ ";" экранирован обратным слэшем, чтобы информировать командную оболочку о том, что символ ";" должен быть передан команде find как обычный символ). Если COMMAND содержит {}, то find подставляет полное имя найденного файла вместо "{}".

bash$ find ~/ -name '*.txt'

/home/bozo/.kde/share/apps/karm/karmdata.txt

/home/bozo/misc/irmeyc.txt

/home/bozo/test-scripts/1.txt

find /home/bozo/projects -mtime 1

# Найти все файлы в каталоге /home/bozo/projects и вложенных подкаталогах,

#+ которые изменялись в течение последних суток.

#

# mtime = время последнего изменения файла

# ctime = время последнего изменения атрибутов файла (через 'chmod' или как-то иначе)

# atime = время последнего обращения к файлу

DIR=/home/bozo/junk_files

find "$DIR" -type f -atime +5 -exec rm {} ;

# Удалить все файлы в каталоге "/home/bozo/junk_files"

#+ к которым не было обращений в течение последних 5 дней.

#

# "-type filetype", где

# f = обычный файл

# d = каталог, и т.п.

# (Полный список ключей вы найдете в 'man find'.)

find /etc -exec grep '[0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*' {} ;

# Поиск всех IP-адресов (xxx.xxx.xxx.xxx) в файлах каталога /etc.

# Однако эта команда выводит не только IP-адреса, как этого избежать?

# Примерно так:

find /etc -type f -exec cat '{}' ; | tr -c '.[:digit:]' 'n'

| grep '^[^.][^.]*.[^.][^.]*.[^.][^.]*.[^.][^.]*$'

# [:digit:] -- один из символьных классов

# введен в стандарт POSIX 1003.2.

# Спасибо S.C.

Не следует путать опцию -exec команды find с внутренней командой Bash -- exec.

1 ... 31 32 33 34 35 36 37 38 39 ... 96
На этой странице вы можете бесплатно читать книгу Искусство программирования на языке сценариев командной оболочки - Мендель Купер бесплатно.
Похожие на Искусство программирования на языке сценариев командной оболочки - Мендель Купер книги

Оставить комментарий