Основы навигации в Linux
Первая команда, которую мы изучим — pwd , сокращение от Print Working Directory (выведи рабочую директорию). Вы скоро увидите, что множество команд в Linux — это аббревиатуры слов, описывающих их. Это помогает лучше их запомнить. Собственно, команда и выводит текущую рабочую директорию. Попробуйте использовать ее.
Правильное выполнение многих команд терминала зависит от того, в нужном ли месте вы находитесь. Почаще используйте эту команду, чтобы не забывать, в какой вы директории.
Как узнать содержимое директории
Мы научились определять, в какой директории мы находимся. Теперь давайте научимся узнавать содержимое директории. В этом нам поможет команда ls — сокращение от list (список). Давайте опробуем ее.
Команда pwd отрабатывает сама по себе, без аргументов. ls в этом плане посильнее. В случае выше мы запустили ее без аргументов — она выведет список содержимого данной директории. Но от ls можно получить больше — ниже дана схема ее использования:
В примере выше квадратные скобки обозначают, что эти пункты опциональны, и мы можем запускать команду и с ними, и без них. Ниже я запустил разные варианты ls , чтобы продемонстрировать ее работу.
Рассмотрим код по частям:
- Строка 1 — запуск ls в базовой форме. Она вывела список содержимого текущей директории.
- Строка 4 — запуск ls с ключом -l , который означает, что команда выведет длинный список. В длинном списке есть следующее:
- Первый символ означает, является ли объект файлом — или директорией d .
- Следующие 9 символов — типы разрешений для файла или директории.
- Следующее поле — количество блоков (пока что не задумывайтесь об этом).
- Дальше — владелец файла или директории (в данном случае — karpaff)
- Дальше — группа, которой принадлежит файл или директория (в данном случае — users).
- Следующая часть — размер файла/директории.
- Затем идет время изменения.
- И в конце — название файла или директории.
Пути к файлам
При рассмотрении предыдущих команд мы затронули тему путей. Я хотел бы углубиться в эту тему, поскольку она важна для более эффективного использования Linux. Неважно, пытаемся мы обратиться к файлу или директории через командную строку, на самом деле мы обращаемся по пути. Путь — это способ добраться до конкретного файла или директории в системе.
Абсолютные и относительные пути
Существует два типа путей — абсолютные и относительные. Обращаемся мы к файлу или директории, мы будем использовать один из этих типов путей (система в любом случае будет направлена в правильное место).
Для начала нужно понять, что файловая система под Линуксом — это иерархическая структура. Наверху этой структуры находится корневая директория. Она обозначается одним слэшем / . У нее есть свои поддиректории, у них свои и так далее. Файлы могут находиться в любой из директорий.
Абсолютные пути указывают положение файла или директории относительно директории root . Их можно узнать по слэшу в начале пути / .
Относительные пути указывают положение файла или директории относительно ващего текущего местоположения в системе. Они не начинаются со слэша.
Пример:
- Строка 1 — запускаем pwd , чтобы узнать, где мы находимся.
- Строка 4 — запускаем ls с аргументом в виде относительного пути. Documents — директория в той папке, в которой мы сейчас находимся. Такая команда может выдать разный результат в зависимости от того, где мы находимся. Если бы у нас был другой пользователь в системе, скажем, Вася, и мы запустили бы эту команду в его домашней директории, выводом стало бы содержимое папки Documents Васи.
- Строка 7 — запускаем ls с аргументом в виде абсолютного пути. Вывод такой команды будет одинаков вне зависимости от того, где мы сейчас находимся.
Скоро вы увидите, что множество вещей в Linux можно получить несколькими разными способами. Пути — не исключение. Ниже приведены некоторые иные компоненты для построения путей.
(тильда) — обозначение вашей домашней директории. Например, если ваша домашняя директория /home/karpaff, то к директории Documents можно обратиться по пути /home/karpaff/Documents или по пути
Теперь вы знаете, что к местоположению можно обращаться множеством разных способов. Некоторые из вас зададутся вопросом, какой вариант лучше использовать? Ответ: любой, который больше нравится. Обращаетесь вы к файлу или директории, в командной строке вы обращаетесь по пути, а путь вы можете составить, используя любой из элементов, представленных выше. Лучший подход в этом деле — удобный именно для вас.
Примеры:
После того, как вы сами поиграетесь с этими командами в командной строке, вы станете лучше их понимать. Убедитесь, что понимаете, как работают элементы построения пути, поскольку мы будем использовать их в следующих уроках.
Как сменить директорию
Для передвижения по системе используется команда cd , сокращение от change directory (сменить директорию). Она работает следующим образом:
Подсказка: если вы запустите команду без аргументов, она вернет вас в домашнюю директорию.
Команду cd можно запускать и без аргументов, как мы видели в подсказке выше, но обычно ее запускают с одним аргументом командной строки — месту, в которое мы хотим перейти. Место определяется абсолютным или относительным путем с использованием любых элементов для построения путей, упомянутых выше.
Пример:
Автодополнение
Прописывать пути вручную может быть утомительно. А если вы, как и я, постоянно опечатываетесь, то вам очень поможет маленький механизм командной строки под названием автодополнение.
Когда вы печатаете путь в командной строке, нажмите кнопку Tab, чтобы применить механизм автозавершения. Если ничего не произошло, значит существует несколько вариантов продолжения пути. Нажмите Tab снова, и вы увидите эти варианты. Продолжайте печатать и опять нажмите Tab, и механизм снова попытается завершить путь за вас.
Это сложно продемонстрировать в статье, так что попробуйте потестировать эту фичу сами. Если вы напечатаете в командной строке cd /hTab/<начало вашего имени пользователя>Tab, вы поймете, как это работает.
Что нужно запомнить
Команды
pwd
Выводит текущую директорию.ls
Выводит писок содержимого директории.cd
Переводит в другую директорию.Понятия
Относительный путь
Местоположение файла или директории относительно вашего текущего местоположения в системе.Абсолютный путь
Местоположение файла или директории относительно корневой папки файловой системы.Практические задания
Давайте применим то, что мы только что узнали, на практике. Попробуйте выполнить следующие задания:
1. Начнем с передвижения по системе. Используйте команды cd и ls , чтобы больше узнать о директориях вашей системы и о том, что в них есть. Постарайтесь использовать разные варианты относительных и абсолютных путей. Интересные места для исследования:
• /etc — здесь хранятся конфигурационные файлы системы.
• /var/log — здесь хранятся файлы логов для разных системных программ. (У вас может не быть разрешений просматривать все в этой директории. Пусть это вас не останавливает. Пара сообщений об ошибках никому не помешает)
• /bin — место, в котором хранятся некоторые часто используемые программы.
• /usr/bin — еще одно место, в котором хранятся системные программы.2. А теперь вернитесь в домашнюю директорию 4 разными способами.
3. Постарайтесь почаще использовать автодополнение. Зачем напрягаться, если компьютер может что-то делать за вас?
Основы Linux от основателя Gentoo. Часть 1 (1/4): BASH, основы навигации
Добро пожаловать в первую из четырех частей обучающего руководства по основам Linux, разработанного чтобы подготовить вас к сдаче экзамена Linux Professional Institute 101. В нем вы познакомитесь с bash (стандартной оболочкой командного интерпретатора в Linux), узнаете о большинстве возможностей таких стандартных команд Linux, как ls, cp и mv, разберетесь в инодах, жестких и символьных ссылках, и многом другом. К концу этого руководства у вас сформируется некий фундамент знаний, и вы будете готовы к изучению основ администрирования Linux. К концу всего курса (8 частей), у вас будет достаточно навыков, чтобы стать системным администратором Linux и пройти сертификацию LPIC Level 1 от Linux Professional Institute, если конечно захотите.
Данная первая часть руководства отлично подходит для новичков в Linux, а также для тех пользователей, кто хочет освежить или улучшить свое понимание фундаментальных концепций Linux, таких, как копирование и перемещение файлов, создание символических и жестких ссылок, а также стандартных команд обработки текста, включая конвейеры и перенаправления. По ходу мы также дадим множество советов, подсказок и трюков, что делает это руководство насыщенным и практичным, даже для тех, кто уже имеет солидный опыт работы с Linux. Для начинающих большая часть этого материала будет новой, но более продвинутые пользователи Linux найдут это руководство отличным средством, чтобы разложить свои фундаментальные навыки по полочкам у себя в голове.
Тем, кто изучал первую версию этого руководства с целью, отличной от подготовки к экзамену LPI, возможно, что вам не нужно его перечитывать. Однако, тем же, кто планирует сдавать экзамены, стоит обязательно просмотреть данную исправленную версию.
Введение в bash
Оболочка
Если вы уже использовали Linux ранее, то наверняка знаете, что после входа в систему вас приветствует приглашение, которое выглядит примерно так:
На практике приглашение, которое вы видите, может немного отличаться. Например, оно может содержать имя хоста, имя текущей рабочей директории, или все вместе. Не зависимо от того, как выглядит ваше приглашение, есть одна несомненная вещь: программа, которая выводит это приглашение, называется оболочка интерпретатора команд (от англ. shell — оболочка, он же командная строка или терминал — прим. пер.), и, вероятнее всего, вашей командной оболочкой будет ‘bash’.
А у вас запущен bash?
Вы можете убедиться, что используете bash, набрав:
$ echo $SHELL
/bin/bashЕсли строчка выше выдает ошибку, или ответ не соответствует, возможно, что вы запустили другую оболочку. В этом случае большая часть этого руководства все еще будет полезна, но было бы значительно лучше для вас переключиться на bash, ради подготовки к экзамену 101.
О bash
Bash — это акроним от Bourne-again-shell, от англ. «ещё-одна-командная-оболочка-Борна» или «рождённая-вновь-командная оболочка» (тут игра слов Bourne/born — прим. пер.), и является оболочкой по умолчанию для большинства Linux-систем. Задача оболочки получать от вас команды, через которые вы взаимодействуете с Linux-системой. После того, как вы закончили ввод команд, вы можете выйти из оболочки (exit) или закончить сеанс (logout), в этом случае вы увидите приглашение входа в систему.
Кстати, вы также можете выйти из оболочки bash нажав control-D в приглашении.
Использование «cd»
Вы, возможно, уже обнаружили, что пялиться на приглашение bash — не самое впечатляющее занятие в мире. Ну что ж, давайте узнаем как путешествовать по нашей файловой системе. В приглашении введите пожалуйста следующую команду (без $):
Вы только что сообщили bash, что хотите работать в директории /, также известной, как корневая; все директории в системе имеют форму дерева, и / является его вершиной, т.е. корнем (в информатике деревья растут наоборот, корень вверху, а ветки спускаются вниз — прим. пер.). cd устанавливает директорию, в которой вы в данный момент работаете, также известную как «текущая рабочая директория».
Чтобы узнать текущую рабочую директорию в bash нужно набрать:
В примере с cd, аргумент / называется путь. Он сообщает cd куда мы хотим отправиться. В частности, аргумент / это абсолютный путь, что значит, что он задает расположение относительно корня дерева файловой системы.
Абсолютные пути
Ниже несколько из них:
/dev
/usr
/usr/bin
/usr/local/binКак можно заметить, у всех абсолютных путей есть одна общая черта, они начинаются с /. Указывая, допустим, /usr/local/bin в качестве аргумента для cd, мы сообщаем, что хотим попасть в / директорию, затем в usr директорию внутри нее, и так далее в local и bin, вниз по дереву. Абсолютные пути всегда отсчитываются начиная от / сперва.
Относительные пути
Другой тип пути называется «относительный путь». bash, cd, и другие команды всегда интерпретируют их относительно текущей директории. Относительные пути НИКОГДА не начинаются с /. Так, если мы сначала переместимся в /usr:
То, затем мы можем использовать относительный путь local/bin, чтобы попасть в директорию /usr/local/bin:
$ cd local/bin
$ pwd
/usr/local/binИспользование ..
Относительные пути могут также содержать одну или более «..» директории. Директория «..» специальная; она указывает на родительскую директорию. Так, продолжая с примера выше:
$ pwd
/usr/local/bin
$ cd ..
$ pwd
/usr/localКак видно, наша текущая директория теперь /usr/local. Мы смогли переместиться «назад» на одну директорию относительно текущей, где были до того.
Кроме того, мы также можем использовать «..» в существующем относительном пути, позволяющем нам переместиться в директорию «рядом» с той, в которой находимся:
$ pwd
/usr/local
$ cd ../share
$ pwd
/usr/shareПримеры относительных путей
Относительные пути могут быть чуточку более сложными. Ниже несколько примеров, попробуйте самостоятельно догадаться, где вы окажетесь после набора каждой из этих команд.
$ cd /bin
$ cd ../usr/share/zoneinfo$ cd /usr/X11R6/bin
$ cd ../lib/X11$ cd /usr/bin
$ cd ../bin/../binА теперь наберите их и проверьте свои предположения. 😉
Понимание .
Перед тем как мы закончим изучение cd, есть несколько моментов, которые необходимо прояснить. Во-первых, есть еще одна специальная директория «.», которая означает «текущая директория». Хотя она и не используется с командой cd, но часто используется для выполнения программы из текущей директории, как в следующем примере:
В данном случае будет запущена исполняемая программа myprog, находящаяся в текущей рабочей директории.
cd и домашняя директория
Если бы мы хотели переместиться в нашу домашнюю директорию, то могли бы набрать:
Без каких либо аргументов cd переместит в вашу домашнюю директорию, которая будет /root для суперпользователя, или обычно /home/username (где username — имя пользователя в системе — прим.пер.) для любого другого пользователя. Но, что если мы хотим указать файл в нашей домашней директории? Может быть мы хотим передать путь к файлу в качестве аргумента нашей программе myprog. Если файл расположен в нашей домашней директории, мы можем набрать:
$ ./myprog /home/drobbins/myfile.txt
Однако, использования абсолютного пути вроде этого, не всегда удобно. К счастью, мы можем использовать символ
(тильда), чтобы проделать то же самое:
Другие домашние директории пользователей
Bash воспримет одиночную
как указатель на вашу домашнюю директорию, но вы также можете использовать её для указания на домашние директории других пользователей. Например, если мы хотели сослаться на файл под названием fredsfile.txt в домашней директории пользователя fred, то могли бы набрать:
Об авторах
Daniel Robbins
Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава Funtoo, написал множество технических статей для IBM developerWorks, Intel Developer Services и C/C++ Users Journal.
Chris Houser
Крис Хаусер был сторонником UNIX c 1994 года, когда присоединился к команде администраторов университета Тэйлора (Индиана, США), где получил степень бакалавра в компьютерных науках и математике. После он работал во множестве областей, включая веб-приложения, редактирование видео, драйвера для UNIX и криптографическую защиту. В настоящий момент работает в Sentry Data Systems. Крис также сделал вклад во множество свободных проектов, таких как Gentoo Linux и Clojure, стал соавтором книги The Joy of Clojure.
Aron Griffis
Эйрон Гриффис живет на территории Бостона, где провел последнее десятилетие работая в Hewlett-Packard над такими проектами, как сетевые UNIX-драйвера для Tru64, сертификация безопасности Linux, Xen и KVM виртуализация, и самое последнее — платформа HP ePrint. В свободное от программирования время Эйрон предпочитает размыщлять над проблемами программирования катаясь на своем велосипеде, жонглируя битами, или болея за бостонскую профессиональную бейсбольную команду «Красные Носки».
Относительный и абсолютный путь в Linux. В чём разница?
Не знаете, использовать ли выражения относительного или абсолютного пути в своем следующем проекте? Начните с изучения разницы между ними.
Абсолютные и относительные пути — это два способа указать виртуальный адрес каталога или файла в Linux. Но в чем разница между этими двумя типами путей и какой из них следует использовать в ваших командах? Давай выясним.
Относительные и абсолютные пути в Linux
Если вы когда-либо использовали какую-либо команду Linux, основанную на аргументах, такую как cd или ls, вы должны знать, что существует несколько способов указать путь к каталогу или файлу.
Вы можете либо предпочесть придерживаться обычных выражений пути, либо, если вы опытный пользователь Linux, использовать сложные регулярные выражения для передачи имени файла или каталога в программу. В любом случае, в Linux есть только два способа указать путь к каталогу: абсолютный путь и относительный путь.
Выражения абсолютного пути
Абсолютный путь всегда начинается с корневого каталога и заканчивается фактическим каталогом или файлом, на который вы хотите указать. При использовании выражения абсолютного пути вам необходимо ввести все имена подкаталогов, присутствующих внутри иерархии, которые ведут к конечному местоположению.
Например, если вы хотите указать на /myfolder/folder2 внутри каталога /var/www, используя выражение абсолютного пути, вы должны использовать:
…где / в начале выражения относится к корневому каталогу в Linux.
Выражения относительного пути
Относительный путь, с другой стороны, относится к выражению пути, которое использует другой путь (обычно текущий рабочий каталог) в качестве корня или базы. Как следует из названия, это «относительно» существующего пути в вашей системе.
Например, если вы сейчас находитесь в каталоге /var/www и вам нужно указать на /myfolder/folder2, вы должны использовать:
… где . обозначает текущий каталог, в котором вы находитесь. Вы можете изменить текущий рабочий каталог с помощью команды cd.
Помимо одиночной точки ( . ), выражения относительного пути также используют двойные точки ( .. ) для ссылки на родительский каталог.
Например, предположим, что вы находитесь внутри каталога /www внутри следующей структуры каталогов:
В приведенном выше выражении пути . будет обозначать каталог /www, тогда как .. будет указывать на каталог /var. Если внутри /var есть другой каталог /random, к которому вам нужно получить доступ, пока вы находитесь внутри /var/www, вы должны использовать:
Абсолютный или относительный: какое выражение пути лучше?
Хотя выражения пути могут показаться вам простыми и неважными для вас, как для пользователя настольного компьютера, существуют различные варианты использования, когда использование неправильного имени пути может привести к множеству нежелательных неудобств. Веб-серверы являются хорошим примером.
Как веб-разработчик, работающий над проектом, размещенным на сервере Linux, вам необходимо получить доступ к файлам внутри каталога проекта. Здесь использование выражений относительного пути является стандартом, поскольку любое изменение имен подкаталогов или доменного имени проекта может привести к неработающим ссылкам.
Вы можете понять это на простом примере, который может быть более понятен пользователям настольных компьютеров. Символ / обозначает корневой каталог в системе Linux. Представьте, если вы вдруг измените это и сделаете символ / указывающим на домашний каталог. Многие из ваших команд, содержащих выражения абсолютного пути, не будут работать, так как / теперь переназначен другому каталогу.
Еще одно преимущество использования выражений относительного пути заключается в том, что, поскольку они относятся к текущему рабочему каталогу, это экономит ваше время, которое вы в противном случае потратили бы на ввод ненужных символов.
Единственная загвоздка здесь — это сложность и кривая обучения, связанные с относительными выражениями. Но это также часто встречается в выражениях абсолютного пути; чтобы стать мастером использования абсолютных путей, вам нужно хорошо разбираться в иерархии каталогов Linux. Вы можете использовать команду tree, чтобы просмотреть все дерево каталогов Linux и упростить для себя выражение абсолютного пути.
Понимание иерархии каталогов Linux
Структура каталогов Linux является общей для всех машин, работающих под управлением операционных систем на базе Linux. Вы можете использовать такую команду, как ls или tree, чтобы узнать больше о том, как структурированы файлы и каталоги на вашем компьютере, ну, или дождаться следующей статьи. С последним, желаю удачи!)
Первые шаги в командной строке
Для начала работы в терминале Linux не нужно быть гуру администрирования — достаточно знать список базовых команд для навигации и работы с файлами и папками.
Навигация
После подключения к серверу вы оказываетесь в домашней папке пользователя. Чтобы узнать точный путь к вашему текущему местонахождению, воспользуйтесь командой:
Она выведет текущую рабочую директорию (print working directory).
Если вам нужно перейти в другую папку, для этого используется команда cd (change directory) с указанием пути к нужной вам папке:
Говоря о навигации, нельзя не упомянуть сокращения для обозначения некоторых директорий:
текущая директория, в которой вы сейчас находитесь. Например, чтобы найти файл с именем hello.txt в текущей директории, можно использовать команду:
директория, расположенная на уровень выше текущей. Если вы находитесь в папке /home/user , то комбинация .. будет обозначать папку /home . То есть, чтобы вернуться на один уровень назад, необязательно вводить весь путь:
домашняя папка текущего пользователя. Например, запустить скрипт some-script.sh из домашней папки, когда вы находитесь в другой директории, можно так:
предыдущая посещённая директория. Представим, что вы перешли в папку /home , потом вам потребовалось изменить настройки в папке /etc . Чтобы вернуться назад, достаточно использовать команду:
Для навигации с помощью команды cd есть два формата указания пути к нужной папке: абсолютный и относительный.
Абсолютный путь — это полный путь от корневой папки сервера «/» . Например, вот такой:
Также к абсолютным относятся пути, в которых используется
— указание на домашнюю папку текущего пользователя. Например, при доступе к файлу
/.bash_profile он всегда будет открываться из одного и того же места: вместо
будет использоваться значение переменной окружения $HOME, которое не меняется.
Относительный путь — это неполный путь. Он указывается относительно какого-то объекта: например, текущей рабочей директории. То есть в начале отсутствует символ корневой папки «/» .
Представим, что мы сейчас работаем с файлами в папке /var/www/data/username . Нам нужно отредактировать содержимое в директории на уровень выше — /var/www/data . Чтобы управлять данными в этой папке, нам не обязательно постоянно указывать полный путь к ним — можно работать с относительным, начиная его с «../» .
Также относительные пути используются, когда нужно выполнить операцию над файлом или папкой в директории, в которой мы сейчас работаем. Для выполнения команды достаточно указать имя файла или папки — система поймёт, что мы имеем в виду файл из текущего каталога.
Чтобы отобразить список содержимого папки, можно использовать команду ls (list). Если дополнить её ключами -al , она покажет типы данных, разрешения и скрытые файлы. Следующий пример покажет названия файлов и папок текущей рабочей папки:
А этот выведет в терминал подробный список содержимого папки /etc:
Чтобы немного упростить себе жизнь, можно использовать консольные файловые менеджеры, например, mc .
Ubuntu и Debian:
CentOS:
Его особенность — примитивный графический интерфейс. Он позволяет быстро ориентироваться в структуре каталогов, перемещаться между ними, создавать новые директории. Интерфейс разбит на два окна, между которыми вы можете перемещать файлы и папки. Помимо прочего, в нём можно работать и с помощью мыши — перемещаться двойным кликом по папкам, использовать кнопки в нижней части панели.
Поиск
С помощью команды find можно найти на сервере папку или файл по набору условий. Структура команды проста:
Например, мы знаем название файла hello.txt , но не знаем, где именно на сервере он лежит. Найти его поможет конструкция:
- / указывает, что искать надо, начиная с корневой папки сервера. Если вам известно, где может лежать искомый файл, можно задать путь точнее.
- -name указывает, что искать надо строго по имени.
- «hello.txt» — имя файла, который нам нужно найти. Если известна только часть имени, можно указать сокращённый вариант: «hello*» , «*.txt»
Кроме -name , команда find имеет множество опций, которые позволяют уточнить условия поиска подробнее. Вот список наиболее полезных параметров:
Позволяет указать тип искомых данных: -type f — файлы, -type d — директории
Позволяет вывести файлы с определённым уровнем доступа. Например, — perm 777
Отображает только пустые файлы или папки
Позволяет искать данные среди файлов, принадлежащих конкретному пользователю: -user root
Позволяет искать данные среди файлов, принадлежащих определённой группе пользователей: -group www-data
Позволяет задать условие относительно времени изменения файлов:
- -mtime 7 — файлы, менявшиеся в течение последних 7 дней;
- -mtime +7 — файлы, менявшиеся в срок более чем 7 дней назад;
- -mtime -14 — файлы, менявшиеся в срок менее чем 14 дней назад.
Позволяет задать условие относительно времени последнего доступа к файлу, аналогично mtime
Позволяет уточнить размер (или диапазон размера) искомых файлов
Позволяет применить к найденным файлам команду COMMAND
Больше информации о возможностях find можно узнать в файлах документации:
Из встроенных инструментов поиска можно также отметить утилиту whereis . Она предназначена для поиска бинарных и системных файлов и директорий служб. Следующий пример выведет список всех файлов и папок, имеющих прямое отношение к php :
Работа с папками
Для создания новых директорий используется команда mkdir с указанием пути до создаваемой папки. Пример ниже создаст папку /new в существующей директории /home/user :
Если нужно создать сразу несколько вложенных папок, можно использовать параметр -p . В таком случае все несуществующие директории, указанные в пути, будут созданы автоматически. Представим, что нам нужно создать вложенные папки docs/photos/2020-08-17 в текущей директории — это будет выглядеть так:
Если нужно создать несколько папок за раз, можно просто перечислить их через пробел:
Удалить папку можно с помощью команды rmdir с указанием пути. Папка будет удалена только в случае, если она пуста (можно использовать параметр —ignore-fail-on-non-empty , чтобы удалить папку в любом случае). Для удаления нескольких вложенных папок можно аналогично использовать параметр -p . Пример ниже удалит папку /photos и все каталоги внутри неё:
Для удаления есть более эффективный инструмент, rm , про который расскажем ниже.
Работа с файлами
Создание
В терминале есть несколько способов создания новых файлов.
Самый простой, одновременно создающий и файл, и недостающие папки — команда touch . Достаточно передать ей полный путь к файлу. Для примера создадим в папке docs папку copies , а внутри неё — файл copies-list.txt :
Несуществующая папка copies создастся автоматически.
Если нужно создать сразу несколько файлов, можно просто перечислить их через пробел:
Ещё один способ создания новых файлов — вызвать какой-нибудь консольный текстовый редактор с указанием полного пути к файлу. Однако все папки придётся создать заранее. Тогда редактор автоматически создаст файл и откроет его для редактирования. Если не сохранить файл в редакторе, даже пустой, он не будет создан. Команда ниже добавит новый файл с помощью редактора vi :
Для сохранения и выхода из файла в vi нужно нажать клавишу Esc , ввести сочетание :wq и нажать Enter . Для выхода без сохранения нужно также нажать Esc , ввести сочетание :q! и нажать Enter .
Ещё пара способов создания пустых файлов:
Редактирование
Для редактирования файлов используются консольные текстовые редакторы. Самые известные — vi и nano . В некоторых дистрибутивах vi заменён на vim ( vi improved, улучшенный vi ) или vim.tiny
Редактор vi будет доступен вам по умолчанию на большинстве Linux-систем.
А теперь к делу. Vi (более известен как Vim) — старый, очень гибкий и при этом не очень простой в плане управления редактор. Собственно, так он и попал в популярные программистские и админские шуточки.
Запуск редактора без аргументов откроет его в режиме справки:
Чтобы закрыть Vim (без сохранения), введите сочетание :q!
Если указать редактору путь к файлу, он откроет его для редактирования. Если файл не существовал, он будет создан:
При первом входе Vim открывает файл в режиме просмотра. Он не позволяет редактировать его содержимое, но можно вводить командные последовательности, перемещаться по тексту, выполнять поиск и пр.
Чтобы начать ввод, нужно перейти в режим редактирования с помощью клавиши I . Чтобы вернуться в режим просмотра, нажмите Esc .
Перемещение по тексту выполняется с клавиатуры:
- перемещение в начало текста: Esc + дважды G
- перемещение в конец текста: Shift + G
- перемещение по строке горизонтально: стрелки ← →
- перемещение по строкам вертикально: стрелки ↑ ↓
- отображение номеров строк: Esc , введите :set number , нажмите Enter
- перемещение по номерам строк: Esc , введите : номер строки, нажмите Enter
Для выхода с сохранением файла нажмите Esc и введите :wq!
Текстовый редактор vim — краткое руководство
Более современной и удобной альтернативой Vim считается редактор nano . Современные дистрибутивы включают его по умолчанию, но на ранних версиях устанавливать придётся вручную:
Ubuntu и Debian:
CentOS:
Вызов nano без аргументов откроет пустой редактор. Можно начать ввод (при сохранении вам будет предложено указать имя и сохранить файл) или вызвать режим помощи со списком доступных команд с помощью сочетания Ctrl + G .
Для сохранения файла нажмите Ctrl + O — редактор предложит ввести имя файла: введите имя и нажмите Enter . Если файл существовал, и имя изменять не требуется, просто нажмите Enter .
Для выхода из редактора нажмите Ctrl + X .
Чтение
Бывает, что нам нужно получить какую-то информацию из файла без необходимости редактировать его. В таком случае необязательно использовать текстовый редактор — есть более простые инструменты.
Команда cat позволяет вывести в терминал всё содержимое файла, который указан в качестве аргумента:
Однако, если мы заведомо знаем, что в файле большой объём информации, нет смысла выводить его целиком. Например, команды head и tail могут вывести часть содержимого с начала или конца файла соответственно. Если добавить к ним ключ -n , можно уточнить, сколько строк текста нужно вывести:
Помимо прочего, команда tail очень удобна для чтения логов с ключом -f . В таком режиме она открывает файл в режиме ожидания и выводит все добавляемые данные. Пригодится для тестирования или дебаггинга.
Иногда нам всё-таки нужно полностью просмотреть файл. При этом читать его вывод в терминале неудобно. На такие случаи есть команда less — она открывает файл (или переданный в неё вывод другой команды) в режиме чтения:
В режиме чтения less можно перемещаться, искать текст и многое другое. Все командные последовательности и горячие клавиши можно вывести с помощью параметра —help :
Для выхода из режима чтения введите q и нажмите Enter .
Удаление
Для удаления файлов используется команда rm . Она крайне опасна — неправильное применение грозит удалением всего содержимого сервера. Поэтому, как говорится, семь раз отмерь, один раз отрежь: категорически важно перепроверять путь, который вы указываете для удаления.
Самая простая версия rm удалит файл с предварительным подтверждением — для этого потребуется ввести y и нажать Enter :
Для полного же уничтожения всего и вся к команде добавляются параметры -rf . Первый отвечает за рекурсивное удаление данных (т.е. удаление вложенных файлов и папок), второй позволяет отключить подтверждение при удалении. Например, следующая команда удалит папку photos , размещённую в папке docs , и всё её содержимое:
Для шуток над неопытными администраторами им под тем или иным предлогом предлагают выполнить команду rm -rf [/] (без квадратных скобок). Она удаляет всё содержимое сервера от корня. Результат — все данные безвозвратно теряются, а сервер перестаёт работать.
Скачивание и загрузка
Для передачи файлов на сервер и с сервера есть много способов. Самые простые — использование wget , curl или scp .
wget позволяет скачивать данные на сервер. Он поддерживает HTTP, HTTPS и FTP протоколы.
Скачать файл по ссылке в вашу текущую рабочую директорию можно с помощью команды:
С помощью параметра -P можно указать путь, куда нужно сохранить скачиваемый файл:
Полный список параметров wget можно посмотреть в справочной информации:
curl используется как для скачивания файлов на ваш сервер, так и для передачи данных с него на другие серверы / хранилища. Он универсальнее wget благодаря огромному количеству поддерживаемых протоколов: FTP, HTTP, HTTPS, IMAP, POP3, SCP, SFTP, SMB, SMTP, Telnet и др.
В современных дистрибутивах curl установлен по умолчанию. При необходимости установить его вручную можно следующим образом:
- Ubuntu и Debian:
apt -y install curl - CentOS:
yum -y install curl
Для работы с curl нужно знать название и расположение файлов, которые необходимо скачать/загрузить. Например, так будет выглядеть команда на скачивание файла по ссылке:
В примере мы скачиваем архив latest-ru_RU.tar.gz по ссылке и сохраняем его в текущую рабочую директорию с таким же именем — за это отвечает ключ -O . Если использовать опцию -o , можно задать своё имя ( wp.tar.gz ) для сохраняемого файла:
Если нам нужно загрузить файл c нашего сервера на другой, используется следующая конструкция:
Здесь файл filename.txt из текущей рабочей директории загружается на сайт example.com в папку downloads/ и сохраняется с именем filename.txt . Пример подразумевает, что у нас есть права на запись в указанный каталог.
Остальные возможности curl можно узнать в справочной информации:
Утилита scp позволяет копировать файлы между двумя серверами, используя протокол SSH.
Например, для передачи файла filename.txt с нашего сервера на удалённый сервер 1.2.3.4 в папку new-documents пользователя username можно использовать следующую команду:
В процессе система запросит у нас пароль пользователя username для подключения к удалённому серверу. После авторизации файл будет скопирован на целевой сервер в указанную папку.
Чтобы скачать файл с удалённого сервера, достаточно немного видоизменить нашу команду:
Здесь мы в качестве источника для получения копии файла указали удалённый сервер, а в качестве цели для загрузки копии — папку на текущем сервере.
С помощью scp аналогичным образом можно копировать данные между двумя удалёнными серверами:
Запуск исполняемых bash-скриптов
Чтобы запустить скрипт script.sh на сервере, нужно выполнить два шага:
Настроить права на запуск файла для пользователей:
Запустить скрипт. Если вы находитесь в той же директории, где лежит скрипт, достаточно вызвать его по имени:
В некоторых случаях нужно использовать команду sh либо указать путь к исполняемому файлу командной оболочки:
Если вы находитесь в другой директории, для запуска нужно указать полный путь к скрипту.
Чтобы иметь возможность запускать скрипт из любого места на сервере одной простой командой, можно создать для него алиас — короткую команду (псевдоним), которая будет ассоциироваться системой с полным вызовом скрипта.
Весь список существующих алиасов системы можно вывести с помощью команды alias :
Создать свой постоянный алиас можно с помощью файла .bashrc , размещённого в домашнем каталоге вашего пользователя. Нужно открыть его для редактирования:
В соответствующем разделе нужно добавить ваш алиас в следующем формате:
Например, если нам потребуется создать псевдоним для скрипта выше, настройки будут выглядеть так:
Чтобы после добавления алиас сразу стал доступен, предварительно нужно обновить командную оболочку:
После этого вы сможете вызывать ваш скрипт с помощью короткой команды.
Скрипт можно добавить в расписание планировщика cron , чтобы он запускался регулярно.
Как настроить cron по ssh
Переименование, перемещение и копирование файлов и папок
Скопировать файл в терминале можно с помощью команды:
C её помощью можно, к примеру, создать копию конфигурационного файла, который вы хотите изменить. Здесь мы создаём копию конфигурационного файла nginx.conf
Папки копируются аналогично. При необходимости скопировать каталог со всем содержимым (рекурсивно) можно добавить к команде ключ -r :
Здесь мы создаём копию папки docs со всем её содержимым с именем files .
Переместить или переименовать файл также просто:
Например, следующая команда переместит файл file.txt в папку new :
Переименовать файл не сложнее:
В этом примере файл file.txt переименовывается в todolist.txt
Аналогично можно перемещать и переименовывать директории.
Теперь, когда вы можете перемещаться по серверу и работать с файлами и папками, самое время познакомиться с файловой структурой Linux-систем.