Команда adb shell cat /sdcard/log.txt перестала выводить содержимое файла и возвращает ошибку Permission denied или No such file or directory — это самая частая ситуация, с которой сталкиваются при использовании adb shell cat. Причина почти всегда кроется в неверном пути к файлу, отсутствии прав доступа или в том, что целевой файл находится в защищённом разделе Android, доступ к которому без root-прав заблокирован системой.
Утилита cat — стандартный инструмент Unix-подобных систем, а Android построен на ядре Linux, поэтому команда доступна в оболочке устройства из коробки. Через ADB (Android Debug Bridge) её можно выполнять с компьютера, читая текстовые файлы, логи, конфигурации и системные свойства прямо в окне терминала. Ниже разберём синтаксис, практические сценарии, типичные ошибки и способы их обхода.
Что делает команда adb shell cat
Команда cat (от слова concatenate) выводит содержимое одного или нескольких файлов в стандартный поток вывода. В связке с adb shell она выполняется уже на самом устройстве, а результат передаётся на компьютер по USB-кабелю или через Wi-Fi. Это позволяет просматривать файлы без их копирования на ПК, что удобно при отладке приложений и диагностике системы.
Базовый синтаксис выглядит так:
adb shell cat /путь/к/файлу
Можно указать сразу несколько файлов — их содержимое выведется последовательно. Также поддерживается перенаправление вывода в файл на компьютере с помощью стандартного оператора оболочки:
adb shell cat /sdcard/debug.log > debug_copy.txt
- 📄 Чтение текстовых логов и конфигурационных файлов без скачивания
- 🔍 Просмотр системных свойств и файлов из
/procи/sys - 📋 Копирование содержимого файла в буфер обмена или в файл на ПК
- 🧩 Объединение нескольких файлов в один поток вывода
Подготовка: что нужно перед началом работы
Прежде чем выполнять любые команды, убедитесь, что связка «компьютер — смартфон» настроена корректно. На устройстве должна быть включена отладка по USB: она активируется в меню «Для разработчиков», которое открывается после нескольких нажатий на пункт «Номер сборки» в разделе «О телефоне». Точное расположение пунктов зависит от оболочки производителя, поэтому при необходимости сверьтесь с документацией вашей модели.
На компьютере потребуются инструменты Android SDK Platform-Tools — официальный пакет от Google, в который входит исполняемый файл adb. После подключения устройства кабелем проверьте связь командой adb devices: в списке должен появиться серийный номер со статусом device. Если статус unauthorized — подтвердите запрос на разрешение отладки на экране смартфона.
☑️ Подготовка к работе с adb shell cat
Практические примеры использования
Чаще всего команду применяют для чтения логов приложений, которые сохраняют отладочную информацию в свою папку. Например, если программа пишет лог в общедоступное хранилище, его можно посмотреть так:
adb shell cat /sdcard/Android/data/com.example.app/files/app.log
Второй популярный сценарий — чтение виртуальных файлов из каталога /proc, через которые ядро Linux сообщает информацию о системе. Например, adb shell cat /proc/version покажет версию ядра, а adb shell cat /proc/meminfo — подробную статистику памяти. Эти файлы не существуют на диске в обычном смысле: их содержимое генерируется ядром в момент обращения, и для чтения большинства файлов из /proc root-права не требуются.
Третий сценарий — проверка содержимого файла перед удалением или заменой. Вместо того чтобы копировать файл на компьютер через adb pull, открывать в редакторе и удалять, вы одной командой убеждаетесь, что внутри именно те данные.
Чтение системных файлов и ограничения доступа
Здесь начинаются нюансы. Android разделяет файловую систему на зоны с разными уровнями доступа, и оболочка ADB по умолчанию работает от имени пользователя shell с ограниченными правами. Таблица ниже показывает, что обычно доступно без root:
| Расположение | Что содержит | Доступ без root |
|---|---|---|
/sdcard/ | Пользовательские файлы, загрузки | Да |
/proc/, /sys/ | Информация ядра о системе | Частично |
/data/data/ | Приватные данные приложений | Нет |
/system/, /vendor/ | Системные файлы ОС | Частично (только чтение некоторых файлов) |
/data/misc/, /data/system/ | Системные настройки и сервисы | Нет |
На устройствах с разблокированным загрузчиком и root-доступом (например, через Magisk) можно попробовать выполнить команду с повышением привилегий: adb shell su -c "cat /data/system/packages.xml". Работает это только если root уже настроен и оболочке выдано разрешение в менеджере прав суперпользователя.
⚠️ Внимание: чтение защищённых системных файлов через root безопасно само по себе, но любые команды, следующие за просмотром (редактирование, замена, удаление), способны нарушить работу системы. Ограничьтесь чтением, если не уверены в последствиях.
Типичные ошибки и их решение
Ошибка No such file or directory означает, что путь указан неверно либо файл находится в другом месте. Проверьте существование файла командой adb shell ls /sdcard/ и уточните путь. Учтите, что в Android регистр символов в именах файлов имеет значение: Log.txt и log.txt — разные файлы.
Ошибка Permission denied указывает на нехватку прав. Возможные причины: файл принадлежит другому приложению и лежит в /data/data/, либо доступ ограничен политикой SELinux, которая на современных версиях Android активна по умолчанию. Обходить SELinux без необходимости не стоит — это защитный механизм системы.
Ещё одна ситуация: команда выводит «кракозябры» вместо текста. Это значит, что файл бинарный (например, база данных или изображение), а cat предназначен для текста. Для бинарных файлов используйте adb pull и открывайте их подходящей программой на компьютере.
⚠️ Внимание: не перенаправляйте вывод cat обратно в системный файл на устройстве без резервной копии. Одна опечатка в пути — и содержимое оригинала будет перезаписано без возможности восстановления.
Продвинутые приёмы: конвейеры и фильтрация
Сила cat раскрывается в сочетании с другими утилитами оболочки. Через оператор конвейера | вывод можно передать в grep для поиска строк, в head или tail для обрезки, в wc -l для подсчёта строк. Пример поиска ошибок в логе:
adb shell "cat /sdcard/app.log | grep -i error"
Обратите внимание на кавычки: вся конструкция с конвейером заключается в кавычки, чтобы она выполнилась в оболочке устройства, а не в терминале компьютера. Без кавычек grep попытается запуститься на ПК, и на Windows, где этой утилиты может не быть, команда завершится ошибкой.
Почему grep иногда не находит русский текст
Встроенный toybox-набор утилит Android не всегда корректно работает с многобайтовыми кодировками. Если поиск по кириллице не даёт результатов, сохраните файл на ПК через adb pull и выполните поиск уже там — в PowerShell, редакторе или терминале Linux.
Для регулярного мониторинга растущего лога удобнее не cat, а связка с tail -f: adb shell tail -f /sdcard/app.log будет выводить новые строки в реальном времени, пока вы не прервёте выполнение сочетанием Ctrl+C.
Альтернативы cat в ADB
Не всегда cat — оптимальный выбор. Если нужно получить файл целиком для дальнейшей работы, логичнее использовать adb pull /sdcard/file.txt, который скопирует его на компьютер. Для просмотра логов системы в целом существует специализированная команда adb logcat — она читает системный буфер журналов Android, к которому cat прямого доступа не имеет.
Для больших текстовых файлов подойдут less или more, если они включены в набор утилит вашей прошивки: они позволяют листать содержимое постранично вместо вывода всего объёма разом. Наличие этих утилит зависит от сборки системы, поэтому проверяйте на конкретном устройстве.
Часто задаваемые вопросы
Можно ли через adb shell cat просмотреть файлы другого приложения?
Нет, без root-прав это невозможно. Приватные данные приложений хранятся в /data/data/имя_пакета/ и защищены правами доступа Linux и политикой SELinux. Оболочка ADB работает от пользователя shell и не имеет туда доступа.
Почему команда выводит пустой результат без ошибок?
Наиболее вероятная причина — файл существует, но пуст. Проверьте его размер командой adb shell ls -l /путь/к/файлу. Если размер нулевой, приложение, которое должно было писать в файл, либо ещё не запускалось, либо завершилось с ошибкой.
Как сохранить вывод команды в файл на компьютере?
Используйте перенаправление в терминале: adb shell cat /sdcard/log.txt > log.txt. Файл появится в текущей рабочей папке терминала. На Windows в PowerShell учтите, что перенаправление может менять кодировку — при проблемах с кириллицей используйте adb pull.
Работает ли adb shell cat без USB-кабеля?
Да, если настроена отладка по Wi-Fi. На устройствах с Android 11 и новее есть штатная функция беспроводной отладки в настройках разработчика; на более старых версиях требуется первичное подключение по кабелю и команда adb tcpip. После подключения по сети все команды, включая cat, работают так же.
Чем отличается cat в ADB от cat в терминале на самом устройстве?
Принципиальной разницы нет — выполняется одна и та же утилита из состава Android. Отличие только в правах: терминальные приложения на устройстве работают от своего пользователя и имеют ещё более узкий доступ, тогда как оболочка ADB обладает расширенными привилегиями пользователя shell.