Лекция
Сразу хочу сказать, что здесь никакой воды про регулярные файлы, и только нужная информация. Для того чтобы лучше понимать что такое регулярные файлы, линки , настоятельно рекомендую прочитать все из категории Операционная система LINUX.
регулярные файлы - это объекты файловой системы, которые содержат данные. Другими словами это обычные файлы с которыми вы привыкли имеет дело: текстовые файлы, музыкальные композиции, рисунки, видео-файлы - все это регулярные файлы. Просмотреть содержимое таких файлов можно командами cat, less. Создать файл можно несколькими способами.Первый способ - это с помощью команды touch. На самом деле основное назначение этой команды это изменять время доступа и изменения файла. Выполните команду ls -l в вашем домашнем каталоге. В шестом столбце указаны даты последнего изменения файлов. Выберите файл с датой отличной от текущей и выполните команду touch имя вашего файла (возможно нужно будет выполнить команду от пользователя root). Теперь снова ls -l и увидите, что дата изменилась на текущую. У команды touchесть небольшое “побочное” действие. Если ей в качестве параметра передать имя несуществующего файла, то она все равно выполнит, то что от нее просят (изменит время), а так как файла нет, то она его создаст. Выполните команду touch с именем несуществующего файла и по команде ls убедитесь, что он есть. Файл будет создан пустым. Редактировать такой файл можно любым текстовым редактором (vim, nano). Еще один способ это передать какой-либо текст в файл следующим образом echo Hello world! > test.txt. В результате выполнения этой команды будет создан файл с именем test.txt с содержимым Hello world! Таким образом в файл можно перенаправить результат выполнения любой команды. Например, команда ls > list.txt создаст файл list.txt в котором будет содержаться перечень содержания текущего каталога. Еще один способ - это при помощи любого текстового редактора.
Правила именования файлов. Первое, что необходимо четко уяснить и запомнить: Linux (в отличии от Windows) в именах файлов учитывает регистр букв. То есть Test, test, tEst, TEST - это все будут разные файлы. Вторая отличительная (от Windows) особенность, это расширение файла. В Linux его просто нет. Точка в имени файла это такой же символ как и другие. Создавая командой touch файлы с именами test.txt, test.doc или test.jpg мы все равно создадим текстовый файл. Расширения больше нужны для кроссплатформенных приложений, чтобы те находили “свои” файлы.
Очень важным является вопрос какие символы можно использовать для имен файлов, а какие нельзя. Этому вопросу можно было бы уделить пол-лекции, так как существует довольно много вариантов когда те или иные символы можно или нельзя использовать. Я предлагаю запомнить следующее: в именах файлов всегда можно использовать следующие символы: цифры, буквы (лучше латиницу), точка, знак подчеркивания. Набора этих символов вполне достаточно, чтобы называть ваши файлы. Поэтому я намеренно не буду указывать какие символы использовать нельзя. Просто помните какие можно и используйте их. Любопытные могут найти дополнительную информацию в Интернете. Длина имени файла 255 байт.
Для того чтобы переименовать или перенести файл существует команда mv (сокращенно от move). Вот несколько примеров использования этой команды:
mv test.txt text.tst - переименование файла test.txt в text.tst в текущем каталоге.
mv /home/igor/docs/test /home/igor/docs/text - переименование файла test в каталоге/home/igor/docs/
mv test1.txt ./docs/ - перенести файл test1.txt в каталог /docs/
Для копирования файлов используется команда cp (сокращенно от copy). Форма ее схож с командой mv. Несколько примеров.
cp test ./docs/ - копируем файл test в каталог ./docs
cp ./docs/test1.txt . - копирование файла test1.txt в текущий каталог (обратите внимание на точку в конце команды).
Пришло время объяснить, что обозначает точка в приведенных примерах. Если вы для любого каталога выполните команду ls -a (ключ а позволяет отобразить скрытые файлы), то всегда вверху увидите два символа: .- точка и .. - две подряд идущие точки. Это тоже названия каталогов. Точка обозначает текущий каталог, а две точки обозначает родительский каталог. Вы можете выполнить команду ls .. и посмотреть список файлов родительского каталога для текущего. Для перемещения по каталогам используется команда cd. Набрав командуcd /boot/grub/ вы переместитесь в каталог grub, который находятся в каталоге boot. По команде cd .. , вы перейдете родительский для каталог для текущего, то-есть в boot. Таким образом можно по команде cd ..перемещаться вверх по дереву файловой системы. Чтобы перейти в свой домашний каталог нужно набрать команду cd ~ (”тильда” - означает домашний каталог). Перейдите теперь в каталог /usr (cd /usr/). Об этом говорит сайт https://intellect.icu . Выполните команду ls. В каталоге среди прочих присутствует каталог /bin. Как посмотреть его содержимое? Набрав, ls /bin- вы отобразите содержимое каталога /bin, который находится в корне операционной системы. Нужно либо указать полный путь: ls /usr/bin/ или написать следующим образом ls ./bin/ . Если бы не было этих спец-имен, то команду cp ./docs/test1.txt . пришлось бы писать следующим образом: cp /home/igor/docs/test1.txt /home/igor/ .
Удаление файлов. Здесь нужно быть предельно внимательным и приучить себя к мысли, что никаких “корзин” вLinux нет и удаляя файл, вы удаляете его навсегда. Поэтому прежде чем, что-то удалять подумайте не один, а два раза, а то и три. Для удаления файлов существует команда rm. Команда универсальная в том смысле, что позволяет удалять все типы файлов. Формат простой: rm [ключи] имя файла. Самый важный ключ этой команды это -i. С этим ключом команда спросит вас действительно ли вы хотите выполнить удаление. Без этого ключа команда удалит файл без вопросов. Создайте несколько файлов и попробуйте их удалить с ключом i и без него. Если в вашем дистрибутиве команда rm без ключей выдает запрос, значит используется механизм алиасов. Если вы не хотите получать запрос на удаление, то команду rm необходимо выполнить с ключом -f. Но об этом позже. Чтобы удалить директорию необходимо команду rm использовать с ключом -r. Также для удаления директории существует команда rmdir.
Теперь давайте рассмотрим как операции удаления, копирования и перемещения можно выполнять для группы файлов. Для этого необходимо использовать символы групповых операций. Создайте у себя в домашнем каталоге, подкаталог temp (cd ~; mkdir temp), перейдите в него (cd ~/temp/) и создайте несколько файлов:touch file1.txt file2.txt file3.txt; touch file1.jpg file2.jpg file3.jpg; touch abcd asdf azxs adcd .
Теперь подробнее о символах групповых операций. Символ * - обозначает любое количество любых символов. Для проверки будем использовать команду ls с соответствующими символами.
ls *.jpg - в результате будут отображены все файлы которые заканчиваются на .jpg . Результат: file1.jpg file2.jpg file3.jpg .
ls file* - будут отображены все файлы, которые начинаются на file. Результат: file1.jpg file1.txt file2.jpg file2.txt file3.jpg file3.txt .
Символ ? - заменяет любой один символ.
ls a?cd - результатом будут все файлы состоящие из 4-х символов, первый - a, третий, четвертый - cd, а второй может быть любым. Результат: abcd adcd .
[] - в квадратных скобках можно задавать определенные символы или диапазон символов.
ls [abcd][abcd]* - результатом будут все файлы первый и второй символ которых a, b, c или d. Результат: abcd adcd.
ls *[23]* - результатом будут все файлы в которых есть цифра 2 или 3. Результат: file2.jpg file2.txt file3.jpg file3.txt .
ls file[1-3]* - результатом будут все файлы начинающиеся на file у которых далее идет цифра из диапазона 1-3. Результат: file1.jpg file1.txt file2.jpg file2.txt file3.jpg file3.txt .
Я не случайно показал работу с символами групповых операций на примере команды ls. Рекомендую на начальном этапе изучения Linux при использовании групповых операций (или шаблонов) для команды rmиспользовать команду ls для проверки того, что вы будете удалять. Создайте в нашем каталоге ./temp/ еще несколько файлов touch file1txt file2txt file3txt file4txt file5txt . Теперь допустим вы хотите удалить созданные только, что файлы. Для этого можно воспользоваться командой rm file[1-5]*txt . Но эта команда удалит не только файлы file1txt file2txt file3txt file4txt file5txt , но и файлы file1.txt file2.txt file3.txt ! А это нам совсем не нужно. Выполнив команду ls file[1-5]*txt вы увидите, что данный шаблон затрагивает и нужные файлы. И команду нужно выполнить как rm file[1-5]txt . Не ленитесь проверять ваши шаблоны, пока не будете чувствовать себя уверенно в их написании.
линки (links)
Линки - это также особый тип файлов в Linux как каталоги или файлы-устройства. Есть два типа линков:симолические линки (symbolic link) и жесткие линки (hard link). Символический линк - это файл внутри которого содержится путь к объекту файловой системы. Создается символический линк при помощи команды ln с ключом -s .
ln -s путь к объекту имя линка
Перейдите в домашний каталог (cd ~) и выполните команду mkdir -p ./object/folder1/folder2/folder3 . Команда mkdir с ключом -p позволяет создать несколько вложенных каталогов. Создайте файл touch ./object/folder1/folder2/folder3/myfile . А теперь создайте символический линк на созданный файл:
1
|
ln -s ./object/folder1/folder2/folder3/myfile mylink
|
Выполните команду ls -l и найдите созданный символический линк - mylink. Вы должны увидеть что-то вроде:
1
|
lrwxrwxrwx 1 igor igor 39 2009-10-06 17:24 mylink > ./object/folder1/folder2/folder3/myfile
|
Символ l (самый первый в первом столбце), говорит о том, что тип файла - link. А также мы можем видеть на какой объект ссылается линк. Число 39 говорит о размере файла mylink. Если вы посчитаете количество символов в пути к объекту, то из будет 39. То есть в нашем файле действительно не содержится ничего кроме ссылки на myfile. Если вы выполните команду cat mylink, то ничего не увидите, так как откроете для просмотра не файл mylink, а файл myfile на который ссылается линк. Чтобы отредактировать файл myfile можно выполнить команду nano ./object/folder1/folder2/folder3/myfile, а можно nano mylink - в результате откроется один и тот же файл. Если удалить файл myfile, то линк никуда не исчезнет, но при попытке выполнить команду cat mylink вы получите сообщение, что файла не существует. Если вы снова создадите в месте куда ссылается линк файл myfile, то снова можно будет получить к нему доступ используя символический линк. Если удалить символический линк указывающий на файл, то с самим файлом ничего не случится - он останется на месте. Создавать линки можно не только на файлы, но и на каталоги. Например:
1
|
ln -s ./object/folder1/folder2/folder3/ mydirlink
|
Выполнив команду cd ./mydirlink/ мы попадем в каталог ./object/folder1/folder2/folder3/.
Теперь несколько особенностей по работе с символическими ссылками. Создавая символические ссылки старайтесь указывать к файлу полный путь (без точки как в примерах выше). Если вы переместите линк в котором будет относительный путь в другую папку, то он перестанет работать. Думаю причины вам понятны. Теперь об операциях перемещения и копирования символический линков. Предлагаю вам самостоятельно рассмотреть особенности работы команд cp и mv с символическими линками. Попробуйте покопировать и поперемещеать линки на файлы и каталоги и посмотреть на результаты.
Чтобы понять, что такое жесткие линки, нужно немного понимать как устроена файловая система. Попробую объяснить максимально просто и наглядно, а вы уже самостоятельно при желании сможете изучить детали. Пространство жесткого диска в файловой системе логически разбито на одинаковые блоки, которые называют кластерами. Файловая система имеет скрытую таблицу в которой содержится информация об объектах файловой системы (см. рис. 1).
Рисунок 1
Информация в таблице содержится самая разнообразная, но нас будут интересовать два поля: имя объекта иinode. В данном контексте будем считать, что inode - это число которое однозначно идентифицирует файл в пространстве файловой системы (в том числе и расположение). Допустим у нас есть файл с именем file1. Ему соответствует inode1, который указывает где расположен файл на диске. Создайте у себя файл с именем file1. А теперь создадим жесткие линки на этот файл (в том же каталоге) с именами file4 и file5 и один символический линк с именем link1:
1
|
ln file1 file4; ln file1 file5; ln -s file1 link1
|
Теперь выполните команду ls -li, которая покажет вам имена файлов и их inode (первый столбец).
1
2 3 4 |
370923 -rw-r--r-- 3 igor igor 27 2009-10-08 12:28 file1
370923 -rw-r--r-- 3 igor igor 27 2009-10-08 12:28 file4 370923 -rw-r--r-- 3 igor igor 27 2009-10-08 12:28 file5 293812 lrwxrwxrwx 1 igor igor 5 2009-10-08 13:02 link1 > file1 |
Смотрим на результат и видим, что у наших жестких ссылок file4 и file5, inode совпадает с inode файла file1. То есть получается, что file1, file4 и file5 - это физически один и тот же файл, но с разными именами, которые являются абсолютно равнозначными. На жестком диске они занимают одно и то же место (см. рисунок 1). Если вы выполните команду rm file1, то произойдет следующее: в таблице (см. рисунок 1) исчезнет запись относящаяся кfile1. Но на диске данные на которые указывал inode file1 останутся, и мы сможем получить к ним доступ по именам file4 или file5. Цифра 3 в третьем столбце результатов команды ls -li указывает на то что для указанного inode существует три имени. Удалите file1 и убедитесь, что число уменьшилось на один и теперь равно 2.
В этих же результатах вы можете видеть, что link1 - это файл который занимает отдельное физическое место на диске и у него есть свой inode.
Анализируя вышесказанное, мы можем прийти к следующим заключениям:
Жесткие линки не могут указывать на несуществующий объект. Символические линки - могут.
Жесткие линки работают только в рамках одного логического раздела. Вы не сможете сделать жесткий линк на другой раздел вашего диска, так как там своя таблица со своими inode. Символические линки могут ссылаться на другие разделы и файловые системы.
Поупражняйтесь в создании символических и жестких линков и придумайте в каких случаях их можно применить.
Пожалуйста, пиши комментарии, если ты обнаружил что-то неправильное или если ты желаешь поделиться дополнительной информацией про регулярные файлы Надеюсь, что теперь ты понял что такое регулярные файлы, линки и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Операционная система LINUX
Комментарии
Оставить комментарий
Операционная система LINUX
Термины: Операционная система LINUX