Перейти к содержимому

Какое назначение имеет ядро системы и интерпретатор команд

  • автор:

Что такое Linux? Статья-шпаргалка для новичков

Салют! Это статья — попытка систематизировать некие базовые знания об Linux’ах, которая может быть полезна для продвинутых пользователей, разработчиков и админов Windows, которые еще не имели (или имели крайне небольшой и отрывочный) опыт работы с Linux системами и не знают, с чего начать, однако хотят попробовать — сами, или по причине производственной необходимости. Каждый пункт содержит не исчёрпывающие сведения, а лишь отправные пункты для дальнейшего изучения (гуглежа) материала.

Если интересно — прыгайте под кат

А что такое Linux?

Под именем Linux сегодня люди понимают одну из двух вещей:

  1. Операционные Системы на базе GNU/Linux, или, как их по-другому называют, дистрибутивы. Наиболее популярные RedHat/CentOS, Debian, Ubuntu и другие. Маленькая часть из них была представлена на КДПВ 🙂
  2. Ядро Linux и, опционально, набор программ GNU coreutils.

Несколько слов об ядре.

Давайте я расскажу вам чуть больше о GNU/Linux ядре.

Первое, вы должны знать, что все ядра ОС бывают трех типов:

  • микроядро;
  • монолит (Linux);
  • гибрид (OS X, Windows 7).

Основная разница между монолитным и микроядром в том, что микроядра включают только:

  • IPC (систему межпроцессного взаимодействия), управление памятью, планировщик и диспетчер.

В то время как монолитные ядра также включают в себя:

  • Файловую систему (системы), драйвера, VFS (в случае с Linux kernel).

Ядро Линукса занимается:

  • Управлением процессами.
  • Управлением памятью.
  • Взаимодействием с устройствами (через драйвера).
  • Системными вызовами и безопасностью.

Все программы, запускаемые пользователем, работают в так называемом пользовательском пространстве (user space). Эти программы взаимодействуют с ядром через интерфейс системных вызовов (system call interface, SCI). Также, Ядро ограничивает доступ к ЦПУ, памяти для пользовательских программ, в то время как код из ядра имеет неограниченным доступ к ресурсам компьютера. Все пользовательские программы взаимодействуют с друг другом при помощи межпроцессной коммуникации (interprocess communication, IPC)

Так же, несмотря на то, что большинство считает Ядро монолитным, оно использует модули. Модули могут быть встроенными или подгружаемыми. Последние могут быть включены или выключены во время работы ОС. Больше про модули можно прочесть на АрчВики

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

GNU Core Utilities (coreutils)

GNU Core Utilities (coreutils) — набор программ, системных утилит, которые есть почти на всех GNU/Linux сборках. Он включают в себя:

    — изменяет разрешения на файлах; — изменяет владельца файла и его группу; — изменяет корневую (root) директорию; — копирует файлы и директории; — копирует, конвертирует файлы; — показывает свободное место на файловой системе; — показывает занятое место на файловой системе; — создаёт ссылки; — показывает содержимое директории; — создает директорию; — перемещает (переименовывает) файлы; — удаляет файлы; — удаляет пустые директории; — изменяет таймметку на или создает пустой файл; — выводит имя файла без пути до него, если указано, удаляет расширение файла; — выводит содержимое файла в терминал (стандартный вывод); — сравнивает построчно два файла; — выводит только определенные части строк из файла в терминал; — оставляет только путь, удаляя имя файла из его полного пути; — выводит в терминал строку текста; , unexpand — конвертирует табы в пробелы и обратно; — возвращает ошибочный статус выхода из приложения; — форматтер текста; — разбивает строчку на сегменты фиксированной ширины; — выводит первую строку файла; — соединяет две строки из разных файлов по общему полю; — считает MD5 хэш; — соединяет строки файлов; — конвертирует файлы для печати; — выводит числовые последовательности; — приоставналивает выполнение на указанное время; — сортирует строки текстовых файлов; — разделяет файл на части; — выводит последнюю часть файла; — отправляет вывод в разные файлы; — проверяет типы файлов и сравнивает значения; — переводит или удаляет символы; — возвращает успешный статус выхода; — удаляет повторяющиеся строки в отсортированном файле; — выводит количество байт, слов и строк в файле; — выводит одну и ту же строчку; — выводит или устанавливает текущую дату и время; — выводит или изменяет текущие параметры окружения (environment); — выводит группы, в которых пользователей состоит;
  • hostname — выводит или устанавливает имя компьютера; — выводит uid/gid пользователя; — изменяет приоритет планировщика; — — выводит текущую директорию (полный путь); — позволяет вам получить id другого пользователя (переключиться в него). Чуть больше особенностей su в Debian; — выводит системную информацию; — выводит список всех пользователей, которые сейчас залогинены в системе in; — выводит текущий id пользователя.

Также туда входят следующие утилиты:

chgrp, cksum, csplit, dir, dircolors, expr, factor, hostid, install, link, logname, mkfifo, mknod, nl, nohup, od, pathchk, pinky, printenv, printf, ptx, shred, stty, sum, sync, tac, tsort, tty, unlink, users, vdir

