Bash Ubuntu ve Windows 10 a změny souborů z Windows

Re:Bash Ubuntu ve Windows 10 a změny souborů z Windows
« Odpověď #15 kdy: 12. 10. 2017, 14:58:12 »
Protoze apache urcite nedrzi soubor otevreny
V komentáři výše od JardyP. máte popsán jeden z případů, kdy Apache drží otevřený soubor.

urcite neblokuje fyzicke smazani souboru...
Souborové systémy na Linuxu (a na Unixem obecně) fungují tak, že je někde na disku uložený soubor (tj. samotná data souboru, jeho obsah), a na ten soubor existuje jeden nebo více odkazů. Odkazy jsou například jména souborů v adresářích – nebo-li když máte nějak pojmenovaný soubor na disku, je to právě odkaz na ta data soubor. Když vytvoříte hardlink na soubor, není to nic jiného, než že do nějakého adresáře přidáte další odkaz na ten soubor (tj. na jeden obsah souboru vedou dva různé odkazy). A také každý program, který má otevřený nějaký soubor, má odkaz na ten soubor. Souborový systém pak funguje tak, že se soubor (tj. jeho obsah) fyzicky smaže teprve tehdy, když počet odkazů na soubor klesne na nulu. Takže když smažete nějaký soubor (např. pomocí příkazu rm), smaže se ten odkaz z adresáře – ale pokud na soubor vede nějaký další odkaz, třeba ze spuštěného programu, soubor dál na disku zůstává. Nebo-li můžete mít na disku soubor, ke kterému nevede žádná cesta ze souborového systému (myšleno teď přímo ze souborového systému na diskovém oddílu, ponechme stranou speciální souborové systémy jako /proc).  Takže například pokud vám nějaký program bude chrlit spoustu dat do logu a bude docházet místo na disku, vy soubor s logem smažete, ale žádné místo na disku se neuvolní, protože na soubor s logem stále vede odkaz z toho programu a ten do logu vesele dál zapisuje. Nebo-li dokud jakýkoli program v Linuxu má otevřený nějaký soubor, brání fyzickému smazání toho souboru, protože počet odkazů na soubor nemůže klesnout na nulu.


Re:Bash Ubuntu ve Windows 10 a změny souborů z Windows
« Odpověď #16 kdy: 12. 10. 2017, 15:20:29 »
Tenhle nesmysl vznikl tak, že tady napsal svou spekulaci či hypotézu (nebo co to bylo) Filip Jirsák, bez toho, že by to podpořil nějakými reálnými podklady. A napsat ji takto mohl jen proto, že tazatel nedal k dispozici moc informací, což pak nahrává tomu, že si kde kdo může napsat kde co, bez toho, že by se to opíralo o něco opravdu reálného.
V dalších komentářích tazatel informace doplnil:

Za prvé, starou verzi souboru zobrazují i jiné prohlížeče, kde stránka předtím nebyla zobrazena – takže nemůže jít o cache v prohlížeči. Mohla by to ještě dělat nějaká cache mezi prohlížečem a serverem, ale dá se předpokládat, že to tazatel zkouší přímo. Nebo-li je vysoce pravděpodobné, že starou verzi souboru servíruje přímo server.

Za druhé, když tazatel zkusí zobrazit soubor příkazem cat přímo z Linuxu, zobrazí se nová verze. Takže to není žádný problém v té emulační vrstvě mezi Windows a Linuxem (leda že by různým programům poskytovala různé verze souborů, ale to by byl fakt úlet). No a případ, kdy v Linuxu vidí dva programy různá data v jednom souboru, nastává právě tehdy, když program drží soubor otevřený, jiný program ten soubor smaže a na jeho místě vytvoří nový, se stejným názvem (což je u Windowsovských editorů typický postup). Původní program pak stále vidí ten soubor, který původně otevřel (a který už nemusí mít žádné jméno), nově spuštěný program použije cestu k souboru pro získání ukazatele, ale cesta už vede na nový soubor.

Takže zbývá vyřešit, proč Apache drží ten soubor otevřený – jednu z možných odpovědí citoval JardaP.

Pokud nějaký program drží otevřený soubor přes souborový deskriptor, je vidět v adresáři /proc/<PID>/fd/. mmap ale má v Linuxu svůj vlastní odkaz na soubor a původní souborový descriptor je po volání mmap možné zavřít, takže pokud Apache soubor drží přes mmap, v /proc/<PID>/fd to vidět nebude – je ale možné to najít v souboru /proc/<PID>/maps.

Lol Phirae

Re:Bash Ubuntu ve Windows 10 a změny souborů z Windows
« Odpověď #17 kdy: 12. 10. 2017, 15:37:24 »

Nebylo  by lepší si místo těch bludů přečíst ten odkaz na MS?  ::)

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Bash Ubuntu ve Windows 10 a změny souborů z Windows
« Odpověď #18 kdy: 12. 10. 2017, 15:44:05 »
@Filip Jirsák:
A co treba:

To je přesně to, co jsem napsal. Soubor není nijak explicitně cachovaný Apachem, ale Apache ho drží otevřený. A pokud dojde ke smazání souboru a vytvoření nového souboru se stejným jménem, Apache to kvůli implementaci souborových systémů na Linuxu nezjistí, protože má stále odkaz na ten původní soubor (který už po smazání není dostupný pod žádným jménem, ale protože na něj ještě existuje v Apachi odkaz, nedojde k jeho fyzickému smazání).

No, jede to na NTFS a pres widlovy ovladac FS, takze bych si neroufal tvrdit, ze to takto funguje, protoze nemam tuseni, jak to na tech Widlich v tomto pripade je.
« Poslední změna: 12. 10. 2017, 15:45:51 od JardaP . »

Re:Bash Ubuntu ve Windows 10 a změny souborů z Windows
« Odpověď #19 kdy: 12. 10. 2017, 15:44:34 »
Nebylo  by lepší si místo těch bludů přečíst ten odkaz na MS?  ::)
Bylo, netuším, proč to neuděláte. Můžu vám tu i jeden odstavec vypíchnout:

Citace
Further, as in Linux, some Windows tools implement unusual filesystem access patterns to handle file updating and don't actually edit files in-place: When apps/tools save changes to a file, the original files are often deleted and re-created, etc. During such operations, NT file extended properties (i.e. Linux file permissions) are often not copied and are "lost".
Už to tu máte vysvětlené potřetí, tak třeba to vezmete na vědomí…


Re:Bash Ubuntu ve Windows 10 a změny souborů z Windows
« Odpověď #20 kdy: 12. 10. 2017, 15:48:09 »
No, jede to na NTFS a pres widlofy ovladac FS, takze bych si neroufal tvrdit, ze to takto funguje, protoze nemam tuseni, jak to na tech Widlich v tomto pripade je.
To počítání odkazů není vlastností jednotlivých souborových systémů (btrfs, ext4 apod.), ale přímo součástí VFS. Třeba když je spuštěný program, který drží otevřený soubor, na souborovém systému na disku se to nijak neprojeví – je to informace, kterou si udržuje VFS v paměti.

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Bash Ubuntu ve Windows 10 a změny souborů z Windows
« Odpověď #21 kdy: 12. 10. 2017, 16:10:36 »
@Filip Jirsák: A vy vite s jistotou, ze v linuxovem subsystemu na Widlich to funguje take tak?

Re:Bash Ubuntu ve Windows 10 a změny souborů z Windows
« Odpověď #22 kdy: 12. 10. 2017, 16:41:31 »
@Filip Jirsák: A vy vite s jistotou, ze v linuxovem subsystemu na Widlich to funguje take tak?
Jistě. Není tak těžké si to vyzkoušet. A navíc by to těžko mohlo fungovat jinak.

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Bash Ubuntu ve Windows 10 a změny souborů z Windows
« Odpověď #23 kdy: 12. 10. 2017, 20:30:48 »
Jistě. Není tak těžké si to vyzkoušet. A navíc by to těžko mohlo fungovat jinak.

Vzhledem k tomu, ze je to bastl od MS, tak bych si radsi nebyl nicim jisty.

ByCzech

  • *****
  • 1 848
    • Zobrazit profil
    • E-mail
Re:Bash Ubuntu ve Windows 10 a změny souborů z Windows
« Odpověď #24 kdy: 12. 10. 2017, 21:22:40 »

Nebylo  by lepší si místo těch bludů přečíst ten odkaz na MS?  ::)

To by nešlo, Jirsák postupuje podle těchto bodů:

1. Jirsák má vždycky pravdu

2. Pokud Jirsák pravdu nemá, platí pravidlo č. 1

3. Dodatek: Jirsák má vždycky pravdu i kdyby se prokázalo, že je blbej

Ad 3. V takovém případě je nutné pokusit se zahltit a zmást ostatní diskutující pouze okrajově souvisejícími informace, které jsou platné a které někde vyčetl a pokusit se tak zvrátit co už všichni vědí. ;D

Re:Bash Ubuntu ve Windows 10 a změny souborů z Windows
« Odpověď #25 kdy: 12. 10. 2017, 23:21:16 »
Vzhledem k tomu, ze je to bastl od MS, tak bych si radsi nebyl nicim jisty.
Já jsem to zkoušel na Ubuntu pod Windows 10 s vimem – ve vimu jsem otevřel soubor s NTFS svazku (/mnt/c/…), vim si vytvoří pracovní soubor .nazev.swp. Podíval jsem se do /proc/<vim-pid>/fd/, tam je vidět otevřený deskriptor souboru, v průzkumníkovi ve Windows se v příslušném adresáři objevil soubor .nazev.swp. Z průzkumníka jsem ho smazal, v Ubuntu už ten název souboru také neexistoval (ověřeno výpisem ls -la), ale link v /proc/<vim-pid>/fd/ stále existoval – a cat /proc/<vim-pid>/fd/ vypsal očekávaný obsah pracovního souboru vimu. Chovalo se to tedy přesně podle očekávání a úplně stejně, jako na čistokrevném Linuxu běžícím přímo na železe. mmap jsem nezkoušel, ale nemám žádný důvod myslet si, že by to mělo fungovat jinak.

S dovolením budu tedy raději věřit tomu, co jsem si sám vyzkoušel, než vašim pochybám, které nemáte podložené žádným experimentem nebo dokumentací.

To by nešlo, Jirsák postupuje podle těchto bodů:
Chápu vaši frustraci z toho, že jsem si vám dovolil oponovat, vám, který si o sobě myslíte, že jste mistr světa. Nicméně to, že si někdo dovolí oponovat vám, opravdu neznamená, že si dotyčný myslí, že má vždy pravdu. Ostatně pokud si myslíte, že pravdu nemám, napište konkrétně, v čem se mýlím, jak je to podle vás – a ideálně také něco, čím svůj názor podpoříte. Zatím tady na tazatelův dotaz padly dvě relevantní odpovědi – že soubor cachuje prohlížeč, což tazatel následně vyvrátil, a druhá odpověď byla, že z nějakého důvodu starý obsah posílá server. Já jsem vysvětlil, v jakém případě a proč server může posílat starý odkaz, JardaP. to doplnil citací o mod_file_cache a Majkl to doplnil odkazem na MSDN, v obou případech jsou popisovány stejné principy, o kterých jsem psal já. Nikdo tahle tvrzení nevyvrátil ani nenapsal nebo neodkázal nic, co by s nimi bylo v rozporu.

Takže pokud jste přesvědčen, že se mýlím, protože ten geniální jste tu přece vy ne nemůže být nikdo, kdo by se vám alespoň přiblížil, dokažte to. Dokažte, že se mýlím, a neztrapňujte se tu podsouváním věcí, které jsem nikdy netvrdil. Ten váš předpoklad, že Jirsák nikdy nemůže mít pravdu, totiž nevypovídá nic o mně, jenom o vás.

j

Re:Bash Ubuntu ve Windows 10 a změny souborů z Windows
« Odpověď #26 kdy: 13. 10. 2017, 18:10:29 »
...
Koukam Jirsakovo blabolivy kolecko opet zacina. Mimochodem jirsaku, Apache zadnej html soubor otevrenej nema ani mit nemuze. On ho bud veme, a posle v okamzik pozadavku, a pripadne si ho jeste navrch ulozi do cache, ale rozhodne ho nedrzi otevrenej protoze pro to neexistuje naprosto zadnej duvod. Teda s jedinou vyjimkou - ze by tvurci apache byli stejni blbci jako TY.

