Displaying items by tag: gentoo - UniXoiD
дробовики.
заявка на кредит Тинькофф

11 примеров использования netstat

Команда netstat, входящая в стандартный набор сетевых инструментов UNIX, отображает различную network–related информацию, такую как сетевые подключения, статистику интерфейсов, таблицы маршрутизации, masquerade, multicast, и т.п.

В этой статье рассмотрим десять практических примеров использования команды netstat в Linux.

1. Список всех портов (как прослушиваемых, так и нет)

Перечислить все порты: netstat -a

# netstat -a | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:domain        *:*                     LISTEN
udp6       0      0 fe80::20c:29ff:fe68:ntp [::]:*

Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     20492    /var/run/mysqld/mysqld.sock
unix  2      [ ACC ]     STREAM     LISTENING     23323    /var/run/php5-fpm.sock

Перечислить все TCP порты: netstat -at

# netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:domain        *:*                     LISTEN
tcp        0      0 *:ssh                   *:*                     LISTEN
tcp        0      0 localhost:ipp           *:*                     LISTEN
tcp        0      0 *:http                  *:*                     LISTEN

Перечислить все UDP порты: netstat -au

# netstat -au
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
udp        0      0 localhost:domain        *:*
udp        0      0 *:bootpc                *:*
udp6       0      0 fe80::20c:29ff:fe68:ntp [::]:*

2. Список сокетов, находящихся в состоянии LISTEN

Перечислить все прослушиваемые порты: netstat -l

# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:domain        *:*                     LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN
udp        0      0 192.168.128.134:ntp     *:*

Перечислить прослушиваемые TCP порты: netstat -lt

# netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:domain        *:*                     LISTEN
tcp        0      0 localhost:ipp           *:*                     LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN

Перечислить прослушиваемые UDP порты: netstat -lu

# netstat -lu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
udp        0      0 *:bootpc                *:*
udp6       0      0 [::]:ntp                [::]:*

Перечислить прослушиваемые UNIX сокеты: netstat -lx

# netstat -lx
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     3141     /var/run/fail2ban/fail2ban.sock
unix  2      [ ACC ]     STREAM     LISTENING     20492    /var/run/mysqld/mysqld.sock
unix  2      [ ACC ]     STREAM     LISTENING     23323    /var/run/php5-fpm.sock

3. Просмотр статистики для каждого протокола

Показать статистику всех портов: netstat -s

# netstat -s
Ip:
    11150 total packets received
    1 with invalid addresses
    0 forwarded
    0 incoming packets discarded
    11149 incoming packets delivered
    11635 requests sent out
Icmp:
    13791 ICMP messages received
    12 input ICMP message failed.
Tcp:
    15020 active connections openings
    97955 passive connection openings
    135 failed connection attempts
Udp:
    2841 packets received
    180 packets to unknown port received.
.....

Показать статистику только TCP портов: netstat -st

# netstat -st

Показать статистику только UDP портов: netstat -su

# netstat -su

4. Отображение PID и имени процесса в выводе netstat

Опция netstat -p добавит «PID/Program Name» в вывод netstat, и может быть совмещена с любым другим набором опций. Это очень полезно при отладке, для определения того, какая программа работает на определённом порту.

# netstat -pt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 org-ru-putty.vm.udf:www 52-106.plus.kerch:55723 ESTABLISHED 9486/nginx: worker
tcp        0      0 org-ru-putty.vm.udf:www 52-106.plus.kerch:55757 ESTABLISHED 9486/nginx: worker

5. Разрешение имён в выводе netstat

Когда вам не нужно резолвить имя хоста, имя порта, имя пользователя, используйте опцию netstat -n для вывода значений в цифровом формате. Команда покажет IP-адрес вместо хоста, номер порта вместо имени порта, UID вместо имени пользователя.

Это также ускорит вывод, так как netstat не станет выполнять ненужный поиск.

# netstat -an

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

# netsat -a --numeric-ports

# netsat -a --numeric-hosts

# netsat -a --numeric-users

6. Вывод информации netstat непрерывно

Опция netstat -c будет выводить информацию непрерывно, в стиле top, обновляя экран каждые несколько секунд.

