Установка LAMP. Как установить и настроить LEMP (Linux, Nginx, MySQL, PHP) на сервере с Ubuntu



























Rate this post

Что такое LAMP-стек?

LAMP — это акроним, который традиционно означает «Linux, Apache, MySQL и PHP», что является популярным набором программного обеспечения многих веб-приложений или веб-сайтов. Стек LAMP является достаточно мощным, и при этом он сравнительно прост и удобен в использовании.

В последние годы набирают популярность разные вариации LAMP-стека, например, вместо языка программирования PHP используют Python или Perl, а вместо СУБД MySQL используют PostgreSQL.

На виртуальных серверах ServerSpace операционная система семейства Linux, а именно Ubuntu 18.04, уже установлена, поэтому в инструкции будет описана установка остальных компонентов.

Установка LAMP в Ubuntu

Установка пакетов с помощью tasksel

Tasksel – это утилита, которая позволяет устанавливать пакеты различных программ буквально в одну команду. Она разработана для Debian, но может использоваться и в Ubuntu. Для её установки выполните в терминале:

sudo apt install tasksel

Затем, чтобы установить Lamp на Ubuntu, достаточно выполнить такую команду:

sudo tasksel install lamp-server

Установка займёт кое-какое время, потому что утилите придётся скачать и настроить все пакеты, но потом вы получите полностью работающий стек LAMP.

Обратите внимание, что десктопной версии Ubuntu tasksel использовать не желательно. LAMP установится нормально, но при попытке его удаления командой tasksel remove из-за бага утилита может снести вам всю систему. Пользователи сообщают о проблемах с этой утилитой в версии Ubuntu для рабочего стола.

Как установить Lamp в Ubuntu вручную

Если вы не хотите использовать tasksel, вы можете установить все пакеты по отдельности и настроить их для совместной работы. Сначала установим все необходимые пакеты. Установка последней версии Apache2 из репозиториев:

sudo apt install apache2

Установка базы данных MariaDB из репозиториев:

sudo apt install mariadb-server

Или вы можете установить MySQL:

sudo apt install mysql-server

Установка интерпретатора языка программирования PHP 7.2 и расширений, необходимых для его работы с Apache и MySQL:

sudo apt install php7.2 libapache2-mod-php7.2 php-mysql

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

sudo apt install php-curl php-json php-cgi php-gd php-zip php-mbstring php-xml php-xmlrpc

Настройка брандмауэра

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

sudo ufw allow in 80/tcp

Установка веб-сервера Apache

Apache — самый популярный в мире веб-сервер с открытым исходным кодом. Он позволяет размещать на сервере сайты и другие веб-приложения.

Установка выполняется в один шаг:

  • Ubuntu и Debian:

    apt update && apt -y install apache2

  • CentOS:

    yum -y install httpd

После установки нужно проверить, корректно ли запустился веб-сервер:

  • Ubuntu и Debian:

    systemctl status apache2

  • CentOS:

    systemctl status httpd

На Ubuntu и Debian службы после установки запускаются и добавляются в автозапуск автоматически, на Centos это нужно сделать вручную. Запустить веб-сервер и настроить его автоматический старт после загрузки системы можно следующим образом:

  • Ubuntu и Debian:

    systemctl start apache2 && systemctl enable apache2

  • CentOS:

    systemctl start httpd && systemctl enable httpd

На CentOS после установки нужно отредактировать настройки встроенного фаервола:

firewall-cmd –permanent –zone=public –add-service=http –add-service=https firewall-cmd –reload

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

firewall-cmd –list-all

В блоке Services в списке должны отображаться http и https.

Теперь можно открыть IP-адрес вашего сервера в браузере — откроется стартовая страница веб-сервера (при работе с CentOS 7; на CentOS 8 Apache по умолчанию не имеет приветственной страницы):

На Debian и Ubuntu можно сразу ввести IP-адрес вашего сервера в адресную строку браузера — откроется приветственная страница веб-сервера, размещённая в директории /var/www/html

Расширенные настройки веб-сервера доступны в конфигурационном файле:

  • Ubuntu и Debian:

    /etc/apache2/apache2.conf

  • CentOS:

    /etc/httpd/conf/httpd.conf

Настройка брандмауэра

Настоятельно рекомендуется настроить брандмауэр для обеспечения дополнительной безопасности вашего LAMP-стека в Ubuntu 20.04.

Мы начнем с добавления правила брандмауэра для SSH. Вы же не хотите получить блокировку при включении брандмауэра, когда настраиваете сервер удаленно? 

sudo ufw allow OpenSSH

Сообщение об ошибке «ERROR: could find a profile matching openSSH» означает, что вы не настраиваете сервер удаленно. Можно игнорировать. 

Теперь мы можем добавить правила брандмауэра для Apache:

sudo ufw allow in”Apache Full”

Теперь включите брандмауэр:

sudo ufw enable

Нажмите y, если вы видите сообщение «Command may disrupt existing ssh connections».

Если брандмауэр был активирован правильно, вы должны увидеть сообщение «Брандмауэр активен и включен при запуске системы»​.

Вы также можете проверить текущее состояние брандмауэра с помощью:

sudo ufw status

Ниже мы видим, что брандмауэр активен и имеет два правила для каждой службы. v6 это сокращение от IPv6.

Status: active To Action From — —— —- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)

Тестовый Apache

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

sudoservice apache2 status

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

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

apache2.service – The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Sat 2020-03-31 08:44:04 CEST; 15min ago Main PID: 5727 (apache2) Tasks: 55 (limit: 4915) CGroup: /system.slice/apache2.service ├─5727 /usr/sbin/apache2 -k start ├─5728 /usr/sbin/apache2 -k start └─5729 /usr/sbin/apache2 -k start Mar 31 08:44:04 ubuntu2004 systemd[1]: Starting The Apache HTTP Server… Mar 31 08:44:04 ubuntu2004 apachectl[5675]: AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1. Mar 31 08:44:04 ubuntu2004 systemd[1]: Started The Apache HTTP Server.

Возможно, вам придется нажать кнопку q для выхода из проверки состояния сервера при использовании SSH-клиента.

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

Введите IP-адрес вашего сервера в адресную строку и нажмите ENTER.

apache2

Все готово! Вы можете найти страницу приветствия Apache в папке /var/www/html. Чтобы отредактировать этот файл, необходимо ввести:

sudonano /var/www/html/index.html

Нажмите CTRL+X, чтобы выйти из текстового редактора nano.

Если у вас есть доменное имя, вы можете указать его в IP-адресе вашего сервера без дальнейшей настройки, так как Apache должен загрузить эту страницу по умолчанию. Но если вы хотите разместить несколько доменов на своем сервере или настроить SSL-сертификаты с помощью Let’s Encrypt, вам следует настроить виртуальный хост (инструкция будет в конце этого руководства).

Установка PHP и дополнительных расширений

Проверить доступную для установки версию PHP можно командой:

  • Ubuntu и Debian:

    apt show php

  • CentOS:

    yum info php

Знать её нужно для корректной установки нужных компонентов на следующем шаге (для Ubuntu и Debian). В примере версия PHP — 7.4. Вам при установке нужно заменить её в команде на ту, которая доступна для вашей операционной системы.

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

  • Ubuntu и Debian:

    apt -y install php7.4 libapache2-mod-php7.4 php-mysql php7.4-xml php7.4-gd php7.4-mbstring php7.4-zipБудьте внимательны — в названии пакетов вам нужно указать ту версию PHP, которую отобразила система при проверке на предыдущем шаге.

  • CentOS:

    yum -y install php php-mysqlnd php-common php-cli php-json php-opcache php-mbstring php-zip

Проверим установленную версию:

php -v

Установленная версия PHP автоматически настроится в качестве модуля Apache. После этого потребуется перезагрузить веб-сервер.

  • Ubuntu и Debian:

    systemctl restart apache2

  • CentOS:

    systemctl restart httpd

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

  • Ubuntu и Debian:

    Для конкретной версии:

    apt-cache search php | egrep ‘7.4’ | grep module

    Версии по умолчанию:

    apt-cache search php | egrep ‘module’ | grep default

  • CentOS:

    yum search php | grep module

Установить выбранный модуль можно командой:

  • Ubuntu и Debian:

    apt -y install php7.4-soap

  • CentOS:

    yum -y install php-soap

Тест PHP в командной строке

После завершения установки пакета мы можем протестировать PHP в командной строке.

php -version

Если PHP установлен правильно, вы должны увидеть нечто подобное:

PHP 7.4.3 (cli) (built: Mar 26 2020 20:24:23) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

Тест PHP для Apache

Теперь давайте протестируем PHP для Apache.

Создайте новый файл с именем info.php в корневом каталоге документа.

sudonano /var/www/html/info.php

После открытия редактора nano введите следующий PHP-код:

/var/www/html / info.РНР CTRL+X, Y и затем ENTER).

Теперь мы можем загрузить этот файл в браузере, перейдя по http://your_ip/info.php или http://example.com/info.php.

Ниже мы видим, что страница info.php работает правильно.

PHP 7 тестовая страница на Apache и Ubuntu 20.04

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

sudorm /var/www/html/info.php

Если вы планируете загружать файлы размером более 2 Мб через WordPress или аналогичный движок, нужно будет изменить файл конфигурации PHP и установить максимальный размер загрузки. 

Установка стека LAMP на Ubuntu 20.04 завершена! Если вы хотите настроить виртуальные хосты или дополнительную конфигурацию для Apache, читайте далее.

Мало кто знает, но LAMP на VDS можно установить автоматически. Такую услугу предоставляет хостинг-провайдер Timeweb. Все просто:

  1. Выберите  тариф VDS .
  2. Оплатите его.
  3. При настройке сервера отметьте Ubuntu 20.04 и стек LAMP.

Установка MySQL

MySQL — самый популярный сервер баз данных. Установка состоит из двух этапов:

Установка самого сервера БД:

  • Ubuntu и Debian:

    apt -y install mysql-server

  • CentOS:

    yum -y install mysql-server

После установки нужно проверить, запустился ли MySQL:

  • Ubuntu и Debian:

    systemctl status mysql

  • CentOS:

    systemctl status mysqld

При необходимости — запустить его и добавить в автозапуск вручную:

  • Ubuntu и Debian:

    systemctl start mysql && systemctl enable mysql

  • CentOS:

    systemctl start mysqld && systemctl enable mysqld

Проверить версию установленного сервера баз данных можно командой:

mysql –version

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

mysql_secure_installation

В процессе система предложит настроить компонент для проверки надёжности паролей, запросит новый пароль для пользователя root сервера MySQL. После этого будет предложено подтвердить или отклонить дополнительные настройки безопасности — для согласия введите y (yes), для отказа — любую другую клавишу и нажмите Enter. Рекомендуется подтвердить все параметры, так как они воплощают базовые рекомендации по безопасности сервера БД.

Список настраиваемых параметров по порядку: 

  • Активация модуля проверки надёжности паролей
  • Выбор уровня надёжности (0 — слабый / 1 — средний/ 2 — сильный)
  • Ввод и подтверждение нового пароля для root-пользователя MySQL
  • Удаление анонимных пользователей
  • Отключение удалённого подключения к БД для root-пользователя MySQL 
  • Удаление открытой тестовой базы данных
  • Перезагрузка таблиц привилегий для применения новых настроек

Настройка безопасности MySQL

Теперь вы должны запустить mysql_secure_installation, чтобы настроить безопасность для вашего сервера MySQL на Ubuntu 20.04.

sudo mysql_secure_installation

Компонент проверки пароля (необязательно)

Вас спросят, хотите ли вы настроить плагин проверки пароля. Если вы по какой-то причине не хотите применять строгую политику паролей, эта настройка не нужна.

Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No:

Нажмите ENTER, если не хотите настраивать плагин проверки пароля.

Создать пароль root

Если вы еще не создали пароль root для MySQL, вы должны создать его сейчас.

Please set the password for root here. New password: Re-enter new password:

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

Удаление анонимных пользователей

Далее вам будет предложено удалить анонимных пользователей.

By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) :

Нажмите y и ENTER, чтобы удалить анонимных пользователей.

Отключить удаленный корневой вход в систему

Normally, root should only be allowed to connect from ‘localhost’. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) :

Нажмите y и ENTER, чтобы удаленно запретить вход в систему root.

Удалить тестовую базу данных

By default, MySQL comes with a database named ‘test’ that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

Нажмите y и ENTER, чтобы удалить тестовую базу данных.

Тестовый сервис MySQL

Компонент MySQL вашего стека LAMP на Ubuntu 20.04 готов к работе.

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

sudo mysql

Вы увидите подобную информацию:

Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 15 Server version: 8.0.19-0ubuntu5 (Ubuntu) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the current input statement. mysql>

Чтобы выйти из MySQL, введите exit и нажмите ENTER.

exit

Вы успешно установили и настроили MySQL для вашего стека-«фонаря»​ на Ubuntu 20.04!

Удаление LAMP в Ubuntu

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

sudo apt purge  apache2 mariadb-server php7.2 libapache2-mod-php7.2 php-mysql php-curl php-json php-cgi php-gd php-zip php-mbstring php-xml php-xmlrpc

Команда purge позволяет удалить не только пакеты, но и их конфигурационные файлы. Если вы хотите оставить конфигурационные файлы, используйте команду remove.

Если установка LAMP на Ubuntu выполнялась с помощью tasksel, то для удаления необходимо выполнить:

sudo tasksel uninstall lamp-server

Проверка установки LAMP-стека

С помощью текстового редактора создайте проверочный файл php:

vi /var/www/html/info.php

Добавьте в него следующее содержимое и сохраните изменения:

Выполните перезагрузку сервера Apache:

service apache2 restart

Перейдите в браузере по следующему адресу:

http://IP-адрес-сервера/info.php

Если все установлено верно, то вы увидите информационную страницу.

Информационная страница

Что такое LЕMP

LEMP – это аналог популярного стека LAMP, используемого для разработки и развертывания веб-приложений. Традиционно LAMP состоит из Linux, Apache, MySQL и PHP. Благодаря своей модульной природе компоненты легко могут быть заменены. В LEMP Apache заменяется легким, но мощным Nginx, который может обеспечить более предсказуемую производительность при высоких нагрузках.

Как установить LEMP в Ubuntu 20.04

LEMP это программный стек — набор инструментов, связанных вместе, для реализации задачи по построению WEB сервера. Этот акроним обозначает операционную систему Linux и Nginx, MySQL/MariaDB и PHP. LEMP — это аналог популярного стека LAMP, используемого для разработки и развертывания веб-приложений. Традиционно LAMP состоит из Linux, Apache, MySQL и PHP. 

В данной статье мы установим Nginx, MariaDB и PHP7.4 (я напишу пару слов и об установке других версий PHP). Также я покажу, как создавать сайты с доменами в Nginx и работать с базой данных на примере установки wordpress.

Технические требования

Перед тем как продолжить работу с данным руководством, у нас должен быть создан сервер с установленным дистрибутивом Ubuntu 14.04, а также настроено подключение к серверу по SSH для пользователя с административными (sudo) привилегиями.

Как это сделать – описано в руководстве “Vscale: создаём первый сервер”.

Настройка Firewall

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

Открываем порт 80:

sudo firewall-cmd –permanent –zone=public –add-service=http

Открываем порт 443:

sudo firewall-cmd –permanent –zone=public –add-service=https

Перезагружаем службу:

sudo systemctl restart firewalld

Проверяем внесенные изменения:

sudo firewall-cmd –zone=public –list-services

В итоге должно отобразиться следующее:

dhcpv6-client http https ssh

Установка Nginx

Чтобы поставить Nginx для LEMP вам необходимо подключиться к VPS с ОС Ubuntu и исполнить следующие команды:

sudo apt-get update
sudo apt-get install nginx

Чтобы проверить установку сервера nginx, перейдите в любом браузере по следующей ссылке, указав IP-адрес вашего VDS:

http:///
Например: http://5.101.77.24/

Примечание: если у вас не получается подключиться, проверьте настройки FireWall, веб-сервер Nginx по умолчанию работает на порту 80, чтобы добавить правило выполните следующую пару команд:

iptables -A INPUT -p tcp –dport 80 -j ACCEPT
iptables-save адрес_сервера>

Настройка Nginx

Откроем файл конфигураций Nginx:

sudo nano /etc/nginx/nginx.conf

Вносим следующие изменения в файл:

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name 46.243.182.96; #Пишем имя сервера или IP адрес
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm; #Добавляем index.php
}
error_page 404 /404.html;
location = /40x.html {
root /usr/share/nginx/html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ .php$ { #Добавляем возможность обрабатывать запросы PHP
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

Настало время проверить наш веб-сервер. Создадим страницу по следующему пути:

nano /var/www/html/info.php

Вставим следующую строку и сохраним файл:

Перезапустим Nginx командой:

sudo systemctl restart nginx

Теперь, если вы зайдете через браузер на ваш веб-сервер по адресу http://server_name/info.php (http://xxx.xxx.xxx.xxx/info.php, где xxx.xxx.xxx.xxx — адрес), то увидите информационную страницу:

Установка MySQL(MariaDB) на Ubuntu

MySQL — это система управления базами данных (СУБД), которая используется для организации и получения контента.

Сегодня в LEMP стеке MySQL заменяется на популярный аналог – MariaDB. MariaDB имеет те же возможности, что и MySQL, и при этом является полностью бесплатной.

Примечание: если вы предпочитаете использовать базу данных MySQL в Ubuntu или ваш проект работает именно с ней, вам нужно будет добавить необходимые репозитории и установить БД с помощью инструкции.

Установите пакеты из главного репозитория Ubuntu с помощью менеджера пакетов:

sudo apt-get install mariadb-server mariadb-client

После успешной установки выполните настройки безопасности и удалите некоторые значения по умолчанию. Приведите в действие скрипт:

sudo mysql_secure_installation

Здесь MariaDB попросит вас задать пароль супер-пользователя БД. Затем система попросит ответить на несколько вопросов (они служебные и на каждый из них без лишних проблем можно ответить Yes).

После этого конфигурирование базы данных завершено, и можно переходить к следующему шагу настройки LEMP стека — установке PHP.

Установка PHP

Небольшое отступление по поводу версии PHP, ведь для некоторых проектов иногда требуется установка более ранних версий. Если тебе необходима другая версия php, например php5.6 или 7.0, тогда добавь в систему ppa ondrej/php и делай все по аналогии с инструкцией, но в первой команде установки PHP замени 7.4 на, например, 5.6 или 7.0 и далее используй не php7.4*, а php5.6* или 7.0. И, главное, обрати внимание, что в конфигурации сервера Nginx тебе тоже придется изменить адрес сокета PHP (с /run/php/php7.4-fpm.sock>; на, например, /run/php/php7.0-fpm.sock) Команда добавления ppa:

sudo add-apt-repository ppa:ondrej/php

Вернемся к установке актуальной версии — 7.4. Выполним команду по установке php из стандартных репозиториев Ubuntu 20.04:

sudo apt install php7.4 php7.4-fpm php7.4-mysql php-common php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-readline php7.4-mbstring php7.4-xml php7.4-gd php7.4-curl

Данная команда устанавливает не только сам препроцессор гипертекста, но и некоторые дополнительные расширения, необходимые для работы многих web-приложений, таких, как WordPress.

Запустим PHP:

sudo systemctl start php7.4-fpm

Остановка сервиса и его добавление и изъятие из автозагрузки происходит аналогично сервисам Nginx и MariaDB: systemctl stop — остановка, systemctl enable — автозапуск, systemctl disable — отключение автозапуска.

Проверим статус сервиса PHP:

systemctl status php7.4-fpmСтатус сервиса PHP

Установка MariaDB

MariaDB – это замена MySQL. Она представляет собой надежный и масштабируемый SQL-сервер с богатым набором расширений.
Для начала вы должны удалить все пакеты MySQL, если они у вас установлены:


[root@server ~]# yum remove mysql* mysql-server mysql-devel mysql-libs

Установите репозиторий REMI, чтобы решить проблему совместимости с MySQL, иначе при попытке установки MariaDB вы, скорее всего, увидите сообщения об ошибках с зависимостями.


[root@server ~]# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Теперь установите пакет compat-mysql55:


[root@server ~]# yum –enablerepo=remi-test –disablerepo=remi install compat-mysql55

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

Для 32-битных систем:


[root@server ~]# vi /etc/yum.repos.d/mariadb.repo # MariaDB 5.5 CentOS repository list – created 2013-06-06 07:42 UTC # http://mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/5.5/centos6-x86 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1

Для 64-битных систем:


[root@server ~]# vi /etc/yum.repos.d/mariadb.repo # MariaDB 5.5 CentOS repository list – created 2013-06-06 07:53 UTC # http://mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/5.5/centos6-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1

Сохраните и закройте файл, после чего запустите yum update:


[root@server ~]# yum update

Теперь установите MariaDB:


[root@server ~]# yum install MariaDB-devel MariaDB-client MariaDB-server -y

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


[root@server ~]# /etc/init.d/mysql start Starting MySQL… SUCCESS! [root@server ~]# chkconfig mysql on Set MySQL root password

По умолчанию пароль root в MySQL пустой. Поэтому, чтобы предотвратить несанкционированный доступ к MySQL, установите пароль root:


[root@server ~]# /usr/bin/mysql_secure_installation /usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we’ll need the current password for the root user. If you’ve just installed MariaDB, and you haven’t set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on… Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have a root password set, so you can safely answer ‘n’. Change the root password? [Y/n] y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. … Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] … Success! Normally, root should only be allowed to connect from ‘localhost’. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] … Success! By default, MariaDB comes with a database named ‘test’ that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] – Dropping test database… ERROR 1008 (HY000) at line 1: Can’t drop database ‘test’; database doesn’t exist … Failed! Not critical, keep moving… – Removing privileges on test database… … Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] … Success! Cleaning up… All done! If you’ve completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!

Создание блока сервера Nginx и тест PHP

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

Для начала удалим дефолтный:

sudo rm /etc/nginx/sites-enabled/default

И создадим свой:

sudo nano /etc/nginx/conf.d/default.conf

И вставим в него следующий текст (ничего менять не надо, это блок по умолчанию):

server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html/; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ /index.php; } location ~ .php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; } location ~ /.ht { access_log off; log_not_found off; deny all; } }

В окне редактора nano нужно нажать SHIFT+INSERT, чтобы вставить текст (или мышкой можно). Далее сохраним файл, нажав CTRL+O и выйдем — CTRL+W.

После этого нужно перезагрузить Nginx:

sudo systemctl restart nginx

Приступим к тесту php, создадим файл с функцией phpinfo() в корне сервера:

sudo nano /usr/share/nginx/html/phpinfo.php

Впишем в него:

Редактор nano

