Воздействие на файлы и директории

В позапрошлом материале мы научились считывать содержание директорий и файлов. Теперь настало время оказывать воздействие на них 🙂

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

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

С помощью графического интерфейса действительно проще выполнять простые операции с файлами. Но, как только нужно выполнить что-либо чуть сложнее, на помощь приходит Linux Shell 😉 Например, нам необходимо скопировать все фотографии из одной директории (с фотоаппарата) в другую, но только те, которых там нет (только те, что еще не скачали на компьютер). А если копируемый файл уже присутствует в директории, куда мы пытаемся его скопировать, но его нужно заменить, но лишь при условии, что копируемый файл наиболее свежий (например, заменить оригинал на ретушь, но не наоборот). Слишком сложно в графическом интерфейсе. Слишком просто в командной строке.

Разморозим виртуальную машину. Очень важно помимо чтения данного материала испытывать его в действии. А еще лучше, пытаться ставить опыты изменяя имена файлов или директории. Так можно будет быстрее заложить базовые команды в память рук, освободив головной мозг для более сложных задач. Достаточно вспомнить любую пешую прогулку. Мы можем о чем-то задумываться, продумывать путь, но никак не думаем о движении своих ног 🙂

Подстановки

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

*
Соответствует любой подстроке символов, включая пустой строке.
?
Соответствует любому символу. Присутствие символа обязательно (не соответствует пустой строке).
[символы]
Соответствует любому символу из указанного набора символы. Набор символов может быть обозначен классом символов POSIX: [:alnum:] — любая буква или цифра, [:alpha:] — любая буква, [:digit:] — любая цифра, [:upper:] — любая буква в верхнем регистре, [:lower:] — любая буква в нижнем регистре.
[!символы]
Соответствует любому символу, который отсутствует в указанном наборе символы.

При помощи подстановок можно составить очень сложные критерии выборки файлов. Рассмотрим несколько примеров.

  • * — любые файлы
  • g* — файлы, имена которых начинаются с символа «g»
  • b*.txt — файлы с именами, начинающимися с символа «b» и заканчивающимися последовательностью символов «.txt»
  • Data??? — файлы, имя которых начинается со строки «Data» после которой следует ровно три любых символа
  • [abc]* — файлы с именами, начинающимися с одного из символов «a», «b» или «c», за которым могут следовать любые символы (также под выборку попадают имена файлов «a», «b» и «c»)
  • [[:upper:]]* — все файлы с именами, которые начинаются с буквы в верхнем регистре
  • BACKUP.[[:digit:]][[:digit:]] — файлы, имена которых начинаются со строки «BACKUP.» и заканчиваются двумя любыми цифрами
  • *[![:lower:]] — любые файлы, имена которых не заканчивается буквой в нижнем регистре.

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

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

Создание директории

Для создания новой директории можно воспользоваться командой mkdir. После имени команды через пробел нужно указать имена создаваемых директорий (для создания в рабочей директории) или пути к ним. Попробуем создать директорию test и перейдем в нее.

Отлично, мы только что создали директорию и перешли в нее. Как мы видим в ней пока нет ни файлов, ни директорий 🙁

С помощью графического интерфейса создавать директорию тоже достаточно просто. Я уверен, большинство читателей уже делали это не раз (возможно в других операционных системах, например в Windows создавали свои папки). Но, в отличии от графических файловых менеджеров, команда mkdir умеет гораздо больше чем создание одной директории за раз. Попробуем за раз создать несколько директорий, указав их имена через пробел.

Мы создали сразу пять директорий dir1, dir2, dir3, dir4 и dir5, а команду ввели всего один раз. В графическом файловом менеджере для создания каждой директории нам потребовалось бы выполнять весь процесс создания для каждой директории, это куча движений мыши и нажатий на кнопки.

Но и это еще не все. На может потребоваться создать директорию в директории, которой еще не существует. Например, мы хотим отсортировать фото по годам, месяцам и дням). Для этого нужно сначала создать родительскую директорию (photo), в ней еще одну директорию (год), в ней еще одну (месяц) и в ней еще одну (день). Но только не с mkdir! При использовании команды mkdir можно передать параметр -p, с которым будут созданы все несуществующие промежуточные директории. Попробуем сделать это.

Отлично. Мы создали директорию photo, внутри которой две директории 2010 и 2014, в директории 2010 создана директория 12 с пустой поддиректорией 05, а внутри 2014 директория  01 с пустой поддиректорией 10. Это все при помощи одной команды, всего лишь указав желаемые пути для наших директорий 10 и 05. Родительские директории photo, photo/2010photo/2014photo/2014/01, photo/2010/12 были созданы автоматически.

Безопасное удаление директории

Безопасно удалить пустую директорию можно с помощью команды rmdir. После имени команды через пробел нужно указать имена создаваемых директорий (для создания в рабочей директории) или пути к ним. Возможно использовать подстановки.

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

Настало время выбросить что-то ненужное. Попробуем избавиться от директории dir1.

Как видно, директории dir1 больше нет. Теперь попробуем таким же способом стереть директорию photo.

Не получилось 🙁 Мы получили сообщение об ошибке выполнения операции. В нем говорится, что наша директория photo не пустая. Если мы помним, в ней у нас есть две директории 2010 и 2014.

А вот директории dir2, dir3, dir4 и dir5 у нас пустые и нам больше не нужны. Попробуем их удалить. Можно удалять по одной или сразу перечислить их мена через пробел. Но есть кое-что проще — подстановки шаблонов имени. Если присмотреться внимательнее к именам директорий dir2, dir3, dir4 и dir5, то можно заменить, все они начинаются «dir». Как мы уже видели при помощи команды ls ранее, других файлов и директорий с именами, начинающимися с «dir» нет. Поэтому нам подойдет шаблон «dir*», выборка по которому затронет только директории dir2, dir3, dir4 и dir5. А использую команду rmdir мы можем не беспокоится о последствиях. Ведь она проверяет, чтобы удаляемый объект был обязательно директорией и обязательно пустой. Команда rmdir не позволит нам удалить какую-либо информацию. Удалим директории dir2, dir3, dir4 и dir5.

Отлично, теперь мы умеем безопасно удалять пустые директории 🙂

Команда rmdir

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

Для копирования файлов и директорий в Linux существует программа cp. В своей простой форме она копирует один файл, создавая его копию с другим именем.

Помимо этого, команда cp умеет копировать сразу множество файлов и директорий в другую директорию (сохраняя при этом имена файлов).

Попробуем что-то скопировать. Мы уже находимся в директории test, в которой у нас создана директория photo, но совсем нет файлов 🙁 Пора бы это исправить. Скопируем файл /etc/prelink.conf сохранив копию под именем test.txt в рабочую директорию.

У нас появилась копия файла /etc/prelink.conf. Попробуем скопировать файл /etc/hosts в рабочую директорию. Копию тоже назовем test.txt (такой файл уже существует).

Как видно, программа не выдала сообщения об ошибке, но нового файла у нас не появилось. Мы перезаписали старый файл test.txt содержанием файла /etc/hosts, безвозвратно стерев старое содержание файла. Так ведь легко потерять и очень важную информацию 🙁

К счастью, у программы cp существует ключ -i. При его использовании, перед заменой существующего файла программа спросит разрешение на перезапись содержания. Чтобы согласиться нужно ввести ответ «y» (после символа «y» могут следовать любые символы) и нажать Enter. Для отказа следуют ввести «n» (или любую строку, не начинающуюся с «y») и нажать Enter. Попробуем снова создать копию файла /etc/prelink.conf под именем test.txt с использованием параметра -i.

Как видим, на этот раз перед заменой содержания файла text.txt программа cp спросила на это разрешение.

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

Попробуем снова скопировать файл /etc/hosts в рабочую директорию. Копию тоже назовем test.txt (такой файл уже существует), но в этот раз используем ключ -n.

Как видно, программа не выдала сообщение об ошибке. Но содержание файла заменено не было. Мы можем в этом легко убедиться. Для этого по очереди с помощью программы less ознакомимся с содержанием файлов text.txt и /etc/hosts. Видим разницу? Значит мы ничего не заменили и не стерли 🙂

Еще при помощи команды cp можно копировать файлы в директории сохраняя имена файлы (имя копии внутри директории будет соответствовать имени копируемого файла) — это удобно при копировании сразу нескольких файлов.