# netstat -c
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 org-ru-putty.vm.udf:www 182.131.74.202:59933    FIN_WAIT2
tcp        0      0 org-ru-putty.vm.udf:www 182.131.74.202:63761    FIN_WAIT2
tcp        0      0 org-ru-putty.vm.udf:www 92-181-66-102-irk.:4585 ESTABLISHED
^C

7. Неподдерживаемые системой семейства адресов

Опция netstat --verbose покажет подробный вывод, а в самом конце отобразит неподдерживаемые Address Family.

    netstat: no support for `AF IPX' on this system.
    netstat: no support for `AF AX25' on this system.
    netstat: no support for `AF X25' on this system.
    netstat: no support for `AF NETROM' on this system.

8. Маршрутизация ядра

Показать таблицу маршрутизации ядра: netstat -r

# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         192.168.128.2   0.0.0.0         UG        0 0          0 eth0
192.168.128.0   *               255.255.255.0   U         0 0          0 eth0

Примечание: Используйте netstat -rn для просмотра маршрута в цифровом формате без разрешения имён узлов.

9. Соответствие портов и процессов

Узнать, какой порт занимает определённая программа:

# netstat -ap | grep ssh
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 *:ssh                   *:*                     LISTEN      -
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      -

Выяснить, каким процессом используется определённый порт:

# netstat -an | grep ':80'

10. Сетевые интерфейсы

Показать список сетевых интерфейсов: netstat -i

# netstat -i
Kernel Interface table
Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500 0   1911037      0      0 0       1382056      0      0      0 BMRU
lo        16436 0         0      0      0 0             0      0      0      0 LRU

Показать расширенную информацию об интерфейсах (аналогично ifconfig): netstat -ie

# netstat -ie
Kernel Interface table
eth0      Link encap:Ethernet  HWaddr 00:0c:29:68:4c:a4
          inet addr:192.168.128.134  Bcast:192.168.128.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe68:4ca4/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:24278 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11275 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:33203025 (33.2 MB)  TX bytes:665822 (665.8 KB)
          Interrupt:19 Base address:0x2000

11. netstat -lnptux

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

  • -l все открытые порты (LISTEN)
  • -t по протоколу TCP
  • -u по протоколу UDP
  • -x по протоколу UNIX Socket
  • -n без резолва IP/имён
  • -p но с названиями процессов и PID-ами

Примечание: Не все процессы могут быть идентифицированы последним ключом, чужие процессы показаны не будут. Вы должны иметь права root чтобы увидеть всё.

# netstat -lnptux
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9614/nginx
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      601/sshd
udp        0      0 8.8.4.4:123             0.0.0.0:*                           574/ntpd
udp        0      0 127.0.0.1:123           0.0.0.0:*                           574/ntpd
udp        0      0 0.0.0.0:123             0.0.0.0:*                           574/ntpd
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name    Path
unix  2      [ ACC ]     STREAM     LISTENING     4233     826/python          /var/run/fail2ban/fail2ban.sock
unix  2      [ ACC ]     STREAM     LISTENING     8122     2561/mysqld         /var/run/mysqld/mysqld.sock
unix  2      [ ACC ]     STREAM     LISTENING     160413   7301/php-fpm.conf   /var/run/php5-fpm.sock
Четверг, 07 мая 2020 00:00

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

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

Диски, использующие электронные ячейки памяти (SSD — Solid State Drive), мало весят, работают бесшумно и потребляют втрое меньше энергии, чем жёсткие диски (HDD). Однако главная причина их популярности – фантастическая скорость работы. Операционная система загружается быстро, операции с файлами большого размера выполняются значительно быстрее.

 

Недостаток твердотельных накопителей – износ ячеек. Память деградирует в процессе перезаписи данных. В среднем через 0,5-3 года диск может выйти из строя. Для того, чтобы продлить жизнь накопителя, использование Linux на SSD должно подчиняться определённым правилам. Каким – рассмотрим в этом материале.

Особенности работы SSD

Классические жёсткие диски (HDD) хранят данные в магнитном слое. Для чтения и записи используется позиционируемая магнитная головка. Перемещение считывателя требует какого-то времени, поэтому скорость работы HDD ограничена.

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

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

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

В Интернете есть сотни советов, выдаваемых поисковиками по запросу "Установка Linux на SSD", однако мы советуем воспринимать написанное с осторожностью. Остановимся на моментах, способствующих улучшению состояния SSD-хранилища без риска потери данных.

Как установить Linux на SSD?

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

1. Выбор файловой системы

На данном этапе для Unix разработаны специальные файловые системы, учитывающие особенности работы SSD-дисков:

  • Extended4 (ext4) – самая популярная и стабильная файловая система в этой среде, поддерживающая отключаемое журналирование, а также функцию TRIM.
  • BtrFS – файловая система, разработанная инженерами Oracle, поддерживает зеркальные копии структур данных и контрольные суммы, что позволяет легко восстанавливать файлы при повреждении. Журналы не ведутся, поэтому дополнительной нагрузки на диск не возникает.
  • XFS – файловая система, разработанная Silicon Graphics для работы с большими файлами, журналы ведутся только для регистрации изменений структур данных.
  • Flash-Friendly File System (F2FS) – разработка Samsung специально для флешек и SSD. Учитывает особенности износа памяти, собирает данные в пакет, который затем записывает в свободные области за один цикл.

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

2. Настройка файла подкачки

Оперативной памяти много не бывает. Если у вас её меньше, чем 4 Гб, рекомендуем докупить и установить дополнительные планки. В этом случае файл подкачки будет меньше задействован операционной системой. Отсюда следует резонный вопрос: нужен ли swap для Linux на SSD?

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

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

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

cat /proc/sys/vm/swappiness

Ustanovka Linux na SSD 1

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

sudo nano /etc/sysctl.conf

Перейдите в конец файла, нажав на клавиатуре сочетание Alt-/, и добавьте строку:

vm.swappiness=5

Ustanovka Linux na SSD 2

 

Закройте редактор, сохранив изменения в отредактированном файле. Новые настройки вступят в силу после перезагрузки операционной системы.

3. Настройка монтирования в fstab

После того, как установка Linux на SSD завершена, рекомендуется изменить настройки монтирования. Особенностью Unix-систем является наличие специального атрибута у файлов — времени последнего доступа (access time stamp). Этот атрибут перезаписывается каждый раз при обращении какого-либо процесса к файлу. Необходимость атрибута сомнительна, а нагрузка на SSD существенна.

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

sudo nano /etc/fstab

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

Ustanovka Linux na SSD 4

Изменённые строки должны выглядеть так:

UUID=xxxxxxx / ext4 noatime,errors=remount-ro 0 1

UUID=xxxxxxx /storage ext4 noatime,defaults 0 1

4. Настройка TRIM

Настройка SSD в Linux близится к завершению. Остаётся рассмотреть метод TRIM. Так как ячейки памяти изнашиваются, встроенный контроллер каждый раз записывает данные в новые блоки. Когда свободное место подходит к концу, диск начинает притормаживать.

Файлы в операционной системе исправляются, затираются, удаляются. Задача команды TRIM (Data Set Management) – сообщить контроллеру SSD, что те или иные блоки данных уже пусты и в них можно опять записывать информацию.

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

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

fstrim -av ; echo $

Добавьте в файл /etc/cron.weekly/fstrim.timer следующие строки:

[Timer]
OnCalendar=daily

Закройте редактор, сохранив изменения в отредактированном файле. Для применения настроек перегрузите компьютер или выполните команду:

sudo systemctl daemon-reload

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

systemctl cat fstrim.timer

Всё в порядке, команда TRIM теперь будет выполняться ежедневно.

Выводы

Твердотельный накопитель работает в 100 раз быстрее, чем магнитный диск, однако также имеется и своя специфика использования. Последние версии Windows или Ubuntu учитывают особенности SSD, поэтому могут быть рекомендованы к использованию с этими устройствами. Для того, чтобы установить Linux на SSD, не нужны какие-то особые знания. Мастер установки подскажет, какие шаги надо выполнить.

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

systemd-analyze

Ustanovka Linux na SSD 8

 

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

Понедельник, 04 июня 2018 00:00

В чем прелесть Gentoo: Мифы и реальность

В ходе прочтения этой статьи и комментариев к ней, у меня сформировалось стойкое ощущение, что большинство пользователей, использующих другие дистрибутивы, имеют не совсем верное представление о gentoo-like системах. Скорее всего виновато в этом само словосочетание «source-based».

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

Все, конечно, просто… но не совсем.


Несмотря на бодрое начало, надо уточнить, что ряд сложностей в сравнении с другими (например дебианом и пресловутой убунтой) все же присутствует.
  1. Без документации никуда. Вам придется немало прочесть, чтобы установить этот дистрибутив. Крайне желательно, чтобы она была прочитана на английском, т.к. русская версия не всегда имеет актуальную версию
  2. Консоль — наше все. Если у вас консолефобия, вам придется побороть себя. Она тут всегда и везде: установка, обновление, настройка, все это и многое другое.
  3. Если вам срочно понадобится переустановить систему, или поставить её на новую машину, то это может занять довольно много времени. Помните об этом, когда ставите gentoo в продакшн.


Скорость


Многие считают, что gentoo предоставит им огромный выигрыш в скорости работы программ. Но давайте посмотрим сами. На топовом железе и так все довольно шустро работает, за исключение bloatware-дистрибутивов, и, как правило, разница между дебиан и гентой не столь велика, чтобы заморачиваться в большинстве случаев. А на более слабом железе, где, казалось бы, и нужна оптимизация, выигрыш будет очень небольшой, в виду того, что не велика разница между набором инструкций вашего процессора, и, например i686.
Так что ускорение работы тут скорее от отключения ненужных фич и уменьшения размеров ПО. Также не надо забывать, что скорость эта будет куплена ценой скорости сборки и установки ПО. Последняя, впрочем, не столь большая, как кажется. Времена, когда переборка системы занимала дни, прошли. :)

Сложность


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


Приложения и стабильность


Ну, со спорными моментами, вроде, закончили (почти), а теперь вкусности! Я не просто так объединил эти два пункта. Именно метод установки, обновления и удаления приложений вносит существенный вклад в стабильность системы. Приложений много. Очень много. Если сомневаетесь, поищите нужные вам утилиты, например, тут.
  • Установка всего этого многообразия происходит через утилиты emerge и eix. Замечательной чертой gentoo является действительно стабильная «стабильная ветка», совмещенная с возможностью безболезненной установки свежих версий нужных вам программ. В принципе, можно полностью сидеть на нестабильном ПО, просто зачем? И наоборот, зная, что какие-то версии плохо работают в моем случае, есть возможность не обновляться на них.
  • В разрешение проблем с зависимостями вносят свой вклад система слотов, дающая возможность устанавливать множество версий одной библиотеки, и отключение зависимостей через отключение USE-флагов. Часто пугают необходимостью собирать ядро, но на самом деле в этом нет ничего сложного, и с помощью genkernel не требует какого-то особого мастерства.
  • Те, кто заботится о карме лицензионной чистоте, могут указать с какими лицензиями можно ставить ПО.
  • Rolling-релизы делают обновление более безболезненным.
  • Утилита eselect поможет выставить ряд переменных среды, например, дефолтные питон и яву.


Заключение


Хочется сказать, что я ни в коем случае не хочу умалять заслуги других дистрибутивов. Многие, из описанных мной возможностей, присутствуют и в них, но…
Благодаря сложной установке и высокому порогу вхождения, gentoo обладает очень хорошей документацией и вики, что гарантирует, что пользователь, как минимум, натолкнется на существование большинства этих фич до того, как они ему понадобятся. А это ИМХО благо, ибо избавляет от стресса, который возникает при необходимости решить задачу, методов решения которой ты даже не представляешь. Рано или поздно в любом дистрибутиве ты попадешь в консоль. Приятно иметь под рукой привычные инструменты, способные решить твою проблему, а не искать их на форумах.

P.S. или глубокое ИМХО


Я выбрал gentoo за то, что она для меня оказалась проще и понятнее в использовании, чем другие. Все предсказуемо, и большая часть описана в качественной документации.
P.P.S Ну и красивая консоль из коробки тоже сыграла свою роль. :)
Воскресенье, 03 июня 2018 00:00

Поиск текста в файлах Linux

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

 

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

Что такое grep?

Команда grep (расшифровывается как global regular expression print) — одна из самых востребованных команд в терминале Linux, которая входит в состав проекта GNU. Секрет популярности — её мощь, она даёт возможность пользователям сортировать и фильтровать текст на основе сложных правил.

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

Синтаксис grep

Синтаксис команды выглядит следующим образом:

$ grep [опции] шаблон [имя файла…]

Или:

$ команда | grep [опции] шаблон

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

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

Опции

Давайте рассмотрим самые основные опции утилиты, которые помогут более эффективно выполнять поиск текста в файлах grep:

  • -b — показывать номер блока перед строкой;
  • -c — подсчитать количество вхождений шаблона;
  • -h — не выводить имя файла в результатах поиска внутри файлов Linux;
  • -i — не учитывать регистр;
  • — l — отобразить только имена файлов, в которых найден шаблон;
  • -n — показывать номер строки в файле;
  • -s — не показывать сообщения об ошибках;
  • -v — инвертировать поиск, выдавать все строки кроме тех, что содержат шаблон;
  • -w — искать шаблон как слово, окружённое пробелами;
  • -e — использовать регулярные выражения при поиске;
  • -An — показать вхождение и n строк до него;
  • -Bn — показать вхождение и n строк после него;
  • -Cn — показать n строк до и после вхождения;

Все самые основные опции рассмотрели и даже больше, теперь перейдём к примерам работы команды grep Linux.

Примеры использования

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

Поиск текста в файлах

В первом примере мы будем искать пользователя User в файле паролей Linux. Чтобы выполнить поиск текста grep в файле /etc/passwd введите следующую команду:

grep User /etc/passwd

В результате вы получите что-то вроде этого, если, конечно, существует такой пользователь:

User:x:1000:1000:User,,,:/home/User:/bin/bash

А теперь не будем учитывать регистр во время поиска. Тогда комбинации ABC, abc и Abc с точки зрения программы будут одинаковы:

grep -i "user" /etc/passwd

Вывести несколько строк

Например, мы хотим выбрать все ошибки из лог-файла, но знаем, что в следующей строчке после ошибки может содержаться полезная информация, тогда с помощью grep отобразим несколько строк. Ошибки будем искать в Xorg.log по шаблону «EE»:

grep -A4 "EE" /var/log/xorg.0.log

Выведет строку с вхождением и 4 строчки после неё:

grep -B4 "EE" /var/log/xorg.0.log

Выведет целевую строку и 4 строчки до неё:

grep -C2 "EE" /var/log/xorg.0.log

 

Выведет по две строки с верху и снизу от вхождения.

Регулярные выражения в grep

Регулярные выражения grep — очень мощный инструмент в разы расширяющий возможности поиска текста в файлах. Для активации этого режима используйте опцию -e. Рассмотрим несколько примеров:

Поиск вхождения в начале строки с помощью спецсимвола «^», например, выведем все сообщения за ноябрь:

grep "^Nov 10" messages.1

Nov 10 01:12:55 gs123 ntpd[2241]: time reset +0.177479 s
Nov 10 01:17:17 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10

Поиск в конце строки — спецсимвол «$»:

grep "terminating.$" messages

Jul 12 17:01:09 cloneme kernel: Kernel log daemon terminating.
Oct 28 06:29:54 cloneme kernel: Kernel log daemon terminating.

Найдём все строки, которые содержат цифры:

grep "[0-9]" /var/log/Xorg.0.log

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

Рекурсивное использование grep

Если вам нужно провести поиск текста в нескольких файлах, размещённых в одном каталоге или подкаталогах, например в файлах конфигурации Apache — /etc/apache2/, используйте рекурсивный поиск. Для включения рекурсивного поиска в grep есть опция -r. Следующая команда займётся поиском текста в файлах Linux во всех подкаталогах /etc/apache2 на предмет вхождения строки mydomain.com:

grep -r "mydomain.com" /etc/apache2/

В выводе вы получите:

grep -r "zendsite" /etc/apache2/
/etc/apache2/vhosts.d/zendsite_vhost.conf: ServerName zendsite.localhost
/etc/apache2/vhosts.d/zendsite_vhost.conf: DocumentRoot /var/www/localhost/htdocs/zendsite
/etc/apache2/vhosts.d/zendsite_vhost.conf: <Directory /var/www/localhost/htdocs/zendsite>

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

grep -h -r "zendsite" /etc/apache2/

ServerName zendsite.localhost
DocumentRoot /var/www/localhost/htdocs/zendsite
<Directory /var/www/localhost/htdocs/zendsite>

Поиск слов в grep

Когда вы ищете строку abc, grep будет выводить также kbabc, abc123, aafrabc32 и тому подобные комбинации. Вы можете заставить утилиту искать по содержимому файлов в Linux только те строки, которые выключают искомые слова с помощью опции -w:

grep -w "abc" имя_файла

Поиск двух слов

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

egrep -w 'word1|word2' /path/to/file

Количество вхождений строки

Утилита grep может сообщить, сколько раз определённая строка была найдена в каждом файле. Для этого используется опция -c (счетчик):

grep -c 'word' /path/to/file

C помощью опции -n можно выводить номер строки, в которой найдено вхождение, например:

grep -n 'root' /etc/passwd

Получим:

1:root:x:0:0:root:/root:/bin/bash

Инвертированный поиск в grep

Команда grep Linux может быть использована для поиска строк в файле, которые не содержат указанное слово. Например, вывести только те строки, которые не содержат слово пар:

grep -v пар /path/to/file

Вывод имени файла

Вы можете указать grep выводить только имя файла, в котором было найдено заданное слово с помощью опции -l. Например, следующая команда выведет все имена файлов, при поиске по содержимому которых было обнаружено вхождение primary:

grep -l 'primary' *.c

Цветной вывод в grep

Также вы можете заставить программу выделять другим цветом вхождения в выводе:

grep --color root /etc/passwd

Получится:

1

Выводы

Вот и всё. Мы рассмотрели использование команды grep для поиска и фильтрации вывода команд в операционной системе Linux. При правильном применении эта утилита станет мощным инструментом в ваших руках. Если у вас остались вопросы, пишите в комментариях!

Суббота, 02 июня 2018 00:00

Аналоги WinRAR для Linux

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

 

У многих пользователей, которые только перешли на Linux, часто возникает вопрос, а есть ли какие-либо менеджеры архивов под данную ОС, которые будут нормальной альтернативой WinRAR. Далее я покажу вам 4 хорошие, на мой взгляд, программы.

Аналоги WinRAR в Linux

По сути все архиваторы для Linux, которые работают в графическом интерфейсе, являются оболочками для консольных утилит, поэтому они поддерживают одни и те же форматы архивов. Но для этой поддержки нужно, чтобы в системе были установлены соответствующие утилиты (zip, unzip, rar, unrar, tar, lzma, p7zip, bzip2 и другие), если они вам нужны.

1. Ark

Архиватор, входящий в комплект программ KDE. Код программы написан на C++, интерфейс с использованием Qt. По сути является графической оболочкой для библиотек и консольных приложений, работающих с архивами. Распространяется под лицензией GPL.

Ubuntu

Ark присутствует в основном репозитории, просто введите следующую команду:

sudo apt install ark

Arch

Данный архиватор также имеется в стандартных репозиториях Arch:

sudo pacman -S ark

2. File Roller

Аналог WinRAR Linux, разрабатываемый для оболочки Gnome (но это не значит, что её можно использовать только там). По сути File Roller является Front-end, графической оболочкой, дающей пользователю единый интерфейс для различных консольных архиваторов. Данная программа написана на C, а интерфейс на GTK+. Распространяется под лицензией GPL.

Внимание! На момент написания статьи программа не обновлялась с 23.09.13!

Ubuntu

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

 

sudo apt install file-roller

Arch

Программа также есть в стандартных репозиториях:

sudo pacman -S file-roller

3. PeaZIP

Бесплатный, кроссплатформенный архиватор, написанный на Object Pascal и Pascal. Распространяется для Windows 9x, Windows NT и Linux. Имеет свой формат пакетов «*.pea», который поддерживает многотомные архивы, сжатие, системы шифрования и контроля целостности. Работа же с другими форматами чаще обеспечивается за счёт различных внешних библиотек. Интерфейс программы имеет реализацию как на Qt, так и на GTK+. Распространяется под лицензиями GPL и LGPL.

Внимание! Поддержка кодировки UTF-8 реализована не полностью!

Ubuntu

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

Arch

Данного пакета нет и в стандартных репозиториях Arch, так что придётся воспользоваться AUR. Qt версия:

yaourt -S peazip-qt

Gtk версия:

yaourt -S peazip-gtk2

4. Xarchiver

Легковесный файловый архиватор. Архиватор по умолчанию для таких сред, как LXDE и XFCE. Написана данная программа на C, интерфейс же построен на GTK+. Распространяется под лицензией GPLv2.

Внимание! Разработка приостановлена!

Ubuntu

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

sudo apt install xarchiver

Arch

Пакет с данной программой есть и в официальных репозиториях Arch:

sudo pacman -S xarchiver

Выводы

В данной статье мы рассмотрели несколько программ, которые можно использовать как аналоги WinRAR Linux. Какую из них использовать, решать вам. А каким архиватором предпочитаете пользоваться вы? Напишите в комментариях!

Четверг, 24 мая 2018 00:00

Как создать пользователя Linux

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

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

Создание пользователя в Linux

Вся информация о пользователях находится в файле /etc/passwd. Мы могли бы создать пользователя linux просто добавив его туда, но так делать не следует, поскольку для этой задачи существуют специальные утилиты. Одна из таких утилит, это useradd. Рассмотрим ее подробнее.

Команда useradd

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

$ useradd опции имя_пользователя

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

  • -b — базовый каталог для размещения домашнего каталога пользователя, по умолчанию /home;
  • -c — комментарий к учетной записи;
  • -d — домашний каталог, в котором будут размещаться файлы пользователя;
  • -e — дата, когда учетная запись пользователя будет заблокирована, в формате ГГГГ-ММ-ДД;
  • -f — заблокировать учетную запись сразу после создания;
  • -g — основная группа пользователя;
  • -G — список дополнительных групп;
  • -k — каталог с шаблонами конфигурационных файлов;
  • -l — не сохранять информацию о входах пользователя в lastlog и faillog;
  • -m — создавать домашний каталог пользователя, если он не существует;
  • -M — не создавать домашнюю папку;
  • -N — не создавать группу с именем пользователя;
  • -o — разрешить создание пользователя linux с неуникальным идентификатором UID;
  • -p — задать пароль пользователя;
  • -r — создать системного пользователя, не имеет оболочки входа, без домашней директории и с идентификатором до SYS_UID_MAX;
  • -s — командная оболочка для пользователя;
  • -u — идентификатор для пользователя;
  • -D — отобразить параметры, которые используются по умолчанию для создания пользователя. Если вместе с этой опцией задать еще какой-либо параметр, то его значение по умолчанию будет переопределено.

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

useradd -D

Как видите, по умолчанию домашний каталог пользователя будет создан в /home и будет использоваться оболочка /bin/sh. Теперь создадим минимального пользователя с минимальными настройками:

sudo useradd test

 

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

sudo useradd -p password -s /bin/bash test1

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

sudo useradd -G adm,cdrom,wheel -p password -s /bin/bash test2

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

sudo useradd -G adm,cdrom,wheel -p password -s /bin/bash -e 01:01:2018 test2

Некоторых пользователей интересует создание пользователя с правами root linux, это очень просто делается с помощью useradd, если комбинировать правильные опции. Нам всего лишь нужно разрешить создавать пользователя с неуникальным uid, установить идентификатор в 0 и идентификатор основной группы тоже в 0. Команда будет выглядеть вот так:

sudo useradd -o -u 0 -g 0 -s /bin/bash newroot

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

Создание нового пользователя linux в GUI

В графическом интерфейсе системы создать нового пользователя linux еще проще. Рассмотрим окружение Gnome, хотя и в KDE тоже есть аналогичная функция. Войдите в главное меню и откройте параметры системы:

Затем откройте «Пользователи»:

Поскольку утилита запущена от имени обычного пользователя вы ничего не можете сделать. Поэтому нажмите кнопку «Разблокировать»:

Только после этого используйте кнопку со знаком плюс для создания нового пользователя Linux:

После этого создание пользователя linux завершено, новый пользователь появится в списке.

Выводы

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

В этой инструкции мы рассмотрим как удалить пользователя Linux вместе с его данными и домашним каталогом.

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

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

Перед тем как переходить к действиям в реальной среде нужно немного попрактиковаться, давайте создадим два пользователя unixoid и unixoid1, вместе с домашними каталогами, а затем уже будем их удалять:

adduser unixoid
$ passwd unixoid

adduser unixoid1
$ passwd unixoid1

Здесь команда adduser используется для создания учетной записи пользователя, а passwd для создания пароля.

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

Давайте рассмотрим, как удалить пользователя Linux в терминале. Для этого используется команда — deluser в debian и производных системах, а в RedHat — userdel. Рассмотрим подробнее эти две утилиты.

Описание deluser

Синтаксис команды deluser очень простой:

$ deluser параметры пользователь

Настройки команды deluser находятся в файле /etc/deluser.conf, среди прочих настроек там указанно что нужно делать с домашней папой и файлами пользователя.

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

vi /etc/deluser.conf

Рассмотрим подробнее эти настройки:

  • REMOVE_HOME — удалять домашний каталог пользователя
  • REMOVE_ALL_FILES — удалить все файлы пользователя
  • BACKUP — выполнять резервное копирование файлов пользователя
  • BACKUP_TO — папка для резервного копирования
  • ONLY_IF_EMPTY — удалить группу пользователя если она пуста.

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

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

  • —system — удалять только если это системный пользователь
  • —backup — делать резервную копию файлов пользователя
  • —backup-to — папка для резервных копий
  • —remove-home — удалять домашнюю папку
  • —remove-all-files — удалять все файлы пользователя в файловой системе

Описание userdel

Утилита userdel работает немного по-другому, файла настроек здесь нет, но есть опции, с помощью которых можно сообщить утилите что нужно сделать. Синтаксис аналогичный:

$ userdel параметры пользователь

  • -f, —force — принудительное удаление, даже если пользователь еще залогинен
  • -r, —remove — удалить домашнюю директорию пользователя и его файлы в системе.
  • -Z — удалить все SELinux объекты для этого пользователя.

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

Блокировка учетной записи пользователя

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

 

Выполните команду passwd с параметром —lock:

 passwd --lock unixoid

passwd: информация об истечении срока действия пароля изменена.

Уничтожить все запущенные процессы пользователя

Теперь давайте найдем все запущенные от имени пользователя процессы и завершим их.

Найдем процессы с помощью pgrep:

pgrep -u unixoid

14684
14735

Посмотреть подробнее, что это за процессы можно передав pid, каждого из них в команду ps, вот так:

ps -f --pid $(pgrep -u unixoid)

UID PID PPID C STIME TTY STAT TIME CMD
unixoid  14684 14676 0 22:15 pts/2 S 0:00 -bash
unixoid  14735 14684 0 22:15 pts/2 S+ 0:00 vi text

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

Killall -9 -u unixoid

Опция -9 говорит программе, что нужно отправить этим процессам сигнал завершения SIGKILL, а -u задает имя пользователя.

В основанных на Red Hat системах, для использования killall необходимо будет установить пакет psmisc:

sudo yum install psmisc

Резервное копирование данных пользователя

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

tar jcvf /user-backups/unixoid-backup.tar.bz2 /home/unixoid

Удаление учетной записи пользователя

Теперь, когда все подготовлено, начинаем удаление пользователя linux. На всякий случай укажем явно, что нужно удалять файлы пользователя и домашнюю директорию. Для Debian:

deluser --remove-home unixoid

Для Red Hat:

userdel --remove unixoid

Если нужно удалить все файлы, принадлежащие пользователю в системе используйте опцию —remove-all-files, только будьте с ней осторожны, так и важные файлы можно затереть:

deluser --remove-all-files unixoid

Теперь пользователь полностью удален, вместе со своими файлами и домашней директорией из вашей системы.

Удаление пользователя в Ubuntu

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

Откройте Параметры системы:

ubuntu-settings

Откройте пункт Учетные записи:

ubuntu

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

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

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

ubuntu1

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

Выводы

Удалить пользователя в linux не так уж сложно, независимо от того где это нужно сделать, на сервере или домашнем компьютере. Конечно, графический интерфейс более удобен, но в терминал, как всегда, предлагает больше возможностей. Если у вас есть еще какие-нибудь идеи по этому поводу, напишите в комментариях!

О сайте

Вы попали на сайт о UNIX подобных операционных системах. Здесь вы сможете получить навыки работы с UNIX подобными операционными системами, а также быть в курсе новостей в мире UNIX.

Контакты

  • E-mail: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
  • E-mail: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Gentoo

Mikrotik

Android