Перейти к содержимому
GitHub

Файлы, задания и просмотр

Ctrl-S открывает быстрый поиск. Введите имя или маску, например *.rs; Down и Up переходят между совпадениями, Insert отмечает совпадение, Ctrl-A отмечает все совпадения, а Enter или Esc закрывает поиск. Регистр не учитывается, если в запросе нет заглавных букв.

F5, F6 и F8 запускают задания копирования, перемещения и удаления. Alt-J открывает список заданий, где их можно приостановить или отменить.

Окно удаления открывается с выбранной кнопкой Нет, поэтому один Enter оставляет файлы на месте. Чтобы удалить их, нажмите Y или перейдите на Да клавишей Tab или стрелкой и нажмите Enter.

Пока окно удаления ждёт ответа, Borg подсчитывает файлы, которые вы собираетесь удалить, и показывает под вопросом их число и размер. Подсчёт останавливается через 3 секунды, и тогда строка начинается со слов Не меньше. Borg также ищет программы, которые держат эти файлы открытыми, запущены из них или работают в одной из этих папок, и называет их. Программа, которая держит удалённый файл открытым, держит и его место на диске, пока не закроет файл. Нажмите K, чтобы открыть монитор процессов на первой из них с окном Сигнал или приоритет и остановить её до удаления. Borg видит программы, которые ваш пользователь может проверять, то есть в большинстве систем только ваши. Файлы в архивах, контейнерах и удалённых панелях удаляются без этих проверок.

В окне копирования есть флажок Оптимизировать копирование для жёстких дисков. Перейдите к нему клавишей Tab и переключите клавишей Space или щёлкните его. Для каждого нового копирования он снят. В этом режиме Borg читает мелкие файлы в память пачками и затем записывает каждую пачку, что может сократить перемещения головок при копировании в пределах одного жёсткого диска. Пачка вмещает до 64 МиБ данных или 4096 файлов; файлы больше 1 МиБ копируются обычным образом. Насколько это помогает, зависит от диска, файловой системы и кэширования в ОС, а при копировании между разными дисками режим может оказаться медленнее. Если файл с таким именем уже существует: o перезаписывает его, s пропускает, k сохраняет оба, a перезаписывает все, n пропускает все, а Esc отменяет копирование. Копии записываются во временные файлы и переименовываются, когда полностью готовы.

Borg знает, на каком диске лежит каждая папка: на жёстком диске, SSD, RAM-диске, сетевом ресурсе вроде NFS, SMB или sshfs или на машине, которую показывает удалённая панель. В macOS он спрашивает у diskutil и hdiutil, а в Linux читает /proc/self/mountinfo и флаги устройства в /sys. Ctrl-L показывает диск и его файловую систему в строке Диск, а строка Скорость говорит, с какой скоростью Borg ожидает от него чтения и записи.

Прежде чем задание что-либо запишет, Borg оценивает, сколько оно займёт, по байтам, которые оно читает и пишет на каждом диске, и по времени на сжатие. Если копирование, перемещение на другой диск или распаковка займёт больше 2 минут или изменение архива займёт больше 20 секунд, окно Долгое задание сообщает примерное время и тип диска и ждёт ответа:

  • Начать (s) запускает задание.
  • Всегда для этого файла (f) запускает его и больше не спрашивает про этот архив. Этот вариант есть при распаковке и изменении архива.
  • Всегда на дисках этого типа (d) запускает его и больше не спрашивает про работу на дисках этого типа.
  • Отмена (c) останавливает задание до первой записи.

При сохранении из редактора в архив вопрос появляется поверх редактора, а после ответа клавиши снова получает редактор.

Пока Borg не измерил диск, он рассчитывает на обычную скорость дисков этого типа: около 120 MB/s для жёсткого диска, 900 MB/s для SSD, 4 GB/s для RAM-диска, 60 MB/s для сетевого ресурса и 10 MB/s для удалённой машины. Каждое задание, которое идёт не меньше 2 секунд и переносит не меньше 64 MiB, сообщает Borg настоящую скорость диска, и тогда в строке Диск появляется измеренная скорость. Задание, которое тратит время в основном на сжатие, ничего не говорит о скорости диска.

Borg хранит скорости и ваши ответы в drives.json в папке состояния, не больше чем для 256 архивов. Файл может читать только владелец, потому что в нём записаны архивы, о которых вы отвечали. Все открытые Borg пользуются им вместе: каждый читает его при запуске и ещё раз прямо перед записью, поэтому то, что один Borg узнал, и ответы, которые вы ему дали, сохраняются, когда пишет другой. Строка Долгие задания в Ctrl-L говорит, спрашивает ли Borg заранее на этом диске. F9 → Параметры → Снова спрашивать перед долгими заданиями забывает все ответы «Всегда», в том числе данные в других Borg. Уже открытый Borg пользуется своими ответами, пока снова не запишет файл или пока вы его не перезапустите.

F3 открывает просмотрщик. Если плагин «Система» включён, F3 на файле .pcap, .pcapng или .cap открывает вместо него просмотр трафика сетевого экрана (см. Захват трафика). В текстовых файлах стрелки и PgUp/PgDn прокручивают текст, w включает и выключает перенос строк, а Esc или q закрывает просмотрщик. В изображениях Left/Right или p/n показывают предыдущее или следующее изображение. Borg использует графический протокол терминала, если он есть; в остальных терминалах изображение выводится цветными блоками.

Ctrl-Q показывает быстрый просмотр на другой панели. Tab переводит в него фокус; там стрелки, PgUp/PgDn, Home/End и колесо мыши прокручивают содержимое, а Tab или Esc возвращает к списку файлов. Ctrl-L показывает сведения о файле. F3 открывает текст из быстрого просмотра в полноэкранном просмотрщике, а после закрытия просмотрщика вы возвращаетесь в быстрый просмотр с прежней позицией, переносом строк, режимом исходного текста и шестнадцатеричными строками. Оба читают файлы одинаково экономно: в большом текстовом файле читается только примерно первая страница, поэтому он открывается быстро при любом размере. Для результата поиска по тексту быстрый просмотр открывается на первом совпадении в файле, отмечает запрос так же, как панель поиска, и читает только текст вокруг этого совпадения.

Оба текстовых просмотрщика подсвечивают распространённые языки программирования, разметки и файлы конфигурации, в том числе Rust, Python, JavaScript, TypeScript/TSX, Go, C/C++, Java, C#, Ruby, PHP, Lua, SQL, HTML/CSS, JSON, YAML, TOML, сценарии оболочки и Dockerfile. Markdown по умолчанию открывается отформатированным; чтобы переключиться на исходный текст, нажмите s или F4 в любом из просмотрщиков. Поддерживаются заголовки, выделение, списки, списки задач, ссылки, таблицы и блоки кода. Файлы Markdown больше 2 МиБ открываются как исходный текст, чтобы экономить память.

JSON открывается в развёрнутом виде, по одному значению в строке, с ключами в исходном порядке и числами в точности так, как они записаны; больше всего это помогает с файлами, записанными в одну строку. Чтобы увидеть файл в исходном виде, нажмите s или F4. Файлы JSON Lines (.jsonl, .ndjson) разворачиваются по одной записи. JSON больше 16 МиБ или JSON, который не удаётся разобрать, открывается в исходном виде.

Нажмите h в текстовом просмотрщике или в быстром просмотре, чтобы увидеть байты файла в виде шестнадцатеричных строк, и нажмите ещё раз, чтобы вернуться к тексту. Двоичный файл, который Borg распознаёт по нулевому байту в первых 4 КиБ, открывается в обоих в виде шестнадцатеричных строк, а h показывает его текст. Каждая строка начинается со смещения в файле, затем показывает свои байты в шестнадцатеричном виде и те же байты как текст; байты, которые не печатаются, показаны точками. Смещения и нулевые байты приглушены. В строке столько байт, сколько помещается по ширине: 64, 32, 16, 8, 4, 2 или 1, а после каждого восьмого байта стоит более широкий пробел. Borg читает только строки на экране, поэтому стрелки, PgUp/PgDn, Space, Home и End сразу перемещают по файлу в несколько гигабайт. Панель поиска работает и в шестнадцатеричных строках и отмечает каждое совпадение в обеих колонках. В шестнадцатеричном виде файлы Markdown и JSON показывают байты так, как они записаны.

В просмотрщике у правого края шестнадцатеричных строк проходит полоса энтропии. Энтропия показывает, насколько разнообразны байты: от 0 бит на байт, когда повторяется один байт, до 8, когда байты так же случайны, как сжатые, зашифрованные или упакованные данные. У текста она обычно около 4,5, у кода от 5 до 6,5. Полоса охватывает весь файл сверху вниз. Каждая ячейка заполнена тем больше, чем выше наибольшая энтропия в её части файла; ниже 4 бит на байт она приглушена, а начиная с 7,2 выделена жирным красным. Ячейки байтов, которые сейчас на экране, отмечены, как на полосе прокрутки. Строка состояния показывает энтропию на текущей странице и то, какая она: низкая, обычная или высокая. Нажмите ] и [, чтобы перейти к следующему или предыдущему участку блоков с высокой энтропией, или щёлкните по полосе, чтобы перейти к этой части файла.

Borg считает энтропию в фоне блоками по 4 КиБ. Файл до 256 МиБ читается целиком, а из файла побольше берётся равномерная выборка в 65 536 блоков, поэтому памяти требуется одинаково при любом размере файла. Высокая энтропия там, где ожидаются код, заголовки или таблицы, может означать, что там спрятаны упакованные или зашифрованные данные. У сжатых медиафайлов, архивов, зашифрованных томов и хранилищ ключей энтропия высокая от начала до конца, поэтому оценивайте полосу с учётом того, что должно быть в файле.

Нажмите Enter на архиве, чтобы открыть его как папку. Borg открывает файлы с именами на .zip, .7z, .rar, .tar, .tar.gz, .tgz, .tar.bz2, .tbz2, .tbz, .tar.xz, .txz, .tar.zst или .tzst, а также одиночные сжатые файлы на .gz, .bz2, .xz или .zst: они открываются как папка с этим единственным файлом. Ctrl-PgDn тоже открывает архив, а F3 на самом архиве по-прежнему показывает его байты в просмотрщике. В заголовке панели появляется метка вроде ▤ zip с форматом, который Borg определил по первым байтам файла, а путь продолжается внутри архива. Папки внутри показывают размер своего содержимого. Left, Enter на .. или Ctrl-PgUp на верхнем уровне архива возвращают в папку, где он лежит, с курсором на архиве. Если архив удалён или больше не читается, переход наверх из любой его папки тоже возвращает туда, а уведомление объясняет причину.

Чтобы показать содержимое архива, Borg читает его список файлов, а для сжатого tar это значит прочитать весь файл. Пока читается большой архив, в нижней строке панели видно, сколько Borg уже прочитал, а Esc прерывает чтение и возвращает назад. Borg помнит списки последних 4 архивов, пока их файлы сохраняют прежний размер и время изменения, поэтому повторный вход и выход происходят мгновенно. Архивы, в которых больше 1 000 000 записей, не открываются.

F3 или Enter на файле внутри архива распаковывает его в закрытую папку в папке среды выполнения Borg и открывает в просмотрщике. Распаковка идёт как задание, поэтому для большого файла виден её ход, а Esc её отменяет. Borg удаляет распакованный файл, как только просмотрщик его открыл.

F4 на файле внутри архива открывает его в редакторе, а Alt-E открывает его в редакторе панели. Borg распаковывает файл в ту же закрытую папку, а заголовок редактора показывает его путь внутри архива. Каждое сохранение записывает файл обратно в архив как задание, и редактор сообщает об этом («Сохранено. Запись в site.zip.»). Если архив его не принимает, уведомление объясняет причину и говорит, где осталась ваша правка.

F5 копирует отмеченные файлы и папки из архива в папку другой панели или в папку, которую вы укажете в диалоге «Копировать». Пункты Извлечь сюда и Извлечь на другую панель в меню «Файл» (F2) распаковывают весь архив под курсором в папку этой или другой панели. В обоих случаях файлы попадают в папку на этой машине, а задание появляется в Alt-J с ходом выполнения, скоростью и оставшимся временем. Оно спрашивает про уже существующие имена так же, как копирование, пишет каждый файл под временным именем, пока он не будет готов, и останавливает каждый файл на размере, который указан для него в архиве.

Borg изменяет архивы zip, 7z и tar, сжатые и несжатые. F5 или F6 из папки на этой машине копирует или перемещает отмеченные файлы в архив, который показывает другая панель, или в его папку, которую вы укажете в диалоге. F7 создаёт папку в архиве, а F8 после вопроса удаляет отмеченные записи. F6 на имя в том же архиве переименовывает записи или перемещает их туда, а F6 в папку на этой машине переносит их наружу: они распаковываются туда и затем покидают архив. Про имена, которые в архиве уже есть, Borg спрашивает так же, как при копировании, и так же спрашивает, когда у двух копируемых файлов одно имя, как бывает с файлами из результатов поиска или коллекции. Переименование в имя, которое уже есть в архиве, останавливается с уведомлением. Перемещение удаляет только то, что дошло целиком, поэтому пропущенный файл остаётся на месте, как и файл, вместо которого лёг более поздний файл с тем же именем.

Каждое изменение идёт как задание в Alt-J. Borg записывает изменённый архив рядом с оригиналом под временным именем, перечитывает его и только потом ставит на место оригинала с теми же правами. При перечитывании Borg проверяет список записей zip или 7z и каждую запись tar. Файл попадает в архив таким, каким он был в момент записи, поэтому файл, который вы снова сохранили, пока задание ждёт ответа, попадает туда с последним содержимым. Изменение, которое не удалось или которое вы отменили, оставляет архив прежним. Записи, которые изменение сохраняет, копируются в том виде, в каком они хранятся: zip копирует их сжатые данные, а 7z копирует каждый непрерывный блок, в котором остались все записи, и заново сжимает только блоки, потерявшие запись. Сжатый tar распаковывается и сжимается заново целиком, а при перечитывании распаковывается ещё раз, поэтому изменение большого .tar.xz занимает примерно столько же времени, сколько его создание и распаковка. Zip или несжатый tar, в который только добавляются записи, сначала копируется, и новые записи идут после последней, а на APFS, Btrfs, XFS и bcachefs эта копия создаётся мгновенно. Перед изменением, которое займёт много времени, Borg сначала спрашивает (см. Долгие задания и диски).

В зашифрованном архиве zip или 7z новые записи шифруются AES-256 с паролем, которым вы открыли архив, а 7z, который скрывает список записей, продолжает его скрывать. Записи, которые изменение сохраняет, остаются прежними.

Архивы RAR и одиночные сжатые файлы вроде .gz остаются только для чтения, и при попытке их изменить Borg сообщает об этом. Ctrl-Q и Сжать… внутри архива не работают. Архив внутри архива открывается после того, как вы скопируете его наружу. Оболочка остаётся в папке, где лежит архив, а сохранённый сеанс снова открывает эту папку с курсором на архиве.

Зашифрованные архивы zip и 7z при открытии спрашивают пароль. В окне Пароль каждый введённый символ показан как всё время меняющийся символ помех, и при каждом нажатии клавиши поле вспыхивает. Картинка зависит только от числа введённых символов. При неверном пароле окно спрашивает снова, а Esc выходит из архива. Borg держит пароль в памяти, пока панель показывает архив, и нигде его не записывает. Извлечь сюда не может спросить пароль, поэтому для зашифрованного архива нажмите на нём Enter, введите пароль и скопируйте файлы наружу клавишей F5.

Прежде чем что-либо записать, Borg подсчитывает, сколько займут выбранные записи после распаковки, и сначала спрашивает, если это больше 1 GiB и больше размера архива в 100 раз или если файлов больше 100 000: так выглядят zip-бомбы. Он также спрашивает, когда в месте назначения меньше свободного места, чем нужно файлам, а изменение архива спрашивает, когда на его диске нет места для нового архива рядом со старым. Всё равно распаковать (u) продолжает работу, а «Отмена» останавливает её до первого файла. Записи с абсолютными путями, с .. в пути и файлы устройств пропускаются с уведомлением, и никакая запись или ссылка в архиве не заставит Borg писать за пределами папки назначения.

Zip, 7z и семейство tar Borg читает сам. Архивы RAR он читает через 7-Zip (7zz или 7z) или bsdtar, смотря что найдёт первым, а в macOS bsdtar уже есть. Если ни одной из этих программ нет, Enter на архиве RAR предлагает установить bsdtar. Окно Установка bsdtar работает так же, как окно для tcpdump в разделе Захват трафика: оно показывает точную команду для вашего менеджера пакетов, а Enter вводит её в оболочку Borg. Borg также ищет bsdtar в папке libarchive из Homebrew, которую Homebrew не добавляет в PATH. Зашифрованные архивы RAR пока не открываются.

F4 открывает выбранный файл в редакторе Borg, а Shift-F4 открывает его в $VISUAL или $EDITOR. Редактор сохраняет окончания строк и отступы файла, подсвечивает код так же, как просмотрщики, и показывает номера строк. Shift со стрелками выделяет текст; Ctrl-C, Ctrl-X и Ctrl-V копируют, вырезают и вставляют через буфер обмена Borg, а текст, вставленный из терминала, вводится в точности как есть. Ctrl-Z и Ctrl-Y отменяют и повторяют действие, а Tab и Shift-Tab увеличивают и уменьшают отступ. F2 или Ctrl-S сохраняет файл через временный файл, поэтому файл никогда не остаётся записанным наполовину. Файлы не в кодировке UTF-8 или больше 32 МиБ открываются в просмотрщике. Строки длиннее 20 000 символов, например минифицированный код, не подсвечиваются, а отрисовывается только видимая на экране часть строки, поэтому даже большой файл, записанный в одну строку, редактируется без задержек. Alt-Shift-F разворачивает JSON-файл по одному значению в строке с отступами самого файла, за один шаг, который отменяется Ctrl-Z; JSON, который не удаётся разобрать, остаётся как есть, а строка состояния сообщает, где остановился разбор.

Свои вопросы редактор задаёт в диалогах поверх текста: Tab переходит между полями и кнопками, Enter подтверждает выбранную, Esc отменяет, и на любую из них можно щёлкнуть мышью. Ctrl-F или F7 ищет текст с помощью панели поиска, описанной ниже. Ctrl-R или F4 запускает замену с теми же переключателями, что и у панели поиска: Enter заменяет совпадение и переходит к следующему, Пропустить оставляет его как есть, а Alt-A или Все заменяет все совпадения за один шаг, который отменяется одним нажатием Ctrl-Z. С регулярным выражением $1 в замене подставляет то, что нашла его первая группа. Ctrl-G переходит к строке. Esc закрывает редактор, а если есть несохранённые изменения, сначала спрашивает, сохранить их или отбросить; если файл на диске изменился после открытия, Borg спросит, перезаписать его или перечитать. Щелчок ставит курсор, перетаскивание или щелчок с Shift выделяет текст, двойной щелчок выделяет слово, а колесо прокручивает; клавиши, показанные в строке состояния, тоже можно нажимать мышью.

Alt-E открывает выбранный файл в редакторе Borg прямо в активной панели, вместо её файлов, поэтому можно редактировать два файла рядом или файл рядом с папкой, в которой он лежит. В результатах поиска и в коллекциях Alt-E открывает редактор на другой панели, так что список остаётся на виду. Alt-E на другом результате открывает его вместо файла, который там открыт. Если в том файле есть несохранённые изменения, Alt-E выводит его редактор вперёд и спрашивает, сохранить ли их. F6 переходит из редактора одной панели в другую панель, а Tab возвращает к редактору из списка файлов. Текст, скопированный по Ctrl-C в одном редакторе, вставляется по Ctrl-V в другом. Пока фокус в редакторе, панель клавиш показывает клавиши редактора, а клавиши панели возвращаются вместе со списком файлов. Ctrl-O показывает консоль и из редактора, а F9 открывает меню. Esc или F10 закрывает редактор и возвращает панели её файлы; при выходе Borg сначала спрашивает о каждом редакторе в панели с несохранёнными изменениями. Быстрому просмотру и сведениям о файле нужна другая панель, поэтому они ждут, пока её редактор не закроется. Редактор, открытый рядом с результатами, при закрытии возвращает им фокус и снова показывает быстрый просмотр или сведения о файле, которые были открыты.

Просмотрщик и редактор ищут текст одинаково. В просмотрщике /, F7 или Ctrl-F открывает панель поиска в строке состояния; в редакторе это Ctrl-F или F7. Borg ищет по мере ввода, начиная с места, где открылась панель: все совпадения на экране отмечаются, текущее выделяется, а панель показывает их счёт (3 из 17). Enter, Down или F3 переходит к следующему совпадению, а Shift-Enter, Up или Shift-F3 переходит к предыдущему; после последнего совпадения поиск продолжается с другого конца и сообщает об этом. Alt-C учитывает регистр (иначе запрос в нижнем регистре находит совпадения в любом регистре), Alt-W ищет целые слова, а Alt-R читает запрос как регулярное выражение; переключатели можно нажимать и мышью. Ctrl-P и Ctrl-N возвращают недавние запросы. Esc закрывает панель; после этого n и N в просмотрщике или F3 и Shift-F3 в редакторе переходят по совпадениям. В большом файле просмотрщик ищет в фоне, показывает, докуда дошёл, и останавливается по Esc. Совпадения он считает в файлах до 64 МиБ, но не больше 10 000.

Руководство описывает ветку main · Borg 0.11.0 · 1f6bce6
В последнем выпуске может быть не всё, что здесь описано. Список изменений

Перевод с английского. Будем рады исправлениям. Команды и сочетания клавиш не переводятся.