rename(2) aanroepen vanaf command line

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 28-09 09:09
Voor een computing grid gebruiken wij het network filesystem om te checken of een bepaalde job al output heeft gegenereerd. Een job slaat zijn output op met een tijdelijke naam, en hernoemt de output file vervolgens. De code is geschreven in Matlab, en nu blijkt dat Matlab's rename() geen atomic operatie is; m.a.w. de check kan misgaan.

Als alternatief wil ik nu het Unix rename commando gebruiken. Dat lukt prima, maar nu las ik op verschillende plekken dat het standaard rename-commando in Unix ook niet atomic is (en dat blijkt wel, want nog steeds gaan er soms dingen mis). Als ik op de command line "man rename" typ krijg ik de documentatie over rename(1). Ergens anders op internet vond ik dat rename(2) *wel* atomic is, dus idealiter zou ik die gebruiken.

Echter, nu komt mijn vraag: hoe roep ik rename(2) aan vanaf de command line? En meer in het algemeen: wat is dat nou precies, die verschillende versies van hetzelfde commando? Ik kon hier vreemd genoeg geen documentatie over vinden.

TheStreme - Share anything with anyone


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 05-10 08:57

Matis

Rubber Rocket

wat geeft
which rename
als output?

Misschien kun je rename2 als direct pad aanroepen.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 28-09 09:09
Matis schreef op dinsdag 06 september 2011 @ 15:06:
wat geeft
which rename
als output?
/usr/bin/rename
Misschien kun je rename2 als direct pad aanroepen.
which rename2

geeft me "no rename2 in (...)". Ik heb ook al even gekeken wat er zoal in /usr/bin staat, maar daar vond ik niks anders dat leek op rename o.i.d.

TheStreme - Share anything with anyone


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 05-10 08:57

Matis

Rubber Rocket

Ik weet niet precies hoe je rename uit de tweede section (system calls) kunt installeren, maar dat moet zeker te vinden zijn voor jouw distro.

[ Voor 24% gewijzigd door Matis op 06-09-2011 15:15 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Sleepkever
  • Registratie: Juni 2007
  • Laatst online: 09:50
Verwijst die 2 niet gewoon naar het man page nummer?

Op de man page van "man 2 rename" staat in ieder geval dat de system call rename in stdio.h gewoon atomic is, mits hij geen error geeft. de man 1 rename is het commandline perl tooltje wat in /usr/bin staat en wat met aanroep van "rename" in commandline dus aangeroepen wordt. Ik ben niet thuis in perl dus geen idee hoe of wat dat ding werkt en of het atomic te maken is. Al helemaal in een netwerk scenario.

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 05-10 08:57

Matis

Rubber Rocket

Sleepkever schreef op dinsdag 06 september 2011 @ 15:19:
Verwijst die 2 niet gewoon naar het man page nummer?
Jazeker dat dat het doet. Vandaar ook dat ik het over System Calls had (Man Pages section 2).
Op de man page van "man 2 rename" staat in ieder geval dat de system call rename in stdio.h gewoon atomic is, mits hij geen error geeft. de man 1 rename is het commandline perl tooltje wat in /usr/bin staat en wat met aanroep van "rename" in commandline dus aangeroepen wordt. Ik ben niet thuis in perl dus geen idee hoe of wat dat ding werkt en of het atomic te maken is. Al helemaal in een netwerk scenario.
Daar ben ik ook niet echt in thuis.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 28-09 09:09
Ja, je hebt gelijk. Ik weet wel wat van Unix, maar dit soort basale dingen zijn toch nog nieuw voor me. Inderdaad, rename(2) verwijst naar de man-pagina, en daar wordt de system call beschreven. Ik ging ervan uit dat alles dat via 'man XXX' toegankelijk was betrekking had op de command line. Maar rename(2) is dus helemaal niet een command line tool... :)

Wel balen, want nu moet ik een andere list verzinnen. Nu ja, hoe dan ook bedankt!

TheStreme - Share anything with anyone


Acties:
  • 0 Henk 'm!

  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 28-09 09:09
Even ter informatie, voor als iemand dit topic ooit nog eens vindt met de search: het command-line commando 'rename' is dus *niet* atomic, maar 'mv' gebruikt intern de syscall rename(2), zo lang het renamen maar binnen hetzelfde filesystem is (wat altijd het geval is bij een simpele rename in 1 directory). Dus: als je via de command line een atomic rename wil doen, gebruik dan mv. Case closed :)

TheStreme - Share anything with anyone


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 05-10 08:57

Matis

Rubber Rocket

Ik gebruik eigenlijk altijd mv voor het renamen van bestanden, zonder de echte toedracht daartoe te kennen :P

Deed ik het stiekem toch al goed ;)

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • u_nix_we_all
  • Registratie: Augustus 2002
  • Niet online
Ik vraag me nu af: is dat niet alleen nuttig wanneer het FS ook atomic transacties kan doen? VZIW doen de meeste linux filesystems sowieso geen atomic transactions, tenzij je ZFS of BTRFS gebruikt.

Of zit ik er nu helemaal naast ?

Edit: Ik gebruik altijd mv, ik dacht zelfs dat, net als "dir", rename een alias was voor verdwaalde dos-sers.

[ Voor 19% gewijzigd door u_nix_we_all op 06-09-2011 17:40 ]

You don't need a parachute to go skydiving. You need a parachute to go skydiving twice.


Acties:
  • 0 Henk 'm!

  • Rainmaker
  • Registratie: Augustus 2000
  • Laatst online: 14-07-2024

Rainmaker

RHCDS

Je hebt in het geval van rename 2 manpages:
rename (1) is een commando
rename (2) is een system call

Verrassend genoeg doet het commando rename GEEN rename() system call.

Om rename() te gebruiken, kun je mv gebruiken (die binnen het filesystem wel een call naar rename() doet).

Dus, roep mv aan.

*edit: spuit 11

[ Voor 3% gewijzigd door Rainmaker op 06-09-2011 17:52 ]

We are pentium of borg. Division is futile. You will be approximated.

Pagina: 1