Разное

С в linux работа с файлами: Команды Linux для работы с файлами

Содержание

Команды Linux для работы с файлами и каталогами (директориями) через терминал

Введение

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

Требования

Cервер с Ubuntu 20.04

Все команды, описанные ниже, будут работать и в других дистрибутивах Linux.

Расположение каталогов в файловой системе

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

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

pwd

Результат выполнения команды выглядит следующим образом:

/home/demo

Домашний каталог располагается после имени учетной записи пользователя, в приведенном примере он называется /demo. Этот каталог находится в каталоге с именем  /home и в каталоге верхнего уровня, который называется root или корневой каталог, поэтому представлен одной косой чертой /.

Просмотр содержимого каталогов

Для просмотра содержимого каталога используется команда ls. Название этой команды является сокращением слов list files.

Просмотреть содержимое любой директории можно следующими способами:

ls имя_директории

Либо введя команду:

ls /путь _к _директории

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

dir1 file1  file2  file3

К команде ls можно добавлять дополнительные флаги, например, чтобы показать детализированное представление (права, список владельцев файлов или папок, размер, дату последнего модифицирования) файлов и директорий в текущей директории, можно использовать флаг -l:

ls -l

Результат выполнения команды:

total 16
drwxr-xr-x 2 home demo 4096 Nov  3 17:40 dir1
-rw-r--r-- 1 home demo   13 Nov  8 17:17 file1
-rw-r--r-- 1 home demo   42 Nov  9 13:04 file2
-rw-r--r-- 1 home demo  42 Nov  10 13:04 file3

Для просмотра списка всех файлов, включая скрытые файлы и каталоги, вы можете добавить флаг -a:

ls -a

Результат выполнения команды:

.        dir1        file1           .mysql_history  .ssh
..      .bash_history  file2   file3  .nan

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

ls -F

Результат выполнения команды:

dir1/   file1  file2  file3

Перемещение между каталогами

Для перехода в домашний каталог используется команда cd. Название этой команды является сокращением слов change directory.

Для перехода в домашний каталог пользователя user используется команда:

cd ~user

Для перехода в предыдущую директорию, в которой мы находились до перехода в текущую директорию также используется команда cd.

В Linux-системах каждый файл и каталог находятся в самой верхней директории, которая называется «корневой» и обозначается одним символом слэш /.

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

Каждый абсолютный путь должен начинаться с косой черты — символа слэш /.

Для перехода в директорию уровнем выше используется команда:

cd ..

Для перехода в директорию двумя уровнями выше:

cd ../..

Операции с файлами и каталогами

У каждой команды имеется множество параметров, чтобы узнать их, наберите команду и параметр —help, например:

ls --help

Далее приведен список основных команд навигации в консоли Linux.

Создание

Создание файлов производится с помощью команды:

touch имя_файла

Создание каталогов выполняется с помощью команды вида:

mkdir имя_директории

Название этой команды является сокращением слов make directory.

Создание двух каталогов одновременно выполняется с помощью команды:

mkdir   имя_директории_1   имя_директории_2

Для создания дерева каталогов используется команда следующего вида:

mkdir -p  /имя_директории_1/имя_директории_2

Удаление

Для удаления директорий используется команда rmdir имя_директории. Название этой команды является сокращением слов remove directory.

Для удаления файлов используется команда rm. Например, для удаления файла с именем file1 используется команда:

rm file1

Команда rm также позволяет удалять не только файлы, но и каталоги.

Для удаления директории с именем dir1 со всеми подкаталогами и файлами используется опция -r (от слова recursive):

rm -r dir1    

Можно удалить одновременно две директории со всем их содержимым:

rm -r  имя_директории_1   имя_директории_2

Также можно использовать параметр -f, который означает, что при удалении не будет запрашиваться подтверждение.

Команда для удаления файла будет выглядеть так:

rm -f file1

Команда для удаления каталога:

rm -rf dir1

Перемещение

