Ваш путеводитель по одной из самых популярных и влиятельных операционных систем в мире. От базовых команд и установки дистрибутивов до глубокого изучения ядра и сетевых технологий — здесь вы найдете статьи и руководства на самые разные темы, связанные с Linux. Независимо от вашего уровня подготовки, здесь найдется что-то интересное и полезное.
Нещодавно сталася ситуація з Debian, коли при вході в систему з’явилося повідомлення:
“X session: warning: unable to write to /tmp; X session may exit with an error“, що трохи збило з пантелику.
К сожалению, да, это не так просто как в Windows поэтому если хотите узнать, когда была установлена ваша система Linux показываю самые быстрые и надёжные способы для Debian, Ubuntu и их производных.
Щоб не писати повністю назви утиліт чи шляхи до файлів у терміналі, можна скористатися функцією автодоповнення за допомогою клавіші TAB. Наприклад, щоб перейти в каталог завантажень, починаєте писати “Зав” і натискаєте TAB. Термінал сам додасть “антажене“;
Linux чутливий до регістру. Тобто: документ, Документ і ДоКуМеНт у Linux — це 3 різні файли.
Часто при використанні першої функції користувач може зіткнутися з особливістю Linux, описаною у другому пункті. Я маю на увазі, що чутливість до регістру часто ускладнює роботу в терміналі, зокрема при використанні автодоповнення по TAB. Наприклад, щоб вказати шлях до файлу, навіть використовуючи автодоповнення, потрібно завжди писати ім’я директорії з великої літери. Це незручно. Далі розповім, як змусити термінал не звертати увагу на регістр при використанні автодоповнення по TAB. Поїхали!
Працюючи з документами, виникає потреба використовувати певні шрифти. Йдеться про Windows-шрифти, такі як Times New Roman, Verdana, Arial тощо. На багатьох сайтах також у ролі основного шрифту використовується, наприклад, Verdana. Через ліцензію в дистрибутивах Linux ці шрифти не встановлені за замовчуванням. Але якщо вони потрібні, їх нескладно встановити самостійно. Нижче наведено інструкцію з встановлення Windows-шрифтів у Debian.
Працюючи в Linux ви, звісно, помітили що вводячи в терміналі пароль, sudo – він візуально не відображається. Це може збити з толку новачків: “Чи це клавіатура не працює?”. Також, буває, що вводячи не на тій розкладці або не той символ, потрібно повернутися та замінити частину, але куди повертатися – не видно. В такому випадку хочеться, щоб пароль відображався візуально так само, як в інших випадках – зірочками. Це можливо зробити, і дуже легко.
Вже багато років Ubuntu залишається найвідомішим та найякіснішим дистрибутивом на ядрі Linux. Створена компанією Canonical, операційна система зібрала навколо себе велику кількість шанувальників, завдяки чому в інтернеті у відкритому доступі є безліч матеріалів з вирішенням майже будь-якої проблеми, що може виникнути в процесі знайомства і роботи у ній.
Данное руководство подскажет как изменить поведение ноутбука с ОС Linux, при закрытии крышки. По умолчанию, при закрытии крышки – ноутбук приостанавливает работу и переходит в спящий режим. Для изменения поведения компьютера, пошагово выполните следующие действия:
Fedora надежный и безопасный дистрибутив Linux, предлагает отличную платформу для размещения сервера Minecraft. Эта статья проведет вас через процесс настройки сервера Minecraft в Fedora, что позволит вам эффективно управлять игровой средой.
Edge, современный веб-браузер от компании Microsoft, сделал значительные шаги вперёд с момента своего создания, предлагая множество функций, которые ориентированы на эффективность, безопасность и совместимость. Он выделяется как надёжный выбор для пользователей, ищущих альтернативу традиционным браузерам на платформах Linux. Давайте рассмотрим основные характеристики, которые делают Microsoft Edge заметным конкурентом в сфере браузеров:
Иногда может понадобится найти файл, в котором содержится определённая строка или найти строку в файле, где есть нужное слово. Это может понадобится для поиска логов, поиска конфигурационных файлов, если вы не знаете где они находятся или для поиска файлов с программным кодом.
Раньше для этих целей использовалась только утилита grep, однако сейчас существует огромное количество других программ, которые могут делать это быстрее и предоставляют более удобный интерфейс. В этой статье мы рассмотрим самые интересные из них и несколько примеров как ими пользоваться.
Поиск файлов по содержимому в Linux
Все утилиты в этой статье работают только в терминале. Если вас интересуют приложения с графическим интерфейсом, посмотрите статью поиск файлов в Linux. Большинство описанных ниже команд имеют примерно одинаковый синтаксис:
$ команда опции паттерн /путь/к/папке
Паттерн для поиска может быть обычным словом, но большинство команд ожидают, что это будет регулярное выражение, поэтому если в вашем запросе есть спец. символы, вы можете получить в результате не то, что ожидаете. Путь к папке, как правило, указывать не обязательно, тогда команды используют текущую папку для поиска. А теперь давайте рассмотрим каждую команду подробнее.
1. Grep
Прежде чем перейти к современным утилитам, давайте рассмотрим команду grep. Она входит в набор программ GNU и используется для поиска строк в файлах и файлов по их содержимому уже очень давно.
По умолчанию grep фильтрует один файл или стандартный ввод. Для того чтобы выполнять поиск в папке по нескольким файлам, нужно включить рекурсивный поиск с помощью опции -r. Например, найдем все файлы в папке /etc/, которые содержат строку root:
sudo grep -r "root" /etc/
Команда grep не подсвечивает вхождения символов которое вы искали цветом, для этого можно использовать опцию --color=always. Но в большинстве дистрибутивов эта опция уже прописана в алиасе для этой команды, поэтому вывод будет выглядеть вот так:
sudo grep --color=always -r "root" /etc/
С помощью опции -С или --context вы можете включить отображение не только текущей строки, в которой было найдено вхождение но и нескольких строк до и после. В этом параметре надо указать количество строк для отображения:
sudo grep -r -С2 "root" /etc/
По умолчанию grep ожидает, что поисковый запрос может быть регулярным выражением, но поддерживается только базовый синтаксис. Для включения расширенного синтаксиса нужно использовать опцию -E. Например, для того чтобы найти все файлы содержащие переменные, начинающиеся на букву A в папке /etc/ выполните:
sudo grep -r -E "^A[A-Z_]+=" /etc/
А для того чтобы искать именно фиксированную строку, а не регулярное выражение используйте опцию -F или команду fgrep. Например, так можно найти все файлы содержащие секцию [Install] в папке /usr/:
sudo grep -r -F "[Install]" /usr/
2. Ripgrep
Это популярная альтернатива grep написанная на Rust. Она может делать всё то же самое что и grep, но быстрее, а ещё её гораздо удобнее использовать. Рекурсивный поиск включён по умолчанию, и подсветка вхождений и имени файла разными цветами тоже работает без дополнительных опций, а также она пропускает скрытые файлы, бинарные файлы и файлы, перечисленные в .gitignore. Для установки ripgrep в Ubuntu используйте такую команду:
sudo apt install ripgrep
Если вы выполните команду, указав путь к файлу, то она найдёт и отобразит все вхождения искомого слова в этом файле. Например:
sudo rg root /etc/passwd
Если же передать папку, то команда будет искать во всех файлах, которые находятся в этой папке. По умолчанию используется текущая папка. Например, для того чтобы найти все файлы, содержащие слово "root" в каталоге /etc/ используйте такую команду:
sudo rg root /etc/
Также, как и при использовании grep, можно отобразить не только строку со вхождением но и несколько строк до и после. Например, по две:
sudo rg -C2 root /etc/
А вот полный синтаксис регулярных выражений здесь работает по умолчанию. Например:
sudo rg "^A[A-Z_]+=" /etc/
Если же вы хотите указать что надо искать именно строку, а не регулярное выражение, используйте опцию -F:
sudo rg -F "[Install]" /usr/
3. Ack
Если вам нужно найти файл с исходным кодом зная строку, которая в нём есть, то для этого существуют более подходящие утилиты чем grep. Например, ack. Она появилась уже довольно давно и предназначена именно для работы с исходным кодом. Кроме всех возможностей grep она позволяет пропускать файлы резервных копий, внутренние файлы репозиториев .git и .svn, а также дампы памяти. Кроме того, вы можете выбрать типы файлов, в которых будет выполняться поиск и даже указать определённую часть файла. Для установки программы в Ubuntu используйте такую команду:
sudo apt install ack
Самый простой пример - поиск всех файлов содержащих слово root в папке /etc/:
sudo ack "root" /etc/
Или же регулярное выражение, как в предыдущем разделе для поиска файлов с переменными, начинающимися на букву A:
sudo ack "^A[A-Z_]+=" /etc/
Для того чтобы вывести не только строку с вхождением, но и строки до и после неё используйте опцию -C. По умолчанию выводится по две строки:
sudo ack -C "root" /etc/
Команда ack позволяет указать тип файлов, в которых надо выполнять поиск. Это очень удобно для поиска по исходникам. Вы можете выбрать только исходные файлы Си, JavaScript или PHP и так далее. Все доступные типы файлов можно посмотреть с помощью команды:
ack --help-types
Например, для того чтобы выполнять поиск только в XML файлах используйте опцию --type со значением xml:
sudo ack --type=xml "root" /etc/
Ещё одна интересная возможность утилиты ack - настройка частей файла, в которых будет выполняться поиск с помощью регулярного выражения. Для этого предназначены опции --range-start и --range-end и это будет работать как в рамках одной строки так и в рамках всего файла. Например, для поиска только в комментариях XML файлов можно использовать такую команду:
На данный момент это одна из самых популярных программ для поиска текста по файлам в Linux. Она была спроектирована в качестве альтернативы для ack, как инструмент для поиска кода. В дополнение к основным возможностям ack, она значительно быстрее и учитывает настройки исключений из файлов .gitignore и .hgignore. Для установки программы в Ubuntu используйте такую команду:
sudo apt install silversearcher-ag
Рассмотрим тот же пример, что и в предыдущих разделах. Для того чтобы найти все файлы содержащие слово root в папке /etc/ выполните:
sudo ag "root" /etc/
Аналогично grep и ripgrep, ag ожидает регулярное выражение в качестве паттерна поиска, поэтому вы можете использовать его без каких либо дополнительных опций. Например:
sudo ag "^A[A-Z_]+=" /etc/
Но если вы хотите чтобы поисковый запрос рассматривался именно как строка, используйте опцию -Q. Например, для поиска всех файлов, содержащих секцию [Install] в папке /usr/ выполните:
sudo ag -Q "[Install]" /usr/
Здесь тоже можно вывести несколько строк до и после строки со вхождением с помощью опции -С.
В отличие от grep и ripgrep, команда ag позволяет указать тип файлов в которых вы хотите выполнять поиск. Посмотреть все доступные типы файлов можно с помощью такой команды:
ag --list-file-types
Например, для того чтобы искать только по ini файлам используйте такую команду:
sudo ag --ini "root" /etc/
Утилита также позволяет использовать регулярное выражение для фильтрации файлов по имени перед тем как выполнять поиск по содержимому. Для этого нужно использовать опцию -G. Например для того чтобы выполнять поиск только по файлам, имя которых заканчивается на conf, выполните:
sudo ag -G .*.conf$ root /etc/
5. Skim
Это ещё одна интересная утилита для нечеткого поиска в реальном времени, написанная на Rust. По умолчанию она ищет файлы по имени, но её можно использовать вместе с одной из выше перечисленных утилит для поиска файлов по содержимому в реальном времени. Пакета с программой пока нет в официальных репозиториях, но вы можете установить её с помощью cargo:
cargo install skim
Команда выполняет поиск только в текущей папке и указать другую папку нельзя, поэтому нужно сначала перейти в нужную папку используя команду cd. Например:
cd /etc/
Затем используйте такую команду для того чтобы объединить sk с Silver Searcher для фильтрации файлов по содержимому:
sk --ansi -i -c 'ag --color "{}"'
Здесь опция --ansi включает отображение цветов, -i включает интерактивный режим, а опция -c задает команду, которая будет выполнена при вводе какого-либо запроса, строка {} будет заменена на то, что вы введете при поиске. Просто выполните команду и начинайте вводить слово которое хотите искать:
Дальше вы можете использовать все функции фильтрации нечеткого поиска для обработки результатов.
Производительность grep, rg, ack и ag
Перед завершением статьи хочу привести небольшой тест производительности выше перечисленных утилит для поиска текста по файлам в Linux. Я скачал и распаковал исходники ядра Linux версии 6.2.10, а затем использовал каждую из утилит для того чтобы найти все файлы, которые содержат слово ext4 и btrfs. Между разными утилитами система перезагружалась, для того чтобы исключить влияние кэша. Вот результаты:
Команда
Время, с
Команда
Время, с
grep -r ext4 ./
23.167
grep -r btrfs ./
3.860
rg ext4 ./
27.164
rg btrfs ./
1.387
ack ext4 ./
36.141
ack btrfs ./
7.206
ag ext4 ./
24.594
ag btrfs ./
3.158
Как видите, сразу после запуска системы все команды работают примерно одинаково. Однако после того, утилиты, написанные на Rust эффективнее используют кэш, поскольку при повторных запусках для того же набора файлов работают быстрее аналогов на Си.
Выводы
В этой статье были рассмотрены самые часто используемые утилиты для поиска файлов по содержимому и поиска текста в файлах в Linux. Как видите, существует достаточно инструментов чтобы было из чего выбрать. Все команды довольно похожие, но каждая из них имеет свои особенности. А что используете вы? Напишите в комментариях!