Контактная информация

По всем интересующим вас вопросам связывайтесь при помощи контактной информации приведенной на этой странице!

skype: metsof
email: accusser@gmail.com

В социальных сетях...

Форма обратной связи

Авторизация

Статьи об операционной системе Linux

Сайдбар

Способы управления файлами и каталогами Linux

14 апр. 2014

Каталоги Дерево каталогов



Дерево каталогов в Linux начинается с корневого каталога /. Указывать диск, например С:, в Linux не только невозможно, но и бессмысленно. В этой книге все остальные каталоги считаются подчиненными. Таким образом, если представить дерево каталогов наглядно, то корневой каталог расположен на самой его верхушке. В некоторых книгах используется прямо противоположная номенклатура, которая больше напоминает дерево (корни внизу, ветви вверху), но не соответствует обычному значению терминов.

Одна из наиболее серьезных проблем в начале работы с Linux/UNIX заключается в том, чтобы найти определенный файл в широко разветвленной системе каталогов.

Личный каталог



После входа в систему вы сразу же оказываетесь в так называемом личном, или «домашнем», каталоге. В вашем распоряжении все находящиеся в нем файлы и подкаталоги. Другие пользователи (кроме того, который обладает привилегиями администратора) не могут ни изменять, ни удалять файлы вашего личного каталога (а при определенных настройках даже не могут их читать).

Личный каталог обычно находится в дереве каталогов Linux по адресу /home/ loginname/ (только личный каталог администратора называется / root). Поскольку было бы неудобно каждый раз писать /home/loginname/, название собственного домашнего каталога сокращается до символа тильды (~). Кроме того, доступ к личным каталогам других пользователей возможен через запись ~loginname.

Каталоги.и..



В каждом каталоге имеется два особых подкаталога, необходимыех для формального управления иерархией каталогов. Каталог с именем, начинающимся на ., представляет собой ссылку на актуальный каталог, а каталог с именем, начинающимся на…, — на каталог, расположенный уровнем выше.


Обе следующие команды копирования показывают, как можно использовать эти каталоги (другие ср-примеры даются в следующем разделе). Первая команда копирует файл /etc/fstab в актуальный каталог. Если каталог называется /home/ name, то новый файл будет иметь имя /home/name/fstab.

user$ cp /etc/fstab .


Во втором примере мы сначала активизируем с помощью команды cd каталог ~/linux8. Затем команда копирования ср создает резервную копию файла fileuse. tex (в котором содержится текст этой главы). Резервная копия имеет имя ~/fileuse. tex.bak.
<code>
user$ cd ~/linux8

user$ cp fileuse.tex ../fileuse.tex.bak
</code>

Если домашний каталог называется / home/name, то вы сейчас создали резервную копию /home/name/linux8/fileuse.tex. Следовательно, полное название резервной копии: /home/name/fileuse.tex.bak.

Простейшие команды для работы с каталогами



Хотя при работе с KDE и Gnome в вашем распоряжении есть современные файловые менеджеры, опытные пользователи Linux охотнее работают с текстовыми командами. Ниже приведены самые важные из таких команд.

Команды для работы с каталогами



cd — Смена актуального каталога

ср — Копирование файлов

less — Постраничный показ текстовых файлов

Is — Показ всех файлов каталога

mkdir — Создание нового каталога

mv — Перемещение файлов или изменение их имен

rm — Удаление файлов

rmdir — Удаление каталогов

Перечисление файлов



Команда ls возвращает список всех файлов данного каталога. Если вы также хотите увидеть скрытые файлы, то задайте дополнительный параметр -a. Если вас интересует не только имя файла, но и другая информация о нем, например размер, владелец и т. д., то вам поможет параметр -l. По умолчанию вывод информации по ls производится в алфавитном порядке. Чтобы сортировать файлы по времени внесения изменений, размеру или расширению, используйте параметры -t, -S или -X. Параметр -r позволяет отсортировать информацию в обратном порядке. Следующая команда показывает все файлы с расширением ТЕХ в каталоге linuxbuch, расположенные в порядке уменьшения размера:

user$ ls -l -S linuxbuch/*.tex


-rw-r--r-- 1 kofler kofler 30113 2009-05-11 09:09 linuxbuch/intro.tex -rw-r--r-- 1 kofler kofler 63173 2009-01-29 08:05 linuxbuch/kde.tex -rw-r--r-- 1 kofler kofler 76498 2009-06-08 15:43 linuxbuch/kernel.tex

Несколько замечаний по интерпретации вывода команды ls: десять первых символов в начале строки указывают тип файла и биты доступа. В описание типа файла входят дефис (-) для обычного файла, d для каталога (directory), b или с для файла устройства (block или char) или l для символьной ссылки. Три следующих символа (rwx) указывают, что пользователи могут делать с файлом: читать, записывать в него информацию или выполнять его. Кроме того, сообщается аналогичная информация для членов группы, а также для других пользователей системы. Число, следующее за десятью символами, означающими тип и уровень доступа, обозначает, сколько жестких ссылок указывает на файл. В следующих столбцах задано, к какой группе относится файл и кто его владелец (здесь в обоих случаях kofler), размер файла, дата его последнего изменения и, наконец, имя файла.

В большинстве дистрибутивов команда ls конфигурирована так, что файлы и каталоги распределяются по типу и окрашиваются разными цветами в зависимости от типа. Если в вашем дистрибутиве это не так, подобного эффекта можно достичь добавлением дополнительного параметра — -color.

Обычно ls учитывает только файлы, находящиеся в каталоге, открытом в настоящий момент. Если вы хотите учесть также те файлы, которые находятся в подкаталогах, используйте параметр -R. Он, кстати, используется и со многими другими командами.

Следующая команда позволяет перечислить все без исключения файлы, находящиеся во всех подкаталогах (в том числе скрытые каталоги и файлы). Как правило, этот список достаточно длинный. Из него команда | less передает результат от ls к less, так что теперь вы можете пролистывать полученный программный вывод.

user$ ls -lR | less

Копирование файлов



Команда ср имя! имя2 копирует файл имя1. Копия называется имя2. Чтобы скопировать несколько файлов, вызовите команду вида ср имя! имя2… целевой каталог. Следующие команды сначала переводят в активное состояние каталог linuxbuch, затем создают подкаталог bak, а потом копируют туда все текстовые ТЕХ-файлы.

user$ cd linuxbuch user$ mkdir bak user$ cp *.tex bak/


Для того чтобы копировать целые каталоги вместе со всем их содержимым, используйте команду ср -a. Далее cd, не требуя дополнительных аргументов, делает домашний каталог актуальным. Вторая команда создает абсолютную копию каталога linuxbuch под именем linuxbuch-bak.

user$ cd (Активизировать домашний каталог) user$ cp -a linuxbuch linuxbuch-bak

Удаление файлов и каталогов



Команда rm позволяет безвозвратно удалить указанный файл. Как правило, rm применяется для удаления файлов, а не каталогов. Для удаления каталогов предусмотрена команда rmdir каталог, которая, правда, работает лишь в том случае, если указанный каталог пуст. На практике для удаления каталогов обычно применяется команда rm с параметром -rf. Это означает, что все каталоги и находящиеся в них подкаталоги и файлы рекурсивно удаляются без запроса о подтверждении удаления. Понятно, что команда rm -rf очень опасна! Следующая команда удаляет созданную выше резервную копию каталога linuxbuch.

user$ rm -rf linuxbuch-bak/


Как узнать, сколько памяти нужно для размещения всех файлов и каталогов



С помощью команды ls -l невозможно узнать, насколько велик файл. Однако зачастую требуется знать, сколько места занимают все файлы, находящиеся в каталоге, сколько свободного места еще есть на диске и т. д. Для этого вам пригодятся две команды: df и du.

Узнаем, сколько свободного места на диске



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

user$ df -h


Команда df также позволяет установить, в каком сегменте диска физически находится файл. В следующем примере каталог /home/kofler находится в сегменте / dev/sda6, который, в свою очередь, расположен в дереве каталогов на месте /home.

<code>user$ df -h /home/kofler/

/dev/sda6 28G 7.7G 19G 30^ /home</code>

Установление размера каталога




Команда du дает возможность установить, сколько дискового пространства требует данный каталог, в том числе все содержащиеся в нем подкаталоги. Параметр -h опять же позволяет вывести результат в удобочитаемой форме, а не в виде блоков по одному килобайту. Параметров для сортировки результатов команды du не существует (однако в Gnome имеется программа baobag, позволяющая графически представлять размер каталогов; в KDE подобная наглядная возможность предусмотрена в файловом менеджере Konqueror).

<code>user$ du -h fotos/2008

74M fotos/2008/2008-03-ostern

162M fotos/2008/2008-08-korsika

66M fotos/2008/2008-ll-diverse

2.0G fotos/2008
</code>

Джокерные символы



При ежедневном обращении с файлами часто требуется обработать целые группы файлов, например все файлы с расширением ТЕХ. Чтобы такие операции были возможны, при вводе команд Linux предусмотрены так называемые джокерные символы.

Символы *и?



Символ? служит для указания любого символа, а символ * — для указания любого количества символов (в том числе ни одного). Пользователи, которые умеют работать с MS-DOS, на первый взгляд могут решить, что отличий от этой системы нет. Однако это впечатление обманчиво.

Символ * включает практически любые символы, в том числе точки (кроме точек, с которых начинается имя файла). Если вы хотите обработать все файлы, то в Linux потребуется указать * ане*.*!

Если указать много джокерных символов, это никак не повлияет на работу Linux. Например, можно искать с помощью выражения *graf* все файлы, в имени которых содержится graf, — в том числе grafik.doc, apfelgraf и README.graf.

Символы [] и [!]



Если указания символов * и? недостаточно, можно ужесточить ограничение, добавив квадратные скобки. Например, [abc] — это подстановочный символ для одной из трех букв: a, b или c. Если в квадратных скобках между двумя буквами или цифрами стоит дефис, то имеется в виду символ «между». Таким образом, [a-f]* охватывает все файлы, начинающиеся с любой из букв между a и f включительно.

Выражение *[ _.-]* означает все файлы, в названии которых содержится минимум одна точка, нижнее подчеркивание или специальный символ, а * .[hc] означает все файлы, которые заканчиваются на .c или .h.

Джокерные символы можно применять и при работе с каталогами. Выражение */*.tex означает все ТЕХ-файлы, которые находятся в подкаталогах текущего каталога (только на один уровень ниже, то есть не включая подкаталоги подкаталогов актуального каталога). Выражение /usr/ * bin/* означает все файлы, находящиеся в каталогах /usr/bin и /usr/sbin.

Интерпретацией джокерных символов занимается не команда, вызываемая для обработки, а та оболочка, из которой вызывается команда. Оболочка bash, которая используется в Linux чаще всего, кроме уже указанных джокерных символов распознает и множество других специальных символов, оказывающих специфическое влияние при выполнении команды.

Сложности при использовании джокерных символов


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

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

Обработка каталогов с помощью */



Если вы хотите обработать все каталоги (но не файлы), вам поможет джокерная комбинация */. Она охватывает все «файлы», которые содержат ссылку на самих себя как на подкаталог (а такая ситуация возможна только с каталогами). Внутри системы каталоги считаются особой разновидностью файлов, поэтому я ставлю в данном случае кавычки.

user$ echo */.

Проблемы с ^.окончанием



Тот факт, что обработкой джокерных символов занимается не какая-либо программа, а сама оболочка, таит в себе не только преимущества, но и недостатки. Например, как оказывается, невозможно произвести поиск ТЕХ-файлов в подкаталогах с помощью команды Is -R *.tex (параметр -R для команды ls вызывает рекурсивный поиск по подкаталогам).

Причина этого проста: оболочка расширяет схему *.tex для текущего каталога и передает список найденных файлов к ls. Эта команда выводит информацию по данным файлам. Если у вас нет каталогов с окончанием *.tex, то команда ls завершает работу. В данном случае не поможет даже параметр -R. Рекурсивный поиск будет применен только к тем каталогам, имена которых были переданы в качестве параметра.

В Linux для поиска по файлам предусмотрена гораздо более гибкая команда find. В следующем примере показан список всех ТЕХ-файлов в текущем каталоге и во всех его подкаталогах.

user$ find. -name '*.tex'

Переименование файлов



К сожалению, в Linux нельзя переименовать все файлы *.x в файлы *.y с помощью команды mv *.x *.y. Причина такого ограничения такая же, как и в вышеописанных случаях: оболочка заменяет запись *.x списком всех файлов, соответствующих данной схеме. Для *.y соответствующие имена файлов отсутствуют. При этом команде mv передается список из нескольких файлов и выражение *.y — в этом случае mv «не знает», что делать с такими аргументами.

Вот конкретный пример: предположим, что в текущем каталоге находятся только файлы markus.x, peter.x и ulrike.x. Если выполнить в данном случае команду mv *.x *.y, то оболочка заменит схему *.x тремя файлами, указанными выше. Кроме того, оболочка не найдет файлов, подходящих для *.y, и передаст схему в неизменном виде. Только сейчас будет запущена команда mv. Она получит следующие параметры, с которыми, как и следовало ожидать, будет невозможна любая работа.
user$ mv markus.x peter.x ulrike.x *.y


Даже если передать команде в качестве списка параметров запись markus.x peter.x ulrike.x markus.y peter.y ulrike.y, мы получим не тот результат, который нужен. Команда mv в принципе не может переименовать сразу несколько файлов. В таком случае или несколько файлов будут перемещены в другой каталог, или будет переименован только один файл.

Переименование с помощью sed



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

Коротко опишу принцип работы: команда ls возвращает список файлов, которые необходимо переименовать, и передает их sed. Редактор sed образует вместе с командой s (регулярное нахождение и замена) список cp-команд и, в свою очередь, передает этот список новой оболочке sh, которая, наконец, выполняет команды. Строка, показанная ниже, позволяет скопировать все файлы *.xxx в *.yyy.

user$ ls *.xxx | sed 's/\(.*\)\.xxx$/cp & \1.yyy/' | sh


Еще одна альтернатива — написать небольшой цикл. С помощью приведенной ниже команды делаются копии всех файлов с расширением *.tex. Эти копии получают окончание tex ~ (окончание ~ часто применяется для обозначения резервных копий).

user$ for i in *.tex; do cp $i $i~; done


Скрытые файлы



Файлы, имя которых начинается с точки, в Linux являются скрытыми, поэтому символ * не позволяет учесть все файлы, находящиеся в каталоге: скрытые файлы (часто ими являются файлы конфигурации, которые должны оставаться невидимыми) игнорируются.

И если вы думаете, что можете включить в выборку все скрытые файлы, поставив подстановочный символ .* вас ожидает серьезная проблема: таким образом в выборку будут включены не только невидимые файлы, имена которых начинаются с ., но и каталоги, названия которых начинаются с. и… (то есть текущий каталог и каталог, находящийся в иерархии на одну ступень выше). Если определенная команда сможет изменить целые каталоги, то последствия могут оказаться катастрофическими.

Эту проблему можно обойти, задав схему поиска .[!.]* Она охватывает все имена файлов, первым символом в которых является точка, далее следует минимум один символ, не являющийся точкой, а затем любое количество символов (в том числе ни одного).

user$ echo .[!.]*


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

В данном случае универсальным вариантом является только команда find. Следующая команда находит все скрытые файлы в текущем каталоге, а также во всех его подкаталогах:

user$ find . -name '.*'


Особые виды файлов (файлы-ссылки, файлы-устройства)



Кроме обычных в Linux различается ряд специфических видов файлов, например каталоги, ссылки, файлы устройств для доступа к компонентам аппаратного обеспечения и т. д. В команде ls -F такие специфические файлы обозначаются дополнительным символом.

<code>user$ ls -lF

... 13. Apr 11:31 bak/

... 11. Apr 12:21 grepalltex*</code>

Читайте так же другие статьи:
Linux

Никакого спама, только обновления!!!

Комментарии (0)


    Услуги по MODX Revolution

    Посмотреть все услуги

    Техническая оптимизация сайта

    Подробнее & Заказать

    Создание сайта на MODX Revolution

    Подробнее & Заказать

    Перенос сайта на MODX Revolution

    Подробнее & Заказать

    Продвижение сайта на MODX

    Подробнее & Заказать