Для начала создадим две директории dir1, dir2 и dir3.

Теперь скопируем файл test.txt в директорию dir1.

Мы указали, что хотим скопировать файл test.txt и сохранить копию в dir1. Именно такой результат мы и получили. Так как мы указали как место сохранения копии существующую директорию, то копия была помещена в нее с исходным именем файла.

Теперь скопируем файл test.txt в test2.

Как видим, мы получили новый файл test2 с копией содержимого файла test.txt. Если мы указываем как место сохранения копии имя существующего файла, либо не существующее имя, то копия содержимого сохраняется в файл с указанным именем (если он не существует, то будет создан).

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

Как видим файл test2 был успешно скопирован в директорию dir1, а при попытке копирования в несуществующую директорию dir9 мы получили сообщение об ошибке, без создания ненужного файла dir9.

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

А еще программа cp умеет копировать директории и их содержимое. Для этого существует ключ -R, который указывает на необходимость копирования содержимого.

Как видим, мы успешно скопировали директорию dir1 внутрь директории dir2. По аналогии с файлами, можно скопировать директорию создав копию под другим именем.

Теперь у нас есть файлы и директории с файлами, а значит есть что переименовывать, перемещать и удалять 🙂

Команда cp

Переименование и перемещение

Программа mv выполняет переименование и перемещение файлов и директорий. В отличии от копирования, при котором сохраняются и сами исходные объекты, и их копии, при перемещении или переименовании исходные файлы и директории не сохраняются. Использование команды mv схоже с использованием команды cp. У команды mv отсутствует ключ -R, так как при переименовании или перемещении директории, содержимое остается в ней (нет необходимости указывать отдельно на необходимость его копирования).

Переименуем файл test2 в test2.txt.

Создадим директорию dir5 и переместим в нее файлы test.txt и test.txt.

Переименуем директорию dir5 в test.

Теперь переместим директории dir1, dir2, dir3 и dir4 в директорию test. Чтобы не перечислять все директории списком, можно воспользоваться подстановкой по шаблону.

Из директории test переместим файлы test и test2.txt обратно в рабочую директорию. Для простоты воспользуемся подстановкой, а на рабочую директорию сошлемся с использованием специального обозначения «.» (точка).

Отлично, файлы возвращены в рабочую директорию и теперь у нас есть что удалять 🙂

Команда mv

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

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

Удалим файл test2.txt.

Файл был удален. Следует с осторожностью использовать программу rm. Данные удаляются без возможности восстановления. Особенно легко ошибиться и удалить что-то нужное при использовании подстановок. При помощи ключа -i перед удалением каждого объекта будет запрошено подтверждение. Чтобы согласиться нужно ввести ответ «y» (после символа «y» могут следовать любые символы) и нажать Enter. Для отказа следуют ввести «n» (или любую строку, не начинающуюся с «y») и нажать Enter. Попытаемся удалить файл test.txt, но после запроса подтверждения откажемся от удаления.

Для удаления директории следует использовать ключ -r. При передаче параметра -r программа rm вначале удаляет все файлы и директории (включая вложенные) внутри удаляемой директории, после чего саму директорию. Удалим директорию photo.

Теперь попробуем удалить что-либо с использованием подстановок. Чтобы обезопасить себя и предварительно узнать какие файлы пройдут выборку по шаблону, воспользуемся следующим трюком. Вместо команды rm воспользуемся командой ls, передав ей в качестве аргумента нашу подстановку. Таким образом будут перечислены все выбранные объекты по шаблону. Если результат нас устроит, то можно смело удалять программой rm.

Вернемся в родительскую директорию, которая является домашней, и удалим освободившуюся директорию test. Без ключа -r команда rm выдаст предупреждение при попытке удалить директорию и не удалит ее. Для удаления пустых директорий всегда следует пользоваться программой rmdir вместо ключа -r программы rm. Это позволит сохранить данные в целости и сохранности 🙂

Лишнее убрано. Теперь заморозим виртуальную машину.

Команда rm

Путешествие по Linux

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

Результат работы программы file

Настало время отправится на экскурсию. Ниже описаны интересные места, которые нужно посетить. На этот раз конкретных команд и результатов их выполнения опубликовано не будет, попробуйте побродить по описанным местам свободно 😉

