Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Mára 12. 11. 2017, 14:16:25

Název: Identifikace souboru
Přispěvatel: Mára 12. 11. 2017, 14:16:25
Zdravím. Existuje v linuxu ještě nějaká jiná identifikace souboru než jeho název? Hledám nejlépe něco, co se vytvoří při jeho vytvoření a nezmění se po jeho přejmenování. Třeba nějaké UID. Děkuji
Název: Re:Identifikace souboru
Přispěvatel: MD 12. 11. 2017, 14:34:26
To záleží na souborovém systému. Pokud je interně založen na tabulce inodů (EXT, NTFS), číslo i-nodu reprezentujícího soubor může být takovým identifikátorem.

https://www.cyberciti.biz/faq/linux-bsd-appleosx-unix-find-file-inode/
Název: Re:Identifikace souboru
Přispěvatel: Mára 12. 11. 2017, 14:48:44
Díky za info, zkoušel jsem ho přejmenovat, přesunout do windows a zase zpět a pořád je to číslo stejný, to je super ale je opravdu unikátní? Jak může systém vědět, že již takové číslo přidělil?
Název: Re:Identifikace souboru
Přispěvatel: Kit 12. 11. 2017, 15:02:34
Díky za info, zkoušel jsem ho přejmenovat, přesunout do windows a zase zpět a pořád je to číslo stejný, to je super ale je opravdu unikátní? Jak může systém vědět, že již takové číslo přidělil?

i-node je vždy unikátní, protože fyzicky ukazuje na umístění metadat daného souboru na diskovém oddílu.
Název: Re:Identifikace souboru
Přispěvatel: Filip Jirsák 12. 11. 2017, 15:10:53
Díky za info, zkoušel jsem ho přejmenovat, přesunout do windows a zase zpět a pořád je to číslo stejný, to je super ale je opravdu unikátní? Jak může systém vědět, že již takové číslo přidělil?
Nevím, co znamená „přesunout do Windows“, ale pokud jste ten soubor přesunul do jiného souborového systému, číslo i-node se změnilo. I-node je identifikátor souboru v jednom souborovém systému (typicky na jednom oddílu, ale třeba btrfs to má složitější).

Mimochodem, spousta programů se chová tak, že když mají něco zapsat do souboru, vytvoří nový soubor, do něj zapíšou data, a pak jej přejmenují na jméno původního souboru. Takže na disku budete mít soubor se stejným názvem, ale i-node bude mít jiný.