Для перемещения и переименования файлов и каталогов используется команда mv. Название этой команды является сокращением слова move.

Переименовать файл можно с помощью команды:

mv имя_файла новое_имя

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

mv имя_файла путь/

Копирование

Для копирования используется команда cp. Название этой команды является сокращением слова copy.

Чтобы скопировать файл file1 и назвать его file2, используется команда:

cp file1 file2

Для того чтобы копировать директорию dir1 в директорию dir2, используется команда:

cp -a dir1/ dir2/

Скопировать файл с именем file1 в директорию с именем dir1, можно с помощью команды:

cp file1 dir1/ 

Редактирование файлов

Мы ознакомились с основными командами для работы с каталогами и файлами.

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

Команда nano позволяет работать в одном из самых простых текстовых редакторов командной строки Linux, который занимает весь терминал в течение всего срока его использования. C Cancel

Вы можете нажать клавишу Y, чтобы сохранить изменения, клавишу N для отмены изменений и выхода, или сочетание клавиш CTRL-C, чтобы отменить операцию выхода из режима редактирования файла.

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

Нажмите клавишу ENTER, чтобы сохранить файл и выйти из редактора.

Заключение

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

Работа с файлами в Linux

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

Как создать каталог

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

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

Чтобы создать папку, введите команду mkdir (сокращение от make directory — создать каталог). 

mkdir [параметры] <каталог>

Эту команду можно запустить без параметров, указав только папку, и тогда она создаст его.

1. [email protected]: pwd
2. /home/karpaff
3. [email protected]: 
4. [email protected]: ls
5. bin Documents public_html
6. [email protected]: 
7. [email protected]: mkdir linuxtutorialwork
8. [email protected]: 
9. [email protected]:
ls
10. bin Documents linuxtutorialwork public_html

Давайте разберемся:

  • Строка 1. Убедимся, что уже не находимся там, где хотим быть. В приведенном выше примере мы находимся в домашнем каталоге. 
  • Строки 2. Перечисляем, что уже есть в нашем каталоге.
  • Строка 7. Запускаем команду mkdir и создаем каталог linuxtutorialwork. В этом каталоге мы будем работать в этой серии статей. 

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

  • mkdir /home/karpaff/foo
  • mkdir . /blah
  • mkdir ../dir1
  • mkdir ~/linuxtutorialwork/dir2

Для mkdir

есть еще несколько полезных параметров. Вспомните: где найти параметры командной строки, которые поддерживает конкретная команда?

Первый параметр -p, он позволяет создать родительские каталоги. 

[email protected]: mkdir -p linuxtutorialwork/foo/bar
[email protected]:
[email protected]: cd linuxtutorialwork/foo/bar
[email protected]: pwd
/home/karpaff/linuxtutorialwork/foo/bar

Второй параметр -v, он поэтапно выводит на экран процесс работы команды mkdir.

[email protected]: mkdir -pv linuxtutorialwork/foo/bar
[email protected]: mkdir: created directory 'linuxtutorialwork/foo'
[email protected]: mkdir: created directory 'linuxtutorialwork/foo/bar'
[email protected]:
[email protected]: cd linuxtutorialwork/foo/bar
[email protected]: pwd
[email protected]: /home/ryan/linuxtutorialwork/foo/bar

Как удалить каталог

Удалить каталог тоже легко. Учтите, что в командной строке Linux нельзя отменять действия, в том числе — удаление. Следите за тем, что вы делаете. 

Для удаления папки используется команда rmdir, сокращение от remove directory (удалить каталог). 

rmdir [параметры] <каталог>

Следует отметить два момента. Во-первых, rmdir поддерживает параметры -v и -p, они работают так же, как и с командной mkdir. Во-вторых, удалять можно только пустые каталоги. Позже мы посмотрим, как это можно обойти. 

[email protected]: rmdir linuxtutorialwork/foo/bar
[email protected]:
[email protected]: ls linuxtutorialwork/foo