В путешествии по указанным местам могут помочь следующие инструменты:

  •  с помощью команды cd нужно посетить каждое указанное место, а также рекомендуется побродить по вложенным директориям
  • команда ls поможет узнать содержимое посещаемых мест
  • если какой-то файл показался интересным, то при помощи инструмента file можно получить краткие сведения о его формате
  • просмотреть текстовые файлы поможет программа less

Список мест для посещения

/
Корневая директория — начало файловой структуры Linux. На большинстве Linux систем содержит в основном директории, но может содержать и файлы.
/boot
Место, где расположены ядро Linux и загрузчик операционной системы. Файл ядра называется vmlinuz.
/etc
Директория, в которой находятся конфигурационные файлы системы. Все они должны быть текстового формата. В файле /etc/passwd хранится важная информация об учетных записях пользователей в Linux. Он определяет учетные записи пользователей. Файл /etc/fstab содержит таблицу дисковых устройств, которые подключаются в момент загрузки операционной системы. Он определяет дисковые устройства. В файле /etc/hosts записаны сетевые имена и их IP-адреса, которые заведомо известны. Директория /etc/init.d содержит загрузочные скрипты различных служб, которые обычно запускаются во время загрузке системы.
/bin и /usr/bin
В этих директориях расположено большинство установленных программ. В директории /bin находятся необходимые для работы системы инструменты. А в директории /usr/bin расположены установленные приложения для пользователей системы.
/sbin и /usr/sbin
Директории sbin содержат программы для системного администрирования, которые обычно используются суперпользователем root.
/usr
В этой директории хранятся различные принадлежности для пользовательских приложений. В /usr/share/X11 расположены файлы для графической оболочки X Windows. Директория /usr/share/dict содержит словари для программ проверки правописания. В /usr/share/doc расположена различная документация в различных форматах. А страницы руководства хранятся в /usr/share/man. Файлы исходного кода программ можно найти в директории /usr/src. Если установлен пакет исходного кода ядра, то тут можно найти полный исходный код ядра операционной системы Linux.
/usr/local
В этой директории и вложенных директориях расположены установленное программное обеспечение и прочие файлы для использования на компьютере. Программное обеспечение, которое не является частью официального дистрибутива Linux, обычно хранится здесь.
/var
Здесь хранятся файлы, которые изменяются в процессе работы системы. В директории /var/log расположены журнальные файлы. Они обновляются в процессе работы операционной системы и программ. Необходимо время от времени просматривать содержимое данных файлов для отслеживания состояния системы.  А директория /var/spool используется для организации очередей, таких как почтовые отправления или задания на печать. Когда почта пользователя изначально приходит на компьютер (предполагается, что он используется как почтовая служба), сообщения попадают в директорию /var/spool/mail.
/lib
Директория содержит общие библиотеки (аналог DLL файлов в Windows) для программного обеспечения на компьютере.
/home
Здесь обычно расположены домашние директории пользователей. Место, где они сохраняют результаты своей работы. В основном, это единственное место, куда пользователи могут сохранять свои файлы. А значит компьютер находится всегда в чистоте и порядке 🙂
/root
Домашняя директория для суперпользователя root.
/tmp
Место, в котором программы могут размещать свои временные файлы.
/dev
Это особая директория, которая не содержит реальных файлов. В место этого, в ней находятся устройства, доступные для операционной системы. В Linux каждому устройству соответствует специальный файл. Это позволяет производить обмен информацией с устройством как обычные операции чтения и записи файла. Например, /dev/df0 это первый дисковод (кто-то еще помнит дискеты? ;)), а /dev/sda (или /dev/hda на старом железе) — первый жесткий диск. Все устройства, которые распознает ядро операционной системы расположены в директории /dev.
/proc
Эта директория тоже особенная. В ней нет реальных файлов и ее вообще не существует на диске. Она полностью виртуальна. Директория /proc является содержит скважины в глубь ядра операционной системы. Группа из директорий с числами внутри директории /proc содержат информацию о процессах системы. Каждому запущенному процессу соответствует своя директория с номером. Помимо информации о процессах, в директории /proc еще имеются объекты с текстовыми именами, которые дают доступ к текущей конфигурации системы. Много из них можно посмотреть через программу less. Рекомендую открыть /proc/cpuinfo. В нем содержится информация доступная ядру о процессоре.
/media и /mnt
Директории /media и /mnt тоже особые, но в отличии от /dev и /proc, они и их содержимое реальны. Это обычные директории, которые используются в специальных целях. Директория /media применяется в качестве точек монтирования. Как нам уже известно, различные устройства хранения информации (например, жесткие диски) подключаются к файловой структуре в виде поддеревьев в различных директориях. Процесс подключения устройства к директории называется монтированием. Для доступа к устройству, его необходимо монтировать к файловой структуре. В процессе загрузки системы, она считывает инструкции по монтированию из файла /etc/fstab, содержащим информацию о точках монтирования устройств в дереве директорий. Этот процесс подключает только постоянные жесткие диски, но помимо них, можно также подключать временные устройства, такие как CD-ROM, внешние жесткие диски и т.д. Так как они съемные, они не остаются смонтированными постоянно. Директория /media используется в качестве точки монтирования для автоматических механизмов монтирования в современных дистрибутивов Linux для настольных компьютеров и ноутбуков. А в системах, требующих ручного подключения съемных устройств, удобно использовать директорию /mnt в качестве места для их монтирования. Чтобы посмотреть какие устройства к каким директориям подключены, можно воспользоваться инструментом mount.