Редактор nano

После сохранения файла php перейдем в браузере по ссылке IP/phpinfo.php

phpinfo

phpinfo

Если мы видим информационную таблицу препроцессора, значит все работает.

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

Для примера создадим домен test.ru на машине с только что установленным LEMP. Если машина локальная, то сначала нужно добавить домен в файл hosts, чтобы можно было обратиться к нему из браузера, на хостинге же нужно просто указать вручную в NS записях домена (у регистроатора домена), свой ip адрес сервера и дождаться обновления DNS и делать все по аналогии (в hosts добавлять не нужно, хотя и можно, чтобы не ждать, пока обновятся записи DNS).

Добавим домен в файл hosts:

sudo nano /etc/hosts

Впишем строку:

127.0.0.1 test.ru

Далее продолжим обязательные манипуляции и создадим каталог для домена (не обязательно он должен располагаться в /usr/share/nginx/html, он может быть, например в /var/www):

sudo mkdir /usr/share/nginx/html/test.ru

Зададим права и пользователя для каталога:

sudo chown www-data:www-data /usr/share/nginx/html/test.ru -R sudo chmod ug+rwx /usr/share/nginx/html/test.ru -R

Создадим в каталоге файл index.html:

nano /usr/share/nginx/html/test.ru/index.html

В него вставим html код:

Hello world!

Далее копируем наш файл default.conf в каталог sites-available и назовем его test.ru:

sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/sites-available/test.ru

Откроем его в текстовом редакторе и немного изменим:

sudo nano /etc/nginx/sites-available/test.ru server { listen 80; listen [::]:80; server_name test.ru www.test.ru; root /usr/share/nginx/html/test.ru; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ /index.php; } location ~ .php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; } location ~ /.ht { access_log off; log_not_found off; deny all; } }

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

server_name test.ru www.test.ru;

root /usr/share/nginx/html/test.ru;

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

sudo ln -s /etc/nginx/sites-available/test.ru /etc/nginx/sites-enabled/test.ru

Все, нужно перезагрузить Nginx, чтобы изменения вступили в силу:

sudo systemctl restart nginx

Открываем в браузере test.ru для проверки:

Тестовый сайт

Тестовый сайт

Настройки Nginx для сайта test.ru будут в созданном файле /etc/nginx/sites-available/test.ru (например настройка кэша или IP6). И по аналогии с созданием test.ru можно создать любое количество сайтов.

Установка PHP на Ubuntu

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

sudo apt-get install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi php7.0 libapache2-mod-php7.0 php7.0-xml

В процессе установки потребуется 1 или 2 раза ответить ‘Yes’ на вопросы системы.

Тест PHP

Создайте простой файл “testphp.php” в корневой директории Apache и добавьте в него строки, как показано ниже:


[root@server ~]# vi /usr/share/nginx/html/testphp.php

Сохраните и закройте файл. Перезапустите службу nginx:


[root@server ~]# /etc/init.d/nginx restart

Перейдите в браузере по адресу http://server-ip-address/testphp.php. Вы должны увидеть страницу с подробной информацией об установленной версии php.

тестовая страница PHP

Если вы хотите установить модули php, введите команду yum install php* и перезапустите службу nginx. Для верификации модулей откройте веб-браузер и перейдите по адресу http://server-ip-address/testphp.php. Вы увидите список всех установленных модулей php.

Создание тестовой веб-страницы

Последним шагом создадим тестовую веб-страницу, которая сгенерирует и выведет информацию о сервере. Создадим в корневой директории веб-сервера файл “phpinfo.php”:

sudo nano /var/www/html/phpinfo.php

В открывшемся редакторе вставим следующий PHP-код:

phpinfo();

Сохраним созданный файл (“Ctrl + o”) и выйдите из редактора (“Ctrl + x”).

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

Для этого нам нужно обратиться к адресу созданной выше страницы в браузере:

http://IP_адрес_сервера/phpinfo.php

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

Для удаления файла воспользуйтесь следующей командой:

sudo rm /usr/share/nginx/html/phpinfo.php

Установка PHP и дополнительных расширений

Проверить доступную для установки версию PHP можно командой:

  • Ubuntu и Debian:

    apt show php

  • CentOS:

    yum info php

Знать её нужно для корректной установки нужных компонентов на следующем шаге (для Ubuntu и Debian). В примере версия PHP — 7.4. Вам при установке нужно заменить её в команде на ту, которая доступна для вашей операционной системы.

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

  • Ubuntu и Debian:

    apt -y install php7.4 php7.4-fpm php7.4-mysql php-common php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-readline php7.4-mbstring php7.4-xml php7.4-gd php7.4-curl php7.4-zip

  • CentOS:

    yum -y install php-fpm php-mysqlnd php-cli php-json php-mbstring php-xml php-gd php-curl php-zip

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

  • Ubuntu и Debian:

    Для конкретной версии:

    apt-cache search php | egrep ‘7.4’ | grep module

    Версии по умолчанию:

    apt-cache search php | egrep ‘module’ | grep default

  • CentOS:

    yum search php | grep module

Установить выбранный модуль можно командой:

  • Ubuntu и Debian:

    apt -y install php7.4-soap

  • CentOS:

    yum -y install php-soap

После установки PHP запускаем менеджер процессов php-fpm и добавляем его в автозагрузку:

  • Ubuntu и Debian:

    systemctl start php7.4-fpm && systemctl enable php7.4-fpm

  • CentOS:

    systemctl start php-fpm && systemctl enable php-fpm

Проверим установленную версию PHP: 

php -v

После установки PHP нужно отредактировать настройки php-fpm по умолчанию, предназначенные для веб-сервера Apache:

  • Ubuntu и Debian:

    nano /etc/php/7.4/fpm/pool.d/www.conf

  • CentOS:

    vim /etc/php-fpm.d/www.conf

В файле ищем блок кода Unix user/group of processes и меняем apache на www-data для Debian и Ubuntu и nginx для CentOS.

Остался последний штрих. Открываем для редактирования конфигурационный файл PHP:

  • Ubuntu и Debian:

    nano /etc/php/7.4/fpm/php.ini

  • CentOS:

    vim /etc/php.ini

В файле ищем раздел Paths and Directories (он почти в самом конце файла), внутри находим параметр cgi.fix_pathinfo. Нужно раскомментировать его (удалить «;» в начале строки) и изменить значение с «1» на «0».

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

  • Ubuntu и Debian:

    systemctl reload nginx && systemctl reload php7.4-fpm

  • CentOS:

    systemctl reload nginx && systemctl reload php-fpm

Настройка базового конфигурационного файла для сайта

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

  1. Удаляем конфигурационный файл default, использующийся по умолчанию, и создаём его замену, default.conf:

    • Ubuntu и Debian:

      unlink /etc/nginx/sites-enabled/default touch /etc/nginx/sites-available/default.conf ln /etc/nginx/sites-available/default.conf /etc/nginx/sites-enabled/default.conf

    • CentOS:

      touch /etc/nginx/conf.d/default.conf

  2. Откроем новый файл в консольном текстовом редакторе и добавим туда содержимое:

    • Ubuntu и Debian:

      nano /etc/nginx/sites-available/default.conf

    • CentOS:

      vim /etc/nginx/conf.d/default.conf

    Скопируйте в файл следующий блок настроек:

    • Ubuntu и Debian:

      server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html/; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } location ~ .php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; } location ~ /.ht { access_log off; log_not_found off; deny all; } }

    • CentOS:

      server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html/; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } location ~ .php$ { fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /.ht { access_log off; log_not_found off; deny all; } }

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

nginx -t
systemctl reload nginx

Установка tasksel

По умолчанию tasksel обычно установлен, но если это не так, то вы можете установить tasksel командой

apt-get install tasksel

По зависимостям установится также пакет tasksel-data, включающий официальные задачи для установки. Дополнительно можно установить следующие пакеты:

education-tasks — Задачи для Debian Edu, включающие серверную часть и часть для тонких клиентов или рабочих станций

games-tasks — Задачи Debian Games, включающие большое количество игр, разделенных по жанрам, а также задачи для установки эмуляторов, лучших игр и разработки игр

gis-tasks — Задачи Debian GIS, включающие программы для работы с OpenStreetMap, GPS и другие программы, связанные с географической информацией

junior-tasks — Задачи Debian Jr. и Doudou Linux, включающие игры и обучающие программы, программы для видео, обучения печати и другие

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

apt-cache search tasksel

Использование tasksel

Программа tasksel может работать как в режиме командной строки, так и в интерактивном режиме. Если никакие параметры командной строки не указаны, программа будет работать в интерактивном режиме, будет показано меню с конфигурациями, вам только надо будет проставить флажки и затем нажать кнопку «OK».
tasksel001

В командном режиме программа будет работать только тогда, когда указаны параметры командной строки. Их немного:











—list-tasksВывести список всех существующих задач
install задачаУстановить пакеты, определенные в задаче
remove задачаУдалить пакеты, определенные в задаче
-t, —testТестовый режим. Не удалять и не устанавливать пакеты на самом деле
—task-packages задачаВывести список пакетов, которые относятся к задаче и доступны в данный момент
—task-desc задачаВывести описание задачи
—new-installАвтоматически выбрать задачи без отображения их пользователю. Используется при новой инсталляции Debian
—debconf-apt-progress опцииПередать указанные опции команде debconf-apt-progress, которую запускает tasksel

Создание desc-файла для задачи tasksel

Tasksel позволяет достаточно быстро создавать собственные задачи. Для этого создается файл c расширением .desc, который размещается в директории /usr/share/tasksel/descs. Каждый файл .desc может включать одну и более задач, а каждая задача должна иметь определенную структуру, состоящую из полей с названием и значением. Вот эти поля:










TaskНазвание задачи. Например. «Task: web-server» без кавычек
SectionСекция, в которую входит задача. Например, «Section: httpd» или «Section: debian-games»
DescriptionОписание задачи. Описание может занимать несколько строчек. Первая строчка — краткое описание задачи, а последующие, начинающиеся с пробела, — более подробное описание.
RelevanceРелевантность. Обычно значение в этом поле выставляют равным 10. Пример: «Relevance: 10»
EnhancesЗадача, которую расширяет данная задача. Например, «Enhances: desktop»
KeyКлючевое слово задачи. Часто совпадает с названием задачи
PackagesСписок пакетов, входящих в задачу. Если пакетов несколько, то после заголовка пишется слово «list», а сами пакеты перечисляются на следующих строках, каждый пакет с новой строки, перед названием пакета пробел

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

Пример задачи tasksel

Как пример давайте рассмотрим задачу для установки файлового менеджера Midnight Commander:

Task: mc-file-manager Section: utils Description: Midnight Commander – многофункциональный диспетчер файлов GNU Midnight Commander – полноэкранный текстовый файловый менеджер. В нём используется двухпанельный интерфейс и встроенная командная оболочка. Также имеется встроенный редактор с подсветкой синтаксиса и просмотрщик, поддерживающий двоичные файлы. Программа поддерживает виртуальную файловую систему (VFS), что позволяет работать с файлами на удалённых машинах (например, на серверах FTP, SSH) и с файлами внутри архивов, как с обычными файлами. Relevance: 10 Key: mc Packages: list e2fslibs libc6 libglib2.0-0 libgpm2 libslang2 libssh2-1 mc-data

Теперь можно сохранить этот файл в директории /usr/share/tasksel/descs под названием mc.desc и запустить tasksel без параметров. В появившемся меню вы увидите задачу для установки Midnight Commander.
Установка программ в Debian при помощи tasksel

Заключение

После чего в браузере пишем название свое доменное имя, или же можно “ip” адрес, либо “localhost”, в результате вы должный увидеть вывод информации php:

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


[spoiler title=”Источники”]

  • https://serverspace.ru/support/help/ustanovka-lamp-steka-na-ubutu-18-04/
  • https://losst.ru/ustanovka-lamp-ubuntu-18-04
  • https://FirstVDS.ru/technology/lamp-install
  • https://timeweb.com/ru/community/articles/kak-ustanovit-stek-lamp-na-ubuntu-20-04
  • https://1cloud.ru/help/linux/ustanovka-lemp-steka-linux-nginx-mysql-php
  • https://maddot.ru/kak-ustanovit-lemp-v-ubuntu-20-04.html
  • https://community.vscale.io/hc/ru/community/posts/208340569-%D0%9A%D0%B0%D0%BA-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C-%D0%B8-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C-LEMP-Linux-Nginx-MySQL-PHP-%D0%BD%D0%B0-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5-%D1%81-Ubuntu-16-04
  • https://serverspace.by/support/help/ustanovka-lemp-steka-na-centos-7/
  • http://rus-linux.net/MyLDP/server/lemp.html
  • https://FirstVDS.ru/technology/lemp-install
  • https://mnorin.com/ustanovka-programm-v-debian-pri-pomoshhi-tasksel.html
  • https://cyber-x.ru/%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%B0%D0%B2%D0%BB%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC-%D1%81%D1%82%D0%B5%D0%BA-lamp-%D0%B2-ubuntu-20-04-%D0%B8-debian-10/


[/spoiler]


2020-12-22T10:34:30
Linux

Основные настройки iptables, или как настроить фаервол в Linux.



























Rate this post

Использование утилиты iptables на Linux. Всё очень просто, в очередной раз объясняя на форуме новичкам в мире Linux, что да как я понял, что на просторах интернет не найти собранную воедино статью с объяснением не только настройки iptables, но и некоторых сетевых основ.

Так что вашему вниманию я представляю небольшой экскурс по настройке firewall в Linux. Углубимся лишь в настройку netfilter/iptables, остальных прикладных вопросов мы несомненно тоже коснёмся, ведь нам не хватает именно комплексных ответов на наши вопросы… И я постараюсь ка можно более доходчиво здесь все изложить.

Виды пакетов

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

Соответственно в фильтре iptables все пакеты делятся на три аналогичные цепочки:

  • Input – обрабатывает входящие пакеты и подключения. Например, если какой-либо внешний пользователь пытается подключиться к вашему компьютеру по ssh или любой веб-сайт отправит вам свой контент по запросу браузера. Все эти пакеты попадут в эту цепочку;
  • forward – эта цепочка применяется для проходящих соединений. Сюда попадают пакеты, которые отправлены на ваш компьютер, но не предназначены ему, они просто пересылаются по сети к своей цели. Как я уже говорил, такое наблюдается на маршрутизаторах или, например, если ваш компьютер раздает wifi;
  • output – эта цепочка используется для исходящих пакетов и соединений. Сюда попадают пакеты, которые были созданы при попытке выполнить ping losst.ru или когда вы запускаете браузер и пытаетесь открыть любой сайт.

Но если вы думаете что можно просто полностью закрыть цепочку Input для увеличения безопасности, то вы очень сильно ошибаетесь. При работе сети используются обе цепочки input и output. Например, вы пытаетесь выполнить ping, данные отправляются через output, но ответ приходит через input. То же самое происходит при просмотре сайтов и других действиях. А вот цепочка forward может вообще не использоваться если ваш компьютер не является маршрутизатором. Так что настройка iptables должна выполняться очень аккуратно.

Правила и действия

Перед тем как перейти к созданию списка правил iptables нужно рассмотреть как они работают и какие бывают. Для каждого типа пакетов можно установить набор правил, которые по очереди будут проверяться на соответствие с пакетом и если пакет соответствует, то применять к нему указанное в правиле действие. Правила образуют цепочку, поэтому input, output и forward называют цепочками, цепочками правил. Действий может быть несколько:

  • ACCEPT – разрешить прохождение пакета дальше по цепочке правил;
  • DROP – удалить пакет;
  • REJECT – отклонить пакет, отправителю будет отправлено сообщение, что пакет был отклонен;
  • LOG – сделать запись о пакете в лог файл;
  • QUEUE – отправить пакет пользовательскому приложению.

Правила могут проверять любые соответствия, например, по ip, по порту получателя или отправителя, заголовкам пакета и многому другому. Если пакет не подходит ни одному из правил, то к нему применяется действие по умолчанию, обычно ACCEPT.

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

  • prerouting – в эту цепочку пакет попадает перед обработкой iptables, система еще не знает куда он будет отправлен, в input, output или forward;
  • postrouting – сюда попадают все проходящие пакеты, которые уже прошли цепочку forward.

Но это еще не все. У нас еще есть таблицы iptables, с которыми тоже желательно разобраться.

Filter

Filter – это таблица по умолчанию для iptables. Если вы не определяете собственную таблицу, то будет использоваться эта таблица правил. Таблица Filter использует три разные цепочки: INPUT, FORWARD и OUTPUT.






INPUTЦепочка, которая используется для управления входящими соединениями. Например, если пользователь пытается подключиться по ssh к вашему серверу, iptables попытается сопоставить IP-адрес и порт с правилом в цепочке input.
FORWARDЭта цепочка используется для входящих соединений, которые фактически не доставляются локально. Такая ситуация может возникнуть на маршрутизаторе – данные всегда отправляются на него, но редко на самом деле предназначены для самого маршрутизатора, т.е. маршрутизатор просто перенаправляют данные.
OUTPUTЦепочка, предназначенная для обработки исходящих соединений. Например, если пользователь попытается выполнить команду ping до определенного хоста, то iptables проверит output-цепочку, чтобы разрешить или отклонить попытку подключения.

NAT

Таблица NAT имеет следующие встроенные цепочки: PREROUTING, POSTROUTING, OUTPUT.






PREROUTINGИзменяет пакеты перед маршрутизацией. Перенаправление предназначено для пакетов поступающих в систему (например в локальную или частную сеть). Цепочка позволяет определить действительный IP-адрес назначения пакетов. Используется для DNAT (NAT назначения). DNAT изменяет целевой адрес пакета.
POSTROUTINGИзменяет пакеты после маршрутизации. Перенаправление предназначено для пакетов покидающих систему. Цепочка подменяет исходный адрес пакетов. Это используется для SNAT (источник NAT). SNAT изменяет исходный адрес пакета.
OUTPUTИзменяет пакеты после маршрутизации. Перенаправление предназначено для локальных пакетов. Цепочка изменяет целевой адрес пакетов.

Основы Iptables

Все данные передаются по сети в виде пакетов. Ядро Linux предоставляет интерфейс для фильтрации пакетов входящего и исходящего трафика при помощи специальных таблиц. Iptables — это приложение командной строки и межсетевой экран для Linux, которым можно пользоваться для создания, поддержания работоспособности и проверки этих таблиц.

Можно создать несколько таблиц. В каждой таблице может содержаться несколько цепочек. Цепочка — это набор правил. Каждое правило определяет, что делать с пакетом, если он соответствует условиям. При соответствии пакета над ним выполняется целевое действие (TARGET). Это может быть проверка следующей цепочкой или один из следующих вариантов:

  • ACCEPT: разрешить передачу пакета.
  • DROP: запретить передачу пакета.
  • RETURN: пропустить текущую цепочку и перейти к следующему правилу в цепочке, которая ее вызвала.

В данном руководстве мы будем работать с одной из таблиц по умолчанию, которая называется фильтром (filter). В таблице фильтра есть три цепочки (набора правил):

  • INPUT – используется для контроля входящих пакетов. Можно разрешать или блокировать  подключения по порту, протоколу или IP-адресу источника.
  • FORWARD – используется для фильтрации пакетов, приходящих на сервер, но перенаправляемых куда-либо еще.
  • OUTPUT – используется для фильтрации исходящих пакетов.

Установка iptables

Для начала убедимся, что утилита iptables установлена. Для этого введем команду iptables -h и если вывод будет command not found, значит утилиту требуется установить.

iptables -h bash: iptables: command not foundDebian 9: проверка наличия iptabes

Debian 9: проверка наличия iptabes

Установка iptables очень простая, для этого достаточно ввести:

apt install iptables

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

Debian 9: установка iptables завершена

Debian 9: установка iptables завершена

Таблицы ipatables

Над цепочками правил в iptables есть еще один уровень абстракции, и это таблицы. В системе есть несколько таблиц, и все они имеют стандартный набор цепочек input, forward и output. Таблицы предназначены для выполнения разных действий над пакетами, например для модификации или фильтрации. Сейчас это для вас не так важно и будет достаточно знать что фильтрация пакетов iptables осуществляется в таблице filter. Но мы рассмотрим их все:

  • raw – предназначена для работы с сырыми пакетами, пока они еще не прошли обработку;
  • mangle – предназначена для модификации пакетов;
  • nat – обеспечивает работу nat, если вы хотите использовать компьютер в качестве маршрутизатора;
  • filter – основная таблица для фильтрации пакетов, используется по умолчанию.

С теорией почти все, теперь давайте рассмотрим утилиту командной строки iptables, с помощью которой и выполняется управление системой iptables.

Утилита Iptables

Подсистема iptables и netfilter встроены в ядро, но вот набор утилит для управления всем этим не всегда поставляется вместе с системой. Для установки утилиты в Ubuntu наберите:

sudo apt install iptables

А в дистрибутивах, основанных на Fedora, установка iptables выполняется немного по-другому:

sudo yum install iptables

Когда установка iptables будет завершена, можно переходить к настройке, но давайте сначала рассмотрим синтаксис утилиты. Обычно команда имеет такой общий вид:

$ iptables-t таблица действие цепочкадополнительные_параметры

Теперь давайте рассмотрим параметры iptables, таблица указывает таблицу, с которой нужно работать, этот параметр можно упустить, действие – нужное действие, например, создать или удалить правило, а дополнительные параметры описывают действие и правило, которое нужно выполнить.

Осталось рассмотреть основные действия, которые позволяет выполнить iptables:

  • -A – добавить правило в цепочку;
  • – проверить все правила;
  • -D – удалить правило;
  • -I – вставить правило с нужным номером;
  • -L – вывести все правила в текущей цепочке;
  • -S – вывести все правила;
  • -F – очистить все правила;
  • -N – создать цепочку;
  • -X – удалить цепочку;
  • -P – установить действие по умолчанию.

Дополнительные опции для правил:

  • -p – указать протокол, один из tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp,<br>mh;
  • -s – указать ip адрес устройства-отправителя пакета;
  • -d – указать ip адрес получателя;
  • -i – входной сетевой интерфейс;
  • -o – исходящий сетевой интерфейс;
  • -j – выбрать действие, если правило подошло.

Теперь вы можем перейти рассмотрению примеров того как выполняется настройка iptables.

Настройка iptables на Linux для чайников

Кстати, ранее мы уже говорили о том, какой файловый менеджер является лучшим для Linux . Возможно это также вам будет интересно. Ссылку можно найти выше.

Настройка iptables на Linux как мы уже сказали выше, довольно простая. Но прежде чем начать, настройку, нужно ознакомиться с общими понятиями опции.

Типы цепей

