Как я могу получить доступ к UNC-путям с помощью подсистемы Windows для Linux?

Размещение следующего кода в ~ / .bashrc работает для меня в bash. Он преобразует имя хоста в команде в адрес на основе записей в ~ / .hosts . Если ~ / .hosts не существует или имя хоста не может быть найдено в ~ / .hosts , команда выполняется как обычно. Это должно работать с исходными флагами соответствующих функций и независимо от того, где размещается имя хоста относительно флагов, например ping -i 0.5 host1 -c 3 , работает.Файл ~ / .hosts имеет приоритет перед любым другим местом для поиска имен хостов, поэтому, если есть какие-либо дублирующие имена хостов, будет использоваться адрес из ~ / .hosts .

$ cat ~/.bashrc 
function resolve {
        hostfile=~/.hosts
        if [[ -f "$hostfile" ]]; then
                for arg in $(seq 1 $#); do
                        if [[ "${!arg:0:1}" != "-" ]]; then
                                ip=$(sed -n -e "/^\s*\(\#.*\|\)$/d" -e "/\<${!arg}\>/{s;^\s*\(\S*\)\s*.*$;\1;p;q}" "$hostfile")
                                if [[ -n "$ip" ]]; then
                                        command "${FUNCNAME[1]}" "${@:1:$(($arg-1))}" "$ip" "${@:$(($arg+1)):$#}"
                                        return
                                fi
                        fi
                done
        fi
        command "${FUNCNAME[1]}" "$@"
}

function ping {
        resolve "$@"
}

function traceroute {
        resolve "$@"
}

Пример ~ / .hosts приведен ниже. Он следует тому же формату, что и / etc / hosts . Комментарии и пробелы обрабатываются правильно.

$ cat ~/.hosts 
# addresses and hostnames
stackexchange.com se

192.168.0.1 host1 # this is host1's address
login-node.inst.ac.uk login
15
06.09.2017, 12:35
1 ответ

В последнем выпуске Windows «Fall Creators Update» можно монтировать пути UNC или любую другую файловую систему, к которой Windows может получить доступ, из WSL.

Вы можете сделать это с помощью команды mount, как обычно, с файловой системой «drvfs», предоставляемой WSL:

sudo mount -t drvfs '\\server\share' /mnt/share

Одиночные кавычки полезны вокруг пути UNC, так что вы не нужно избегать обратной косой черты. Вы можете монтировать в произвольный каталог; Я использовал /mnt/shareв качестве примера, но подойдет любой пустой каталог.

Все файлы будут отображаться с полными разрешениями a+rwx777. Реальные права доступа будут проверены, когда вы попытаетесь получить доступ к файлу, и вы можете получить ошибку в этот момент, даже если кажется, что операция должна быть выполнена успешно. Каждый читаемый файл будет рассматриваться как исполняемый.


Для местоположений, для которых требуются учетные данные, у вас есть три варианта:

  1. Перед подключением перейдите к расположению с помощью Проводника Windows и выполните аутентификацию. WSL унаследует ваши учетные данные и разрешения. Это самый простой способ для одноразового использования.
  2. Используйте команду net useиз командной строки или net.exe useизнутри WSL ( cd /mnt/cсначала для подавления предупреждения ). Вам понадобится что-то вроде net.exe use \\server\share /USER:. Вместо этого вы можете использовать '*'для запроса пароля. Другие конфигурации показаны с помощью net.exe help use.
  3. Используйте диспетчер учетных данных Windows для настройки сохраненных учетных данных. Я никогда не делал этого.

Я понимаю, что саму Samba можно заставить работать и под WSL, но, поскольку хост предоставляет ту же функциональность, я бы использовал встроенную версию из Windows, когда она доступна. smbclientв первую очередь предназначен для доступа по протоколу FTP к серверам SMB и извлечения/помещения отдельных файлов, и он должен работать, как обычно, при соответствующей настройке.

30
27.01.2020, 19:49

Теги

Похожие вопросы