Мои коллеги очень просили добавить меня следующее: вы всегда можете получить справку, напечатав `man name_of_the_tool`. Альтернативный вариант, чтобы получить справку, который является более-менее стандартным для всех CLI (command line interface) утилит, это `name_of_the_tool —help`. Наконец, еще один вариант, где найти документацию на команду, это впечатать `info name_of_the_tool`.

Теперь, когда мы уже чуть-чуть знаем об ядре, системных утилитах, нам нужно познакомиться еще с несколькими моментами, и мы сможем начать работать с нашей машиной под управлением GNU/Linux, и начать, пожалуй, стоит со среды, в которой выполняются все вышеуказанные программы — в командной строке Bash.

Bash — интерпретатор командной строки

Теперь я хочу вам рассказать о командной строке в Linux. Командная строка — это интерфейс для ввода команд, а Bash — оболочка (shell) и интерпретатор команд. Большинство людей знакомы с command.com в DOS, Windows или более новым и продвинутым PowerShell, то вот сюрприз о Linux’e: их здесь много. Целое семейство разных интерпретаторов. Некоторые из них проще, другие сложнее, какие-то имеют маленький размер, и так далее. Факт в том, что если вы будете работать с Linux серверами, вы будете работать с одним из них.

Bash является оболочкой по умолчанию в Linux дистрибутивах на протяжении многих лет, и используется в RHEL/CentOS, Oracle Linux и так далее. Но у него есть популярные альтернативы: Dash (Debian, Ubuntu), zsh, и другие. Они все в целом похожи друг на друга, потому что поддерживают стандарт POSIX, но имеют небольшие отличия в деталях.

Bash — Bourne Again Shell, имя которого является игрой слов на тему Bourne — born (рожденный). Борн — фамилия автора оригинальной командной строки Bourne shell (1979) или просто shell для Version 7 Unix. Первая версия Bash была написана Брайаном Фоксом, и вышла в свет в 1989, как одна из попыток заменить проприетарный Bourne Shell открытым продуктом. В свою очередь, Bash, сохраняя совместимость с оригинальным интерпретатором, принёс много новых фич, а также взял некоторые идеи из других проектов. Так, команда `history` была “позаимствована” из проектов csh и ksh.

Системы управления пакетами

В то время как в Windows, вы обычно идёте на какой-то сайт, скачиваете exe файл программы или инсталлятора, копируете или устанавливаете его, в Linux системах, обычно это делается по-другому. Хотя да, вы всё ещё можете скачать файл и установить его, но это считается наименее популярным методом установки.

Наиболее популярный — установка с помощью системы управления пакетами.

Любая из них делает следующее:

  1. Устанавливает пакеты (программы), включая их зависимости.
  2. Обновляет их.
  3. Деинсталлирует их.

Почему я отдельно указал на установку зависимостей? Дело в том, что пока Windows программы обычно хранят их зависимости в той же папке, что и программа (\*.dll файлы, к примеру), в Linux системах зависимости устанавливаются в общую для всех программ директорию с целью последующего переиспользования данных зависимостей и библиотек. Обычно, \*.so — расширение файлов библиотек в Linux.

Конечно, с появлением платформы .Net Framework, проблема значительно облегчилась и тем самым сократилось количество необходимых зависимостей, но, тем не менее, это то, как это работает в Windows.

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

Существуют две наиболее популярные системы управления пакетами для GNU/Linux.

Первая называется Yum (или DNF). В ней используется пакетный менеджер RPM (RPM Package Manager). Используется в следующих дистрах:

  • RedHat Enterprise Linux/CentOS
  • Fedora
  • Oracle Enterprise Linux
  • SUSE/OpenSUSE (опционально, а родной — zypper)

Вторая — Apt. В качестве пакетного менеджера использует dpkg. Наиболее популярные дистрибутивы с ней:

  • Debian
  • Ubuntu
  • Linux Mint

Slackware, Arch используют свои собственные пакетные менеджеры: slackpkg и pacman.

Каждая Linux система, которая идет с предустановленной системой управления пакетами, содержит преднастроенные Интернет-репозитории (или, как иначе говорят, репы — такой вот жаргонизм). Так же, системный администратор может легко добавить свои собственные репозитории.

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

rpm -i filename.rpm

Это установит пакет в RHEL/CentOS, Fedora, Oracle Linux, SUSE/OpenSUSE

однако, лучше все же сделать вот так:
dnf install https://mirror.yandex.ru/epel/9/Everything/x86_64/Packages/e/epel-release-9-3.el9.noarch.rpm
dnf install ./skype.rpm
— спасибо aim

dpkg -i filename.deb

однако, лучше все же сделать вот так:
apt install ./filename.deb — спасибо WASD1

Это установит пакет в Debian, Ubuntu, Linux Mint

Еще одна возможность для пользователей ПК. В последнее время, часть разработчиков софта для конечных пользователей решила использовать дистрибутиво-независимые пакетные менеджеры. Для этого, все зависимости упаковываются в один файл. Наиболее популярные варианты: Snap, Flatpak, AppImage. Первые два предлагают возможность обновление установленного через них ПО с помощью загрузки обновлений из их репозиториев, AppImage не имеет такой возможности. Snap идёт предустановленным в Ubuntu, начиная с 16.04 LTS.