В Iptables используются три разные цепи: ввод, пересылка и вывод.

Input — Эта цепочка используется для управления поведением входящих соединений. Например, если пользователь попытается установить SSH на ваш компьютер / сервер, iptables попытается сопоставить IP-адрес и порт с правилом в цепочке ввода.

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

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

iptables -L -v

Этот снимок экрана относится к серверу, который работает в течение нескольких недель и не имеет ограничений на входящие или исходящие подключения. Как вы можете видеть, цепочка ввода обработала 11 ГБ пакетов, а выходная цепочка обработала 17 ГБ. С другой стороны, прямой цепочке не нужно обрабатывать один пакет. Это связано с тем, что сервер не выполняет никаких пересылок или не используется в качестве сквозного устройства.

Вывод — эта цепочка используется для исходящих соединений. Например, если вы попытаетесь выполнить ping на сайте linuxinsider, iptables проверит свою цепочку вывода, чтобы узнать, какие правила касаются ping и linuxinsider, прежде чем принимать решение разрешить или запретить попытку подключения.

Предостережение

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

Поведение политики по умолчанию

Прежде чем приступить к настройке определенных правил, вы должны решить, что вы хотите, чтобы поведение этих трех цепей по умолчанию. Другими словами, что вы хотите, чтобы iptables делал, если соединение не соответствует каким-либо существующим правилам?

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

Как вы можете видеть, мы также использовали команду grep для получения более чистого результата. На этом скриншоте наши цепочки в настоящее время рассчитаны на прием трафика.

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

iptables –policy INPUT ACCEPT

iptables –policy OUTPUT ACCEPT

iptables –policy FORWARD ACCEPT

По умолчанию в правиле принятия, вы можете использовать iptables для отказа от определенных IP-адресов или номеров портов, продолжая принимать все остальные соединения. Мы дойдем до этих команд через минуту.

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

iptables –policy INPUT DROP

iptables –policy OUTPUT DROP

iptables –policy FORWARD DROP

Ответы на подключение

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

Accept — разрешить соединение.

Drop — Отбросьте соединение, действуйте так, как будто этого никогда не было. Это лучше всего, если вы не хотите, чтобы источник понял, что ваша система существует.

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

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

Разрешение подключения:

Удаление соединения:

Отклонение соединения:

Сетевая маска или характеристика, чтобы указать диапазон IP-адресов.

Примеры настройки Iptables

Мы рассмотрим несколько основных примеров, чтобы вы смогли закрепить все прочитанное выше.

Список правил

Сначала давайте рассмотрим как выполняется просмотр правил iptables, для этого достаточно опции -L:

iptables -L

iptables

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

iptables -L INPUT

Очистка правил

Вы не можете просто так отключить iptables остановив сервис обновления правил iptables через systemd или даже удалив набор утилит для настройки. Подсистема работает на уровне ядра и не зависит от того, что там у вас установлено. Поэтому если сделаете что-то не так, то нужно будет очистить правила. Для этого выполните:

sudo iptables -F

Или только для определенной цепочки:

sudo iptables -F Input

Напоминаю, что все эти действия выполняются для таблицы по умолчанию – filter.

Правила по умолчанию

Как я уже говорил, если для пакета не подходит ни одно правило, то для него применяется действие по умолчанию. Его можно задать с помощью опции -p:

sudo iptables -p INPUT ACCEPT

$ sudo iptables -p OUTPUT ACCEPT

$ sudo iptables -p FORWARD DROP

В этом примере мы разрешаем цепочки INPUT и OUTPUT, но запрещаем FORWARD.

sudo iptables -L

iptables1

Блокировка ip-адресов

Часто возникает задача блокирования ip-адресов. Например, вы заметили, что IP 11.22.121.122 постоянно пытается атаковать ваш сервер, и вы хотите его заблокировать. Нужно просто заблокировать все входящие пакеты с этого IP-адреса. Чтобы это сделать, нужно добавить следующее правило в цепочку INPUT таблицы filter. В примере имя таблицы указано явно, без использования ключа t правило попадает в таблицу по умолчанию:

iptables -t filter -A INPUT -s 11.22.121.122 -j REJECT

Здесь:

  • t – указывает, в какую таблицу будет входить правило;
  • A – указывает на добавление (Append) правила в цепочку INPUT;
  • s – указывает источник;
  • j – указывает iptables на отклонение трафика с помощью цели REJECT.

Также можете блокировать диапазоны IP-адресов, используя CIDR-нотацию. Если необходимо заблокировать все IP-адреса от 11.22.121.0 до 11.22.121.255, это можно сделать с помощью команды:

iptables -A INPUT -s 11.22.121.0/24 -j REJECT

Если необходимо заблокировать исходящий трафик на конкретный ip, используется цепочка OUTPUT и флаг -d для указания ip-адреса назначения:

iptables -A OUTPUT -d 31.13.78.35 -j DROP

Проброс портов

Если в вашей внутренней сети есть сервер, который должен быть доступен извне, можно воспользоваться целевым действием -j DNAT цепочки PREROUTING в таблице NAT и указать IP-адрес и порт места назначения, на которые будут перенаправляться входящие пакеты, запрашивающие соединение с вашей внутренней службой. Например, если нужно перенаправлять входящие HTTP-запросы по порту 80 на выделенный HTTP-сервер Apache по адресу 172.31.0.23, выполните команду:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j DNAT –to 172.31.0.23:80

Данное правило определяет использование встроенной цепочки PREROUTING в таблице NAT для перенаправления входящих HTTP-запросов на порт 80 указанного IP-адреса 172.31.0.23. Такой способ трансляции сетевых адресов называется перенаправлением или пробросом портов.

Вставка и замена правил

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

iptables -I INPUT 1 -s 11.22.121.10 -j ACCEPT

Для замены правила стоящем на определенном месте, необходимо использовать ключ -R. Следующая команда заменит правило стоящее на 1 месте:

iptables -R INPUT 1 -s 11.22.121.11 -j ACCEPT

Как сохранить правила iptables

Одной из особенностей утилиты iptables является то, что прописанные правила полностью сбрасываются после перезагрузки системы. Самый простым способом сохранить настройки iptables будет поставить утилиту iptables-persistent. В debian и ubuntu это делается так, если вы по прежнему авторизованы под root:

apt install iptables-persistent

Во время установки будет вопрос, сохранить ли текущие настройки iptables, пока выберем не сохранять, то есть No, потому что для начала нужно сохранить их в отдельный текстовый файл. В противном случае iptables-persistent ничего не сохранит.

После установки сохраним текущие настройки iptables в отдельный файл, который будет располагаться в папке утилиты:

iptables-save > /etc/iptables/rules.v4

А затем перезапустим службу iptables-persistent

service iptables-persistent restart

Если вы получили сообщение, что данная служба не найдена…

Failed to restart iptables-persistent.service: Unit iptables-persistent.service not found.Debian 9: неудачный перезапуска службы iptables-persistent

Debian 9: неудачный перезапуска службы iptables-persistent

То попробуйте перезапустить службу с другим названием:

service netfilter-persistent restart

В debian и ubuntu должен работать второй вариант.

Все, теперь можно смело перезагружать компьютер или сервер, все настройки iptables при это сохранятся.

Удаление правил iptables

Если нужно удалить все правила и прописать все заново с чистого листа, можно воспользоваться командой очистки (flush):

sudo iptables -F

Она удаляет все существующие правила. Если вам нужно удалить конкретное правило, воспользуйтесь опцией -D. Сначала при помощи опции —line-numbers выведите пронумерованный список всех правил:

sudo iptables -L –line-numbers



Для удаления правила нужно указать цепочку и номер в списке. В нашем случае это цепочка INPUT и номер 3.

sudo iptables -D INPUT 3

результат

Восстановление настроек

Если вы еще не сохраняли настройки, и хотите вернуться к первоначальным настройкам. Используйте iptables-restore.

В Ubuntu/Debian

sudo iptables-restore < /etc/iptables.rules

В Centos/Redhat

iptables-restore < /etc/sysconfig/iptables

Основные настройки iptables для веб-сервера

Для начала следует очистить правила, которые выставляет хостер по-умолчанию, потому что при определенных обстоятельствах прописанные ниже правила могут конфликтовать с теми, что уже есть.

iptables -F

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

# Запретим все входящие соединения iptables -P INPUT DROP # Разрешим все исходящие соединения iptables -P OUTPUT ACCEPT

Теперь разрешим внутренние соединения с 127.0.0.1 (localhost), а также установленные соединения для приложений и пинга.

# Разрешить входящие соединения с localhost iptables -A INPUT -i lo -j ACCEPT # Разрешить входящие соединения, которые уже были установлены iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

Добавим несколько дополнительных фильтров:

# Блокировать все нулевые пакеты iptables -A INPUT -p tcp –tcp-flags ALL NONE -j DROP # Блокировать все пакеты XMAS iptables -A INPUT -p tcp –tcp-flags ALL ALL -j DROP # Защищаемся от syn-flood iptables -A INPUT -p tcp ! –syn -m state –state NEW -j DROP

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

iptables -A INPUT -p TCP –dport 22 -j ACCEPT

Открываем порты для базовых сервисов веб-сервера:

# Открываем порт 80 для http iptables -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT # Открываем порт 443 для https iptables -A INPUT -p tcp -m tcp –dport 443 -j ACCEPT

Если дополнительно планируется настраивать на сервере почту, то следует открыть порты и для этих служб:

# Открываем порты 25 и 465 для smtp-трафика iptables -A INPUT -p tcp -m tcp –dport 25 -j ACCEPT iptables -A INPUT -p tcp -m tcp –dport 465 -j ACCEPT # Открываем порты 110 и 995 для pop-трафика iptables -A INPUT -p tcp -m tcp –dport 110 -j ACCEPT iptables -A INPUT -p tcp -m tcp –dport 995 -j ACCEPT # Открываем порты 143 и 993 для imap-трафика iptables -A INPUT -p tcp -m tcp –dport 143 -j ACCEPT iptables -A INPUT -p tcp -m tcp –dport 993 -j ACCEPT

Затем проверим все настройки командой iptables -L

Debian 9: Базовые правила iptables для веб-сервера

Debian 9: Базовые правила iptables для веб-сервера

И наконец стоит сохранить наши правила, чтобы они не испарились после перезагрузки сервера. Как это сделать, уже рассказано в разделе выше.

Как открыть порт в iptables

Чтобы разрешить подключаться к нашей ОС по SSH, нам потребуется разрешить подключение через порт 22, прописав правило в iptables:

iptables -A INPUT -p TCP –dport 22 -j ACCEPT

Далее проверим все наши правила с помощью команды iptables -L

Debian 9: просмотр списка правил iptables

Debian 9: просмотр списка правил iptables

Как мы видим, появилось новое правило для ssh по стандартному порту 22. Теперь он открыт и можно подключаться, так как теперь блокируются все входящие соединения, кроме соединений по этому порту. О том, как подключаться к серверу по SSH.

Как заблокировать IP адрес в iptables

После того, как мы настроили исключение для входящих соединений для 22 порта, возможно потребуется ограничить подключение с конкретного IP. Допустим адрес с которого мы хотим ограничить любые подключения — 192.168.122.122, для этого введем команду:

iptables -I INPUT -s 192.168.122.122 -j DROP

Вместо используемого адреса в примере может быть любой, как внутренний, так и внешний. Проверим правила с помощью iptables -L

Debian 9: просмотр списка правил iptables

Debian 9: просмотр списка правил iptables

Примеры часто используемых команд iptables

Общие команды

Просмотр правил с их номерами:

iptables -L –line-numbers

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

iptables -t nat -L –line-numbers

Удалить все правила:

iptables -F

Установить правила по умолчанию:

iptables -P INPUT DROP

iptables -P OUTPUT DROP

* в данных примерах по умолчанию для всех входящих (INPUT) и исходящих (OUTPUT) пакетов будет работать запрещающее правило (DROP).

Разрешить все

Способ 1. С помощью добавления правила:

iptables -I INPUT 1 -j ACCEPT

iptables -I OUTPUT 1 -j ACCEPT

iptables -I FORWARD 1 -j ACCEPT

* данные три команды создадут правила, которые разрешают все входящие, исходящие и транзитные пакеты.

Способ 2. Чисткой правил:

iptables -F

iptables -S

* здесь мы сначала удаляем все правила (-F), затем устанавливаем политику по умолчанию — разрешать входящие, исходящие и транзитные (-S).

Способ 3. Отключение сервиса (удобно для диагностики проблем на время отключить firewall):

service iptables stop

iptables stop

Работа с правилами

1. Добавить правило в конец списка:

iptables -A INPUT -p tcp –dport 25 -j ACCEPT

iptables -A INPUT -p tcp -s ! 192.168.0.25 –dport 993 -i eth0 -j ACCEPT

2. Добавить диапазон портов:

iptables -A INPUT -p tcp –dport 3000:4000 -j ACCEPT

* в данном случае, от 3000 до 4000.

3. Вставить правило:

iptables -I FORWARD 15 -p udp -d 8.8.8.8 –dport 53 -i eth1 -j ACCEPT

4. Заблокировать определенный IP-адрес для подключения по 25 порту:

iptables -I INPUT 1 -s 1.1.1.1 -p tcp –dport 25 -j DROP

5. Разрешить несколько портов:

iptables -A INPUT -p tcp –match multiport –dports 20,21,25,80,8080,3000:4000 -j ACCEPT

Проброс портов (port forwarding)

Рассмотрим пример проброса одного порта и диапазона портов.

Один порт (одинаковые порты)

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

1. Правила PREROUTING + POSTROUTING:

iptables -t nat -A PREROUTING -p tcp -m tcp -d 19.8.232.80 –dport 22 -j DNAT –to-destination 192.168.1.15:22

iptables -t nat -A POSTROUTING -p tcp -m tcp -s 192.168.1.15 –sport 22 -j SNAT –to-source 19.8.232.80:22

* где 19.8.232.80 — адрес, на котором слушаем запросы на подключение; 22 — порт для проброса; 192.168.1.15 — внутренний IP-адрес, на который переводим все запросы.

2. Правила PREROUTING + FORWARD:

iptables -t nat -A PREROUTING -p tcp -i eth1 –dport 22 -j DNAT –to-destination 192.168.1.15:22

iptables -A FORWARD -p tcp -d 192.168.1.15 –dport 22 -m state –state NEW,ESTABLISHED,RELATED -j ACCEPT

* где eth1 — сетевой интерфейс, на котором слушаем запросы; 22 — порт для проброса; 192.168.1.15 — внутренний IP-адрес, на который переводим все запросы.

Один порт (разные порты)

Рассмотрим ситуацию, когда мы слушаем один порт, а пробрасываем на другой.

iptables -t nat -A PREROUTING -p tcp -i eth1 –dport 8022 -j DNAT –to-destination 192.168.1.15:22

iptables -A FORWARD -p tcp -d 192.168.1.15 –dport 22 -m state –state NEW,ESTABLISHED,RELATED -j ACCEPT

* где eth1 — сетевой интерфейс, на котором слушаем запросы; 8022 — порт для проброса, на котором будем слушать запросы; 22 — порт для проброса на внутренний адрес; 192.168.1.15 — внутренний IP-адрес, на который переводим все запросы.

Диапазон портов

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

iptables -t nat -I PREROUTING -p tcp -m tcp –dport 1000:5000 -j DNAT –to-destination 192.168.1.15:1000-5000

iptables -A FORWARD -d 192.168.1.15 -i eth1 -p tcp -m tcp –dport 1000:5000 -j ACCEPT

* где eth1 — сетевой интерфейс, на котором слушаем запросы; 1000:5000 — порты для проброса (от 1000 до 5000); 192.168.1.15 — внутренний IP-адрес, на который переводим все запросы.

Стартовая настройка

Разрешаем SSH:

iptables -A INPUT -p tcp –dport 22 -j ACCEPT

Создаем правила для нормальной работы apt-get или yum:

iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

Разрешаем ICMP (для выполнения команды ping):

iptables -A INPUT -p icmp -j ACCEPT

Разрешаем все входящие на адрес локальной петли:

iptables -A INPUT -i lo -j ACCEPT

Ставим политику запрета на входящие и разрешаем все исходящие:

iptables -P INPUT DROP

iptables -P OUTPUT ACCEPT

Ubuntu и CentOS

В современных операционных системах Ubuntu и CentOS по умолчанию нет iptables. Необходимо его установить или пользоваться более новыми утилитами.

В CentOS

В качестве штатной программы управления брандмауэром используется firewall-cmd. Подробнее читайте инструкцию Как настроить firewalld в CentOS.

Если необходимо пользоваться iptables, устанавливаем пакет с утилитой:

yum install iptables-services

Отключаем firewalld:

systemctl stop firewalld

systemctl disable firewalld

Разрешаем и запускаем iptables:

systemctl enable iptables

systemctl start iptables

Установка iptables

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

# systemctl restart iptables.service Failed to issue method call: Unit iptables.service failed to load: No such file or directory.

Или добавить в автозапуск не получится:

# systemctl enable iptables.service Failed to issue method call: No such file or directory

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

# yum -y install iptables-services

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

# systemctl enable iptables.service # systemctl start iptables.service

Синтаксис и правила iptables в CentOS/Red Hat

Iptables – это утилита, с помощью которой настраиваются правила для файрвола в Linux.

Iptables группирует правила файрвола в таблицах, основные это:

  • Таблица filter – используется для фильтрации трафика, то есть разрешения и запрещения соединений
  • Таблица nat – используется для преобразования адресов (NAT)
  • Таблица mangle – прочие модификации заголовков ip пакетов.

Для начала проверим, что iptables установлен в системе(должен быть умолчанию):

rpm -q iptables

rpm -q iptables - версия iptables в centos

Вывод команды показывает, что текущая установленная версия iptables – 1.4.21.

Работа с iptables в командной строке требует root привилегий, поэтому далее будем работать под пользователем root.

Чтобы вывести текущие правила, выполним команду:

iptables [-t таблица] -L [цепочка] [параметры]

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

Например, результат команды iptables -L, когда в таблицах еще не создано правил:

iptables -L - таблицы правил файервола в centos redhat

Рассмотрим вывод команды подробнее.

Таблица filter содержит три типа правил, так называемые chain(цепочки):

  • INPUT – в этой цепочке обрабатываются входящие ip пакеты, предназначенные для самого хоста;
  • OUTPUT – в этой цепочке обрабатываются исходящие ip пакеты от самого хоста;
  • FORWARD – эта цепочка нужна для перенаправления ip пакетов. Используется, если вы хотите использовать сервер, как маршрутизатор.

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

  • ACCEPT – по умолчанию все соединения разрешены, правилами блокируются нежелательные соединения;
  • DROP – по умолчанию все соединения запрещены, правилами разрешаются нужные соединения.

Управление фаерволом iptables

Для управления им (включение/отключение, перезагрузка, добавление в автозагрузку и др.), нужно установить пакет:

yum -y install iptables-services

Теперь можно включить и добавить в автозагрузку:

systemctl start iptables.service systemctl enable iptables.service

Открытие портов

Теперь немного расширим нашу конфигурацию и откроем в iptables порты для некоторых сервисов. Допустим, у нас работает веб-сервер и необходимо открыть к нему доступ из интернета. Добавляем правила для веб-трафика:

Было добавлено разрешение на входящие соединения по 80-му и 443-му портам, которые использует web сервер в своей работе.

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

Для корректной работы DNS сервера, нужно открыть UDP порт 53

И так далее. По аналогии можете открыть доступ для всех необходимых сервисов.

Проброс (forward) порта

Рассмотрим ситуацию, когда необходимо выполнить проброс портов с внешнего интерфейса на какой-то компьютер в локальной сети. Допустим, вам необходимо получить rdp доступ к компьютеру 10.1.3.50 из интернета. Делаем проброс TCP порта 3389:

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

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

$IPT -A FORWARD -i $WAN -o $LAN1 -j REJECT

Либо перед этим правилом создайте разрешающее правило для доступа снаружи к внутреннему сервису, например вот так:

$IPT -A FORWARD -i $WAN -d 10.1.3.50 -p tcp -m tcp –dport 3389 -j ACCEPT

Включение логов

Во время настройки полезно включить логи, чтобы мониторить заблокированные пакеты и выяснять, почему отсутствует доступ к необходимым сервисам, которые мы вроде бы уже открыли. Я отправляю все заблокированные пакеты в отдельные цепочки (block_in, block_out, block_fw), соответствующие направлению трафика и маркирую в логах каждое направление. Так удобнее делать разбор полетов. Добавляем следующие правила в самый конец скрипта, перед сохранением настроек:

Все заблокированные пакеты вы сможете отследить в файле /var/log/messages.

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

Прием и сбрасывание трафика в цепях

Каждая цепь настраивается отдельно для приема или блокирования трафика. Выставив определенное значение, можно добиться того, что, например, весь входящий трафик будет блокироваться. Для этого команда должна быть sudo iptables –policy INPUT DROP, где INPUT — название цепи, а DROP — значение сброса.

Сброс входящих запросов в утилите iptables в CentOS 7

Точно такие же параметры задаются и для других цепей, например, sudo iptables –policy OUTPUT DROP. Если же необходимо выставить значение на прием трафика, тогда DROP изменяется на ACCEPT и получается sudo iptables –policy INPUT ACCEPT.

Разрешение и блокировка портов

Как известно, все сетевые приложения и процессы работают через определенный порт. Путем блокировки или разрешения определенных адресов можно контролировать доступ всех сетевых целей. Давайте разберем проброс порта на примере 80. В «Терминале» будет достаточно ввести команду sudo iptables -A INPUT -p tcp –dport 80 -j ACCEPT, где -А — добавление нового правила, INPUT — указание цепи, -P — определение протокола, в этом случае TCP, а –dport — порт назначения.

Правило для открытия порта 80 в утилите iptables в CentOS 7

Точно такая же команда относится и к порту 22, который используется сервисом SSH: sudo iptables -A INPUT -p tcp –dport 22 -j ACCEPT.

Правило для открытия порта 22 в утилите iptables в CentOS 7

Для блокирования указанного порта применяется строка точно такого же вида, только в конце ACCEPT изменяется на DROP. В итоге получается, например, sudo iptables -A INPUT -p tcp –dport 2450 -j DROP.

Правило для запрета порта в утилите iptables в CentOS 7

Все эти правила заносятся в конфигурационный файл и вы можете просмотреть их в любой момент. Напоминаем, осуществляется это через sudo iptables -L. Если вместе с портом необходимо разрешить еще и сетевой IP-адрес, строка немного видоизменяется — после TPC добавляется -s и сам адрес. sudo iptables -A INPUT -p tcp -s 12.12.12.12/32 –dport 22 -j ACCEPT, где 12.12.12.12/32 — необходимый IP-адрес.

Правило для принятия IP-адреса и порта в iptables в CentOS 7

Блокирование происходит по тому же принципу, меняя в конце значение ACCEPT на DROP. Тогда получается, например, sudo iptables -A INPUT -p tcp -s 12.12.12.0/24 –dport 22 -j DROP.

Правило для блокировки IP-адреса и порта в iptables в CentOS 7

Блокирование ICMP

ICMP (Internet Control Message Protocol) — протокол, который входит в состав TCP/IP и задействован для передачи сообщений об ошибках и экстренных ситуациях при работе с трафиком. Например, когда запрашиваемый сервер недоступен, именно этот инструмент выполняет сервисные функции. Утилита iptables позволяет заблокировать его через брандмауэр, а сделать это можно командой sudo iptables -A OUTPUT -p icmp –icmp-type 8 -j DROP. Она произведет блокировку запросов от вашего и к вашему серверу.

Первое правило для блокировки пропинговки iptables в CentOS 7

Входящие запросы блокируются немного иначе. Тогда нужно ввести sudo iptables -I INPUT -p icmp –icmp-type 8 -j DROP. После активации данных правил сервер не будет отвечать на ping-запросы.

Второе правило для блокировки пропинговки в iptables в CentOS 7

Включить логи iptables

Iptables позволяет записывать информацию о проходящих ip пакетах в системный журнал. Реализуется это с помощью специфичного действия LOG над соединением, после которого, ip пакет продолжает движение по цепочке нетронутым. Для примера, создадим правило, которое будет записывать в системный журнал все события соединений на порт 445 (tcp):

iptables -A INPUT -p tcp –dport 445 -j LOG –log-prefix “IN SMB DROP: ”

здесь —log-prefix задает префикс для всех сообщений, логируемых нашим правилом. Это удобно, если у вас несколько разных правил логирования, или для дальнейшей программной обработки. Если теперь попробовать подключиться снаружи к нашему серверу на порт 445, например через telnet, в файле /var/log/messages появятся записи:

логи iptables

Разберем вывод:

  • IN SMB DROP: префикс, который мы задали опцией —log-prefix
  • IN=eth0 интерфейс, на который принят ip пакет, для исходящих соединений содержит пустое значение
  • OUT= интерфейс, с которого отправлен ip пакет, для входящих соединений, содержит пустое значение
  • MAC= соединенные вместе в следующем порядке: MAC-адрес назначения, MAC-адрес источника, EtherType — 08:00 соответствует IPv4.
  • SRC= ip адрес источника, от которого отправлен ip пакет
  • DST= ip адрес назначения, на который отправлен ip пакет
  • LEN= размер ip пакета в байтах
  • SPT= порт источника, от которого отправлен ip пакет
  • DPT= порт назначения, на который отправлен ip пакет

Предотвращение несанкционированных действий на сервере

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

    1. Пропишите в консоли iptables -A INPUT -p tcp –dport 80 -m limit –limit 20/minute –limit-burst 100 -j ACCEPT, где –limit 20/minute — ограничение на частоту положительных результатов. Единицу измерения вы можете указывать самостоятельно, например, /second, /minute, /hour, /day. –limit-burst number — ограничение на число пропускаемых пакетов. Все значения выставляются индивидуально по предпочтениям администратора.

Правило для безопасности от DDoS в iptables в CentOS 7

    1. Далее можно запретить сканирование открытых портов, чтобы убрать одну из возможных причин взлома. Введите первую команду sudo iptables -N block-scan.

Первое правило для запрета сканирования портов iptables в CentOS 7

    1. Затем укажите sudo iptables -A block-scan -p tcp —tcp-flags SYN,ACK,FIN,RST -m limit —limit 1/s -j RETURN.

Второе правило для запрета сканирования портов iptables в CentOS 7

    1. Последняя третья команда имеет вид: sudo iptables -A block-scan -j DROP. Выражение block-scan в данных случаях — название используемой цепи.

Третье правило для блокирования сканирования портов iptables в CentOS 7

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

Как отключить iptables

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

# systemctl stop iptables.service

Эта команда останавливает фаервол. А следующая удаляет из автозагрузки:

# systemctl disable iptables.service

Отключив сетевой экран, мы разрешили все соединения.

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

Не забывайте про параметр A и последнюю строку в цепочках.

Разрешить входящие соединения удаленного рабочего стола xrdp:

# iptables -A INPUT -p tcp -m tcp –dport 3389 -j ACCEPT

в конфигурации iptables это выглядит так:

-A INPUT -p tcp -m state –state NEW -m tcp –dport 3389 -j ACCEPT

Разрешить или запретить ICMP Ping запросы.

# iptables -A INPUT -p icmp –icmp-type echo-request -j ACCEPT

# iptables -A INPUT -p icmp –icmp-type echo-request -j DROP

Разрешить с определенной сети:

# iptables -A INPUT -s 192.168.1.0/24 -p icmp –icmp-type echo-request -j ACCEPT

Разрешить сервер SSH на 22 порту.

# iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT

Разрешить с определенной сети:

# iptables -A INPUT -s 192.168.1.0/24 -m state –state NEW -p tcp –dport 22 -j ACCEPT

Если ставите другой порт для SSH и SELinux не отключен, то необходимы дополнительные действия, описанные в этом блоке статьи, ниже по тексту.

Разрешить сервер ProFTPd:

# iptables -A INPUT -p tcp -m tcp –dport 21 -j ACCEPT

# iptables -A INPUT -p tcp -m tcp –dport 20 -j ACCEPT

# iptables -A INPUT -p tcp -m tcp –dport 50000:50535 -j ACCEPT

Синхронизация времени NTPd:

# iptables -A INPUT -m state –state NEW -p udp –dport 123 -j ACCEPT

Разрешить WEB-сервер на портах http/https:

# iptables -A INPUT -m state –state NEW -p tcp –dport 80 -j ACCEPT

# iptables -A INPUT -m state –state NEW -p tcp –dport 443 -j ACCEPT

Разрешить почтовый серверSMTP, POP3, IMAP:

# iptables -A INPUT -m state –state NEW -p tcp –dport 25 -j ACCEPT

# iptables -A INPUT -m state –state NEW -p tcp –dport 110 -j ACCEPT

# iptables -A INPUT -m state –state NEW -p tcp –dport 143 -j ACCEPT

Разрешить DNS сервер:

# iptables -A INPUT -m state –state NEW -p udp –dport 53 -j ACCEPT

# iptables -A INPUT -m state –state NEW -p tcp –dport 53 -j ACCEPT

Разрешить Samba сервер для локальной сети:

# iptables -A INPUT -s 192.168.1.0/24 -m state –state NEW -p tcp –dport 137 -j ACCEPT

# iptables -A INPUT -s 192.168.1.0/24 -m state –state NEW -p tcp –dport 138 -j ACCEPT

# iptables -A INPUT -s 192.168.1.0/24 -m state –state NEW -p tcp –dport 139 -j ACCEPT

# iptables -A INPUT -s 192.168.1.0/24 -m state –state NEW -p tcp –dport 445 -j ACCEPT

Разрешить CUPSсервер печати:

# iptables -A INPUT -p udp -m udp –dport 631 -j ACCEPT

# iptables -A INPUT -p tcp -m tcp –dport 631 -j ACCEPT

Разрешить Proxy сервер для локальной сети:

# iptables -A INPUT -s 192.168.1.0/24 -m state –state NEW -p tcp –dport 3128 -j ACCEPT

Разрешить MYSQL сервер для локальной сети:

# iptables -I INPUT -s 192.168.1.0/24 -p tcp –dport 3306 -j ACCEPT

Разрешить Transmission торрент-сервер:

# iptables -A INPUT -p tcp -m tcp -m state –dport 9091 –state NEW -j ACCEPT

Разрешить Minidlna медиа-сервер для локальной сети:

# iptables -A INPUT -s 192.168.1.0/24 -m state –state NEW -p tcp –dport 8200 -j ACCEPT

В Ubuntu

Для управления брандмауэром теперь используется ufw.

Для работы с iptables, устанавливаем следующий пакет:

apt-get install iptables-persistent

Отключаем ufw:

ufw disable

Заключение

В данном руководстве мы рассмотрели основные моменты работы с Iptables:  разрешение трафика только на определенных портах, фильтрацию пакетов по источнику, основы настройки трансляции сетевых адресов (NAT) и сохранение правил после перезагрузки. Однако, важно заметить, что iptables работает только с трафиком ipv4. Если ваш VPS поддерживает ipv6, нужно установить отдельные правила при помощи ip6tables.


[spoiler title=”Источники”]

  • https://habr.com/ru/sandbox/18975/
  • https://losst.ru/nastrojka-iptables-dlya-chajnikov
  • https://1cloud.ru/help/security/ispolzovanie-iptables-na-linux
  • https://ITProffi.ru/nastrojka-pravil-iptables-v-linux/
  • https://linuxinsider.ru/osnovnye-nastrojki-iptables-ili-kak-nastroit-faervol-v-linux/
  • https://linuxinsider.ru/nastrojka-iptables-na-linux/
  • https://www.dmosk.ru/instruktions.php?object=iptables-settings
  • https://serveradmin.ru/nastroyka-iptables-v-centos-7/
  • https://winitpro.ru/index.php/2019/08/05/nastrojka-fajrvola-iptables/
  • https://kilobax.ru/centos/iptables-v-centos-7-linux-chto-eto-nastroika.html
  • https://lumpics.ru/configuring-iptables-on-centos-7/
  • https://hamsterden.ru/setup-iptables/


[/spoiler]


2020-12-22T10:34:30
Linux

Настройка планировщика задач Cron в Linux. Как запускать задания Cron каждые 5, 10 или 15 минут



























4.5/5 — (40 голосов)

Как запускать задания Cron каждые 5, 10 или 15 минут. Cron — классический демон (компьютерная программа в системах класса UNIX), использующийся для периодического выполнения заданий в определённое время.

Что это такое Cron?

Cron – это планировщик заданий, который работает на UnixLinux хостинге. Он позволяет автоматически выполнять определенные действия на сервере (запуск программ, скриптов и т.д.), с заданным временем или периодичностью.

Историческая справка

Утилита была разработана ещё в начале 70-х годов прошлого столетия, когда Кен Томпсон и Деннис Ритчи создали ОС UNIX. Они работали над проектом по созданию многозадачной и многопользовательской системы Multics, в котором принимали участие компании AT&T и Bell Labs. В то время подобная система была настолько высокотехнологичным и прорывным продуктом, что позже Bell Labs отказалась от активного участия в проекте из-за крайне низкой востребованности подобного рода систем для широкого потребления.

Однако, используя наработки из проекта Multics, Томпсон и Ритчи на этой основе и на волне энтузиазма создали ОС UNIX. Такая мощная и прорывная платформа для полноценного раскрытия своего функционала нуждалась в обеспечении её функционалом в виде специализированного ПО и утилит, одной из которых и по сей день является cron. Разработчиком утилиты является Кен Томпсон.

Конфигурационные файлы cron

Следующие файлы ограничивают доступ к планировщику (по умолчанию они не существуют):

  • /etc/cron.allow – если существует, пользователи указанные в этом файле имеют возможность запуска заданий планировщика;
  • /etc/cron.deny – если существует, пользователи указанные в этом файле НЕ имеют возможность запуска заданий планировщика.

Если cron.allow существует, только юзерам, перечисленным в нем, разрешено использовать cron, при этом файл cron.deny игнорируется. Если cron.allow не существует, юзерам, указанным в cron.deny, не разрешается использовать планировщик cron.

Формат записей в обоих файлах – одно имя пользователя в каждой строке. Пробелы не разрешены.

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

Функционал и основные компоненты примеры cron

Описания регулярных действий, запускаемых утилитой– это так называемая crontab-таблица, которая имеет строго определенный формат. Она состоит из 6 колонок, разделённых табуляторами или пробелами, первые 5 из которых определяют время запуска действия. Последняя колонка интерпретируется как команда запуска, т. е. само действие.

0 5 * * 1 tar -zcf var/backups/home.tgz /home/

Приведённое описание действия означает запуск резервного копирования (путём архивирования и помещения созданного архива в var/backups/) всех каталога /home каждую неделю (по понедельникам) в 5 утра. Как видно, сначала задаётся колонка минут, затем часов, дней, месяцев и дней недели. Далее следует команда запуска, в данном случае для создания архива. В колонках, определяющих время могут использоваться числа, группы чисел, разделяемых запятыми, диапазоны чисел, разделяемых дефисом, а также символы «*» и «/». Каждому действию соответствует строка описания в crontab-файле. В приведённом примере цифра «1» означает порядковый номер дня недели — понедельник, соответственно «2» — вторник, «3» — среда и т. д., причём воскресенье это «0» или «7». Символ «*» означает любое значение с учётом валидности для соответствующего параметра. Для задания шага значений используется символ «/», например:

23 */2 * * * echo “Выполняется в 0:23, 2:23, 4:23 и т. д.”

Пример настройки планировщика на выполнение задачи каждые 5 минут выглядит так

*/5 * * * * echo “Выполняется каждые 5 минут”

Каждую минуту

*/1 * * * * echo “Выполняется каждую минуту”

Каждый час

* */1 * * * echo “Выполняется каждый час”

каждое первое число февраль, июль и ноябрь в 2.30

10 00 01 02,07,11 * echo “каждое первое число февраль, июль и ноябрь в 0.10”

Каждые полчаса:

00,30 * * * * echo “каждые полчаса”

По выходным

* * * * 6,7 echo “суббота и воскресенье”

трижды в день:

00 10,15,20 * * * echo “будет выполняться каждый день в 10.00 и 15.00, 20.00”

один раз в день с 00 до 09 часов по буднем.

00 00-09 * * 1-5 echo “будет выполняться с 00 до 09 часов по буднем”

Для добавления скрипта в крон нужно прописать полный путь к скрипту. Пример

00 01 * * * /etc/scripts/script.sh

В данном примере скрипт /etc/scripts/script.sh будет запускаться каждый день в час ночи. Существуют два типа crontab-файлов: системные и пользовательские. В отличие от пользовательских, в системных после колонок задания времени используется еще колонка для указания пользователя, от которого выполняется действие:

17 * * * * root cd / && run-parts —report /etc/cron.hourly

Кроме того, местоположение системных и пользовательских crontab-файлов различается: файлы, используемые для действий, управляющих системой находятся в /etc/cron.d/, а файлы, создаваемые для отдельных пользователей хранятся по адресу /var/spool/cron/crontabs/.

Для корректной работы утилиты необходимо в файлах crontab указывать оболочку командного интерпретатора, а также добавлять домашний каталог пользователя в PATH:

SHELL=/bin/sh PATH=/bin:/usr/bin:/home/paul/bin

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

MAILTO=user@example.org

Если в описании действия команда отправляет текстовое содержимое в стандартный вывод, то программа, при наличии электронного адреса, автоматически перехватит это сообщение и отправит по e-mail.

Cron и Cron Job: Основы

Создавать и редактировать cron-задания можно разными способами. В этом руководстве мы покажем вам, как это делать с помощью командной строки Linux (терминала).

Если у вас есть свой VPS в Hostinger, ваши учётные данные для входа находятся во вкладке управления VPS. Подключитесь к вашему серверу по SSH. Если что-то не получается, ознакомьтесь с нашим руководством по PuTTY SSH.

Вот некоторые основные операции с cron:

Если вы хотите изменить crontab-файл (файл содержащий инструкции по выполнению запланированных заданий), то есть создать и настроить своё первое cron job, введите в терминале следующую команду:

crontab -e

Вот, как будет выглядеть результат.

Результат Команды crontab -e

Скорее всего вы попадёте в редактор vi. Так как этот редактор довольно часто используется при работе с cron, лучше ознакомится с основными командами vi. Так вы будете чувствовать себя более уверенно.

Если вы хотите изменить crontab-файл другого пользователя, используйте команду crontab -u username -e. Имейте в виду, что вы можете редактировать чужие файлы только как суперпользователь, то есть вам нужно ввести sudo su перед командой.

Команда Редактирования Crontab-файла Другого Пользователя

Если вы хотите удалить текущий файл crontab текущего пользователя, введите следующую команду:

crontab -r

Команда ниже делает то же самое, что и -r, однако она просит подтвердить действие, прежде чем удалить crontab:

crontab -i

Если вы хотите отобразить содержимое файла crontab, в который вы зашли, введите в терминале следующую команду:

crontab -l

Ещё одна операция этой команды позволяет посмотреть есть ли у вас crontab-файлы. Просто введите crontab -l. Если у вас нет созданных файлов, вывод покажет следующий результат:

Вывод, Показывающий Отсутствие Каких-либо crontab-файлов

Если вы хотите просмотреть списки crontab-файлов других пользователей, просто введите crontab -u username -l как суперпользователь.

Команда Просмотра crontab-файлов Других Пользователей

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

По сути, crontab-файл состоит из двух частей: таймера расписания и команды. Вот как записывается команда:

* * * * * /bin/sh backup.sh

  • ***** /bin/sh backup.sh — cron job значит запуск резервного копирования каждую минуту.
  • 30 18 * * * rm /home/sydtesting/tmp/* означает, что файлы tmp будут удаляться из /home/sydtesting/tmp каждый день в 18:30.

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

Разница между Cron, Crontab и Cron Job

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

ЭлементИмя LinuxСмысл






Daemon (Демон)‘crond’Произносится «demon» или «day-mon». Это фоновые системные процессы Linux.
Table (Таблица)‘crontab’Вы записываете строки в эту таблицу при вводе команды crontab. Каждая звездочка «*» представляет отрезок времени и соответствующий столбец в каждой строке.
Job (Задача)Cron JobКонкретная задача, которая должна быть выполнена, описана в строке в сочетании с назначенным ей идентификатором времени

Некоторые особенности cron

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

  1. Минимальное время составляет одну минуту.
  2. Файл crontab должен всегда заканчиваться пустой строкой
  3. Условия времени запуска «день недели» и «день месяца» обрабатываются через логическую операцию «ИЛИ», все остальные условия — через логическое «И».
  4. Выводы запускаемых команд выводятся в виде сообщений пользователю, но если в файле crontab была определена директива MAILTO – сообщение будет отправлено по указанному в этой директиве e-mail.

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

service cron status

или:

systemctl status cron

Для запуска и остановки можно также использовать:

service cron start service cron stop

и

systemctl start cron systemctl stop cron

Таблица Cron

Crontab означает Cron Table. Это системный файл Linux, который создает табличную структуру, в которой поля разделяются пробелами. Пользователи могут заполнять таблицу, присваивая значения каждому полю (звездочка).

Если это поможет, вы можете думать о вашем crontab как о мини-базе данных.

Cron Job

Если вы не знакомы с базами данных, вы можете представить ячейки в пустом файле Excel. В любом случае, для этой аналогии каждая звездочка представляет столбец, значение которого определяется его заголовком. Последний столбец будет вызовом команды или сценария. Каждый полный ряд можно рассматривать как отдельную работу. Их часто называют “cron jobs”, хотя работа, задание и т. д. Являются взаимозаменяемыми терминами.

Демон Cron

Мы уже обсуждали таблицу и как мы заполняем ее рабочими местами. Но как эти работы выполняются? Системный процесс под названием Daemon выполняется на фоне нашего Linux-компьютера.

Есть демоны для разных сервисов. Обычно они называются суффиксом «d» к имени службы.

Естественно, демон cron называется «crond». С нашей стороны не требуется никаких действий для запуска этого демона, но если вы считаете, что команда не работает должным образом, вы можете использовать команду ps, чтобы убедиться, что crond запущен.

ps aux | grep crond

Эта команда будет искать текущие процессы для всех пользователей и возвращать любые экземпляры ‘crond’.

andreyex@destroyer:~$ ps ux | grep crond andrey+ 4352 0.0 0.0 18612 840 pts/0 S+ 02:16 0:00 grep –color=auto crond

Мы видим, что демон запущен для нашей учетной записи.

Понимание синтаксиса Crontab

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

crontab [options] * * * * * OR * * * * *

Мы обещаем, что это произойдет, потому что для вас, как только мы приведем в действие наш собственный пример. Давайте снова рассмотрим синтаксис для заданий cron.

Как видите, синтаксис crontab состоит из 5 звездочек. Вот что представляет каждая из этих звездочек:

перваявтораятретьячетвёртаяпятая






*****
IDМинутыЧасыДеньМесяцНазвание дня
Values0-590 -231-311-120-6

ПРИМЕЧАНИЕназвания дней от 0-6 начинаются с воскресенья.

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

Давайте немного потренируемся. Если у вас есть crontab, подобный приведенному ниже, как вы думаете, когда работа будет запущена?

0 0 * * 0

Вопрос: Когда команда будет запущена, если вы зададите задание таким образом?

A. Каждый час с понедельника по субботу

B. Каждая минута по воскресеньям

C. Только в полночь с понедельника по субботу

D. Только в полночь по воскресеньям

Ответ здесь . Выполнять «команду» в 00:00 [полночь] каждое воскресенье.

 

Формат Linux Crontab

MIN HOUR DOM MON DOW CMD

Таблица: Поля и допустимые диапазоны Crontab (синтаксис Linux Crontab)

Синтаксис и операторы Crontab

Crontab (таблица cron) – это текстовый файл, определяющий расписание заданий cron. Файлы Crontab можно создавать, просматривать , изменять и удалять с помощью команды crontab.

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

* * * * * command(s) ^ ^ ^ ^ ^ | | | | | allowed values | | | | | ——- | | | | —– Day of week (0 – 7) (Sunday=0 or 7) | | | ——- Month (1 – 12) | | ——— Day of month (1 – 31) | ———– Hour (0 – 23) ————- Minute (0 – 59)

Первые пять полей (время и дата) также принимают следующие операторы:

  • * – Оператор звездочка означает все допустимые значения. Если у вас есть символ звездочки в поле Minute, это означает, что задача будет выполняться каждую минуту.
  • – Оператор дефиса позволяет указать диапазон значений. Если вы установите 1-5 в поле Day of week, задача будет запускаться каждый будний день (с понедельника по пятницу). Диапазон является включительным, что означает, что первое и последнее значения включены в диапазон.
  • , – Оператор запятой позволяет определить список значений для повторения. Например, если у вас есть 1, 3, 5 в поле Hour, задача будет запускаться в 1, 3 и 5 утра. Список может содержать отдельные значения и диапазоны 1-5, 7, 8, 10-15
  • / – Оператор косой черты позволяет указать значения шага, которые можно использовать в сочетании с диапазонами. Например, если вы указали 1-10/2 в поле Minute, это означает, что действие будет выполняться каждые две минуты в диапазоне от 1 до 10, как при указании 1, 3, 5, 7, 9. Вместо диапазона значений вы также можете использовать оператор звездочки. Чтобы указать задание, которое будет запускаться каждые 20 минут, вы можете использовать «*/20».

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