Как создать пустой файл

Если попытаться обратиться к несуществующему файлу, Linux автоматически создаст его. Это очень удобно. Этой особенностью можно воспользоваться, чтобы создавать пустые файлы — с помощью команды touch.

touch [параметры] <имя_файла>

[email protected]: pwd
[email protected]: /home/karpaff/linuxtutorialwork
[email protected]:
[email protected]: ls
foo
[email protected]:
[email protected]: touch example1
[email protected]:
[email protected]: ls
example1 foo

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

Как скопировать файл или папку

Часто перед тем, как что-то изменить, нам нужно создать копию, чтобы не потерять оригинал на случай, если что-то пойдет не так.  

Для копирования файла или папки используется команда cp, сокращение от copy (скопировать).

cp [параметры] <источник> <место_назначения>

Для команды cp доступно несколько параметров. Вы можете узнать о них в руководстве. Один из них мы разберем чуть ниже. 

[email protected]: ls
[email protected]:
example1 foo
[email protected]:
[email protected]: cp example1 barney
[email protected]: ls
barney example1 foo

Обратите внимание, что и источник, и место назначения — это пути. Мы можем использовать как абсолютные, так и относительные пути. Вот несколько примеров:

  1. cp /home/karpaff/linuxtutorialwork/example2 example3
  2. cp example2 ../../backups
  3. cp example2 ../../backups/example4
  4. cp /home/karpaff/linuxtutorialwork/example2 /otherdir/foo/example5

Когда мы используем команду cp, местом назначения может быть путь к файлу или каталогу. Если это файл (примеры 1, 3 и 4), команда создаст копию источника, но назовет копию именем файла, указанным в месте назначения. Если в качестве места назначения будет указана каталог, команда скопирует файл в этот каталог, и копия будет иметь такое же имя, как и у источника.

По умолчанию cp будет копировать только файл. Есть способ скопировать несколько файлов за один раз, мы познакомимся с ним позже. 

С помощью параметра -r (сокращение от recursive — рекурсивный) можно копировать каталоги. «Рекурсивный» значит, что команда просмотрит каталог и все файлы и каталоги в нем, зайдет в подкаталоги и сделать в них то же самое.

[email protected]: ls
barney example1 foo
[email protected]: cp foo foo2
cp: omitting directory 'foo'
[email protected]: cp -r foo foo2
[email protected]: ls
barney example1 foo foo2

В приведенном выше примере любые файлы и подкаталоги в каталоге foo также будут скопированы в foo2.

Как переместить файл или каталог

Для перемещения файлов используется команда mv, сокращение от move (переместить). Она работаете так же, как cp. Чтобы перемещать каталоги, необязательно указывать параметр -r

mv [параметры] <источник> <место_назначения>

1. [email protected]: ls
2. barney example1 foo foo2
3. [email protected]: mkdir backups
4. [email protected]: mv foo2 backups/foo3
5. [email protected]: mv barney backups/
6. [email protected]: ls
7. backups example1 foo

Давайте разберемся:

  • Строка 3. Создаем новый каталог под названием backups.
  • Строка 4. Перемещаем подкаталог foo2 в каталог backups и переименовываем его в foo3.
  • Строка 7.
    Перемещаем файл barney в каталог backups. Поскольку мы не указали имя места назначения, оно осталось тем же.

Обратите внимание, что снова источник и место назначения являются путями и могут быть как абсолютными, так и относительными.

Как переименовать файл или каталог

Теперь, как и в случае с командой touch, мы можем использовать базовое поведение команды mv для достижения несколько иного результата. 

Обычно mv используется для перемещения файла или каталога в новый каталог. Но как вы видели в строке 4, мы можем указать новое имя для файла или каталога, и команда mv переименует его, пока будет перемещать. 

1. [email protected]: ls
2. backups example1 foo
3. [email protected]: mv foo foo3
4. [email protected]: ls
5. backups example1 foo3
6. [email protected]: cd ..
7. [email protected]: mkdir linuxtutorialwork/testdir
8. [email protected]: mv linuxtutorialwork/testdir /home/ryan/linuxtutorialwork/fred
9. [email protected]: ls linuxtutorialwork
10. backups example1 foo3 fred

Давайте разберемся:

  • Строка 3. Переименовываем файл foo в foo3 (оба пути относительны).
  • Строка 6. Переходим в родительский каталог. Это позволит в следующей строке проиллюстрировать, что мы можем запускать команды для файлов и каталогов, даже если мы в настоящее время не находимся в каталоге, в котором они лежат.
  • Строка 8. Переименовываем каталог testdir в fred (исходный путь был относительным, а конечный — абсолютным).

Как удалить файл

Как и в случае с rmdir, удаление файла — это действие, которое нельзя отменить, поэтому будьте осторожны. 

Для удаления файла используется команда rm, сокращение от remove (удалить).

rm [параметры] <файл>

[email protected]: ls
backups example1 foo3 fred
[email protected]: rm example1
[email protected]: ls
backups foo3 fred

Как удалить непустой каталог

У команды rm есть несколько параметров, которые изменяют его поведение. Почитать о них вы можете в руководстве командной строки. 

Здесь мы разберем полезный параметр -r. Когда мы запускаем команду rm с этим параметром, она удаляет не только каталог, но и все его содержимое: файлы и подкаталоги.

[email protected]: ls
backups foo3 fred
[email protected]: rmdir backups
rmdir: failed to remove 'backups': Directory not empty
[email protected]: rm backups
rm: cannot remove 'backups': Is a directory
[email protected]: rm -r backups
[email protected]: ls
foo3 fred

Параметр -r можно сочетать с параметром -i (сокращение от interactive — интерактивный). В этом случае вы сможете подтверждать удаление каждого файла и отменить команду. 

Что нужно запомнить

Команды

mkdir
Создать каталог. 

rmdir
Удалить каталог.

touch
Создать пустой файл.

cp
Скопировать файл или каталог.

mv
Переместить файл или каталог. Можно использовать для переименования. 

rm
Удалить файл.

Идеи

Нельзя отменить
В командной строке Linux нет возможности отменить действие. Поэтому 7 раз подумайте, прежде чем что-то удалить.

Параметры командной строки
У большинства команд есть много полезных параметров командной строки. Всегда смотрите, какие параметры доступны для той или иной команды, в руководстве. 

Практические задания

    1. Создайте каталога в вашем домашнем каталоге, в котором можно поэкспериментировать.
    2. В этом каталоге создайте несколько файлов и подкаталогов (а также файлов и каталогов в этих подкаталогах).
    3. Теперь переименуйте несколько файлов и каталогов.
    4. Удалите один из каталогов, в котором есть другие файлы и каталоги.
    5. Вернитесь в свой домашний каталог и скопируйте оттуда файл из одного из своих подкаталогов в исходный каталог, который вы создали.
    6. Переместите этот файл обратно в другой каталог.
    7. Переименуйте несколько файлов.
    8. Переместите файл и одновременно переименуйте его.
    9. Посмотрите на существующие каталоги в вашем домашнем каталоге. У вас, вероятно, есть каталог «Документы», «Загрузки», «Музыка» и «Изображения» и т. д. Подумайте, какие другие каталоги могут помочь вам организовать вашу систему, и создайте их.

Как работать с файлами и папками в интерпретаторе bash 💲

Содержание:

  • Работа с файлами и каталогами
  • Команды для каталогов
  • Команды для файлов
  • Перенаправление данных
  • Генерация имён файлов в Bash

Bash (Bourne Again Shell) — это командная оболочка, использующаяся в таких UNIX-системах, как Linux или MacOS. Она позволяет управлять компонентами ОС с помощью определённых запросов, которые вводятся в консоль или берутся из скрипта.

Как новичкам, так и опытным пользователям будет полезно узнать или вспомнить основные команды Bash для управления такими важными аспектами системы, как файлы и каталоги. Этот вопрос будет разобран на примере ОС Linux.

Работа с файлами и каталогами

Работа с файлами и каталогами в Linux через Bash осуществляется с учетом иерархического принципа их классификации. Иерархическая структура файловой системы Linux напоминает «дерево». Существует корневой каталог, который является начальным для всей ОС, а в нём, соответственно, масса других подкаталогов.

Такой же принцип используется для командной строки. Файлы и каталоги берут начало из корневого узла «/», который является начальной точкой для всех элементов.

Ниже представлен стандартный перечень подкаталогов, встречающийся в большинстве UNIX-систем.

Каталог Содержимое
/bin Бинарные версии файлов (в том числе для командной оболочки).
/dev Псевдофайлы, представляющие собой аппаратные средства, подключённые к устройству.
/etc Большая часть конфигурационных файлов.
/lib Библиотеки для системных приложений.
/opt Необязательные компоненты системы или приложения.
/tmp Временные файлы.
/usr Пользовательские компоненты.
/var Файлы приложений (в том числе системные журналы, кэши и т. д.).

Команды для каталогов

Существуют конкретные команды, предназначенные для работы с каталогами. Далее будут приведены самые важные из них.

Список основных команд

  • pwd — вывод полного пути к текущему каталогу.
  • cd — переход с текущего каталога на домашний пользовательский.
  • cd dirname — перейти в папку «dirname».
  • cd / — переход по директориям относительно корневого каталога.
  • ls — просмотреть список файлов в каталоге.
  • ls -d */ — просмотреть список папок в текущем каталоге.
  • ls dirname — вывод содержимого каталога «dirname» на экран.
  • mkdir dirname — создать папку с наименованием «dirname».
  • rmdir dirname — удалить папку «dirname».
  • rm -rf dirname — удалить папку «dirname» с её содержимым (опция -r) без предупреждения пользователя (опция -f).
  • du -h dirname — размер папки «dirname».

Помимо этого, существуют полезные сокращения. Например, текущая директория обозначается с помощью «.». Знак «..» позволяет задействовать родительский каталог. Для представления домашней директории используется «~».

Пример использования сокращений:

[email protected]:~/dirname/files# cd ..  # переход в родительский (предыдущий) каталог 
[email protected]:~# du -h .               # вывод данных о размере текущего каталога и его элементов
4,0K    ./files
8,0K    .
[email protected]:~/dirname# cd ~         # переход в домашний каталог
[email protected]:~#

Команды для файлов

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

Список основных команд

  • touch file — создать файл.
  • realpath file — узнать абсолютный путь к файлу.
  • stat file1 — получение информации о «file1» (размер файла, дата создания файла и т. д.) и проверка существования файла.
  • cat > file — запись в файл.
  • cat file — чтение файла.
  • echo текст >> file — дописать в файл текст.
  • find file — поиск файла.
  • mcedit file — редактирование файла (также можно использовать редакторы Nano, Vim и другие).
  • cat file1 file2 > file12 — объединение файлов.
  • sh filename — запустить файл со сценарием Bash.
  • ./filename — запустить исполняемый файл.
  • cp file1 file2 — копировать файл «file1» с переименованием на «file2». Произойдёт замена файлов, если элемент с таким же названием существует.
  • mv file1 file2 — переименовать файл «file1» в «file2».
  • mv filename dirname — переместить файл «filename» в каталог «dirname».
  • less filename — открыть файл в окне терминала.
  • file filename — определение типа файла.
  • head filename — вывод нескольких начальных строк из файла на экран (построчное чтение файла). По умолчанию строк 10.
  • tail filename — вывод нескольких конечных строк из файла на экран.
  • diff file1 file2 — сравнение файлов.
  • grep text filename — поиск и вывод строк из файла, содержащих «text».
  • rm filename — удалить файл.

