Тариф успешно добавлен в корзину
В корзину
url image

Основные команды для работы с файлами и папками в Linux

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

Навигация

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

pwd

Она выведет текущую рабочую директорию (print working directory). 

Если вам нужно перейти в другую директорию, для этого используется команда cd (change directory) с указанием пути к нужной вам директори:

cd /home

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

/корневой каталог сервера
.

текущая директория, в которой вы сейчас находитесь. Например, чтобы найти документ с именем hello.txt в текущей директории, можно использовать команду: 

find . -name hello.txt
..

директория, расположенная на уровень выше текущей. Если вы находитесь в /home/user, то комбинация .. будет обозначать папку /home. То есть, чтобы вернуться на один уровень назад, достаточно выполнить команду: 

cd ..
~

домашняя директория текущего пользователя. Например, запустить скрипт some-script.sh из домашней директории, когда вы находитесь в другой, можно с помощью команды:

sh ~/some-script.sh
-

предыдущая посещённая директория. Представим, что вы перешли в /home, потом вам потребовалось изменить настройки в /etc. Чтобы вернуться назад, достаточно использовать команду: 

cd -

 

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

Абсолютный путь — это полный путь от корневого каталога сервера «/». Например, вот такой: 

/var/www/data/username/data/www/example.com/

Также к абсолютным относятся пути, в которых используется ~ — указание на домашний каталог текущего пользователя. Например, при доступе к файлу ~/.bash_profile он всегда будет открываться из одного и того же места: вместо ~ будет использоваться значение переменной окружения $HOME, которое не меняется.

Относительный путь — это неполный путь. Он указывается относительно какого-то объекта: например,  текущей рабочей директории. То есть в начале отсутствует символ корневого каталога «/».

./docs/files/file.txt
file.txt

Представим, что мы сейчас работаем с файлами в /var/www/data/username. Нам нужно отредактировать содержимое в директории на уровень выше — /var/www/data. Чтобы управлять данными в этой директории, нам не обязательно постоянно указывать полный путь к ним — можно работать с относительным, начиная его с «../»

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

Чтобы отобразить список содержимого каталога, можно использовать команду ls (list). Она покажет названия объектов в текущем каталоге:

ls

Если дополнить её ключом -al, команда покажет типы данных, разрешения и скрытые объекты. Например, в этом случае она выведет в терминал подробный список содержимого /etc:

ls -al /etc

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

  • Ubuntu и Debian:

    apt -y install mc
    
  • CentOS:

    yum -y install mc

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

Поиск

С помощью команды find можно найти на сервере директорию или файл по набору условий. Структура команды проста: 

find [где искать] [как искать] [что искать]

Например, мы знаем название скрипта hello.txt, но не знаем, где именно на сервере он лежит. Найти его поможет команда:

find / -name "hello.txt"
  • / указывает, что искать надо, начиная с корневой директории сервера. Если вам известно, где может лежать искомое, можно задать путь точнее.
  • "hello.txt" — имя файла, который нам нужно найти. Если известна только часть имени, можно указать сокращённый вариант: "hello*", "*.txt"

Кроме -name, команда find имеет множество опций, которые позволяют уточнить условия поиска. Вот список наиболее полезных параметров:

-typeПозволяет указать тип искомых данных: -type f — файлы, -type d — директории
-permПозволяет вывести файлы с определённым уровнем доступа. Например, -perm 777
-emptyОтображает только пустые файлы или папки
-userПозволяет искать данные среди файлов, принадлежащих конкретному пользователю: -user root
-groupПозволяет искать данные среди файлов, принадлежащих определённой группе пользователей: -group www-data
-mtime

Позволяет задать условие относительно времени изменения:

  • -mtime 7 — менявшиеся в течение последних 7 дней;
  • -mtime +7 — менявшиеся более чем 7 дней назад;
  • -mtime -14 — менявшиеся менее чем 14 дней назад.
-atimeПозволяет задать условие относительно времени последнего доступа, аналогично mtime
-sizeПозволяет уточнить размер (или диапазон размера) 
-exec COMMAND {}Позволяет применить к найденным файлам команду COMMAND

 

