Skip to content

Ориентация в файловой системе LINUX

Использование терминала. Доступ к командной строке. Вход в систему Linux и выполнение простых команд с помощью оболочки.

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

Где я? Как понять, где находишься

Команда pwd: pwd --- мы ввели команду /home/test --- ответ системы, мы находимся в домашней директории пользователя test

Очень полезная команда, когда у вас нет ничего, кроме командной строки под рукой. Расшифровывается как Print Working Directory.

Как понять, что находится в папке

Команда ls позволяет просмотреть содержимое каталога:

Терминал LINUX

Хотя лучше использовать команду сразу с флагом «l»:

ls -l

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

Терминал LINUX

У команды есть и другие флаги, но чаще всего вы будете использовать именно «ls – l».

Как перейти в другую директорию

С помощью команды cd:

Пример:

cd <путь к директории>

Путь может быть абсолютным или относительным.

По абсолютному пути

Либо у вас где-то записан путь, «куда идти», либо вы подсмотрели его в графическом интерфейсе например используя команду ls.

Вставляем путь в командную строку после «cd»

cd /home/student/log

Ну вот, мы переместились из домашней директории (обозначается как ~) в /home/student/log.

Терминал LINUX

По относительному пути

Относительный путь — относительно вашей текущей директории, где вы сейчас находитесь. Если я уже нахожусь в /home/student, а мне надо в /home/student/log, команда будет такой:

cd folder/log

перейдиnt в папку folder/log из той директории, где dы сейчас находитесь

Терминал LINUX

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

cd  ~/folder2

Эта команда будет работать отовсюду. И переместит нас в /home/pi/folder2.

Терминал LINUX

С автодополнением

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

– (cd tab) Может, ты имел в виду папку 1?

– (tab) Нет? Может, папку 2?

– (tab) Снова нет? Может, папку 3?

– (tab) Снова нет? Может, файл 1 (она перебирает имена всех файлов и директорий, которые есть в той, где вы сейчас находитесь)?

– (tab) У меня кончились варианты, поехали сначала. Папка 1?

  • cd lon(Tab) → cd long-long-long-long-name-folder – начали вводить название папки, и система сама подставила имя (из тех, что есть в директории, где мы находимся).
  • cd (Tab)(Tab)(Tab) — система перебирает все файлы / папки в текущей директории.

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

Подняться наверх

Подняться на уровень выше:

cd ..``

Если нужно поднять на два уровня выше, то:

cd ../..

И так до бесконечности. Можно использовать файл, лежащий на уровне выше или просто сменить директорию. Обратите внимание, что команда для линукса отличается от команды для Windows — слеш обратный. В Windows это «cd ....», а в линуксе именно «cd ../..».

Как создать директорию

Используйте команду mkdir:

mkdir test

создает папку с названием «test» там, где вы находитесь

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

mkdir /home/test

создает папку «test» в директории /home, даже если вы сейчас не там

Когда это нужно? Например, если вам надо сделать бекап логов. Создаете папку и сохраняете туда нужные логи. Или если вы читаете инструкцию по установке ПО и видите там «создать папку». Через командную строку это делается именно так.

Как создать файл

Командой touch:

touch app.log

Такая команда создаст пустой файл с названием «app.log». А потом уже можно открыть файл в редакторе и редактировать.

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

Чтобы отредактировать файл, следует воспользоваться одним из консольных текстовых редакторов: nano — более простая программа, рассчитана на новичков

Указываете имя команды и путь к файлу:

nano test_env.txt

Терминал LINUX

В нижней части экрана находятся подсказки по комбинациям клавиш, остановимся на них подробнее.

  • Ctrl+G или F1 — Показать справку
  • Ctrl+X или F2 — Выйти из nano
  • Ctrl+O или F3 — Сохранить внесенные изменения
  • Ctrl+J или F4 — Выровнять текущий абзац (абзацы отделены пустой строкой)
  • Ctrl+R или F5 — Добавить содержимое другого файла в текущий
  • Ctrl+W или F6 — Поиск по файлу
  • Ctrl+Y или F7 — Страница вперед
  • Ctrl+V или F8 — Страница назад
  • Ctrl+K или F9 — Вырезать текущую строку и запомнить
  • Ctrl+U или F10 — Вставить
  • Ctrl+C или F11 — Положение курсора
  • Ctrl+T или F12 — Проверить орфографию

Терминал LINUX

В nano можно набирать текст, как в обычном текстовом редакторе.

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

  • Ctrl+O — чтобы сохранить
  • Ctrl+X — для выхода

Как перенести / скопировать файл

Допустим, у нас в директории /opt/app/log находится app.log, который мы хотим сохранить в другом месте. Как перенести лог в нужное место, если нет графического интерфейса, только командная строка?

Скопировать файл

Команда:

cp что_копировать куда_копировать

Если мы находимся в директории /opt/app/log:

cp app.log /home/test

В данном примере мы использовали относительный путь для «что копировать» — мы уже находимся рядом с логом, поэтому просто берем его. А для «куда копировать» используем абсолютный путь — копируем в /home/test.

Можно сразу переименовать файл: cp app.log /home/test/app_test_2022_11_28.log

В этом случае мы взяли app.log и поместили его в папку /home/test, переименовав при этом в app_test_2022_11_28.log. Если в папке, в которую мы пытаемся скопировать файл с таким именем уже есть, система не будет ничего спрашивать, просто перезапишет его. Для примера положим в папку log внутри домашней директории файл app.log, который там уже есть.

Скопировать директорию

Команда остается та же, «cp», только используется ключ R — «копировать папку рекурсивно»:

cp -r  путь_к_папке  путь_к_новому_месту

Например:

cp /opt/app/log /home/test

Так в директории /home/test появится папка «log».

Переместить файл

Если надо переместить файл, а не скопировать его, то вместо cp (copy) используем mv (move):

cp app.log /home/test

mv app.log /home/test

Можно использовать относительные и абсолютные пути:

mv /opt/app/logs/app.log /home/test — абсолютные пути указаны, команда сработает из любого места

Можно сразу переименовать файл:

mv app.log /home/test/app_test_2022_11_28.log — перенесли лог в /home/olga и переименовали

Переместить директорию

Аналогично перемещению файла, команда mv

mv /opt/app/log/  /home/test/bakup/

Как удалить файл

С помощью команды rm (remove):

rm test.txt  — удалит файл test.txt

Если нужно удалить все файлы в текущей папке, используйте «*»:

rm *  — удалит все файлы в текущей директории

Если нужно удалить папку, надо добавить флаг -r (recursive):

rm -r test_folder

Терминал LINUX

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

А теперь представьте, что вы чистите много файлов. На каждый система переспрашивает, и надо постоянно отвечать «да, да, да...» (y – enter, y – enter, y – enter)… Чтобы удалить все без вопросов, используйте флаг -f (force):

rm -rf test_folder    --- удалит все не спрашивая

Терминал LINUX

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

Опция -v показывает имена удаляемых файлов:

rm -rfv test_folder   --- удалит папку со всем содержимым, но выведет имена удаляемых файлов

Терминал LINUX

Как изменить владельца файла

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

Это плохо, потому что никто другой с ними работать уже не сможет. Но можно создать файл под root-ом, а потом изменить его владельца с помощью команды chown.

Допустим, что я поднимаю сервис testbase. И он должен иметь доступ к директории user и файлу test.txt в другой директории. Так как никому другому эти файлики не нужны, а создал я их под рутом, то просто меняю владельца:

chown testbase:testbase test.txt — сменить владельца файла
chown -R testbase:testbase user     — сменить владельца папки

В итоге был владелец root, а стал testbase.

Как установить приложение