Подробную информацию об утилитах можно получить, воспользовавшись справочной службой: «man <название утилиты>».

Пример получения справки по работе с программой rm: «man rm».

Перенаправление данных

Перенаправление ввода-вывода в файл осуществляется с помощью специальных знаков. Для вывода используются «>» и «>>», а для ввода — «<».

Пример вывода «ls» в файл, а не на экран:

[email protected]:~# ls > files.txt
[email protected]:~# cat files.txt
file1.cpp sample.txt

Новый файл создаётся автоматически. В случае существования элемента с таким же наименованием, произойдёт перезапись. Чтобы этого избежать, необходимо использовать «>>». Тогда данные будут дописываться в документ.

Пример ввода, при котором информация выносится из файла с помощью команды «sort»:

[email protected]:~# echo text > file.txt
[email protected]:~# sort < file.txt
text

Генерация имён файлов в Bash

Иногда пользователю приходится работать с несколькими файлами одновременно, например, при выполнении переноса документов в другой каталог. Это станет проблемой, если элементов десятки или сотни и среди них нужно отобрать определённые.

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

Итак, теперь остаётся разобраться с вопросом составления шаблонов. Сейчас будут приведены основные конструкции для осуществления генерации имён. Чаще всего для отбора файлов применяется символ: «*». В случае использования этого знака в чистом виде, Bash выберет все элементы в каталоге без исключений.

[email protected]:~# ls *
document1.docx document2.docx document3.txt file1.txt file2.docx file3.txt

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

[email protected]:~# ls file* 
file1.txt file2.docx file3.txt

Символ звёздочки позволяет командному интерпретатору выделить все файлы, начинающиеся с «file». При этом последующая часть наименования будет проигнорирована.

Знак «*» можно использовать также в начале или с обеих сторон шаблона.

Кроме того, сгенерировать имена можно, взяв за основу расширение файла. Например:

[email protected]:~# ls .txt*
document3.txt file1.txt file3.txt

Работа с файлами

Работа с файлами

Пред. Начало След.
Наверх
Сведения о документе

Текущий каталог

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

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


[[email protected] methody]$ pwd
/home/methody
[[email protected] methody]$

Пример 1. Текущий каталог: pwd

pwd (аббревиатура от print working directory) возвращает полный путь текущего каталога командной оболочки, естественно, именно той командной оболочки, при помощи которой была выполнена команда pwd. В данном примере текущим является каталог «/home/methody».

Текущий каталог, каков бы ни был полный путь к нему, всегда имеет ещё одно обозначение, «.», которое можно использовать, если по каким-то причинам требуется, чтобы даже в относительном пути к файлу, находящемуся в текущем каталоге, присутствовал элемент «имя каталога». Так, пути «text» и «./text» тоже приводят к одному и тому же файлу, однако в первом случае в строке пути не содержится ничего, кроме имени файла.

Отделить путь к файлу от его имени можно с помощью команд dirname и basebane соответственно:


[[email protected] methody]$ basename /home/methody/text
text
[[email protected] methody]$ basename text
text
[[email protected] methody]$ dirname /home/methody/text
/home/methody
[[email protected] methody]$ dirname ./text
.
[[email protected] methody]$ dirname text
.

Пример 2. Использование dirname и basename


Мефодий заметил, что для «text» и «./text» dirname выдало одинаковый результат: «.», что понятно: как было сказано выше, эти формы пути совершенно эквивалентны, а при автоматической обработке результатов dirname гораздо лучше получить «. », чем пустую строку.

Информация о каталоге

В любой момент можно просмотреть содержимое любого каталога при помощи утилиты ls (сокращение от англ. «list» — «список»):


[[email protected] methody]$ ls
-filename-with- text
[[email protected] methody]$

Пример 3. Команда ls

Поданная без параметров, команда ls выводит список файлов и каталогов, содержащихся в текущем каталоге1.

