- IT-блог о веб-технологиях, серверах, протоколах, базах данных, СУБД, SQL, компьютерных сетях, языках программирования и создание сайтов.
- #005 Команды для навигации и перемещения по каталогам в Linux (cd, ls, pwd, file)
- Относительный и абсолютный путь в Linux
- pwd – команда для просмотра названия текущего рабочего каталога
- ls – команда для просмотра содержимого каталога
- cd – команда для перемещения по каталогам и папкам
- file – команда для определения типа файлов
- Я хочу продолжить выпускать уроки по Linux Mint и командной оболочке bash
- Файлы ярлыков приложений («.desktop») и их меню
- Дубликаты не найдены
- GNU/Linux
- Правила сообщества
- Архивация и компрессия файлов. Часть 2
- Архивация и компрессия файлов. Часть 1
- Шрифты в Linux
IT-блог о веб-технологиях, серверах, протоколах, базах данных, СУБД, SQL, компьютерных сетях, языках программирования и создание сайтов.
#005 Команды для навигации и перемещения по каталогам в Linux (cd, ls, pwd, file)
Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать систему Linux, ранее мы познакомились с тем, что такое эмулятор терминала и командная оболочка, теперь начнем знакомиться с командами Linux. Кстати, если вы пользователь Windows и хотите начать знакомиться с Linux, то рекомендую первое знакомство осуществлять на виртуальной машине, например, VirtualBox.
В этой публикации мы рассмотрим четыре простых команды, которые используются для навигации в системе Linux, то есть для перемещения по каталогам и папкам. Эти команды помогут вам начать изучать свою систему и просматривать из чего она состоит. Но для начала мы немного поговорим про относительный и абсолютный путь в Linux, это нужно, чтобы было понимание, что мы вообще делаем. Первая команда, которую мы рассмотрим — pwd. Команда pwd используется для просмотра текущего рабочего каталога в Linux. Далее мы разберемся с командой cd. Команда cd позволяет нам перемещаться по каталогам системы. Еще мы поговорим о команде ls, которая позволяет просматривать содержимое любого каталога вашей системы. В завершение мы рассмотрим команду file. Команда file в системах Linux используется для того, чтобы определить тип объекта файловой системы, ведь самому Linux вовсе не нужно расширение, чтобы понять какой файл перед ней.
Относительный и абсолютный путь в Linux
Любая иерархия каталогов в операционных системах подобных Unix начинается с корневого каталога или корня, который обозначается таким вот образом: «/». Обратите внимание: именно слэш (/), а не обратный слэш (\). Когда мы пытаемся получить доступ к файлу или каталогу при помощи командной оболочки, нам необходимо указывать путь к тому объекту файловой системы, к которому мы ходим обратиться.
Путь к объекту может быть абсолютным, а может быть относительным. Если путь к файлу или каталогу начинается с корня, то такой путь называется полным или абсолютным, так как таким образом можно «дотянуться» до любого файла из любой точки операционной системы. Если путь к файлу начинается с той, папки, в которой вы работает, то такой путь называется относительным и работать такая конструкция будет только из той папки, в которой вы находитесь в данный момент. Путь называется относительным, поскольку он составляется относительно того или иного каталога или файла.
На рисунке ниже показана иерархия каталогов, к которой мы все привыкли, когда используем графический файловый менеджер.
Древовидная структура любой файловой системы, к которой привыкли пользователи Windows
Нас интересует каталог dir1, который находится на рабочем столе, у этого каталога есть дочерний или вложенный каталог, который называется dir2, а родительским каталогом для dir1 является «Рабочий стол». Допустим, если мы находимся в каталоге dir1, то для того, чтобы перейти в каталог «Рабочий стол», нам нужно воспользоваться конструкцией «. », это будет относительным путем, поскольку он будет выстроен относительно каталога dir1.
Если же мы хотим из каталога dir1 попасть в каталог dir2, то можем воспользоваться вот таким путем: ./dir1. Здесь символы точка-слеш означает текущий рабочий каталог, конструкцию ./ в данном случае можно не писать, bash вас поймет и без нее. Хотя как в первом, так и во втором случае, можно воспользоваться абсолютным путем. Для рабочего стола абсолютный путь в моем случае выглядит так:
А для каталога dir2 так:
Если мы находимся в каталоге dir1 и хотим попасть в каталог dir6, то мы можем воспользоваться относительным путем:
Этот путь я выстроил относительно каталога dir1. Из каталога dir6 можно вернуться в каталог dir1, используя относительный путь:
Здесь мы сперва вернемся в каталог dir2, а затем спустимся еще на ступеньку ниже — в каталог dir1. Но из каталога dir1 можно попасть в dir6, используя абсолютный путь:
Также можно использовать абсолютный путь, чтобы из каталога dir6 вернуться в dir1:
С относительными и абсолютными путями в Linux мы разобрались, можем приступить к изучению команд.
pwd – команда для просмотра названия текущего рабочего каталога
Понятно, что, когда мы используем командую оболочку в Linux, то в тот или иной момент времени мы модем находиться только в одном конкретном каталоге. При этом мы можем получить ценную информацию из данного каталога, которую сможем использовать для навигации и перемещения между папками.
Во-первых, мы можем узнать содержимое текущего каталога, который, кстати, называется текущим рабочим каталогом. Еще мы можем узнать название родительского каталога и какие у текущего каталога есть дочерние каталоги.
Когда мы разбирались с терминалом и командной оболочкой, то говорили, что в приглашении терминала обычно указывается название текущего рабочего каталога, но приглашение можно настроить так, чтобы название и путь до текущего каталога не показывался и, например, в таких ситуациях неплохо было бы узнать, где мы, собственно, находимся, чтобы понять куда нам идти, для этой цели и служит команда pwd (print working directory). Давайте выполним ее из каталога dir1:
/ Рабочий стол / dir1 $ pwd
/ Рабочий стол / dir1 $
Помните, что при входе в терминал мы обычно попадаем в свой домашний каталог, который для краткости в приглашении обозначается символом
, давайте выполним команду pwd в домашнем каталоге:
В общем и целом, pwd – это самая простая команда, которую вы можете использовать для навигации при работе с командной оболочкой.
ls – команда для просмотра содержимого каталога
Для команды ls у нас будет отдельная публикация, в который мы подробнее разберемся с ее возможностями. Сейчас нам важно отметить следующее: команда ls используется для просмотра содержимого текущего каталога или любого другого каталога, к которому у вас есть права на чтение.
Работает команда ls очень просто, давайте выполним ее из своего домашнего каталога:
Если мы хотим увидеть содержимое рабочего стола, находясь в домашнем каталоге, то команде ls можно передать путь до того каталога, который мы хотим посмотреть:
$ ls / home / kirill / «Рабочий стол» /
На самом деле возможности команды ls куда шире, чем мы их сейчас описали, эта команда обладает массой всевозможных интересных параметров, которые можно комбинировать друг с другом, но об этом в другой раз. Кстати сказать: часто новички в мире Linux, когда речь заходит о командах говорят фразу: дайте список всех Linux команд. Так вот, списка всех команд Linux не существует. Дело всё в том, что каждый дистрибутив (в том числе и Linux Mint) обладает своим собственным набором команд, более того, вы можете изменить этот набор команд удалив или установи какую-нибудь программу, имя которой станет новой командой (про установку Linux Mint на виртуальную машину VirtualBox вы можете почитать здесь).
cd – команда для перемещения по каталогам и папкам
Определять свое местоположение в системе и просматривать содержимое различных каталогов мы научились, теперь давайте научимся двигаться по лабиринту каталогов Linux, для этих целей у нас есть команда cd (change directory).
Давайте для начала перейдем из домашнего каталога в dir1, который находится на рабочем столе. Сделать это можно, используя абсолютный путь cd /home/kirill/Рабочий стол/dir1:
$ cd / home / kirill / Рабочий стол / dir1
Обратите внимание: произошла ошибка, командная оболочка не смогла найти каталог с именем Рабочий. Дело все в том, что «пробел» в системах подобных Unix является разделительным символом. Вообще, терминал работает с тремя видами символов: обычные текстовые символа, разделительные символы и специальные символы, пробел относится к разделительным и терминал их обрабатывает по-особенному, когда встречает их. Чтобы терминал понял, что словосочетание Рабочий стол — это имя каталога (то есть, чтобы терминал проигнорировал символ пробела), его надо взять в кавычки, которые могут быть как одинарными, так и двойными:
$ cd / home / kirill / ‘Рабочий стол’ / dir1
/ Рабочий стол / dir1 $
Также из домашнего каталога можно перейти в каталог dir1, используя относительный путь:
$ cd ‘Рабочий стол’ / dir1
/ Рабочий стол / dir1 $
А вернуться из dir1 на рабочий стол, мы можем при помощи вот такой конструкции:
/ Рабочий стол / dir1 $ cd . .
Или же можем использовать абсолютный путь:
/ Рабочий стол / dir1 $ cd / home / kirill / ‘Рабочий стол’ /
Чтобы перейти с каталога «Рабочий стол» в каталог dir1, мы можем воспользваться такой штукой:
/ Рабочий стол $ cd . / dir1
/ Рабочий стол / dir1 $
Хотя конструкцию ./, которая говорит терминалу о том, что это текущий каталог можно опустить, посмотрим это, перейдя из каталога dir1 в dir2:
/ Рабочий стол / dir1 $ cd dir2
/ Рабочий стол / dir1 / dir2 $
Стоит отметить, что у команды cd есть несколько полезных сокращений, которые я рекомендовал бы запомнить:
- cd – переместит вас в домашний каталог;
- cd / — переместит вас в корень;
- cd — – переместит вас в предыдущий рабочий каталог;
- cd
username – переместит вас в домашний каталог того пользователя, чей логин вы указали.
file – команда для определения типа файлов
Вам нужно для себя отметить две вещи: работа с операционными системами типа Unix требует от пользователя некоторой внимательности и всё сущее в Linux есть файл. Про работу с файлами в командной оболочке bash мы поговорим отдельно, сейчас давайте разберемся с тем, как определить тип файла, ведь ОС семейства Linux у файлов не обязательно должны быть расширения, а тип файла операционная система определяет по другим параметрам. То есть, если в Linux вы видите файл pict1.jpg – это не обязательно будет изображение.
Но мы смоделируем несколько другую ситуацию. На рабочем столе у меня есть каталог dir1, в котором есть каталог dir2, а в каталоге dir2 есть папки dir4 и dir6 и файл с именем dir5, это показано на рисунке ниже.
Часть содержимого каталога с именем dir2
Давайте перейдем в каталог dir2 и выполним команду ls:
Выполнив команду ls мы увидели содержимое каталога dir2 в терминале
Обратите внимание: у меня терминал настроен таким образом, что подсвечивает разными цветами разные объекты файловой системы, хотя ключевое слово здесь настроен, этого может и не быть. Тут, например, терминал подсвечивает каталоги синим цветом, мультимедийные файлы пурпурным, а обычные файлы белым, давайте проверять, но этого может и не быть, хотя терминал может подсвечивать и неправильно, давайте убедимся.
Чтобы понять что здесь есть файл, а что каталог, нам нужно воспользоваться дополнительной командой file, применим ее к объектам файловой системы dir4, dir5, dir6:
/ Рабочий стол / dir1 / dir2 $ file dir4 dir5 dir6
/ Рабочий стол / dir1 / dir2 $
Как видим, команда file указывает не только тип файла, но и умеет определять что объект является каталогом. А еще из примера видно, что file умеет работать сразу с несколькими аргументами, то есть ей на проверку можно отправлять сразу несколько файлов, а можно это делать и по одному. Также из примера выше видно, что dir5 — это обычный текстовый файл в кодировки UTF-8. Давайте проверим оставшиеся файлы:
/ Рабочий стол / dir1 / dir2 $ file file5
/ Рабочий стол / dir1 / dir2 $ file file6
/ Рабочий стол / dir1 / dir2 $ file pict1 . jpg
/ Рабочий стол / dir1 / dir2 $ file pict2 . jpg
/ Рабочий стол / dir1 / dir2 $ file pict2 . png
/ Рабочий стол / dir1 / dir2 $ file vasya
/ Рабочий стол / dir1 / dir2 $
Команда file умеет определять тип файла лучше, чем подсвечивает терминал. Здесь мы видим, что файлы file5 и file6 — это текстовые файлы в кодировке UTF-8. Файл pict1.jpg вовсе никакая не картинка, а текстовый файл. Файла pict2.jpg не существует и file нам об этом сообщает, файл pict2.png вообще является пустым, а вот файл с незамысловатым именем vasya на самом деле является изображением и мы даже видим некоторые характеристики этого изображения.
Итак, мы изучили несколько команд оболочки, которые помогут нам изучать систему Linux Mint и перемещаться между каталогами и папками, а также просматривать их содержимое и определять его тип, для этих целей у нас есть четыре команды: cd, ls, file, pwd. И не забывайте, что для перемещения по каталогам в Linux можно использовать как абсолютный путь, так и относительный.
В следующей публикации мы с вами познакомимся с командами Linux, которые дают нам возможность просматривать файлы.
Я хочу продолжить выпускать уроки по Linux Mint и командной оболочке bash
Если это так, то ваше желание совпадает с моим. Но мне от вас нужна небольшая помощь! Дело всё в том, что весь мой контент доступен полностью и абсолютно бесплатно в блоге и на канале YouTube. Создание контента — это работа, отнимающая много сил и энергии (благо, она мне нравится и пока я готов ей заниматься), оплату с вас за эту работу я не прошу, но прошу помочь распространить этот контент и поддержать мой канал и группу Вконтакте. Поэтому, если вы хотите, чтобы видео выходили чаще, лучше и больше, то можете мне помочь один из нескольких способов, указанных ниже, это нетрудно, но очень мотивирует и помогает:
- Оставьте ссылку на мой сайт, канал, группу в ВК, отдельное видео у себя на странице в соц. сетях или на своем сайту.
- Вступите в группу в ВК: https://vk.com/zametkinapolyah.
- Подпишитесь на мой YouTube-канал: https://www.youtube.com/user/zametkinapolyahru.
- И самое эффективное: после просмотра видео не забудьте написать отзыв в комментариях на YouTube и поставить лайк видео, опять же, на YouTube.
Замечу, что все мои видео уроки появляются сперва на YouTube, там вы их увидите быстрее всего.
Если вы считаете, что я вам помог и хотите меня отблагодарить материально, то можете воспользоваться реквизитами, указанными ниже. Все вырученные с доната деньги пойдут на улучшение качества видео, например, я возьму хороший USB микрофон, это будет как приятное дополнение к Full HD.
WMR: R288272666982
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223
Источник
Файлы ярлыков приложений («.desktop») и их меню
В Linux значки и описания программ (приложений) хранятся отдельно от исполняемых файлов. Для GUI-программ составляют «файлы рабочего стола» (desktop files), схожие по назначению с ярлыками в Windows. Более удобного имени нет, поэтому пусть и здесь будут ярлыками.
Расширение — «.desktop»; имя любое. Формат ярлыков схож с форматом файлов «.ini» в Windows. То есть это структурированный текст, разделённый на группы; имя группы в квадратных скобках; в группах заданы строки-параметры вида «ключ=значение»; строка-комментарий начинается с #.
Общие ярлыки приложений хранят в /usr/share/applications; свои — в
/.local/share/applications. Для примера — сценарий оболочки и его ярлык.
# Хранить следует здесь:
# Сделать исполняемым: chmod u+x
# Десять самых жадных до процессора процессов/потоков.
# Процессы отсортированы по убыванию жадности.
/usr/bin/watch -p -n 1 \
«ps k -%cpu -eL -o pid,comm,%cpu | head»
# Завершить — Ctrl C.
# Общее название группы для всех файлов «.desktop».
# Строка [Desktop Entry] — первая; прочие — в любом порядке.
# Какой версии спецификации соответствует сам этот файл.
# Свежая — 1.1. Не обязательно.
# Кодировка самого файла. Обычно — UTF-8.
# Списки есть, например, у iconv. Не обязательно (устарело).
# Тип объекта: Application — приложение;
# Directory — категория; Link — ссылка на ресурс Интернета.
# «Категория» здесь — это заголовок подменю
# в общем меню приложений. Здесь не переводится.
# В значении может быть несколько частей,
# их отделять символом ;.
# И в конце строки рекомендуется поставить символ ;.
# Если символ ; используется сам по себе — экранировать: \;.
# Команда для запуска. Желательно указать полный путь.
# Можно короткое имя, если программа доступна через $PATH.
# Если нужно запустить с правами суперпользователя,
# то нужно начинать команду, например, с gksudo -gk.
# Понадобится установить программу gksudo или kdesudo.
# Рабочий каталог. Не обязательно.
# Нужно ли сначала открыть окно эмулятора терминала,
# а потом запустить в нём значение Exec.
# «Да» — true; «нет» — false. Обычно «нет».
# Файл значка. Обычно указывают короткое имя без расширения.
# Стандартные форматы файлов: PNG, SVG (SVGZ).
# Значки обычно хранят в /usr/share/icons.
# Нужно ли оповещать о запуске: помигать указателем мыши
# или аплетом списка задач и тому подобное. Обычно «да».
# Название ярлыка, видимое как подпись к значку или
# как имя пункта в меню. Здесь на английском.
Name=Top 10 greedy threads
# Желательно перевести. Список условных обозначений
# языков есть, например, у locale.
Name[ru]=Десять самых жадных потоков
# Описание, обычно видимое как всплывающая подсказка.
Comment=Shows Top 10 cpu eating processes/threads
Comment[ru]=Показывает 10 самых жрущих ЦПУ процессов/потоков
# Не показывать в меню. Обычно «нет».
# Файловые ассоциации, если есть, будут работать.
# Не показывать в меню, убрать из файловых ассоциаций.
# И вообще сделать вид, что приложения не существует.
# Показывать только в указанной рабочей среде:
# GNOME, KDE, Xfce, ещё какие-нибудь через ;.
# Не показывать в указанных рабочих средах.
# В файле должен быть только один из параметров:
# либо OnlyShowIn, либо NotShowIn.
Такие файлы можно помещать на Рабочий стол по необходимости: перетаскиванием; или же копированием/ссылкой файла в
/Рабочий стол (англоязычный —
/Desktop). Расположение каталога рабочего стола может быть указано в файле
/.config/user-dirs.dirs. Его читает программа xdg-user-dirs-update, создавая указанные каталоги.
Проверить синтаксическую корректность ярлыка можно программой desktop-file-validate.
Если нужно на Рабочий стол добавить каталог, то может быть достаточно символьной ссылки. Или составить ярлык, где в Exec будет имя диспетчера файлов либо xdg-open, а потом аргумент — путь к каталогу:
В среде GNOME разработчики пытаются запретить размещение файлов на Рабочем столе. Может понадобиться специальное расширение для GNOME Shell.
Ярлык для адреса Интернета имеет другое значение Type и вместо ключа Exec содержит URL:
Адрес будет открыт браузером по умолчанию. Если нужен другой браузер, следует сделать обычный ярлык с Type=Application, далее в Exec задать имя браузера с аргументом-URL.
Есть сколько-то общепринятых категорий в спецификации к файлам меню: Audio, Education, Graphics, System и другие. Файлы категорий синтаксически аналогичны файлам ярлыков. Расширение — «.directory». Хранят их обычно в /usr/share/desktop-directories. Свои — в
/.local/share/desktop-directories. Пример файла для категории «Система» (условное имя файла — system.directory). Не используйте его как есть.
Comment=System tools and utilities
Comment[ru]=Средства администрирования системы
Графическая среда обычно автоматически при запуске каждого сеанса пересобирает меню из имеющихся ярлыков и категорий для каждого пользователя.
Формат файлов меню — XML. Расширение — «.menu». Только пример, без пояснений. Не используйте его как есть.
Проверить синтаксическую корректность меню можно программой xmllint. Все меню не проходят валидацию (не находится DTD), вероятно, из-за беспорядка на сайте FreeDesktop.org.
Редакторы меню для GUI: KMenuEdit для KDE; LXMenuEditor (lxmed) для LXDE, требует Java; MenuLibre для GNOME, XFCE; Mozo для Mate.
Свои меню хранят в
/.config/menus. Точнее, в $XDG_CONFIG_DIRS/menus/$
Своё меню вроде как должно перекрывать (заменять собой) автоматическое. Добавочные (не перекрывание, а слияние) меню хранят в $XDG_CONFIG_DIRS/menus/applications-merged/.
Документация: ярлыки; меню. Для семейства программ xdg-* и desktop-* есть man-страницы. XDG (X Desktop Group) — старое название сообщества FreeDesktop.org.
У Debian (и производных) есть своя система меню, отличающаяся от XDG. Эти меню применяют в разных небольших диспетчерах окон: awesome, fvwm, openbox и других. Документация — в пакете menu.
Дубликаты не найдены
GNU/Linux
697 постов 13.1K подписчика
Правила сообщества
Все дистрибутивы хороши.
Полезно. Много не знал.
Добавлю от себя — не уверен что так везде, но у меня в дебиане на рабочем столе *.desktop файлы не функционируют если не давать им права на исполнение. (chmod +x *.desktop)
помню удалил кнопку отвечающая за вызов меню завершения работы. Пришлось по инструкции делать свою )
А просто восстоновить меню в редакторе не легче ли было .
В среде GNOME разработчики пытаются запретить размещение файлов на Рабочем столе. Может понадобиться специальное расширение для GNOME Shell.
Что б засрать рабстол ярлыками
Ага, а нахрена он тогда еще нужен?
Спасибо! Готовая справка по .desktop!
Это как взять какую-нибудь книгу, открыть на середине и сделать пост этой страницы
Где ж ты был два дня назад?)
также не раскрыта тема с формированием gnome-control-centr меню и что локальные не работают.
А и еще bamf соответствие и что такое параметр WMClass
Ну и утилиты которыми собирать и проверять.
т.к. не работают относительные пути в ярлыке .desktop XFCE (Xubuntu)
для запуска портативных программ вместо такой строки:
Иконка отображается только так:
если картинку закинуть в /usr/share/picmaxs или $HOME/.local/share/picmax
то картинка будет работать так Icon=doublecmd.png вроде можно даже без расширения
если приложение надодится в env PATH то не надо указывать прямой путь для Exec=
также можно положить его в $HOME/.local/bin/ и не надо также указывать прямой путь
правда надо понимать что локальные файлы в приоритете над глобальными!
у ярлыков еще есть мараметр обработки для всяких gnome-control-centr и вот эта дрянь работает только глобально
Спасибо @balaev84av, вроде и много времени прошло, а я нашёл в этой не большой статье ответ на свой вопрос, плюс чуть-чуть нового узнал.
P.S. Ответ был в строке
Тема Actions не раскрыта!
[Desktop Action 10-NewWindow]
Name=Open a New Window
Name[ru]=Открыть в новом окне
Архивация и компрессия файлов. Часть 2
Многие файлы содержат сколь-нибудь повторяющуюся, лишнюю информацию. Поэтому технически возможно преобразовывать её так, чтобы уменьшить общий размер. Это и есть компрЕссия (compression, «компрЕшэн»), или сжатие, данных.
Сжатие не следует воспринимать как «удаление ненужных частей». Важно, чтобы восстановленный файл имел точно такое же содержимое, что исходный (совпадения размеров файлов — не достаточно).
Есть много алгоритмов компрессии и много форматов сжатых файлов. В UNIX и Linux популярны форматы сжатия Bzip2, Gzip (традиционный), LZMA, XZ. Для примера — те же три файла:
Компрессор gzip для формата Gzip обычно удаляет файл-операнд; иначе нужна опция -k (от keep):
Шаблоны имён здесь раскрывает оболочка. Расширение имени здесь добавляется, а не заменяет исходное.
Понятие «степень сжатия» (compression ratio) толкуется по-разному: 1) «какую долю от размера исходного файла составляет размер сжатого файла» либо 2) «какую долю удалось убрать». Обычно выражается в процентах.
Выше видно, что нулевой файл имеет степень сжатия (1) в четыре процента (то есть сжат в 25 раз), случайный файл — 104% (то есть лучше было бы его вовсе не сжимать), текстовый файл — 32% (то есть примерно втрое уменьшился).
Вот вывод компрессором информации об архиве, в том числе степени сжатия в смысле (2):
$ gzip -l file3.txt.gz | column -t
compressed uncompressed ratio uncompressed_name
29806 102400 70.9% file3.txt
В выводе не учтены внутренние вспомогательные данные формата, здесь — около 3 КиБ: 100 — 71 = 29; 32 — 29 = 3.
Нередко алгоритм допускает несколько степеней сжатия. По умолчанию программа обычно выбирает нечто среднее. За более сильное сжатие (меньше размер) приходится платить увеличенными временем упаковки и расходом оперативной памяти. Нередко выигрыш в степени сжатия оказывается незначителен. Скорость распаковки остаётся прежней.
file2.rnd: -0.0% — replaced with file2.rnd.gz
file3.txt: 70.9% — replaced with file3.txt.gz
В данном случае — никакой разницы.
Опция -f — принудительное выполнение (от force), то есть здесь — заменить (replace) уже существующий сжатый файл новым. Опция —best — сжать наилучшим доступным алгоритмом (с параметрами, нацеленными на наиболее сильное сжатие).
Можно попробовать другой компрессор/формат, например bzip2 (Bzip2, «.bz2»):
$ bzip2 -k file3.txt
Здесь есть небольшой выигрыш: 32 — 28 = 4.
Нет простого способа узнать, насколько сильным будет сжатие. Тексты часто сжимаются со степенью (1) ниже 50%. Хуже всего сжимаются хаотичные (случайные, шум) данные.
Для удобства можно считать, что для файлов средних размеров сжатие уместно, если степень (1) составляет 60% и ниже (то есть сэкономлено 40% места и больше). Если файл большой (1 ГиБ и выше), то даже небольшая экономия при сжатии может быть уместна. Уже сжатый файл обычно бесполезно сжимать ещё раз. Файлы размером ниже 3 КиБ сжимать тоже бесполезно.
Для «декомпрессии» (распаковки, извлечения оригинала) сжатого файла часто есть не только опция компрессора, но и отдельная программа-распаковщик. Или сам компрессор может быть запущен под другим именем файла (например, с жёсткой ссылкой) для распаковки — это зависит от программиста.
$ gzip -d -kf file2.rnd.gz
$ gunzip -kf file2.rnd.gz
Здесь или опция -d, или программа gunzip. Опции -k, -f — с прежним смыслом. Аналогично с BZip2:
$ bzip2 -d -kf file3.txt.bz2
$ bunzip2 -kf file3.txt.bz2
$ diff -qs /bin/bunzip2 /bin/bzip2
Файлы /bin/bunzip2 и /bin/bzip2 идентичны
Чтобы задействовать содержимое оригинального (несжатого файла), обычно нужно явным способом распаковать сжатый. На это тратится процессорное время; в мобильном компьютере может быть повышенный расход заряда аккумулятора. Кроме того, степень сжатия непредсказуема или даже (1) выше 100%, поэтому при массовых правках файлов свободное место на диске может внезапно закончиться.
Чтобы задействовать содержимое оригинального (несжатого файла), обычно нужно явным способом распаковать сжатый. На это тратится процессорное время; в мобильном компьютере может быть повышенный расход заряда аккумулятора. Кроме того, степень сжатия непредсказуема или даже (1) выше 100%, поэтому при массовых правках файлов свободное место на диске может внезапно закончиться.
Есть несколько форматов файловых систем, где файлы сжимаются/распаковываются автоматически (говорят: «на лету» (on-the-fly) или «прозрачная (transparent) распаковка»).
Есть аналоги привычных утилит с именами, начинающимися на bz (для BZip2), xz или z (GZip): bzcat, bzless, bzgrep и другие. Делают то же, что оригиналы, но со сжатыми файлами.
Midnight Commander, подобные ему двухпанельные диспетчеры файлов, некоторые другие диспетчеры — могут открывать/распаковывать архивы/сжатые файлы. Иногда есть возможность имитировать монтирование архива как каталога (только на чтение, иногда ещё и на запись). В таких случаях программе может понадобиться предварительно распаковать файлы во временный каталог (обычно куда-то в /tmp/). Это заметно как зависание программы при работе с большим (несколько десятков МиБ и выше) архивом.
В UNIX и Linux компрессия традиционно является операцией над одиночным файлом. То есть для компрессии каталога с содержимым — нужно сначала создать архив, а потом его сжимать (либо, реже, — сжать каждый файл, а потом заархивировать всё).
Архиватор tar может задействовать какой-либо компрессор, если тот воспринимает просто имя файла как сигнал к сжатию либо воспринимает опцию -d как сигнал к распаковке (декомпрессии). Опции tar для внешних компрессоров: -z для gzip, -j для bzip2, -J для xz. Для остальных компрессоров — опция -I (заглавная i, после которой указать имя программы). Примеры:
# Архив tar внутри сжатого файла Gzip одной командой.
$ tar -cvz -f archive.tar.gz «old»
$ du -s archive.tar.gz
archive.tar.gz: gzip compressed data
# Архив tar внутри сжатого файла Bzip2 одной командой.
$ tar -cj -f archive.tar.bz2 «old»
$ du -s archive.tar.bz2
archive.tar.bz2: bzip2 compressed data, block size = 900k
# Архив tar внутри сжатого файла LZMA одной командой.
$ tar -c -I lzma -f archive.tar.lzma «old»
$ du -s archive.tar.lzma
archive.tar.lzma: LZMA compressed data, streamed
Вместо множественных расширений вида «.tar.gz» могут попадаться одиночные: «.tgz», «.tbz», «.txz» и другие — по традиции или при необходимости соблюдать ограничения на длину имени. Устаревший компрессор — compress; расширение «.Z»; в tar есть опция -Z.
# Примеры распаковки сжатых архивов одной командой:
$ tar -xj -f archive.tar.bz2
$ tar -x -I lzma -f archive.tar.lzma
Чтобы изменить содержимое сжатого архива, программе приходится его предварительно распаковывать, а после внесения изменений — заново упаковывать обратно. Это затраты времени, оперативной памяти и, возможно, пространства на диске для временного хранения. Может оказаться удобнее — упаковать файлы в поддереве по отдельности, не создавая архива. У gzip/gunzip есть опция -r (от recursive). Для других программ можно задействовать find (и, если нужно, xargs).
В семействе Windows привыкли воспринимать архивацию и компрессию как единую, неделимую операцию. Часто говорят «заархивировать» в смысле «получить сжатый архив»; «разархивировать» — «выполнить и декомпрессию, и извлечение из архива». Или: «упаковать» и «распаковать» файлы. И сжатые файлы называют «архивами». Для большинства пользователей важно именно сжатие данных, а архивация подразумевается сама собой.
Популярные в Windows форматы сжатых файлов с возможностью хранения файлового поддерева (архива): ZIP, RAR. Соответственно программы: для командной строки — zip.exe, rar.exe; для GUI — WinZip, WinRAR. Диспетчер файлов системы Windows — Проводник (Explorer) может смонтировать архив ZIP как подкаталог там, где находится сам файл архива. Есть и другие программы, в том числе поддерживающие много форматов, например: 7-Zip, PeaZip (и вышеуказанные WinZip, WinRAR).
Набор программ p7zip (в том числе 7z, 7za) является вариантом 7-Zip для командной строки UNIX и Linux. Формат 7z может давать более сильное сжатие, чем Gzip и Bzip2.
В Linux может быть проблема с форматом ZIP для файловых имён, содержащих не-латиницу. У ZIP есть свой внутренний формат хранения имён. Если создать архив в Windows, а потом попытаться распаковать в Linux, имена превратятся в наборы кракозябров. В последнее время дистрибутивы обычно поставляют исправленные программы unzip и zip. Или придётся пробовать перекодировать имена программой iconv или convmv.
Возможные (ненадёжно) варианты перекодировки имени (предполагаемый в примере файл сохранил расширение «.pdf» на латинице, поэтому файл можно как-то задействовать через шаблон оболочки):
$ N=$(ls *.pdf | iconv -f cp1252 -t cp850 | iconv -f cp866)
# Или другой вариант:
$ N=$(ls *.pdf | iconv -t iso8859-1 | iconv -f cp866)
# После каждого варианта просмотреть
# содержимое переменной N для перекодированного имени.
# И если имя выглядит разумно, то:
Программы для Windows часто поставляются в виде особых архивов, в том числе формата Microsoft Cabinet («.cab»). Такие архивы по лицензионным соглашениям запрещено распаковывать вручную. Для Linux есть программа cabextract.
Иногда в России встречаются старые форматы архивов с внутренней компрессией: ARJ, HA, LHA и другие. Для Linux могут найтись программы: arj, ha, unar. Иначе может понадобиться устанавливать FreeDOS/Wine или иную среду выполнения DOS/Windows-программ, а потом искать соответствующие декомпрессоры.
В Windows нередко создают «самораспаковывающиеся» (self-extracting) архивы: это программа-распаковщик, к которой присоединён собственно архив. Как и обычная программа для Windows, имеют расширение «.exe». Предназначены для пользователей, у которых нет своей копии распаковщика. Иногда такой архив можно распаковать и в Linux (зависит от формата архива и наличия программ, например 7-zip). Нежелательны к применению, потому что могут содержать программы-вирусы. Не следует запускать напрямую, а лучше — открыть отдельным распаковщиком. В Linux иногда делают сценарии оболочки, состоящие из команды на распаковку и присоединённого к сценарию архива; программы: makeself, shar (sharutils).
В некоторых форматах архивов и/или сжатых файлов предусмотрено шифрование с паролем: 7z, RAR, ZIP и другие.
Компрессия данных может встретиться и на системном уровне. Например, в некоторых файловых системах нулевые фрагменты (пустые блоки) внутри файлов не хранятся и не копируются (это называется «разреженные файлы», sparse files).
Программы для GUI: Archive Manager (File Roller) для GNOME, Ark для KDE, Engrampa для MATE, PeaZip, Xarchiver. Они отображают содержимое архивов, подобно тому как диспетчеры файлов отображают содержимое каталогов; предоставляют меню команд создания/распаковки архивов. Но сами не содержат программного кода архиваторов/компрессоров, поэтому требуют установки библиотек (libarchive, liblzma, unrar и других) и самих архиваторов/компрессоров для командной строки.
В файлах мультимедиа (изображения, звук, видео) часто применяют алгоритмы «несимметричного» сжатия, то есть с частичной потерей информации. Это позволяет сжать данные ещё сильнее (в десятки или больше раз). Некоторые потери в деталях изображений или в звуковых волнах уместны, если средний человек эти оттенки/детали/шумы и прочее не различает. Такие алгоритмы обычно имеют широкий набор настроек, поэтому нужно следить за тем, чтобы качество мультимедиа не стало плохим, явно заметным.
Архивация и компрессия файлов. Часть 1
(НЕ является руководством по резервному копированию. Во второй части используется тот же тестовый каталог с теми же файлами.)
«АрхИв» (archive, «Акайв») в компьютерном смысле — набор файлов, подготовленный для длительного хранения. Предполагается, что файлами из архива какое-то время не будут пользоваться — подобно тому, как лишние вещи складывают в коробку и убирают в кладовку или ещё куда-то.
Цели архивАции файлов: иметь запасные копии; переслать несколько файлов/каталогов одной операцией; если нужно/возможно — сэкономить/высвободить место на диске. Для экономии места лишние файлы удаляют или «сжимают» (синонимы: «упаковывают», «подвергают компрессии»).
Форматы архивов по сути — контейнеры: содержат «слепок» (snapshot) или «образ» (image) некоторой части дерева файловой системы или всего дерева (или даже больше). Важно, чтобы из архива можно было «разархивИровать» (извлечь) не только содержимое файлов, но и их имена/пути, даты, права и остальные нужные метаданные.
Традиционные и/или стандартные сейчас либо ранее (в POSIX) программы-архиваторы: cpio, pax, tar. Менее известные: dar, star.
Наиболее популярна — tar. Имя означает «tape archiver». Слово «tape» означает здесь — «[магнитная] лента». Устройства хранения на кассетах с магнитными лентами есть и сейчас, в основном в крупных организациях. Такое устройство называют «стрИмером» (streamer), а кассету — «кАртриджем» (cartridge). В отличие от магнитного диска, для операций чтения/записи ленту нужно перематывать; и создавать на ленте полноценную файловую систему (форматировать) обычно нецелесообразно. Поэтому здесь не достаточно простого копирования, а нужен формат-контейнер, файл которого пишется в символьный файл-устройство стримера сплошным потоком, хотя и условно разделён на блоки.
Примеры действий с архивами tar:
# Создать тестовый каталог с содержимым.
$ fallocate -l 100KiB works/old/file1.000
# Файл из случайно сгенерированных байтов.
$ dd if=/dev/urandom bs=1k count=100 of=works/old/file2.rnd
# Текстовый файл. Аргумент iflag=fullblock нужен,
# чтобы dd дождалась достаточного объёма данных от col,
# не завершаясь раньше этого.
$ man bash | col -b \
| dd bs=1k count=100 iflag=fullblock \
# Вот итоговый вид поддерева works от программы tree.
# (Она не стандартная, устанавливают отдельно.)
(Редактор постов, как обычно, съел несколько пробелов, поэтому вместо них — звёздочки. Должно быть, разработчик редактора — любитель Пакмана.)
Предполагается заархивировать старые файлы, т. е. в old/.
-c — создать архив;
-v — выводить список обрабатываемых файлов;
-f — архив не на ленте, а в указанном файле.
Всё остальное — архивируемые файлы/каталоги; для архивации поддерева будет достаточным указать только родительский каталог.
# Кавычки — просто выделение того, что именно идёт в архив.
$ tar -c -v -f archive.tar «old»
# Посмотреть свойства архива:
archive.tar: POSIX tar archive (GNU)
# Содержимое (список файлов).
$ tar -t -f archive.tar
$ du -k archive.tar
# Освободить место, занятое старыми файлами.
# Извлечь содержимое архива.
# Сам архив останется прежним.
# Однобуквенные опции можно набрать слитно с общим дефисом.
$ tar -xvf archive.tar
Опция -x — извлечь (скопировать) файлы из архива. Буква x — от extract. Если нужны только некоторые файлы, укажите их пути точно в том виде, в каком они записаны в архиве. В командном выражении пути файлов, извлекаемых из архива, указывают там, где при создании архива были указаны файлы, идущие в архив (то есть в конце).
Можно попробовать указать шаблоны имён с символами * и ?, но дополнительно нужна опция —wildcards, например:
$ tar -xv —wildcards -f archive.tar ‘*file. ‘
Файлы извлекаются вместе с путями, так что каталог old со всем содержимым мог быть восстановлен в любом другом подходящем рабочем каталоге.
Архив можно пополнить. Пополнение архивов бывает «добавлением» (append) или «обновлением» (update).
Если нужно добавить какие-то ещё файлы — опция -r вместо -c; и опять указать пути к файлам в конце командного выражения.
Если в том же каталоге появились новые файлы или поправлены старые, то это обновление (замена старых файлов на новые); вместо опции -c указать -u. Программа tar сама обнаружит и добавит в архив новые/исправленные файлы.
$ mv today/file3.txt old/
$ tar -uvf archive.tar «old»
$ tar -tf archive.tar
Опция —delete — удалить файлы из архива (только если архив не на ленте):
# Всё равно этот файл состоял только из нулей.
# Здесь путь к файлу не выводится.
$ tar —delete -v -f archive.tar «old/file1.000»
$ tar -tf archive.tar
В архивах tar можно хранить несколько файлов с одинаковым путём. Выполняется повторными действиями добавления и обновления. В списке по -t очередь идёт снизу вверх, то есть сверху — архивированные последними. Опция —occurence=3 — выполнить действие над третьим по очереди добавления файлом из тех, что с одинаковым путём (нумерация начинается с единицы).
И ещё много разных опций, например:
-k — не извлекать файлы, если они уже есть в целевом каталоге;
—keep-newer-files — почти то же, но с уточнением, если уже имеющиеся в целевом каталоге файлы — более новые (по метаданным даты и времени), чем в архиве;
-p — метаданные о правах на файлы тоже восстанавливать из архива при извлечении;
—same-owner — восстанавливать имя владельца и группы;
-w — просить подтверждения на каждое действие.
Документация: man tar, info tar.
Благодаря сохранению метаданных, архиваторы иногда применяют для аккуратного копирования по конвейеру, например:
$ find . -depth -print0 | cpio —null -pvd ../old
Программа find часто служит генератором списка имён для архивации или иных массовых действий над файлами. Архиватор cpio всегда требует перенаправления: или |. Опции -print0 и —null — для корректной обработки путей, содержащих кириллицу, пробелы и иные символы за пределами правила «8.3» и подобных ему ограничений.
Следите за тем, чтобы правильно строить пути (чтобы, например, не получилось в итоге works/old/today/file3.txt вместо works/old/file3.txt). Для начала стоит запустить только find.
Формат tar имеет проблемы с хранением специальных файлов, со скоростью поиска файла в архиве, с хранением некоторых метаданных. Если это критично, то следует применять архиватор dar.
Шрифты в Linux
(НЕ является инструкцией по руссификации интерфейса.)
Что такое шрифт
Файл шрифта (font file) содержит наборы изображений (рисунков) символов и соответствующие символам коды. Технически шрифты могут быть растровыми (bitmap fonts) или векторными (outline/vector fonts).
Растровые шрифты обычно применяют для текстового интерфейса. Рисунок символа (глиф) здесь — прямоугольный набор точек. Например, если размер текстового экрана 640×480 пикселов, а терминал настроен в режиме 80×30 (80 символов в 30 строках), то подойдёт шрифт, в котором ширина глифа — 8 пикселов, а высота — 16 (16×8).
Пример того, как может выглядеть буква А в растровом шрифте с глифами размером 16×8 точек. Пустые/фоновые пикселы показаны символом
Пустое место сверху можно оставить, чтобы строки не сливались, снизу — чтобы уместить, например, буквы р или у.
Отрисовка растровых глифов на экране — относительно простая операция отображения уже готовых наборов точек на пикселы дисплея. Но растровые шрифты обычно содержат глифы только одного размера. В 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:
$ file -z CyrSlav-Fixed16.psf.gz
CyrSlav-Fixed16.psf.gz: Linux/i386 PC Screen Font v1 data, 256 characters, Unicode directory, 8×16 (gzip compressed data, last modified: Wed Feb 1 12:35:37 2017, max compression, from Unix)
В настоящее время текстовая консоль Linux может использовать шрифты в кодировке Unicode (по умолчанию — кодировка CP437 и встроенный в ядро шрифт). В шрифте допустимо 512 глифов; возможно отображение 8 цветов. Или 256 глифов, но 16 цветов. Показать набор символов текущего шрифта (выполнять в текстовой консоли, не в эмуляторе терминала):
Для правильного соответствия глифов кодам 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 или
Применить настройки на текущей консоли:
Пакеты программ: 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.
NotoSans-Regular.ttf: TrueType font data
$ ls -ks NotoSans-Regular.ttf
Графическая подсистема X Window System задействует шрифты сама или через библиотеки. X-программа (клиент сервера X Window) может запросить отрисовку шрифта по записи формата X Logical Font Description (XLFD). Запись состоит из 14 полей через дефисы. Пример:
Здесь 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:
# Прочие параметры этой секции.
В указанных каталогах следует запустить программы mkfontscale и mkfontdir. В результате должны появиться файлы encodings.dir, fonts.alias, fonts.dir.
Шрифт можно подключить временно, вручную:
xset +fp /usr/share/fonts/X11/misc
# Перечитать списки шрифтов.
Вспомогательная шрифтовая библиотека для GUI — Fontconfig. Она ведёт каталоги установленных в системе шрифтов и предоставляет программам шрифты, подходящие по требованиям. Библиотека Fontconfig сама не занимается растеризацией шрифтов.
К библиотеке прилагается семейство программ fc-*, в том числе:
fc-cache — создать/пересоздать кэш шрифтов;
fc-list — показать список установленных в системе шрифтов (выводится много информации, в том числе поддерживаемые языки). Возможно задать условие, например (вывод сокращён):
# Показать установленные шрифты, имеющие символы русской кириллицы.
DejaVu Sans,DejaVu Sans Light
Nimbus Roman No9 L
fc-validate — узнать, есть ли в шрифте символы алфавита для заданного языка, например:
$ 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. Там же указаны имена других файлов, например пользовательский
Каталоги для хранения шрифтов: общий /usr/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.
Источник