Если вы привыкли к Windows, то для вас установка приложения — это скачать некий setup.exe файл, запустить и несколько раз нажать «далее-далее-далее». В линуксе все немного по-другому. Тут приложения ставятся как пакеты. И для каждой системы есть свой менеджер пакетов:

  • yum — red hat, centos
  • dpkg, apt — debian

Давайте посмотрим на примере, как это работает. Во время работы на плате NanoPi вам может понадобиться код с GitHub. Для того, чтобы его было проще скачать, вы можете воспользоваться программой git, благодаря которой можно в одну строку скачать весь репозиторий. Но, к сожалению, программа далеко не всегда есть в «чистом» дистрибутиве. Вы хотите вызвать git, но он не установлен, о чем сообщает система:

Вы хотите вызвать git, но он не устновлен, о чем сообщает система:

git

Терминал LINUX

Ничего страшного, установите это приложение через apt:

sudo apt install git

Терминал LINUX

Система установит требуемый пакет.

Терминал LINUX

В случае возникновения подобной ошибки стоит обновить репозитории с помощью команды sudo apt update

Теперь, если напечатать «git» в командной строке, высветится справка по использованию программы: В случае возникновения подобной ошибки стоит обновить репозитории с помощью команды sudo apt update

Терминал LINUX

Как создать архив

Стандартная утилита, которая будет работать даже на «голой» системе — tar. Правда, для ее использования надо запомнить флаги. Для создания архива стандартная комбинация cvzf:

tar -cvzf archive.tar.gz /home/pi/test

Терминал LINUX

В данном примере мы упаковали директорию /home/pi/test.

Для распаковки меняем флаг «c» на «x» и убираем «z»:

tar -xvf archive.tar.gz

Терминал LINUX

Хотя система пишет, что распаковала «/home/test», на самом деле папка «test» появляется там, где мы сейчас находимся.

Давайте разберемся, что все эти флаги означают:

  • c — создать архив в Linux;
  • x — извлечь файлы из архива;
  • v — показать подробную информацию о процессе работы (без него мы бы не увидели, какие файлики запаковались / распаковались);
  • f — файл для записи архива;
  • z — сжатие.

Для упаковки используется опция c — Create, а для распаковки x — eXtract.

Для использования архиватора rar необходимо поставить следующие пакеты:

sudo apt install rar
sudo apt install unrar

И применяем:

unrar x test.rar

Как посмотреть использованные ранее команды

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

↑ (стрелочка «наверх») — показать последнюю команду history — показать последние 1000 команд

Если команда, которую требуется найти была введена недавно, можно найти ее, несколько раз нажав на стрелочку вверх. Линукс хранит историю команд даже при перезапуске устройства, в отличие от Windows.

Как посмотреть свободное место

Сколько места свободно на дисках

df -h

Сколько весит директория

du -sh
du -sh *  --- с разбиением

Как узнать IP компьютера

Чтобы узнать IP машины, используйте команду:

hostname -I

Также можно использовать ifconfig:

ifconfig — выведет много информации, в том числе ваш внешний IP
ip a — аналог

Как узнать версию OS

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

cat /etc/*-release

Терминал LINUX

Если нужна версия ядра:

uname -a

Терминал LINUX

Как узнать, как работает команда

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

man git

Терминал LINUX

Закрыть мануал можно с помощью клавиши q.

Если man у программы нет, используйте флаг -h (--help):

git-h

Как создать много тестовых папок и файлов

Допустим, у нас есть некая папка test. Создадим в ней 100 директорий и 100 файлов в каждой:

mkdir -p test/dir--{000..100}
touch test/dir--{000..100}/file-{A..Z}

Терминал LINUX

Теперь пояснения:

Терминал LINUX

  • mkdir — создать директорию
  • touch — создать файл (или изменить существующий, но если файла с таким именем нет, то команда создаст новый, пустой)

А выражения в скобках играют роль функции, которая выполняется в цикле и делает ручную работу за вас:

  • {000..100} — пробежится по всем числам от 0 до 100
  • {A..Z} — пробежится по всем буквам английского алфавита от A до Z