Сообщество - GNU/Linux
Добавить пост

GNU/Linux

1 040 постов 15 539 подписчиков

Популярные теги в сообществе:

Символьные шаблоны

Это способы найти в чём-то схожие фрагменты текста или кратко выразить длинный текст. Потом текст как-то обрабатывается (возможно, по другому шаблону) либо хотя бы выводится (на экран или в файл). Есть сколько-то диалектов шаблонов. Популярны три: "раскрытие имён в командной оболочке" (filename expansion, или globbing), "регулярные выражения POSIX" и "регулярные выражения, аналогичные применяемым в языке Perl" (Perl-compatible regular expressions, PCRE). Последние здесь не описаны.


Любой фрагмент текста является шаблоном (pattern) для самого себя. В пейджерах и редакторах есть функциональность поиска по фрагменту как он есть и, возможно, по шаблону на каком-либо диалекте. Для автоматизации применяют отдельные программы поиска по тексту: grep и более сложные awk, sed. Для тренировки можно, например, сделать текстовый вариант какой-либо man-страницы:


$ env COLUMNS=60 man bash | col -b > bash.txt


$ grep -i "pattern matching" < bash.txt

below under Pattern Matching, as if the extglob

sion and pattern matching.

matching the pattern (see Pattern Matching below).

Pattern Matching

performs pattern matching as described above

pattern matching bracket expressions

(see Pattern Matching above) behave


Обычно программа grep выводит всю строку с совпавшим фрагментом. Перенаправление ввода для "bash.txt" здесь просто для наглядности. Опция -i означает "игнорировать регистр", то есть, например, символы p и P считаются одинаковыми. Но коды строчных и заглавных букв отличаются. Для каждого алфавита программам нужны свои правила распознавания букв.


Параграф под заголовком "Pattern Matching" в man-странице Bash описывает как раз шаблоны раскрытия имён. Найдено семь строк, а нужна одна (четвёртая). Она отличается, например, тем, что после Matching строка заканчивается. В регулярных выражениях конец строки помечают знаком $; начало - ^.


$ grep -i -A 8 "pattern matching$" < bash.txt

Pattern Matching


Any character that appears in a pattern, other than

the special pattern characters described below,

matches itself. The NUL character may not occur in

a pattern. A backslash escapes the following char‐

acter; the escaping backslash is discarded when

matching. The special pattern characters must be

quoted if they are to be matched literally.


Теперь точно найдена одна строка; остальные - результат опции "-A 8", то есть "восемь линий после найденной". Это бывает удобно для уточнения (действительно ли найдено нужное) или для составления краткой сводки. Документация: страницы man и info для grep.


Программа find находит файлы по метаданным; результат можно перенаправить в grep, чтобы дальше искать уже по текстовому содержимому. Пример (вывод не показан):


$ find . -type f -iname "*.txt" -print0 \

| xargs -0 grep -i "09.2017"


Здесь find находит файлы с именем, заканчивающимся на ".txt". Символ * означает "любое (в том числе нисколько) количество любых символов". Опция -0 - для приёма нуль-терминальных строк от опции -print0. Вся команда должна в итоге выдать записи за сентябрь 2017 года, обнаруженные (если есть) в содержимом (не в метаданных) найденных текстовых файлов.


Сама grep тоже может выполнить поиск файлов - обработать полное содержимое рабочего каталога с опцией -R. Но тогда ей придётся прочитать содержимое всех файлов. С find будет быстрее, если примерно известно имя файла.


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


Шаблон может включать в себя фрагменты имён и метасимволы вперемешку. Символы *, ? и некоторые другие в шаблонах называют "метасИмволами" (metacharacters), или "джОкерными символами" (wildcard characters), - в том смысле, что они представляют не самих себя. Чтобы метасимвол (или нетипичный символ) был воспринят как есть, его нужно экранировать. Или заключить в кавычки: шаблон внутри кавычек не раскрывается оболочкой. Прочие символы (буквы, цифры...) воспринимаются как есть.


Например, вы смутно помните, что где-то был файл с именем, начинающимся на par. Тогда шаблон для find или оболочки будет выглядеть так: "par*". Или приведённый выше шаблон "*.txt" - для всех имён файлов, заканчивающихся на ".txt".


Когда оболочка разбирает команду, то раскрывает шаблоны (globbing), то есть заменяет их на подходящие имена. Вместо шаблона программа в команде получает от оболочки подходящий список имён файлов (если есть) из рабочего или заданного каталога (не вложенных). Можно потренироваться с программой echo (или ls):


# Создать тестовые файлы и каталоги.

$ mkdir testdir

$ cd !^

$ mkdir .hd1 .hd2

$ touch .hf1 .hf2 \

a.txt b.txt \

f1 f2 f3 f4 f5 f6 f7 f8 f9 f10


# Символ * означает "любое (в том числе нисколько)

# количество любых символов". (Есть исключение.)

$ echo f*

f1 f10 f2 f3 f4 f5 f6 f7 f8 f9

$ echo *

a.txt b.txt f1 f10 f2 f3 f4 f5 f6 f7 f8 f9

$ echo *.txt

a.txt b.txt

# Символ ? означает "один любой символ".

$ echo ???

f10

# Если нечем раскрывать шаблон, оболочка передаёт его

# программе как есть.

$ echo ????

????

# "Имена длиной не менее трёх символов".

$ echo ???*

a.txt b.txt f10

# Квадратные скобки в шаблонах содержат возможные варианты

# одиночных символов.

$ echo f[1-4]

f1 f2 f3 f4

$ echo f[579]

f5 f7 f9

$ echo [ab].???

a.txt b.txt

# Символ ^ или ! означает отрицание/несовпадение.

$ echo .h[^f]*

.hd1 .hd2

$ echo f[!1-4]

f5 f6 f7 f8 f9

# Бывает, что ввести список вручную или из файла

# оказывается проще, чем составить шаблон.

$ echo .h[df][^2]

.hd1 .hf1


Шаблон "*" (без кавычек) не раскрывается в имена скрытых файлов (вида ".имя"). Здесь шаблон ".*" тоже не годится, потому что раскрывается в том числе в имена-ссылки "." и "..". Значит, верный шаблон должен соответствовать такому набору символов: точка, затем не точка, затем любые другие символы либо ничего. Итого:


$ echo .[!.]*

.hd1 .hd2 .hf1 .hf2


Шаблонов, как любых аргументов, может быть несколько, поэтому для всех (не вложенных) файлов каталога нужно два шаблона (вывод не показан):


$ echo .[!.]* *


Первоначально [под]множества символов были диапазонами ASCII-символов: A-Z, a-z, 0-9 - основанными на диапазонах кодов. Для кириллицы и других алфавитов диапазоны в шаблоне могут не сработать.


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


$ mkdir ~/testdir2

$ cp ~/testdir1/f[1-9]* ~/testdir2/


Традиционное предупреждение: постарайтесь не сделать вот такую опечатку (лишний пробел между 2 и /), особенно работая от имени суперпользователя:


$ rm -rf ~/testdir2 /*


Потому что шаблон "/*" будет раскрыт в содержимое корневого каталога. Операция удаления (прервать - как обычно Ctrl C) может уничтожить и операционную систему, и ценные данные.

Диапазон или перечисление в Bash также можно задать фигурными скобками:


$ echo f{1..10}

f1 f2 f3 f4 f5 f6 f7 f8 f9 f10

$ echo f{,5,7,9}

f f5 f7 f9

$ echo {a..c}{1,2,3}

a1 a2 a3 b1 b2 b3 c1 c2 c3


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


$ mkdir -p ~/testdir1/2018/{01..12}


Шаблон внутри кавычек не раскрывается. Есть разница в обработке кавычек оболочкой. Обратные (`) применяют для подстановки команд; равноценный синтаксис - $(). Одиночные (') и двойные (") - для указания/уточнения границ аргумента.


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


Содержимое внутри двойных кавычек частично обрабатывается: оболочка подставляет значения переменных вместо их имён.


Выражения в кавычках могут быть вложенными; желательно чередовать виды кавычек. Кавычки должны быть парными (чётное число) либо экранированными. Парой считается ближайшая одинаковая кавычка. Примеры:


$ echo $SHELL '$SHELL' "$SHELL"

/bin/bash $SHELL /bin/bash

$ echo 'What's the shell file? It's "$SHELL"'

Whats the shell file? Its "$SHELL"

$ echo "What's the shell file? It's \"$SHELL\""

What's the shell file? It's "/bin/bash"


Некоторая функциональность может не работать, когда Bash запущена под именем sh или с опцией --posix (то есть имитирует некоторые старые версии). Чтобы лучше понимать разбор команд, можно запустить Bash в "отладочном" (debugging) режиме: bash -x.


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


Например, у date шаблон %d означает текущий день, %m - месяц, %Y - год, %H - час (0-23), %M - минуту (с ведущими нулями, где нужно):


$ date -d '7:05 8/5' '+%d.%m.%Y %H:%M'

05.08.2017 07:05


Реализация printf есть, например, у find или stat. Есть шаблоны как у программы date (d, m, Y в сочетании с T, что означает "дата/время последнего изменения") и другие (%U - UID, %G - GID и прочие):


$ find /sbin -maxdepth 1 \

-printf '%Y %m%5U%5G %11s %Td.%Tm.%Ty-%TH:%TM %f\n' \

| head -5

d 755 0 0  12288 16.11.17-08:23 sbin

f 777 0 0  3 16.04.16-11:58 pvs

f 777 0 0  15 28.01.17-20:54 mount.lowntfs-3g

f 755 0 0  10552 18.11.14-18:57 crda

f 755 0 0  14410 16.04.16-11:57 fsadm


Документация: страницы man и info для date, find, printf(1), stat(1).


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


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


Регулярные выражения состоят из условных элементов: собственно символов и их диапазонов/классов, якорей, метасимволов, квантификаторов и других.


Скобки [] здесь - обрамляют один символ из указанных диапазонов. Например, слова grey и gray оба правильны, поэтому их общий шаблон можно представить как "gr[ea]y". Далее, в начале предложения слова пишут с заглавной буквы, поэтому - "[Gg]r[ea]y".


$ echo -e "gray\nWhite\nGrey\ngreen"

gray

White

Grey

Green

$ echo -e "gray\nWhite\nGrey\ngreen" | grep '[Gg]r[ea]y'

gray

Grey


Чтобы не перечислять все возможные символы диапазона, можно указать границы через дефис; не буквы и не цифры (в том числе скобки) следует экранировать. Можно указать несколько диапазонов, например шаблон "[A-Za-z]" означает "один из символов латиницы, заглавных и строчных".


$ echo -e '-\na\nZ\n1\n&\n?\n[' | grep '[a-zA-Z\[\?\-]'

-

a

Z

?

[


Метасимволы: . - один любой символ; ^ - отрицание/исключение, то есть "любой символ, не входящий в указанные диапазоны" (его указывать первым, сразу после [).


$ echo -e '-\na\nZ\n1\n&\n?\n[' | grep '[^a-zA-Z\[\?\-]'

1

&

$ echo -e "four\nfork\nforty" | grep 'fo...'

forty


"Якоря" (anchors) здесь - указания на границы текстовых объектов: ^ - в начале строки; $ - в конце строки; \b - на границе слова; \B - не на границе слова; \< - в начале слова; \> - в конце слова.


$ echo -e "four\nfork\nforty" | grep 'fo..$'

four

fork

$ echo -e "before\nfour\nfork\nforty" | grep '\<for'

fork

forty


Шаблон "^$" будет означать пустую строку. Опция -c для grep означает "подсчитать найденные совпадения", например:


$ grep -c '^' < bash.txt

7579

$ grep -c '^$' < bash.txt

549


Итого 549 пустых строк из общего числа в 7579.


Иногда можно частично обойтись без шаблонов при помощи опций. Например, -v означает отрицание/исключение/несовпадение:


$ grep -v -c '^$' < bash.txt

7030


То есть (7579 - 549) = 7030 непустых строк.


"КвантификАторы" (quantifiers) здесь - повторители для предыдущих символов: ? - один/ни одного символа; * - ни одного/сколько угодно символов; + - один/сколько угодно символов; {N} - ровно N раз; {N, M} - от N до M раз включительно. Не применимы к якорям. Применимы к диапазонам (набирают после замыкающей скобки).


$ echo -e "colour\ncolor" | grep 'colo.*r'

colour

color


Шаблон 'colo.?r', вроде бы столь же пригодный для предыдущего сравнения, работает здесь только с опцией -E:


$ echo -e "colour\ncolor" | grep -E 'colo.?r'

colour

color


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


$ echo -e "colour\ncolor" | grep -E '(colour|color)'

colour

color

$ echo -e "four\nfork\nforty" | grep -E 'fo(ur|rk)'

four

fork


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


Документация по регулярным выражениям в man-страницах (не очень понятна): grep, regex(7), pcresyntax(3), pcrepattern(3). В Интернете: https://en.wikipedia.org/wiki/Regular_expression.

Показать полностью

Драйвер AMDGPU наконец сравнительно стабилизировался для всех карт выше HD7xxx.

Может, новость уже не совсем новость, но, судя по недавнему тестированию на Phoronix новый ядреный модуль amdgpu на самом свежем ядре уже обгоняет старый radeon почти на всех картах (выше Radeon HD 7xxx)

Судя по моему личному тестированию на KDE Neon (ubuntu 16.04) со стоковым ядром 4.13 - все очень даже работоспособно, из регрессий - только криво работающее аппаратное ускорение видео.


Нафиг это надо?

Из основных нововведений - поддержка Vulkan (radv), штатный интерфейс для разгона и возможность накатить новый проприетарный драйвер AMDGPU-PRO (на данный момент особой ценности не представляет).


Как включить?

Для начала убедиться в свежести софта. Нужна mesa из padoka ppa (в т.ч. пакет mesa-vulkan-drivers), ядро >= 4.13 (пакет linux-image-generic-hwe-16.04-edge для Ubuntu 16.04).

Затем надо передать параметры ядра, скажем, создав файл

/etc/modprobe.d/local.conf со строками (для GCN 1.0):


options amdgpu si_support=1

options radeon si_support=0

или (для GCN 1.1):


options amdgpu cik_support=1

options radeon cik_support=0

и выполнив


sudo update-initramfs -u


Также настоятельно советую создать файл

/etc/X11/xorg.conf.d/20-amdgpu.conf c содержимым


Section "Device"

Identifier "AMD"

Driver "amdgpu"

Option "TearFree" "on"

Option "DRI" "3"

EndSection

Если система не грузится, можно все откатить из Recovery Mode, из рут консоли:

$mount -o remount,rw /

$rm /etc/modprobe.d/local.conf

$rm /etc/X11/xorg.conf.d/20-amdgpu.conf

$update-initramfs -u

На этом все, удачных экспериментов.

Показать полностью

Шаблон для мониторинга состояния ИБП с помощью Network UPS Tools (NUT) в Zabbix.

Предлагаю Вашему вниманию шаблон для мониторинга состояния ИБП с помощью Network UPS Tools (NUT) , с которым взаимодействует Zabbix агент.

Шаблон и код на основе проекта Zabbix-NUT-Template.


Список параметров:

• Имя драйвера NUT

• Модель ИБП

• Производитель ИБП

• Нагрузка (Вт)

• Номинальная нагрузка (Вт)

• Напряжение батарей (В)

• Напряжение на входе (В)

• Напряжение на выходе (В)

• Уровень заряда батарей (В)

• Расчётное время работы от батарей (Мин.)

• Состояние, значение №1

• Состояние, значение №2

• Тревога

• Температура (°C)

• Частота на входе (Гц)


Вот внесённые мной изменения:

1) Переменная ups.status может содержать два значения, поэтому добавлена переменная ups.status-2.

Вот например, при остановке вентилятора в ИБП Powerware 5125 RM была следующая картина:

ups.status: ALARM OL

ups.alarm: FAN_FAIL


2) Добавлена обработка ошибки Error: Variable not supported by UPS.

Эта ошибка возникает в следующих случаях:

- если параметр не поддерживается данной моделью ИБП

- переменная поддерживается, но её значение в данный момент отсутствует, например так ведёт себя переменная ups.alarm.


Протестировано в Debian с пакетами версий 2.6.4-2.3+deb7u1 и 2.7.2-4.

Подробное описание и файлы здесь.


Это ссылка на Share.Zabbix.com

По моему мнению пакет Network UPS Tools (NUT) лучше чем APCUPSd по следующим причинам:

1. Больше список поддерживаемых ИБП.

2. Возможность мониторинга нескольких ИБП на одном ПК.

Но зато в APCUPSd есть apctest — программа для настройки, калибровки ИБП APC.

Показать полностью

Пара обоин с Элишей Катберт

Пара обоин с Элишей Катберт Linuxmint, Обои на рабочий стол
Пара обоин с Элишей Катберт Linuxmint, Обои на рабочий стол

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

Показать полностью 1

"Странный ты какой-то"

&quot;Странный ты какой-то&quot;

Не знаете, какой конструктор выбрать ребенку? Ответ есть!

Не знаете, какой конструктор выбрать ребенку? Ответ есть! Linux, Arch, Arch linux, Юмор
Показать полностью 1

Шрифты в Linux

(НЕ является инструкцией по руссификации интерфейса.)


Что такое шрифт


Файл шрифта (font file) содержит наборы изображений (рисунков) символов и соответствующие символам коды. Технически шрифты могут быть растровыми (bitmap fonts) или векторными (outline/vector fonts).


Растровые шрифты обычно применяют для текстового интерфейса. Рисунок символа (глиф) здесь - прямоугольный набор точек. Например, если размер текстового экрана 640x480 пикселов, а терминал настроен в режиме 80x30 (80 символов в 30 строках), то подойдёт шрифт, в котором ширина глифа - 8 пикселов, а высота - 16 (16x8).


Пример того, как может выглядеть буква А в растровом шрифте с глифами размером 16x8 точек. Пустые/фоновые пикселы показаны символом ~, закрашенные/видимые - X.

~~~~~~~~

~~~~~~~~

~~~~~~~~

~~~~~~~~

~~~XX~~~

~~X~~X~~

~~X~~X~~

~X~~~~X~

~X~~~~X~

~XXXXXX~

~X~~~~X~

~X~~~~X~

~X~~~~X~

~X~~~~X~

~~~~~~~~

~~~~~~~~

Пустое место сверху можно оставить, чтобы строки не сливались, снизу - чтобы уместить, например, буквы р или у.


Отрисовка растровых глифов на экране - относительно простая операция отображения уже готовых наборов точек на пикселы дисплея. Но растровые шрифты обычно содержат глифы только одного размера. В GUI нередко требуется отрисовывать символы разных размеров (разного кегля) одновременно, поэтому применяют векторные шрифты. Как и прочие векторные изображения, глифы таких шрифтов содержат наборы параметров для математических фигур; при использовании шрифта программа "растеризУет" глифы (создаёт набор точек). Готовые растеризованные глифы называют "кэшем шрифта" (font cache).


Высоту заглавных символов называют "кеглем" (font size). Есть несколько шкал кегля; можно условно считать, что одна единица высоты примерно равна 0,3-0,4 мм. Например, "сделать двенадцатым кеглем" означает, что высота заглавных символов будет примерно 3,6-4,8 мм; "шрифт высотой десять" - 3-4 мм. Предполагается, что на разных мониторах растровые шрифты одинакового размера (в текстовом интерфейсе) выглядят различно; но векторные шрифты одного кегля (в GUI) должны выглядеть одинаково.


На не очень новых мониторах с разрешением около 100 dpi кегль 5 и ниже - неразборчиво мал; для виджетов обычно выбирают кегль 10 или 12.


Шрифты бывают моноширинными (monospace) и пропорциональными (proportional или не указано). "Моноширинный" означает, что все глифы одинаковой ширины, занимают одинаковое место по горизонтали; хотя между соседними символами в линии может быть видно немного свободного пространства (не пробелы), но сдвинуть символы поближе друг к другу не получится. Текстовый интерфейс - традиционно моноширинный. То есть, например, 80 символов в линии (видимой строке); символы выровнены по вертикали (строго друг над другом). В пропорциональном шрифте, например, символы Щ и Л - разной ширины; в линиях одного виджета (например, текстовой области) может умещаться разное число символов.


Основную графическую идею (стиль) шрифта называют "гарнитУрой" (typeface, или font face). Символы одной гарнитуры схожи примерно так же, как инструменты из одного набора или предметы посуды из одного сервиза.


Есть несколько классификаций гарнитур. В простых случаях выделяют "рубленые" шрифты (без засечек, sans serif) - обычно для заголовков или надписей; и шрифты "с засечками" (serif) - обычно для основного текста. ЗасЕчка - небольшой декоративный поперечный штрих на конце черты некоторого символа. "Декоративные" шрифты (в названии может быть script) - имитация письма от руки. Есть шрифты, состоящие разных вспомогательных символов (symbols, dingbats), например, шахматных фигур, маркеров или орнаментов.


Внутри гарнитуры могут быть дополнительные стили - "начертания" (slants); обычно это нормальное начертание (Medium, Normal, Regular или Roman), курсИв[ное] (Italic, или Oblique), жирное/полужирное (Bold/Semibold). Начертания хранят в отдельных файлах; некоторые графические редакторы или офисные текстовые процессоры могут имитировать начертания, имея лишь один файл с нормальным начертанием.


Шрифты в текстовой консоли


Формат файлов шрифтов для текстового режима Linux - PC Screen Font (".psf" или ".psfu"). Здесь u означает Unicode. (Раньше для русского языка были кодировки KOI-8R и CP1251.) Документация по PC Screen Font есть в пакете kbd (/usr/share/doc/kbd/).


Сами файлы шрифтов обычно хранят в /usr/share/consolefonts, /usr/share/syscons/fonts/, /usr/share/kbd/consolefonts или в /usr/share/fonts. Обычно файлы дополнительно сжаты gzip. Размер - несколько КиБ. Файлы, включающие и глифы кириллицы, обычно имеют в имени Cyrillic или сокращённо cyr.


Традиционный шрифт - VGA или Fixed, более новый и приятный для глаз - Terminus. Пример файла шрифта гарнитуры Fixed:


$ cd /usr/share/consolefonts

$ file -z CyrSlav-Fixed16.psf.gz

CyrSlav-Fixed16.psf.gz: Linux/i386 PC Screen Font v1 data, 256 characters, Unicode directory, 8x16 (gzip compressed data, last modified: Wed Feb 1 12:35:37 2017, max compression, from Unix)


В настоящее время текстовая консоль Linux может использовать шрифты в кодировке Unicode (по умолчанию - кодировка CP437 и встроенный в ядро шрифт). В шрифте допустимо 512 глифов; возможно отображение 8 цветов. Или 256 глифов, но 16 цветов. Показать набор символов текущего шрифта (выполнять в текстовой консоли, не в эмуляторе терминала):


$ showconsolefont


Для правильного соответствия глифов кодам Unicode - нужна вспомогательная таблица (translation map, unimap), которая раньше хранилась в отдельном файле, а сейчас может входить в основной файл шрифта (обычно, но не обязательно, с расширением ".psfu"). Таблицы unimaps (".acm" или ".acm.gz") хранят в /usr/share/consoletrans/, /usr/share/unimaps или /usr/share/syscons/scrnmaps/. Программа psfgettable служит для копирования таблицы unimap из шрифта; psfaddtable - для добавления.


Вспомогательные программы для правки шрифтов: nafe (https://sourceforge.net/projects/nafe/), psftools (https://tset.de/psftools/index.html), rw-psf (https://github.com/talamus/rw-psf). Они конвертируют символы в ascii-art (вроде вышеуказанного примера буквы А) или растровые изображения. После правки в текстовом или графическом редакторе можно конвертировать файл обратно в шрифт.


Настройки применения шрифта - файл /etc/default/console-setup или ~/.console-setup.


Применить настройки на текущей консоли:


$ setfont

# или

$ setupcon


Пакеты программ: kbd, console-setup. Документация: man-страницы console-setup, setfont, setupcon. В инсталляциях с systemd может быть файл настроек /etc/vconsole.conf и сервис systemd-vconsole-setup.service. Документация: man-страницы systemd-vconsole-setup.service, vconsole.conf.


Шрифты в графической консоли


Форматы шрифтов для GUI:

Portable Compiled Font (PCF, ".pcf" или сжатый ".pcf.gz"), растровый;

Bitmap Distribution Format (BDF, ".bdf" или сжатый ".bdf.gz"), растровый;

TrueType Font (TTF, ".ttf"), векторный;

OpenType Font (OTF, ".otf"), векторный;

Type 1 PostScript font ASCII (PFA, ".pfa"), векторный;

Type 1 PostScript font binary (PFB, ".pfb"), векторный;

и ещё несколько более редких.


Наиболее популярные форматы: TTF, OTF (и их контейнер для веб-страниц - Web Open Font Format, ".woff"/".woff2").


Размеры файлов - от сотен КиБ до нескольких МиБ или ещё больше; зависит от количества символов (которых могут быть тысячи). Обычно файлы, содержащие латиницу и кириллицу, специально не помечаются. Файлы, содержащие символы восточных языков, содержат в имени указание на язык, например: arabic, thai.


$ cd /usr/share/fonts/truetype/noto

$ file NotoSans-Regular.ttf

NotoSans-Regular.ttf: TrueType font data

$ ls -ks NotoSans-Regular.ttf

300 NotoSans-Regular.ttf


Графическая подсистема X Window System задействует шрифты сама или через библиотеки. X-программа (клиент сервера X Window) может запросить отрисовку шрифта по записи формата X Logical Font Description (XLFD). Запись состоит из 14 полей через дефисы. Пример:


-cronyx-times-medium-i-*-*-14-*-100-100-*-*-iso10646-1


Здесь cronyx - семейство шрифтов, times - гарнитура, medium и i (italic) - начертания, 14 - кегль, 100 - предполагаемые разрешения дисплея по горизонтали и вертикали, iso10646 и следующее поле - кодировка. Остальные поля менее важны; звёздочка является метасимволом и предлагает программе самой выбрать значение поля.


Значения можно подбирать GUI-программой xfontsel. Кнопка select копирует запись в буфер X, откуда её можно вставить в редактор средней кнопкой мыши (колёсиком).


Посмотреть список доступных серверу шрифтов - xlsfonts.

Посмотреть таблицу глифов - xfd (или вообще указать некоторой X-программе использовать заданный шрифт опцией -fn):


$ xfd -fn '-cronyx-times-medium-i-*-*-14-*-100-100-*-*-iso10646-1'


Кодировка iso10646 - одно из названий Unicode. Поддержка Unicode в самой X Window System работает плохо, поэтому сейчас юникодные шрифты обрабатываются отдельными библиотеками. Но желательно иметь хоть какой-то шрифт в одной из кодировок семейства iso8859 или иной - просто для начального запуска сервера X Window.


Настройки применения шрифтов в общем файле /etc/X11/xorg.conf:


Section "Files"

FontPath "/usr/share/fonts/X11/misc"

FontPath "/usr/share/fonts/X11/cyrillic"

# Прочие параметры этой секции...

EndSection


В указанных каталогах следует запустить программы mkfontscale и mkfontdir. В результате должны появиться файлы encodings.dir, fonts.alias, fonts.dir.


Шрифт можно подключить временно, вручную:


# Добавить каталог.

xset +fp /usr/share/fonts/X11/misc

# Перечитать списки шрифтов.

xset fp rehash


Вспомогательная шрифтовая библиотека для GUI - Fontconfig. Она ведёт каталоги установленных в системе шрифтов и предоставляет программам шрифты, подходящие по требованиям. Библиотека Fontconfig сама не занимается растеризацией шрифтов.


К библиотеке прилагается семейство программ fc-*, в том числе:


fc-cache - создать/пересоздать кэш шрифтов;


fc-list - показать список установленных в системе шрифтов (выводится много информации, в том числе поддерживаемые языки). Возможно задать условие, например (вывод сокращён):


# Показать установленные шрифты, имеющие символы русской кириллицы.

$ fc-list -f '%{family}\n' :lang=ru

Liberation Sans

URW Gothic L

URW Palladio L

Noto Sans

DejaVu Sans,DejaVu Sans Light

URW Palladio L

FreeMono

Nimbus Roman No9 L


fc-validate - узнать, есть ли в шрифте символы алфавита для заданного языка, например:


$ cd /usr/share/fonts/truetype/noto

$ fc-validate -l ru NotoSans-Regular.ttf

NotoSans-Regular.ttf:0 Satisfy the coverage for ru language

$ fc-validate -l en NotoSans-Regular.ttf

NotoSans-Regular.ttf:0 Satisfy the coverage for en language

$ fc-validate -l ru NotoKufiArabic-Regular.ttf

NotoKufiArabic-Regular.ttf:0 Missing 66 glyph(s) to satisfy the coverage for ru language

$ fc-validate -l en NotoKufiArabic-Regular.ttf

NotoKufiArabic-Regular.ttf:0 Missing 72 glyph(s) to satisfy the coverage for en language

$ fc-validate -l ar NotoKufiArabic-Regular.ttf

NotoKufiArabic-Regular.ttf:0 Satisfy the coverage for ar language


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


Документация: man-страницы; HTML-документация в /usr/share/doc/fontconfig. Обозначения языков - по RFC-3066/ISO 639.


Основной XML-файл настроек Fontconfig - /etc/fonts/fonts.conf. Документация: man fonts-conf. Там же указаны имена других файлов, например пользовательский ~/.config/fontconfig/fonts.conf (устаревший: ~/.fonts.conf).


Каталоги для хранения шрифтов: общий /usr/share/fonts/, пользовательский ~/.local/share/fonts/ (устаревший: ~/.fonts/). В fonts.conf можно указать другие.


Желательно иметь в GUI: пропорциональные шрифты с засечками и без них (для большинства виджетов), моноширинный шрифт (для эмулятора терминала), шрифт со вспомогательными символами (для офисного текстового процессора).


Семейства свободно доступных шрифтов, которые считают приятными для глаз: Cantarell, Droid, Noto, Ubuntu. Шрифты со вспомогательными символами: OpenSymbol, Symbola; или Dingbats и Wingdings из Windows.


Для установки шрифта, поддерживаемого Fontconfig, нужно скопировать его файлы в один из каталогов хранения (можно во вложенный каталог). Желательно правильно установить целевые права, например 444 для файлов и 555 для каталогов. Потом запустить fc-cache (может сработать автоматически).


Офисные документы, электронные книги и другие файлы документов/изображений нередко могут хранить внутри себя сами файлы шрифтов (полностью или частично), но часто - содержат только что-то вроде ссылки на имя шрифта. Если скопировать файл документа/изображения на другой компьютер, где нет подходящего шрифта - программа либо покажет пустые/неверные глифы, либо попробует (зависит от программистов) "подставить" хоть какой-то подходящий шрифт (substitute a font). Даже при подстановке вид документа/изображения может быть испорчен из-за того, что размеры глифов в разных шрифтах не совпадают.


Для офисных документов популярны семейства шрифты из Windows: Arial, Courier New, Times и другие (форматы TTF, OTF).


Их можно скопировать из инсталляции Windows (каталог Windows\Fonts\).


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


Можно скопировать их из Интернета самостоятельно и распаковать программой cabextract. Ищите в репозиториях сервиса SourceForge.net по выражению "Microsoft core fonts".


Для подстановки можно применять шрифты семейства Liberation (соответственно Sans, Mono, Serif). Они, насколько возможно, "метрически совместимы" (metrically compatible) со шрифтами из Windows, то есть глифы сходных размеров. Другие метрически совместимые шрифты:


семейство Croscore (соответственно Arimo, Cousine, Tinos);

[Astra] Sans, [Astra] Serif и Mono от фирмы Paratype;

семейство XO Fonts (Oriel, Courser, Thames, символьные шрифты Symbol и Windy).


В графической подсистеме X Window System растеризацией занимается своя библиотека Xft. В последние годы операции растеризации передаются внешним библиотекам: Cairo, FreeType, Pango. Графическая подсистема Wayland сама никак не взаимодействует со шрифтами, все программы обращаются к внешним библиотекам.


Растеризованные глифы малого кегля могут выглядеть грубо/нечётко. Чтобы улучшить вид, применяют методы отрисовки под общим названием "сглаживание" (anti-aliasing). Иногда сглаженные глифы выглядит отчасти цветными из-за "субпиксельного рендеринга" - то есть дорисованные пикселы не чёрные или серые, а других цветов. Эффект зависит от порядка расположения цветных элементов (субпикселов) в пикселах.


В шрифтах TrueType могут быть дополнительные встроенные данные (hints) по отрисовке; их применение называется "хИнтинг" (hinting). В библиотеке FreeType наилучший алгоритм отрисовки (TrueType Bytecode Interpreter) был запрещён патентами примерно до 2010 года/версии 2.4.


Сглаживание и хинтинг обычно можно указать в центре настроек графической среды. Либо вручную - в своём или общем файле fonts.conf, например (фрагмент):


<!-- Включить сглаживание. -->

<match target="font">

<edit name="antialias" mode="assign">

<bool>true</bool>

</edit>

</match>

<!-- Включить хинтинг. -->

<match target="font">

<edit name="hinting" mode="assign">

<bool>true</bool>

</edit>

</match>

<!-- Полный (максимальный) хинтинг. -->

<match target="font">

<edit name="hintstyle" mode="assign">

<const>hintfull</const>

</edit>

</match>

<!-- Расположение субпикселов. -->

<match target="font">

<edit name="rgba" mode="assign">

<const>rgb</const>

</edit>

</match>


Программы, запрашивающие шрифт, в общем случае не могут рассчитывать на конкретное семейство/гарнитуру. Чтобы получить хоть какой-то подходящий шрифт (подстановка шрифта), обычно объявлены сколько-то псевдонимов (font aliases), например: sans-serif, serif, monospace. Пример для monospace:


<alias>

<family>DejaVu Sans Mono</family>

<default>

<family>monospace</family>

</default>

</alias>

<alias>

<family>monospace</family>

<prefer>

<family>DejaVu Sans Mono</family>

</prefer>

</alias>


Узнать текущий псевдоним:


$ fc-match monospace

DejaVuSansMono.ttf: "DejaVu Sans Mono" "Book"


Программы для GUI:


просмотреть установленные шрифты (+ установить/удалить):

Просмотрщик шрифтов (gnome-font-viewer) для GNOME;

Font Manager (gtk2 + python);

Font Viewer (kfontview и вспомогательный установщик kfontinst) и модуль kcmshell fontinst для KDE;


редактор - FontForge.

Показать полностью

Сможете найти на картинке цифру среди букв?

Справились? Тогда попробуйте пройти нашу новую игру на внимательность. Приз — награда в профиль на Пикабу: https://pikabu.ru/link/-oD8sjtmAi

Сможете найти на картинке цифру среди букв? Игры, Награда

Пара моих замечаний о тенденциях в IT в этом году.

В прошлом посте мне высказали что я решил постить свои мысли не на том ресурсе. Тем не менее сам пост не заминусили, а значит народу эта тема интересна. Тем более я не собираюсь писать тут туториалы "как накатить свой первый Debian и ворваться в мир красноглазиков" (c) @LegendNeverDie76 :)

Пафосная картинка из интернетов прилагается)

Пара моих замечаний о тенденциях в IT в этом году. DevOps, Continuous Delivery, Continuous Integration, Linux, Микросервисы, IT, Длиннопост

Примерно с середины весны, всё лето и по сей день, мой профиль на linkedin атакуют всевозможные рекрутеры. Из чего можно сделать два вывода, что IT отрасль у нас на подъёме, и, как сказал мне мой брат, люди наконец поняли что пора строить правильную инфраструктуру :) Что не может не радовать.
В общем, я походил по собеседованиям(в одной фирме даже пришлось пройти полиграф, незабываемые впечатления:) и данным постом хочу поделиться своими выводами. Возможно кому-то мой пост покажется очередным капитанством, а возможно поможет определиться в каком направлении развиваться дальше.

Но сперва, я хотел бы подвести итог по предложениям с linkedin и их географии.
Более 50% предложенных мне вакансий предполагали переезд. По большей части в восточную Европу: Польша, Чехия, Прибалтика. Единичные предложения в Шотландию, Кипр и Сингапур. Пара предложений с переездом в Питер. При этом большая часть всех предложений исходила от российских компаний, в том числе с предложениями переезда.
Естественно, не все вакансии подходили мне и не всем работодателям подходил я.

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

Картинка для наглядности:

Пара моих замечаний о тенденциях в IT в этом году. DevOps, Continuous Delivery, Continuous Integration, Linux, Микросервисы, IT, Длиннопост


Если говорить о микросервисах, то логичным продолжением этого вопроса является, как эти микросервсисы разворачивать, как ими управлять и масштабировать.
На данный момент, чаще всего, выбирают контейнеризацию, такую как Docker, LXC, rkt и системы управления кластерами контейнеров, такие как Kubernetes, основанный на нём OpenShift и, наверное в меньшей степени, Mesos Marathon.
Хоть я сам и скептически отношусь к повсеместной контейнеризации, считаю что не нужно создавать лишние прослойки там где они не обязательны, но есть области, где контейнеры вполне к месту. Например, в случаях когда требуется быстрое, горизонтальное масштабирование каких-то сервисов. Например, при повышении нагрузки на сервис, автоматически увеличить количество контейнеров с обработчиками запросов, при уменьшении так же сократить. Или, если хочется протестировать какой-то продукт, не захламляя им и его зависимостями свою машину.


Каждый проект, с представителями которого я общался, отличался языком разработки и подходами. Где-то это полностью web, где-то это числодробилки на кластерах с GPU и тэрабайтными хранилищами. Но все они хотят чтобы их код было легко собирать и выкатывать на тестовый стенд для проверки, желательно по каждому коммиту в хранилище кода. Чтобы так же легко было обновлять код на "боевой системе" и самое главное, чтобы его было легко откатить в случае возникающих проблем. В том числе откатывать изменения в базе данных.

Это то, что называют Continuous Delivery или непрерывная поставка ПО, и это основное, но не единственное, ради чего люди хотят в штат деовпса или инженера автоматизации.

Continuous Delivery тесно завязано на системы непрерывной интеграции, коих большое множество, лично я работаю с Gitlab CI и Jenkins. Которые, в свою очередь, являются частью процесса разработки ПО и дополняют друг друга с системами управления конфигурациями, такими как Puppet, Chef, Ansible, Saltstack. Сам я давно использую Ansible и немного Puppet.

Но об этих продуктах в следующий раз)


P.S. Я понимаю что для не подготовленного человека эти все термины как "птичий язык", но я старался писать наиболее понятно.

Показать полностью 1
Отличная работа, все прочитано!