Los comandos del sistema de archivos de UNIX

Una breve guía de los comandos del sistema de archivos UNIX

Escribí este manual con el objetivo de facilitar el aprendizaje, la memoria y la referencia a las principales utilidades del sistema de archivos UNIX. macOS y GNU / Linux son ambos sistemas UNIX, en términos prácticos. macOS es un UNIX certificado, basado en BSD UNIX, mientras que GNU / Linux es similar a UNIX o un derivado de UNIX.

Después de una introducción al sistema de archivos y cómo funciona, cubriré los detalles de los siguientes comandos:

Trabajar con carpetas y archivos

  • mkdir
  • cd
  • pwd
  • rmdir
  • ls
  • touch
  • mv
  • cp
  • ln

Permisos

  • chmod
  • chown
  • chgrp

Contenido de archivos

  • cat
  • less
  • find
  • cpio
  • dd
  • wc

Cómo funciona el sistema de archivos

Todo sistema informático moderno se basa en un sistema de archivos para almacenar y recuperar programas. No todo se puede guardar en la memoria, que es un recurso valioso y limitado, y necesitamos un lugar seguro donde almacenar los datos cuando la computadora se reinicia o se apaga. La memoria se borra por completo cada vez que se reinicia la computadora, mientras que la estructura del disco es persistente.

En esta guía, examino en particular el sistema de archivos UNIX, que se puede encontrar en máquinas macOS y GNU / Linux. El sistema de archivos de Windows es diferente, aunque Windows 10 con elSubsistema de Windows para Linuxinstalado le permite utilizar las mismas utilidades que describo aquí.

Un sistema de archivos comienza desde/. Este es el nodo raíz que aloja los directorios de primer nivel.

Los directorios habituales que encontrará en un sistema UNIX son

  • /bincontiene los principales comandos del sistema
  • /etccontiene la configuración del sistema
  • /devcontiene los dispositivos del sistema
  • /usrcontiene los archivos de usuario
  • /tmpcontiene los archivos temporales

… Hay más, pero te haces una idea.

La cantidad depende del tipo de sistema utilizado. Linux ha estandarizado las carpetas utilizando su esfuerzo básico estándar de Linux, y normalmente tiene:

  • /binlos principales comandos del sistema
  • /bootlos archivos utilizados para arrancar la máquina (que no existen en macOS)
  • /devDispositivos de sistema
  • /etcarchivos de configuración del sistema
  • /etc/optarchivos de configuración de programas de usuario
  • /homelos directorios de inicio de los usuarios (/ Usuarios en macOS)
  • /liblas bibliotecas del sistema (que no existen en macOS)
  • /mntsistemas de archivos montados
  • /optprogramas de usuario
  • /procusuario por kernel y procesos (no existente en macOS)
  • /rootla carpeta de inicio del usuario raíz (no existente en macOS)
  • /run(no existente en macOS)
  • /sbinusuario de binarios del sistema para arrancar el sistema
  • /tmparchivos temporales
  • /usrcontiene software de usuario, bibliotecas y herramientas
  • /usr/binbinarios de usuario
  • /usr/includearchivos de encabezado de usuario
  • /usr/libbibliotecas de usuario
  • /usr/localutilizado por el software del usuario para almacenar instalaciones, como Homebrew en macOS
  • /usr/sbinbinarios del sistema
  • /usr/sharecontiene datos independientes de la arquitectura. Puede contener una gran cantidad de material misceláneo, incluida la documentación y las páginas de manual.
  • /usr/srccontiene el código fuente de los paquetes instalados (no existe en macOS)
  • /varcontiene archivos temporales, registros y más

macOS tiene varias carpetas diferentes, incluidas

  • /Applicationsalmacena las aplicaciones de los usuarios
  • /Librarycontiene la biblioteca (configuración y recursos) utilizada globalmente por los usuarios del sistema
  • /Systemcontiene archivos del sistema
  • /privatecontiene archivos del sistema, registros y más

Cada carpeta contiene archivos y directorios, que a su vez pueden contener otros archivos y directorios, etc.

Todos los archivos y carpetas tienen un nombre.

¿Qué hace que un nombre sea válido? Puede tener entre 1 y 255 caracteres y debe estar compuesto por cualquier carácter alfanumérico (a-z/A-Z/0-9), el carácter de subrayado (_), punto (.) y coma (,) caracteres.

También puede usar espacio, aunque generalmente no se recomienda ya que el espacio debe escaparse con una barra invertida cada vez que deba hacer referencia al archivo / carpeta.

Dependiendo del sistema, el sistema de archivos puede distinguir entre mayúsculas y minúsculas. En macOS, el sistema de archivos esnodistingue entre mayúsculas y minúsculas de forma predeterminada, por lo que no puede tener un archivo / carpeta llamadotesty otro llamadoTest. Ellos son la misma cosa.

Ahora voy a presentar los distintos comandos de utilidades. Se ejecutan en el contexto de un shell, como Bash, Fish o Zsh. Cuando inicie un shell, estará en su directorio de inicio. En macOS, que se encuentra en el/Users/<yourname>/camino.

Los comandos no cambian si cambia el shell que usa, porque esos son los comandos básicos y fundamentales de UNIX. Es probable que use esos comandos durante muchas décadas a menos que ocurra alguna revolución en el mundo de la computación (y suceden, pero esas cosas del lado del servidor generalmente se mueven lentamente). Para darle un poco de perspectiva, elmkdirEl comando que verá ahora se introdujo en UNIX AT&T Versión 1, a principios de los 80.

Trabajar con carpetas y archivos

mkdir

Crea carpetas usando elmkdirmando:

mkdir fruits

Puede crear varias carpetas con un comando:

mkdir dogs cars

También puede crear varias carpetas anidadas agregando el-popción:

mkdir -p fruits/apples

Las opciones de los comandos de UNIX suelen adoptar esta forma. Los agrega justo después del nombre del comando y cambian cómo se comporta el comando. A menudo, también puede combinar varias opciones.

Puede encontrar qué opciones admite un comando escribiendoman <commandname>. Prueba ahora conman mkdirpor ejemplo (presione elqclave para esc la página de manual). Las páginas de manual son la increíble ayuda incorporada para UNIX.

cd

Una vez que crea una carpeta, puede moverse a ella usando elcdmando.cdmedioCcolgarDirectorio. Lo invoca especificando una carpeta a la que moverse. Puede especificar un nombre de carpeta o una ruta completa.

Ejemplo:

mkdir fruits
cd fruits

Ahora estás en elfruitscarpeta.

Puedes usar el..ruta especial para indicar la carpeta principal:

cd .. #back to the home folder

El carácter # indica el comienzo del comentario, que dura toda la línea después de que se encuentra.

Puedes usarlo para formar una ruta:

mkdir fruits
mkdir cars
cd fruits
cd ../cars

Hay otro indicador de ruta especial que es., e indica elActualcarpeta.

También puede usar rutas absolutas, que comienzan desde la carpeta raíz./:

cd /etc

pwd

Siempre que se sienta perdido en el sistema de archivos, llame alpwdcomando para saber dónde se encuentra:

pwd

Imprimirá la ruta de la carpeta actual.

rmdir

Del mismo modo que puede crear una carpeta usandomkdir, puede eliminar una carpeta usandormdir:

mkdir fruits
rmdir fruits

También puede eliminar varias carpetas a la vez:

mkdir fruits cars
rmdir fruits cars

La carpeta que elimine debe estar vacía.

Para eliminar carpetas con archivos, usaremos el más genéricormcomando que elimina archivos y carpetas, utilizando el-rfopciones:

rm -rf fruits cars

Tenga cuidado, ya que este comando no solicita confirmación y eliminará inmediatamente cualquier cosa que le pida que elimine.

No haycompartimientoal eliminar archivos de la línea de comandos y recuperar archivos perdidos puede ser difícil.

ls

Dentro de una carpeta puede listar todos los archivos que contiene la carpeta usando ellsmando:

ls

Si agrega un nombre de carpeta o una ruta, imprimirá el contenido de esa carpeta:

ls /bin

lsacepta muchas opciones. Una de mis combinaciones de opciones favoritas es-al. Intentalo:

ls -al /bin

comparado con la llanurals, esto devuelve mucha más información.

Tienes, de izquierda a derecha:

  • los permisos del archivo (y si su sistema admite ACL, también obtiene una marca ACL)
  • la cantidad de enlaces a ese archivo
  • el dueño del archivo
  • el grupo del archivo
  • el tamaño del archivo en bytes
  • el archivo modificado datetime
  • el nombre del archivo

Este conjunto de datos es generado por ellopción. losaen su lugar, también muestra los archivos ocultos.

Los archivos ocultos son archivos que comienzan con un punto (.).

touch

Puede crear un archivo vacío usando eltouchmando:

touch apple

Si el archivo ya existe, abre el archivo en modo de escritura y se actualiza la marca de tiempo del archivo.

mv

Una vez que tenga un archivo, puede moverlo usando elmvmando. Usted especifica la ruta actual del archivo y su nueva ruta:

touch test
mv pear new_pear

lospearel archivo ahora se mueve anew_pear. Asi es como turebautizararchivos y carpetas.

Si el último parámetro es una carpeta, el archivo ubicado en la ruta del primer parámetro se moverá a esa carpeta. En este caso, puede especificar una lista de archivos y todos se moverán en la ruta de la carpeta identificada por el último parámetro:

touch pear
touch apple
mkdir fruits
mv pear apple fruits #pear and apple moved to the fruits folder

cp

Puede copiar un archivo usando elcpmando:

touch test
cp apple another_apple

Para copiar carpetas, debe agregar el-ropción para copiar de forma recursiva todo el contenido de la carpeta:

mkdir fruits
cp -r fruits cars

ln

Introduzcamos ahora el concepto de enlaces. Un vínculo es un archivo que apunta a otro archivo. Los tenemos en todos los principales sistemas operativos.

Podemos crear dos tipos de enlaces: enlaces duros y enlaces simbólicos (suaves). No podemos crear un enlace duro a un directorio, pero podemos crear uno simbólico. Por esta razón, los enlaces simbólicos (también llamadosenlaces simbólicos) son mucho más comunes.

Creamos un enlace simbólico usando esta sintaxis:ln -s original linkname. Ejemplo:

mkdir fruits
ln -s fruits newfruits

Observe cómo usé elllmando. Este no es un comando estándar, sino unaliasporls -al. En un shell, puede definir alias que son accesos directos a combinaciones comunes de comandos y argumentos.

Permisos

Mencioné brevemente los permisos antes, cuando presenté ells -almando.

La cadena extraña que ves en cada línea de archivo, comodrwxr-xr-x, define los permisos del archivo o carpeta.

Vamos a diseccionarlo.

La primera letra indica el tipo de archivo:

  • -significa que es un archivo normal
  • dsignifica que es un directorio
  • lsignifica que es un enlace

Entonces tienes 3 conjuntos de valores:

  • El primer conjunto representa los permisos deldueñodel archivo
  • El segundo conjunto representa los permisos de los miembros delgrupoel archivo está asociado a
  • El tercer conjunto representa los permisos deltodos los demás

Estos conjuntos están compuestos por 3 valores.rwxsignifica que específicopersonatiene acceso de lectura, escritura y ejecución. Todo lo que se elimina se intercambia con un-, que le permite formar varias combinaciones de valores y permisos relativos:rw-,r--,r-x, etcétera.

Puede cambiar los permisos otorgados a un archivo usando elchmodmando.

chmodse puede utilizar de 2 formas. El primero usa argumentos simbólicos, el segundo usa argumentos numéricos. Comencemos con los símbolos primero, que es más intuitivo.

Tu escribeschmodseguido de un espacio y una letra:

  • arepresentatodos
  • urepresentausuario
  • grepresentagrupo
  • orepresentaotros

Luego escribe+o-para agregar un permiso o para eliminarlo. Luego ingresa uno o más símbolos de permisos (r,w,x).

Todo seguido del nombre del archivo o carpeta.

Aquí hay unos ejemplos:

chmod a+r filename #everyone can now read
chmod a+rw filename #everyone can now read and write
chmod o-rwx filename #others (not the owner, not in the same group of the file) cannot read, write or execute the file

Puede aplicar los mismos permisos a varias personas agregando varias letras antes de la+/-:

chmod og-r filename #other and group can't read any more

En caso de que esté editando una carpeta, puede aplicar los permisos a cada archivo contenido en esa carpeta usando el-rbandera (recursiva).

Los argumentos numéricos son más rápidos, pero me cuesta recordarlos cuando no los usas a diario. Utiliza un dígito que representa los permisos de la persona. Este valor numérico puede ser un máximo de 7 y se calcula de esta manera:

  • 1si tiene permiso de ejecución
  • 2si tiene permiso de escritura
  • 4si tiene permiso de lectura

Esto nos da 4 combinaciones:

  • 0no permisos
  • 1puede ejecutar
  • 2puede escribir
  • 3puede escribir, ejecutar
  • 4puedo leer
  • 5puede leer, ejecutar
  • 6puede leer, escribir
  • 7puede leer, escribir y ejecutar

Los usamos en pares de 3, para establecer los permisos de los 3 grupos en total:

chmod 777 filename
chmod 755 filename
chmod 644 filename

Propietario y grupo

Puede cambiar el propietario de un archivo utilizando elchownmando:

chown <username> <filename>

Puede cambiar el grupo de un archivo usando elchgrpmando:

chgrp <group> <filename>

Administrar el contenido de los archivos

less

loslesscomando es uno que uso mucho. Le muestra el contenido almacenado dentro de un archivo, en una interfaz de usuario agradable e interactiva.

Uso:less <filename>.

Una vez que esté dentro de unlesssesión, puede salir presionandoq.

Puede navegar por el contenido del archivo utilizando elupydownllaves, o usando elspace barybpara navegar página por página. También puede saltar al final del archivo presionandoGy volver al principio presionandog.

Puede buscar contenidos dentro del archivo presionando/y escribiendo una palabra para buscar. Esto buscahacia adelante. Puede buscar hacia atrás utilizando el?símbolo y escribiendo una palabra.

