РЕДАКТИРОВАТЬ:Я понял, что tee
может читать из оригинала stdin
, если к нему ничего не передано, поэтому я подумал, что добавлю другое решение на случай, если оно поможет любому, кто наткнется на это позже.
Спасибо @steeldriver за указание на то, что read -p
печатает в stderr
, а не stdout
. Так что самое близкое, что у меня есть, это:
read -p " - This directory is not empty, purge? (Y/N): " choice 2> >(tee -a $mylogs)
echo $choice >> $mylogs
Источник и объяснение происходящего можно найти здесь . В этом конкретном примере первая строка может перенаправить stderr
на tee
для печати приглашения в $mylogs
и на stdout
.
Тем не менее, read
, кажется, делает что-то, чтобы сделать невозможным перехват пользовательского ввода и отправку его $mylogs
, а не только $choice
.
Другое решение проще и короче, но менее удобно для пользователя и читабельно (, если только многие люди не знают, что read
— не единственная команда для такого простого чтения ввода):
echo -n " - This directory is not empty, purge? (Y/N): " | tee -a $mylogs
choice=$(tee -a $mylogs)
Таким образом, во второй строке tee
предоставляет способ предоставить пользователю ввод для как $mylogs
, так и $choice
, в отличие от read
, но, очевидно, нет опции подсказки (-p
). Так еще 2 строчки.
Кроме того, вы должны нажать Enter , затем Ctrl + D для отправки. Это может быть плохо для моей ситуации Y / N, но может быть хорошо для многострочных ответов -, поскольку вы можете нажать Enter несколько раз, прежде чем нажимать Ctrl + D , чтобы остановиться.
По всей видимости, это связано с устаревшей ссылкой в документации Microsoft для установки дистрибутивов вручную . Связанный с ним пакет Kali — 2019.2, и я могу воспроизвести проблему, с которой вы столкнулись с этим устаревшим пакетом (). Безусловно, доступен более поздний пакет Kali WSL, потому что из Microsoft Store установлена версия 2021.2. К сожалению, я не знаю прямой ссылки на этот пакет. Я представил это как проблему на MicrosoftDocs\WSL Github.
Проблема усугубляется еще и тем фактом, что Kali, предоставляемый для WSL, является очень минимальным дистрибутивом и не включает некоторые инструменты, такие как GPG, которые были бы предоставлены в «нормальном» дистрибутиве. Таким образом, инструкции, которым вы обычно следуете для обновления ключей, не работают в WSL.
Возможно есть способ установить gpg
со всеми его зависимостями без работающего apt
, но на мой взгляд оно того не стоит.
Вместо этого позвольте мне предложить альтернативный метод установки с учетом того, что вам нужно установить на диск, отличный от C:
. Тем не менее, вам потребуется временно выделить (или освободить )чуть менее 1 ГБ на C:
диске во время этого процесса. Мы можем освободить его в конце.
Пожалуйста, пусть вас не пугает длина приведенных ниже инструкций. Я склонен быть слишком подробным, чтобы убедиться, что вы понимаете, что происходит, и попытаться сделать это как можно более надежным. Я проверил весь процесс ниже лично,но дайте мне знать, если у вас возникнут проблемы.
Сначала удалите существующую установку Kali. Я предполагаю, что у вас нет критических файлов, так как я предполагаю, что вы недавно установили. Но если вы это сделаете, переместите их из экземпляра WSL.
Затем из PowerShell или CMD:
wsl --unregister kali-linux
Также удалите (старые, устаревшие )файлы пакета, загруженные ранее.
Затем перейдите в Microsoft Store и установите Kali. Это позволит установить файлы пакета в защищенный каталог C:\Program Files\WindowsApps\
, поэтому нам временно нужно место на этом диске.
Предполагая, что вы используете Windows Terminal, запустите Start-Process wt -Verb RunAs
в PowerShell, чтобы получить приглашение администратора. Если это не терминал Windows, запустите PowerShell от имени администратора.
В Admin PowerShell запустите Get-ChildItem -Recurse 'C:\Program Files\WindowsApps\Kali*' | Where-Object {$_.Name -eq 'install.tar.gz' } | % { $_.DirectoryName } | Set-Clipboard
, чтобы получить каталог, в котором был установлен пакет Kali.
Подтвердите, что он нашел правильный путь через Get-Clipboard
. Он должен вернуть что-то вроде C:\Program Files\WindowsApps\KaliLinux.54290C8133FEE_1.8.0.0_x64__ey8k8hqnwqnmg
. Этот путь может измениться в будущем (, если вы читаете этот ответ позже ), но это нормально.
Выйдите из Admin Shell и вернитесь в PowerShell «обычного пользователя»:
mkdir D:\wsl\instances\kali-linux
cd D:\wsl\instances\kali-linux
Get-Clipboard # Confirm that the Kali package path is still on the clipboard
Copy-Item "$(Get-Clipboard)\*"
Файлы пакета будут скопированы на диск D:
. Конечно, вы можете указать путь установки по своему усмотрению. Я лично использую формат wsl\instances\distro-name
, так как у меня есть несколько дистрибутивов и экземпляров. Я рекомендую его для будущей -проверки на тот случай, если позже вам понадобится больше копий.
Теперь у вас должно быть несколько файлов в целевом каталоге. Что-то вроде:
Name
----
AppxBlockMap.xml
AppxManifest.xml
AppxMetadata/
AppxSignature.p7x
Assets/
install.tar.gz
kali.exe
resources.pri
Отсюда вы должны вернуться на знакомую территорию. Просто запустите .\kali.exe
, подождите несколько секунд, установите свое имя пользователя и пароль, и WSL запустится в Kali.
Выйдите из Kali и (вернитесь в PowerShell )удалите файлы пакета из этого каталога с помощью Remove-Item Appx*, Assets, install.tar.gz, resources.pri
.
Для WSL1 вы должны получить:
rootfs
, в котором хранится файловая система. ВАЖНО :Делайте НЕ доступ к этому по какой-либо причине из Windows/PowerShell/CMD/Блокнота/любого другого приложения Windows и т. д. Там будут драконы . temp
fsserver
kali.exe
, которую мы скопировали поверх (, но не удалили ). Это не так уж и полезно, ИМХО, но вам может понадобиться. Ее можно использовать для запуска Kali, но команда wsl
намного лучше (больше возможностей, лучше поддерживается ). Удалите Kali из Microsoft Store, чтобы освободить место на диске C:
.
Ваша установка должна быть самой последней и лучшей из доступных в Kali в Microsoft Store. Вы можете проверить выпуск Kali с помощью cat /etc/os-release
. В настоящее время это 2021.2. sudo apt update && sudo apt upgrade
теперь должно работать нормально...
Что ж, извините, что вам пришлось пройти через такой сложный процесс, но я только что нашел гораздо более простое решение. Надеюсь, это сэкономит кому-то время, если они столкнутся с этим в будущем.
Чтобы обновить связку ключей:
> wget https://http.kali.org/kali/pool/main/k/kali-archive-keyring/kali-archive-keyring_2020.2_all.deb
> sudo dpkg -i kali-archive-keyring_2020.2_all.deb
После этого вы сможете нормально sudo apt update && sudo apt upgrade
.
Любезно предоставлено u/desktopecho на Reddit и указанном репозитории Github .