Работа с файлами и каталогами в Linux
Введение
В этом руководстве для начинающих пользователей мы ознакомимся с основными командами для работы с файлами и каталогами (иногда их еще называют директориями) в Linux-системах.
Требования
Cервер с Ubuntu 20.04
Все команды, описанные ниже, будут работать и в других дистрибутивах Linux.
Расположение каталогов в файловой системе
При входе на сервер, вы, как правило, попадаете в домашний каталог вашей учетной записи, отведенный для хранения файлов и создания директорий.
Для того чтобы узнать, где располагается каталог, в котором мы сейчас находимся, используется команда:
Результат выполнения команды выглядит следующим образом:
Домашний каталог располагается после имени учетной записи пользователя, в приведенном примере он называется /demo. Этот каталог находится в каталоге с именем /home и в каталоге верхнего уровня, который называется root или корневой каталог, поэтому представлен одной косой чертой /.
Просмотр содержимого каталогов
Для просмотра содержимого каталога используется команда ls. Название этой команды является сокращением слов list files.
Просмотреть содержимое любой директории можно следующими способами:
Либо введя команду:
В результате выполнения команды отображаются файлы и каталоги, находящиеся внутри данного каталога:
К команде ls можно добавлять дополнительные флаги, например, чтобы показать детализированное представление (права, список владельцев файлов или папок, размер, дату последнего модифицирования) файлов и директорий в текущей директории, можно использовать флаг -l:
Результат выполнения команды:
Для просмотра списка всех файлов, включая скрытые файлы и каталоги, вы можете добавить флаг -a:
Результат выполнения команды:
Отобразить содержимое текущей директории с добавлением к именам символов, характеризующих тип, можно с помощью команды:
Результат выполнения команды:
Перемещение между каталогами
Для перехода в домашний каталог используется команда cd. Название этой команды является сокращением слов change directory.
Для перехода в домашний каталог пользователя user используется команда:
Для перехода в предыдущую директорию, в которой мы находились до перехода в текущую директорию также используется команда cd.
В Linux-системах каждый файл и каталог находятся в самой верхней директории, которая называется «корневой» и обозначается одним символом слэш /.
Абсолютный путь указывает на расположение каталога по отношению к этой директории верхнего уровня. Это позволяет обращаться к справочникам однозначным образом из любого места в файловой системе.
Каждый абсолютный путь должен начинаться с косой черты — символа слэш /.
Для перехода в директорию уровнем выше используется команда:
Для перехода в директорию двумя уровнями выше:
Операции с файлами и каталогами
У каждой команды имеется множество параметров, чтобы узнать их, наберите команду и параметр —help, например:
Далее приведен список основных команд навигации в консоли Linux.
Создание
Создание файлов производится с помощью команды:
Создание каталогов выполняется с помощью команды вида:
Название этой команды является сокращением слов make directory.
Создание двух каталогов одновременно выполняется с помощью команды:
Для создания дерева каталогов используется команда следующего вида:
Удаление
Для удаления директорий используется команда rmdir имя_директории. Название этой команды является сокращением слов remove directory.
Для удаления файлов используется команда rm. Например, для удаления файла с именем file1 используется команда:
Команда rm также позволяет удалять не только файлы, но и каталоги.
Можно удалить одновременно две директории со всем их содержимым:
Команда для удаления файла будет выглядеть так:
Команда для удаления каталога:
Перемещение
Для перемещения и переименования файлов и каталогов используется команда mv. Название этой команды является сокращением слова move.
Переименовать файл можно с помощью команды:
Для того чтобы переместить файл, используется команда:
Копирование
Для копирования используется команда cp. Название этой команды является сокращением слова copy.
Чтобы скопировать файл file1 и назвать его file2, используется команда:
Для того чтобы копировать директорию dir1 в директорию dir2, используется команда:
Скопировать файл с именем file1 в директорию с именем dir1, можно с помощью команды:
Редактирование файлов
Мы ознакомились с основными командами для работы с каталогами и файлами.
Далее мы изучим, как редактировать файлы и добавлять в них содержание.
Команда nano позволяет работать в одном из самых простых текстовых редакторов командной строки Linux, который занимает весь терминал в течение всего срока его использования.
В результате ввода в терминал команды nano будет открыт чистый файл.
Интерфейс выглядит следующим образом:
В верхней части открывшегося редактора отображается имя приложения и имя файла, который мы редактируем.
В середине должно располагаться содержимое файла, в настоящее время оно пустое.
В нижней части интерфейса расположен ряд комбинаций клавиш, которые указывают с основными элементами управления текстового редактора. Для каждого из них символ ^ означает клавишу CTRL.
Для того чтобы открыть справку используйте сочетание клавиш CTRL-G.
Закрывается справка с помощью сочетания клавиш CTRL-X. После закрытия справки мы возвращаемся к редактированию.
Вводить и редактировать можно любой текст, например, можно ввести: “Hello World!”
Для сохранения внесенных изменений следует нажать сочетание клавиш CTRL-O. Внимание! Это буква О, а не ноль.
Далее система попросит вас ввести либо подтвердить имя файла, который вы хотите сохранить:
Как вы можете видеть, параметры в нижней части окна редактирования также изменились. Они являются контекстными, то есть будут меняться в зависимости от того, что вы пытаетесь сделать.
После ввода имени файла нажмите клавишу ENTER.
Для того чтобы выйти из тестового редактора нажмите сочетание клавиш CTRL-X.
Если вы внесли изменения и не сохранили файл, вам будет предложено сохранить сделанные вами изменения:
Вы можете нажать клавишу Y, чтобы сохранить изменения, клавишу N для отмены изменений и выхода, или сочетание клавиш CTRL-C, чтобы отменить операцию выхода из режима редактирования файла.
Если вы решили сохранить изменения, вам будет предложено сохранить их в том же файле, который был отредактирован.
Нажмите клавишу ENTER, чтобы сохранить файл и выйти из редактора.
Заключение
Мы ознакомились с возможностями просмотра доступных файлов и каталогов, с основными командами для работы с файлами, которые позволяют просматривать, копировать, перемещать и удалять файлы, а также с основами редактирования в текстовом редакторе nano.
Основные команды Linux-терминала
При знакомстве с Linux удобно иметь под рукой небольшой справочник основных команд. Новичкам будет полезно в тех случаях, когда нет возможности сделать что-либо через привычный файловый менеджер или при первых подключениях к серверу по SSH, а также для понимания того, что в некоторых случаях проще всего использовать именно терминал, вместо файлового менеджера.
Основные команды Linux-терминала поделены на несколько разделов, ниже содержание, откуда вы можете перейти в любой раздел статьи.
Содержание
Навигация в системе
Как узнать текущую папку
Иногда в терминале не показывается в какой именно папке находится пользователь и требуется выяснить исходную точку для дальнейших движений. Узнать «где я?» можно командой pwd :
Пример в терминале:
Данный вывод показывает, что мы находимся в домашней папке /home/uxumax
Как узнать что хранится в папке
Теперь, когда мы выяснили в какой папке находимся, посмотрим содержимое этой папки. Это делается при помощи команды ls :
Предварительно для примера в этой папке было создано 10 тестовых файлов и с ними вывод команды ls в терминале выглядит так:
И увидим полный вывод, со всеми скрытыми файлами, без «недосказанностей»:
Как перейти в другую папку
Папка есть. Теперь попробуем зайти в нее. Для этого используется команда cd и формулируется в следующем виде:
Как вернуться назад, в исходную папку
Как перейти наверх, в родительскую папку
Как видно, все предельно просто. Поэтому предлагаю не останавливаться на достигнутом и использовать это более продвинутым образом.
Как найти файл или папку по имени
Чтобы найти нужный файл или папку в линукс-терминале, нужно использовать команду find. Формулировать поисковую команду довольно просто:
Тогда заключим слово fish в звездочки и желательно обернуть дополнительно в кавычки, то есть это будет выглядеть вот так:
В данном случае мы в своей домашней папке (которая обозначается
/ ) ищем файл, название которого содержит слово «fish». Звездочки в данном примере заменяют первую часть слова «nemo-» и его последнюю часть «er.txt»: nemo- fish er.txt
В терминале вот так выдаются результаты:
/home/uxumax/place/nemo- fish er.txt
/home/uxumax/place/blow fish
/home/uxumax/place/ fish ki.jpg
/home/uxumax/place/ fish ki.jpg
По этим примерам можно понять принцип работы звездочек в запросе. Их задача заменить те символы, которые мы не знаем.
Как найти файл по его содержимому
Поиск по содержимому файла также может быть очень полезен в тех случаях, когда мы не помним название, но точно знаем, что файл содержит какой-то конкретный текст.
Итак, формулируем команду для поиска файла в домашней папке
Терминал в ответ выдал нам список путей к файлам, которые содержат текст «orange». Обратите внимание, что выдача результатов поиска разделена символом : на три части:
/путь/до/файла : номер строки : строка с найденным словом
По этой выдаче можно понять, какой из этих файлов мы ищем и существует ли он вообще.
Работа с файлами и папками
Как создать папку
Для начала просто создадим папку test_dir
Если требуется создать несколько папок, то просто перечислите их названия после mkdir, разделяя обычными пробелами
Если названия папок однотипны и, например, различаются лишь последней цифрой, то можно сформулировать команду создания нескольких папок в более коротком виде:
В фигурных скобках <> мы через запятую перечисляем варианты названий папок и результат команды будет полностью идентичен предыдущему примеру.
Также вместо перечисления всех вариантов, можно указать числовой диапазон, разделяя двумя точками в таком виде:
Тем самым мы получаем удобную возможность одной командой создавать нужное нам дерево папок.
Как создать файл
В отличии от создания папки, существует бесчисленное количество способов создать файл в линукс. В данном примере мы разберем только самые визуально простые способы, которые не трудно запомнить.
Создадим с ее помощью пустой файл с именем file_name
Если требуется создать несколько файлов, то просто перечислите их названия после touch, разделяя обычными пробелами
Если названия файлов однотипны и, например, различаются лишь последней цифрой, то можно сформулировать команду создания нескольких файлов в более коротком виде:
В фигурных скобках <> мы через запятую перечисляем варианты названий файлов и результат команды будет полностью идентичен предыдущему примеру.
Также вместо перечисления всех вариантов, можно указать числовой диапазон, разделяя двумя точками в таком виде:
Если необходимо создать файл сразу с текстом, то перед > нужно ввести команду echo и сам текст. То есть это должно выглядеть так echo «текст файла» > имя_файла
Как вывести содержимое файла
С помощью этого шаблона формулируем команду для нашего примера. В нашем случае файл находится там же, где и мы, поэтому нет нужды прописывать полный путь
В ответ получим содержимое файла «file’s text». Вот так это выглядит в терминале:
Как редактировать файл
Одним из самых простых способов редактировать файл через терминал является использовать консольный редактор nano. Он больше всего подходит для новичков, так как довольно прост, относительно других консольных редакторов. Для начала проверим установлен ли он командой:
И если получим вывод, где указана версия утилиты и прочая информация, значит nano установлен:
Если в ответ вы получите сообщение, что команда не найдена…
И так, nano установлен.
Далее, используя знания из прошлого раздела, создадим файл с именем text_file и содержимым «file’s text here».
Теперь откроем наш текстовый файл.
После чего прямо в терминале должно открыться содержимое файла.
После белой полосы, в которой указана версия nano и имя файла, располагается его содержимое.
Первое что стоит осознать — это то, что мышка здесь здесь не работает. Вы можете нажать правой кнопкой мыши и вставить текст из буфера обмена, но навести курсор мышкой на нужное место в тексте скорее всего не сможете.
Здесь это делается клавишами ↑ Вверх, ↓ Вниз, ← Влево, → Вправо. Попробуем передвинуть курсор на место перед словом here и нажать Enter, чтобы сбросить его на следующую строку.
А в самом низу мы видим шпаргалку, в которой перечислены основные горячие клавиши управления утилитой, где ^ обычно означает клавишу Ctrl.
Чтобы проверить, если ли еще слово line в этом файле, нужно нажать Alt + W. В нашем примере после этого курсор сдвинется на второе слово.
Если вы нажали Ctrl + W и передумали что-либо искать, нажмите Ctrl + C для отмены, что также указано в подсказке при вызове поля поиска.
Более подробно ознакомиться с утилитой nano можно здесь.
Как скопировать файл
Попробуем создать копию этого файла. Для этого нужно ввести команду cp со следующей конструкцией:
cp /путь/до/файла /путь/до/копии_файла
Проверим что у нас получилось:
Как скопировать папку
Исходя из этого, если мы хотим полностью скопировать папку со всеми файлами и атрибутами, а также хотим наблюдать процесс, то наша команда должна иметь такой вид:
Допустим у нас есть папка dolly_family и несколько файлов dolly внутри нее.
Чтобы скопировать ее, формулируем следующую команду:
В целом у нас должно выглядеть примерно так
Проверим нашу копию dolly_family_clone.
Как видно, теперь у нас две папки с одинаковым содержимым и понимание как копировать папки.
Как перенести файл
mv /путь/до/файла /путь/куда/перенести/файл/
Допустим у нас есть файл под именем migrant и папка под именем place :
Теперь перенесем файл migrant в папку place :
Как перенести папку
Допустим у нас есть пустая папка place и папка migrant_family с десятью файлами внутри:
Теперь проверим что у нас получилось. Для начала убедимся, исчезла ли папка из текущего местоположения. Потом проверим содержимое place/ и place/migrant_family/
Выводы ls сообщают нам о том, что папка migrant_family/ успешно перебралась в папку place/ вместе со всем содержимым.
Как удалить файл
Попробуем удалить эти файлы и запасемся баранины впрок. Шаблон команды такой
Способ 1
Мы можем удалить сначала dolly, потом dolly_clone таким образом:
Способ 2
А можем уместить все в одну команду, перечислив через пробел файлы для удаления после rm:
Способ 3
Как удалить папку
То есть наша команда должна выглядеть вот так:
Чтобы удалить ее вместе со всем содержимым, формулируем следующую команду:
Система и утилиты
Как посмотреть инструкцию к команде прямо в терминале
Почти к каждой линукс утилите прикладывается help-информация, по которой вы можете понять как правильно использовать утилиту и ее опции.
Документацию к использованию утилиты можно получить таким образом:
Посмотрим на примере команды ls :
И прямо в терминале, не открывая никаких дополнительных текстовых редакторов, будет вывод документации.
help + grep
И получаем в выводе только те строчки, что потенциально будут интересны для нашей задачи, что довольно упрощает работу с документацией, ведь нам не нужно напрягать глаза, чтобы найти нужные опции. К тому же мы экономим время, отсеивая из вывода с помощью grep все лишнее. Вот так это выглядит в терминале:
Как посмотреть историю команд
На linuxinsider уже была статья про команду history, а в этом разделе будет описано кратко самое важное.
history + tail
Итак, если мы хотим увидеть 15 последних команд, значит команда должна иметь следующий вид:
Вот так примерно это должно выглядеть в терминале:
history + grep
history | grep «поисковая фраза»
Как посмотреть все запущенные процессы
Бывают ситуации когда кулеры зашумели довольно сильно, а совсем не понятна причина такого упорства. В этом случае стоит выяснить какой процесс или программа заставляет крутиться их в полную силу.
Чтобы вывести все запущенные процессы в Linux, достаточно ввести короткую команду:
В ответ терминал выдаст нам табличку, в которой перечислены процессы, их PID (Process ID), сколько они потребляют ресурсы процессора и памяти в процентах, а также много другой полезной информации информации в режиме реального времени.
Для выхода нужно нажать Q или комбинацию Ctrl + C.
По-умолчанию, как правило, эта таблица отсортирована по потреблению ресурсов. То есть чем больше ресурсов потребляет процесс, тем выше он находится. Как видно из примера, рекордсмен по потреблению ресурсов в данном случае браузер Chrome.
Как завершить процесс принудительно
Представим ситуацию, что у нас завис браузер Chrome и не хочет отзываться. В этом случае стоит закрыть браузер принудительно. Если мы точно знаем, как называется процесс в системе, то достаточно ввести команду killall название процесса. Шаблон очень прост:
killall «точное название процесса или утилиты»
То есть, если мы хотим закрыть принудительно chrome, то делать это нужно вот так:
Если процесс существовал в момент ввода команды, то в ответ вы ничего не получите, а процесс завершится «молча».
Выясняем имя «жертвы»
Но что делать, если мы не знаем как точно называется процесс в системе, но знаем часть его названия? Тут тоже есть выход и в этом случае сначала нужно узнать либо полное название процесса, либо его PID (Process ID).
Для примера также возьмем зависший браузер хром. Допустим мы знаем только часть названия «hrom». Чтобы посмотреть информацию об этом процессе, вводим:
Если название состоит из одного слова, то можно вводить без кавычек. Вывод будет таким:
По этому шаблону формулируем команду:
Результатом которой будет тихое убийство процесса, без всяческих отчетов и выводов.
Как узнать версию и разрядность Linux
Под термином «версия линукс» может скрываться сразу два смысла: версия дистрибутива и версия ядра.
Версия дистрибутива — это версия сборки вашей ОС, например Ubuntu 20.04 или Debian 10.
Версия ядра Linux — это то, на чем эти сборки работают, и выглядит она обычно так: 4.8.0-53-generic или так 5.4.48-06434.
Узнаем версию дистрибутива
Вот так это выглядит в терминале Debian 9:
Как узнать версию ядра Linux
На что вы получите в ответ только версию ядра и ничего лишнего:
Как узнать разрядность Linux
Информация о сети
Рассмотрим 3 типа IP-адресов, с которыми приходится сталкиваться чаще всего:
Разберем способы узнать внешний и локальный IP-адрес.
Как узнать внешний IP-адрес
В большинстве случаев, чтобы узнать свой внешний IP-адрес требуется сторонний сервис, который скажет с какого IP вы отправили ему запрос.
Как правило, эти сервисы представляют из себя обычные веб-страницы, вот их список:
Разницы в этих сайтах особо нет, выберите тот, который именно вам отвечает быстрее всего.
Их можно открывать через браузер, но это не всегда удобно, поэтому в примерах мы будем рассматривать как обращаться к ним прямо из терминала.
Способ 1: wget
Или вместо apt использовать yum, что зависит от вашего дистрибутива:
Например внешний IP-адрес можно узнать вот так:
И так с любым сайтом из этого списка. Вот так это выглядит в терминале:
Способ 2: curl (проще)
Второй способ — использовать curl. Сама по себе утилита более универсальна, чем wget и заслуживает не одну отдельную статью, но в данном примере мы разберем как с ее помощью узнать свой внешний IP-адрес.
Или вместо apt использовать yum, что зависит от вашего дистрибутива:
Итак, утилита curl установлена, теперь попробуем узнать свой внешний IP-адрес. C «курлом» это намного проще, нужно лишь ввести curl и один из сайтов, список которых выше. В целом шаблон команды такой:
Как узнать локальный IP-адрес
В примере используется Debian 9 и вывод там такой:
Стоит перечислить самые распространенные интерфейсы, чтобы можно было легко ориентироваться, какой адрес кому пренадлежит.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Навигация по файлам и директориям
В прошлый раз мы хаотично вводили текст в командную строку Linux и получали сообщения об ошибках. Все это время мы находились внутри домашнего каталога. Сегодня мы попытаемся разобраться как перемещаться по папкам при помощи команд и просматривать их содержимое.
Но для начало необходимо понять устройство файловой структуры Linux. Она представляет собой иерархическую структуру. То есть файловая система организована на подобии директорий (они же папки и каталоги), в которых расположены иные директории и файлы. Верхняя директория файловой системы называется корневой директорией. Внутри корневой директории расположены файлы и директории, которые содержат файлы и директории.
В графическом интерфейсе структура директорий выглядит следующим образом.
В отличии от файловой организации Windows, где корневыми директориями являются диски, в Linux есть единственное дерево и только одна корневая директория, которая не ассоциируется с каким либо физическим дисковым устройством. Различные диски могут быть подключены как поддеревья (директории) внутри этого дерева.
Разморозим нашу виртуальную машину и сделаем первые шаги в освоении организации файловой структуры Linux 🙂
Рабочая директория и её содержание
Так как интерфейс командной строки не может графически показать файловую структуру, существует иной способ ее представления. Представим, что дерево файлов является лабиринтом, в котором мы находимся. В каждый момент мы находимся в одной из директорий данного лабиринта. Внутри нее мы видим путь к родительской директории, файлы и пути во вложенные директории.
Директория в которой мы находимся называется рабочей директорией. Чтобы узнать имя рабочей директории, воспользуемся командой pwd (print working directory — вывести рабочую директорию).
Введем команду pwd в окно терминала.









