Команда locate в linux

Работа с утилитами *ctl

systemctl

— управляет работой системных сервисов и утилит.

systemctl   

systemctl -l status nginx
— проверка состояния сервиса.

systemctl start ngnix
— запуск работы сервиса.

systemctl stop nginx
— остановка работы сервиса.

systemctl enable nginx
— включение сервиса при старте системы.

systemctl disable nginx
— выключение сервиса при старте системы.

systemctl reload nginx
— обновление конфигурационного файла сервиса.

systemctl restart nginx
— перезапуск сервиса.

systemctl is-enabled
— проверка включения сервиса при старте системы.

systemctl list-unit-services
— вывод списка всех сервисов.

systemctl show nginx
— вывод свойств сервиса.

systemctl cat nginx
— вывод списка зависимых и исходных файлов сервиса.

loginctl

— менеджер учетных записей.

loginctl   

loginctl list-users
— вывод авторизованных пользователей.

loginctl user-status root
— вывод авторизованных пользователей.

loginctl show-user root
— вывод свойств пользователя.

loginctl terminate-user root
— удаление всех сессий пользователя.

journalctl

— вывод журналов (логов) сервисов.

journalctl 

journalctl —disk-usage
— вывод количества занятой памяти под логи.

journalctl —unit=nginx
— вывод логов сервиса.

journalctl —output=verbose —unit=nginx
— вывод всех полей в логе сервиса.

journalctl —output=cat —unit=nginx
— вывод только сообщений из лога сервиса.

Команда tail

Команда tail отображает последнюю часть (хвост) файла. Как правило, при решении различных проблем нет необходимости просматривать весь лог-файл в поиске ошибок. Вместо этого можно проверить, что сказано в самом последнем его сообщении. Например, вы можете применить команду и узнать, что происходит в лог-файле во время выполнения запроса к своему HTTP-серверу Apache:

Благодаря параметру (от англ. «follow» — следовать), строки лог-файла будут выводиться по мере их записи в лог-файл. Теперь представим другую ситуацию: у вас есть скрипт, работающий в фоновом режиме, который каждые несколько секунд обращается к некоторому внешнему ресурсу, и лог-файл ведет запись данных запросов. Вместо того, чтобы в режиме реального времени следить за всем содержимым лог-файла, вы можете прибегнуть к команде , выводящей 100 последних строк:

Непечатаемые символы

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

Наш странный файл — один из таких:

Если мы посмотрим на него в браузере файлов и нажмем «F2», чтобы переименовать его, непечатаемые символы будут представлены странным символом.

Вы можете использовать опцию -b (escape), чтобы увидеть, что на самом деле содержит имя файла. Эта опция заставляет ls использовать escape-последовательности Язык программирования C для представления управляющих символов.

ls -b a*

Таинственный символ оказывается символом новой строки, представленным в C как «n».

Использование locate

Данная утилита просто незаменима в случае если вам хотя бы
приблизительно известно имя файла, который нужно найти.
Отличительная особенность данной команды, скажем от того же
find, в том что при работе она не сканирует по настоящему
файловую систему, поиск идет в предварительно построенной базе,
в которой хранится как-бы слепок с файловой системы.
Такой слепок выполняется
с помощью команды или updatedb, которая
по настоящему перелопачивает ваши жесткие или сетевые диски, а
имена всех найденных файлов записывает в базу. Естественно что
данная процедура довольно ресурсоемкая, и может занимать довольно
длительное время. Ее запуск обычно поручают crontab,
который запускает с требуемой частотой. Частота обновления
базы зависит от того насколько часто обновляется содержимое файловой системы,
а также насколько важна актуальность данных. Так обычно обновление
базы выполняется автоматически раз в неделю, или вручную, после того как вы или
системный администратор установили новую партию свежего ПО. Отмечу,
для того чтобы обновить базу, нужно иметь права суперпользователя.

Приведу простейший пример использования:

	$ locate traceroute
	/usr/man/man8/traceroute.8.gz
	/usr/sbin/traceroute6
	/usr/sbin/traceroute

	$ locate mpg123
	/usr/doc/mpg123-0.59r
	/usr/doc/mpg123-0.59r/BUGS
	/usr/doc/mpg123-0.59r/CHANGES
	/usr/doc/mpg123-0.59r/COPYING
	/usr/doc/mpg123-0.59r/INSTALL
	/usr/doc/mpg123-0.59r/JUKEBOX
	/usr/doc/mpg123-0.59r/README
	/usr/doc/mpg123-0.59r/TODO
	/usr/doc/mpg123-0.59r/mp3license
	/usr/man/man1/mpg123.1.gz
	/usr/bin/mpg123
	$

Из приведенных примеров видно три существенных момента, касающихся
поведения . Во-первых ищутся все файлы и каталоги в именах
которых встречается подстрока заданная в качестве аргумента. Во-вторых
файлы выводятся включая полный путь к ним. В-третьих
заданная подстрока вообще может не входить в имя самого файла,
а встречаться в его пути. Так во втором примере в список найденных
файлов было полностью включено содержимое каталога mpg123-0.59r.

