Архив рубрики: Публикации

Команда find в Linux: примеры использования программы find с параметром exec



























4.5/5 — (2 голоса)

Команда find в Linux – Это команда для поиска файлов и каталогов на основе специальных условий. Find – это одна из наиболее важных и часто используемых утилит системы Linux.

Основная информация о Find

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

Утилита предустановлена по умолчанию во всех Linux дистрибутивах, поэтому вам не нужно будет устанавливать никаких дополнительных пакетов. Это очень важная находка для тех, кто хочет использовать командную строку наиболее эффективно.

Команда find имеет такой синтаксис:

find [папка] [параметры]критерийшаблон [действие]

Папка– каталог в котором будем искать

Параметры– дополнительные параметры, например, глубина поиска, и т д

Критерий– по какому критерию будем искать: имя, дата создания, права, владелец и т д.

Шаблон – непосредственно значение по которому будем отбирать файлы.

Основные параметры команды find

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

  • -P никогда не открывать символические ссылки
  • -L – получает информацию о файлах по символическим ссылкам. Важно для дальнейшей обработки, чтобы обрабатывалась не ссылка, а сам файл.
  • -maxdepth – максимальная глубина поиска по подкаталогам, для поиска только в текущем каталоге установите 1.
  • -depth – искать сначала в текущем каталоге, а потом в подкаталогах
  • -mount искать файлы только в этой файловой системе.
  • -version – показать версию утилиты find
  • -print – выводить полные имена файлов
  • -type f – искать только файлы
  • -type d – поиск папки в Linux

Синтаксис и параметры команды Find

  • /v – Выводит все строки, не содержащие строку, заданную параметром строка.

  • /c – Подсчет строк, содержащих строку, указанную параметром строка, и отображение общего количества.

  • /n – Выводит номера строк перед самими строками.

  • /i – Задает поиск без различия строчных и заглавных букв.

  • “строка_поиска” – Обязательный параметр. Указывает группу символов, поиск которой будет производиться. Необходимо заключить параметр строка в кавычки (“строка”).

  • [диск:][путь] ИмяФайла – Задает местоположение и имя файла, в котором будет производиться поиск заданной строки символов.

  • /? – Отображение справки в командной строке.

Путь

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

Опции

Опции команды find указываются, начиная с символа «-», за которым следует название опции. Рассмотрим основные опции.








-depth (или -d)Поиск в подкаталогах перед поиском в самом каталоге.
-LПри поиске следовать по символическим ссылкам.
-maxdepth NПри поиске проверять не более чем N вложенных уровней каталогов.
-mindepth NНе проверять вложенные каталоги уровня N и меньше.
-mountНе искать в каталогах других файловых систем.

2.1.1. Опция -name

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

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

$ find ~ -name «*.txt» -print

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

$ find . -name «*.txt» -print

Для нахождения в текущем каталоге всех файлов, в именах которых встречается хотя бы один символ в верхнем регистре, введите следующую команду:

$ find . -name «[A-Z]*» -print

Найти в каталоге /etc файлы, имена которых начинаются с символов «host«, позволяет команда

$ find /etc -name «hoat*» -print

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

$ find ~ -name «*.txt» -print -о -name «.*» -print

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

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

$ find / -name «*» -print

Ниже показано, как найти все файлы, в именах которых сначала следуют символы нижнего регистра, а за ними — две цифры и расширение .txt (например, ах37.xt):

$ find . -name » [а-х] [а-х] [0—9] [0—9] . txt» -print

2.1.2. Опция -perm

Опция -perm позволяет находить файлы с заданным режимом доступа. Например, для поиска файлов с режимом доступа 755 (их может просматривать и выполнять любой пользователь, но только владелец имеет право осуществлять запись) следует воспользоваться такой командой:

$ find . -perm 755 -print

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

$ find . -perm -007 -print

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

2.1.3. Опция -prune

Когда вы не хотите вести поиск в том или ином каталоге, воспользуйтесь опцией -prune. Она служит указанием остановить поиск на текущем путевом имени. Если путевое имя указывает на каталог, команда find не будет заходить в него. При наличии опции -depth опция -prune игнорируется.

Следующая команда проводит поиск в текущем каталоге, не заходя в подкаталог /bin:

$ find . -name «bin» -prune -о -print

2.1.4. Опции -user и —nouser

Чтобы найти файлы, принадлежащие определенному пользователю, укажите в команде find опцию -user, а также имя пользователя. Например, поиск в начальном каталоге файлов, принадлежащих пользователю dave, осуществляется посредством такой команды:

$ find ~ -user dave -print

Поиск в каталоге /etc файлов, принадлежащих пользователю uucp, выполняет следующая команда:

$ find /etc -uaer uucp -print

