Редактор пусть сохраняет файлы так же как он делал 10 лет назад. Вопрос в том, какие данные сообщать вызовам stat(2) и umask(2), поступившим в WSL от юниксовых утилит, имея на руках только NTFS-метаданные. Правильный ответ — «организовать правила трансляции». Неправильный ответ от Microsoft, чреватый проблемами — «создавать и хранить синтетические метаданные, следя за их целостностью».
Для ext3 тома решение — сделать для программы примонтирования ext тома настройки «дефолтный uid», «дефолтный gid» и т.д. Примерно как это делается в линуксе в опциях к mount.ntfs, только наоборот.
Для ntfs тома решение — убрать нафиг подход «разваливающееся хранилище метаданных для файлов Linux» и вместо этого ввести в wsl правила трансляции ntfs метаданных в ext метаданные для stat(2) и umask(2) с человеческими дефолтами.
Извиняюсь, я думал, что речь про редактирование файлов на ext3 томе, и все мои ответы были на эту тему. Если речь идёт про файлы на ntfs томе, то у меня впечатление всё то же самое — подход костыльный, какой-то «файл метаданных для линуксовых файлов». Стабильный источник метаданных — файловая система. Не думаю, что для WSL большая проблема ввести вменяемые правила и дефолты для трансляции ntfs-метаданных в данные для системного вызова umask().
> Вы понимаете, что файл РЕДАКТИРУЕТСЯ? И, в общем случае, драйвер не может просто взять и оставить ему те же метаданные, которые были раньше?
Что значит «не может оставить»? Именно это и делают все вменяемые файловые системы при редактировании файла. Запись в файловой таблице (inode) для файла останется одной и той же, пишите в него хоть 0 байт, хоть Войну и мир. Меняется количество и адреса блоков с содержимым, но это уже другой вопрос, они не являются метаданными.
> Вот софтина берет, при сохранении удаляет старый файл, и под тем же именем создаёт новый.
В общем случае так не происходит — редактируется старый inode. Если всё же происходит, то вопрос сводится к «какие метаданные выставлять для нового файла?» Это вопрос сложный из-за сложности и количества метаданных, но если бы я был пользователем wsl, мне было бы достаточно грубого решения в первом приближении: «Время доступа взять из системных часов Windows. UID, GID, флаги chmod — спросить в начале у юзера.»
Про ACL речь не шла вообще, это уже опциональная надстройка, они бы хотя бы с голым ext разобрались. Вы бы ещё спросили, как винде взаимодействовать с apparmor или selinux.
Проблема бы решилась так, что эти «метаданные», упомянутые в статье, брались бы драйвером из файловой системы, а не из какого-то внешнего неконсистентного хранилища. Uid и gid для ext раздела можно было бы спрашивать у юзера при подключении тома.
RIP, клёвый был трекер. Правила там были драконовские, в том числе на оформление vorbis тегов, но зато порядок в тегах и каталогизация были — моё почтение…
Но первым же действием после перегрева на убунте должна была быть проверка — воспроизводится ли проблема на любом минимальном линуксе, например на debootstrap-установке дебиана или убунты, или на LiveCD любого дистрибутива. Желательно с как можно более новым ядром. Желательно без systemd. Никаких power profile, демонов и т.д. — выставляем все опции энергосбережения руками в /sys/class и /proc/acpi, максимум через обёртки типа powertop. Если и это не помогло бы, значит всё, только сидеть ждать новых релизов ядра.
Даже если бы этой проблемы с RAID не было, ставить Линукс на настолько новые модели ноутбуков — это занятие только для сильных духом)) Я помню, сколько сил убил на Thinkpad Tablet 12 + Debian в 2014 году…
Ни слова о технических подробностях курсов, кроме названий 2 дисциплин (ну и форк-бомбы), зато в статье нашлось место платьям за 15$, выступлениям корейских диджеев и общему пафосу. Я вообще на хабр пришёл?
> Как об этом узнать, не читая man man целенаправленно?
Никак =) Вроде бы такого канонического документа «по общим вопросам» нет.
Самое близкое, что я знаю, — это проект tldp.org. Но, как правило, по конкретной утилите или системному компоненту в интернете всегда можно быстро найти хороший вводный курс. Я сам грешен тем, что вместо мануалов порой гуглю быстрые howto от сторонних авторов.
Как бы безмерно я ни уважал идеи RMS, но как человек он от этики весьма далёк.
Это вообще какая-то дикость: человек, которого часто называют хакером (в изначальном смысле), придумавший GDB и Emacs и который вроде как в силу своих знаний и опыта должен быть сверхадекватен в суждениях в области IT, выдаёт полные субъективизма и самомнения детсадовские суждения «какой язык типа самый лучший» в своём мирке, где видимо только Си и Лисп:
> Самый мощный язык программирования это Lisp. Если вы не знаете Lisp (или его вариант, схему), вы не знаете, что имеется в виду, когда говорят о мощности и элегантности языка программирования. Однажды вы выучите Lisp и поймете чего не хватает в других языках программирования.
Он вообще знаком хотя бы на уровне «слышал» с Haskell, Coq, Agda? С концепцией pattern matching, с выводом типов, с тем фактом, что функциональное программирование не закончило прогрессировать на Лиспе? Он хотя бы может предположить, что может чего-то не знать, в чём-то не разбираться?
Lisp красивый, но есть и красивее, не говоря уже о том, что Lisp — это целое семейство диалектов, среди которого есть и уродцы вроде Emacs Lisp. (+ мне кажется, RMS под слово Lisp понимает Common Lisp).
Вагон-то вагон, но этот вагон будет действовать до первого небольшого изменения в вёрстке. nth-child=2? Вставят рекламу как nth-child=3 и нет больше блокировки. И внести изменения в алгоритм вставки рекламных блоков значительно легче и быстрее, чем реализовать ответ на это на стороне блокировщика. Не говоря уже о том, что с точки зрения пользователя весь процесс будет выглядеть как «мой блокировщик рекламы периодически не работает».
Для ext3 тома решение — сделать для программы примонтирования ext тома настройки «дефолтный uid», «дефолтный gid» и т.д. Примерно как это делается в линуксе в опциях к mount.ntfs, только наоборот.
Для ntfs тома решение — убрать нафиг подход «разваливающееся хранилище метаданных для файлов Linux» и вместо этого ввести в wsl правила трансляции ntfs метаданных в ext метаданные для stat(2) и umask(2) с человеческими дефолтами.
Если речь про rwxrwxrwx, то ответ на ваш вопрос называется umask.
Что значит «не может оставить»? Именно это и делают все вменяемые файловые системы при редактировании файла. Запись в файловой таблице (inode) для файла останется одной и той же, пишите в него хоть 0 байт, хоть Войну и мир. Меняется количество и адреса блоков с содержимым, но это уже другой вопрос, они не являются метаданными.
> Вот софтина берет, при сохранении удаляет старый файл, и под тем же именем создаёт новый.
В общем случае так не происходит — редактируется старый inode. Если всё же происходит, то вопрос сводится к «какие метаданные выставлять для нового файла?» Это вопрос сложный из-за сложности и количества метаданных, но если бы я был пользователем wsl, мне было бы достаточно грубого решения в первом приближении: «Время доступа взять из системных часов Windows. UID, GID, флаги chmod — спросить в начале у юзера.»
Проблема бы решилась так, что эти «метаданные», упомянутые в статье, брались бы драйвером из файловой системы, а не из какого-то внешнего неконсистентного хранилища. Uid и gid для ext раздела можно было бы спрашивать у юзера при подключении тома.
Но первым же действием после перегрева на убунте должна была быть проверка — воспроизводится ли проблема на любом минимальном линуксе, например на debootstrap-установке дебиана или убунты, или на LiveCD любого дистрибутива. Желательно с как можно более новым ядром. Желательно без systemd. Никаких power profile, демонов и т.д. — выставляем все опции энергосбережения руками в /sys/class и /proc/acpi, максимум через обёртки типа powertop. Если и это не помогло бы, значит всё, только сидеть ждать новых релизов ядра.
> мессенджер, использующий идентификацию по номеру телефона
Ну да, ну да
> Спасибо за чтение данного руководства конфиденциальности. Если он вам понравился, нажмите на сердечко ниже, чтобы другие люди могли увидеть это.
Покажите сердечко!
Никак =) Вроде бы такого канонического документа «по общим вопросам» нет.
Самое близкое, что я знаю, — это проект tldp.org. Но, как правило, по конкретной утилите или системному компоненту в интернете всегда можно быстро найти хороший вводный курс. Я сам грешен тем, что вместо мануалов порой гуглю быстрые howto от сторонних авторов.
Это вообще какая-то дикость: человек, которого часто называют хакером (в изначальном смысле), придумавший GDB и Emacs и который вроде как в силу своих знаний и опыта должен быть сверхадекватен в суждениях в области IT, выдаёт полные субъективизма и самомнения детсадовские суждения «какой язык типа самый лучший» в своём мирке, где видимо только Си и Лисп:
> Самый мощный язык программирования это Lisp. Если вы не знаете Lisp (или его вариант, схему), вы не знаете, что имеется в виду, когда говорят о мощности и элегантности языка программирования. Однажды вы выучите Lisp и поймете чего не хватает в других языках программирования.
Он вообще знаком хотя бы на уровне «слышал» с Haskell, Coq, Agda? С концепцией pattern matching, с выводом типов, с тем фактом, что функциональное программирование не закончило прогрессировать на Лиспе? Он хотя бы может предположить, что может чего-то не знать, в чём-то не разбираться?
Lisp красивый, но есть и красивее, не говоря уже о том, что Lisp — это целое семейство диалектов, среди которого есть и уродцы вроде Emacs Lisp. (+ мне кажется, RMS под слово Lisp понимает Common Lisp).
pdftotext input.pdf output.txt
</thread>