Авторская информация о системном администрировании.
# find | awk -F '/' '{print $NF;}'
Переместить найденные по маске файлы из одной директории в другую:
# find /mnt/backup/*site.ru* -type f -exec mv {} /web/sites/ \;
Найти все файлы по маске и сжать:
# find /data/1c-bases-backup -type f -name 1Cv8.1CD -exec gzip '{}' \;
Переименовать все найденные файлы:
# find /backup/sql -type f -name "*.sql.gz" -exec mv {} {}.old \;
Подробный список файлов размером больше 100М с помощью ls:
# find /data -type f -size +100M -exec ls -lh '{}' \;
Поиск файлов по содержимому (header.php):
# find /web/site.ru -type f -exec grep -i -H "header.php" {} \;
Посчитать количество найденных файлов:
# find /home/user -type f | wc -l
Найти файлы в определённом временном интервале:
# find /mnt/zz_archive -type f -newermt '2022-01-01 00:01' ! -newermt '2022-01-31 23:59'
Потом их можно сжать, переместить и т.д, как было показано в предыдущих примерах.
Искать без учёта регистра:
# find /data -type f -iname FILE_NAME
Поиск файлов, которые менялись сколько то дней назад и более:
# find /data -type f -mtime +30
или в течении последних 5 дней, но не позже:
# find /data -type f -mtime -5
или в определённом промежутке в минутах (10-20 минут назад):
# find /data -type f -mmin -20 -mmin +10
Cортировка по дате изменения:
# find /data -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r
и обратная сортировка:
# find /data -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort
Захватил наиболее типовые ситуации, с которыми чаще всего приходится сталкиваться в консоли или скриптах автоматизации.
#bash #terminal #find# chmod -x chmod
К сожалению, сейчас решение очень легко находится через поиск. А вот когда-то давно это могло стать хорошим испытанием на сообразительность. Выходов из сложившейся ситуации много. Вот несколько примеров:
1️⃣ Используем утилиту setfacl. По умолчанию её может не быть в системе, но не проблема установить.
# setfacl -m u::rwx,g::rx,o::x /usr/bin/chmod
2️⃣ Можно запустить утилиту chmod, передав её явно динамическому компоновщику. В контексте данной заметки считайте компоновщик интерпретатором для программы chmod. В разных дистрибутивах он может иметь разное название и расположение. Пример для Debian 11:
# /usr/lib64/ld-linux-x86-64.so.2 /usr/bin/chmod +x /usr/bin/chmod
3️⃣ Можно скопировать права с любого исполняемого файла и записать содержимое утилиты chmod в этот файл. Получается рабочая копия chmod.
Создаём пустой файл с правами утилиты ls.
# cp --attributes-only /usr/bin/ls ./new_chmod
Копируем содержимое утилиты chmod в созданный файл:
# cat /usr/bin/chmod > ./new_chmod
Можно использовать:
# ./new_chmod +x /usr/bin/chmod
4️⃣ Почти то же самое что и предыдущий вариант только проще:
# install -m 755 /usr/bin/chmod ./new_chmod
или так:
# rsync --chmod=ugo+x /usr/bin/chmod ./new_chmod
5️⃣ Если умеете программировать на какой-то языке, то можно с его помощью вернуть бит исполнения. Пример с python:
python -c "import os;os.chmod('/usr/bin/chmod', 0755)"
Если знаете ещё какие-то интересные и необычные решения данной проблемы, делитесь в комментариях.
#terminal #linux #юмор# mknod -m 666 /dev/null c 1 3
Если я не ошибаюсь, то /dev устройства создаются динамически при каждой загрузке устройства и следит за этим udev.
/dev/null - символьное псевдоустройство. Ключ "c" в команде mknod как раз указывает на это (b - блочный, c - символьный). Кстати, если удалить /dev/null и создать вместо него текстовый файл, то можно посмотреть, кто и как использует это псевдоустройство. Я чисто из любопытства это сделал:
# rm -f /dev/null
# touch /dev/null
# chmod 0666 /dev/null
# tail -f /dev/null
Дальше можно выполнять какие-то действия: логиниться в систему, обновлять пакеты, останавливать службы и т.д. Будет видно, как в /dev/null постоянно кто-то что-то отправляет и делает truncate потом, так что файл будет всегда нулевого размера и без tail посмотреть, что туда пишут, не получится.
#terminal #linux# dnf install s3fs-fuse
# apt install s3fs
Далее необходимо создать файл с учётными данными для подключения к облаку:
# echo user:password > ~/.passwd-s3fs
# chmod 600 ~/.passwd-s3fs
И можно монтировать:
# s3fs mybucket /mnt/s3 -o passwd_file=~/.passwd-s3fs \
-o url=https://s3.storage.selcloud.ru \
-o use_path_request_style
Показал на примере S3 хранилища в Selectel. Я обычно им пользуюсь, потому что дёшево.
#s3