Strona 1 z 1

[BASH] Zmiana wyłącznie Modify Time

: 22 mar 2011, 18:46
autor: ilu2112
Dzisiaj na kolokwium zaliczeniowym jednym z zadań było pokazanie sposobu, w jaki można zmienić access, change i modify time dla utworzonego katalogu. Podjętym działaniem należało jednorazowo zmienić tylko jeden czas. I tak:
  • chmod na katalogu zmienia tylko change time
  • find na katalogu zmienia tylko access time
W jaki sposób zmienić tylko i wyłącznie modify time? Jaka jest różnica między change a modify time?

Re: [BASH] Zmiana wyłącznie Modify Time

: 22 mar 2011, 19:52
autor: cukier_lukier
Po pierwsze:

Kod: Zaznacz cały

man touch
Więc np:

Kod: Zaznacz cały

touch -m --date='jakas_data_lub_pusto' nazwa_pliku
Po drugie:
http://www.brandonhutchinson.com/ctime_atime_mtime.html

EDIT:
Byłbym zapomniał - jeszcze perl:

Kod: Zaznacz cały

perl -e 'utime $atime=(stat "nazwa_pliku")[10],$mtime,'nazwa_pliku';'

Re: [BASH] Zmiana wyłącznie Modify Time

: 22 mar 2011, 21:26
autor: ilu2112
Dzięki za odpowiedź :) Jednak to nie rozwiązuje postawionego przez egzaminującego problemu. Listing obrazujący zaproponowane przez Ciebie rozwiązanie:

Kod: Zaznacz cały

marcin@marcin-laptop:~/Pulpit$ mkdir katalog
marcin@marcin-laptop:~/Pulpit$ cd katalog
marcin@marcin-laptop:~/Pulpit/katalog$ stat .
  File: `.'
  Size: 4096      	Blocks: 8          IO Block: 4096   katalog
Device: 807h/2055d	Inode: 528037      Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 1000/  marcin)   Gid: ( 1000/  marcin)
Access: 2011-03-22 21:22:50.435089457 +0100
Modify: 2011-03-22 21:22:49.423177395 +0100
Change: 2011-03-22 21:22:49.423177395 +0100
marcin@marcin-laptop:~/Pulpit/katalog$ touch -m --date='' nazwa_pliku
marcin@marcin-laptop:~/Pulpit/katalog$ stat .
  File: `.'
  Size: 4096      	Blocks: 8          IO Block: 4096   katalog
Device: 807h/2055d	Inode: 528037      Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 1000/  marcin)   Gid: ( 1000/  marcin)
Access: 2011-03-22 21:22:50.435089457 +0100
Modify: 2011-03-22 21:23:17.092237975 +0100
Change: 2011-03-22 21:23:17.092237975 +0100
marcin@marcin-laptop:~/Pulpit/katalog$ touch -m --date='' nazwa_pliku
marcin@marcin-laptop:~/Pulpit/katalog$ stat .
  File: `.'
  Size: 4096      	Blocks: 8          IO Block: 4096   katalog
Device: 807h/2055d	Inode: 528037      Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 1000/  marcin)   Gid: ( 1000/  marcin)
Access: 2011-03-22 21:22:50.435089457 +0100
Modify: 2011-03-22 21:23:17.092237975 +0100
Change: 2011-03-22 21:23:17.092237975 +0100
marcin@marcin-laptop:~/Pulpit/katalog$ 
Jak widać po każdym działaniu Modify Time i Change Time się zmienia. Zadanie polegało na zmienieniu tylko Modify Time.

Re: [BASH] Zmiana wyłącznie Modify Time

: 23 mar 2011, 09:28
autor: cukier_lukier
A podstawiłeś konkretną nazwę pliku, którego mtime chcesz zmienić, czy wklepałeś nazwa_pliku?
Np twój plik to 'test.pl' to polecenie będzie wyglądać tak:

Kod: Zaznacz cały

touch -m --date='jakas_data_lub_pusto' test.pl

Re: [BASH] Zmiana wyłącznie Modify Time

: 24 mar 2011, 20:28
autor: ilu2112
W treści zadania jest napisane, że chodzi o katalog, a nie można wykonać touch'a na katalogu :)

Re: [BASH] Zmiana wyłącznie Modify Time

: 24 mar 2011, 21:46
autor: cukier_lukier
Różnica między katalogiem a plikiem w Linuksie jest, można by rzec, umowna (np. http://tldp.org/LDP/intro-linux/html/sect_03_01.html )
Dlatego:

Kod: Zaznacz cały

$ mkdir test

Kod: Zaznacz cały

$ touch -m  --date= test

Kod: Zaznacz cały

$ stat test
  File: `test'
  Size: 4096      	Blocks: 8          IO Block: 4096   katalog
Device: 14h/20d	Inode: 406754      Links: 2
Access: 2011-03-24 21:43:19.400949000 +0100
Modify: 2011-03-24 00:00:00.000000000 +0100
Change: 2011-03-24 21:43:24.272949003 +0100