martes, 27 de noviembre de 2012

Entendiendo el comando touch

Cada archivo en GNU/Linux está asociado con timestamps, los cuales especifican la última vez que fue accesaro, modificado y cambiado. Siempre que creamos un fichero, o modificamos uno existente o sus atributos, esos timestamps son actualizados automáticamente. Vía TheGeekStuff veremos que el comando touch es usado para cambiar estos timestamps (access time, modification time, y change time de un fichero). 

Crear un archivo vacío
Podemos crear un archivo vacío usando el comando touch. El siguiente ejemplo crearemos un archivo de cero bytes.
[fraterneo@rainbow ~]$ touch archivo01.txt
Podemos usar también la opción -c para evitar crear nuevos archivos. Si usamos -c y el archivo no existe touch no creará el archivo.
[fraterneo@rainbow ~]$ touch -c archivo01.txt
Comandos como ls y find hacen uso de la información del timestamp para listar y buscar archivos. Podemos, además, crear más de un archivo con una sola llamada al comando touch. El siguiente comando creará los archivos a, b, c y d.
[fraterneo@rainbow ~]$ touch a b c d
Cambiar el tiempo de acceso 
Podemos cambiar el tiempo en que fue accesado un archivo usando la opción -a. Por defecto esta tomará la fecha actual del sistema y actualizará con ella el campo atime. Antes del comando touch -a ser ejecutado, veamos las propiedades de archivo01.txt:
[fraterneo@rainbow ~]$ stat archivo01.txt 
  File: `archivo01.txt'
  Size: 0          Blocks: 0          IO Block: 4096   regular empty file
Device: fd02h/64770d Inode: 136055      Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  500/fraterneo)   Gid: (  500/fraterneo)
Access: 2012-11-27 22:15:13.653052197 -0400
Modify: 2012-11-27 22:15:13.653052197 -0400
Change: 2012-11-27 22:15:13.653052197 -0400

[fraterneo@rainbow ~]$ touch -a archivo01.txt
Después de ejecutar el comando touch -a, veamos como el tiempo de acceso ha cambiado:
[fraterneo@rainbow ~]$ stat archivo01.txt 
  File: `archivo01.txt'
  Size: 0          Blocks: 0          IO Block: 4096   regular empty file
Device: fd02h/64770d Inode: 136055      Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  500/fraterneo)   Gid: (  500/fraterneo)
Access: 2012-11-27 22:21:16.429054012 -0400
Modify: 2012-11-27 22:15:13.653052197 -0400
Change: 2012-11-27 22:21:16.429054012 -0400
Cambiar la fecha de modificación 
Haciendo uso de la opción -m podemos cambiar la fecha de modificación del archivo.
[fraterneo@rainbow ~]$ touch -m archivo01.txt 
[fraterneo@rainbow ~]$ stat archivo01.txt 
  File: `archivo01.txt'
  Size: 0          Blocks: 0          IO Block: 4096   regular empty file
Device: fd02h/64770d Inode: 136055      Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  500/fraterneo)   Gid: (  500/fraterneo)
Access: 2012-11-27 22:21:16.429054012 -0400
Modify: 2012-11-27 22:25:38.626813056 -0400
Change: 2012-11-27 22:25:38.626813056 -0400
Nota: Es imposible cambiar el ctime usando el comando touch. Cambiar el atime y el mtime manualmente En vez de tomar el actual time-stamp, podemos especificar manualmente usando las opciones -t y -d, con el siguiente formato para la opción -t: touch -t [[CC]YY]MMDDhhmm[.SS] Veamos el formato anterior en detalle:
  • CC – Los dos primeros digitos del año. 
  • YY – Los dos ultimos digitos del año. Si el valor de YY está entre 70 y 99, el valor de CC se asume como 19. Si el valor de YY está entre 00 y 37, el valor de CC se asume como 20. No es posible asignar la fecha más allá del 18 de enero de 2038. 
  • MM – Para el mes 
  • DD – Para el día 
  • hh – Para la hora 
  • mm – Para el minuto 
  • SS – Para los segundos
[fraterneo@rainbow ~]$ touch -a -m -t 203801181205.09 archivo01.txt 
[fraterneo@rainbow ~]$ stat archivo01.txt 
  File: `archivo01.txt'
  Size: 0          Blocks: 0          IO Block: 4096   regular empty file
Device: fd02h/64770d Inode: 136055      Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  500/fraterneo)   Gid: (  500/fraterneo)
Access: 2038-01-18 12:05:09.000000000 -0400
Modify: 2038-01-18 12:05:09.000000000 -0400
Change: 2012-11-27 22:26:53.601051078 -0400
También es posible tomar un archivo como referencia y actualizar la fecha de otros archivos. El el siguiente ejemplo actualizaremos el time-stamp del archivo X con el time-stamp del archivo Y.
[fraterneo@rainbow ~]$ touch X -r Y

3 comentarios:

  1. HOla me gusta mucho tu sitio. Ne gustaría saber como secrea un fichero desde un linux (orden touch) pero en entorno samba, para que se cree en un windos 7 , por ejemplo. NO me deja en samba crear un fichero en windows 7 pero si un directorio.

    Ayuda please

    ResponderEliminar
  2. Hola jesus. En ese caso debes revisar los permisos del recurso compartido en Windows o en Linux, ya que de eso depende que se puedan crear archivos.

    ResponderEliminar
    Respuestas
    1. ok. Si eso que comentas tiene mucho sentido y funciona por fiín, pero sólo cuando monto la carptea en el equipo cliente mediante el comando mount. Lo que yo quiero es saber como crear un fichero , dentro del promopt de samba smb:>

      Si pongo touch desde ahí, me dice que no lo reconoce. Y me pasa lo mismo con todos los linux....
      O sea, mkdir si te deja, pero touch no.....

      Como pueod hacerlo entonces?????? Es por saber hacerlo , que es lo que estoy estudiando,. Muchas gracias y perdona que tardara en responder, es que se ve que no me suscribi bien a este sitio.

      Eliminar