Este comando solo visualiza el contenido del archivo. Puede abrir directamente un editor presionandov. Utilizará el editor del sistema, que en la mayoría de los casos esvim.

Pulsando elFentra la llavemodo de seguimiento, omodo reloj. Cuando otra persona cambia el archivo, como desde otro programa, puede ver los cambiosEn Vivo. De forma predeterminada, esto no sucede y solo ve la versión del archivo en el momento en que lo abrió. Necesitas presionarctrl-Cpara salir de este modo. En este caso, el comportamiento es similar a ejecutar eltail -f <filename>mando.

Puede abrir varios archivos y navegar por ellos usando:n(ir al archivo siguiente) y:p(ir al anterior).

tail

Acabo de mencionartailen el comando anterior, aprovechemos esta oportunidad para explicar lo que hace.

En mi opinión, su mejor caso de uso es cuando se llama con el-fopción. Abre el archivo al final y busca cambios en el archivo. Cada vez que hay contenido nuevo en el archivo, se imprime en la ventana. Esto es ideal para ver archivos de registro, por ejemplo:

tail -f /var/log/system.log

Para salir, presionectrl-C.

Puede imprimir las últimas 10 líneas en un archivo:

tail -n 10 <filename>

Puede imprimir todo el contenido del archivo a partir de una línea específica utilizando+antes del número de línea:

tail -n +10 <filename>

tailpuedo hacer mucho más y como siempre mi consejo es comprobarman tail.

cat

Similar atailde alguna manera, tenemoscat. Exceptocattambién puede agregar contenido a un archivo, y esto lo hace súper poderoso.

En su uso más simple,catimprime el contenido de un archivo en la salida estándar:

cat file

Puede imprimir el contenido de varios archivos:

cat file1 file2

y usando el operador de redirección de salida>puede concatenar el contenido de varios archivos en un nuevo archivo:

cat file1 file2 > file3

Usando>>puede agregar el contenido de varios archivos en un nuevo archivo, creándolo si no existe:

cat file1 file2 >> file3

Al ver archivos de código fuente, es genial ver los números de línea y puede tenercatimprimirlos usando el-nopción:

cat -n file1

Solo puede agregar un número a las líneas que no están en blanco usando-b, o también puede eliminar todas las múltiples líneas vacías usando-s.

catse utiliza a menudo en combinación con el operador de tubería|para alimentar el contenido de un archivo como entrada a otro comando:cat file1 | anothercommand.

wc

wcmedioel recuento de palabras. Este es el uso más común:

  • wc -l file1contar líneas
  • wc -w file1contar palabras
  • wc -c file1contar personajes
  • wc -m file1contar caracteres con soporte multibyte (es decir, los emojis cuentan como 1, no como varios caracteres)

Tu puedes correrwcproporcionando varios archivos, en cuyo caso hará los cálculos en cada archivo por separado, y luego imprimirá un resumen:

find

losfindEl comando se puede utilizar para buscar archivos o carpetas que coincidan con un patrón de búsqueda en particular. Busca de forma recursiva.

Aprendamos con el ejemplo.

Busque todos los archivos del árbol actual que tengan la.jsextensión e imprima la ruta relativa de cada archivo que coincida:

find . -name '*.js'

Es importante usar comillas alrededor de caracteres especiales como*para evitar que el shell los interprete.

Busque directorios debajo del árbol actual que coincidan con el nombre "src":

find . -type d -name src

Usar-type fpara buscar solo archivos, o-type lpara buscar únicamente enlaces simbólicos.

-namedistingue entre mayúsculas y minúsculas. usar-inamepara realizar una búsqueda que no distingue entre mayúsculas y minúsculas.

Puede buscar en varios árboles de raíz:

find folder1 folder2 -name filename.txt

Busque directorios debajo del árbol actual que coincidan con el nombre "node_modules" o "público":

find . -type d -name node_modules -or -name public

También puede excluir una ruta, usando-not -path:

find . -type d -name '*.md' -not -path 'node_modules/*'

Puede buscar archivos que tengan más de 100 caracteres (bytes) en ellos:

find . -type f -size +100c

Busque archivos de más de 100 KB pero de menos de 1 MB:

find . -type f -size +100k -size -1M

Buscar archivos editados hace más de 3 días

find . -type f -mtime +3

Buscar archivos editados en las últimas 24 horas

find . -type f -mtime -1

Puede eliminar todos los archivos que coincidan con una búsqueda agregando el-deleteopción. Esto elimina todos los archivos editados en las últimas 24 horas:

find . -type f -mtime -1 -delete

Puede ejecutar un comando en cada resultado de la búsqueda. En este ejemplo ejecutamoscatpara imprimir el contenido del archivo:

find . -type f -exec cat {} \;

notar la terminación\;.{}se rellena con el nombre del archivo en el momento de la ejecución.

Descarga mi gratisManual de comandos de Linux


Más tutoriales de cli: