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

как насчет awk?

$ awk -F"[<>]" '/\"a\"|\"c\"/{print $3}' test.t
 a value
 c value

$ cat test.t
<object>
 <class = "a"> a value </class>
 <class = "b"> xyz </class>
 <class = "c"> c value </class>
 <class = "d"> xyz </class>
</object>
12
02.12.2016, 22:51
1 ответ

Почему это произошло?

Поскольку обычные файловые системы Unix работают иначе, чем файловые системы Windows, WSL хранит дополнительную информацию о специфичных для Linux свойствах файлов в расширенных атрибутах файлов Windows, используемых для их представления . Обычные программы Windows не знают об этих атрибутах и ​​не сохранят их при редактировании файла. В этом случае важная информация о файле теряется.

Когда WSL пытается прочитать файл и не может найти ожидаемые атрибуты, выдается сообщение об ошибке, как и в случае повреждения собственной файловой системы. Если он вообще никогда не видит атрибуты в файле, этот файл считается несуществующим и не отображается в списках файлов.

Официальный совет WSL :

НЕ, ни при каких обстоятельствах создавать и / или изменять файлы Linux с помощью приложений Windows, инструментов, скриптов, консолей и т. Д.

Создание / изменение файлов Linux из Windows, скорее всего, приведет к повреждению данных и / или повреждению вашей среды Linux, и вам потребуется удалить и переустановить дистрибутив!

по этой причине (но крупнее, краснее и с большим количеством подчеркиваний). «Файлы Linux» означают все, что находится в вашем каталоге lxss . Вы можете изменять обычные файлы Windows изнутри Linux через файловую систему / mnt / c / ... DrvFS , но не наоборот.

Однако выпуск Windows 10 1903 года представляет новый механизм, который позволяет безопасно редактировать файлы из Windows , если вы все делаете правильно.Это не поможет решить проблему с уже поврежденными файлами, но поможет избежать ее в будущем.

Что я могу сделать, чтобы это исправить?

Если вы уже редактировали файл и теперь не можете получить к нему доступ, все еще можно прочитать содержимое из самой Windows и восстановить файл таким образом.

Для этого вам необходимо:

  1. Переместиться обратно в папку в каталоге AppData \ Local \ lxss , где находится файл, с помощью проводника и переместить файл куда-нибудь. еще на вашем диске, например на рабочем столе.
  2. После этого перезапустите WSL, чтобы очистить его внутренний кеш, что можно сделать, просто закрыв все свои терминалы и открыв новый. Если у вас запущены фоновые серверные процессы, вам также необходимо остановить их.
  3. Снова в Linux перейдите в исходное расположение поврежденного файла. Теперь он вообще не будет отображаться, если вы успешно переместили файл в сторону. Для проверки запустите ls .
  4. Проверьте файл, который вы переместили: запустите

     cat /mnt/c/Users/.../Desktop/abc
    

    , чтобы увидеть исходное содержимое файла.

  5. Если до сих пор все сработало, вы можете скопировать этот файл обратно в то место, которое вы ожидали:

     cp /mnt/c/Users/.../Desktop/abc ~ / алфавит / abc {{ 1}} 

    Команда cp заставит WSL восстановить необходимые скрытые атрибуты в файле.

Эти инструкции будут работать для обычных файлов данных, но , если это важный файл операционной системы, вам может потребоваться полная переустановка .Для многих некритичных программ достаточно удалить поврежденный файл из Windows и переустановить программу с помощью диспетчера пакетов. Вы не сможете удалить файл изнутри Linux, если он поврежден.

Как я могу избежать этого в будущем?

Никогда не манипулируйте какими-либо файлами в каталоге lxss из Windows. Вместо этого:

  • Если у вас есть файл, к которому вы хотите получить доступ как из Windows, так и из Linux, сохраните его вне каталога lxss в любом другом месте вашей системы Windows. Вы можете открывать файлы Windows из Linux, используя автоматическое взаимодействие DrvFS : каталог / mnt / c содержит все файлы с вашего диска C :, и их можно читать и записывать с Linux.

  • Начиная с выпуска Windows 1903 года (март 2019 года), WSL включает специальный файловый сервер, который делает ваши файлы доступными для всех приложений Windows. Если вы запустите

     explorer.exe. 
     

    , то откроется проводник, показывающий текущий каталог Linux - вы можете копировать файлы в это окно или из него или редактировать их с помощью любого приложения. Путь к каталогу будет примерно таким: \\ wsl $ \ Ubuntu \ var \ www : часть \\ wsl $ \ ​​отправляет доступ к файлу по альтернативному, безопасному пути.

    Если вы можете, это будет лучший путь вперед (или иногда пункт выше). Для более старых выпусков читайте дальше.

  • Если есть файл, который вам нужен в определенном месте, например файл конфигурации, и вы хотите отредактировать его из Windows, вы можете создать символическую ссылку изнутри Linux на реальное местоположение файла или каталога:

     ln -s /mnt/c/.../abc ~ / .config / xyz / abc 
     

    Это будет работать до тех пор, пока файл не должен иметь каких-либо определенных разрешений или атрибутов в Linux (как исполняемый файл или ключ SSH).

  • В качестве альтернативы,и, возможно, лучше отредактируйте файлы Linux с помощью редактора Linux в терминале. nano , vim и emacs все легко доступны и хорошо работают под WSL, хотя все они имеют свои особенности.

  • Если вам необходимо отредактировать файл с помощью программы Windows, у вас недостаточно последней версии Windows, и вы не можете сделать ее символической ссылкой, сделайте копию в другом месте для редактирования и скопируйте ее обратно из / mnt / c затем, как и в случае с исправлением выше, или используйте контроль версий для синхронизации ваших изменений в нескольких местах.

Судя по некоторым экспериментам, обычный Блокнот действительно сохраняет необходимые атрибуты, но он не понимает окончания строк Unix, поэтому вы, вероятно, сами испортите содержимое, и я бы ни в коем случае не полагался на такое поведение. Поскольку это явно неподдерживаемая и недокументированная операция, маловероятно, что какой-либо редактор для Windows будет надежным.

13
27.01.2020, 19:56

Теги

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