Bylo by lepší, kdybyste napsal, co se pokoušíte řešit.
Název: Re:Identifikace souboru
Přispěvatel: Mára 12. 11. 2017, 15:14:28
Zkoušel jsem to vytvořit na dalších x serverech a při stejném názvu je to číslo stený. Super, potřebuji ale slyšet to "ALE..."
Škoda, že to nefunguje i pro adresáře :( Zkoušel jsem ls -i /dir1/dir2 ale vypíše to hromadně soubory uvnitř toho adresáře. Myslel jsem, že v linuxu jsou všechno soubory.
Název: Re:Identifikace souboru
Přispěvatel: n 12. 11. 2017, 15:32:40
To ale je, ze to neni pravda...
$ ls -i test
69923469 test
$ mv test /Volumes/Transcend/
$ mv /Volumes/Transcend/test .
$ ls -i test
69923489 test

Bez toho, abys nam prozradil to sladke tajemstvi o co ti vlastne jde, ti asi tezko pomuzeme vic.
Název: Re:Identifikace souboru
Přispěvatel: Pavouk106 12. 11. 2017, 15:37:05
Jedině mít jako součást souboru vlastní identifikátor. i-node je sice fajn, ale jen dokud se ten soubor někam nepřesune (na stejný oddíl ale jiné místo, na jiný oddíl, na jiné médium, do jiného PC...). Pokud chceš jednoznačnou identifikaci souboru po libovolných operacích s ním, musí to být uloženo v něm.
Název: Re:Identifikace souboru
Přispěvatel: Jenda 12. 11. 2017, 15:41:08
Škoda, že to nefunguje i pro adresáře :( Zkoušel jsem ls -i /dir1/dir2 ale vypíše to hromadně soubory uvnitř toho adresáře. Myslel jsem, že v linuxu jsou všechno soubory.
Vždyť jo, akorát ls si domyslí, že chceš obsah adresáře, nikoli přímo ten adresář (je to uživatelsky přivětivější, adresář potřebuju vypsat fakt málokdy). Přepíná se to parametrem -d.
Název: Re:Identifikace souboru
Přispěvatel: Mára 12. 11. 2017, 15:51:07
Pokud chceš jednoznačnou identifikaci souboru po libovolných operacích s ním, musí to být uloženo v něm.
To jako že mám do každého souboru třeba na první řádek uložit nějaké unikátní číslo které pak budu načítat? Neexistuje nějaký rozšířený atribut do kterého by se to dalo uložit?
Název: Re:Identifikace souboru
Přispěvatel: Mára 12. 11. 2017, 15:52:37
Bez toho, abys nam prozradil to sladke tajemstvi o co ti vlastne jde, ti asi tezko pomuzeme vic.
Jaké tajemství, potřebuji navázat nějaké akce pro daný soubor a název souboru nic neřeší, jelikož jde přejmenovat.
Název: Re:Identifikace souboru
Přispěvatel: Mára 12. 11. 2017, 15:53:58
Škoda, že to nefunguje i pro adresáře :( Zkoušel jsem ls -i /dir1/dir2 ale vypíše to hromadně soubory uvnitř toho adresáře. Myslel jsem, že v linuxu jsou všechno soubory.
Vždyť jo, akorát ls si domyslí, že chceš obsah adresáře, nikoli přímo ten adresář (je to uživatelsky přivětivější, adresář potřebuju vypsat fakt málokdy). Přepíná se to parametrem -d.
Tak to je jiná ;)
Název: Re:Identifikace souboru
Přispěvatel: Kit 12. 11. 2017, 16:00:00
Pokud chceš jednoznačnou identifikaci souboru po libovolných operacích s ním, musí to být uloženo v něm.
To jako že mám do každého souboru třeba na první řádek uložit nějaké unikátní číslo které pak budu načítat? Neexistuje nějaký rozšířený atribut do kterého by se to dalo uložit?

Rozšířené atributy můžeš používat a můžeš podle nich i filtrovat, ale každý souborový systém je nemá. Pokud takový soubor přesuneš třeba na FAT a zpět, tak obsah rozšířených atributů zmizí.

Velmi často se tohle řeší druhou či třetí příponou souboru. Je to vidět, dá se podle toho hledat, neztrácí se to a je to úsporné.
Název: Re:Identifikace souboru
Přispěvatel: Kit 12. 11. 2017, 16:02:50
Bez toho, abys nam prozradil to sladke tajemstvi o co ti vlastne jde, ti asi tezko pomuzeme vic.
Jaké tajemství, potřebuji navázat nějaké akce pro daný soubor a název souboru nic neřeší, jelikož jde přejmenovat.

V tom případě budeš potřebovat řešení klient-server.

Co kdybys použil nějakou databázi?
Název: Re:Identifikace souboru
Přispěvatel: Mára 12. 11. 2017, 16:06:56
Pokud chceš jednoznačnou identifikaci souboru po libovolných operacích s ním, musí to být uloženo v něm.
To jako že mám do každého souboru třeba na první řádek uložit nějaké unikátní číslo které pak budu načítat? Neexistuje nějaký rozšířený atribut do kterého by se to dalo uložit?

Rozšířené atributy můžeš používat a můžeš podle nich i filtrovat, ale každý souborový systém je nemá. Pokud takový soubor přesuneš třeba na FAT a zpět, tak obsah rozšířených atributů zmizí.

Velmi často se tohle řeší druhou či třetí příponou souboru. Je to vidět, dá se podle toho hledat, neztrácí se to a je to úsporné.
Rozšířené atributy bych vyzkoušel ale nevím co přesně hledat?
Název: Re:Identifikace souboru
Přispěvatel: Sadam 12. 11. 2017, 16:07:58
Tak si spocitej sum souboru napr sha256sum to je UUID souboru a dat v nem... Pokud potrebujes neco jineho (menit data bez zmeny UUID) tak si to narvi do dat v tom souboru+digitalni podpis at mas jistotu ze ti to nikdo vevnitr nezmeni
Název: Re:Identifikace souboru
Přispěvatel: Kit 12. 11. 2017, 16:11:56
Rozšířené atributy můžeš používat a můžeš podle nich i filtrovat, ale každý souborový systém je nemá. Pokud takový soubor přesuneš třeba na FAT a zpět, tak obsah rozšířených atributů zmizí.
Rozšířené atributy bych vyzkoušel ale nevím co přesně hledat?
Kód: [Vybrat]
man 5 attr
Název: Re:Identifikace souboru
Přispěvatel: Filip Jirsák 12. 11. 2017, 16:14:14
Zkoušel jsem to vytvořit na dalších x serverech a při stejném názvu je to číslo stený. Super, potřebuji ale slyšet to "ALE..."
Škoda, že to nefunguje i pro adresáře :( Zkoušel jsem ls -i /dir1/dir2 ale vypíše to hromadně soubory uvnitř toho adresáře. Myslel jsem, že v linuxu jsou všechno soubory.
V tom případě zkoušíte něco úplně jiného. Číslo i-node nemá s názvem nic společného, takže když vytvoříte stejný název souboru na různých systémech, bude mít pokaždé jiné číslo i-node. A adresáře také mají číslo i-node, protože v unixových souborových systémech je adresář akorát speciální soubor.

Opravdu by bylo nejlepší, kdybyste napsal, co se vlastně pokoušíte řešit. Ona je totiž otázka, zda pro vás „stejný soubor“ je opravdu to samé, jako pro souborový systém. Osobně si moc nedovedu představit případ, kdy bych měl soubor, smazal ho, na jeho místě vytvořil nový s identickým obsahem a atributy, a chtěl bych, aby to bylo opravdu považováno za jiný soubor.

Jaké tajemství, potřebuji navázat nějaké akce pro daný soubor a název souboru nic neřeší, jelikož jde přejmenovat.
Tak definujte, co je to ten „daný soubor“, jak ho poznáte nebo jak ho odlišíte od ostatních.
Název: Re:Identifikace souboru
Přispěvatel: Kit 12. 11. 2017, 16:20:25
Tak si spocitej sum souboru napr sha256sum to je UUID souboru a dat v nem... Pokud potrebujes neco jineho (menit data bez zmeny UUID) tak si to narvi do dat v tom souboru+digitalni podpis at mas jistotu ze ti to nikdo vevnitr nezmeni

Tohle běžně používám místo velkých blobů. V databázi mám jen metadata a zmíněný checksum. Výhodou je, že to samo dělá deduplikaci, což u velkých souborů představuje významnou úsporu.
Název: Re:Identifikace souboru
Přispěvatel: Mára 12. 11. 2017, 16:40:10
Rozšířené atributy můžeš používat a můžeš podle nich i filtrovat, ale každý souborový systém je nemá. Pokud takový soubor přesuneš třeba na FAT a zpět, tak obsah rozšířených atributů zmizí.
Rozšířené atributy bych vyzkoušel ale nevím co přesně hledat?
Kód: [Vybrat]
man 5 attr


attr je fakt super, existuje způsob jak takové soubory zálohovat? Klasický Tar/Gzip to nedá
Název: Re:Identifikace souboru
Přispěvatel: Filip Jirsák 12. 11. 2017, 16:41:35
Tak si spocitej sum souboru napr sha256sum to je UUID souboru a dat v nem... Pokud potrebujes neco jineho (menit data bez zmeny UUID) tak si to narvi do dat v tom souboru+digitalni podpis at mas jistotu ze ti to nikdo vevnitr nezmeni

Tohle běžně používám místo velkých blobů. V databázi mám jen metadata a zmíněný checksum. Výhodou je, že to samo dělá deduplikaci, což u velkých souborů představuje významnou úsporu.
Problém je, že my nevíme, zda „daný soubor“ opravdu znamená obsah toho souboru. Třeba „daný soubor“ znamená něco jiného a obsah „daného souboru“ se může měnit.
Název: Re:Identifikace souboru
Přispěvatel: Mára 12. 11. 2017, 16:41:49
Tak si spocitej sum souboru napr sha256sum to je UUID souboru a dat v nem... Pokud potrebujes neco jineho (menit data bez zmeny UUID) tak si to narvi do dat v tom souboru+digitalni podpis at mas jistotu ze ti to nikdo vevnitr nezmeni
To nelze použít, soubory mění svůj obsah, čili se bude měnit i hash.
Název: Re:Identifikace souboru
Přispěvatel: Filip Jirsák 12. 11. 2017, 16:44:13
attr je fakt super, existuje způsob jak takové soubory zálohovat? Klasický Tar/Gzip to nedá
tar rozšířené atributy umí zálohovat, pokud nepoužíváte nějakou prehistorickou verzi. Podívejte se na volbu --xattrs.
Název: Re:Identifikace souboru
Přispěvatel: Mára 12. 11. 2017, 16:45:21
Tak si spocitej sum souboru napr sha256sum to je UUID souboru a dat v nem... Pokud potrebujes neco jineho (menit data bez zmeny UUID) tak si to narvi do dat v tom souboru+digitalni podpis at mas jistotu ze ti to nikdo vevnitr nezmeni

Tohle běžně používám místo velkých blobů. V databázi mám jen metadata a zmíněný checksum. Výhodou je, že to samo dělá deduplikaci, což u velkých souborů představuje významnou úsporu.
Problém je, že my nevíme, zda „daný soubor“ opravdu znamená obsah toho souboru. Třeba „daný soubor“ znamená něco jiného a obsah „daného souboru“ se může měnit.

Potřebuji při vytvoření souboru zadat unikátní ID, které se nezmění ani když se soubor přejmenuje, změní se jeho obsah, jde zálohovat/obnovit a nejlépe bude součástí toho samotného souboru.
Název: Re:Identifikace souboru
Přispěvatel: Mára 12. 11. 2017, 16:48:34
attr je fakt super, existuje způsob jak takové soubory zálohovat? Klasický Tar/Gzip to nedá
tar rozšířené atributy umí zálohovat, pokud nepoužíváte nějakou prehistorickou verzi. Podívejte se na volbu --xattrs.
To by bylo fajn, večer na to mrknu, teď musím do špitálu. zatím díky všem za informace.
Název: Re:Identifikace souboru
Přispěvatel: Filip Jirsák 12. 11. 2017, 16:51:29
Potřebuji při vytvoření souboru zadat unikátní ID, které se nezmění ani když se soubor přejmenuje, změní se jeho obsah, jde zálohovat/obnovit a nejlépe bude součástí toho samotného souboru.
Jenže to právě musíte definovat, co je to „ten samotný soubor“. Když místo přejmenování souboru ten soubor zkopírujete a původní smažete, je ten zkopírovaný soubor „ten samotný soubor“? Když uděláte kopii souboru, budete mít „ten samotný soubor“ dvakrát? Při kopírování se můžete rozhodnout, zda chcete nebo nechcete kopírovat rozšířené atributy… Rozšířené atributy může číst a nastavovat kdokoli, kdo má patřičná oprávnění k souboru – nebude vám vadit, když někdo ten váš rozšířený atribut z vašeho souboru zkopíruje na jiný soubor? Nebo ho z původního souboru smaže?

Opravdu těžko radit, když nevíme, čeho chcete docílit. A upřímně řečeno, obávám se, že ani vy sám nevíte, co podle vás je „ten samý soubor“ a co už je jiný soubor.
Název: Re:Identifikace souboru
Přispěvatel: Kit 12. 11. 2017, 17:04:35
Potřebuji při vytvoření souboru zadat unikátní ID, které se nezmění ani když se soubor přejmenuje, změní se jeho obsah, jde zálohovat/obnovit a nejlépe bude součástí toho samotného souboru.

Problém je, že soubor lze nejen přejmenovat, ale je možné mu i měnit atributy.

Když nastavíš adresář i se soubory na 750, resp. 640, tak můžeš do něj řízeně zapisovat aplikací s nastaveným bitem SUID na vlastníka toho adresáře. Nemusíš se pak bát ani přejmenování, protože členové skupiny z něj budou moci pouze číst.
Název: Re:Identifikace souboru
Přispěvatel: jiwopene@gmail.com 12. 11. 2017, 17:47:13
Jestli jde o obsah, pomůže kontrolní součet nebo sám soubor (porovnat obsah) a tuto informaci upravovat. Nemůže být ten soubor někde schovaný a pracovat jen se symbolickým odkazem? Některé formáty (exe, docx, png, ...) snesou i nějaká data navíc (na konci -- exe, png; jako v zipu -- docx), ale o ně většinou příjdete po přepisu. Smazáním a znovuvytvořením také přijdete o tyto informace, jsou-li uloženy u něj či v něm. Ideální by bylo ho mít pod "dohledem" programu, který bude do druhého souboru ukládat kontrolní součet či cestu k němu. A co třeba skupina uživatelů (tu tar také uloží).
Název: Re:Identifikace souboru
Přispěvatel: Miroslav Šilhavý 13. 11. 2017, 07:16:35
Zdravím. Existuje v linuxu ještě nějaká jiná identifikace souboru než jeho název? Hledám nejlépe něco, co se vytvoří při jeho vytvoření a nezmění se po jeho přejmenování. Třeba nějaké UID. Děkuji

Nic takového neexistuje, a je to dáno z podstaty věci. Filename je jedinečný identifikátor pro entitu "souboru", ale už není s to řešit vazbu na skutečná data.

Může dojít k operacím, kdy se mění obsah vs. filename, ale k těm změnám dochází na obou stranách toho řetězu. Na straně "filename" se jedná zejména o přejmenování, ale taky o odlinkování či přelinkování, pokud jde o hardlink.

U změny dat, kromě těch běžných, si dovolím upozornit dvě funkce, které tu vazbu narušují: u windows shadow copy, u jiných filesystémů pak CoW (copy on write).

Tedy vazba mezi filenamem a jeho daty je M:N.

Jedinou možností, kterou máte, je sledovat např. číslo inode, nebo pár dalších údajů, které Vám zvýší jistotu určení, že se díváte stále na stejná data. K tomu můžete přidat digesty (např. SHA-3). Ani jedna z metod však není 100%, může dojít ke změnám, které nic z toho nezmění, i digest může být teoreticky stejný při rozdílných datech.

Nedotknutelnost dat v čase (včetně vazby soubor:data) může řešit např. snapshotování (ZFS).

Zkuste popsat situaci, kterou řešíte, třeba se na ni najde jiné řešení, které bude založené na něčem jiném.
Název: Re:Identifikace souboru
Přispěvatel: ByCzech 13. 11. 2017, 08:16:52
Kód: [Vybrat]
$ attr -s user.uuid -V `uuid -v5 ns:URL file:///PATH_TO_FILE` PATH_TO_FILE
Atributu „user.uuid“ souboru FILE nastavena 36bajtová hodnota:
xxxxxxxx-yyyy-zzzz-aaaa-bbbbbbbbbbbb

Kód: [Vybrat]
$ attr -l PATH_TO_FILE
Atribut „user.uuid“ souboru FILE má 36bajtovou hodnotu

$ attr -g user.uuid PATH_TO_FILE
Atribut „user.uuid“ souboru FILE měl 36bajtovou hodnotu:
xxxxxxxx-yyyy-zzzz-aaaa-bbbbbbbbbbbb
Název: Re:Identifikace souboru
Přispěvatel: RDa 13. 11. 2017, 15:00:48
By me zajimal duvod / aplikace do ktere to tazatel potrebuje. To je tak tezke vyklopit co delate? Jiste se najde lepsi reseni nez tohle strileni naslepo.
Název: Re:Identifikace souboru
Přispěvatel: Kit 13. 11. 2017, 15:20:20
Také mi to připadá jako dotaz, jak se správně zatloukají vruty pilkou.
Název: Re:Identifikace souboru
Přispěvatel: Miroslav Šilhavý 13. 11. 2017, 16:21:27
By me zajimal duvod / aplikace do ktere to tazatel potrebuje. To je tak tezke vyklopit co delate? Jiste se najde lepsi reseni nez tohle strileni naslepo.

Také mi to připadá jako dotaz, jak se správně zatloukají vruty pilkou.

To už tak je, že ve fórech se ptají lidé, kteří ani neumějí srozumitelně popsat situaci. Bohužel, ono to jde často ruku v ruce, s tím, že zároveň i díky tomu neumějí najít správnou metodu řešení, ani správné řešení.

Výsledkem pak jsou dotazy na situace, které snad nikdy žádný profesionál neřešil, a tudíž všichni tuší, se jedná spíš o chybu v návrhu, než v nemožnosti najít řešení. :)

Taky by mě júzkejs zajímal.
Název: Re:Identifikace souboru
Přispěvatel: j 14. 11. 2017, 10:10:51
Dovolim si strelit naslepo, ze jde o neco na tema "aby nam probuh zamestnanci nevynesli nase ubertajna data".