Una ruta (o ruta de archivo , ruta de archivo , nombre de ruta o similar) es una cadena de caracteres que se utiliza para identificar de forma única una ubicación en una estructura de directorios . Se compone siguiendo la jerarquía del árbol de directorios en la que los componentes, separados por un carácter delimitador, representan cada directorio. El carácter delimitador es más comúnmente la barra ("/"), la barra invertida ("\") o los dos puntos (":), aunque algunos sistemas operativos pueden utilizar un delimitador diferente . Las rutas se utilizan ampliamente en informática para representar las relaciones directorio/archivo comunes en los sistemas operativos modernos y son esenciales en la construcción de localizadores uniformes de recursos (URL). Los recursos pueden representarse mediante rutas absolutas o relativas.
Multics introdujo por primera vez un sistema de archivos jerárquico con directorios (separados por ">") a mediados de la década de 1960. [1]
Alrededor de 1970, Unix introdujo el carácter de barra ("/") como separador de directorios.
En 1981 se lanzó la primera versión de Microsoft DOS . MS-DOS 1.0 no admitía directorios de archivos. Además, una gran parte de los comandos de utilidad incluidos en MS-DOS 1.0 provenían de IBM y su sintaxis de línea de comandos utilizaba el carácter de barra como prefijo de "cambio". Por ejemplo, dir /w
ejecuta el dir
comando con la opción de formato de lista amplia.
Este uso de la barra diagonal todavía se puede encontrar en la interfaz de comandos de Microsoft Windows . Por el contrario, Unix utiliza el carácter de guión-menos ("-") como prefijo de cambio de línea de comandos.
Cuando se agregó soporte de directorios a MS-DOS en la versión 2.0, se mantuvo "/" como el carácter de prefijo de cambio para compatibilidad con versiones anteriores . Microsoft eligió el carácter de barra invertida ("\") como separador de directorios, que parece similar al carácter de barra, aunque las versiones más modernas de Windows son independientes de la barra, lo que permite mezclar ambos tipos de barra en una ruta. [2] [3]
Una ruta absoluta o completa apunta a la misma ubicación en un sistema de archivos, independientemente del directorio de trabajo actual . Para ello, debe incluir el directorio raíz .
Por el contrario, una ruta relativa comienza en un directorio de trabajo determinado, lo que evita la necesidad de proporcionar la ruta absoluta completa. Un nombre de archivo se puede considerar como una ruta relativa basada en el directorio de trabajo actual. Si el directorio de trabajo no es el directorio principal del archivo , se generará un error de archivo no encontrado si se accede al archivo por su nombre.
Una URL base es la parte consistente de una ruta de API, a la que se agregan las rutas de los puntos finales.
Las versiones japonesa y coreana de Windows pueden mostrar a menudo el carácter " ¥ " o el carácter " ₩ " en lugar del separador de directorios. En tales casos, el código para una barra invertida se dibuja como estos caracteres. Las primeras versiones de MS-DOS reemplazaron la barra invertida con estos glifos en la pantalla para que fuera posible mostrarlos por programas que solo entendían ASCII de 7 bits (otros caracteres como los corchetes también fueron reemplazados, consulte ISO 646 , Windows Codepage 932 (Japanese Shift JIS) y Codepage 949 (Korean)). Aunque incluso la primera versión de Windows admitía el conjunto de caracteres ISO-8859-1 de 8 bits que tiene el signo Yen en U+00A5, y las versiones modernas de Windows admiten Unicode que tiene el signo Won en U+20A9, mucho software continuará mostrando las barras invertidas que se encuentran en los archivos ASCII de esta manera para preservar la compatibilidad con versiones anteriores. [8]
Mac OS X , como derivado de UNIX, utiliza rutas UNIX internamente. Sin embargo, para preservar la compatibilidad del software y la familiaridad de los usuarios, muchas partes de la interfaz gráfica de usuario cambian el "/" ingresado por el usuario por ":" internamente y vuelven a cambiarlos cuando se muestran los nombres de archivo (un ":" ingresado por el usuario también se cambia por "/", pero no ocurre la traducción inversa).
Los lenguajes de programación también utilizan rutas. Por ejemplo, cuando se abre un archivo. La mayoría de los lenguajes de programación utilizan la representación de la ruta del sistema operativo subyacente:
uxFile = fopen("project/readme.txt", "r")
winFile = fopen("C:\\Program Files\\bin\\config.bat", "r")
Este acceso directo a las rutas del sistema operativo puede dificultar la portabilidad de los programas. Para permitir la portabilidad de los programas, Java utiliza File.separator para distinguir entre rutas separadas por / y \. Seed7 tiene un enfoque diferente para la representación de rutas. En Seed7, todas las rutas utilizan la convención de rutas de Unix, independientemente del sistema operativo. En Windows, se realiza una asignación (por ejemplo, la ruta /c/users se asigna a c:\users ).
La UNC de Microsoft Windows , abreviatura de Convención de nomenclatura universal o Convención de nomenclatura uniforme , especifica una sintaxis común para describir la ubicación de un recurso de red, como un archivo, directorio o impresora compartidos. La sintaxis UNC para sistemas Windows tiene la forma genérica:
\\NombreDeEquipo\CarpetaCompartida\Recurso
Microsoft a menudo se refiere a esto como una " ruta de red ".
Algunas interfaces de Microsoft Windows también permiten o requieren la sintaxis UNC para el acceso a recursos compartidos WebDAV , en lugar de una URL. La sintaxis UNC se amplía [9] con componentes opcionales para indicar el uso de SSL y el número de puerto TCP/IP; una URL WebDAV de http[s]://HostName[:Port]/SharedFolder/Resource
se convierte en
\\Nombre de host[@SSL][@Puerto]\Carpeta compartida\Recurso
Cuando se ve de forma remota, la carpeta "SharedFolder" puede tener un nombre diferente al que ve un programa en el servidor al abrir "\SharedFolder". En cambio, el nombre de la carpeta "SharedFolder" consiste en un nombre arbitrario asignado a la carpeta al definir su "uso compartido".
Algunas interfaces de Microsoft Windows también aceptan "Long UNC":
\\?\UNC\NombreDeEquipo\CarpetaCompartida\Recurso
Microsoft Windows utiliza los siguientes tipos de rutas:
C:\File
\\Server\Volume\File
o / <internet resource name>[\Directory name]
(al menos en Windows 7 y versiones posteriores)\\?\C:\File
o \\?\UNC\Server\Volume\File
. [10] Esta ruta apunta al espacio de nombres de archivo local y \\.\
es similar a la que apunta al espacio de nombres de dispositivo DOS local. Este formato también es la ruta "sin procesar" o "sin interpretar", ya que envía rutas directamente al sistema de archivos sin convertir / a \ ni interpretar nombres como .. . [4]\\??\
(espacio de nombres DOS global). [11] [12]En versiones de Windows anteriores a Windows XP, solo las API que aceptan rutas de dispositivos "largas" podían aceptar más de 260 caracteres.
El shell de Windows XP y Windows Vista , explorer.exe , permite nombres de ruta de hasta 248 caracteres de longitud. [ cita requerida ]
Dado que las UNC comienzan con dos barras invertidas, y la barra invertida también se usa para escapar cadenas y en expresiones regulares , esto puede dar lugar a casos extremos de síndrome del palillo de dientes inclinado : una cadena escapada para una expresión regular que coincide con una UNC comienza con 8 barras invertidas \\\\\\\\
, porque tanto la cadena como la expresión regular requieren escape. Esto se puede simplificar utilizando cadenas sin formato , como en C# @"\\\\"
o Python r'\\\\'
, o literales de expresiones regulares, como en Perl qr{\\\\}
.
La mayoría de los sistemas tipo Unix utilizan una sintaxis similar. [13] POSIX permite tratar una ruta que comienza con dos barras de una manera definida por la implementación, [14] aunque en otros casos los sistemas deben tratar múltiples barras como barras simples. [15] Muchas aplicaciones en sistemas tipo Unix (por ejemplo, scp , rcp y rsync ) utilizan definiciones de recursos como:
nombre de host:/ruta de directorio/recurso
o esquemas URI con el nombre del servicio (aquí 'smb'):
smb://nombre de host/ruta de directorio/recurso
El siguiente ejemplo práctico analiza el comportamiento de un sistema de archivos de estilo Unix tal como aparecería desde una terminal o una aplicación de terminal (ventana de línea de comandos):
Adjunto a un directorio de trabajo actual (cwd) de:
/usuarios/marca/
Se desea cambiar el directorio de trabajo actual a:
/usuarios/mark/bobapples
En ese momento, la ruta relativa del directorio deseado se puede representar como:
./manzanas
o para abreviar:
manzanas
y la ruta absoluta del directorio como:
/usuarios/mark/bobapples
Dado bobapples como la ruta relativa para el directorio deseado, se puede escribir lo siguiente en el símbolo del sistema para cambiar el directorio de trabajo actual a bobapples:
cd manzanas
Dos puntos (" .. ") apuntan hacia arriba en la jerarquía para indicar el directorio padre ; un punto (" . ") representa el directorio actual en sí. Ambos pueden ser componentes de una ruta relativa compleja (por ejemplo, " ../mark/./bobapples "), donde " . " solo o como el primer componente de dicha ruta relativa representa el directorio de trabajo . (El uso de " ./foo " para referirse a un archivo " foo " en el directorio de trabajo actual a veces puede distinguirlo de un recurso " foo " que se encuentra en un directorio predeterminado o por otros medios; por ejemplo, para ver una versión específica de una página de manual en lugar de la que está instalada en el sistema).
Contrariamente a la creencia popular, la API del sistema de Windows acepta la barra diagonal y, por lo tanto, todos los ejemplos de Unix anteriores deberían funcionar. Pero muchas aplicaciones de Windows interpretan la barra diagonal con otros fines o la tratan como un carácter no válido y, por lo tanto, requieren que ingrese la barra diagonal inversa, en particular el shell cmd.exe (a menudo llamado "terminal", ya que generalmente se ejecuta en una ventana de terminal). Tenga en cuenta que muchos otros shells disponibles para Windows, como tcsh y Windows PowerShell , permiten la barra diagonal.
Además, "\" no indica una única raíz, sino la raíz del "disco actual". Para indicar un archivo en un disco distinto del actual es necesario anteponer una letra de unidad y dos puntos. No se produce ninguna ambigüedad, ya que los dos puntos no son un carácter válido en un nombre de archivo MS-DOS y, por lo tanto, no es posible tener un archivo llamado "A:" en el directorio actual.
Los nombres UNC (cualquier ruta que comience con \\?\ ) no admiten barras. [4]
Los siguientes ejemplos muestran rutas de estilo MS-DOS / Windows , con barras invertidas utilizadas para coincidir con la sintaxis más común:
A:\Temp\Archivo.txt
Esta ruta apunta a un archivo con el nombre File.txt , ubicado en el directorio Temp , que a su vez se encuentra en el directorio raíz de la unidad A: .
C:..\Archivo.txt
Esta ruta se refiere a un archivo llamado File.txt ubicado en el directorio principal del directorio actual en la unidad C :.
Carpeta\Subcarpeta\Archivo.txt
Esta ruta denota un archivo llamado File.txt ubicado en el directorio SubFolder que a su vez se encuentra en el directorio Folder que se encuentra en el directorio actual de la unidad actual (ya que este ejemplo no proporciona ninguna especificación de unidad).
Archivo.txt
Esta ruta bastante simple apunta a un archivo llamado File.txt
ubicado en el directorio actual (ya que la ruta carece de una especificación de directorio) en la unidad actual (ya que no hay ninguna especificación de unidad presente).
\\.\COM1
Esta ruta se refiere al primer puerto serie ( COM1 ).
C:\> más < C:/Windows/system.ini
; para compatibilidad con aplicaciones de 16 bits [386Enh] woafont = dosapp.fon EGA80WOA.FON = EGA80WOA.FON EGA40WOA.FON = EGA40WOA.FON CGA80WOA.FON = CGA80WOA.FON CGA40WOA.FON = CGA40WOA.FON ...
En este ejemplo se utiliza una ruta que contiene barras como separador de directorios. El comando redirige el contenido del archivo al morecomando.
E:\> dir "/Carpeta/SubCarpeta/" /Q El volumen en la unidad E es el número de serie del volumen de datos es 07BE-0B10Directorio de E:\Carpeta\SubCarpeta18 de octubre de 2008 08:15 AM <DIR> DOMINIO\usuario . 18 de octubre de 2008 08:15 AM <DIR> DOMINIO\usuario .. 18 de octubre de 2008 08:15 AM <DIR> DOMINIO\usuario Archivo.txt 1 Archivo(s) 8 bytes 2 Directorio(s) 19.063.000 bytes libres
Una ruta que contiene barras diagonales a menudo debe estar rodeada de comillas dobles para distinguirla de los modificadores de la línea de comandos .
El CD "[letra de unidad]:/Archivos de programa" solo funcionará desde el directorio raíz ([letra de unidad]:\). Esto parece tratar todas las barras diagonales de la misma manera que .\. [ cita requerida ]
Por ejemplo:
CD "C:.\Archivos de programa"
funciona igual que
CD "C:/Archivos de programa"
Además, desde una carpeta raíz:
CD "C:.\Archivos de programa.\Internet Explorer"
Sería tratado de la misma manera que
CD "C:/Archivos de programa/Internet Explorer"
Si no hay una ruta relativa al nombre del directorio especificado con barras diagonales, obtendrá el siguiente error:
El sistema no puede encontrar la ruta especificada.
Para configurar las variables de entorno, a veces es necesario proporcionar una ruta que no contenga espacios, por ejemplo, %JAVA_HOME%
si se define como "C:\Archivos de programa\Java...", los scripts se pueden detener cuando encuentran el espacio en el nombre de la ruta. Para obtener el nombre de ocho caracteres que Windows asigna a cualquier directorio para su sustitución en las variables de entorno, utilice el comando de listado de directorios con la opción /x un nivel por encima del directorio de destino. Por ejemplo, lo siguiente mostrará los nombres de archivo 8.3 para todos los directorios directamente bajo la raíz:
C:\> directorio /x
(Los usuarios pueden desactivar la creación de nombres de archivos 8.3 unidad por unidad).