Благодаря опции -nouser возможен поиск файлов, принадлежащих несуществующим пользователям. При ее использовании производится поиск файлов, для владельцев которых нет записи в файле /etc/passwd. Конкретное имя пользователя указывать не нужно: команда find выполняет всю необходимую работу сама. Чтобы найти все файлы, которые принадлежат несуществующим пользователям и находятся в каталоге /home, задайте вот такую команду:

$ find /home -nouaer -print

2.1.5. Опции -group и -nogroup

Опции -group и -nogroup аналогичны опциям -user-nouser/apps всех файлов, которыми владеют пользователи группы accts:

$ find /арра -group accta -print

Следующая команда ищет во всей системе файлы, принадлежащие несуществующим группам:

$ find / -nogroup -print

2.1.6. Опция -mtime

Опцию -mtime следует применять при поиске файлов, доступ к которым осуществлялся х дней назад. Если аргумент опции снабдить знаком ‘-‘, будут отобраны файлы, к которым не было доступа в течение х дней. Аргумент со знаком ‘+’ приводит к противоположному результату — производится отбор файлов, доступ к которым осуществлялся на протяжении последних х дней.

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

$ find / -mtime -5 -print

Ниже приведена команда, выполняющая поиск в каталоге /var/adm файлов, которые обновлялись в течение последних трех дней:

$ find /var/adm -mtime +3 -print

2.1.7. Опция -newer

Если необходимо найти файлы, доступ к которым осуществлялся в промежутке времени между обновлениями двух заданных файлов, воспользуйтесь опцией -newer. Общий формат ее применения таков:

-newer старый_файл ! -newer новый_файл

Знак ‘!‘ является оператором логического отрицания. Он означает: найти файлы, которые новее, чем старый_файл, но старее, чем новый_файл.

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

-rwxr-xr-x 1 root    root    92 Apr 18 11:18 age.awk

-rwxrwxr-x 1 root    root    1054 Apr 20 19:37 belts.awk

Для нахождения всех файлов, которые обновлялись позже, чем age.awk, но раньше, чем belts.awk, выполните следующую команду (применение опции -exec описано чуть ниже):

$ find . -newer age.awk ! -newer belts.awk -exec Is -1 {} ;

-rwxrwxr-x 1 root    root    62 Apr 18 11:32 ./who.awk

-rwxrwxr-x 1 root    root    49 Apr 18 12:05 ./group.awk

-rw-r—r— 1 root    root    201 Apr 20 19:30 ./grade2.txt

-rwxrwxr-x 1 root    root    1054 Apr 20 19:37 ./belts.awk

Но как быть, если необходимо найти файлы, созданные, скажем, в течение последних двух часов, а у вас нет файла, сформированного ровно два часа назад, с которым можно было бы сравнивать? Создайте такой файл! Для этой цели предназначена команда touch -t, которая создает файл с заданной временной меткой в формате ММДЦччмм (месяц-день-часы-минуты). Например:

$ touch -t 05042140 dstamp

$ ls -1 dstamp

-rw-r—r— 1 dave    admin    0 May 4 21:40 dstamp

В результате будет получен файл, дата создания которого — 4 мая, время создания —21:40 (предполагается, что текущее время — 23:40). Теперь можно применить команду find с опцией -newer для нахождения всех файлов, которые обновлялись в течение последних двух часов:

$ find . -newer datamp -print

2.1.8. Опция -type

Операционные системы UNIX и Linux поддерживают различные типы файлов. Поиск файлов нужного типа осуществляется посредством команды, find с опцией -type. Например, для нахождения всех подкаталогов в каталоге /etc воспользуйтесь такой командой:

$ find /etc -type d -print

Чтобы получить список всех файлов, но не каталогов, выполните следующую команду:

$ find . ! -type d -print

Ниже приведена команда, которая предназначена для поиска всех символических ссылок в каталоге /etc.

$ find /etc -type 1 -print

2.1.9. Опция -size

В процессе поиска размер файла указывается с помощью опции -size N, где N — размер файла в блоках по 512 байтов. Возможные аргументы имеют следующие значения: +N — поиск файлов, размер которых больше заданного, -N — меньше заданного, N — равен заданному. Если в аргументе дополнительно указан символ с, то размер считается заданным в байтах, а не в блоках, а если символ k — в килобайтах. Для поиска файлов, размер которых превышает 1 Мб, предназначена команда

$ find . -aize -flOOOk -print

Следующая команда выполняет поиск в каталоге /home/apache файлов, размер которых в точности равен 100 байтам:

$ find /home/apache -sixe 100с -print

Произвести поиск файлов, размер которых превышает 10 блоков (5120 байтов), позволяет приведенная ниже команда:

$ find . -size +10 -print

2.1.10. Опция Опция -depth

Опция -depth позволяет организовать поиск таким образом, что сначала проверяются все файлы текущего каталога (и рекурсивно все его подкаталоги) и только в конце — запись самого каталога. Эта опция широко применяется при создании списка файлов, помещаемых в архив на магнитной ленте с помощью команды cpio или tar, так как в этом случае сначала записывается на ленту образ каталога и лишь после этого задаются права доступа к нему. Это позволяет пользователю архивировать те каталоги, для которых у него нет разрешения на запись.

Следующая команда выводит список всех файлов и подкаталогов текущего каталога:

$ find . -name «*» -print -о -name «.*» -print -depth

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

./.Xdefaults ./.bash_logout ./.bash_profile ./.bashrc ./.bash_nistory ./file ./Dir/filel ./Dir/file2 ./Dir/file3 ./Dir/Subdir/file4 ./Dir/Subdir ./Dir

2.1.11. Опция -mount

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

$ find / -name «*.ХС» -mount -print

Критерии поиска

У команды find может быть несколько критериев поиска (их также называют tests). Каждый критерий представляет собой определенное условие проверки, которое возвращает либо true либо false. Это можно сравнить с условиями оператора if в программировании. В процессе обработки очередного файла команда find по очереди проверяет каждый критерий, и если очередной критерий возвращает false, тогда команда find переходит к следующему файлу. Критериев у команды find довольно много, мы рассмотрим только некоторые из них.










-atime NПоследний раз к файлу обращались N дней назад.
-mtime NПоследнее изменение файла было N дней назад.
-name шаблонИмя файла (шаблон имени) без указания пути. Рекомендуется всегда заключать шаблон в кавычки.
-newer другой_файлФайл был изменен позже, чем другой_файл.
-size [±]N[cwbkMG]Размер файла равен N блокам, если указано +N, тогда размер файла больше N, -N — меньше. Символ после N означает размер блока. b — 512 байт, с — байт, w — 2 байта, k — килобайт, M — мегабайт, G — гигабайт.
-type CФайл типа C. Наиболее часто используемые значения для С: d — каталог, f — файл.
-user Имя_пользователяФайл принадлежит пользователю с именем Имя_пользователя.

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

Найти в текущем каталоге обычные файлы (не каталоги), имя которых начинается с символа «~».

find . -type f -name “~*” -print

Найти в текущем каталоге файлы, измененные позже, чем файл file.bak.

find . -newer file.bak -type f -print

Операторы

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

Короткая форма оператораДлинная формаОписание






! критерий-notОтрицание (возвращает true, если критерийfalse)
критерий1-a критерий2-andОператор И (true, если критерий1 и критерий2true)
критерий1-o критерий2-orОператор ИЛИ (true, если критерий1 или критерий2true)

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

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

Найти в текущем каталоге файлы, начинающиеся с символа «~» или c «temp» и являющиеся именно обычными файлами (-type f), а не каталогами.

find . ( -name “~*” -or -name “temp*” ) -type f -print

Найти в текущем каталоге (не обрабатывая подкаталоги — -maxdeph 1) обычные файлы (-file f) размером больше 600 мегабайт и менее 1 гигабайта (-size) или файлы имя которых заканчивающиется на «.mpeg» (-name).

find . -maxdepth 1 ( ( -size +600M -and -size -1G ) -or -name “*.mpeg” ) -and -type f

Действия над файлами

Когда выполняется команда find, вы можете выполнять различные действия над найденными файлами. Рассмотрим основные из них.









-exec команда ;Выполнить команду. Обратите внимание, что после команды ставится обратный слеш и точка с запятой.
-execdir команда ;То же самое что и exec, но команда вызывается из подкаталога, содержащего текущий файл.
-ok команда ;То же самое, что и exec, но перед обработкой очередного файла будет выводится запрос на выполнение команды.
-okdir команда ;То же что ok для execdir.
-printВывод имени файла на экран.
-lsВыполнение команды ls -dils над текущим файлом.

В выполняемых командах вы можете использовать параметр {} в качестве аргумента, который заменяется путем к текущему файлу.

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

Найти в текущем каталоге обычные файлы размером больше 1000 байт и выполнить над ними команду ls -dils (действие ls).

find . -size +1000c -type f -ls

Найти в текущем каталоге обычные файлы, начинающиеся с символа тильда «~», и для каждого файла выдавать запрос на его удаление (на выполнение команды rm).

find . -name “~*” -type f -ok rm {} ;

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

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

Поиск всех файлов с расширением .old и их удаление: find / -name “*.old” -exec /bin/rm {} ; Поиск всех файлов, размер которых превышает 100 МБ и их удаление: find / -size +100M -exec /bin/rm {} ; Бывают и такие случаи, что программы “сходят с ума” и заполняют директории тысячами мелких файлов, при этом вы не сможете просто использовать команду rm * по той причине, что командная оболочка не в состоянии заменить символ * на имена всех этих файлов, зато в состоянии удалить эти файлы по очереди: find . -exec /bin/rm {} ; Помните, что вы не должны использовать эти примеры, поскольку для удаления файлов у GNU find есть параметр -delete, более безопасный, нежели “-exec /bin/rm {};”. Пример использования: find / -name “*.old” -delete

В старых системах Unix у вас не будет возможности использовать параметр -delete, поэтому альтернатив параметру -exec для удаления файлов в них не остается.

А теперь рассмотрим некоторые другие примеры использования программы find с параметром exec.

Рекурсивное изменение прав доступа для файлов, не затрагивающее директории.find ./ -type f -exec chmod 644 {} ;

При помощи параметра -type f вы можете вести поиск только файлов и просто изменять права доступа к каждому из них при помощи chmod.

Рекурсивное изменение владельца файлов с olduser на newuserfind / -user olduser -type f -exec chown newuser {} ;

В этом примере я использовал параметр -user как альтернативу параметру -uid.

Рекурсивное изменение прав доступа для всех директорийfind . -type d -exec chmod 755 {} ;

В этом примере я снова использовал параметр -type, но на этот раз с аргументом d для поиска директорий.

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

Для начала рассмотрим простой пример использования команды find для поиска на компьютере файлов с именем config. Мы будем искать файлы config, начиная с корневого каталога /. Для этого вам нужно выполнять команду от имени пользователя root, чтобы иметь достаточно прав доступа, иначе получите сообщения «Permission denied». Итак, выполним команду:

find / -name config -print

Команда означает следующее: искать файлы с именем config (-name config), начиная с каталога / (первый параметр команды find) и выводить имена файлов на экран (аргумент -print). Отмечу, что поиск рекурсивный, то есть при поиске просматриваются все вложенные директории. Как видите все просто. Теперь рассмотрим синтаксис команды и перейдем к обзору ее основных аргументов.

1)Выведите списки всех файлов текущей директории и ее подкаталогов

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

$ find

В качестве альтернативы, мы можем также использовать ‘find . ’, которая выдаст вам тот же результат.

2)Найдите все файлы и директории в вашей текущей рабочей директории

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

$ find . -type d

Чтобы найти только файлы, а не директории:

$ find . -type f

3)Выведите список всех файлов определенной директории

Для того чтобы найти файлы из определенной директории надо ввести:

$ find /root

This command will look for all the files in /root directory.

4)Найдите файл по имени в директории

Для поиска файла по имени в определенной директории введите:

$ find /root -name “linuxtechi.txt”

Эта команда будет искать файл linuxtechi.txt в директории /root. Так же мы найти все файлы с расширением .txt:

$ find /root -name “*.txt”

5)Найдите файл во множестве директорий

Для поиска файлов во множестве директорий введите:

$ find /root /etc -name “linuxtechi.txt”

With this command, we can look for linuxtechi.txt file in /root & /etc directories.

С помощью этой команды мы можем найти файл linuxtechi.txt в директориях /root и /etc.

6)Найдите файл по имени без учета регистра

Ищите файлы без учета регистра с помощью -iname:

$ find /root -iname “Linuxtechi.txt”

В результате вы получите все файлы с названием linuxtechi.txt. При этом файлов может быть несколько, так как linuxtechi.txt будет равняться LINUXTECHI.txt .

7)Найдите все типы файлов отличные от упомянутого

Давайте предположим, что нам необходимо найти все файлы отличные от определенного типа файлов. Чтобы этого добиться вводим:

$ find /root -not -name “*.txt”

8)Найдите файлы по множеству признаков

Мы можем совмещать более чем одно условие при поиске файлов. Предположим, что нам нужны файлы с расширениями .txt и .html:

$ find . -regex “.*.(txt|html)$”

9)Найдите файлы с использованием условия OR

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

$ find -name “*.txt” -o -name “linuxtechi*”

Заключение

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


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

  • https://losst.ru/komanda-find-v-linux
  • http://Cmd4Win.ru/administrirovanie-computera/upravlenie-failami/33-find
  • https://pingvinus.ru/note/command-find
  • https://rtfm.co.ua/komanda-find-i-eyo-opcii-v-primerax/
  • http://rus-linux.net/MyLDP/consol/exec-option-in-command-find.html
  • https://omgubuntu.ru/25-primierov-ispolzovaniia-komandy-find-dlia-nachinaiushchikh-znakomstvo-s-linux/


[/spoiler]


2020-12-22T10:34:30
Linux

Как вывести список установленных пакетов в Linux

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

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

1. Вывести список установленных пакетов в Arch Linux с помощью команды pacman

Pacman — это менеджер пакетов по умолчанию для Arch Linux и его производных, таких как Manjaro Linux.

Чтобы вывести список всех установленных пакетов, используемых pacman в Arch Linux и его вариантах, запустите:

$ pacman -Q

Пример вывода:

Если вы хотите просмотреть страницу вывода за страницей, направьте вывод в команду more, как показано ниже:

$ pacman -Q | more

Чтобы перечислить только явно установленные пакеты и версии:

$ pacman -Qe

Чтобы перечислить только общее количество установленных пакетов в Arch Linux, направьте вывод pacman в команду wc:

$ pacman -Q | wc -l

134

Как видно из вышеприведенного вывода, я установил 134 пакета в свою систему Arch Linux.

2. Список установленных пакетов в Alpine Linux с помощью команды apk

Apk, сокращение от Alpine Package Manager, является менеджером пакетов по умолчанию для Alpine Linux.

Команда для просмотра списка установленных пакетов в Alpine Linux:

$ apk info

Если вы хотите просмотреть список установленных пакетов, а также номер версии и описание пакета, используйте флаг -vv, как показано ниже:

$ apk info -vv

Пример вывода:

lm_sensors-3.4.0-r6 - Collection of user space tools for general SMBus access and hardware monitoring.

man-1.14.3-r0 - dummy package for upgrade compatibility. this can safely be removed

libcrypto1.1-1.1.1i-r0 - Crypto library from openssl

libssl1.1-1.1.1i-r0 - SSL shared libraries

[...]

Чтобы перечислить только общее количество всех установленных пакетов в Alpine Linux, передайте вывод apk info в команду wc, как показано ниже:

$ apk info | wc -l

86

3. Перечислите установленные пакеты в Debian, Ubuntu с помощью команды apt

Apt предоставляет интерфейс командной строки высокого уровня для системы управления пакетами в Debian, Ubuntu и других системах на основе Debian.

Чтобы отобразить список установленных пакетов в Debian, Ubuntu, Linux Mint и других системах на основе DEB, запустите:

$ apt list —installed

Пример вывода:

Отобразите общее количество установленных пакетов в системах на основе Debian, направьте вывод команды apt команде wc, как показано ниже:

$ apt list --installed | wc -l

2575

4. Перечислите установленные пакеты в Debian, Ubuntu с помощью команды dpkg.

Dpkg — это инструмент командной строки для установки, сборки, удаления пакетов Debian и управления ими.

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

$ dpkg -l

Кроме того, вы можете использовать команду dpkg-query для вывода списка всех установленных пакетов Debian.

$ dpkg-query -l

Укажите только общее количество установленных пакетов в системах на основе Debian:

$ dpkg -l | wc -l

2668

$ dpkg-query -l | wc -l

2668

5. Перечислите установленные пакеты в RHEL, Fedora, CentOS с помощью команды yum.

Yum, расшифровывается как Yellowdog Updater, Modified, — это утилита управления из командной строки для установки и управления пакетами в системах на основе Red Hat. Теперь он заменен на dnf в последних версиях RHEL и CentOS.

Чтобы найти список установленных пакетов в Fedora, RHEL и его клонах, таких как CentOS, запустите:

$ yum list installed

Список только общее количество установленных пакетов с использованием команд yum и wc:

$ yum list installed | wc -l

347

6. Перечислите установленные пакеты в RHEL, Fedora, CentOS с помощью команды dnf

DNF — это версия YUM следующего поколения, и он был менеджером пакетов по умолчанию, начиная с Fedora 22, RHEL 8 и CentOS 8. Использование DNF такое же, как и в Yum.

Чтобы найти список установленных пакетов в RHEL, Fedora, CentOS с помощью dnf, выполните:

$ dnf list installed

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

$ dnf list installed | wc -l

7. Список установленных пакетов в openSUSE с помощью команды zypper

Zypper — это менеджер пакетов командной строки по умолчанию для установки и управления пакетами в SUSE и openSUSE.

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

$ zypper se --installed-only

8. Вывести список установленных пакетов в Linux с помощью команды rpm

RPM команда, означает Red Hat Package Manager, используется для установки и управления приложениями из командной строки в системах Redhat основе.

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

$ rpm -qa

Чтобы просмотреть вывод страницы за страницей, направьте вывод по конвейеру в moreкоманду:

$ rpm -qa | more

Вы также можете все установленные пакеты, самые свежие из которых находятся вверху, используя флаг --last, как показано ниже:

$ rpm -qa --last

Следующие два метода являются универсальными. Вы можете использовать эти команды в любых системах, в которых установлены инструменты snapили flatpak.

9. Список пакетов, установленных с помощью оснастки в Linux

Snap — это система развертывания программного обеспечения и управления пакетами, разработанная Canonical.

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

$ snap list

