ls /usr/bin

выдает сообщение об ошибке:

ls: reading directory '/usr/bin': Permission denied

на wbash.exe . По этой причине завершение bash и завершение eshell не дают результатов или дают неполные результаты. Я хотел бы, чтобы это работало.

Вещи, которые работают:

/usr/bin $ ls -l emacs
lrwxrwxrwx   1 root           root           23 2017-07-31 17:16 emacs -> /etc/alternatives/emacs
/usr/bin $ ls -l gcc-5
-rwxr-xr-x   1 root           root       915736 2017-09-14 06:01 gcc-5
/usr/bin $ ls -ld /usr/bin
drwxr-xr-x   0 root           root          512 2017-12-19 09:45 /usr/bin
/usr/bin $ ls -ld /usr/sbin
drwxr-xr-x   0 root           root          512 2017-12-19 09:45 /usr/sbin
/usr/bin $ ls -ld /
drwxr-xr-x   0 root           root          512 2017-11-17 10:23 /
/usr/bin $ ls -ld /usr
drwxr-xr-x   0 root           root          512 2017-03-30 11:55 /usr

Версия для Windows: Windows 10 (64-разрядная версия), версия 1703 (сборка 15063.786)

Каталог sbin можно без проблем перечислить, и все настройки Windows для bin в %USERPROFILE%\AppData\Local\lxss\rootfs\usr доступные через WindowsExplorer, такие же, как и для sbin .

Команды icacls.exe bin и icacls.exe sbin внутри %USERPROFILE%\AppData\Local\lxss\rootfs\usr дают точно такой же ответ (вплоть до первого слова, которое является bin для bin и sbin для sbin). Так что, похоже, это не связано с дополнительными атрибутами. Также команды icacls.exe bin /verify verify и icacls.exe sbin /verify не указывают на какие-либо ошибки.

Может быть, есть какая-то связанная с безопасностью функция ubuntu (я не знаю), которая запрещает мне перечислять содержимое каталога /usr/bin? (В этом случае было бы странно, если бы он не запрещал перечисление /usr/sbin .)

2 ответа2

0

Это очень похоже на проблему с разрешениями.

Поскольку вы убедились, что проблема не в Windows, то эта проблема связана с внутренними настройками WSL, где он эмулирует разрешения Linux, которые изначально не существуют в Windows.

Я не знаю точно, как WSL эмулирует разрешения Linux. Если он использует механизм Windows ACL, вы можете сбросить их все:

icacls %localappdata%\lxss /reset /T /C

Если это не помогает и без лучшего знания о том, как реализованы эти разрешения, я бы предложил переустановить WSL:

  1. Сделайте резервную копию ваших данных

  2. Удалите среду Ubuntu, но сохраните домашнюю папку, затем переустановите WSL, используя команды:

    lxrun /uninstall
    lxrun /install
    
  3. Если это не помогло, полностью переустановите среду Ubuntu, включая удаление вашей домашней папки, введя:

    lxrun /uninstall /full
    lxrun /install
    

В промежутке между двумя приведенными выше командами убедитесь, что папка %localappdata%\lxss пуста. Если нет, переместите его содержимое во временное хранилище и удалите позже, когда оно больше не требуется.

0

Нет проблем с правами доступа к cygwin в $HOME/AppData/Local/lxss/rootfs/usr/bin и я провел несколько тестов с папками wsl для игровых площадок под cygwin. Это привело меня к следующему решению.

В bash от cygwin я зашел в $HOME/AppData/Local/lxss/rootfs/usr и выполнил следующую команду:

find bin -mindepth 1 -maxdepth 1 -printf "cp -a %p fix/%p\n" > /temp/fix.sh

Это создало скрипт /temp/fix.sh в папке /temp который используется совместно с cygwin и wsl по символическим ссылкам.

В wbash я пошел в /usr/ , создал папки fix и fix/bin , запустил скрипт и переместил каталог fix/bin в bin-fix .

cd /usr
mkdir -p fix/bin
. /temp/fix.sh
mv fix/bin bin-fix

Таким образом, wbash сказал мне, что у него проблемы с разрешением для bin/head . Хорошо, я принял это и переустановил coreutils как последний шаг этой процедуры (см. Ниже). Затем я закрыл все wbash приложения и wbash себя и вернулся в Cygwin , где папка usr еще была открыта.

Там я убрал bin и переименовал bin-fix в bin .

mv bin bin.old
mv bin-fix bin

Я перезапустил wbash и вуаля все работает нормально и ls /usr/bin работает.

Как я уже упоминал выше, я переустановил coreutils в качестве последнего шага:

sudo aptitude reinstall coreutils

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .