Toon posts:

[*nix/linux] achtergrond vraag over 'cp'

Pagina: 1
Acties:

Verwijderd

Topicstarter
In een discussie over het commando cp met een collega ging het erover dat bij windows/dos de tijdinfo van de oorspronkelijke file hetzelfde zal zijn bij een kopie:

copy <file> <newfile>

By *nix is dat het geval bij een mv, maar niet bij een cp...
Nou kwam ik met man cp natuurlijk meteen op 'cp -p <file> <newfile/dir>' waarbij je dus de 'last modified time' kunt overnemen.

man ls geeft aan dat je met ls -trul ook weer op laatst gelezen files kunt listen en met ls -lrt op laatst gemodificeerde etc.

Maar dan nu de vraag (en je merkt hopelijk dat ik echt wel heb nagedacht en gezocht): waarom is het gedrag van 'cp -p' niet de default?
Mijn collega vond het in eerste instantie gewoon stom hoe 't werkt onder *nix, maar nadat ik met man cp erachter was dat je die properties wel degelijk mee kunt kopieren vond hij het alleen een verkeerde keuze van het defaultgedrag..

Mijn idee is dat het evt met security te maken heeft, maar waarom precies is me niet duidelijk. Ik hou alleen vast aan het standpunt dat er een reden moet zijn...
;)

Overigens: je snapt wel dat er met googelen ofzo niet veel te vinden is, speld in 1000 hooibergen; ik heb wel van alles geprobeerd, combinaties van de volgende termen: cp security bash shell linux unix properties copy inherit
etcetc...

Dus: welke goeroe weet raad?

Verwijderd

cp zondermeer maakt een *nieuwe* file aan met een kopie van de inhoud van de oude. Daarom krijgt hij een nieuw timestamp. Dat lijkt mij een zinvol default. De nieuwe file wordt aangemaakt met de default eigenaar en groep, en de default permissies (umask). Daarom is -p volgens mij niet de default. Wil je dat niet, maar wil je de permissies etc. overnemen van de oude, dan moet je de -p optie gebruiken.

Overigens kun je in je ~/.bashrc een alias opnemen:
code:
1
alias cp='cp -p'

dan gebruik je de -p optie altijd 'default' :)

Verwijderd

Hm, mij lijkt het standaard gedrag van cp juist wel correct. Er wordt niet een echt nieuw bestand aangemaakt. Er wordt alleen maar een bestand gedupliceerd. Dat het tijdstempel dan één op één wordt overgenomen lijkt mij dan logisch. Dat de eigenaar en groep niet wordt meegekopieerd kan ik ook wel verdedigen. Als ik een bestand van een andere gebruiker kopieer wordt de kopie van mij. Ik ga toch niet een bestand kopieren voor iemand anders? ;)
Maar goed, als het standaardgedrag niet bevalt, kun je altijd nog een alias aanmaken (zie boven) of de broncode wijziging. Daarvoor is het nou open. ;)

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 11:29

deadinspace

The what goes where now?

Verwijderd schreef op 03 February 2003 @ 12:03:
Er wordt niet een echt nieuw bestand aangemaakt. Er wordt alleen maar een bestand gedupliceerd.
cp doet toch weinig anders dan een nieuwe file aanmaken (die dus op dat moment gemaakt wordt!) en vervolgens de inhoud van de source file kopieren naar de destination file.

Ik vind het niet meer dan logisch dat die nieuwe file een creation timestamp van *nu* heeft; hij bestaat pas sinds de kopieer-actie.

Verwijderd

Ja, je hebt vanuit een systeembeheerdersoogpunt natuurlijk helemaal gelijk. Er wordt inderdaad een nieuw bestand aangemaakt. Ik bedoelde meer vanuit bestandsinhoudelijk oogpunt. Qua inhoud wordt er geen nieuw bestand gemaakt. Alleen maar gedupliceerd. Het tijdstip van duplicatie kan mij minder schelen dan het tijdstip dat een bestand inhoudelijk is veranderd. Daarom lijkt het mij logischer om de kopie hetzelfde tijdsstempel te geven als het origineel.
Vergelijk het eens met een getikt document, waarin ook een datum waarop de laatste wijziging plaatsvond, is opgenomen. Als je dit onder een kopieermachine legt, ga je toch ook niet deze datum veranderen in de datum waarop het document gekopieerd werd?

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 11:29

deadinspace

The what goes where now?

Mja, maar dan ga je dus uit van de datum van de creatie van de inhoud, terwijl de timestamp in kwestie over de datum van de creatie van de file (niet de inhoud) gaat.

Zelfde geldt voor je document-analogie: de datum in dat document gaat over de inhoud. Als kopieermachines/printers echter onderaan in een klein font de datum van kopie/print zouden afdrukken, dan wordt daarmee aangegeven wanneer die specifieke papieren afdruk is gecreëerd. Dat laatste komt meer overeen met Unix' mtime dan de eerste.

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Verwijderd schreef op 03 februari 2003 @ 15:23:
Vergelijk het eens met een getikt document, waarin ook een datum waarop de laatste wijziging plaatsvond, is opgenomen. Als je dit onder een kopieermachine legt, ga je toch ook niet deze datum veranderen in de datum waarop het document gekopieerd werd?
Maar het is wel ander papier :P

Als de datum op het document staat, dan is het dus een onderdeel van het document. Analoog daaraan zou dus de datum/tijd *in* je file moeten staan, en niet als file-attribuut.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 11:29

deadinspace

The what goes where now?

mithalph schreef op 03 February 2003 @ 15:56:
Als de datum op het document staat, dan is het dus een onderdeel van het document. Analoog daaraan zou dus de datum/tijd *in* je file moeten staan, en niet als file-attribuut.
Precies, daarom gaat de datum/tijd in het file-attribuut over de file (als in: de container waar lettertjes in staan, analoog aan het papier), en niet over de inhoud daarvan.

Verwijderd

Als de datum op het document staat, dan is het dus een onderdeel van het document. Analoog daaraan zou dus de datum/tijd *in* je file moeten staan, en niet als file-attribuut.
Tja jullie hebben zeker goede argumenten. Maar dat wil niet zeggen dat ik het met jullie eens ben. ;) Voor mijzelf vind ik het handiger als ik aan een bestand kan zien wanneer het veranderd is, zonder het te hoeven openen.
Volgens mij kunnen we hier nog een hele tijd over doorgaan, maar dit is eigenlijk een triviale discussie. Zoals eerder gezegd: als je de standaard gedrag van cp je niet bevalt, kun je het altijd wijzigen.

  • igmar
  • Registratie: April 2000
  • Laatst online: 10-05 13:53

igmar

ISO20022

Verwijderd schreef op 03 February 2003 @ 12:03:
Hm, mij lijkt het standaard gedrag van cp juist wel correct. Er wordt niet een echt nieuw bestand aangemaakt. Er wordt alleen maar een bestand gedupliceerd. Dat het tijdstempel dan één op één wordt overgenomen lijkt mij dan logisch. Dat de eigenaar en groep niet wordt meegekopieerd kan ik ook wel verdedigen. Als ik een bestand van een andere gebruiker kopieer wordt de kopie van mij. Ik ga toch niet een bestand kopieren voor iemand anders? ;)
Maar goed, als het standaardgedrag niet bevalt, kun je altijd nog een alias aanmaken (zie boven) of de broncode wijziging. Daarvoor is het nou open. ;)
Er wordt WEL een nieuw bestand aangemaakt. Gewoon met open(...., O_CREAT,...). Wat er daarna ingeschreven wordt zal de kernel echt een zorg wezen. Het bestand heeft behalve de inhoud ook geen enkele andere relatie met het origineel.

Copieeren is gewoon read, en daarna write. Een kopieer functie bestaat niet.
Pagina: 1