https://blogs.msdn.microsoft.com/commandline/2016/11/17/do-not-change-linux-files-using-windows-apps-and-tools/
Lol ... takze je to jeste horsi, nez sem si myslel.

Re:Bash Ubuntu ve Windows 10 a změny souborů z Windows
« Odpověď #27 kdy: 13. 10. 2017, 20:04:11 »
pripadne si ho jeste navrch ulozi do cache
Proč by takovou hloupost dělal, když to může mít v cache operační systém? Aby se pokud možno zaplnila paměť, přeteklo to do swapu a ta data, která jsou už jednou na disku, se pro jistotu zapsala na disk ještě podruhé a příště by se četla z disku?

ale rozhodne ho nedrzi otevrenej
To nepište mně, to běžte napsat autorům Apache – zjevně totiž nevědí, co dělají.

Kdybyste aspoň tušil, o čem je řeč, věděl byste, jak triviální je ověřit si to, co tady píšu. Mohl byste mi prozradit, kde se podle vás ve výpisu deskriptorů souborů Apache vzal ten deskriptor č. 5?

Kód: [Vybrat]
root@desktop:~# a2enmod file_cache
Considering dependency cache for file_cache:
Enabling module cache.
Enabling module file_cache.
To activate the new configuration, you need to run:
  service apache2 restart

root@desktop:~# echo 'CacheFile /var/www/html/index.html' >> /etc/apache2/apache2.conf

root@desktop:~# service apache2 restart
 * Restarting Apache httpd web server apache2   

root@desktop:~# ls -l /proc/25129/exe
lrwxrwxrwx 1 root root 0 říj 13 19:57 /proc/25129/exe -> /usr/sbin/apache2

root@desktop:~# ls -l /proc/25129/fd/
celkem 0
lr-x------ 1 root root 0 říj 13 19:58 0 -> /dev/null
l-wx------ 1 root root 0 říj 13 19:58 1 -> /dev/null
l-wx------ 1 root root 0 říj 13 19:58 2 -> /var/log/apache2/error.log
lrwx------ 1 root root 0 říj 13 19:58 3 -> /unknown
lrwx------ 1 root root 0 říj 13 19:58 4 -> /unknown
lr-x------ 1 root root 0 říj 13 19:58 5 -> /var/www/html/index.html
lr-x------ 1 root root 0 říj 13 19:58 6 -> pipe:[21343]
l-wx------ 1 root root 0 říj 13 19:58 7 -> pipe:[21343]
l-wx------ 1 root root 0 říj 13 19:58 8 -> /var/log/apache2/other_vhosts_access.log
l-wx------ 1 root root 0 říj 13 19:58 9 -> /var/log/apache2/access.log

protoze pro to neexistuje naprosto zadnej duvod
Existuje, a to zrychlení přístupu k souboru.


JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Bash Ubuntu ve Windows 10 a změny souborů z Windows
« Odpověď #28 kdy: 13. 10. 2017, 20:56:39 »
Proč by takovou hloupost dělal, když to může mít v cache operační systém? Aby se pokud možno zaplnila paměť, přeteklo to do swapu a ta data, která jsou už jednou na disku, se pro jistotu zapsala na disk ještě podruhé a příště by se četla z disku?

A proc cachuji browsery? Ze by proto, ze cache OS pro dane pouziti nevyhovuje?

Re:Bash Ubuntu ve Windows 10 a změny souborů z Windows
« Odpověď #29 kdy: 13. 10. 2017, 21:22:55 »
A proc cachuji browsery? Ze by proto, ze cache OS pro dane pouziti nevyhovuje?
To je ale úplně jiná cache. Browsery lokálně cachují data, která by jinak musely znovu stahovat ze sítě. Ta data uloží do souboru na disk. Nevím o to, že by nějaký prohlížeč data, která má na disku, ještě duplicitně držel v paměti.

Disková cache OS funguje tak, že když nějaký proces čte data ze souboru, OS je načte do paměti, a nechá je tam i po té, kdy je proces přečetl – dokud není paměť potřeba pro něco důležitějšího. Stahovat soubory přes HTTPS OS opravdu neumí.