Наше сегодняшнее путешествие завершилось, поэтому заморозим нашу виртуальную машину и оставим её до следующего раза. Свои впечатления можно написать в комментариях к этой записи 😉

Обзор содержимого директорий и файлов

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

cd и pwd

Команда ls

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

Команда ls предназначена для перечисления содержимого в директории. Это наиболее часто используемая команда в Linux. Есть множество способов ее применения. Рассмотрим наиболее популярные на примерах.

ls

Выводит список файлов и директорий в рабочей директории без отображения скрытых объектов (у которых имя начинается с символа «.» (точка)).

ls /bin

Перечисление содержимого в директории /bin. Вместо /bin можно указать любую другую директорию через абсолютный или относительный путь к ней.

ls -l

Перечисление содержимого рабочей директории с выводом подробной информации о перечисляемых объектах.

ls -l /var /etc

Перечисление содержимого директорий /var и /etc с выводом подробной информации о перечисляемых объектах.

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

Таким образом можно одной командой получить информацию сразу по всем интересуемым директориям 😉

ls -la ..

Перечисление всех объектов (включая скрытых) в родительской директории с выводом подробной информаций о каждом из них.

Формат команд

Как видно из приведенных примеров, команда ls имеет определенный формат вызова. В Linux большинство команд имеют сходный формат вызова. Он следующий

команда -параметры аргументы

Где команда — имя команды или исполняемой программы, параметры — одна или несколько детальных настроек выполнения, аргументы — одна или несколько «вещей» которые должна обработать команда или программа.

На примере команды ls:

  • ls — имя команды
  • -l и -a — параметры (допускается объединение в -la при использовании обоих). Параметр -l указывает о необходимости вывода подробной информации, а -a о включении скрытых объектов. У параметра может быть указан его аргумент (в данном примере отсутствует), в таком случае при объединении аргумент применяется к последнему параметру. Если параметр не требует указания аргумента, то такой параметр называется ключом.
  • /var и /etc — аргументы, в данном случае список директорий, содержание информации которых нас интересует

Детальный вывод

При использовании параметра -l команды ls выводится подробная информация о содержимых объектах директории. Ознакомимся с её форматом более детально.

детальный вывод ls

Имя файла
Имя файла или директории.
Время изменения
Последнее время изменения файла. Если изменение произошло спустя более шести месяцев, то выводятся дата и год, иначе дата и время дня. То есть, вначале всегда выводится дата, которая состоит из месяца и числа, а после нее год или время в часах и минутах. Когда мы видим время, это значит файл был изменен за прошедшие шесть месяцев, т.е. в текущем или прошлом году 🙂
Размер
Размер файла в байтах. Для директории указывается размер метаданных (информации об объектах, которые содержатся внутри, включая их имена), а не суммарный размер содержимого. Изначально размер директории равен размеру кластера (обычно 4 Кб / 4096 байт), но может расти при необходимости.
Группа
Имя группы, для которой указаны права доступа.
Владелец
Имя учетной записи пользователя, который является владельцем файла.
Права доступа
Представление прав доступа к объекту. Первый символ указывает тип объекта. Символ «d» обозначает директорию, «-» — файл. Но есть и иные типы объектов в Linux. Далее идет три набора из трех символов, которые представляют права доступа. Первый символ указывает право чтения, второй записи, третий выполнения или входа. Первый набор из трех символов указывает права доступа владельца файла, второй — права группы файла, а последний указывает права доступа файла для всех остальных пользователей. Подробнее о правах доступа будет опубликован отдельный материал в будущем 😉

Программа less

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

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

Некоторые способы представления информации достаточно сложные (например, сжатые изображения, аудио- и видеозаписи). Но есть и достаточно простые. Один из самых первых появившихся и самых простых — текст в кодировке ASCII (American Standard Code for Information — американский стандартный код для обмена информации). Эта простая схема кодирования впервые была использована на устройствах телетайпа для указания зависимости печатных символов и номеров.

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

Для запуска программы less необходимо ввести less имя_файла, где имя файла — абсолютный или относительный путь к файлу.

Введем less /etc/sestatus.conf и нажмем клавишу «Enter». Выведено содержание файла /etc/sestatus.conf.

Отображение /etc/sestatus.conf в less

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

Для выхода из программы less нажмем клавишу q на клавиатуре.

Управление программой less

После запуска less отображает на экране по одной странице текста за раз. Листать страницы можно клавишами Page Up и Page Down. Помимо них, в less есть и иные команды. С командой «q» мы уже знакомы — выход из программы. Вот несколько иных полезных команд программы less.

Page Up или b
Прокрутка на предыдущую страницу текста.
Page Down или space
Прокрутка на следующую страницу текст.
G
Прокрутка в конец файла.
1G
Прокрутка в начало файла
/строка
Поиск следующего вхождения указанной строки в файле.
n
Повторный поиск следующего вхождения.
h
Отображение справочной информации по всем командам less.
q
Выход из программы.

Команды следует вводить просто нажимая клавиши на клавиатуре. После набора команды, за исключением некоторых, где требуется указать параметр после команды (например, поиска строки), она автоматически выполняется. Там, где требуется ввод параметра, ввод команды следует завершить нажатием клавиши Enter. Команды регистрозависимы.

Программа file

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

Использовать данный инструмент очень просто. Для этого после file следует указать относительный или абсолютный путь к файлу, который нас интересует. Попробуем получить информацию по файлам /bin/bash и /etc/sestatus.conf.

Теперь мы знаем, файл /bin/bash является 32-битной программой Linux, а /etc/sestatus.conf обычный текстовый файл, а значит его можно посмотреть при помощи less 🙂

Результат работы программы file

Программа file может распознавать различные типы содержимого.

Может показаться, что у большинства файлов нельзя увидеть текстовое содержимое (открыть через less можно все файлы, но не все они будут читаемы глазом). На самом очень много файлов в Linux текстовые. Особенно важные конфигурационные файлы почти всегда хранятся в текстовом легко понятном человеку формате. Также можно заметить, что большинство возможностей операционной системы реализованы через shell-скрипты, в которых программа написана открытым читаемым текстом. Ведь в Linux нет секретов 🙂

А теперь настало время вновь заморозить виртуальную машину.

Навигация по файлам и директориям

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

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

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

структура директорий Linux

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

Разморозим нашу виртуальную машину и сделаем первые шаги в освоении организации файловой структуры Linux 🙂

Рабочая директория и её содержание

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

Директория в которой мы находимся называется рабочей директорией. Чтобы узнать имя рабочей директории, воспользуемся командой pwd (print working directory — вывести рабочую директорию).

Введем команду pwd в окно терминала.

Когда мы входим в операционную систему Linux, мы попадаем в домашнюю директорию. Это место, где мы сохраняем наши файлы. В большинстве Linux систем домашняя директория по умолчанию называется /home/имя_пользователя. Она также может быть другой, в зависимости от прихоти системного администратора 😉

Для просмотра содержимого рабочей директории воспользуемся командой ls (list files and directories — перечислить файлы и директории). Она выведет нам директории и файлы, которые находятся в домашней директории.

Введем команду ls в окно терминала.

К команде ls вернемся в следующих материалах. С её помощью можно сделать очень много интересного, но в начале нужно уделить чуть больше внимания путям и директориям.

pwd и ls

Смена рабочей директории

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

Он начинается с указания корневой директории, за которой следуют ветки дерева файловой системы до тех пор, пока не достигнута желаемая директория. В качестве примера рассмотрим директорию, в которой установлено большинство программ. Её абсолютный путь — /usr/bin. Это значит, что в корневой директории (обозначается начальным слэш-символом (косая черта)) нужно перейти сначала в директорию с именем usr, а затем в директорию bin, которая в ней расположена.

В окне терминала введем команду cd /usr/bin.

Теперь мы перешли в директорию /usr/bin, которая стала рабочей директорией. В приветствии командной строки имя рабочей директории тоже изменилось. Там обычно отображается имя рабочей директории.

При помощи команды ls посмотрим содержимое рабочей директории /usr/bin.

Ого как много файлов внутри. Это лишь часть наших программ, но вернемся к ним позже. 🙂

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

Точка (.) ссылается на текущую директорию, а две точки (..) на родительскую директорию для текущей. Посмотрим как это работает. Для этого сменим рабочую директорию /usr/bin на ее родительскую /usr. Мы можем сделать это двумя способами. Первый — по абсолютному пути.

Теперь вернемся обратно в /usr/bin.

И воспользуемся относительным путем. Для ссылки на родительскую директорию существует обозначение «..» (две точки). Введем команду cd .. и после этого, чтобы убедиться, что мы оказались там, куда мы хотели перейти, проверим это с помощью команды pwd.

Отлично, мы попали в /usr, чего нам и нужно. Два разных способом с одинаковым результатом. Каким же тогда следует пользоваться? Разумеется, где меньше символов нужно набирать 😉

Теперь через относительный путь попробуем перейти в /usr/bin. Рабочая директория у нас сейчас /usr. Стало быть из нее нужно перейти в дочернюю bin. Для ссылки на текущую директорию существует обозначение «.» (точка). Введем команду cd ./bin и после этого, чтобы убедиться, что мы оказались там, куда мы хотели перейти, проверим это с помощью команды pwd.

Отлично! Но теперь вновь вернемся назад в /usr.

В большинстве случаем можно пропустить «./». Введем команду cd bin и после этого, чтобы убедиться, что мы оказались там, куда мы хотели перейти, проверим это с помощью команды pwd.

Это тоже сработало 🙂 В основном, когда мы не указываем определенный путь начиная с корня, рабочей или родительской директорий, подразумевается, что он начинается с рабочей директории. Но есть одно важное исключение, о котором мы поговорим позже.

Специальные ярлыки

Если просто ввести команду cd без указания пути, то будет выполнен переход в домашнюю директорию. Проверим.

Чтобы сменить рабочую директорию на предыдущую, можно использовать символ «-» (минус). Сейчас мы в домашней директории, до этого были в /usr/bin. Значит после ввода команды cd — должны снова вернуться в /usr/bin. Проверим.

Сослаться на домашнюю директорию любого пользователя можно добавим перед именем учетной записи символ «~» (тильда), например ~mikhail. Так мы можем указать домашнюю директорию любого пользователя вне зависимости от того, где она расположена. Проверим.

Если после символа «~» (тильда) не указать имя пользователя, то данный символ будет ссылаться на собственную домашнюю директорию.

cd и pwd

Механизм работы подобной «ссылки» реализован за счет развертывания строк (материал из будущего ;)).

А теперь заморозим виртуальную машину в данном состоянии.

Знакомство с Linux Shell

Что же такое Shell в линуксе?

Это текстовый консоль операционной системы или интерфейс командной строки. Говоря простым языком, это такая программа, которая считывает команды с клавиатуры и передает их на выполнения операционной системе. Раньше, очень давно, это был единственный доступный пользовательский интерфейс в Unix-системах подобных Linux. В наши дни, помимо интерфейса командной строки Linux Shell, существует еще графический пользовательский интерфейс из рабочего стола и окон.

На большинстве Linux систем в качестве основного интерфейса командной строки используется программа bash. Это расширенная версия оригинальной Unix программы sh. Помимо bash на Linux можно установить иные shell оболочки, например, ksh, tcsh and zsh.

Эмулятор терминала

Это такая программа, через окно которой можно взаимодействовать с shell программой. Есть множество различных эмуляторов терминала, которыми можно пользоваться. Большинство дистрибутивов Linux поддерживают сразу несколько, такие как: gnome-terminal, konsole, xterm, rxvt, kvt, nxterm, и eterm.

Запуск терминала

В каждом графическом интерфейсе существует способ запуска эмулятора терминала из меню. Достаточно заглянуть в список программ, чтобы увидеть там что-то похожее на терминал. В графической среде KDE эта программа называется konsole, в Gnome — gnome-terminal. Можно запустить множество  эмуляторов терминала сразу и работать с ними всеми одновременно 🙂 Несмотря на различные эмуляторы терминала, все они выполняют единственную функцию — предоставляют доступ к интерфейсу командной строки Linux (shell). Каждый человек отдает предпочтение какой-либо одной из этих программ в зависимости от наворотов программы и своего вкуса.

Мы уже знаем как запускать терминальную программу. Разморозим виртуальную машину. Перед нами запущенное приложение терминала с прошлого сеанса.

Разберемся как оно работает. Как и у других окон в Gnome оно состоит из меню приложения, окна с заголовком, меню, рабочей областью и полосой прокрутке. Рабочая область окна дает доступ к интерфейсу командной строки Linux эмулируя терминальное устройство. Эмулятор подсоединен к виртуальному терминальному устройству, через которое приложение bash (это и есть Linux Shell) осуществляет операции обмена информацией с пользователем (считывает символы с клавиатуры и выводит их на экран).

компоненты окна терминала

Испытываем терминал 🙂

Теперь настало время первых шагов в Linux Shell. В окне терминала отображается подсказка командной строки, отображающая имя учетной записи пользователя, имя машины и текущую директорию. В конце подсказки отображается знак доллара ($), обозначающий работу под обычной учетной записью. При работе под учетной записью суперпользователя root вместо доллара в конце будет стоять «решетка» (#) — напоминание о месте, куда можно попасть, если сделать чего не следует 🙂

Подсказка выглядит примерно так:

Отлично 🙂 Попробуем напечатать какую-либо ерунду, например «kjsiwmsnssamsaowd» и нажмем Enter.

Если сделали все правильно, в ответ получим сообщение об ошибке. В нем говорится, программа bash не смогла нас понять 🙁 , после чего вновь отображает подсказку и готова к вводу новой команды:

Нажмем стрелку вверх на клавиатуре. Вернулась предыдущая команда «kjsiwmsnssamsaowd». Да, в bash ведет летопись введенных команд 🙂 Нажмем стрелку вниз и команда исчезнет.

При помощи стрелок вверх и вниз можно перемещаться по истории введенных команд назад и вперед.

Нажмем вновь стрелку вверх, чтобы вернуть команду «kjsiwmsnssamsaowd». Теперь несколько раз нажмем стрелки влево и вправо. Курсор в командной строке будет перемещаться. С их помощью можно установить курсор в нужное положение и легко отредактировать команду, например, в случае ошибки.

курсор терминала

Нажмем еще раз Enter. Команда снова не понята 🙁

А теперь попробуем мышь

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

С ее помощью можно не только прокручивать текст в окне, но и копировать его. Прям здесь, в браузере на этой странице, выделим какой-либо текст, например «kshkqskskjskafege» и скопируем его в буфер обмена. VMware Player автоматических синхронизирует буфер обмена с буфером обмена виртуальной машины. Теперь поместим курсор в окно терминала и нажмем средней кнопкой мыши (если вместо нее колесико, можно нажать на него, либо одновременно нажать на правую и левую кнопки) пока курсор находится в окне терминала.

Текст, который мы скопировали из браузера, появился в командной строке.

вставка текста из буфера обмена в терминал

Это может нам пригодится, если будет лень копировать команды отсюда в будущем 🙂 Нажмем вновь Enter. Наша новая команда снова не распознана и не выполнена.

Заморозим виртуальную машину в этом состоянии пока она вновь нам не понадобится 🙂