Как быстро создать файл любого размера для тестов? (Win/Lin/Mac)
Классическая задача: нужно протестировать работу мониторинга, скрипта очистки или уведомлений о заканчивающемся месте на диске. Для этого нужен «мусорный» файл большого размера, но создавать его копированием реальных данных — долго и неудобно.
Вот как сгенерировать такой файл мгновенно в любой ОС.
🐧 Linux: fallocate
Современный и самый быстрый способ. Файл создаётся моментально, так как место под него просто резервируется (pre-allocated), а не заполняется нулями.
▪️ Команда:
Bash
-l — задаёт размер. Можно использовать K, M, G, T (кило-, мега-, гига-, терабайты).
Классическая альтернатива — dd, но он работает медленнее, так как реально пишет нули на диск:
⊞ Windows: fsutil
В Windows для этого есть встроенная утилита fsutil. Она работает по тому же принципу, что и fallocate, — мгновенно создаёт пустой файл заданного размера.
▪️ Команда (запускать в CMD или PowerShell от имени администратора):
PowerShell
Важно: размер указывается в байтах.
Лайфхак для PowerShell, чтобы не считать нули:
PowerShell
macOS: mkfile
В macOS (и других BSD-системах) есть своя специальная утилита — mkfile.
▪️ Команда:
Bash
Суффиксы k, m, g для размеров также поддерживаются.
📌 Почему fallocate и fsutil лучше?
Эти утилиты не тратят время и ресурсы диска на запись данных. Они просто сообщают файловой системе: «Зарезервируй здесь 10 ГБ». Поэтому файл любого, даже самого гигантского, размера появляется мгновенно. Идеально для быстрых тестов.
Теперь у вас под рукой есть инструмент для каждой системы, чтобы проверить, сработают ли ваши алерты, когда место действительно начнёт заканчиваться.
#команды #linux #windows #macos #testing #sysadmin
Классическая задача: нужно протестировать работу мониторинга, скрипта очистки или уведомлений о заканчивающемся месте на диске. Для этого нужен «мусорный» файл большого размера, но создавать его копированием реальных данных — долго и неудобно.
Вот как сгенерировать такой файл мгновенно в любой ОС.
🐧 Linux: fallocate
Современный и самый быстрый способ. Файл создаётся моментально, так как место под него просто резервируется (pre-allocated), а не заполняется нулями.
▪️ Команда:
Bash
# Создать файл размером 10 гигабайт
fallocate -l 10G large_file.tmp
-l — задаёт размер. Можно использовать K, M, G, T (кило-, мега-, гига-, терабайты).
Классическая альтернатива — dd, но он работает медленнее, так как реально пишет нули на диск:
dd if=/dev/zero of=large_file.tmp bs=1G count=10
⊞ Windows: fsutil
В Windows для этого есть встроенная утилита fsutil. Она работает по тому же принципу, что и fallocate, — мгновенно создаёт пустой файл заданного размера.
▪️ Команда (запускать в CMD или PowerShell от имени администратора):
PowerShell
# Создать файл размером 5 гигабайт (размер в байтах)
fsutil file createnew C:\temp\large_file.tmp 5368709120
Важно: размер указывается в байтах.
Лайфхак для PowerShell, чтобы не считать нули:
PowerShell
# Создать файл на 5 ГБ
fsutil file createnew C:\temp\large_file.tmp (5 * 1GB)
macOS: mkfile
В macOS (и других BSD-системах) есть своя специальная утилита — mkfile.
▪️ Команда:
Bash
# Создать файл размером 2 гигабайта
mkfile 2g large_file.tmp
Суффиксы k, m, g для размеров также поддерживаются.
📌 Почему fallocate и fsutil лучше?
Эти утилиты не тратят время и ресурсы диска на запись данных. Они просто сообщают файловой системе: «Зарезервируй здесь 10 ГБ». Поэтому файл любого, даже самого гигантского, размера появляется мгновенно. Идеально для быстрых тестов.
Теперь у вас под рукой есть инструмент для каждой системы, чтобы проверить, сработают ли ваши алерты, когда место действительно начнёт заканчиваться.
#команды #linux #windows #macos #testing #sysadmin
macOS: macOS глазами Linux-админа
Многие админы воспринимают macOS как «чисто пользовательскую» систему. На деле это полноценный Unix, а значит — большинство навыков из Linux работают здесь «из коробки».
▪️ Архитектура
Под капотом macOS: Darwin + BSD + ядро XNU. Это тот же Unix-мир, только в графической обёртке.
▪️ Отличия от Linux
Домашние директории в /Users, а не в /home.
По умолчанию shell — zsh (но можно вернуть bash).
Управление системой через launchctl, diskutil, defaults.
▪️ Зачем это важно
Если вы админ и привыкли к Linux, то macOS не придётся «переучивать». Большинство привычных команд работают, а специфические утилиты быстро осваиваются.
🧠 Для админа: если вы поддерживаете команду с Mac-устройствами — изучите эти особенности. Они экономят часы на настройке и интеграции.
#macOS #Unix #LinuxAdmins #SysAdmin
Многие админы воспринимают macOS как «чисто пользовательскую» систему. На деле это полноценный Unix, а значит — большинство навыков из Linux работают здесь «из коробки».
▪️ Архитектура
Под капотом macOS: Darwin + BSD + ядро XNU. Это тот же Unix-мир, только в графической обёртке.
▪️ Отличия от Linux
Домашние директории в /Users, а не в /home.
По умолчанию shell — zsh (но можно вернуть bash).
Управление системой через launchctl, diskutil, defaults.
▪️ Зачем это важно
Если вы админ и привыкли к Linux, то macOS не придётся «переучивать». Большинство привычных команд работают, а специфические утилиты быстро осваиваются.
🧠 Для админа: если вы поддерживаете команду с Mac-устройствами — изучите эти особенности. Они экономят часы на настройке и интеграции.
#macOS #Unix #LinuxAdmins #SysAdmin
macOS: Профессиональные диалоги в скриптах с swiftDialog
Когда вы автоматизируете настройку Mac для нового сотрудника с помощью MDM и скриптов, как сообщить ему о процессе? Чёрное окно терминала пугает. Простое уведомление — неинформативно.
swiftDialog — это утилита, которая позволяет выводить красивые, настраиваемые диалоговые окна из любого скрипта (bash, Python). Это поднимает вашу автоматизацию на новый уровень.
Пример: Показываем пользователю этапы настройки его нового Mac.
Установка (в скрипте через brew):
Bash
Скрипт для отображения прогресса:
Bash
Что это даёт?
User Experience: Пользователь видит понятный интерфейс, а не пугающие строки кода.
Информативность: В окно можно выводить статус, иконки, этапы выполнения.
Профессионализм: Это показывает высокий уровень зрелоosti IT-процессов в компании.
Админ пишет скрипт. Архитектор думает о том, как этот скрипт взаимодействует с конечным пользователем.
#macos #bash #automation #ux #скрипты
Когда вы автоматизируете настройку Mac для нового сотрудника с помощью MDM и скриптов, как сообщить ему о процессе? Чёрное окно терминала пугает. Простое уведомление — неинформативно.
swiftDialog — это утилита, которая позволяет выводить красивые, настраиваемые диалоговые окна из любого скрипта (bash, Python). Это поднимает вашу автоматизацию на новый уровень.
Пример: Показываем пользователю этапы настройки его нового Mac.
Установка (в скрипте через brew):
Bash
# Проверяем, установлен ли swiftDialog, и если нет - ставим
if ! command -v dialog &> /dev/null; then
echo "swiftDialog не найден. Устанавливаем..."
/usr/local/bin/brew install swiftDialog
fi
Скрипт для отображения прогресса:
Bash
#!/bin/bash
DIALOG_CMD="/usr/local/bin/dialog"
LOG_FILE="/var/tmp/setup.log"
# Настройки окна
TITLE="Настройка вашего нового Mac"
MESSAGE="Пожалуйста, подождите, мы готовим ваш компьютер к работе. Это может занять 15-20 минут."
ICON="https://corp.example.com/logo.png" # Иконка вашей компании
# Запускаем диалог в фоновом режиме
$DIALOG_CMD --title "$TITLE" --message "$MESSAGE" --icon "$ICON" --progress 5 --commandfile "$LOG_FILE" &
# --- Эмуляция длительных операций ---
echo "progress: 1" > "$LOG_FILE"
echo "listitem: Установка Rosetta 2..." > "$LOG_FILE"
# softwareupdate --install-rosetta --agree-to-license
sleep 5
echo "progress: 2" > "$LOG_FILE"
echo "listitem: Установка Homebrew..." > "$LOG_FILE"
# /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
sleep 5
echo "progress: 3" > "$LOG_FILE"
echo "listitem: Установка корпоративного ПО (Slack, Zoom)..." > "$LOG_FILE"
# brew install slack zoom
sleep 5
echo "progress: 4" > "$LOG_FILE"
echo "listitem: Настройка параметров безопасности..." > "$LOG_FILE"
# scutil --set HostName "new-mac"
sleep 5
echo "progress: 5" > "$LOG_FILE"
echo "listitem: Завершение настройки. Готово!" > "$LOG_FILE"
sleep 3
# Закрываем диалоговое окно
echo "quit:" > "$LOG_FILE"
exit 0
Что это даёт?
User Experience: Пользователь видит понятный интерфейс, а не пугающие строки кода.
Информативность: В окно можно выводить статус, иконки, этапы выполнения.
Профессионализм: Это показывает высокий уровень зрелоosti IT-процессов в компании.
Админ пишет скрипт. Архитектор думает о том, как этот скрипт взаимодействует с конечным пользователем.
#macos #bash #automation #ux #скрипты
Linux & macOS: Устал читать man? Получай примеры команд за 1 секунду с tldr
Страницы man — это исчерпывающе, но когда тебе срочно нужно запаковать папку в tar или найти файл по размеру, читать трактат на 10 страниц нет времени.
tldr (Too Long; Didn't Read) — это утилита, которая показывает самые частые примеры использования команд. Никакой "воды", только практика.
Установка:
Bash
Сравним на примере tar:
man tar: Выдаст вам огромный мануал об истории tar, всех возможных флагах и опциях.
tldr tar: Покажет вам это:
Ещё пара примеров:
tldr find — покажет, как искать по имени, расширению, размеру.
tldr docker — даст базовые команды для работы с контейнерами и образами.
Взгляд архитектора:
Эффективность инженера измеряется не знанием наизусть всех флагов, а скоростью решения задачи. tldr — это инструмент для оптимизации самого ценного ресурса: вашего времени. Он помогает держать фокус на проблеме, а не на синтаксисе.
#linux #macos #cli #tldr #productivity #команды
Страницы man — это исчерпывающе, но когда тебе срочно нужно запаковать папку в tar или найти файл по размеру, читать трактат на 10 страниц нет времени.
tldr (Too Long; Didn't Read) — это утилита, которая показывает самые частые примеры использования команд. Никакой "воды", только практика.
Установка:
Bash
# macOS
brew install tldr
# Ubuntu/Debian
sudo apt install tldr
# Другие ОС (через Node.js)
npm install -g tldr
Сравним на примере tar:
man tar: Выдаст вам огромный мануал об истории tar, всех возможных флагах и опциях.
tldr tar: Покажет вам это:
# Создать архив из файлов:
tar -cvf target.tar file1 file2
# Создать gzip-архив:
tar -czvf target.tar.gz file1 file2
# Распаковать архив в текущую директорию:
tar -xvf source.tar
# Распаковать gzip-архив:
tar -xzvf source.tar.gz
# Посмотреть содержимое архива:
tar -tvf source.tar
Ещё пара примеров:
tldr find — покажет, как искать по имени, расширению, размеру.
tldr docker — даст базовые команды для работы с контейнерами и образами.
Взгляд архитектора:
Эффективность инженера измеряется не знанием наизусть всех флагов, а скоростью решения задачи. tldr — это инструмент для оптимизации самого ценного ресурса: вашего времени. Он помогает держать фокус на проблеме, а не на синтаксисе.
#linux #macos #cli #tldr #productivity #команды
👍2
macOS: Воспроизводимая среда с Homebrew. Управляем софтом через Brewfile
Каждый раз, настраивая новый Mac, вы вручную ставите десятки утилит и приложений через brew install ...? Это долго и легко что-то забыть.
Архитектурный подход — описать всё необходимое ПО в одном файле и развернуть среду одной командой. Для Homebrew такой файл называется Brewfile.
Как это работает:
Создаём "снимок" текущей системы:
Если у вас уже настроен Mac, создайте Brewfile из установленных пакетов:
Bash
Эта команда создаст в текущей директории файл Brewfile со всем, что у вас установлено.
Создаём Brewfile вручную (рекомендуется):
Создайте текстовый файл с именем Brewfile и опишите в нём всё, что вам нужно. Это даёт чистую и осознанную конфигурацию.
Ruby
Разворачиваем на новой машине:
Скопируйте ваш Brewfile на новый Mac (например, через Git) и выполните:
Bash
Homebrew сам установит всё, что перечислено в файле.
Взгляд архитектора:
Brewfile — это Конфигурация как Код (Configuration as Code) для вашей рабочей станции.
Воспроизводимость: Гарантирует, что на любой вашей машине будет одинаковый набор инструментов.
Версионирование: Храните его в Git. Теперь у вас есть история изменений и резервная копия вашей идеальной среды.
Автоматизация: Ускоряет настройку нового компьютера с нескольких часов до нескольких минут.
#macos #homebrew #automation #iac #гайд
Каждый раз, настраивая новый Mac, вы вручную ставите десятки утилит и приложений через brew install ...? Это долго и легко что-то забыть.
Архитектурный подход — описать всё необходимое ПО в одном файле и развернуть среду одной командой. Для Homebrew такой файл называется Brewfile.
Как это работает:
Создаём "снимок" текущей системы:
Если у вас уже настроен Mac, создайте Brewfile из установленных пакетов:
Bash
brew bundle dump
Эта команда создаст в текущей директории файл Brewfile со всем, что у вас установлено.
Создаём Brewfile вручную (рекомендуется):
Создайте текстовый файл с именем Brewfile и опишите в нём всё, что вам нужно. Это даёт чистую и осознанную конфигурацию.
Ruby
# Добавляем сторонний репозиторий (tap)
tap "homebrew/cask-fonts"
# CLI-утилиты (formulae)
brew "git"
brew "htop"
brew "wget"
brew "tldr"
# GUI-приложения (casks)
cask "visual-studio-code"
cask "iterm2"
cask "docker"
# Шрифты для терминала/редактора
cask "font-fira-code-nerd-font"
Разворачиваем на новой машине:
Скопируйте ваш Brewfile на новый Mac (например, через Git) и выполните:
Bash
brew bundle install
Homebrew сам установит всё, что перечислено в файле.
Взгляд архитектора:
Brewfile — это Конфигурация как Код (Configuration as Code) для вашей рабочей станции.
Воспроизводимость: Гарантирует, что на любой вашей машине будет одинаковый набор инструментов.
Версионирование: Храните его в Git. Теперь у вас есть история изменений и резервная копия вашей идеальной среды.
Автоматизация: Ускоряет настройку нового компьютера с нескольких часов до нескольких минут.
#macos #homebrew #automation #iac #гайд
🔥2
Linux & macOS: cat на стероидах. Знакомство с bat
Мы постоянно просматриваем файлы в терминале: скрипты, конфиги, логи. Стандартная утилита cat справляется, но выдаёт просто стену текста. bat — это её современная замена, которая делает то же самое, но красиво и удобно.
bat — это cat с подсветкой синтаксиса, нумерацией строк, интеграцией с Git и автоматическим пейджером.
Ключевые фичи:
• Подсветка синтаксиса: Просто напишите bat my_script.py или bat docker-compose.yml, и код будет подсвечен как в вашей любимой IDE.
• Интеграция с Git: bat показывает изменения в файле прямо в терминале, отмечая добавленные и изменённые строки.
• Автоматический пейджер: Если файл не помещается на один экран, bat автоматически передаст вывод в less, так что вы сразу можете использовать поиск и навигацию.
• Отображение непечатаемых символов: Помогает при отладке.
Установка:
# Ubuntu/Debian (может называться batcat)
sudo apt install bat
# macOS
brew install bat
На Ubuntu/Debian, возможно, придется использовать команду batcat или создать симлинк ln -s /usr/bin/batcat ~/.local/bin/bat.
Взгляд архитектора:
Это не просто про "красивости". Удобное представление информации снижает когнитивную нагрузку. Когда вы можете мгновенно отличить комментарий от переменной в конфиге, вы работаете быстрее и делаете меньше ошибок. bat — маленький инструмент с огромным влиянием на ежедневную продуктивность.
#linux #macos #cli #bat #productivity #команды
Мы постоянно просматриваем файлы в терминале: скрипты, конфиги, логи. Стандартная утилита cat справляется, но выдаёт просто стену текста. bat — это её современная замена, которая делает то же самое, но красиво и удобно.
bat — это cat с подсветкой синтаксиса, нумерацией строк, интеграцией с Git и автоматическим пейджером.
Ключевые фичи:
• Подсветка синтаксиса: Просто напишите bat my_script.py или bat docker-compose.yml, и код будет подсвечен как в вашей любимой IDE.
• Интеграция с Git: bat показывает изменения в файле прямо в терминале, отмечая добавленные и изменённые строки.
• Автоматический пейджер: Если файл не помещается на один экран, bat автоматически передаст вывод в less, так что вы сразу можете использовать поиск и навигацию.
• Отображение непечатаемых символов: Помогает при отладке.
Установка:
# Ubuntu/Debian (может называться batcat)
sudo apt install bat
# macOS
brew install bat
На Ubuntu/Debian, возможно, придется использовать команду batcat или создать симлинк ln -s /usr/bin/batcat ~/.local/bin/bat.
Взгляд архитектора:
Это не просто про "красивости". Удобное представление информации снижает когнитивную нагрузку. Когда вы можете мгновенно отличить комментарий от переменной в конфиге, вы работаете быстрее и делаете меньше ошибок. bat — маленький инструмент с огромным влиянием на ежедневную продуктивность.
#linux #macos #cli #bat #productivity #команды
Linux & macOS: Ваш Ctrl+R — из прошлого века. Встречайте fzf
Сколько раз в день вы судорожно ищете нужную команду в истории?
history | grep ... — это медленно и неудобно.
fzf (fuzzy finder) — это не просто утилита, это новый способ работы в терминале. Она позволяет мгновенно, в интерактивном режиме, находить что угодно: файлы, команды, процессы.
Как это меняет всё:
Интерактивный Ctrl+R: fzf полностью заменяет стандартный поиск по истории. Вы нажимаете Ctrl+R и получаете удобный интерактивный список, который фильтруется по мере набора.
Убийца процессов: Забудьте ps aux | grep ... и kill <PID>.
Bash
Мгновенный поиск файлов: fzf интегрируется с find и ag для молниеносного поиска.
Bash
Установка: brew install fzf (macOS) или sudo apt install fzf (Linux).
Взгляд архитектора: Эффективность инженера — это его главный актив. fzf — это инструмент-мультипликатор, который экономит секунды на каждом действии, что складывается в часы к концу недели. Архитектор не просто знает команды, он оптимизирует саму среду работы, убирая любое "трение".
#linux #macos #cli #fzf #productivity #команды #musthave
Сколько раз в день вы судорожно ищете нужную команду в истории?
history | grep ... — это медленно и неудобно.
fzf (fuzzy finder) — это не просто утилита, это новый способ работы в терминале. Она позволяет мгновенно, в интерактивном режиме, находить что угодно: файлы, команды, процессы.
Как это меняет всё:
Интерактивный Ctrl+R: fzf полностью заменяет стандартный поиск по истории. Вы нажимаете Ctrl+R и получаете удобный интерактивный список, который фильтруется по мере набора.
Убийца процессов: Забудьте ps aux | grep ... и kill <PID>.
Bash
# Интерактивно выбираем процесс (или несколько) и убиваем
ps -ef | fzf -m | awk '{print $2}' | xargs kill -9
Мгновенный поиск файлов: fzf интегрируется с find и ag для молниеносного поиска.
Bash
# Нажмите Alt+C (или Ctrl+T), чтобы найти файл/папку и сразу перейти
fzf
Установка: brew install fzf (macOS) или sudo apt install fzf (Linux).
Взгляд архитектора: Эффективность инженера — это его главный актив. fzf — это инструмент-мультипликатор, который экономит секунды на каждом действии, что складывается в часы к концу недели. Архитектор не просто знает команды, он оптимизирует саму среду работы, убирая любое "трение".
#linux #macos #cli #fzf #productivity #команды #musthave
Fleet Security: Хватит гадать. Используем osquery
У вас 200 машин (Windows, Linux, macOS). Как быстро ответить на эти вопросы:
"На каких серверах запущен sshd не из стандартного /usr/sbin/sshd?"
"На каких машинах macOS не включен FileVault?"
"У каких пользователей Windows в AppData лежат .exe файлы?"
Бегать по машинам или писать 100500 скриптов — это путь админа. osquery — это путь архитектора.
osquery (от Facebook/Meta) — это open-source инструмент, который представляет вашу операционную систему как базу данных, к которой можно делать SQL-запросы.
Примеры запросов:
Найти всех пользователей с bash на Linux-машинах:
SQL
Найти подозрительные открытые порты (кто слушает не 0.0.0.0 или 127.0.0.1):
SQL
Проверить, включен ли FileVault на macOS:
SQL
Взгляд архитектора: osquery — это основа для непрерывного аудита (Continuous Auditing) и Threat Hunting. Вы больше не "сканируете" хосты, вы "опрашиваете" их в реальном времени. Подключив osquery-агенты к централизованному серверу (fleet-менеджеру), вы получаете полный, актуальный срез безопасности всей вашей инфраструктуры, независимо от ОС.
#linux #macos #windows #security #osquery #sre #architect #гайд
У вас 200 машин (Windows, Linux, macOS). Как быстро ответить на эти вопросы:
"На каких серверах запущен sshd не из стандартного /usr/sbin/sshd?"
"На каких машинах macOS не включен FileVault?"
"У каких пользователей Windows в AppData лежат .exe файлы?"
Бегать по машинам или писать 100500 скриптов — это путь админа. osquery — это путь архитектора.
osquery (от Facebook/Meta) — это open-source инструмент, который представляет вашу операционную систему как базу данных, к которой можно делать SQL-запросы.
Примеры запросов:
Найти всех пользователей с bash на Linux-машинах:
SQL
SELECT * FROM users WHERE shell = '/bin/bash';
Найти подозрительные открытые порты (кто слушает не 0.0.0.0 или 127.0.0.1):
SQL
SELECT pid, port, address FROM listening_ports WHERE address NOT IN ('0.0.0.0', '127.0.0.1', '::');Проверить, включен ли FileVault на macOS:
SQL
SELECT * FROM disk_encryption WHERE encrypted = 0;
Взгляд архитектора: osquery — это основа для непрерывного аудита (Continuous Auditing) и Threat Hunting. Вы больше не "сканируете" хосты, вы "опрашиваете" их в реальном времени. Подключив osquery-агенты к централизованному серверу (fleet-менеджеру), вы получаете полный, актуальный срез безопасности всей вашей инфраструктуры, независимо от ОС.
#linux #macos #windows #security #osquery #sre #architect #гайд
macOS (Security): Аудит LaunchAgents/Daemons на «подозрительные» пути и неподписанные бинарники
Боль: Пользователь жалуется на фантомные процессы. В ~/Library/LaunchAgents лежит «что-то», что перезапускается после удаления.
Реакция админа: «Снесём руками».
Реакция архитектора: «Сначала найдём источник автозапуска и оценим риски.»
Скрипт (Bash). Ищет .plist с исполняемыми из пользовательских/временных директорий, помеченные quarantine или неподписанные бинарники.
Взгляд архитектора: Постоянство (persistence) — базовая TTP вредоносов. Мы валидируем автозапуски против критериев доверия пути/подписи/карантина, а не «по чувствам».
#macos #security #incident_response #forensics #bash #скрипты
Боль: Пользователь жалуется на фантомные процессы. В ~/Library/LaunchAgents лежит «что-то», что перезапускается после удаления.
Реакция админа: «Снесём руками».
Реакция архитектора: «Сначала найдём источник автозапуска и оценим риски.»
Скрипт (Bash). Ищет .plist с исполняемыми из пользовательских/временных директорий, помеченные quarantine или неподписанные бинарники.
#!/usr/bin/env bash
# --- macOS LaunchAgents/Daemons Audit ---
set -euo pipefail
echo "--- Начинаю аудит LaunchAgents/Daemons ---"
dirs=( "$HOME/Library/LaunchAgents" "/Library/LaunchAgents" "/Library/LaunchDaemons" )
for d in "${dirs[@]}"; do
[ -d "$d" ] || continue
while IFS= read -r -d '' plist; do
program=$(/usr/libexec/PlistBuddy -c 'Print :Program' "$plist" 2>/dev/null || true)
if [ -z "${program:-}" ]; then
program=$(/usr/libexec/PlistBuddy -c 'Print :ProgramArguments:0' "$plist" 2>/dev/null || true)
fi
suspicious=""
unsigned=""
quarantine=""
if [ -n "${program:-}" ]; then
dir=$(dirname "$program")
# Подозрительные пути: пользовательские/временные директории
if [[ "$program" =~ ^/Users/ ]] || [[ "$program" =~ ^/tmp/ ]] || [[ "$program" =~ ^/private/tmp/ ]]; then
if [ -w "$dir" ]; then suspicious="user-writable"; fi
fi
# quarantine-атрибут
if [ -f "$program" ] && xattr -p com.apple.quarantine "$program" >/dev/null 2>&1; then
quarantine="quarantined"
fi
# неподписанность
if [ -f "$program" ]; then
if ! codesign -dv "$program" >/dev/null 2>&1; then unsigned="unsigned"; fi
fi
fi
if [ -n "$suspicious$quarantine$unsigned" ]; then
echo "plist: $plist"
echo " Program: ${program:-<none>}"
echo " Flags: $suspicious $quarantine $unsigned"
echo "----------------------------------------"
fi
done < <(find "$d" -name '*.plist' -print0 2>/dev/null)
done
echo "--- Аудит завершен ---"
echo "Рекомендация: бэкапнуть plist и бинарь, затем удалить через launchctl (disable/unload), проверить персистентность."
Взгляд архитектора: Постоянство (persistence) — базовая TTP вредоносов. Мы валидируем автозапуски против критериев доверия пути/подписи/карантина, а не «по чувствам».
#macos #security #incident_response #forensics #bash #скрипты
🔥3