Утилита ls принимает один параметр: имя каталога, содержимое которого нужно вывести. Имя может быть задано любым доступным способом: в виде полного или относительного пути. Кроме параметра, утилита ls «понимает» множество ключей, которые нужны главным образом для того, чтобы выводить дополнительную информацию о файлах в каталоге или выводить список файлов выборочно. Чтобы узнать обо всех возможностях ls, нужно, конечно же, прочесть руководство по этой утилите («man ls»).


[[email protected] methody]$ ls -F /
bin/   dev/  home/  mnt/   root/  swap/  tmp/  var/
boot/  etc/  lib/   proc/  sbin/  sys/   usr/
[[email protected] methody]$

Пример 4. Команда ls -F

В примере использован ключ-F, чтобы отличать файлы от каталогов. При наличии этого ключа ls в конце имени каждого каталога ставит символ «/», чтобы показать, что в нём может содержаться что-то ещё. В выведенном списке нет ни одного файла — в корневом каталоге содержатся только подкаталоги.

Кроме того, можно получить более подробную информацию о содержимом каталога:


[[email protected] methody]$ ls -aF
-filename-with-  .bash_history  .bashrc  .lpoptions  .rpmmacros    Documents/
./               .bash_logout   .emacs   .mutt/      .xemacs/      text
../              .bash_profile  .i18n    .pinerc     .xsession.d/  tmp/
[[email protected] methody]$

Пример 5. Команда ls -aF

Внезапно обнаружилось, что файлов в домашнем каталоге не два, а гораздо больше. Дело в том, что утилита ls по умолчанию не выводит информацию об объектах, чьё имя начинается с «.» — в том числе о «.» и «..». Для того, чтобы посмотреть полный список содержимого каталога, и используется ключ «-a» (all)2. Как правило, с «.» начинаются имена конфигурационных файлов и конфигурационных каталогов.

«..» — это ссылка на родительский каталог. Родительский каталог — это тот каталог, в котором находится данный. Родительским каталогом для «/home/methody» будет каталог «/home»: он получается просто отбрасыванием последнего имени каталога в полном пути. Иначе можно сказать, что родительский каталог — это один шаг по дереву каталогов по направлению к корню. «..» — это сокращённый способ сослаться на родительский каталог: пока текущим каталогом является «/home/methody», относительный путь «..» (или, что то же самое, «./..») будет эквивалентен «/home». С использованием «..» можно строить сколь угодно длинные пути, такие как «../../usr/../var/log/../run/../../home»3. Ссылки на текущий и на родительский каталог обязательно присутствуют в каждом каталоге в Linux. Даже если каталог пуст, т. е. не содержит ни одного файла или подкаталога, команда «ls -a» выведет список из двух имён: «.» и «..».

Перемещение по дереву каталогов

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


[[email protected] methody]$ cd /home
[[email protected] home]$ ls
methody  shogun
[[email protected] home]$ cd methody
[[email protected] methody]$ 

Пример 6. Смена текущего каталога

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


[[email protected] methody]$ cd ..
[[email protected] home]$ cd ~
[[email protected] methody]$ cd ~shogun
[[email protected] shogun]$ cd
[[email protected] methody]$

Пример 7. Переход в родительский и в домашний каталог

При помощи символа «~» можно ссылаться и на домашние каталоги других пользователей: «~имя пользователя». Команда cd, поданная без параметров, эквивалента команде «cd ~» и делает текущим каталогом домашний каталог пользователя.

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

Для этого используется утилита mkdir. Она используется с одним обязательным параметром: именем создаваемого каталога. По умолчанию каталог будет создан в текущем каталоге.


[[email protected] methody]$ mkdir examples
[[email protected] methody]$ ls -F
-filename-with-  Documents/  examples/  text  tmp/
[[email protected] methody]$ 

Пример 8. Создание каталога


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

Для перемещения файлов и каталогов предназначена утилита mv (сокращение от англ. «move» — «перемещать»). У mv два обязательных параметра: первый — перемещаемый файл или каталог, второй — файл или каталог назначения. Имена файлов и каталогов могут быть заданы в любом допустимом виде: при помощи полного или относительного пути. Кроме того, mv позволяет перемещать не только один файл или каталог, а сразу несколько. За подробностями о допустимых параметрах и ключах следует обратиться к руководству по mv.


[[email protected] methody]$ cd examples
[[email protected] examples]$ mv ../text .
[[email protected] examples]$ ls
text
[[email protected] examples]$ 

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

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

Иногда требуется создать копию файла: для большей сохранности данных, для того, чтобы создать модифицированную версию файла и т. п. В Linux для этого предназначена утилита cp (сокращение от англ. «copy» — «копировать»). Утилита cp требует присутствия двух обязательных параметров: первый — копируемый файл или каталог, второй — файл или каталог назначения. Как обычно, в именах файлов и каталогов можно использовать полные и относительные пути. Есть несколько возможностей при комбинации файлов и каталогов в параметрах cp — о них можно прочесть в руководстве.


[[email protected] examples]$ cp text text.bak
[[email protected] examples]$ ls
text  text.bak

Пример 10. Копирование файлов

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

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

В Linux для удаления файлов предназначена утилита rm (сокращение от англ. «remove» — «удалять»).


[[email protected] methody]$ rm examples/text 
[[email protected] methody]$ ls examples
test.bak

Пример 11. Удаление файла

Однако удалить командой rm каталог не получится:


[[email protected] methody]$ rm examples 
rm: невозможно удалить `examples': Is a directory
[[email protected] methody]$ rmdir examples
rmdir: examples: Directory not empty
[[email protected] methody]$ rm examples/test.bak
[[email protected] methody]$ rmdir examples
[[email protected] methody]$ 

Пример 12. Удаление каталога

Для удаления каталогов предназначена другая утилита — rmdir (от англ. «remove directory»). Впрочем, rmdir согласится удалить каталог только в том случае, если он пуст: в нём нет никаких файлов и подкаталогов. Удалить каталог вместе со всем его содержимым можно командой rm с ключом «-r» (recursive). Команда rm -r каталог — очень удобный способ потерять в одночасье все файлы: она рекурсивно4 обходит весь каталог, удаляя всё, что попадётся: файлы, подкаталоги… а ключ «-f» (force) делает её работу ещё неотвратимее, так как подавляет запросы вида «удалить защищённый от записи файл», так что rm работает безмолвно и безостановочно.


Помните: если вы удалили файл, значит, он уже не нужен, и не подлежит восстановлению!

В Linux не предусмотрено процедуры восстановления удалённых файлов и каталогов. Поэтому стоит быть очень внимательным, отдавая команду rm и, тем более, rm -r: нет никакой гарантии, что удастся восстановить случайно удалённые данные. Узнав об этом, Мефодий не огорчился, но подумал, что впредь будет удалять только действительно ненужные файлы, а всё сомнительное — перемещать с помощью mv в подкаталог ~/tmp, где оно не будет мозолить глаза, и где можно периодически наводить порядок.


1Вот пример утилиты, которая по умолчанию работает с файлами в текущем каталоге.

2Такое поведение ls напоминает принцип работы файловых менеджеров со скрытыми файлами в системах dos/win. Разница в том, что в dos/win скрытые файлы предусмотрены файловой системой — файл может иметь атрибут «скрытый» и при этом называться как угодно. В Linux скрытые файлы — это не свойство файловой системы, а только соглашение по наименованию файлов.

3Не сразу понятно, что приводит этот путь всё туда же, в «/home».

4«Рекурсивно» по отношению к каталогам обозначает, что действие будет произведено над самим каталогом, его подкаталогами, подкаталогами его подкаталогов и т. д.

Пред. Начало След.
Наверх
Сведения о документе

Работа с файлами в каталоге при помощи циклов