Что такое Linux?


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

Содержание:

  1. Linux Kernel aka Ядро
  2. GNU Core Utilities (coreutils)
  3. Bash — интерпретатор командной строки
  4. Системы управления пакетами и пакетные менеджеры
  5. Init systems — системы инициализации
  6. systemd
  7. Ваш первый вход на сервер
  8. Управляем пользователями
  9. Сети
  10. FHS — Filesystem Hierarchy Standard — навигация в файловых системах Linux
  11. Window system / display server — сервер экранов
  12. Полезные ссылки и список литературы для изучения


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

А что такое 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 сборках. Они включают в себя:

довольно много утилит
  • chmod — изменяет разрешения на файлах;
  • chown — изменяет владельца файла и его группу;
  • chroot — изменяет корневую (root) директорию;
  • cp — копирует файлы и директории;
  • dd — копирует, конвертирует файлы;
  • df — показывает свободное место на файловой системе;
  • du — показывает занятое место на файловой системе;
  • ln — создаёт ссылки;
  • ls — показывает содержимое директории;
  • mkdir — создает директорию;
  • mv — перемещает (переименовывает) файлы;
  • rm — удаляет файлы;
  • rmdir — удаляет пустые директории;
  • touch — изменяет таймметку на или создает пустой файл;
  • basename — выводит имя файла без пути до него, если указано, удаляет расширение файла;
  • cat — выводит содержимое файла в терминал (стандартный вывод);
  • comm — сравнивает построчно два файла;
  • cut — выводит только определенные части строк из файла в терминал;
  • dirname — оставляет только путь, удаляя имя файла из его полного пути;
  • echo — выводит в терминал строку текста;
  • expand, unexpand — конвертирует табы в пробелы и обратно;
  • false — возвращает ошибочный статус выхода из приложения;
  • fmt — форматтер текста;
  • fold — разбивает строчку на сегменты фиксированной ширины;
  • head — выводит первую строку файла;
  • join — соединяет две строки из разных файлов по общему полю;
  • md5sum — считает MD5 хэш;
  • paste — соединяет строки файлов;
  • pr — конвертирует файлы для печати;
  • seq — выводит числовые последовательности;
  • sleep — приостаналивает выполнение на указанное время;
  • sort — сортирует строки текстовых файлов;
  • split — разделяет файл на части;
  • tail — выводит последнюю часть файла;
  • tee — отправляет вывод в разные файлы;
  • test — проверяет типы файлов и сравнивает значения;
  • tr — переводит или удаляет символы;
  • true — возвращает успешный статус выхода;
  • uniq — удаляет повторяющиеся строки в отсортированном файле;
  • wc — выводит количество байт, слов и строк в файле;
  • yes — выводит одну и ту же строчку;
  • date — выводит или устанавливает текущую дату и время;
  • env — выводит или изменяет текущие параметры окружения (environment);
  • groups — выводит группы, в которых пользователей состоит;
  • hostname — выводит или устанавливает имя компьютера;
  • id — выводит uid/gid пользователя;
  • nice — изменяет приоритет планировщика;
  • pwd — — выводит текущую директорию (полный путь);
  • su — позволяет вам получить id другого пользователя (переключиться в него). Чуть больше особенностей su в Debian;
  • uname — выводит системную информацию;
  • who — выводит список всех пользователей, которые сейчас залогинены в системе in;
  • whoami — выводит текущий 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`.

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

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


Теперь я хочу вам рассказать о командной строке в Linux. Командная строка — это интерфейс для ввода команд, а Bash — оболочка (shell) и интерпретатор комманд. Большинство людей знакомы с command.exe в 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

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 порт. Позволяет подключаться как с логином-паролем, так и с помощью ключей. Настройки входа зависят от конкретной инсталляции.

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

Если вы хотите настроить вход по ключу, вам надо сгенерировать пару ключей (приватный и публичный), вписать содержимое публичного ключа на удаленном сервере в файл authorized_keys, который расположен в папке ~/.ssh. ~ — обозначает домашнюю директорию пользователя, '.' — что файл или папка — скрытые. Если папка не существует, её нужно создать командой 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, и другие. Если установлен дисплей сервер и десктопное окружение, то система выглядит почти как обычный ПК. С окошками, рабочим столом, панелью и прочим.

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





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

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

Причем, материалы курсов доступны и на русском языке.

www.linuxfromscratch.org — Собираем свой дистрибутив с нуля. Как водится, у него тоже есть форки, но это отличное пособие для того, чтобы понять, что делают мейнтейнеры дистрибутивов и разобраться в этой “кухне”.

P.S.: я не настоящий Linux админ и никогда им не был, поэтому, если вы найдете какие-то замечания — пишите, всё поправлю. Однако, когда я переходил с Windows на Linux (Ubuntu 12.04) и начинал разрабатывать в нём, мне подобной статьи не хватало.

Комментарии (27)


  1. select26
    03.08.2022 12:02
    +1

    Вы путаете в статье пакетный менеджер и систему управления пакетами. Packet manager это как раз таки dpkg и rpm, а не apt и yum.
    Примеры в статье верные, а описание скомкано - рассказываете про apt и yum.
    Каша по этому вопросу.
    Как нибудь поточнее сформулируйте пожалуйста.


    1. ne555
      03.08.2022 13:12
      +2

      И путаете определения:

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

      Операционноая система GNU и ядро под названием Linux — отдельные проекты программ, которые дополняют друг друга. Как правило, они упаковываются в дистрибутив GNU/Linux и применяются совместно (изучить вопрос).


      1. Areso Автор
        03.08.2022 13:20

        Спасибо, исправил.


        1. 13werwolf13
          03.08.2022 21:26
          +1

          исправьте пожалуйста тогда и другое:
          opensuse/suse это конечно rpm based дистры, но вот dnf там опционален, а родной пакетный менеджер это zypper (который немного круче dnf потому что умеет в вендоринг (через приоритеты))


      1. mayorovp
        04.08.2022 10:45

        Всё-таки GNU это пакет системных программ, а не ОС. Операционной системой как раз является GNU/Linux.


  1. AlexanderS
    03.08.2022 12:43
    +3

    далее создать файл vi authorized_keys. Важный момент — чтобы выйти из текстового редактора vi, нажмите esc, потом впечатайте :wq (выйти с записью).

    Замечательный совет новичкам — чтобы выйти из текстового редактора надо 5 кнопок нажать в определённой последовательности) Новичкам интуитивнее будет nano. Правда про него тоже нужно кое что знать.


    1. Areso Автор
      03.08.2022 12:57

      Про него нужно знать, что оно не установлено (как правило).

      Поэтому:

      sudo apt install nano

      или

      sudo yum install nano

      (если у вас есть права на sudo, дьявольский смех)


      1. AlexGorky
        03.08.2022 15:31

        (если у вас есть права на sudo, дьявольский смех)

        А если при установке Linux не была выбрана графическая оболочка, то sudo может быть и не установлен!


        1. Areso Автор
          03.08.2022 15:39

          Да, такое тоже случается.

          Тогда команды такие же, только без sudo

          (Если делается от рута или другого привилегированного пользователя)


  1. fvkvroimpala
    03.08.2022 12:56

    Спасибо, сохранил статью)


  1. Worky
    03.08.2022 13:25

    Добавьте инфу по отечественным линуксОС, в тот же раздел про управление пакетами.

    Это сейчас очень актуально.


    1. Areso Автор
      03.08.2022 13:36

      С ними пока не работал и даже не изучал вопрос. Возможно, что дополню этим позднее.

      Мне знакомые и коллеги еще накидали, чего здесь не хватает.


    1. litos
      03.08.2022 14:57
      +1

      А там также либо apt, либо yum


      1. 13werwolf13
        03.08.2022 21:31

        в альте конечно apt-get, вот только это alt-rpm (тяжёлое наследие от которого они не хотят отказываться) что создаёт некоторое кол-во нюансов


  1. WASD1
    03.08.2022 16:57
    +1

    dpkg -i filename.deb

    мне кажется лучше привести строку для локальной установки через apt, по той причине, что даже при установке из файла локально apt проверяет конфликт зависимостей.
    apt install ./filename.deb


  1. webxed
    04.08.2022 09:04

    • basename — удаляет путь до файла и его расширение;

    мне кажется удаляет - это неверное толкование , в хелпе команда описывается так:

    Выводит ИМЯ без предшествующих названий каталогов.
    Если указано, удаляет также завершающий СУФФИКС.


  1. Armitage1986
    04.08.2022 10:03
    +1

    Для Windows есть клиент Putty

    В Windows начиная с 1809 версии десятки есть и свой встроенный ssh-клиент.


    1. oWeRQ
      05.08.2022 02:49

      Правда не совсем свой, что даже к лучшему, это порт openssh, и даже сервер есть.


  1. event1
    04.08.2022 12:30
    +1

    В Линуксе, все процессы имеют номер (Process ID, PID). Ядро использует
    процесс 0, любая система инициализации — PID 1, и она же является
    родителем для любых пользовательских процессов

    Ядро не использует процесс 0. Процесса 0 не существует. Часть кода ядра работает в потоках ядра (kernel threads) и они отображаются вместе с другими процессами и обладают всеми атрибутами обычных процессов, в том числе и PID. Имена процессов ядра отображаются в квадратных скобках. Другая часть кода ядра — это обработчики прерываний и они работают в контексте прерываний и не относятся к каким-либо процессам.

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

    При загрузке ядро инициализирует все внутренние структуры и запускает первый пользовательский (user space) процесс init с PID 1. init порождает все последующие пользовательские процессы

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

    Во-первых, "в процессе завершения процессов"? Во-вторых, ни на какие проблемы осиротевшие процессы не указывают. Их усыновляет (удочеряет) init, вот и всё. Например, все демоны — сироты.

    Если вы хотите настроить вход по ключу,

    ...

    пользователям (0) не разрешено ничего с этим файлом

    Уже более 20-и лет вместе с openssh поставляются утилиты ssh-keygen и ssh-copy-id. Они куда как удобнее описанных мануальных упражнений.

    Сети

    Сейчас большинство систем, по-моему, используют NetworkManager. Странно, что вы про него не упомянули. Так же, если пишите про systemd странно не вспомнить про systemd-networkd

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

    Не совсем корректное утверждение. ufw — это надстройка над iptables. Потому что простым гражданам трудно рассуждать в про сетевую фильтрацию в терминах таблиц и цепочек. Как бы то ни было, iptables присутствует в обязательном порядке, если есть ufw.


    1. Areso Автор
      04.08.2022 12:41

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

      Уже более 20-и лет вместе с openssh поставляются утилиты ssh-keygen и ssh-copy-id. Они куда как удобнее описанных мануальных упражнений.

      Согласен. Привычка :)

      Сейчас большинство систем, по-моему, используют NetworkManager. Странно,
      что вы про него не упомянули. Так же, если пишите про systemd странно
      не вспомнить про systemd-networkd

      Да, пожалуй вы правы, добавлю.

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

      Да, ваша формулировка лучше.


      1. event1
        04.08.2022 17:22

        Про ядро - это холиварная тема

        В смысле кто-то утверждает что ядро работает в процессе с PID 0? А у вас нет ссылки на такое под рукой случаем? За довольно много лет работы с ядром не встречал такого тезиса.


        1. Areso Автор
          04.08.2022 17:57

          Можно посмотреть PID родителя init системы или там kthtread - он равен 0


          1. mayorovp
            04.08.2022 22:10
            +2

            Это всего лишь означает, что 0 означает отсутствие родителя.


      1. garwall
        05.08.2022 16:57

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


        1. oWeRQ
          05.08.2022 19:37
          +1

          Говоря про гибридное ядро обычно подразумевают, что по крайней мере часть функционала может как с микроядром выполняться в пространстве пользователя. Линукс - монолитное ядро с поддержкой модулей, у которых нет стабильного ABI, поэтому каждый раз обновляя ядро надо пересобирать модули.


  1. AWE64
    05.08.2022 17:34
    -1

    что такое линукс, что такое линукс, чтооо так любит детвора


  1. akingenious
    05.08.2022 19:17

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