Работа с утилитами *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