Иногда требуется более точный поиск, когда нужно ограничить
то место куда может входить заданная подстрока. Скажем
если нам нужно найти только файлы и каталоги в название
которых входит mpg123. В данном случае можно использовать
шаблоны аля bash (помните
*, ?, ) или более продвинутый вариант
использующий регулярные выражения. Я
предпочитаю последний, как более мощный и продвинутый.

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

	$ locate -r "mpg123*$"
	/usr/doc/mpg123-0.59r
	/usr/man/man1/mpg123.1.gz
	/usr/bin/mpg123
	$

Строка mpg123*$ — просит найти
те файлы в которых после подстроки mpg123 могут быть
ноль или более символов, кроме символа , после чего
идет конец строки. Таким образом из результата поиска исключаются
строки вида /usr/doc/mpg123-0.59r/BUGS.

Еще одна полезная возможность — это форма вызова .
Параметр говорит о том что нужно произвести нечувствительный
к регистру поиск:

	$ locate  "/etc/dir"
	/usr/local/share/emacs/21.1/etc/dired-ref.ps
	/usr/local/share/emacs/21.1/etc/dired-ref.tex
	$ locate -i "/etc/dir"
	/usr/local/share/emacs/21.1/etc/dired-ref.ps
	/usr/local/share/emacs/21.1/etc/dired-ref.tex
	/etc/DIR_COLORS
	$

Как найти все файлы только для чтения

Как уже было сказано, команда find более многофункциональна, чем locate. Она может выполнять поиск по операционной системе и жесткий дискам, руководствуюсь в качестве параметров и фильтров разрешениями, выданными конкретному пользователю (его учетной записи). Для этого используются специальные маски прав в восьмеричной и других системах исчисления. К примеру, для нахождения данных с маской прав 0664, необходимо выполнить команду «$find . type f -perm 0664» без кавычек (они добавлены для удобства отображения команд).

Для поиска файлов с установленными флагами suid/guid выполняют такую строку «$find / -perm 2644». А вот поиск файлов, которые доступны только для чтения, выглядит следующим образом: «$ find /etc -maxdepth 1 -perm /u=r».

Важно! Исполняемые файлы имеют такие же разрешения и по ним удобно проводить поиск. Пользуясь масками команды find, а не поиском по расширению

Для нахождения только исполняемых файлов прописывают и выполняют «$find /bin -maxdepth 2 -perm /a=x».

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

Поиск файла по имени

1. Простой поиск по имени:

find / -name «file.txt»

* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня .

2. Поиск файла по части имени:

find / -name «*.tmp»

* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp

3. Несколько условий. 

а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:

find . -name «sess_*» -a -name «*cd»

б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:

find . -name «sess_*» -o -name «*cd»

в) Более компактный вид имеют регулярные выражения, например:

find . -regex ‘.*/\(sess_.*cd\)’

find . -regex ‘.*/\(sess_.*\|.*cd\)’

* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).

4. Найти все файлы, кроме .log:

find . ! -name «*.log»

* в данном примере мы воспользовались логическим оператором !.

Поиск по дате

1. Поиск файлов, которые менялись определенное количество дней назад:

find . -type f -mtime +60

* данная команда найдет файлы, которые менялись более 60 дней назад.

2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find —version).

а) дате изменения:

find . -type f -newermt «2019-11-02 00:00»

* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.

find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02

* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).

б) дате обращения:

find . -type f -newerat 2019-10-08

* все файлы, к которым обращались с 08.10.2019.

find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01

* все файлы, к которым обращались в октябре.

в) дате создания:

find . -type f -newerct 2019-09-07

* все файлы, созданные с 07 сентября 2019 года.

find . -type f -newerct 2019-09-07 ! -newerct «2019-09-09 07:50:00»

* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50

Искать в текущей директории и всех ее подпапках только файлы:

find . -type f

* f — искать только файлы.

Поиск по правам доступа

1. Ищем все справами на чтение и запись:

find / -perm 0666

2. Находим файлы, доступ к которым имеет только владелец:

find / -perm 0600

Поиск файла по содержимому

find / -type f -exec grep -i -H «content» {} \;

* в данном примере выполнен рекурсивный поиск всех файлов в директории и выведен список тех, в которых содержится строка content.

С сортировкой по дате модификации

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r

* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.

Лимит на количество выводимых результатов

Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r | head -n 1

Поиск с действием (exec)

1. Найти только файлы, которые начинаются на sess_ и удалить их:

find . -name «sess_*» -type f -print -exec rm {} \;

* -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.

2. Переименовать найденные файлы:

find . -name «sess_*» -type f -exec mv {} new_name \;

или:

find . -name «sess_*» -type f | xargs -I ‘{}’ mv {} new_name

3. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:

find . -name «*.tmp» | wc -l

4. Изменить права:

find /home/user/* -type d -exec chmod 2700 {} \;

* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.

5. Передать найденные файлы конвееру (pipe):

find /etc -name ‘*.conf’ -follow -type f -exec cat {} \; | grep ‘test’

* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.

6. Произвести замену в файлах с помощью команды sed:

find /opt/project -type f -exec sed -i -e «s/test/production/g» {} \;

* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.

Фильтрация файлов по глубине

По глубине ищут в тех случаях, когда документы точно находятся в каталогах, которые «лежат» в других папках. К примеру, каждый каталог (а всего их путь будет три уровня) содержит 10 файлов и 10 других подпапок Для создания подобной структуры необходимо выполнить команды:

cd

mkdir -p ~/test/level1dir{1..10}/level2dir{1..10}/level3dir{1..10}

touch ~/test/{file{1..10},level1dir{1..10}/{file{1..10},level2dir{1..10}/{file{1..10},level3dir{1..10}/file{1..10}}}}

cd ~/test

Далее можно искать по имени (find -name file1) или выполнить фильтрацию по глубине (find -maxdepth 2 -name file1).

Команды для работы с файлами

ls — выводит список файлов в текущем каталоге. Чтобы отобразить список файлов в любом каталоге, нужно набрать путь к каталогу после команды, например: ls /usr/bin. Некоторые ключи команды ls:

-a — показать скрытые файлы;

-s — указать размер файлов в блоках;

-t — сортировка по времени модификации файлов, сначала новые файлы;

-X — сортировка по расширению названия файлов, файлы без расширения выводятся вначале;

-l — расширенный формат вывода: показывает атрибуты, владельцев и группу файлов, размер, дату и время их создания;

-r — изменить порядок сортировки на обратный. Например, команда

ls -lat /etc выведет содержимое каталога /etc в расширенном виде и с сортировкой по времени создания файлов.

cp — копирование файлов. cp doc1 doc2 — создаст копию файла doc1 под именем doc2.

rm — удаление файлов. rm doc — удалит файл doc. rm * — удалит все файлы в текущем каталоге. rm *doc — удалит все файлы, которые заканчиваются на doc. Ключ -i используется для подтверждения удаления каждого файла, ключ -r для удаления каталогов и файлов внутри этих каталогов.

rmdir — удаление директории. rmdir alex — удалит каталог alex.

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

pwd — вывод текущей директории.

mkdir — создание новой директории. mkdir alex — создаст каталог alex.

mv — перемещение или переименование файлов. mv new old — переименует файл new в old.

cat — соединение файлов или вывод файлов на стандартное устройство вывода. cat doc — выведет файл doc. 

cat /proc/cpuinfo — выдаст подробную информацию о процессоре, cat /proc/version — о версии ядра Linux.

touch — создание пустого файла.

touch doc — создаст файл doc. find — поиск файлов. find / -name «doc*» — найдет все файлы, которые начинаются с doc.

ln — создание ссылки на файл. ln file1 file2 — создаст жесткую ссылку. Ключ -s используется для создания символической ссылки.

tar — программа для работы с архивами. tar -zxvf file.tar.gz — распакует архив file.tar.gz. tar -cvf my.tar myfile — заархивирует файл myfile, создав архив my.tar. 

more — вывод файлов с остановкой для просмотра, в отличие от cat, который выводит весь файл сразу. Можно прокручивать текст построчно, с помощью клавиши ввода или постранично с помощью пробела.

less — программа для просмотра файлов аналогичная more, но позволяет прокручивать текст вверх и управлять с помощью курсорных клавиш.

nano — простой полноэкранный текстовый редактор. Рекомендуется для новичков, поскольку содержит минимум функций и основные команды отображаются на экране.

vi — довольно мощный текстовый редактор, но он имеет свою нестандартную систему команд, поэтому требует время на освоение.

mc (Midnight Commander) — мощный файловый менеджер, аналог Norton Commander для DOS или FAR для Windows. Позволяет удалять, копировать, переименовывать, просматривать, редактировать файлы, менять их атрибуты и т. д. Midnight Commander обычно не входит в стандартный набор системных программ, поэтому его нужно устанавливать отдельно. Но он настоятельно рекомендуется к использованию, поскольку сильно упрощает работу с файлами.

Рис. 2. Midnight Commander в gnome-terminal

Пользователи и группы

  • создать новую группу с именем group_name

  • удалить группу group_name

  • переименовать группу old_group_name в new_group_name

  • создать пользователя user1, назначить ему в качестве домашнего каталога /home/user1, в качестве shell’а /bin/bash, включить его в группу admin и добавить комментарий Nome Cognome

  • создать пользователя user1

  • удалить пользователя user1 и его домашний каталог

  • изменить атрибуты пользователя

  • сменить пароль

  • сменить пароль пользователя user1 (только root)

  • установить дату окончания действия учётной записи пользователя user1

  • проверить корректность системных файлов учётных записей. Проверяются файлы /etc/passwd и /etc/shadow

  • проверить корректность системных файлов учётных записей. Проверяется файл/etc/group

  • изменить первичную группу текущего пользователя. Если указать «-», ситуация будет идентичной той, в которой пользователь вышил из системы и снова вошёл. Если не указывать группу, первичная группа будет назначена из /etc/passwd

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: