Файлы, задания и просмотр
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
В последнем выпуске может быть не всё, что здесь описано. Список изменений
Перевод с английского. Будем рады исправлениям. Команды и сочетания клавиш не переводятся.