Vrácení linku na vymazaný soubor

Pali

Vrácení linku na vymazaný soubor
« kdy: 22. 02. 2011, 18:55:26 »
Nevi nekdo jak vratit link na vymazany soubor?

touch /tmp/a
less /tmp/a &
PID=$!
rm /tmp/a
ls -l -a /proc/$PID/fd/4
lr-x------ 1 pali pali 64 2011-02-22 18:50 /proc/$PID/fd/4 -> /tmp/a (deleted)


ln /proc/$PID/fd/4 /tmp/a
ln: creating hard link `/tmp/a' => `/proc/20502/fd/4': Invalid cross-device link
« Poslední změna: 22. 02. 2011, 20:48:22 od Petr Krčmář »


branchman2

Re: Vymazany soubor
« Odpověď #1 kdy: 22. 02. 2011, 19:21:50 »
A co tak cp?

Pali

Re: Vymazany soubor
« Odpověď #2 kdy: 22. 02. 2011, 20:48:16 »
cp ani cat link nevrati (soubor kopiruje)

Re: Vrácení linku na vymazaný soubor
« Odpověď #3 kdy: 22. 02. 2011, 21:09:24 »
Ta chybova hlaska vypada jako byste se poukousel o hardlink mezi ruznyma partisnama, coz nejde. Mate /proc i /tmp na stejnem diskovem oddilu?

Pali

Re: Vrácení linku na vymazaný soubor
« Odpověď #4 kdy: 22. 02. 2011, 21:14:50 »
/proc je procfs


JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re: Vrácení linku na vymazaný soubor
« Odpověď #5 kdy: 23. 02. 2011, 00:02:09 »
No prave. Jestli se to v Linuxu nebere, z hlediska ln, jako by to byla jina partisna a tak to nejde hardlinkovat. /tmp je na jedne partisne, /proc je na zadne partisne, cili nejsou na stejne partisne a muzete se jit klouzat.

alfi

  • ****
  • 339
    • Zobrazit profil
    • E-mail
Re: Vrácení linku na vymazaný soubor
« Odpověď #6 kdy: 23. 02. 2011, 09:58:17 »
linky v /proc/*/fd/* jsou vsechny jen symbolicke, tj. vytvorene pres "ln -s" :-)
viz taky man ln
Create hard links by default, symbolic links with --symbolic.  When creating hard  links,  each TARGET must exist.

přiznám se, že hard link jsem asi ještě nikdy nepoužil. vždy jen symbolické linky :-)

Pali

Re: Vrácení linku na vymazaný soubor
« Odpověď #7 kdy: 23. 02. 2011, 13:09:08 »
Tak este raz.

Na linuxe ak otvorim nejaky subor (syscall open), dostanem na nho deskriptor. Ak potom bude chciet ten subor odstranit (stale kym je otvoreny; syscall unlink), tak na disku obsah suboru stale ostava, pokial ho nezavriem.

Zoznam otvorenych deskriptorov pre proces PID viem ziskat zobrazenim obsahu /proc/PID/fd

Ako dokazem vratit spat link na takto odstrany subor, ak je stale otvoreny (teda proces PID ma na nho deskriptor)?

Pre kopirovanie obsahu sa da pouzit ci uz dd alebo cat, avsak to subor kopiruje - ja chcem iba obnovit odstraneny link.

Mordae

Re: Vrácení linku na vymazaný soubor
« Odpověď #8 kdy: 23. 02. 2011, 13:56:31 »
Zkus to, v C, nikoliv pres ln. Vidim to tak 50/50.

Pali

Re: Vrácení linku na vymazaný soubor
« Odpověď #9 kdy: 23. 02. 2011, 18:09:30 »
a ako v C? syscall link robi to iste co ln.
Pouzil som v C link("/proc/...", "/tmp/a") a do errno mi uklada 11 (co je chyba ako pri ln)

Sten

Re: Vrácení linku na vymazaný soubor
« Odpověď #10 kdy: 24. 02. 2011, 00:15:31 »
Nenašel jsem žádné systémové volání, které by to umožnilo, zato mě napadá spoustu bezpečnostních problémů, pokud by to šlo.