* * * * * command(s)

Чтобы отредактировать файл crontab или создать его, если он не существует, используйте команду crontab -e.

 

Crontab.guru

crontab.guru — отличный сайт, чтобы изучить различные примеры cron-заданий. Просто введите данные и сайт самостоятельно сгенерирует конечное задание.

Crontag Generator

crontab-generator.org — ещё один сайт, который помогает быстро сгенерировать crotab-выражения. Принцип такой же: нужно ввести все необходимые данные в формы и нажать кнопку «Generate Crontab Line» внизу страницы.

Помимо этого, есть веб-инструмент «Crontab UI», который обеспечивает не только простоту создания crontab-заданий, но и безопасность. Вот статья, посвящённая этому инструменту.

Постановка задачи и настройка cron

Для примера будем использовать следующую задачу:

  1. Во фронт-энде пользователь может инициировать выполнение какой-то сложной задачи путем нажатия кнопки «Запуск»;
  2. Бек-энд после записи новой строки в базу данных сообщает пользователю подтверждение;
  3. Через cron мы будем «отслеживать» такие новые задачи и выполнять их максимально быстро, чтобы пользователь получил результат не через минуту, а моментально*.

*Если использовать запуск команд, как раз в минуту, то выполнение задачи начнется тогда, когда секунды дойдут до ближайшего нуля (начало новой минуты). Следовательно, в классическом виде пользователю нужно будет ожидать выполнение от 0 до 59 секунд.

Итак, cron настроим в его максимальном виде, т.е. раз в минуту:

* * * * * /usr/bin/php -q /run.php > /dev/null 2>&1 #/usr/bin/php – путь до установленного PHP на сервере (может отличаться в зависимости от версии ОС) #/run.php – путь к PHP файлу на сервере #> /dev/null 2>&1 – означает, что мы не будем записывать или логировать выходящую информацию из файла run.php

Установка cron в Linux

По умолчанию cron доступен при установке CentOS 8. Если же у вас по каким-то причинам он отсутствует, вы можете установить его из базового репозитория с помощью yum / dnf:

# dnf update -y — обновить все ПО на сервере

# dnf install crontabs -y — установите cron

В моем случае cron уже был установлен:

установка crontab в linux centos

После установки, демон crond нужно добавить в автозагрузку и запустить:

# systemctl enable crond.service

# systemctl start crond.service

Как и куда вводить Cron-задания?

Первый способ работы с Cron – это панель управления хостингом. Но в разных панелях настройка и управление осуществляются по разному:

cPanel: Панель управления -> Задания Cron

ISP Manager: Панель управления -> Планировщик (Cron)

Parallels Plesk: Панель управления -> Запланированные задачи

Если у вашего хостинг-провайдера нет возможности работать с заданиями через панель управления, то вся работа с Cron обычно производится через SSH-протокол. Здесь все просто – подключаетесь к серверу по SSH и вводите команды. Для подключения к серверу используют бесплатную программу PuTTY (как настроить), а команды вводят в командной строке.

Чтобы начать работу вводим команду

crontab -e

После этого вас скорее всего перебросит в текстовый редактор vi (у разных провайдеров могут быть разные редакторы). vi – это достаточно сложный редактор, поэтому рекомендуем вам попробовать ввести строчку

EDITOR=ee crontab -e

Если запустится более легкий редактор, то все отлично, если же ваш хостинг-провайдер его не поддерживает, то Google поможет разобраться с vi. Мы лишь кратко обозначим основные моменты:

Ввод текста – жмем клавишу i и редактор перейдет в режим ввода текста;

выйти из режима ввода текста – Esc

Удалить символ – x (если вы находитесь в режиме ввода теста, то чтобы удалить символ сначала нажмите Esc, а потом x);

Сохранить и выйти – :wq (если вы находитесь в режиме ввода теста, то чтобы удалить символ сначала нажмите Esc, а потом :wq).

Важно! Вводя задания для Cron после каждой строчки нужно обязательно нажимать Enter, даже если эта строчка единственная.

Чтобы посмотреть уже существующие задания для Cron вводим crontab -l

Отправка уведомлений cron на e-mail

Если вы хотите получать информацию о выполнении ваших задач cron по почте, нужно выполнить настройку cron-файла с задачами.

Для отправки почты на сервере дожен быть установлен почтовый-агент. Для теста, я установил на сервер sendmail:

# dnf install sendmail -y

# service sendmail start

sendmail – бесплатный агент для передачи почты, который доступен практически для любой операционной системе.

Настроем параметры отправки e-mail в cron-файле. Добавьте в файл следующие строки:

MAILTO=”*@gmail.com” SHELL=/bin/bash HOME=/ * * * * * echo “Проверка cron”

MAILTO — укажите свой почтовый ящик

SHELL — оболочка пользователя

HOME — путь к файлу cron

cron - почтовые уведомления email, mailto

После каждого запуска задачи на указанный email отправляется уведомление:

письмо о задании отправлено через crontab

Информацию о запуске задания cron можно сохранять в лог-файл. Для этого, в конце задания нужно добавить >> и указать путь до лог-файла:

* * * * * echo “Проверка cron” >> /var/log/admin/journal.log

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

* * * * * echo “Проверка cron” >> /dev/null 2>&1

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

Отладка работы

После того как вы настроили правила, еще хотелось бы проверить работают ли они. Для этого ждем того времени, когда скрипт уже должен быть выполнен и смотрим лог cron. Иногда он находится в /var/log/cron, а иногда пишется в syslog. Например, у меня в crontab есть такая строка:

Она должна выполняться в 19.40 каждый день, теперь смотрим лог:

grep CRON /var/log/syslog

И видим что в нашем логе она действительно есть и выполняется целиком успешно. Если бы были какие-либо ошибки, то тут же было бы выведено сообщение.

Если нужно проверить скрипт, который находится в одной из специализированных папок, то тут еще проще, просто запустите run-paths, передав ей в параметр нужную папку или даже сам скрипт:

sudo run-paths /etc/cron.daily/

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

Запуск PHP-файлов по расписанию с помощью Cron

Для запуска PHP-скриптов через Cron можно использовать специальный интерпретатор. К сожалению мы не можем дать вам инструкцию по его работе, т.к. у разных провайдеров может использовать разный софт. Поэтому многие вебмастера запускают PHP-файлы с помощью WGET, для этого используем такую запись в crontab:

30 3 * * 2 root wget -O – -q -t 1 http://mysite.com/file.php

“-O -” означает, что Cron не будет создавать лишние файлы, а будет работать через консоль. Это позволяет избежать захламления сервера.

“-q” отключает вывод операции на экран

“-t 1” разрешается только одна попытка соединения.

http://mysite.com/file.php – путь к вашему PHP-фалу (не обязательно указывать абсолютный путь).

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

30 3 * * 2 root wget -O – -q -t 1 ‘http://mysite.com/file.php’

Также, существует еще один способ запуска:

30 3 * * 2 /usr/bin/wget -O – -q -t 1 http://mysite.com/file.php

Но в этом случае вам нужно знать путь к папке wget на своем сервере (чаще всего /usr/bin/wget или /usr/local/bin/wget).

Если вы до сих пор не поняли, что означают “30 3 * * 2”, то вверху статьи мы это описали.

Как изменить расписание

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

crontab -e

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

crontab -u username -e

Как узнать список заданий Crontab

Для просмотра записей crontab текущего пользователя используйте команду:

crontab -l

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

crontab -u username -l

Примеры настройки cron

Сначала можно посмотреть задачи cron для суперпользователя, для этого можно воспользоваться опцией -l:

crontab -l

Вы можете удалить все существующие задачи командой -r:

crontab -r

Давайте предположим, что нам нужно запускать от имени суперпользователя наш скрипт по адресу /usr/local/bin/serve. Какой-нибудь обслуживающий скрипт. Самый простой пример – запускать его каждую минуту:

* * * * * /usr/local/bin/serve

Далее, усложним, будем запускать каждый час, в нулевую минуту:

0 * * * * /usr/local/bin/serve

Еще дальше:

Запускаем в нулевую минуту нулевого часа, каждый день, это в 12 ночи:

0 0 * * * /usr/local/bin/serve

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

0 0 1 * * /usr/local/bin/serve

Можно в любой день, например, 15 числа:

0 0 15 * * /usr/local/bin/serve

В первый день недели первого месяца года, 0 часов 0 минут:

0 0 * 1 0 /usr/local/bin/serve

Или в нулевой день недели каждого месяца:

0 0 * * 0 /usr/local/bin/serve

Вы можете выбрать любую минуту, час и день недели, например, 15.30 во вторник:

30 15 * * 2 /usr/local/bin/serve

Понедельник считается первым днем, воскресенье – это седьмой или нулевой день. Еще можно писать сокращенное название дня недели, например sun – воскресенье:

30 15 * * sun /usr/local/bin/serve

Для того чтобы указать определенный интервал нужно использовать символ “-“, например, каждый час, с семи утра до семи вечера:

0 7-19  * * * /usr/local/bin/serve

Если нужно запустить команду несколько раз, можно использовать разделитель “,”. Например, запустим скрипт в 5 и 35 минут пятого (16:05 и 16:35), каждый день:

5,35 16  * * * /usr/local/bin/serve

Вы можете захотеть не указывать отдельно время, а просто указать интервал, с которым нужно запускать скрипт, например, раз в 10 минут. Для этого используется разделитель косая черта – “/”:

*/10 * * * * /usr/local/bin/serve

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

  • @reboot – при загрузке, только один раз;
  • @yearly, @annually – раз год;
  • @monthly – раз в месяц;
  • @weekly – раз в неделю;
  • @daily, @midnight – каждый день;
  •  @hourly – каждый час.

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

@hourly /usr/local/bin/serve

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

sudo vi /etc/corn.daily/basckup

#!/bin/bash

……

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

1. Ежедневно в 2 часа ночи.

Это будет полезно для ежедневного резервного копирования.

0 2 * * * /bin/sh backup.sh

2. Расписание задач для более частого выполнения (например, дважды в день)

Следующий скрипт использует дополнительное резервное копирование дважды в день каждый день. В этом примере выполняется дополнительное резервное копирование (incremental-backup) в 11:00 и в 16:00 каждый день. Значения через запятую в поле указывают, что команда должна быть выполнена в каждое указанное время.

00 11,16 * * * /home/developer/bin/incremental-backup

00 – 0-ая минута (начало часа) 11, 16 – 11 и 16 часов * – каждый день * – каждый месяц * – каждый день недели

3. Каждую минуту:

# Минута Час День Месяц День недели * * * * *

4. Каждое воскресенье в 17:00

Пригодится для планирования еженедельных задач.

0 17 * * sun /scripts/script.sh

5. Запускать задание Cron каждые 10 минут

Чтобы запускать задание cron каждые 10 минут, добавьте в файл crontab следующую строку:

*/10 * * * * command

6. Определенные месяцы

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

* * * jan,may,aug * /script/script.sh

7. Определенные дни

Если вам необходимо составить расписание выполнения задачи только на некоторые дни. Приведенный ниже пример будет выполняться каждое воскресенье и пятницу в 17:00.

0 17 * * sun,fri /script/script.sh

8. Первое воскресенье каждого месяца.

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

0 2 * * sun [ $(date +%d) -le 07 ] && /script/script.sh

9. Каждые четыре часа.

Если вы хотите запустить скрипт с интервалом в 4 часа:

0 */4 * * * /scripts/script.sh

10. Дважды в каждое воскресенье и понедельник.

Чтобы запланировать выполнение задачи дважды только в воскресенье и понедельник:

0 4,17 * * sun,mon /scripts/script.sh

11. Несколько задач

Можно запланировать несколько задач в одной записи с помощью точки с запятой:

* * * * * /scripts/script.sh; /scripts/scrit2.sh

12. Ежегодно (@yearly)

@yearly равно «0 0 1 1 *». Задание будет выполняться в первую минуту каждого года. Можно отправить новогодние поздравления

@yearly /scripts/script.sh

13. Ежемесячно (@monthly)

@monthly равно «0 0 1 * *». Задание будет выполняться в первую минуту месяца.

@monthly /scripts/script.sh

14. Еженедельно (@weekly)

@weekly равно «0 0 1 * mon». Задание будет выполняться в первую минуту недели.

@weekly /bin/script.sh

15. Ежедневно (@daily)

@daily равно «0 0 * * *». Задание будет выполняться в первую минуту каждого дня.

@daily /scripts/script.sh

16. Ежечасно (@hourly).

@hourly равно «0 * * * *». Задание будет выполняться в первую минуту каждого часа.

@hourly /scripts/script.sh

17. Выполнение задач при перезагрузке системы (@reboot).

@reboot полезен для тех задач, которые вы хотите запустить при перезагрузке системы.

@reboot /scripts/script.sh

18. Отправка результатов заданий на электронную почту

Если вы хотите отправить вывод на почту, то это можно сделать, установив переменную MAIL, как показано ниже.

# crontab -l MAIL=bob 0 2 * * * /script/backup.sh

Как избежать повторного выполнения задачи

В представленном виде есть одна неопределенность, а именно — повторное выполнение задачи в случае, если она уже начата. Это становится особенно актуально, если задача «сложная» и требует несколько секунд на ее реализацию.

Таким образом создается проблема повторного выполнения:

  • Функция solve_one_task() уже запущена, но еще не завершила свою работу;
  • Следовательно, в базе данных до сих пор задача отмечена как невыполненная;
  • Следующий цикл опять получит эту задачу и запустит функцию solve_one_task() еще раз, с этой же самой задачей.

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

Но мы не будем нагружать базу данных: исходя из моего тестирования, MYSQL может принять запрос, но обработать его не сразу. Различие даже в 0.5 секунд может привести к повторному выполнению — что категорически не подходит.

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

Основная модель проверки строится при помощи flock — функции, которая ставит и снимает блокировку с файла.

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

$lock_file_abs = ‘file’; #путь к файлу $fp = fopen($lock_file_abs,”w+”); #открываем возможность чтения файла if (flock($fp, LOCK_EX | LOCK_NB)) { #проверка, не заблокирован ли файл solve_one_task($one_task); #функция обработки задачи flock($fp, LOCK_UN); #снимаем блокировку с файла, потому что обработка задачи завершена } else { #значит, что файл заблокирован, т.е. на данный момент задача все еще обрабатывается } fclose($fp); #закрываем возможность чтения файла unlink($lock_file_abs); #удаляем файл, если это возможно .

Результат

Общий вид всего цикла выглядит следующим образом:

for ($cycle = 1; $cycle <= 6; $cycle++) { $all_tasks = get_all_tasks(); if ($all_tasks) { foreach($all_tasks as $one_task) { $lock_file_abs = __DIR__.’/locks/run_’.$one_task[‘id’]; $fp = fopen($lock_file_abs,”w+”); if (flock($fp, LOCK_EX | LOCK_NB)) { solve_one_task($one_task); flock($fp, LOCK_UN); } else { #не можем запускать обработку задачи } fclose($fp); unlink($lock_file_abs); } } sleep(10); }

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

Ручная настройка CronTab

Ручная настройка CronTab позволяет настраивать время запуска скрипта в привычном виде, для тех, кто знаком с Cron.

Время, интервал

Минуты могут быть от 0 до 59

Часы могут быть от 0 до 23

День месяца может быть от 1 до 31

Месяц может быть 1 до 12

День недели может быть от 0 до 7, где 0 и 7 – воскресенье

Можно конфигурировать CronTab для выполнения задач не только в определенное время, но и ежеминутно, ежечасно, ежедневно, еженедельно или ежемесячно, используя комбинацию */x.

Примеры настройки временных интервалов

*/5 * * * * — запускать команду каждые пять минут

0 */3 * * * — запускать каждые три часа

0 12-16 * * * — запускать команду каждый час с 12 до 16 (в 12, 13, 14, 15 и 16)

0 12,16,18 * * * — запускать команду каждый час в 12, 16 и 18 часов

*/1 * * * * /usr/bin/php ~/site.ru/public_html/test.php — запуск каждую минуту php-скрипта test.php

0 */1 * * * /usr/bin/perl ~/site.ru/public_html/test.pl — запуск каждый час perl-скрипта test.pl

Команда

Необходимо задать путь до скрипта от домашнего каталога. Например: public_html/cgi-bin/script.pl

Система сама подставит символ ~/ (эта комбинация заменяет полный путь). Получится: ~/public_html/cgi-bin/script.pl

Если в конце пути поставить символ & (амперсанд), то скрипт будет работать в фоновом режиме. Установка этого символа необязательна.

Обратите внимание!В ряде случаев требуется выбрать версию PHP отдельно: /usr/local/bin/phpX.X или /usr/local/php-cgi/X.X/bin/php-script. Если для сайта установлена иная версия PHP, следует указать вместо X.X требуемую версию, например, 5.6, или актуальную для решения текущей задачи. Версия PHP, установленная для сайта (через раздел Сайты в панели управления), не учитывается при запуске РНР скриптов через Crontab или терминал.

Директивы PHP следует указывать отдельно, после флага -d. Например: /usr/local/bin/php5.6 -d display_errors=1 script.php

Что произойдет, если задание cron обнаружит ошибку?

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

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

Что будет с Cron при перезапуске сервера?

Он перезагрузится вместе с сервером. ваши задания не пропадут, они будут работать как и ранее.

Получение отчета о работе Cron на почту

Cron можно настроить так, чтобы на электронную почту приходили сообщения с результатами запущенных заданий. Эта функция также может быть полезна, для уведомления на случай ошибки. Для получения отчета на e-mail нужно редактируя crontab (перед заданиями) написать такую строку:

MAILTO= info@mydomain.com

где info@mydomain.com – это e-mail на который будут приходить письма. Также можно добавить несколько адресов, через запятую.

Есть еще один момент, вам на почту будет приходить еще и результат работы скрипта. например, если скрипт пишет на экране какую-то надпись, то эта же надпись придет на вашу почту вместе с отчетом. Если это вас раздражает, то добавьте в конце задания строку  > /dev/null 2>&1

30 3 * * 2 /usr/bin/wget -O – -q -t 1 http://mysite.com/file.php > /dev/null 2>&1

Какие есть ограничения для работы Cron?

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

Нюансы

  1. При изменении в панели управления в разделе “Crontab” удалятся изменения записей сделанных по ssh!
  2. Если определены оба поля “день месяца” и “день недели” , то такое задание будет выполняться в каждый указанный день недели независимо от дня месяца. Например, следующая команда будет выполняться в 9 часов 19 минут каждую среду и каждое 7 число месяца, даже если 7 число не совпадает со средой

Частные случаи

Для запуска задачи чаще, чем раз в минуту, используем sleep.

Для этого пишем в crontab:

* * *  * * /opt/php56/bin/php /home/k/konoplev/tmp/twtest.php; /bin/sleep 30; /opt/php56/bin/php /home/k/konoplev/tmp/twtest.php

для запуска файла каждые 30 секунд.

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

Логичным вариантом будет создание lock файла и при запуске скрипта проверять наличие файла. Но на хостинге Timeweb, как и на других хостингах, присутствует ограничение по процессору. Скрипт зависит от условий и времени выполнения, а значит, мы не можем предугадать время выполнения скрипта. Если скрипт выполнится с нарушением правил и ограничений (https://timeweb.com/ru/services/hosting/rules/), то процесс завершится со стороны хостинга. Тогда lock файл не будет удален, а значит, и скрипт не будет запускаться по крону, пока файл не будет удалён.

Маэстро из отдела инженеров рассказал, как решить задачу.

Для начала создаём sh скрипт в файл /home/c/cc123456/tmp/twtest.sh:

#!/bin/bashcommand=$@no_spaces=`echo $command | sed -e ‘s/s/_/g’ -e ‘s|/|_|g’`pidfile=/var/tmp/$no_spaces.pidlockfile=/var/tmp/$no_spaces.lockif [[ -e $pidfile ]]then    pid=`cat $pidfile 2>/dev/null`    ps h $pid >/dev/null 2>/dev/null    if [[ $? -eq 0 ]]    then        exit 1    else        rm $lockfile    fifiecho $$ > $pidfile/usr/bin/flock -w 0 $lockfile $commandrm $pidfile

В панели управления в разделе crontab выбираем тип “Исполняемый бинарный файл”.

В поле “Полный путь” пишем:

/home/c/cc123456/tmp/twtest.sh /opt/php56/bin/php /home/c/cc123456/tmp/twtest.php

Где

  • /home/c/cc123456/tmp/twtest.sh – наш скрипт проверки
  • /opt/php56/bin/php – путь до нужного интерпретатора
  • /home/c/cc123456/tmp/twtest.php – путь до нашего скрипта

Указываем необходимое время запуска и придумываем название.

Размышления о безопасности

Существует множество ситуаций, когда вы не хотите, чтобы пользователь, имеющий доступ к вашей системе, имел возможность создавать записи crontab. Здесь в игру вступают файлы /etc/cron.deny и /etc/cron.allow. Их использование аналогично /etc/hosts.allow и /etc/hosts/deny, поэтому, если вы работали с этими файлами раньше, то будете чувствовать себя как дома. Этих двух файлов (cron.deny и cron.allow) по умолчанию нет в системе, по крайней мере на системе, в которой мы работаем, поэтому по умолчанию всем разрешено создавать записи в crontab. Вы можете проверить, какие файлы, относящиеся к cron имеются в вашем каталоге /etc с помощью команды:

$ ls /etc | grep cron

И снова напоминаем, что все сказанное справедливо для Linux, так как отсутствие этих файлов на Solaris означает прямо противоположное, кроме того, файлы расположены в других местах. Сначала проверяется cron.allow, поэтому обычно мы вводим “ALL” в cron.deny, а затем добавляем пользователей, которым мы хотим предоставить доступ, в cron.allow.

Заключение

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


[spoiler title=”Источники”]

  • https://ru.hostings.info/schools/cron.html
  • https://ITProffi.ru/nastroyka-cron-v-linux/
  • https://1cloud.ru/help/linux/kak-nastroit-planirovshchik-cron-na-crontab-linux
  • https://www.hostinger.ru/rukovodstva/cron-job/
  • https://andreyex.ru/linux/ponimanie-crontab-v-linux-s-primerami/
  • https://disnetern.ru/15-samples-crontab-for-linux/
  • https://andreyex.ru/linux/kak-zapuskat-zadaniya-cron-kazhdye-5-10-ili-15-minut/
  • https://tproger.ru/translations/guide-to-cron-jobs/
  • https://habr.com/ru/post/498934/
  • https://winitpro.ru/index.php/2020/04/21/planirovshhik-zadach-cron-v-linux/
  • https://losst.ru/nastrojka-cron
  • https://mordeniuss.ru/crontab-18-examples/
  • https://snipp.ru/raznoe/crontab
  • https://beget.com/ru/kb/manual/crontab
  • https://timeweb.com/ru/community/articles/cron-nastroyka-i-zapusk-1
  • http://rus-linux.net/MyLDP/admin/cron.html


[/spoiler]


2020-12-22T10:34:30
Linux

Команда mount или как правильно смонтировать диск в Линукс. Монтирование диска в Linux — команда mount.



























Rate this post

Если нужно подключить/примонтировать жесткий диск с файловой системой NTFS или ext2, ext3 к компьютеру на базе операционной системы Linux, то команда mount незаменима. Mount — утилита командной строки в UNIX-подобных операционных системах. Применяется для монтирования файловых систем. В статье приведено описание и примеры для операционной системы GNU/Linux. mount /dev/cdrom /mnt/cdrom.

Монтирование что это?

Монтирование – это подключение диска, раздела, каталога или файла в корневую систему Linux.

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

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

Синтаксис команды mount

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

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

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

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

  • «-v». Отображение максимально подробного режима.
  • «-a». Монтируются все требуемые устройства, которые предварительно прописаны в fstab
  • «-F». Создается отдельный экземпляр утилиты для каждого из исследуемых разделов.
  • «-n». Исключается вероятность записи информации о выполняемом монтировании в /etc/mtab.
  • «-f». Исключается вероятность осуществления каких-либо действий. С помощью такой опции можно посмотреть перечень процедур, которые планирует выполнить утилита.
  • «-l». Добавляется специальная метка на диск, которая приравнивается к точке монтирования.
  • «-c». При выполнении команды не использовать относительные пути, а руководствоваться только абсолютными путями (пример – /etc/exim4) .
  • «-r». Создаваемый раздел будет доступен лишь для чтения.
  • «-w». Создаваемый раздел будет доступен как для чтения, так и для записи.
  • «-L». Монтируется раздел с использованием метки.
  • «-U». Монтируется раздел с использованием UUID.
  • «-T». Появляется возможность применения альтернативного fstab
  • «-B». Монтируется раздел в локальную папку
  • «-R». Перемонтируется сама локальная папка.
  • «-h». Вывести справочную информацию.
  • «-V». Параметр покажет текущею версию утилиты.

Представленный выше список опций является неполным. Такие функции основные, чаще всего могут потребоваться пользователю операционной системы «Линукс» во время работы с утилитой «mount».

Монтирование файловой системы командой mount

Для подключения файловой системы к конкретному местоположению (точке монтирования) команда mount используется в следующей форме:

mount [опции…] имя_устройства директория

После подключения точка монтирования становится корневой директорией смонтированной ФС. Например, смонтировать жесткий диск /dev/sdb1 в директорию /mnt/media можно следующим образом:

$ sudo mount /dev/sdb1 /mnt/media

Обычно при монтировании устройства с распространенной ФС, например, ext4 или xfs, команда mount автоматически определяет ее тип. Однако, некоторые ФС не распознаются. Их тип нужно указывать в явном виде. Для этого используется опция -t:

mount -t тип имя_устройства директория

Чтобы указать дополнительные опции монтирования, используется флаг -o:

mount -o опции_монтирования имя_устройства директория

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

-V — вывести версию утилиты;

-h — вывести справку;

-v — подробный режим;

-a, —all — примонтировать все устройства, описанные в fstab;

-F, —fork — создавать отдельный экземпляр mount для каждого отдельного раздела;

-f, —fake — не выполнять никаких действий, а только посмотреть что собирается делать утилита;

-n, —no-mtab — не записывать данные о монтировании в /etc/mtab;

-l, —show-labels — добавить метку диска к точке монтирования;

-c — использовать только абсолютные пути;

-r, —read-only — монтировать раздел только для чтения;

-w, —rw — монтировать для чтения и записи;

-L, —label — монтировать раздел по метке;

-U, —uuid — монтировать раздел по UUID;

-T, —fstab — использовать альтернативный fstab;

-B, —bind — монтировать локальную папку;

-R, —rbind — перемонтировать локальную папку.

Полный список опций можно получить, выполнив команду man mount.

Монтирование разделов с помощью mount

Монтирование разделов с помощью mount выполняется очень просто. Фактически в большинстве случаев будет достаточно упрощенной версии команды. Например, смонтируем раздел /dev/sdb6 в папку /mnt:

В большинстве случаев вы будете вынуждены выполнять команду mount с правами суперпользователя, если обратное не указано в fstab (опция монтирования users). Вы можете посмотреть информацию о процессе монтирования добавив опцию -v:

sudo mount -v /dev/sdb6 /mnt/

Если нужно, вы можете указать файловую систему с помощью опции -t:

sudo mount -v -t ext4 /dev/sdb6 /mnt

Если необходимо примонтировать файловую систему только для чтения, то вы можете использовать опцию -r или опцию монтирования -o ro, результат будет одинаковым:

sudo mount -t ext4 -r /dev/sdb6 /mnt

$ sudo mount -t ext4 -o ro /dev/sdb6 /mnt

Вы можете использовать и другие опции чтобы выполнить монтирование разделов linux, например, указать, что на этом разделе нельзя выполнять программы:

sudo mount -t ext4 -o noexec /dev/sdb6 /mnt

Обратите внимание, что вы не можете использовать опции uid, gid, fmask для файловых систем ext. Они поддерживаются только в FAT, vFAT, exFAT.

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

sudo mount —uuid=»b386d309-05c1-42c8-8364-8d37270b69e0″ /mnt

mount

Посмотреть uuid для ваших разделов можно с помощью команды:

sudu blki

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

sudo mount —label=»home» /mnt/

mount

Вы можете примонтировать одну папку в другую, для этого используйте опцию —bind

sudo mount —bind /mnt/ /media/

Возможно, не только монтирование разделов linux, но и монтирование файлов, если они содержат файловую систему, например, образов дисков. Монтирование образа диска linux работает точно так же:

sudo mount ~/file.iso /mnt

Посмотреть список всех примонтированных устройств можно просто выполнив mount без параметров:

mount

mount

Примеры команды mount

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

mount

Смонтируем раздел /dev/sda6 в папку /root/newpapka. Предварительно посмотрим все разделы в Линукс, с помощью команды “df -h”.

Монтирование раздела sda6

ВАЖНО! Обычно команда mount требует прав суперпользователя, если обратного не требует fstab.

Есть несколько вариантов запуск утилиты от root:

  1. Войти в учетную запись root.
  2. Использовать sudo.
  3. Ввести команду su-.

Утилита дает возможность сделать монтировать одну папку в другую. Для этого предусмотрена специальная опция «–bind».

sudo mount –bind /root/katalog /root/newpapka

Каталог1 в каталог2

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

df -h

Далее узнаем к какой файловой системе относится раздел /dev/sda6, с помощью утилиты “file”.

file -s /dev/sda6

Узнаем файловую систему

Примонтируем файловую систему “ext4” в каталог “primercataloga”. В данном случае используется опция «-t».

mount -t ext4 /dev/sda6 /root/primercataloga

Примонтируем ext4

Если в последующем смонтированная файловая система будет использоваться только для чтения, применяется опция «-r».  Для примера смонтируем /dev/sda6 в ту же папку “newpapka”, однако так как мы уже делали это в прошлом примере, система будет ругаться. “already mounted or /root/newpapka busy”.

already mounted or busy

Именно поэтому нужно сначала размонтировать каталог. Для этого будем использовать команду umount.

umount /root/newpapka

Пример размонтирования каталога

Далее монтируем с опцией -r.

mount -r /dev/sda6 /root/newpapka

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

mount -t ext4 -o noexec /dev/sda6 /root/primercataloga

При монтировании диска можно указать не только имена различных устройств. Для составления команды нередко применяется UUID. Вводится:

sudo mount –uuid=”a5d3369c-8c1b-42c4-869f-05d9d286196e” /katalog

где a5d3369c-8c1b-42c4-869f-05d9d286196e – это уникальный номер uuid. Посмотреть его можно с помощью утилиты blkid.

blkid

uuid

При монтировании диска можно указать определенные метки. Для этих целей нужно предварительно узнать ту самую метку, потом уже можно приступить к монтированию.

Узнаем:

sudo e2label /dev/sda6

Утилита e2label умеет изменять метки, а также выводить их на экран.

e2label

sudo mount –label=”root1″ /root/katalog

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

sudo mount /root/obraz-diska.iso /root/disk

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

Примеры использования mount

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

  1. Создать точку монтирования
  2. Примонтировать файловую систему

Монтирование USB-накопителя/жесткого диска

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

Создайте точку монтирования

sudo mkdir -p /media/usb

Если USB-накопитель использует устройство /dev/sdd1, его можно смонтировать в директорию /media/usb следующей командой:

sudo mount /dev/sdd1 /media/usb

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

  • fdisk -l
  • ls -l /dev/disk/by-id/usb*
  • dmesg
  • lsblk

Монтирование дисков CD/DVD-ROM Наверх

Если Вам нужно примонтировать CD/DVD-ROM, то монтирование CD/DVD-ROM осуществляется точно так же, той же командой mount, которая были приведены выше:

# sudo mount -t iso9660 -o ro /dev/cdrom /cd Только при монтировании CD-ROM нужно указать тип файловой системы iso9660.

Монтирование образов диска ISO Наверх

Если Вы хотите примонтировать образ диска ISO, то это тоже достаточно просто сделать командой mount: # sudo mount -t iso9660 -o loop /home/file.iso /home/iso Где /home/file.iso — путь и имя файла ISO /home/iso — точка монтирования Добавился только параметр -o loop, который указывает, что используется файл .iso.

Монтирование NFS

Для монтирования системы NFS требуется установить клиент NFS. Установка клиента NFS в Ubuntu и Debian:

sudo apt install nfs-common

Установка клиента NFS в CentOS и Fedora:

sudo yum install nfs-utils

Создайте директорию, которая будет точкой монтирования удаленной файловой системы:

sudo mkdir /media/nfs

Обычно требуется автоматическое монтирование удаленной директории NFS при загрузке. Для этого нужно изменить файл конфигурации /etc/fstab. Откройте его в любом текстовом редакторе, например:

sudo nano /etc/fstab

Добавьте в файл следующую строку, заменив сервер:/директория на имя или IP-адрес сервера NFS и экспортируемую директорию:

#

сервер:/директория    /media/nfs nfs      defaults    0       0

Смонтируйте ресурс NFS следующей командой:

sudo mount /mnt/nfs

или

sudo mount -a

Монтирование сетевых дисков SMB Наверх

В некоторых случаях необходимо примонтировать удаленный сетевой диск. В некоторых дистрибутивах Linux, он так же монтируется автоматически (например в Ubuntu) при открытии его по сети. Можно примонтировать его вручную командой mount через консоль. Можно сделать ярлык и поместив его на рабочем столе активировать его когда нужен удаленный доступ к сетевому ресурсу. Ну или мало еще для чего.

# sudo mount -t smbfs -o username=vasja,password=pupkin //pupkin_v/Video /home/user/video Где username=vasja,password=pupkin — это имя и пароль доступа к удаленному сетевому ресурсу, а //pupkin_v/Video — имя сетевого ресурса, /home/user/video – точка монтирования

Размонтирование файловой системы

Для отключения смонтированной файловой системы используется команда umount, в качестве аргумента которой указывается директория, в которую она была смонтирована (точка монтирования) или имя устройства:

umount директория umount имя_устройства

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

fuser -m директория

Определив процессы, можно остановить их и размонтировать файловую систему. Также для отключения занятой файловой системы сразу после завершения ее использования можно воспользоваться опцией -l (—lazy, “ленивое” отключение):

umount -l директория

Для принудительного размонтирования применяется опция -f (—force). Обычно она используется для отключения недостижимой системы NFS.

umount -f директория

Во всех остальных случаях принудительное отключение нежелательно, так как может привести к повреждению данных в файловой системе.

Сохранение параметров mount после перезагрузки

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


[Файловая система] [Точка монтирования] [Тип файловой системы] [Опции] [Dump] [Номер прохода]

Например:

/dev/sdb1    /home    ext4    defaults 0 0

Подключит устройство /dev/sdb1 (например жесткий диск) в директорию /home

После того как инструкция для mount прописаны в /etc/fstab, что бы проверить правильность написания дайте команду

mount -a

Если команда отработает без ошибок, то все устройства прописанные в /etc/fstab будут подключены, а также изменения не потеряются после перезагрузки.

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

В листинге 1 приведена часть кода модуля PAM (pluggable authentication module, подключаемого модуля авторизации), который предоставляет каждому пользователю, кроме root, обособленное пространство имен. Если директория /tmp/priv/USER существует, то она будет смонтирована с помощью bind на директорию /tmp в пользовательском пространстве имен.

Настройка системы для организации отдельных каталогов root для каждого пользователя

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

В листинге 4 показан пример скрипта, используемого при создании любой учетной записи пользователя.


[spoiler title=»Источники»]

  • https://www.vseprolinux.ru/mount
  • https://hamsterden.ru/mount-umount/
  • https://ITProffi.ru/podklyuchenie-fajlovyh-sistem-komanda-mount-v-linux/
  • https://losst.ru/montirovanie-diska-v-linux
  • https://www.ibm.com/developerworks/ru/library/l-mount-namespaces/index.html


[/spoiler] VKTelegramFacebookTwitterGoogle+WhatsAp

Монтирование дисков в Linux

Способ 1: Утилита GParted

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

    1. Запустите операционную систему и отыщите GParted через меню приложений. Запуск осуществляется стандартным кликом по соответствующему значку.

Запуск утилиты GParted в Linux через меню приложений

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

Подтверждение запуска утилиты GParted в Linux через меню приложений

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

Выбор раздела или диска в утилите GParted в Linux для монтирования

    1. В появившемся контекстном меню остается только нажать на «Монтировать».

Пункт для монтирования диска через утилиту GParted в Linux

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

Способ 2: Стандартная утилита «Диски»

В большинстве популярных дистрибутивов имеется стандартная утилита под названием «Диски». Именно она и отвечает за управление накопителями. Если приведенного выше решения на ПК не оказалось или оно вам не подходит, выполните такие действия:

    1. Воспользуйтесь меню приложений, чтобы отыскать соответствующую утилиту. Запустите ее, нажав по значку.

Запуск утилиты Диски в Linux для монтирования раздела

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

Выбор раздела в утилите Диски в Linux для монтирования

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

Кнопка для монтирования раздела или носителя в утилите Диски в Linux

    1. Это действие в обязательном порядке требует подтверждения подлинности, поэтому введите пароль суперпользователя в появившейся форме.

Подтверждение монтирования носителя или раздела в утилите Диски в Linux

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

Успешное монтирование носителя или раздела в утилите Диски в Linux

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

Способ 3: Терминальная команда

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

    1. Запустите «Терминал» удобным для вас образом, например, горячей клавишей Ctrl + Alt + T или через меню приложений.

Переход к терминалу для использования стандартной команды монтирования в Linux

    1. Введите команду sudo mount -v /dev/sda2 /mnt/, где /dev/sda2 — название необходимого диска, а /mnt/ — точка монтирования.

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

    1. Подтвердите данное действие, введя пароль суперпользователя. Это требуется, поскольку для активации команды был использован аргумент sudo.

Подтверждение монтирования диска через терминал Linux

    1. Вы будете уведомлены о том, что данная операция завершена успешно.

Успешное монтирование диска через терминал в Linux

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

Подробнее: Просмотр списка дисков в Linux

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

  • -r — подключение в формате только для чтения;
  • -w — монтирование с возможностью чтения и записи;
  • -c — использование абсолютных путей;
  • -t ext4 — монтирование файловой системы. Здесь ext4 следует заменить на необходимую ФС;
  • -a — монтирование всех разделов и носителей, указанных в fstab.

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

Способ 4: Монтирование окружения в режиме LiveCD

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

    1. Загрузите компьютер с LiveCD версией дистрибутива. Более детально об этом читайте в официальной документации по приведенной далее ссылке.

Загрузка Linux с LiveCD

    1. Выберите вариант ознакомления с ОС, предварительно указав удобный язык интерфейса.

Запуск LiveCD монтирования диска через терминал в Linux

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

Запуск терминала в режиме LiveCD для монтирования диска в Linux

    1. Используйте команду sudo mount /dev/sda1 /mnt, чтобы смонтировать основной раздел. Наименование /dev/sda1 взято только в качестве примера, а по факту оно может быть другим.

Команда для монтирования основного раздела жесткого диска через LiveCD в Linux

    1. В некоторых случаях разделы с загрузчиком тоже придется смонтировать. Для этого используется команда sudo mount –bind /dev/ /mnt/dev/.

Команда для монтирования раздела с загрузчиком при работе с LiveCD Linux

    1. Следом идет строка sudo mount –bind /proc/ /mnt/proc/.

Вторая команда для монтирования раздела с загрузчиком при работе с LiveCD Linux

    1. Последняя команда имеет вид sudo mount –bind /sys/ /mnt/sys/.

Третья команда для монтирования раздела с загрузчиком при работе с LiveCD Linux

    1. По завершении можно перейти к окружению sudo chroot /mnt/.

Команда для подключения к смонтированному окружению через LiveCD Linux

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

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

CentOS 7: Монтирование дисков. Утилита mount, umount.

1. Описание утилиты.

Mount — утилита командной строки. Применяется для монтирования файловых систем.

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

Например, вы хотите примонтировать флешку. Вы даете системе команду подключить ее в папку /run/media/имя_пользователя/UUID_флешки/. Система определяет файловую систему устройства, а затем, используя драйвера ядра подключает ее к указанной папке. Дальше вам остается работать с той папкой, как с любой другой. Больше ни о чем думать не нужно. Когда надумаете извлечь флешку, ее нужно отмонтировать.

2. Общий синтаксис.

Для монтирования в CentOS 7 используется команда mount.

Рассмотрим ее параметры:

# mount /файл_устройства /папка_назначения

Или расширенный вариант:

# mount опции -t файловая_система -o опции_монтирования /файл_устройства /папка_назначения

Опции задают различные дополнительные особенности работы утилиты. Опция -t необязательна, но она позволяет задать файловую систему, которая будет использована и иногда это очень полезно. С помощью опции -o вы можете задать различные параметры монтирования, например, монтировать только для чтения и так далее. Последних два параметра — это файл устройства, например, /dev/sda1 и папка назначения, например, /mnt.

Перед тем как перейти к рассмотрению примеров работы утилитой, давайте рассмотрим ее основные опции:

  • -V — вывести версию утилиты;
  • -h — вывести справку;
  • -v — подробный режим;
  • -a, –all — примонтировать все устройства, описанные в fstab;
  • -F, –fork — создавать отдельный экземпляр mount для каждого отдельного раздела;
  • -f, –fake — не выполнять никаких действий, а только посмотреть что собирается делать утилита;
  • -n, –no-mtab — не записывать данные о монтировании в /etc/mtab;
  • -l, –show-labels — добавить метку диска к точке монтирования;
  • -c — использовать только абсолютные пути;
  • -r, –read-only — монтировать раздел только для чтения;
  • -w, –rw — монтировать для чтения и записи;
  • -L, –label — монтировать раздел по метке;
  • -U, –uuid — монтировать раздел по UUID;
  • -T, –fstab — использовать альтернативный fstab;
  • -B, –bind — монтировать локальную папку;
  • -R, –rbind — перемонтировать локальную папку.

3. Монтирование разделов.

3.1. Простое монтирование.

Монтирование разделов с помощью mount выполняется очень просто. Фактически в большинстве случаев будет достаточно упрощенной версии команды. Например, смонтируем раздел /dev/sdb6 в папку /mnt:

# sudo mount /dev/sdb2 /mnt/

3.2. Монтирование с правами суперпользователя.

В большинстве случаев вы будете вынуждены выполнять команду mount с правами суперпользователя, если обратное не указано в fstab (опция монтирования users). Вы можете посмотреть информацию о процессе монтирования добавив опцию -v:

# sudo mount -v /dev/sdb2 /mnt/

3.3. Монтирование с указанием файловой системы.

Если нужно, вы можете указать файловую систему с помощью опции -t:

# sudo mount -v -t ext4 /dev/sdb2 /mnt

3.4. Монтирование только для чтения.

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

# sudo mount -t ext4 -r /dev/sdb2 /mnt

# sudo mount -t ext4 -o ro /dev/sdb2 /mnt

3.5. Ограничения на выполнение программ.

Вы можете использовать и другие опции чтобы выполнить монтирование разделов, например, указать, что на этом разделе нельзя выполнять программы:

# sudo mount -t ext4 -o noexec /dev/sdb2 /mnt

Обратите внимание, что вы не можете использовать опции uid, gid, fmask для файловых систем ext. Они поддерживаются только в FAT, vFAT, exFAT.

3.6. Монтирование по UUID.

Вы можете использовать не только имена устройств чтобы выполнить монтирование диска в CentOS 7. Для этого можно применять UUID или метки, например, монтирование с помощью UUID:

# sudo mount –uuid=”b386d309-05c1-42c8-8364-8d37270b69e0″ /mnt

Посмотреть UUID для ваших разделов можно с помощью команды:

# sudu blkid

или так

# blkid /dev/sdb1

Также соответствие «классических» имен устройств и их UUID представлений можно посмотреть вот так:

# ls -l /dev/disk/by-uuid/

3.7. Монтирование по метке.

Точно так же вы можете использовать метки. Команда монтирования диска CentOS 7 будет выглядеть так:

# sudo mount –label=”home” /mnt/

3.8. Монтаж каталога к каталогу.

Вы можете примонтировать один каталог в другой, для этого используйте опцию –bind:

# sudo mount -v -R –rbind /mnt/ /media/

3.9. Монтирование файлов с файловой системой.

Возможно, не только монтирование разделов CentOS 7, но и монтирование файлов, если они содержат файловую систему, например, образов дисков.

Монтирование образа диска CentOS 7 работает точно так же:

# sudo mount ~/file.iso /mnt

4. Список смонтированного.

Посмотреть список всех примонтированных устройств можно просто выполнив mount без параметров:

# mount

5. Размонтирование разделов.

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

Например:

# sudo umount /mnt

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

Система сообщит, что устройство занято:

umount: /mnt: target is busy.

Проблему можно решить закрыв все программы, которые могут использовать любой файл в этой папке. Какие именно это программы вы можете узнать с помощью команды lsof:

# lsof -w /mnt

# lsof -w /dev/sdb6

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

# sudo umount -l /mnt

6. Оригиналы источников информации.

  1. ru.wikipedia.org «mount».
  2. losst.ru «Монтирование диска в Linux».

Выводы

В этой статье мы рассмотрели как выполняется монтирование жестких дисков linux, а также разделов и даже образов. Вы знаете как правильно использовать опции mount и umount.


[spoiler title=”Источники”]

  • https://www.vseprolinux.ru/mount
  • https://ITProffi.ru/podklyuchenie-fajlovyh-sistem-komanda-mount-v-linux/
  • https://GitJournal.tech/montirovanie-diska-v-linux-komanda-mount/
  • https://itshaman.ru/articles/3/mount
  • https://lumpics.ru/mounting-disk-in-linux/
  • https://hamsterden.ru/mount-umount/
  • https://losst.ru/montirovanie-diska-v-linux


[/spoiler]


2020-12-22T10:34:30
Linux

Команда Tail в Linux – что делает и как работает



























4/5 — (3 голоса)

tail — утилита в UNIX, выводящая несколько (по умолчанию 10) последних строк из файла. Команда tail позволяет выводить заданное количество строк с конца файла, а также выводить новые строки в интерактивном режиме.

Что такое команда tail?

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

Синтаксис команды tail:

tail [options] [files]

Синтаксис команды tail

По умолчанию утилита печатает десять последних строк каждого файла стандартным способом вывода. Если указать более одного документа, то к каждому набору выходных данных будет добавлен заголовок с его именем. Если файл не указан или является одним тире (“-“), то tail читает из стандартного input.

Рассмотрим синтаксис команды:

tail [параметры] файл

Основные параметры команды tail:

  • -c – показывает указанное количество байт с конца файла. Также можно использовать знак плюс после “-с” для вывода любой информации, начиная с байта. Например, -c +1 напечатает все. После числа можно использовать суффикс множителя, чтобы указать единицы измерения: b (512), kB (1000), K (1024), MB (1000*1000), M (1024*1024), GB (1000*1000*1000), G (1024*1024*1024), and so on for T (terabyte), P (petabyte), E (exabyte), Z (zettabyte), Y (yottabyte).
  • -f – этот параметр приводит к тому, что tail будет зацикливаться вечно, проверяя наличие новых данных. Когда появляются новые данные, они будут напечатаны. Если вы следите более, чем за одним файлом, то будет напечатан заголовок каждого, чтобы указать, какие данные файла печатаются. Если файл уменьшается, а не увеличивается, утилита сообщит вам об этом. Если вы укажете название, то за файлом с таким заголовком будет слежка, вне зависимости от его файлового дескриптора. Если вы укажете дескриптор, то будет слежка за тем же файлом, даже если он переименован. Это поведение команды по умолчанию.
  • -n – выводит последние n строк, вместо значения по умолчанию, которое составляет 10.
  • –max-unchanged-stats=num. Если отслеживаете документ с аргументом -f , утилита постоянно проверяет его, чтобы увидеть, изменился ли размер. Если размер изменился, он снова открывает файл и ищет новые данные для печати. Опция –max-unchanged-stats повторно открывает файл, даже если его размер не изменился, после каждой проверки num. Эта опция полезна, если файл может быть самопроизвольно отключен или переименован, например, когда файлы журнала автоматически чередуются.
  • –pid – используется с аргументов “-f”, позволяет завершить процесс.
  • -q – никогда не выводить заголовки.
  • –retry – продолжает пытаться открыть файл, даже если он временно недоступен;
  • -s – если производить слежение посредством -f примерно num секунд между проверками файлов. С помощью –pid проверяется процессный pid не реже, чем один раз в несколько секунд.
  • -v -всегда печатать заголовки.
  • –help – получение информационной помощи по синтаксису.
  • –version – способ узнать версию.

Примеры команды tail

Запустим утилиту без параметров, тем самым узнаем 10 последних строк в dokument.

tail dokument

Покажем на экране пять последних строк. Для этого будем использовать аргумент “-n”.

tail -n 5 dokument

Рассмотрим пример опции “-f”. Которая делает стандартный вывод в десять пунктов и следит за обновлением документа, кроме того утилита продолжает выводит все новые изменения, которые добавляются в файл.

tail -f dokument

ВАЖНО!: tail будет отслеживать файл постоянно по умолчанию. Чтобы остановить этот процесс, необходимо набрать комбинацию CTRL + C.

Откроем несколько файлов одновременно.

tail -f dokument fil

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

Использование tail

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

tail /var/log/syslog

tail /var/log/syslog

Если вам недостаточно 10 строк и нужно намного больше, то вы можете увеличить этот параметр с помощью опции -n:

tail -n 100 /var/log/syslog

tail -n 100 /var/log/syslog

Когда вы хотите отслеживать появление новых строк в файле, добавьте опцию -f:

tail -f /var/log/syslog

tail -f /var/log/syslog

Вы можете открыть несколько файлов одновременно, просто перечислив их в параметрах:

tail /var/log/syslog /var/log/Xorg.0.log

tail /var/log/syslog /var/log/Xorg.0.log

С помощью опции -s вы можете задать частоту обновления файла. По умолчанию данные обновляются раз в секунду, но вы можете настроить, например, обновление раз в пять секунд:

tail -f -s 5 /var/log/syslog

tail -f -s 5 /var/log/syslog

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

tail -q var/log/syslog /var/log/Xorg.0.log

tail -f -s 5 /var/log/syslog

Если вас интересует не число строк, а именно число байт, то вы можете их указать с помощью опции -c:

tail -c 500 /var/log/syslog

Для удобства, вы можете выбирать не все строки, а отфильтровать интересующие вас:

tail -f /var/log/syslog | grep err

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

tail -f –retry /var/log/syslog | grep err

Как я говорил в начале статьи, по умолчанию опция -f или –follow отслеживает файл по его имени, но вы можете включить режим отслеживания по дескриптору файла, тогда даже если имя измениться, вы будете получать всю информацию:

tail –follow=descriptor /var/log/syslog | grep err

Как Ограничить Количество Выводимых Строк?

Tale предоставляет возможность посмотреть то количество срок, которое вам нужно. Для этого просто используйте опцию –n.

Самый простой способ выполнить это действие:

Tail –n* путь_к_файлу

Вместо * укажите необходимое количество строк.

Например, если мы хотим просмотреть две строки из файла, мы будем использовать следующую команду:

tail -n2 devisers.txt

2 — количество строк, devisers.txt — имя файла.

Как Посмотреть Последнее Количество Байтов Данных?

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

tail –c* путь_к_файлу

Замените * на количество байтов, которое необходимо вывести.

Как Отслеживать Изменения в Файле?

Чтобы проверить файл на наличие новой информации, используйте команду tail вместе с опцией -f. Эта команда будет полезна при просмотре последних десяти строк файла. Опция обычно используется для отслеживания файлов логов в реальном времени. Для нашего файла devisers.txt команда будет выглядеть так:

tail -f devisers.txt

Новые версии команд tail также позволяют пользователю просматривать несколько файлов или папок. После изменения исходного файла заголовок покажет, в какую строку кто-то внёс изменения.

Как Использовать Команду Tail с Другими Командами Linux?

Команды tail могут использоваться вместе с другими функциями командной строки Linux. Например:

Команда Tail с -r (Обратный Порядок)

Например, мы хотим просмотреть вывод команды tail в обратном порядке.

tail –n* имя_файла | sort -r

Первая часть команды такая же, как и раньше, затем мы разделяем её с помощью | для обозначения последующего действия — sort -r, которое, как следует из названия, сортирует вывод в обратном порядке.

Использование Команды Tail с ls (Самый Старый Файл или Папка)

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

Чтобы сделать это, пропишем ls перед командой tail. Вот, как это будет выглядеть:

ls -l | tail -n8

Как уже упоминалось раньше, в tail части команды -n8 вы можете указать любое число.

5 практических примеров команды Tail в Linux

Давайте узнаем, как использовать команду tail в Linux с некоторыми практическими примерами. Мы будем использовать этот текстовый файл в этой статье:

Загадочное происшествие на Брайтон Бич Тайный Противник Убийство по ссылкам Человек в коричневом костюме Секрет дымовых труб Погода в Кацапетовке Большая четверка Странный пассажир полуночного экспресса Гарри Поттер Все на Матч Морские дьяволы Статьи о Linux Искусственный интеллект SQL для начинающих Дистрибутив Linux Убийство в восточном экспрессе Незаконченный Портрет Почему они не спросили Эванса? Три Акта Трагедии Смерть в облаках

Если вы используете команду tail без какой-либо опции, она будет печатать последние 10 строк. Это поведение по умолчанию команды tail.

tail agatha.txt Морские дьяволы Статьи о Linux Искусственный интеллект SQL для начинающих Дистрибутив Linux Убийство в восточном экспрессе Незаконченный Портрет Почему они не спросили Эванса? Три Акта Трагедии Смерть в облаках

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

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

1. Распечатайте последние N строк с помощью команды tail

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

tail -n N

Например, если вы хотите увидеть последние 5 строк с командой tail в нашем файле примера, вы можете использовать его следующим образом:

tail -n 5 agatha.txt Убийство в восточном экспрессе Незаконченный Портрет Почему они не спросили Эванса? Три Акта Трагедии Смерть в облаках

Совет

Вы также можете просто использовать tail -N вместо tail -n N для отображения последних N строк файла.

2. Распечатайте все строки, начиная с номера строки N

Если вы хотите просмотреть все строки, начинающиеся с номера строки N, вы можете использовать здесь опцию +.

tail -n +N

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

tail -n +7 agatha.txt Большая четверка Странный пассажир полуночного экспресса Гарри Поттер Все на Матч Морские дьяволы Статьи о Linux Искусственный интеллект SQL для начинающих Дистрибутив Linux Убийство в восточном экспрессе Незаконченный Портрет Почему они не спросили Эванса? Три Акта Трагедии Смерть в облаках

3. Использование нескольких файлов с командой tail

Команда tail позволяет вам одновременно использовать несколько файлов. Все стандартные опции команды tail применимы к нескольким файлам.

tail -n N

Результат объединяется для всех файлов, и по умолчанию имя файла отображается в строках, начинающихся с «==>».

Например, если вы хотите увидеть последние три строки файлов sherlock.txt и agatha.txt, это будет выглядеть так:

tail -n3 sherlock.txt agatha.txt ==> sherlock.txt <== Приключение благородного холостяка Приключение Берилл Коронет Приключение Алисы в стране чудес ==> agatha.txt <== Почему они не спросили Эванса? Три Акта Трагедии Смерть в облаках

Совет

Вы можете удалить имена файлов с вывода, используя тихий режим с опцией -q.

4. Мониторинг файлов в реальном времени с помощью команды tail [Очень полезно для мониторинга журналов]

Предположим, у вас есть файл, и к нему добавлен новый контент. Команда tail позволяет вам отображать все новые строки по мере их добавления в файл.

Для этого вы можете использовать опцию -f.

tail -f

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

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

СоветЕсли вы используете -F вместо опции -f, команда tail будет ждать создания входного файла (если он еще не существует), а затем отображает содержимое файла в режиме реального времени.

5. Использование команды tail с pipes

Команда tail может использоваться в сопряжении с другими командами с использованием pipes.

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

ls -ltr | tail -n3

В приведенной выше команде ls -lrt перечисляет все файлы в обратном хронологическом порядке. И тогда команда tail дополнительно анализирует этот вывод и отображает только последние три строки вывода команды ls, и поэтому мы получаем список из трех последних измененных файлов.

Особенность Tails

Что делает Tails безопаснее других операционных систем?

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

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

Дистрибутив подключается к оборудованию компьютера, но не использует операционную систему или дисководы. Это означает, что на вашем компьютере нет постоянной записи о вашей деятельности. После того, как вы извлечете USB-накопитель Tails или перезагрузите компьютер, вы не сможете сказать, что дистрибутив использовался там.

Tails поставляется с современной технологией шифрования. За счет чего ПО обеспечивает нам безопасность?

Во-первых, дистрибутив обеспечит вас надежной защитой от PGP и OTR для безопасной связи. Во-вторых, автоматическим использованием HTTPS при посещении веб-сайтов. В-третьих, возможностью шифровать файлы на USB-накопителе или DVD-диске. И наконец, со всеми этими функциями конфиденциальности и анонимности вы можете буквально носить его в кармане.

Вот почему фанаты конфиденциальности любят Tails.

Одна из замечательных особенностей дистрибутива заключается в том, что вы можете создать собственную USB-флешку или DVD-диск Tails. А поскольку это бесплатное программное обеспечение, вам нужно иметь в наличии USB-накопитель или DVD-диск, на который вы его установите.

Обеспечение безопасности

Обычно дистрибутив хранит данные только до тех пор, пока вы не выключитесь. Но если вы используете Tails на USB-накопителе с дополнительным доступным пространством, вы можете создать постоянное хранилище.

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

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

Преимущества и недостатки

Преимущества

  • Позволяет хранить зашифрованные данные на USB-накопителе Tails
  • Вы можете установить дополнительные приложения
  • Можно изменить конфигурацию приложений
  • Вы можете открыть постоянное хранилище из других операционных систем

Недостатки

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

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

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

Для решения этой проблемы дистрибутив поставляется с KeePassX , менеджером паролей открытого качества.

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

Установка Tails

Скачать образ Tails можно перейдя по данной ссылке.

Когда вы запускаете дистрибутив, вы видите экран.

Когда вы запускаете Tails, вы видите экран

После нажатия Enter появляется экран Tails. Здесь выбирайте язык, раскладку клавиатуры, время.

Tails Здесь выбирайте язык, раскладку клавиатуры, время

Кроме того, вы можете активировать набор предлагаемых параметров.

Tails Кроме того, вы можете активировать набор предлагаемых параметров

Настроив все параметры нажмите кнопку Запуск Tails.

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

Tails В нашем случае, подключение к интернету произошло автоматически.

Начало работы

После загрузки с рабочей флешки нам потребуется создать постоянный (persistent) защищенный раздел, своеобразный «жесткий диск на флешке». Это делается через Application → Tails → Configure Persistence.

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

Из меню внизу экрана выбираем регион. Это важно, поскольку от региона зависят входные узлы Tor. Здесь следует поэкспериментировать. В моем случае лучшим выбором оказалась Дания.

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

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

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

Дистрибутив Tails

Tails — live-дистрибутив Linux, основанный на Debian, и созданный для конфиденциального и анонимного использования сети (шифрование, анонимизация и безопасность перехвата/прослушки трафика).

Tails содержит набор программ и утилит, которые позволяют полностью анонимно выходить в интернет и пользоваться другими сервисами и службами (почта, im-сообщения и прочее). Для достижения приватности дистрибутив использует Tor-сеть.

Интересный факт

Дистрибутив Tails использовал Эдвард Сноуден, также он призвал некоторых журналистов использовать Tails.

Среда рабочего стола Gnome

Tails использует рабочее окружение Gnome.

При запуске дистрибутива есть интересная опция — «Активировать маскировку под Windows XP». Данная опция позволяет сделать так, чтобы система выглядела очень похожей внешне на Windows XP, чтобы, например, в публичных местах никто не заподозрил вас в использовании «подозрительного» дистрибутива.

Дополнительное ПО, сохранение файлов и настроек

По умолчанию Tails не рассчитана на сохранение установленного ПО, настроек и файлов после выключения компьютера. Однако создатели предусмотрели возможность хранить некоторые данные в персистентном разделе. Настроить, что именно будет храниться, можно в разделе Settings → Persistent.

Большинство пунктов меню очевидны, поэтому я остановлюсь на последних трех. Второй и третий с конца отвечают за хранение APT-пакетов. Tails основана на Debian, поэтому большинство нужного нам ПО можно установить при помощи apt-get. И хотя сами программы при отключении компьютера не сохранятся, пакеты APT при соответствующих настройках останутся в персистентном разделе. Это позволяет развертывать все нужное ПО в процессе загрузки системы.

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

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

/live/persistence/TailsData_unlocked/dotfiles ├── file_a ├── folder │ ├── file_b │ └── subfolder │ └── file_c └── emptyfolder

В домашней папке при таком раскладе будет следующая структура ссылок:

/home/amnesia ├── file_a → /live/persistence/TailsData_unlocked/dotfiles/file_a └── folder ├── file_b → /live/persistence/TailsData_unlocked/dotfiles/folder/file_b └── subfolder └── file_c → /live/persistence/TailsData_unlocked/dotfiles/folder/subfolder/file_c

Защищаем данные, отбрасываем хвост

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

Создатели Tails рекомендуют использовать cryptsetup, основанный на LUKS. Эта программа позволяет создавать скрытые разделы, однако такой раздел скрыт не до конца. Насколько мне известно, существует возможность обнаружить заголовок скрытого раздела, что позволяет установить его наличие.

Такой скрытый раздел лично меня не устраивает. Поэтому я решил использовать старый добрый TrueCrypt версии 7.1а. Заголовок скрытого раздела TrueCrypt неотличим от случайных данных, и, насколько мне известно, обнаружить его невозможно. Двоичный файл программы TrueCrypt лучше хранить здесь же, в персистентном разделе.

Детально описывать процесс создания двойного криптоконтейнера я не стану, отмечу лишь важный нюанс. Поскольку скрытый раздел TrueCrypt по-настоящему скрытый, о его существовании не догадывается даже сама программа, пока ты не введешь нужный пароль. Из-за этого при записи файлов в ложный раздел скрытый раздел может быть поврежден. Чтобы этого не произошло, при монтировании ложного раздела для записи на него картинок котиков нужно выбрать Mount Options → Protect hidden volume when mounting outer volume.

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

Общение

Теперь, когда мы обезопасили нашу информацию, можно приступить к ее передаче, то есть к общению. Начнем с Pidgin. Он отлично годится в качестве клиента IRC, а в Tails его еще и немного усилили. В состав ОС включен Pidgin с установленным плагином для протокола OTR. Именно он нам интересен больше всего. Избегая сложной математики, можно сказать, что этот протокол обеспечивает защищенную передачу данных с возможностью отречения, то есть доказать, что конкретное сообщение написано конкретным человеком, невозможно.

Прежде чем начать общаться с кем-то по протоколу OTR, нужно подключиться к серверу IRC. При этом очень важно удостовериться в использовании SSL. Tor шифрует трафик при передаче его между узлами, но, если ты не будешь использовать SSL, твой трафик будет передаваться в открытом виде до входного узла Tor и от выходного узла адресату. Некоторые узлы Tor забанены на серверах IRC, поэтому может потребоваться перезапуск Tor. Сделать это можно командой /etc/init.d/tor restart.

После того как соединение с сервером установлено, выбираем Buddies → New Instant Message.

В открывшемся окне диалога выбираем Not Private → Start Private Conversation.

Будет предложено три варианта для аутентификации: ввести ответ на секретный вопрос, который вы обсудили с собеседником заранее (в этом случае необходимо ввести один и тот же ответ, пробелы и регистр считаются); ввести общую «секретную» фразу; проверить fingerprint — это сорокасимвольная последовательность, идентифицирующая пользователя OTR.

Теперь можно переписываться по OTR. Но как насчет голосового общения? Тут, увы, не все гладко. Поскольку Tails направляет весь трафик через Tor, возникает ряд проблем для голосового общения. Во-первых, большинство VoIP-программ используют UDP, в то время как через Tor возможна передача только пакетов TCP. Во-вторых, Tor не отличается скоростью и пакеты иногда приходят с сильной задержкой. Так что возможны задержки и разрывы связи.

Тем не менее существует OnionPhone, специальный плагин для TorChat. Неплохо справляется и Mumble, хотя этот вариант и менее безопасен. Чтобы Mumble работал через Tor, необходимо запускать его командой torify mumble, а также выбрать пункт Force TCP в сетевых настройках программы.

Электронная почта

Почту в Tails можно использовать точно так же, как и в других ОС. В стандартную сборку входит почтовый клиент Icedove, его настройки и ключи можно хранить в персистентном разделе. Важный нюанс, который следует иметь в виду при отправке писем, состоит в том, что заголовки (subject) не шифруются. Это не ошибка, а особенность реализации протокола, о которой нужно просто знать. Кроме того, файлы, передаваемые по электронной почте, рекомендуется шифровать.

Выводы

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


[spoiler title=”Источники”]

  • https://andreyex.ru/linux/komandy-linux-i-komandy-shell/5-prakticheskih-primerov-komandy-tail-v-linux/
  • https://www.vseprolinux.ru/linux-tail
  • https://losst.ru/komanda-tail-linux
  • https://www.hostinger.ru/rukovodstva/komanda-tail-v-linux/
  • https://linuxvsem.ru/distributions/tails-linux
  • https://xakep.ru/2016/11/01/tails-live-flash/
  • https://pingvinus.ru/distribution/tails


[/spoiler]


2020-12-22T10:34:30
Linux

Команда LS в Linux. Описание и примеры



























5/5 — (2 голоса)

Команда ls – Одна из основных команд в терминальном режиме для просмотра содержимого каталога. Команда ls — вероятно наиболее используемая команда в любой UNIX-системе. Её предназначение — вывод информации о файлах и каталогах. Дополнительные опции команды позволяют получить более подробную информацию и сортировать её определённым образом.

Команда ls linux

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

$ ls опции/путь/к/папке

Опции команды указывают как именно и в каком виде нужно выводить информацию на экран, а путь, это та папка, которую нужно отобразить. Рассмотрим основные опции утилиты:

  • -a – отображать все файлы, включая скрытые, это те, перед именем которых стоит точка;
  • -A – не отображать ссылку на текущую папку и корневую папку . и ..;
  • –author – выводить создателя файла в режиме подробного списка;
  • -b – выводить Escape последовательности вместо непечатаемых символов;
  • –block-size – выводить размер каталога или файла в определенной единице измерения, например, мегабайтах, гигабайтах или килобайтах;
  • -B – не выводить резервные копии, их имена начинаются с ~;
  • -c – сортировать файлы по времени модификации или создания, сначала будут выведены новые файлы;
  • -C – выводить колонками;
  • –color – включить цветной режим вывода, автоматически активирована во многих дистрибутивах;
  • -d – выводить только директории, без их содержимого, полезно при рекурсивном выводе;
  • -D – использовать режим вывода, совместимый с Emacs;
  • -f – не сортировать;
  • -F – показывать тип объекта, к каждому объекту будет добавлен один из специализированных символов */=>@|;
  • –full-time – показывать подробную информацию, плюс вся информация о времени в формате ISO;
  • -g – показывать подробную информацию, но кроме владельца файла;
  • –group-directories-first – сначала отображать директории, а уже потом файлы;
  • -G – не выводить имена групп;
  • -h – выводить размеры папок в удобном для чтения формате;
  • -H – открывать символические ссылки при рекурсивном использовании;
  • –hide – не отображать файлы, которые начинаются с указанного символа;
  • -i – отображать номер индекса inode, в которой хранится этот файл;
  • -l – выводить подробный список, в котором будет отображаться владелец, группа, дата создания, размер и другие параметры;
  • -L – для символических ссылок отображать информацию о файле, на который они ссылаются;
  • -m – разделять элементы списка запятой;
  • -n – выводить UID и GID вместо имени и группы пользователя;
  • -N – выводить имена как есть, не обрабатывать контролирующие последовательности;
  • -Q – брать имена папок и файлов в кавычки;
  • -r – обратный порядок сортировки;
  • -R – рекурсивно отображать содержимое поддиректорий;
  • -s – выводить размер файла в блоках;
  • -S – сортировать по размеру, сначала большие;
  • -t – сортировать по времени последней модификации;
  • -u – сортировать по времени последнего доступа;
  • -U – не сортировать;
  • -X – сортировать по алфавиту;
  • -Z – отображать информацию о расширениях SELinux;
  • -1 – отображать один файл на одну строку.

Это были все основные параметры команды ls, которые нам может когда-либо понадобиться использовать. Их очень много, но на деле будут нужны только некоторые из них, вы их быстро запомните, а все остальные сможете всегда найти в этой статье или на странице справки man ls. А теперь давайте рассмотрим несколько примеров использования команды ls linux.

Синтаксис команды ls

Основные параметры:

  • -a. Показывает все файлы, в том числе скрытые с точкой.
  • -A. Опция показывает скрытые файлы и скрывает ссылку на текущий каталог.
  • -l. Отображает подробный список, в котором показываются права доступа.
  • -o. Подробный список, только без группы.
  • -d. Отображает только каталоги, без содержимого, не переходить по символьным ссылкам.
  • -D.  Режим “Emacs dired”. Здесь стоит отметить что же такое режим Emacs? Это текстовый программируемый текстовый редактор.
  • -f. Аргумент отключит сортировку и покажет скрытые документы.
  • -r. Сортировка в обратном порядке.
  • -X. Сортировка по алфавиту.
  • -S. Сортировка по размеру документов. Сначала идут файлы и каталоги большего размера, потом маленькие.
  • -t. Сортировка по времени изменения. Сначала идут более новые.
  • -h. Переводит информацию о размерах директорий и файлов в удобной вид для человека. В конце цифр добавляется буква “K” – килобайты, “M” – мегабайты. Данная опция обычно используется с “-l”, так как необходимо вывести информация о размерах, а потом перевести размеры в удобный формат.
  • –hide. Скрыть документы, которые полностью совпадают с указанными символами. Например нужно скрыть “kurica”, указываем –hide kurica.
  • -I ‘шаблон’. Скрыть файлы согласно шаблону. Например нужно скрыть все документы, которые начинаются на букву f. Тогда пишем ls -I’f*’.
  • -1. Список документов в один столбец.
  • –V. Показывает версию программы.
  • –help. Справка.

Путь к каталогу может принимать один из трех значений:

  1. полный путь директории (/etc/network/);
  2. относительный путь (network);
  3. пустой значение. Означает, что команда будет выполняться в текущей директории. По умолчанию это домашний каталог.

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

Первое, что может ввести в заблуждение при изучении вывода команды ls -l, так это первая секция данных. Состоящая из набора десяти символов и показывающая режимы доступа к файлу. Для вышеприведённого примера первый символ «-» указывает, что это файл. А в случае с каталогом вместо него выводится символ «d». Следующие девять символов представляют собой три группы, отражающих режимы доступа к файлу. Первая группа (первые три символа «rwx») показывают, какие права доступа выставлены на данный файл для его владельца. Следующая группа символов — «r-x» — показывает режим доступа для группы, к которой принадлежит файл. Ну а третья («r-x») — права доступа для всех остальных пользователей.

В полях, отображающих владельца и группу вместо символьных имён могут быть также и цифровые идентификаторы. Такое бывает, когда соответствующие записи были удалены из файлов /etc/passwd или /etc/group. Также это может быть признаком возникновения ошибки в базах данных LDAP или NIS. Конечно, если таковые используются.

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

Особенности использования команды ls

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

$ ls -l /dev/tty0 cr–w—- 1 root tty 4,0 фев 28 14:27 /dev/tty0

Вместо размера файла выводится старший и младший номера (4, 0) устройства tty0 – это первая виртуальная консоль, управляемая драйвером устройства 4, который является драйвером терминала.

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

$ ls -li ‘Рабочий стол’ 3276880 ‘Рабочий стол’

Номер индексного дескриптора — это индекс той самой таблицы, в которой содержатся записи всех файловых систем. В свою очередь, на дескрипторы ссылаются файловые записи каталогов. Таким образом, у жёстких ссылок, ссылающихся на один и тот же файл, будут одинаковые номера. Зная номер индексного дескриптора определённого файла, можно найти в системе все ссылающиеся на него жесткие ссылки, используя команду find:

$ find точка_монтирования -xdev -inum индексный_дескриптор

Данный пример — лишь одно из важных практических применений команды ls. Следует также отметить некоторые особенно полезные опции команды ls:

-a – отображает все файлы и каталоги. Включая скрытые (имена которых начинаются с точки), а также «всевдокаталоги» с именами «.» и «. .»;

-t – отображает результаты в отсортированном (по времени изменения файлов) порядке. А опция -tr то же, но в обратном порядке;

-F – выделяет каталоги и исполняемые файлы в общем выводе;

-h – отображает размеры файлов и каталогов в «человекопонятных» единицах, к примеру 4k или 10M;

-R – рекурсивный вывод, выполнение которого прерывается нажатием сочетания клавиш .

Иногда возникает путаница в использовании опций -l и —d. Дело в том, что опция -d предназначена для дополнения работы опции -l (которая выводит подробную информацию об атрибутах). Когда необходимо получить атрибуты именно конкретного каталога:

$ ls -ld ~/htdocs drwxrwxr-x 12 john john 4096 фев 11 12:56 /home/john/htdocs

Использование ls в Linux

Как вы уже поняли, ls – это сокращение от list, эта команда представляет из себя аналог команды dir для Linux. Самый простой способ использовать команду, запустить ее без параметров и посмотреть содержимое текущей папки:

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

ls /

Или папки /bin:

ls /bin/

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

ls -l

Тут вывод уже разделен на отдельные колонки, в первой колонке указаны права доступа к файлу в формате владелец группа остальные. Следующая колонка – это тип файла или папки, дальше владелец и группа, затем размер, дата создания и последний параметр – имя. Если вы еще хотите знать кто создал файл, можно использовать опцию author:

ls -l –author

Колонка создателя будет добавлена после группы. Дальше размер. Он выводится в байтах, килобайтах или еще в чем-то и нам не совсем понятно что там происходит, поэтому добавьте опцию -h чтобы выводить размер в более удобном виде:

ls -lh

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

ls -l Фото

ls -lh Фото

Если вы хотите видеть скрытые файлы, а в домашней папке их просто море, то используйте опцию -a:

ls -a

Или смотрим скрытые файлы без ссылок на текущую и родительскую папку:

ls -A

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

ls -lSh Фото

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

ls -lShr

С помощью опции -r мы вывели файлы в обратном порядке. Теперь отсортируем по алфавиту:

ls -lX

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

ls -lt

Обратите внимание на колонку времени, действительно, самые новые файлы будут вверху списка. Если вы хотите посмотреть какие метки SELinux присвоены файлу, необходимо использовать опцию -Z:

ls -lZ

Но это возможно только в системах, где установлена надстройка SELinux. Если вы хотите рекурсивно вывести содержимое всех папок, используйте опцию -R:

ls -lR /usr/

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

ls -m

Знакомство с ls

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

$ cd /usr

$ ls

X11R6 doc i686-pc-linux-gnu lib man sbin ssl bin gentoo-x86 include libexec portage share tmp distfiles i686-linux info local portage.old src

Указав опцию -a, вы можете увидеть полный список, включая скрытые файлы и директории, начинающиеся с “.”. Как видно в следующем примере, ls -a выводит также особые связывающие директории “.” и “..”:

$ ls -a

. bin gentoo-x86 include libexec portage share tmp .. distfiles i686-linux info local portage.old src X11R6 doc i686-pc-linux-gnu lib man sbin ssl

1. ls без параметров

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

# ls 001.pcap Desktop Downloads index.html install.log.syslog Pictures Template anaconda-ks.cfg Documents fbcmd_update.php install.log Music Public Videos

2. ls с параметром -l

Здесь, ls -l (l — символ, а не единица) показывает файл или каталог вместе с его размером, а также дату и время изменения, права и владельца.

# ls -l total 176 -rw-r–r–. 1 root root 683 Aug 19 09:59 0001.pcap -rw——-. 1 root root 1586 Jul 31 02:17 anaconda-ks.cfg drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Desktop drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Documents drwxr-xr-x. 4 root root 4096 Aug 16 02:55 Downloads -rw-r–r–. 1 root root 21262 Aug 12 12:42 fbcmd_update.php -rw-r–r–. 1 root root 46701 Jul 31 09:58 index.html -rw-r–r–. 1 root root 48867 Jul 31 02:17 install.log -rw-r–r–. 1 root root 11439 Jul 31 02:13 install.log.syslog drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Music drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Pictures drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Public drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Templates drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Videos

Подробный список файлов ls

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

ls -l

Команда ls. Список файлов

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

ls -l /var/log

Команда ls - Список файлов в директории

Показать скрытые файлы ls -a

По умолчанию команда ls не показывает скрытые файлы. Что их показать, используется опция -a: ls -a

 

Определение расположения определенной папки ls

Сперва следует обязательно разобраться с процедурой перехода к необходимому расположению через «Терминал». Если вы будете осуществлять сканирование нескольких папок, находящихся в одной директории, проще это делать сразу из нужного места, чтобы избежать надобности ввода полного пути к объекту. Определяется место и выполняется переход так:

    1. Откройте файловый менеджер и перейдите в требуемую директорию.

Переход к необходимой директории через файловый менеджер Linux

    1. Щелкните по любому элементу в ней ПКМ и выберите «Свойства».

Свойства объекта в операционной системе Linux

    1. Во вкладке «Основные» обратите внимание на пункт «Родительская папка». Именно его и нужно запомнить для дальнейшего перехода.

Узнать родительскую папку объекта в Linux

    1. Осталось только запустить консоль удобным методом, например, зажатием горячей клавиши Ctrl + Alt + T либо нажав на соответствующий значок в меню.

Запустить терминал через значок в меню Linux

    1. Здесь введите cd /home/user/folder, чтобы перейти в интересующее расположение. User в данном случае — имя пользователя, а folder — название конечной папки.

Перейти по нужному пути через встроенную консоль в Linux

Теперь можно смело переходить к использованию рассматриваемой сегодня команды ls с применением различных аргументов и опций. Мы предлагаем ознакомиться с основными примерами более детально далее.

Понятный размер файлов

Вывести размер файлов в понятном формате (опция -h):

ls -lh

Просмотр содержимого текущей папки ls

Написав в консоли ls без каких-либо дополнительных опций, вы получите информацию о текущем расположении. Если после запуска консоли не было осуществлено никаких переходов через cd, отобразится список файлов и папок домашней директории.

Применение команды ls без аргументов в Linux

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

Ознакомиться с выводом информации командой ls без аргументов в Linux

Обозначить директории ls

У команды ls есть очень полезная опция -F, про которую не все знают. Она добавляет к именам файлов дополнительные обозначения, по которым сразу понятно что это за файл. Например, для директорий она добавляет символ /, и в списке файлов сразу видно где директории а где обычные файлы.

ls -lF

Список файлов в одну колонку

Вывести список в одну колонку:

ls -1

Вывести только файлы с определенным расширением

Выведем файлы только с расширением .txt:

ls *.txt

Выведем файлы с определенными расширениями (.html, .php и .txt):

ls *.{html,php,txt}

Файлы, начинающиеся на определенную букву

Показать только файлы, имена которых начинаются на одну из букв указанного множества (a, d, u и x):

ls [adux]*

Определение создателя папки

Синтаксис команды ls построен так же, как и у большинства других стандартных утилит, поэтому даже начинающий пользователь не найдет в этом ничего нового или незнакомого. Разберем первый пример при надобности просмотра автора папки и даты изменения. Для этого введите ls -l –author folder, где folder — название директории либо полный путь к ней. После активации вы увидите искомую информацию.

Узнать автора папки через команду ls в Linux

Список файлов с сортировкой по времени

Выведем список файлов с сортировкой по времени последнего изменения файла. Более свежие файлы располагаются сверху.

ls -lt

Сортировка по времени, но в обратном порядке:

ls -ltr

Вывод скрытых файлов

В ОС Linux присутствует достаточно большое количество скрытых элементов, особенно когда речь идет о системных файлах. Отобразить их вместе со всем остальным содержимым директории можно, применив определенную опцию. Тогда команда выглядит так: ls -a + название или путь к папке.

Отображение скрытых папок с помощью команды ls в Linux

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

Обратный порядок вывода

С помощью комбинации -ltr список будет сортироваться по дате последнего изменения от старых к новым.

# ls -ltr total 176 -rw-r–r–. 1 root root 11439 Jul 31 02:13 install.log.syslog -rw-r–r–. 1 root root 48867 Jul 31 02:17 install.log -rw——-. 1 root root 1586 Jul 31 02:17 anaconda-ks.cfg drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Desktop drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Videos drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Templates drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Public drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Pictures drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Music drwxr-xr-x. 2 root root 4096 Jul 31 02:48 Documents -rw-r–r–. 1 root root 46701 Jul 31 09:58 index.html -rw-r–r–. 1 root root 21262 Aug 12 12:42 fbcmd_update.php drwxr-xr-x. 4 root root 4096 Aug 16 02:55 Downloads -rw-r–r–. 1 root root 683 Aug 19 09:59 0001.pcap

Рекурсивный и инодный списки

Так вы можете использовать -d чтобы смотреть на директорию, но также можно использовать -R для противоположного: не только лишь глянуть внутрь директории, но и рекурсивно посмотреть все директории с файлами внутри нее! Мы не включим в руководство никакого примера вывода для этой опции (поскольку обычно он очень объемный), но возможно вы захотите попробовать несколько команд ls -R и ls -Rl, чтобы почувствовать как это работает.

Наконец, опция -i может использоваться для отображения числа инодов для объектов в списке файловой системы

$ ls -i /usr

1409 X11R6 314258 i686-linux 43090 libexec 13394 sbin 1417 bin 1513 i686-pc-linux-gnu 5120 local 13408 share 8316 distfiles 1517 include 776 man 23779 src 43 doc 1386 info 93892 portage 36737 ssl 70744 gentoo-x86 1585 lib 5132 portage.old 784 tmp

Понятие инода

Каждому объекту файловой системы назначен уникальный индекс, называемый номером инода. Это может показаться банальным, но понятие инодов очень важно для понимания большинства операций в файловой системе. Рассмотрим например ссылки “.” и “..”, которые появляются в каждой директории. Чтобы полностью понять, чем на самом деле является директория “..”, мы сперва взглянем на номер инода у /usr/local

$ ls -id /usr/local

5120 /usr/local

У директории /usr/local номер инода равен 5120. А теперь посмотрим номер инода у /usr/local/bin/..:

$ ls -id /usr/local/bin/..

5120 /usr/local/bin/..

Как видно, директория /usr/local/bin/.. имеет такой же номер, как у /usr/local! Посмотрим, как можно справиться с этим шокирующим откровением. В прошлом мы полагали, что /usr/local сама является директорией. Теперь же, мы обнаружили, что фактически директория — это инод с номером 5120, и нашли, по меньшей мере, два элемента (называемых «ссылками»), которые указывают на данный инод. И /usr/local, и /usr/local/bin/.. — ссылки на 5120-ый инод. Хотя этот инод и существует только в одном месте на диске, тем не менее на него может быть множество ссылок

На самом деле, мы даже можем увидеть общее количество ссылок ведущих на этот, 5120 инод, используя команду ls -dl:

$ ls -dl /usr/local

drwxr-xr-x 8 root root 240 Dec 22 20:57 /usr/local

Если взглянуть на вторую колонку слева, то видно, что на директорию /usr/local (инод 5120) ссылаются восемь раз. На моей системе на этот инод ведут следующие пути:

/usr/local

/usr/local/.

/usr/local/bin/..

/usr/local/games/..

/usr/local/lib/..

/usr/local/sbin/..

/usr/local/share/..

/usr/local/src/..

mkdir

Давайте быстренько пройдемся по команде mkdir, которая используется для создания новых директорий. Следующий пример создает три новых директории, tic, tac, и toe, все внутри /tmp:

$ cd /tmp

$ mkdir tic tac toe

По умолчанию, команда mkdir не создает для вас родительские директории; весь путь вплоть до последнего (создаваемого) элемента должен существовать. Так, если вы захотите создать вложенные директории won/der/ful, вам придется выполнить три отдельные команды mkdir:

$ mkdir won/der/ful

mkdir: cannot create directory `won/der/ful’: No such file or directory

$ mkdir won

$ mkdir won/der

$ mkdir won/der/ful

Однако, у mkdir есть очень удобная опция -p, которая говорит mkdir создавать любые отсутствующие родительские директории, как можете увидеть тут:

$ mkdir -p easy/as/pie

В целом очень просто. Чтобы узнать больше о команде mkdir наберите man mkdir и прочитайте инструкцию. Это же касается почти всех команд, рассмотренных здесь (например man ls), исключая cd, которая встроена в bash.

touch

Сейчас мы собираемся окинуть взглядом команды cp и mv, используемые для копирования, переименования и перемещения файлов и директорий. Но начнем обзор воспользовавшись командой touch, чтобы создать файл в /tmp:

$ cd /tmp

$ touch copyme

Команда touch обновляет «mtime» (время последней модификации — прим. пер.) файла, если тот существует (вспомните шестую колонку в выводе ls -l). Если файл не существует, то новый, пустой файл будет создан. Сейчас у вас должен быть файл /tmp/copyme с нулевым размером.

echo

Теперь, когда файл существует, давайте добавим немного данных в него. Можно сделать это с помощью команды echo, которая принимает аргументы и печатает их на стандартный вывод. Сперва, команда echo сама по себе:

$ echo “firstfile”

firstfile

А сейчас, та же команда echo, но с перенаправлением вывода:

$ echo “firstfile” > copyme

Знак «больше» сообщает оболочке записывать вывод echo в файл по имени copyme. Этот файл будет создан, если не существовал, или перезаписан, если существует. Набрав ls -l, увидим, что файл copyme имеет размер в 10 байт, так как содержит слово firstfile и символ новой строки:

$ ls -l copyme

-rw-r–r– 1 root root 10 Dec 28 14:13 copyme

cat и cp

Чтобы вывести содержимое файла на терминал, используйте команду cat:

$ cat copyme

firstfile

Сейчас, мы можем воспользоваться основным вызовом команды cp для создания файла copiedme из оригинального copyme:

$ cp copyme copiedme

Ниже проверим, что это действительно разные файлы; у них отличаются номера инодов:

$ ls -i copyme copiedme

648284 copiedme 650704 copyme

mv

А сейчас давайте воспользуемся командой mv для переименования copiedme в movedme. Номер иноды останется прежний; однако, имя файла, указывающее на инод, изменится.

$ mv copiedme movedme

$ ls -i movedme

648284 movedme

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

Пока мы рассказываем об mv, давайте посмотрим, как еще можно использовать эту команду. mv, помимо возможности переименовать файлы, позволяет перемещать один или более файлов в другое место в иерархии директорий. Например, чтобы переместить /var/tmp/myfile.txt в директорию /home/drobbins (которая является моей домашней), я наберу (а мог бы воспользоваться ~ — прим. пер.):

$ mv /var/tmp/myfile.txt /home/drobbins

После этого myfile.txt будет перемещен в /home/drobbins/myfile.txt. И если /home/drobbins располагается в другой файловой системе, нежели /var/tmp, команда mv скопирует myfile.txt в новую файловую систему и удалит его из старой. Как вы уже могли догадаться, когда myfile.txt перемещается между файловыми системами, то myfile.txt на новом месте получает новый номер инода. Это все потому, что у каждой файловой системы свой независимый набор номеров инодов.

Мы также можем воспользоваться mv для перемещения нескольких файлов в одну директорию. К примеру, чтобы переместить myfile1.txt и myarticle3.txt в /home/drobbins, потребуется набрать:

$ mv /var/tmp/myfile1.txt /var/tmp/myarticle3.txt /home/drobbins

Список ключей для команды ls.

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

  • -l — вывод подробной информации о содержимом каталога в виде списка;
  • -a (—all) — вывод информации о всех имеющихся объектах явных и скрытых;
  • -A (—allmost-all) — вывод информации о всех имеющихся явных и скрытых объектах (за исключением объектов «.» и «..»);
  • -d (—directory) — вывод информации о директории без вывода его содержимого;
  • -F — к объектам являющимся каталогами добавит в конце символ слеш «/», к объектам являющимися исполняемыми файлами добавляется «*», к объектам являющимися символьными ссылками — «@»;
  • -r (—reverse) — данные ключи меняют сортировку на обратную;
  • -i — отображение номера индексных дескрипторов объектов;
  • -S — сортировка объектов по размеру от большого к меньшему;
  • -Sr — сортировка объектов по размеру от меньшего;
  • -t — сортировка объектов по времени модификации файлов;
  • -R (—recursive) — вывод информации об имеющихся объектах в том числе и объектах во вложенных каталогах.

Способы работы с командой ls и ее ключи, упоминаемые в статье это далеко не весь список. Если вы желаете использовать всю мощь этой на первый взгляд простой команды, то как уже упоминалось ранее, более подробную информацию можно получить при вызове встроенного мануала $ man ls .

Заключение

В заключении нужно отметить, что несмотря на кажущуюся незатейливость команды ls, она является базовым инструментом системного администратора для «исследования» паутины ФС. И если можно так выразиться, средством для понимания её скрытого порядка и принципов работы.


[spoiler title=”Источники”]

  • https://losst.ru/komanda-ls-linux
  • https://www.vseprolinux.ru/komanda-ls
  • https://ITProffi.ru/komanda-ls-prosmotr-atributov-fajlov/
  • https://habr.com/ru/post/99291/
  • https://mordeniuss.ru/15-basic-ls-command-examples-in-linux/
  • https://pingvinus.ru/note/cmd-ls
  • https://lumpics.ru/linux-ls-command-examples/
  • https://world-hello.ru/linux/bash/commands/ls.html


[/spoiler]


2020-12-22T10:34:30
Linux