Система инициалиазации

Другая подсистема, которая не является частью Ядра, но является второй по значимости после него — это init система, которая используется для инициализации пользовательского пространства (user space) и управлением пользовательских процессов.

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

  • SysVinit (sysvinit, sysv, или просто ‘init’) — прямой потомок (порт) системы инициализации из ОС UNIX’ System V. Был наиболее популярной системой инициализации на протяжении 20+ лет (1991-2011).
  • Upstart — первая хорошая попытка заменить SysVinit, которая исправляла его недостатки, но позже популярность этого решения сошла на нет. Первоначально разработана Canonical в 2006. Сегодня единственная ОС (хоть и не GNU/Linux), которая его использует, это Chrome OS.
  • OpenRC — легковесный, простой аналог sysvinit. Используется в Gentoo Linux, Alpine Linux, и некоторых других легких дистрибутивах.
  • systemd — сегодняшнее решение в большинстве Linux дистрибах.

Особняком стоит Slackware, популярный дистрибутив, который использует собственное BSD-подобное решение в качестве системы инициализации.

В Линуксе, все процессы имеют номер (Process ID, PID). При загрузке ядро инициализирует все внутренние структуры и запускает первый пользовательский (user space) процесс с PID 1 — как правило, это система инициализации. Она же является родителем для любых пользовательских процессов. Кстати, полезная штука — в Linux отображаются не только PID собственно процесса, но и его родителя. Посмотреть родителей можно так:
ps -efj

Так случается, что в процессе завершения процессов, иногда остаются процессы, у которых не осталось родителя (технически, их родителем становится init) — такие процессы называются осиротевшими (orphaned processes) и указывают на возможное наличие проблем на данной системе. Другой момент, с которым тоже, возможно, придется столкнуться — это процессы, которые отображаются с состоянием Terminated (завершены). Такие процессы, в свою очередь, называются зомби -процессами (zombie-processes).

systemd

Скорее всего, вы будете работать с этой системой инициализации. Самое главное, пожалуй, с чего стоит начать знакомство, это с утилит systemctl и journalctl. У первой довольной простой синтаксис
systemctl command service . К примеру, systemctl status networking покажет текущее состояние демона (службы) сетевых интерфейсов. systemctl restart mysql перезагрузит демона сервера MySQL. stop/start сделают остановку или запуск указанного демона.

Для отладки придётся часто заглядывать в журнал и искать там ошибки,
journalctl -xe .

С помощью systemd можно сделать из обычной программы программу-сервис.

Больше о systemd можно прочесть здесь: en.wikipedia.org/wiki/Systemd

Ваш первый вход на Linux сервер

Конечно, вы можете подключиться к серверу с помощью клавиатуры, мышки и монитора. Но обычно большинство людей подключаются к серверам удаленно. Для этих целей служит сервис (демон) sshd (ssh daemon, или ssh server). Он слушает 22 TCP порт. Позволяет подключаться как с логином-паролем, так и с помощью ключей. Настройки входа зависят от конкретной инсталляции.

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

Если вы хотите настроить вход по ключу, вам надо сгенерировать пару ключей (приватный и публичный), вписать содержимое публичного ключа на удаленном сервере в файл authorized_keys, который расположен в папке

— обозначает домашнюю директорию пользователя, ‘.’ — что файл или папка — скрытые. Если папка не существует, её нужно создать командой mkdir .ssh , перейти в неё командой cd .ssh , далее создать файл vi authorized_keys . Важный момент — чтобы выйти из текстового редактора vi, нажмите esc , потом впечатайте :wq (выйти с записью). После этого нужно установить корректные разрешения на этот файл с помощью команды chmod 0600 authorized_keys . Где 0600 обозначает, что пользователю-владельцу разрешено читать (4) и изменять (2) — а потому, в сумме, 6 — этот файл, пользователям из его группы (0) и другим пользователям (0) не разрешено ничего с этим файлом.
А еще есть «человеческий» метод: ssh-copy-id

Кроме того, система разрешений еще может указывать на исполняемость файла (1). Так, к примеру, пользователь может разрешить другим пользователям запускать какой-то файл, и тогда права будут 0755 — себе полные права (4+2+1), остальные пользователи могут считать (4) и запустить (1) исполняемый файл.

Часто разрешения представлены в текстовой форме. Так, rwx значит 7, rw- значит 6, r-x значит 5, and so on. К примеру, r—r—r— значит 444 — файл только для чтения для всех пользователей, включая владельца.

Управление пользователями

В большинстве случаев новый сервер будет выдан с рутовой учетной записью (пользователем root), которая является суперпользователем (“админом” в терминах Линукс систем). Однако, очень рекомендуется не использовать root пользователя в ежедневной работе. Для этого, вам нужно научиться управлять пользователями. Это довольно просто и логично:

  • useradd — создает нового пользователя, ключ -d позволяет указать домашнюю директорию;
  • usermod — изменяет пользователя;
  • userdel -r — удаляет пользователя и его домашнюю папку;
  • passwd $username — меняет пароль пользователя.

Есть команда chage (-l) , которая позволяет установить (посмотреть) срок истечения пароля, а также есть опция для блокировки пользователя целиком или только для входа в систему (поведение и точная команда зависит от дистра)

Раньше, наиболее популярным пакетом с сетевыми утилитами был net-tools. Он предоставлял такие утилиты как ifconfig (просмотр сетевых интерфейсов), netstat (просмотр сетевых соединений), и другие полезные утилиты.

Но всё течет, всё меняется, и теперь пакет net-tools не установлен по умолчанию, будучи замененным на более современный пакет iproute2.

Так, ifconfig был заменен на ip addr , ip link , ip -s ;
arp заменен на ip n ,
iptunnel на ip tunnel , iwconfig на iw , nameif на ip link .
netstat заменен на ss ,
netstat -r на ip route ,
netstat -i на ip -s link ,
netstat -g на ip maddr .

Настройка и конфигурирование сетевых адаптеров имеет несколько «базовых» вариантов, поэтому лучше искать как это делается конкретно в вашем дистрибутиве (не забывая указывать его версию).
Так, к примеру, в RedHat настройки интерфейсов живут по адресу
/etc/sysconfig/network-scripts/ .
В относительно старых Ubuntu
/network/interfaces ,
а в новых всё делается через утилиту netplan, а сами конфиги можно найти здесь:
/etc/network/interfaces

В ряде систем (не везде) установлен NetworkManager, и тогда статические конфигурации могут быть найдены здесь:
/etc/NetworkManager/NetworkManager.conf
Проверить, установлен ли у вас NetworkManager можно следующим путём:
/usr/sbin/NetworkManager —version или nmcli —version

В завещании, меня просили упомянуть
Васю кхм, systemd-networkd. Исправился, упомянул.

Также стоит отметить про встроенный «файерволл» — в старых системах использовался iptables, который задавал правила для компонента ядра Netfilter; сейчас рекомендуется использовать утилиту ufw, надстройку над iptables, как обладающую более человекопонятным интерфейсом.

FHS — стандарт иерархии файловой системы (Filesystem Hierarchy Standard)

Я когда-то любил простоту Windows. A:\ для флоппика (да, я достаточно старый), C:\ для системы, и зачастую, единственный диск вообще (если нет, то D:\ для дистрибутивов игр, фото и видео), и, наконец, E:\ для CD-ROM. Всё просто!

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

/
/boot — файлы загрузчика
/dev — файлы устройств
/root — домашняя папка для пользователя root (опционально). Может быть слинковано с /home/root
/etc — хранит конфигурацию машины
/home — корневая директория для “хомяков” пользователей
/lib — хранит важные общие библиотеки и модули ядра
/media — точка монтирования к извлекаемым накопителям
/mnt — точка монтирования для временно подключенных файловых систем (флешки, внешние диски, сетевые диски)
/usr — сюда попадает установленное пользователями ПО
/opt — сюда тоже попадает установленное пользователями ПО
/var — здесь хранятся вещи, которые не статичны. К примеру, логи /var/logs
/sbin — системные исполняемые файлы
/bin — общие (расшаренные) исполняемые файлы
/srv — для хранения данных сервисов (веб-серверов, к примеру)
/tmp — временный раздел, данные в нём могут быть удалены при перезагрузке сервера, выходе пользователя, остановки сервиса и так далее.

Большинство файлов могут быть поделены на четыре группы по двум признакам:
“Расшариваемые”-”Не расшариваемые” (“shareable”-”unshareable”).

“Расшариваемые’ файлы хранятся на одной машине и могут быть доступны с других. «Нерасшариваемые» — файлы, которые не предназначены для организации общего доступа.

“Статичные” — “Изменяемые (“static”-”variable”).

«Статичные» файлы включают в себя библиотеки, бинарники, документацию и тп, которые меняются только при участии системного администратора.

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

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

Кроме того, есть смысл сказать об inodes — файловых дескрипторов. Они содержат метаинформацию о создаваемых файлах, и, в некоторых инсталляциях, могут тупо закончиться, если вы пишете на диск много маленьких файлов (например, лог чата). При этом места свободного может быть много, но создать новые файлы вы не сможете. Проверить текущее состояние можно командой df -hTi .

Что хочется написать дополнительно — что если в Windows ФС по умолчанию — NTFS, то в Linux их гораздо больше, среди популярных стоит отметить — ext3, ext4, xfs, btrfs. Каждая используется в тех или иных дистрах, имеет свои преимущества и недостатки.

Window server/Display system

Хорошо, теперь, когда вы начитаны о командной строке, вы думаете — ага, именно поэтому Linux не популярен среди обычных пользователей! К счастью, не по этой причине. Linux имеет два популярных сервера дисплеев на текущий момент: X11 server (легаси, но все еще самая популярная опция) и Wayland. Последний находится в экспериментальном статусе уже около десяти лет. Поверх дисплей сервера устанавливаются десктопные окружения (Desktop Environments, DE), которых ну очень много. Самые популярные: Gnome, KDE, Unity, и другие. Если установлен дисплей сервер и десктопное окружение, то система выглядит почти как обычный ПК. С окошками, рабочим столом, панелью и прочим.

Полезные ссылки

    — Вики дистрибутива Арч — Вики дистрибутива Генту — Unix и Linux руководство системного администратора от Эви Немет — Командная строка Linux. Полное руководство. Уильям Шоттс — “дерево” дистрибутивов (чтобы оценить, насколько далеко зашла страсть к созданию новых дистрибутивов)

На эти книги (курсы) я ссылок не дам, но ищущий да найдет:

RH124: Red Hat System Administration I
RH134: Red Hat System Administration II
RH254: Red Hat System Administration III
RH342: Troubleshooting and Diagnostic
RH442: Performance Tuning

Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования

4. Краткое описание командного интерпретатора Shell

Интерпретатор команд Shell анализирует команды, вводимые с терминала либо из командного файла, и передает их для выполнения в ядро системы. Команды обычно имеют аргументы и параметры, которые обеспечивают модернизацию выполняемых действий. Shell является также языком программирования, на котором можно создавать командные файлы (shell-файлы). При входе в ОС пользователь получает копию интерпретатора Shell в качестве родительского процесса. Далее, после ввода команды пользователем создается порожденный процесс, называемый процессом-потомком. Т.е. после запуска ОС каждый новый процесс функционирует только как процесс — потомок уже существующего процесса. В ОС Linux имеется возможность динамического порождения и управления процессами.

Обязательным в системе является интерпретатор Bash, полностью соответствующий стандарту POSIX. В качестве Shell может быть использована оболочка mc с интерфейсом, подобным Norton Commander.

5. Задание на лабораторную работу

С помощью командного интерпретатора Shell набрать и выполнить команды, исходный текст которых приведен в примерах.

6. Методика выполнения задания

Порядок выполнения работы:

1. Ознакомиться с теоретической частью к лабораторной работе.

2. Определить день недели, в который Вы родились.

3. Получить подробную информацию обо всех активных процессах.

4. Используя редактор VI (см. приложение), создать два текстовых файла (с расширением TXT) и командой САТ просмотреть их на экране.

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

6. Объединить текстовые файлы в единый файл и посмотреть его на экране.

7. Посмотреть приоритет своего процесса и уменьшить скорость его выполнение за счет повышения номера приоритета.

8. Используя редактор VI, написать программу на языке Си и запустить ее на трансляцию в фоновом режиме.

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

10. Продемонстрировать выполнение Си — программы.

11. Удалить свои файлы и выйти из системы.

7. Требования к содержанию и оформлению отчета

Отчет по лабораторной работе должен содержать:

а) титульный лист;

б) исходный текст выполненных программ;

в) результаты, выведенные программами на экран дисплея;

г) ответы на контрольные вопросы.

Контрольные вопросы

1. Перечислите основные функции и назначение многопользовательской многозадачной операционной системы LINUX и ее отличительные особенности от однопрограммной системы DOS.

2. Какое назначение имеет ядро системы и интерпретатор команд?

3. В чем заключается понятие «процесс» и какие операции можно выполнить над процессами?

4. Как задаются и выполняются простые и сложные команды?

5. Какие функции выполняет командный интерпретатор Shell?

Лабораторная работа № 2

ФУНКЦИИ ФАЙЛОВОЙ СИСТЕМЫ ПО ОБРАБОТКЕ И УПРАВЛЕНИЮ ДАННЫМИ

1. Цель работы

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

2. Задачи работы

– Закрепление, углубление и расширение знаний студентов при использовании файловой системы ОС Linux.

– Приобретение умений и навыков работы с функциями файловой системы по модификации файлов и каталогов в операционной системе Linux.

– Выработка способности логического мышления, осмысления полученных результатов при применении файловых команд ОС Linux.

Информация о том, что такое командная строка интерпретатор

Данная статья о том, что такое командная строка cmd и command – интерпретатор.

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

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

Командная строка cmd и command Интерпретатор

В операционных системах в зависимости от года разработки, всегда разный интерпретатор. Например:

в операционной системе windows 95 установлен интерпретатор command.com.

в операционной системе ms-dos также установлен интерпретатор command.com.

в операционной системе windows nt встроен интерпретатор cmd.exe

Помимо приведенных выше вариантов интерпретаторов есть и более популярный. Он установлен на операционной системе linux и называется bash.

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

Основными функциями командного интерпретатора являются:

— Синхронизация с пользователем – например, возможность изменять командную строку, возможность просмотреть историю отданных команд.

— Анализ шаблонов и их названия

— Изменение команд ввода и вывода.

— Возможность контролировать задачи.

Кроме самого интерпретатора с ним тесно связанны следующие системы и функции:

Оболо́чка операцио́нной систе́мы

Другими словами интерпретатор нужен для взаимодействия пользователя с программами на компьютере.

Интерфейс командной строки

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

Шебан

Данная функция — это последовательность в программировании, состоящая из двух знаков: знака решетки # и восклицательного знака ! в основном эти знаки пишутся в начале программного скрипта.