Больше информации о возможностях команды find можно узнать в документации. Здесь на помощь пользователям приходит команда man — используя её, вы сможете получить полную справочную информацию о любой команде Linux:

man find

Из встроенных инструментов поиска можно также отметить утилиту whereis. Она предназначена для поиска бинарных и системных файлов и директорий служб. Следующий пример выведет список всех объектов, имеющих прямое отношение к php:

whereis php

Работа с папками

Чтобы создать новую папку в Linux используется команда mkdir с указанием пути. Например, команда ниже создаст директорию /new в /home/user:

mkdir /home/user/new

Если нужно создать сразу несколько вложенных папок, можно использовать параметр -p. В таком случае все несуществующие директории, указанные в пути, будут созданы автоматически. Представим, что нам нужно создать вложенные папки docs/photos/2020-08-17 в текущей директории — тогда команда будет выглядеть так:

mkdir -p docs/photos/2020-08-17

Если нужно создать несколько папок за раз, можно просто перечислить их через пробел:

mkdir docs pictures games

Удалить директорию можно с помощью команды rmdir с указанием пути. При этом она будет удалена только в случае, если она пуст (можно использовать параметр --ignore-fail-on-non-empty, чтобы удалить ее в любом случае). Для удаления нескольких вложенных папок можно аналогично использовать параметр -p. Например, команда ниже удалит /photos и все папки внутри нее: 

rmdir -p docs/photos

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

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

Создание

Самый простой способ создать файл в Linux  — команда touch. Для этого ей достаточно только передать полный путь. Например, создадим в директории docs папку copies, а внутри неё — copies-list.txt:

touch docs/copies/copies-list.txt

Несуществующая папка copies создастся автоматически.

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

touch file1.txt file2.txt file3.txt file4.txt file5.txt

Ещё один способ — вызвать какой-нибудь консольный текстовый редактор с указанием полного пути к файлу. Тогда редактор автоматически создаст его и откроет для редактирования. Однако все папки придётся создать заранее, а файл придётся сохранить (даже пустой), иначе он не будет создан. 

Команда ниже создаст new-file.txt с помощью редактора vi:

vi new-file.txt

Для сохранения и выхода в vi нужно нажать клавишу Esc, ввести сочетание :wq и нажать Enter. Для выхода без сохранения нужно также нажать Esc, ввести сочетание :q! и нажать Enter.

Чтобы создать пустой файл в Linux можно с помощью команды cat или команды echo: 

cat > new-file.txt
echo > new-file.txt

Редактирование

Для редактирования используются консольные текстовые редакторы. Самые известные — vi и nano. В некоторых дистрибутивах vi заменён на vim (vi improved, улучшенный vi) или vim.tiny

Редактор vi будет доступен вам по умолчанию на большинстве Linux-систем.

А теперь к делу. Vi (более известен как Vim) — старый, очень гибкий и при этом не очень простой в плане управления редактор. Собственно, так он и попал в популярные программистские и админские шуточки, а вопрос «как выйти из Vim?» стал практически культовым среди пользователей Linux-систем. 

Запуск редактора без аргументов откроет его в режиме справки: 

vi

Чтобы закрыть Vim (без сохранения), введите сочетание :q!

Если указать редактору путь к файлу, он откроет его для редактирования. Если его не существовало, то он будет создан:

vi new-file.txt

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

Чтобы начать ввод, нужно перейти в режим редактирования с помощью клавиши I. Чтобы вернуться в режим просмотра, нажмите Esc.

Перемещение по тексту выполняется с клавиатуры:

  • перемещение в начало текста: Esc + дважды G
  • перемещение в конец текста: Shift + G
  • перемещение по строке горизонтально: стрелки
  • перемещение по строкам вертикально: стрелки
  • отображение номеров строк: Esc, введите :set number, нажмите Enter
  • перемещение по номерам строк: Esc, введите : номер строки, нажмите Enter

Для выхода с сохранением файла нажмите Esc и введите :wq!

Текстовый редактор vim — краткое руководство

Более современной и удобной альтернативой Vim считается редактор nano. Современные дистрибутивы Linux включают его по умолчанию, но на ранних версиях устанавливать придётся вручную: 

  • Ubuntu и Debian:

    apt -y install nano
  • CentOS:

    yum -y install nano

Вызов nano без аргументов откроет пустой редактор. Можно начать ввод (при сохранении вам будет предложено указать имя и сохранить файл) или вызвать режим помощи со списком доступных команд с помощью сочетания Ctrl+G.

Для сохранения нажмите Ctrl+O — редактор предложит ввести имя файла: введите имя и нажмите Enter. Если файл существовал и имя изменять не требуется, просто нажмите Enter.

Для выхода из редактора нажмите Ctrl+X.

Чтение

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

Например, команда cat позволяет вывести в терминал всё содержимое файла, который указан в качестве аргумента: 

cat example.txt

Однако, если мы заведомо знаем, что в файле большой объём информации, нет смысла выводить его целиком. Например, команды head и tail могут вывести часть содержимого с начала или конца соответственно. Если добавить к ним ключ -n, можно уточнить, сколько строк текста нужно вывести:

head -n 3 example.txt
tail -n 3 example.txt

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

Иногда нам всё-таки нужно полностью просмотреть файл. При этом читать его вывод в терминале неудобно. На такие случаи есть команда less — она открывает файл (или переданный в неё вывод другой команды) в режиме чтения: 

less example.com

В режиме чтения команда less можно перемещаться, искать текст и многое другое. Все командные последовательности и горячие клавиши можно вывести с помощью параметра --help:

less --help

Для выхода из режима чтения введите q и нажмите Enter.

Удаление

Для удаления файла в Linux используется команда rm. Она крайне опасна — неправильное применение грозит удалением всего содержимого сервера. Поэтому, как говорится, семь раз отмерь, один раз отрежь: категорически важно перепроверять путь, который вы указываете для удаления.

Самая простая версия команды rm удалит файл с предварительным подтверждением — для этого потребуется ввести y и нажать Enter:

rm new-file.txt

Для полного же уничтожения всего и вся к команде добавляются параметры -rf. Первый отвечает за рекурсивное удаление данных (т.е. удаление вложенных файлов и папок), второй позволяет отключить подтверждение при удалении. Например, следующая команда удалит папку photos, размещённую в docs, и всё её содержимое:

rm -rf docs/photos

Эта команда приобрела некоторую популярность из-за того, что её используют ради шутки над неопытными администраторами и пользователями, которые только начинают своё знакомство с системой Linux. Им под тем или иным предлогом предлагают выполнить из терминала команду rm -rf [/] (без квадратных скобок). Она удаляет всё содержимое сервера от корня. Результат — все данные безвозвратно теряются, а сервер перестаёт работать. 

Скачивание и загрузка

Для передачи файлов на сервер и скачивании их с с сервера есть много способов. Самый простой — использование программ wget, curl или утилиты scp.

  1. wget позволяет скачивать данные на сервер. Она поддерживает HTTP, HTTPS и FTP протоколы. 

    wget [как скачать] [откуда скачать]

    Скачать файл по ссылке в вашу текущую рабочую директорию можно с помощью команды:

    wget https://ru.wordpress.org/latest-ru_RU.tar.gz

    С помощью параметра -P можно указать путь, куда нужно сохранить скачиваемое:

    wget -P /var/www/example.com https://ru.wordpress.org/latest-ru_RU.tar.gz

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

    man wget
  2. curl используется как для скачивания файлов на ваш сервер, так и для передачи данных с него на другие серверы / хранилища. Она универсальнее, чем wget, благодаря огромному количеству поддерживаемых протоколов: FTP, HTTP, HTTPS, IMAP, POP3, SCP, SFTP, SMB,  SMTP, Telnet и др.

    curl [как скачать] [откуда скачать / куда загрузить]

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

    • Ubuntu и Debian:
      apt -y install curl
    • CentOS:
      yum -y install curl

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

    curl -O https://ru.wordpress.org/latest-ru_RU.tar.gz

    В примере мы скачиваем архив latest-ru_RU.tar.gz по ссылке и сохраняем его в текущую рабочую директорию с таким же именем — за это отвечает ключ -O. Если использовать опцию -o, можно задать своё имя (wp.tar.gz) для сохраняемого файла: 

    curl -o wp.tar.gz https://ru.wordpress.org/latest-ru_RU.tar.gz

    Если нам нужно загрузить файл c нашего сервера на другой, используется следующая конструкция:

    curl -T filename.txt https://example.com/downloads/filename.txt

    Здесь filename.txt из текущей рабочей директории загружается на сайт example.com в директорию downloads и сохраняется с именем filename.txt. Пример подразумевает, что у нас есть права на запись в указанный каталог.

    Остальные возможности curl можно узнать в справочной информации с помощью команды: 

    man curl
  3. Утилита scp позволяет копировать файлы между двумя серверами, используя протокол SSH. 

    scp [откуда копируем] [куда копируем]

    Например, для передачи filename.txt с нашего сервера на удалённый сервер 1.2.3.4 в директорию new-documents пользователя username можно использовать в терминале следующую команду:

    scp ~/documents/filename.txt username@1.2.3.4:/home/username/new-documents

    В процессе система запросит у нас пароль пользователя username для подключения к удалённому серверу. После авторизации файл будет скопирован на целевой сервер в указанную директорию.

    Чтобы скачать файл с удалённого сервера, достаточно немного видоизменить нашу команду: 

    scp username@1.2.3.4:/home/username/documents/filename.txt ~/new-documents/

    Здесь мы в качестве источника для получения копии указали удалённый сервер, а в качестве цели для загрузки копии — папку на текущем сервере. 

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

    scp username1@1.2.3.4:/home/username1/documents/filename.txt username2@2.3.4.5:/home/username2/new-documents

Запуск исполняемых bash-скриптов

Чтобы запустить скрипт script.sh на сервере Linux, нужно выполнить два шага: 

  1. Настроить права на запуск файла для пользователей с помощью команды chmod:

    chmod +x ./script.sh
  2. Запустить скрипт. Если вы находитесь в той же директории, где лежит скрипт, достаточно вызвать его по имени: 

    ./script.sh

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

    sh ./script.sh

    либо 

    /bin/bash ./script.sh

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

Чтобы иметь возможность запускать скрипт из любого места на сервере одной простой командой в терминале, можно создать для него алиас — короткую команду (псевдоним), которая будет ассоциироваться системой с полным вызовом скрипта.

Весь список существующих алиасов системы можно вывести с помощью команды alias:

Создать свой постоянный алиас можно с помощью файла .bashrc, размещённого в домашнем каталоге вашего пользователя. Нужно открыть его для редактирования:

vi ~/.bashrc

В соответствующем разделе нужно добавить ваш алиас в следующем формате:

alias [короткая команда]='[исходная команда]'

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

alias myScript='sh /путь/к/скрипту/script.sh'

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

source ~/.bashrc

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

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

Как настроить cron по ssh

Переименование, перемещение и копирование файлов и папок

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

cp [что копируем] [куда копируем]

К примеру,  вы можете сделать копию конфигурационного файла, который вы хотите изменить. Здесь мы создаём копию nginx.conf:

cp nginx.conf nginx.conf.copy

Директории копируются аналогично. При необходимости скопировать каталог со всем содержимым (рекурсивно) нужно добавить к команде ключ -r:

cp -r /docs /files

Здесь мы создаём копию docs со всем её содержимым с именем files.

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

mv [что переместить/переименовать] [куда переместить/как назвать]

Например, следующая команда переместит файл file.txt в директорию new:

mv file.txt docs/new

Переименовать файл тоже не составит труда. В Linux переименование аналогично перемещению в ту же самую папку, но с новым именем. Например, команда ниже переименует file.txt (в директории /docs/new/) в todolist.txt:

mv /docs/new/file.txt /docs/new/todolist.txt

В этом примере file.txt переименовывается в todolist.txt

Аналогично можно перемещать и переименовывать директории. 

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

Структура каталогов Linux

Этот материал был полезен?

Скидка 25% новым клиентам!
Закажи сервер сегодня и получи скидку на первый месяц аренды!