GNU/Linux >> Tutoriales Linux >  >> Linux

¿Qué caracteres están prohibidos en los nombres de directorio de Windows y Linux?

Mantengámoslo simple y respondamos la pregunta, primero.

  1. Los caracteres ASCII imprimibles prohibidos son:

    • Linux/Unix:

      / (forward slash)
      
    • Ventanas:

      < (less than)
      > (greater than)
      : (colon - sometimes works, but is actually NTFS Alternate Data Streams)
      " (double quote)
      / (forward slash)
      \ (backslash)
      | (vertical bar or pipe)
      ? (question mark)
      * (asterisk)
      
  2. Caracteres no imprimibles

    Si sus datos provienen de una fuente que permitiría caracteres no imprimibles, entonces hay más para verificar.

    • Linux/Unix:

      0 (NULL byte)
      
    • Ventanas:

      0-31 (ASCII control characters)
      

    Nota: Si bien es legal en los sistemas de archivos Linux/Unix crear archivos con caracteres de control en el nombre del archivo, puede ser una pesadilla para los usuarios lidiar con dichos archivos.

  3. Nombres de archivos reservados

    Los siguientes nombres de archivo están reservados:

    • Ventanas:

      CON, PRN, AUX, NUL 
      COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9
      LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9
      

      (tanto solos como con extensiones de archivo arbitrarias, por ejemplo, LPT1.txt ).

  4. Otras reglas

    • Ventanas:

      Los nombres de archivo no pueden terminar en un espacio o punto.


Una "guía completa" de caracteres de nombre de archivo prohibidos no funcionará en Windows porque reserva nombres de archivo y caracteres. Sí, caracteres como * " ? y otros están prohibidos, pero hay una infinidad de nombres compuestos únicamente por caracteres válidos que están prohibidos. Por ejemplo, los espacios y los puntos son caracteres de nombre de archivo válidos, pero los nombres compuestos únicamente por esos caracteres están prohibidos.

Windows no distingue entre mayúsculas y minúsculas, por lo que no puede crear una carpeta llamada A si uno se llama a ya existe. Peor aún, nombres aparentemente permitidos como PRN y CON , y muchos otros, están reservados y no permitidos. Windows también tiene varias restricciones de longitud; un nombre de archivo válido en una carpeta puede dejar de ser válido si se mueve a otra carpeta. Las reglas para nombrar archivos y carpetas se encuentran en los documentos de Microsoft.

En general, no puede utilizar texto generado por el usuario para crear nombres de directorio de Windows. Si desea permitir que los usuarios nombren lo que quieran, debe crear nombres seguros como A , AB , A2 et al., almacene los nombres generados por el usuario y sus rutas equivalentes en un archivo de datos de la aplicación y realice el mapeo de rutas en su aplicación.

Si es absolutamente necesario permitir los nombres de carpeta generados por el usuario, la única forma de saber si no son válidos es detectar excepciones y asumir que el nombre no es válido. Incluso eso está lleno de peligros, ya que las excepciones lanzadas por acceso denegado, unidades fuera de línea y falta de espacio en la unidad se superponen con las que pueden lanzarse por nombres no válidos. Estás abriendo una enorme lata de dolor.


Bajo Linux y otros sistemas relacionados con Unix, solo hay dos caracteres que no pueden aparecer en el nombre de un archivo o directorio, y esos son NUL '\0' y barra '/' . La barra, por supuesto, puede aparecer en un nombre de ruta, separando los componentes del directorio.

Se rumorea que Steven Bourne (de la fama de 'shell') tenía un directorio que contenía 254 archivos, uno para cada letra (código de carácter) que puede aparecer en un nombre de archivo (excluyendo / , '\0'; el nombre . era el directorio actual, por supuesto). Se utilizó para probar el shell de Bourne y, de forma rutinaria, causaba estragos en programas desprevenidos, como los programas de copia de seguridad.

Otras personas han cubierto las reglas de Windows.

Tenga en cuenta que MacOS X tiene un sistema de archivos que no distingue entre mayúsculas y minúsculas.

Fue Kernighan &Pike en The Practice of Programming quien dijo lo mismo en el Capítulo 6, Pruebas, §6.5 Pruebas de estrés:

Cuando Steve Bourne estaba escribiendo su shell Unix (que llegó a conocerse como el shell Bourne), creó un directorio de 254 archivos con nombres de un carácter, uno para cada valor de byte excepto '\0' y slash, los dos caracteres que no pueden aparecer en los nombres de archivo de Unix. Usó ese directorio para todo tipo de pruebas de coincidencia de patrones y tokenización. (El directorio de prueba, por supuesto, fue creado por un programa). Durante años, ese directorio fue la ruina de los programas que recorren árboles de archivos; los probó hasta la destrucción.


Linux
  1. ¿Qué son los procesos, subprocesos, procesos ligeros y estado del proceso de Linux?

  2. ¿En qué idiomas están escritos Windows, Mac OS X y Linux?

  3. ¿Cuáles son las llamadas al sistema operativo/sistema nativo de Windows y Linux realizadas desde malloc()?

  4. ¿Qué es el punto doble (..) y el punto único (.) en Linux?

  5. ¿Cuáles son las diferencias entre lsof y netstat en Linux?

Cambiar el nombre de todos los archivos y nombres de directorios a minúsculas en Linux

Qué son los Snaps y cómo instalarlos en varias distribuciones de Linux

¿Qué son los registros de Linux y dónde encontrarlos?

¿Cuáles son estos procesos de Windows en Linux?

¿Qué son la memoria alta y la memoria baja en Linux?

Comando superior de Linux:¿Qué somos, sy, ni, id, wa, hi, si y st (para uso de CPU)?