- Анализ шаблонов и их названия

Пакетный файл

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

Сценарий кома́ндной стрoки, или сценарий командной оболочки

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

Перенаправление ввода-вывода

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

- Изменение команд ввода и вывода.

Сигналы и слоты

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

Двои́чная совмести́мость

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

Дизассемблер длин

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

Точка монтирования

Данная функция открывает доступ к новой файловой системе или каталогу файлов.

Начальная загрузка

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

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

Прежде чем вы сможете освоить Kali Linux, вы должны свободно ориентироваться в основных понятиях системы Linux. Умение работать с Linux будет очень полезным навыком, потому что на серверах Linux работает большое количество веб-сайтов, электронной почты и других интернет-служб.

В данном разделе мы собираемся разъяснить основные понятия связанные с Linux. Выполняя поставленную перед нами задачу мы полагаем, что вы уже имеете представление о компьютерных системах в целом, включая такие компоненты как центральный процессор (ЦП), оперативная память (ОЗУ), материнская плата, жесткий диск, а также другие контроллеры и устройства, связанные с ними.

3.1 Что такое Linux и что он делает ?

Термин «Linux» часто используется для обозначения всей операционной системы, но на самом деле Linux — это ядро операционной системы, которое запускается начальным загрузчиком, запускаемым BIOS / UEFI. Ядро берет на себя роль, похожую на роль дирижера в оркестре, оно обеспечивает согласованную работу аппаратных средств и программного обеспечения. Данная роль подразумевает под собой управление оборудованием, процессами, пользователями и файловыми системами. Ядро представляет собой общую базу для других программ, работающих в данной системе, и чаще всего запускает ring zero, также известное, как пространство ядра (kernel space).

Пользовательское пространство

Мы используем термин «пользовательское пространство», чтобы объединить все, что происходит за пределами ядра.

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

Давайте быстро рассмотрим различные задачи, выполняемые ядром Linux.

3.1.1 Запуск оборудования

Назначением ядра, прежде всего, является управление и контроль над основными компонентами компьютера. Оно обнаруживает и настраивает их, когда компьютер включается, а также когда устройство монтируется или извлекается (например, USB устройство). Это также делает их доступными для более высокоуровневого программного обеспечения благодаря упрощенному программному интерфейсу, поэтому приложения могут использовать преимущества устройств, не обращаясь к деталям, например к слоту расширения, в который вставлена плата. Программный интерфейс также предоставляет определенный уровень абстракции; это позволяет использовать оборудование для проведения видеоконференций, например, использовать вебкамеру независимо от её модели и производителя. Программное обеспечение может использовать интерфейс Video for Linux (V4L) и ядро будет переводить вызовы интерфейса в реальные аппаратные команды, необходимые для работы конкретной веб-камеры.

Ядро экспортирует данные об обнаруженном оборудовании через виртуальные системы /proc/ и /sys/ . Приложения часто получают доступ к устройствам с помощью файлов, созданных в /dev/ . Особые файлы, представляющие диски (например, /dev/sda ), разделы ( /dev/sdal ), мыши ( /dev/input/mouse0 ), клавиатуры ( /dev/input/event0 ), звуковые карты ( /dev/snd/* ), последовательные порты ( /dev/ttyS* ) и другие компоненты.

Существует два типа файлов устройств: блочные и символьные. Первые имеют характеристики блока данных: они имеют конечный размер, и вы можете получить доступ к байтам в любой позиции блока. Последние ведут себя как поток символов. Вы можете читать и писать символы, но вы не можете искать заданную позицию и изменять произвольные байты. Чтобы узнать тип файла устройства, проверьте первую букву вывода команды Is -1. Это может быть либо b, для блочных устройств, либо c, для символьных устройств:

Что такое Linux и что он делает

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

3.1.2 Объединение файловых систем

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

Отправная точка этого иерархического дерева называется root, представленный символом «/». Данная директория может содержать именованные суб-директории. Например, домашняя суб-директория «/» называется /home/ . Эта суб-директория, в свою очередь, может содержать другие суб-директории и т.д. Каждая директория также может содержать файлы, в которых будут храниться файлы. Таким образом, home/buxy/Desktop/hello.txt относится к файлу под названием hello.txt , который хранится в суб-директории Desktop, находящейся в buxy суб-директории домашнего каталога, который присутствует в root. Ядро компилирует между данной системой именования и местом хранения на диске.

В отличие от других систем, Linux обладает только одной такой иерархией и может интегрировать данные с нескольких дисков. Один из таких дисков становится root, а другие монтируются на директории в иерархии (эта команда в Linux называется mount). Эти другие диски затем становятся доступными под точками монтирования (mount points) Это позволяет хранить пользовательские домашние директории (которые обычно хранятся на /home/ ) на отдельном жестком диске, который будет содержать директорию buxy (вместе с домашними директориями других пользователей). После того, как вы установили диск в /home/ , эти каталоги становятся доступными в их обычном месте, а различные пути, такие как /home/buxy/Desktop/hello.txt , продолжают работать.

Существует множество форматов файловой системы в соответствии с множеством способов физического хранения данных на дисках. Наиболее широко известны ext2, ext3 и ext4, но существуют и другие. Например, VFAT является файловой системой, которая исторически использовалась DOS и операционными системами Windows. Поддержка VFAT операционной системой Linux позволяет жестким дискам быть доступными как под Kali, так и под Windows. В любом случае, вы должны подготовить файловую систему на диске, прежде чем смонтировать ее, и эта операция называется форматированием.

Команды, такие как mkfs.ext3 (где mkfs расшифровывается как MaKe FileSystem) обрабатывает форматирование. В качестве параметра эти команды требуют файл устройства, представляющий раздел, который следует отформатировать (например, /dev/sdal , первый раздел на первом диске). Эта операция уничтожает все данные и должна запускаться только один раз, если конечно вы не хотите стереть файловую систему и начать новую работу.

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

3.1.3 Управление процессами

Процесс является исполняемым экземпляром программы, для которой требуется хранить память, как самой программы, так и ее рабочих данных. Ядро отвечает за создание и отслеживание процессов. Когда программа запускается, ядро ​​сначала выделяет некоторую память, загружает исполняемый код из файловой системы в эту память, а затем запускает код. Он содержит информацию об этом процессе, наиболее заметным из которых является идентификационный номер, известный как идентификатор процесса (process identifier (PID)).

Большинство современных операционных систем, а именно те, которые работают на основе Unix ядра, включая Linux, способны выполнять множество задач. Другими словами, они позволяют системе запускать множество процессов одновременно.

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

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

Мультипроцессорные Системы (и другие варианты)

Ограничения, описанные выше, о том, что одновременно может работать только один процесс, применимы не во всех ситуациях. Более верно будет сказать, что одно ядро может работать только с одним процессом. Многопроцессорные, многоядерные или гиперпотоковые системы позволяют нескольким процессам работать параллельно. Тем не менее, используется одна и та же система сокращения времени для обработки ситуаций, когда есть более активные процессы, чем доступные процессорные ядра. Это не является чем-то необычным: базовая система, даже полностью бездействующая, почти всегда имеет десятки запущенных процессов.

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

3.1.4 Управление правами

Unix системы поддерживают множество пользователей и групп и позволяют контролировать права доступа. В большинстве случаев, процесс определяется пользователем, который запускает его. Данный процесс может выполнять только те действия, которые разрешены его владельцу. Например, открытие файла требует от ядра проверить процесс на наличие необходимых прав (для получения большей информации конкретно по этому примеру, см. раздел 3.4.4, «Управление правами»)

3.2 Командная строка Linux

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

3.2.1 Как запустить командную строку

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

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

Рисунок 3.1 Запуск терминала GNOME

Например, в системе Kali Linux по умолчанию, GNOME терминал может быть запущен из списка избранных приложений. Также вы можете ввести «terminal» в окне Activities (окно, которое активируется, когда вы передвигаете мышь в левый верхний угол) и нажмите на необходимой вам иконке приложения, которые появятся (Рисунок 3.1, «Запуск терминала GNOME«).

В случае каких-либо нарушений или некорректной работы вашего графического интерфейса вы все равно можете запустить командную строку на виртуальных консолях (до шести из них могут быть доступны через шесть комбинаций клавиш, начиная с CTRL + ALT + F1 и заканчивая CTRL + ALT + F6 — клавишу CTRL можно не нажимать, если вы уже находитесь в текстовом режиме вне графического интерфейса Xorg или Wayland).

Вы получаете обычный экран входа, где вы вводите свой логин и пароль, перед тем как получить доступ к командной строке с её оболочкой:

Как запустить командную строку

Программа, обрабатывающая введенные вами данные и выполнение ваших команд, называется оболочкой (shell или интерпретатором командной строки). По умолчанию оболочкой, предоставляемой в Kali Linux, является Bash (это означает Bourne Again SHell). Конечный символ «$» или «#» указывает, что оболочка ожидает вашего ввода. Эти символы также указывают на то, каким образом воспринимает вас Bash, как обычного пользователя (первый случай со значком долларом) или как суперпользователя (последний случай с хэшем).

3.2.2 Основы командной строки: просмотр дерева директорий и управление файлами

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

Как только сеанс запущен, команда pwd (которая расшифровывается как print working directory (отобразить рабочий каталог)) выведет на экран ваше текущее местоположение в файловой системе. Ваше текущее местоположение можно изменить с помощью команды cd название директории (где cd означает (сменить директорию)). В том случае, если вы не указали директорию, куда хотите перейти, вы автоматически вернетесь в вашу домашнюю директорию. Если вы введете cd -, то вы вернетесь в предыдущую рабочую директорию (в ту, в которой вы находились перед вводом последней команды cd). Родительский каталог всегда называется .. (две точки), в то время как текущий каталог обозначается . (одной точкой). Команда ls позволяет вам перечислить содержимое директории. Если вы не указываете дополнительных параметров команда ls, отобразит содержимое текущей директории.

Основы командной строки: просмотр дерева директорий и управление файлами

Вы можете создать новую директорию с помощью команды mkdir название директории, а также удалить существующую (пустую) директорию с помощью команды rmdir название директории. Команда mv позволит вам перемещать и переименовывать файлы и директории; удалить файл можно с помощью rm название файла, а копирование файла выполняется с помощью cp исходный-файл целевой-файл.

Основы командной строки: просмотр дерева директорий и управление файлами

Оболочка выполняет каждую команду, запуская первую программу с данным именем, которую она находит в каталоге, указанном в переменной среде PATH. Чаще всего эти программы находятся в /bin,/sbin, /usr/bin или /usr/sbin . Например, команда ls находится в /bin/ls; Иногда команда напрямую обрабатывается оболочкой, и в этом случае она называется встроенной командой оболочки (среди них — cd и pwd ); команда type позволяет запросить тип каждой команды.

переменной среде PATH

переменная среда PATH

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

Переменные среды

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

Эти переменные могут быть определены как для системы в/etc/profile так и для пользователя в

/ .profile, но переменные, которые не являются характерными для интерпретаторов командной строки, лучше вставлять в /etc/environment, поскольку эти переменные будут введены во все пользовательские сессии благодаря подключаемому модулю аутентификации (Pluggable Authentication Module (PAM)) — даже если никакая оболочка не выполняется.

3.3 Файловая система Linux

3.3.1 Стандарт иерархии файловой системы

Как и другие дистрибутивы Linux, Kali Linux организован в соответствии со стандартом Filesystem Hierarchy Standard (FHS), что позволяет пользователям других дистрибутивов Linux с легкостью ориентироваться в Kali. FHS определяет назначение каждой директории. Директории верхнего уровня описываются следующим образом.

  • /bin/: основные программы
  • /boot/: Ядро Kali Linux и другие файлы, необходимые для его раннего процесса загрузки
  • /dev/: файлы устройства
  • /etc/: файлы конфигурации
  • /home/: личные файлы пользователей
  • /lib/: основные библиотеки
  • /media/*: точки монтирования для съемных устройств (CD-ROM, USB накопители и т.д.)
  • /mnt/: временные точки монтирования
  • /opt/: дополнительные приложения, предоставляемые третьими лицами
  • /root/: личные файлы администратора (файлы root)
  • /run/: непостоянные файлы рабочего процесса, которые не сохраняются после перезагрузки (еще не включённые в FHS)
  • /sbin/: системны программы
  • /srv/: данные, используемые серверами, расположенными в этой системе
  • /tmp/: временные файлы (эта директория часто опустошается после перезагрузки)
  • /usr/: приложения (эта директория в дальнейшем разделяется на bin, sbin, lib согласно такой же логике, что и в директории root). Кроме того, /usr/share/ содержат данные с независимой архитектурой. Каталог / usr / local / предназначен для использования администратором для установки приложений вручную без перезаписи файлов, обрабатываемых системой пакетирования.(dpkg).
  • /var/: переменные данные, обрабатываемые демоном. Это включает в себя файлы журналов, очереди, буферы и кеши.
  • /proc/ и /sys/ являются характерными для ядра Linux (и не являются частью FHS). Они используются ядром для экспортирования данных в пользовательское пространство.

3.3.2 Домашняя директория пользователя

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

»). Это очень полезно знать, потому что интерпретаторы команд автоматически заменяют тильду верной директорией (которая находится в переменной среде HOME и чье обычное значение является /home/user/ ).

Традиционно файлы конфигурации приложения часто хранятся непосредственно в вашем домашнем каталоге, но их имена файлов обычно начинаются с точки (например, клиент электронной почты mutt хранит конфигурацию в

/.muttrc ). Обратите внимание, что имена файлов, начинающиеся с точки, по умолчанию скрыты; команда ls перечислит их лишь, в том случае если указана опция –a , а графические файловые менеджеры должны быть явно настроены для отображения скрытых файлов.

Некоторые программы также используют несколько файлов конфигурации, организованных в одном каталоге (например,

/ .ssh / ). Некоторые приложения (например, веб-браузер Firefox) также используют свой каталог для хранения кеша загруженных данных. Это означает, что эти каталоги могут в конечном итоге потреблять много дискового пространства.

Эти файлы конфигурации, которые хранятся прямо в вашей домашней директории, часто коллективно называющиеся dotfiles, долгое время расширяются до такой степени, что эти директории могут быть загромождены ими. К счастью, совместная работа под эгидой FreeDesktop.org привела к созданию спецификации базового каталога XDG (XDG Base Directory Specification) конвенции, целью которой является очистка этих файлов и каталогов. В этой спецификации указано, что файлы конфигурации должны храниться в

/.config , файлы кэша в -/.cache , а файлы данных приложения в -/.local (или вих суб-директориях). Эта конвенция постепенно набирает обороты.

Графический рабочий стол чаще всего использует ярлыки для отображения содержимого каталога /Desktop/ (или любого другого слова, которое является точным переводом данного, в системах, которые не используют английский язык). Наконец, система электронной почты иногда хранит входящие письма в каталоге — /Mail/ .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Luxury Car Rental in Miami | Reserve a Premium Vehicle with RealCar