Пример вывода:

Name Version Rev Tracking Publisher Notes

chromium 87.0.4280.88 1424 latest/stable canonical* -

core 16-2.48 10444 latest/stable canonical* core

core18 20201210 1944 latest/stable canonical* base

gnome-3-26-1604 3.26.0.20200529 100 latest/stable/… canonical* -

gnome-3-28-1804 3.28.0-19-g98f9e67.98f9e67 145 latest/stable canonical* -

gnome-3-34-1804 0+git.3556cb3 60 latest/stable canonical* -

gnome-system-monitor 3.36.0-12-g35f88a56d7 148 latest/stable/… canonical* -

gtk-common-themes 0.1-50-gf7627e4 1514 latest/stable/… canonical* -

multipass 1.5.0 2907 latest/stable canonical* -

10. Вывести список пакетов, установленных с помощью Flatpak в Linux

Flatpak — это независимая от платформы система управления пакетами для создания, установки и запуска изолированных настольных приложений и сред выполнения в Linux.

Чтобы вывести список всех установленных приложений Flatpak в Linux, запустите:

$ flatpak list --app

Пример вывода:

Name Application ID Version Branch Installation

Fondo com.github.calo001.fondo 1.5.1 stable system

Flatseal com.github.tchx84.Flatseal 1.6.5 stable system

FontFinder io.github.mmstick.FontFinder 2.0.0 stable system

Giara org.gabmus.giara 0.3 stable system

Solanum org.gnome.Solanum 1.1.0 stable system

Обратите внимание, что в приведенной выше команде будут перечислены только пакеты, которые установлены исключительно с приложением flatpak.

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



2020-12-22T10:24:42
Вопросы читателей

Wine для нескольких пользователей.

Сегодня в статье поговорим о том, как можно настроить wine для использования его несколькими пользователями в вашей системе Linux.






Для примера я буду использовать легковесный дистрибутив XUbuntu, для всех производных операционок, таких как Ubuntu, Debian и т.д. инструкция будет идентичной.




Для начала установим wine на Вашу систему. Как это сделать я описывал в данной статье.




Будем считать что wine у вас установлен, для первого запуска достаточно набрать следующую команду:




wineboot




Программе потребуется некоторое время, а также недостающие зависимости, такие как mono и geckoo. Соглашаемся со всеми установками. После установки всех недостающих программ в директории пользователя появится директория ~/.wine. Если вы ее не видите, то нажмите сочетание клавиш ctrl+h.




Настройка многопользовательского wine




Давайте перенесем нашу только, что созданную директорию в директорию /etc.




sudo mv ~/.wine /etc/wine




Создадим общую группу для всех наших существующих и будущих пользователей.




sudo groupadd samba




Добавим нашего пользователя в данную группу.




sudo usermod -a -G samba myuser




Назначим группу и пользователя на нашу директорию /etc/wine




sudo chown -R myuser:samba /etc/wine




Теперь создадим символическую ссылку на директорию из /etc/wine в директорию нашего пользователя.




ln -s /etc/wine /home/myuser/.wine




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




chmod -R 6770  /etc/wine




Давайте теперь запустим нашу программу с помощью wine например regedit.exe




wine regedit.exe




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




Если Вы попробуете просто создать символическую ссылку на директорию /etc/wine, то программы установленные для пользователя myuser не запуститься под новым пользователем . Потому-что wine требует права юзера на некоторые фалы в своей директории.




Например файлы system.reg и user.reg должны принадлежать только тому пользователю, от которого вы собираетесь работать с wine. А в нашем случае владельцем является myuser




Для того чтобы обойти данное ограничение не достаточно присвоить SGIT и SUID (6770) – права на запуск файлов и директорий от пользователя владельцем которого он является. Необходимо, как я уже сказал, быть владельцем файла. Сейчас данные файлы должны принадлежать пользователю myuser. Но как же сделать multiuser wine (многопользовательский wine) спросите вы. Да все очень просто. Надо всего лишь переместить файлы system.reg и user.reg в директорию юзера, того пользователя, которому хотите установить wine и назначить владельцем этих файлов данного пользователя. Давайте проделаем эти шаги.




Этапы настройки многопользовательского wine




  • Создаем пользователя в системе:




adduser myuser2




  • Добавим нашего пользователя в группу samba.




sudo usermod -a -G samba myuser2




  • Создаем директорию wine в директории нового пользователя.




sudo mkdir /home/myuser2/.wine




  • Ограничим права на чтение директории данного юзера:




sudo chmod -R 6770 /home/myuser2




  • Ограничим доступ к директории пользователя:




sudo chown -R myuser2:myuser2 /home/myuser2




  • Создаем символические ссылки на директории /etc/wine/drive_c и /etc/wine/dosdiveces в директорию wine нового пользователя




ln -s /etc/wine/drive_c /home/myuser2/.wine/




ln -s /etc/wine/dosdiveces /home/myuser2/.wine




  • Перемещаем файлы system.reg и user.reg и назначим права на них




cp /etc/wine/{system.reg,user.reg} /home/myuser2/.wine/




chown myuser2:myuser2 /home/myuser2/.wine/{system.reg,user.reg}




После давайте попробуем запустить программу regedit от нашего нового пользователя myuser2. Для этого залогинемся под пользователем и выполним программу:




wine regedit.exe




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







Ошибки wine




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




wine: /home/myuser2/.wine is not owned by you




В этом случае необходимо назначить правильные права на директорию ~/.wine данного пользователя.




Заключение




Подведем итог: Пользователь myuser2 может запустить все программы установленные нашим myuser пользователем. Также работа wine теперь осуществляется от всех пользователей в системе. Мы не создаем дубликаты директорий wine для каждого пользователя.



[endtxt]




RSS



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


2020-12-21T15:02:58
Wine

Изменение раздела диска в Linux с помощью Gparted

Есть ли в вашей установке Linux специальный домашний раздел? Вы хотите, чтобы он был больше или меньше? Если да, то это руководство для вас! Мы покажем вам, как изменить размер домашнего раздела в Linux!

Прежде чем мы начнем

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

Создание Gparted Live USB

Поскольку домашний раздел используется, когда ваш компьютер с Linux включен и находится в системе, вы не сможете установить Gparted в Linux и изменить размер домашней папки по своему усмотрению. Вместо этого для этого лучше всего использовать Gparted Live ISO через USB.

Создать Gparted Live USB очень просто. Чтобы начать процесс, вставьте USB-накопитель емкостью 1 ГБ (или больше) в USB-порт вашего ПК с Linux. После подключения USB следуйте пошаговым инструкциям ниже, чтобы сделать активный USB.

Шаг 1. Сначала вы должны загрузить файл ISO Gparted. Файл ISO содержит действующую операционную систему, которую мы будем записывать на USB-накопитель. Зайдем на страницу загрузки GParted, и захватить «GParted-жить-1.1.0-8-amd64.iso».

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

Шаг 2: Перейдите на Etcher.io и загрузите последнюю версию инструмента для прошивки USB/SD-карты Etcher. Получение этого приложения крайне важно, поскольку это самый простой способ создать Gparted Live USB.

Скачав Etcher на свой компьютер, установите и запустите.

Шаг 3: Внутри Etcher найдите кнопку «Flash from file» и выберите ее с помощью мыши. Затем используйте окно обозревателя файлов, чтобы выбрать файл ISO Gparted на вашем компьютере, который вы загрузили ранее.

После загрузки файла ISO в Etcher можно начинать перепрошивку.

Шаг 4: Найдите кнопку «Select target» и щелкните по ней мышью. Используйте пользовательский интерфейс Etcher, чтобы выбрать USB-накопитель, на котором вы планируете прошить файл ISO Gparted.

После выбора USB-накопителя Etcher установит его в качестве устройства для перепрошивки.

Шаг 5: Найдите «Flash from file» в приложении Etcher и выберите ее, чтобы начать процесс прошивки. Перепрошивка займет всего пару минут, так как файл ISO Gparted не очень большой.

Когда процесс прошивки будет завершен, перезагрузите компьютер с Linux, вставив Gparted Live USB в порт USB. Затем загрузите BIOS и настройте его для загрузки с USB для доступа к Gparted.

Доступ к Gparted Live

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

Шаг 1: Выберите опцию «Gparted Live (настройки по умолчанию) в Grub с помощью  клавиши Enter.

Шаг 2: Выберите опцию «Не трогать раскладку клавиатуры» с помощью клавиши Enter. Или используйте доступные параметры, чтобы выбрать раскладку, если вам нужно.

Шаг 3: Введите номер языка, назначенный языку, который вы хотите использовать, если Gparted не обнаруживает его автоматически.

Шаг 4: Введите команду startx в командной строке терминала. Эта команда запустит среду Gparted. Среда очень легкая, поэтому на вашем ПК она должна работать без сбоев.

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

Изменить размер домашнего раздела в Linux

Изменение размера домашнего раздела в Gparted начинается с определения раздела в редакторе. Используя Gparted, найдите свой домашний раздел. В этом примере домашний раздел /dev/sda4. Ваш БУДЕТ отличаться.

После того, как вы найдете свой домашний раздел, щелкните его правой кнопкой мыши. В контекстном меню найдите параметр «Изменить размер/переместить» и щелкните его мышью.

С помощью мыши перетащите домашний раздел в больший или меньший размер с визуальной графикой вверху. Или, если вы хотите быть более точным, введите новый размер вашего домашнего раздела (в MiB) в поле «новый размер».

После того, как вы изменили размер домашнего раздела в Gparted, нажмите кнопку «Изменить размер/Переместить» в правом нижнем углу, чтобы сохранить изменения. Затем найдите значок зеленой галочки в левом верхнем углу и выберите его, чтобы записать изменения на диске.

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

https://www.youtube.com/watch?v=IKMsciIVPjQ



2020-12-21T10:46:21
Вопросы читателей

Команда Whoami в Linux

В этой статье мы рассмотрим команду whoami .

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

 

Как использовать команду whoami

Синтаксис команды whoami следующий:

whoami [OPTION]

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

whoami

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

linuxize

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

Вот пример использования оператора if для сравнения имени пользователя, запускающего сценарий, с заданной строкой.

if [[ "$(whoami)" != "any_name" ]]; then
  echo "Only user 'any_name' can run this script."
  exit 1
fi

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

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

whoami не принимает аргументы. Если вы передаете аргумент, команда выводит сообщение об ошибке:

whoami: extra operand ‘anything’
Try 'whoami --help' for more information.

 

Команда whoami принимает только два варианта:

  • -h , --help — отобразить справочное сообщение и выйти.
  • -V , --version — показать информацию о версии и выйти.

 

Альтернативные команды

Выполнение команды id с параметрами -un дает тот же результат, что и запуск whoami :

whoami [OPTION]

Используйте команду id чтобы получить дополнительную информацию о данном пользователе.

Переменная среды $USER содержит имя вошедшего в систему пользователя:

echo $USER

 

Команда whoami состоит из слов «Кто я?» и печатает имя пользователя, связанного с текущим эффективным идентификатором пользователя.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

🐧 Отравление кэша DNS SAD: временное исправление для серверов и настольных компьютеров Linux

Появилась новая угроза отравления кеша DNS, которая носит название Side-channel AttackeD DNS (SAD DNS).

Эта новая атака работает следующим образом: SAD DNS позволяет хакерам перенаправлять трафик, предназначенный для определенного домена, на сервер под их контролем.

С помощью этой атаки они могут легко шпионить за вашим трафиком.

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

Этот новый недостаток затрагивает операционные системы Linux (ядро 3.18-5.10), Windows Server 2019 (версия 1809) и новее, macOS 10.15 и новее, FreeBSD 12.1.0 и новее.

Позвольте мне показать вам, как развернуть скрипт отBlueСat на ваших компьютерах и серверах Linux, чтобы вы могли избежать проблем, пока поставщики DNS-серверов не решат проблему.

Что вам понадобится

  • Доступ к машинам Linux, которые используют DNS в вашей сети

  • Пользователь с привилегиями sudo

Как пользоваться скриптом

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

#!/usr/bin/env bash

#

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS

# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE

# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER

# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,

# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN

# THE SOFTWARE.

###########################################################################  

#

# Three options for installation. Choose one of the following:

#

# 1. Copy to /etc/cron.minutely

#

# 2. Copy the script to the DNS server. Create a file in /etc/cron.d with

#    the following syntax:

#

#    * * * * *root    /path/to/icmp_ratelimit.sh >/dev/null 2>&1

#

# 3. Create a user cron entry while using `crontab -e`

#

#    * * * * * /path/to/icmp_ratelimit.sh >/dev/null 2>&1

#

# - Change "/path/to" to match the exact location of the script.

# - Finally, make sure it is executable: chmod +x /path/to/icmp_ratelimit.sh

#

seconds="60"

while [[ ${seconds} -gt 0 ]]

do

     echo $((500 + ${RANDOM} % 1500)) > /proc/sys/net/ipv4/icmp_ratelimit

     echo $((500 + ${RANDOM} % 1500)) > /proc/sys/net/ipv6/icmp_ratelimit

    sleep .95

done

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

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

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

«Скрипт примерно эквивалентен изменению ядра Linux, совершенному 16 октября. Один раз в секунду он устанавливает новый рандомизированный предел для ответов ICMP, между 500-1500/с. Он будет работать в системах с ядром Linux версии 2.4.10. или новее “.

Создайте этот скрипт с помощью команды:

sudo nano /usr/local/bin/icmp_ratelimit.sh

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

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

sudo chmod u+x /usr/local/bin/icmp_ratelimit.sh

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

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

sudo crontab -e

Внизу этого файла вставьте следующее:

*/10 * * * * flock -xn /root/.icmpratelimit-lock -c /usr/local/bin/icmp_ratelimit.sh

Сохраните и закройте файл.

Обязательно позаботьтесь об этом на всех своих машинах с Linux.

Заключение

Это все, что нужно сделать.

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

 

 



2020-12-18T09:39:11
Закрытие уязвимостей