Guia de comandos en GNU/Linux
Contingut
- 1 Consideraciones previas
- 2 Saber en que directorio estamos
- 3 Moverse por directorios
- 4 Copiar archivos
- 5 Mover archivos
- 6 Borrar archivos
- 7 Borrar directorios
- 8 Crear directorios
- 9 Ver el contenido de archivos
- 10 Comprimir y descomprimir archivos
- 11 Ver espacio libre en sistemas de ficheros
- 12 Ver tamaño de archivos y carpetas
- 13 Ver procesos
- 14 Matar procesos
- 15 Memoria disponible
- 16 Rendimiento del sistema
- 17 Búsqueda de ficheros, comando find
- 18 Programar tareas
- 19 Comparar archivos y directorios con diff
- 20 Permisos
Consideraciones previas
Antes de empezar con los comandos hay que tener en cuenta que en GNU/Linux el interprete de comandos es case-sesitive. Esto quiere decir que no es lo mismo esccribir ls que Ls. El sistema diferencia entre mayúsculas y minúsculas. A la hora de trabajar con ficheros se pueden usar caracteres comodín. Como caracteres comodín están los siguientes:
El símbolo asterisco significa cualquier cadena de caracteres. Por ejemplo si se pone:
ls -la lis*
Se listaran todos los directorios y archivos que empiezen por lis, por ejemplo lista.txt, listado ... ? El simbolo de interrogación significa cualquier caracter. Por ejemplo si se pone:
ls -la l?
Se listaran todos los directorios y archivos que empiezen por l y que tenga cualquier otro caracter, por ejemplo li, la ... [] Los corchetes siginifican un caracter y se puede sustiruir por aquello que se ponga dentro de los corchetes. Por ejemplo si se pone ls -la in[a-z]* listaría todos aquellos ficheros que empiezen por in que su tercer caracter sea una letra que este entre la a y la z y luego cualquier cadena de caracteres.
ls -la l?
Se listaran todos los directorios y archivos que empiezen por l y que tenga cualquier otro caracter, por ejemplo li, la ... Si se pone [ABC] al hacer ls -la a[ABC]* se listar?n todos los archivos que tengan la primera letra una a la segunda debe ser A,B o C y después cualquier cadena de caracteres. Las opciones de los comandos se pueden concatenar para que se hagan varias opciones a la vez. Por ejemplo si ponemos ls -lah nos mostrara los todos los archivos que hay en el directorio en formato largo y además nos dara su tamaño. Hemos puesto tres opciones y se han ejecutado las tres a la vez al ejecutar ls.
Listar archivos del sistema
Para listar archivos del sistema se usa el comandos ls. Las opciones más usadas con este comando son las siguientes:
-l
Muestra información detallada sobre los archivos que hay en una ruta que se le indique. Se muestran los permisos, el número de inodos, propietario del archivo, grupo al que pertenece el archivo, tamaño en bytes del archivo, fecha de última modificación del archivo y nombre del archivo.
-a
Muestra todos los archivos y directorios de la ruta que se le indique. Muestra también los archivos ocultos que en GNU/Linux son aquellos que empiezan por .
-h
Muestra la información del tamaño de los archivos en bytes, KB, MB o Gygas en función de lo que ocupe el archivo.
-t
Lista los archivos de forma cronológica. Lista los archivos de más nuevos a más antiguos.
-r
Invierte el orden de ordenación que le hayamos puesto al ls.
-R
Lista de forma recursiva lo que hay en un directorio.
-S
Lista los archivos por tamaño poniendo en primer lugar los más grandes. Estas opciones se pueden combinar de forma que si queremos ver todo lo que hay en un directorio ,ver los archivos ocultos y que los ordene cronologicamente habría que poner:
ls -lat
Saber en que directorio estamos
Para saberlo se hace sin más poniendo el comando pwd. Esto muestra toda ruta hasta el directorio en que nos encontramos. Como ejemplo sería esto:
#pwd /home/usuario
Moverse por directorios
Para movernos por la estructura de directorios se hace con el comando cd. La forma de usarlo es la siguiente:
cd /directorio
A la hora de movernos por los directorios usando el comando cd se pueden usar rutas relativas o absolutas: Rutas relativas: Son aquellas que se contruyen a partir del directorio en el que nos encontramos. Como ejemplo si tenemos la siguiente estructura de directorios: /directorio1/directorio2/directorio3
Si estamos en el directorio2 y queremos ir al directorio3 se pondría:
cd directorio3
Si ahora queremos ir al directorio1 se haría de la siguiente forma:
cd ../../
Cuando se pone ../ se baja un nivel en la estructura de directorios. En el ejemplo de arriba bajariamos primero al directorio2 y luego del directorio2 al directorio1. Rutas absolutas: Son aquellas que se contruyen poniendo toda la ruta hasta el directorio que nos queremos mover. Como ejemplo si tenemos la siguiente estructura de directorios: /directorio1/directorio2/directorio3
Si estamos en el directorio2 y queremos ir al directorio3 se pondría:
cd /directorio1/directorio2/directorio3
Si ahora queremos ir al directorio1 se haría de la siguiente forma:
cd /directorio1
Hay que poner toda la ruta hasta el directorio. Si ponemos el comando cd solo lo que hace es llevarmos a nuestro dierctorio home. El directorio home es el directorio que tiene asociado cada usuario para trabajar.
Copiar archivos
Para copiar archivos o directorios de un sitio a otro se usa el comando cp. La sintaxis del comando sería:
cp archivo1 archivo2 /directorio_a_copiar_archivos
O si queremos copiar directorios sería:
cp -r directorio1 directorio2 /directorio_a_copiar_archivos
A la hora de poner la ruta de los ficheros o de la carpeta a la que se van a copiar los archivos se pueden usar tanto rutas absolutas como relativas. Opciones del comando cp:
-v
Muestra información sobre la copia de los archivos o directorios.
-i
Si lo que se va a copiar existe en el destino pregunta si se quiere sobreescribir.
-r
Copia de forma recursiva lo que hay en un directorio. Si ponemos este comando se copiarían el directorio y subdirectorios que contenga la carpeta con todos sus directorios y ficheros al destino.
Mover archivos
Para mover archivos o directorios de un sitio a otro se usa el comando mv. La sintaxis del comando sería:
mv archivo1 archivo2 /directorio_a_copiar_archivos
O si queremos copiar directorios sería:
mv directorio1 directorio2 /directorio_a_copiar_archivos
A la hora de poner la ruta de los ficheros o de la carpeta a la que se van a copiar los archivos se pueden usar tanto rutas absolutas como relativas. El comando mv se puede usar también para cambier el nombre de un fichero o directorio. Si ponemos como nombre de archivo origen el nombre del archivo del que queremos cambiar el nombre y como destino el nuevo nombre que queremos poner con eso ya cambiariamos el nombre. Por ejemplo si tenemos el archivo carta.txt y lo queremos cambiar a nota.txt habría que poner:
mv carta.txt note.txt
Opciones del comando mv:
-v
Muestra información sobre la copia de los archivos o directorios.
-i
Si lo que se va a copiar existe en el destino pregunta si se quiere sobreescribir.
-f
Si existe lo que se quiere copiar en el destino lo sobreescribe sin preguntar.
Con el comando mv se copian los directorios de forma recursiva sin poner ningún argumento.
Borrar archivos
Para borrar archivos se usa el comando rm. La sintaxis del comando sería:
rm archivo1 archivo2
A la hora de poner la ruta del fichero o ficheros a borrar se pueden usar tanto rutas absolutas como relativas. Opciones del comando rm:
-v
Muestra información sobre el borrado de los archivos.
-r
Permite hacer borrados recursivos. Con esta opción se pueden borrar también directorios.
-i
Pregunta antes de borrar los archivos si estamos seguros de querer borrarlos.
-f
Borrar los archivos si hacer ninguna pregunta de si queremos borrarlos.
Borrar directorios
Para borrar directorios se usa el comando rmdir. Para borrar directorios con este comando los directorios han de estar vacios. La sintaxis del comando sería:
rmdir directorio1 directorio2 ...
A la hora de poner la ruta del directorio a borrar se pueden usar tanto rutas absolutas como relativas. Opciones del comando rmdir:
-v
Muestra información sobre el borrado de los directorios.
-p
Borra los directorios que le pongamos en la ruta de borrado del directorio. Por ejemplo si ponemos rm -r dir1/dir2/dir3 borraría el dir3 luego el dir2 y luego el dir1.
Crear directorios
Para crear directorios se usa el comando mkdir. La sintaxis del comando sería:
mkdir directorio1 directorio2 ...
A la hora de poner la ruta del directorio a borrar se pueden usar tanto rutas absolutas como relativas. Opciones del comando mkdir:
-v
Muestra información sobre el directorio creado.
-p
Crea los directorios que le pongamos en la ruta de creación del directorio. Por ejemplo si ponemos mkdir -p dir1/dir2/dir3 crearía el dir1 luego el dir2 y luego el dir3.
-m
Permite asociarle permisos al directorio nada más crearlo. Por ejemplo si ponemos:
mkdir -m 777 directorio
Darímos permisos de lectura, ejecución y escritura a todo el mundo.
Ver el contenido de archivos
Para ver el contenido de un archivo existen varios comandos. Estos comandos solo permiten ver el contenido no permiten modificar el fichero. Los más usados serían los siguientes: cat Este comando permite ver el contenido completo de un archivo. Muestra el contenido de un archivo todo seguido sin detenerse por lo que suele pasar que no se vean todas las líneas ya que si un fichero posee 1000 líneas estas no entran en la pantalla y solo se verán las últimas líneas. La sintaxis es cat nombreArchivo. Como opciones del comando habría las siguientes:
-n
Muestra el número de línea.
-E
Muestra el símbolo $ al final de cada línea.
-T
Muestra las tabulaciones con el caracter ^I. more Muestra el contenido de un fichero y muestra el número de líneas que entran en la pantalla, si en la pantalla entra como máximo 50 líneas muestra 50 líneas y se detiene. Para seguir avanzando basta con pulsar la barra espaciadora y continua mostrando líneas. Si se quiere dejar de ver el contenido del fichero se pulsa la tecla q y se sale. La sintaxis del comando es more nombreArchivo1 nombreArchivo2 .... less Muestra el contenido de un fichero y muestra el número de líneas que entran en la pantalla, si en la pantalla entra como máximo 50 líneas muestra 50 líneas y se detiene. Para seguir avanzando basta con pulsar la barra espaciadora y continua mostrando líneas. Si se quiere dejar de ver el contenido del fichero se pulsa la tecla q y se sale. Con este comando además se pueden hacer busquedas poniendo /palabraAbuscar. Si hacemos esto resaltara en el archivo todas las coincidencias que haya encontrado. Además funcionan las teclas de flecha arriba para subir una línea, flecha abajo para bajar una línea, AvPag para avanzar una página y RePag para retroceder un página. La sintaxis del comando es more nombreArchivo1 nombreArchivo2 ... head Muestra las 10 primeras líneas de un fichero. Como opciones del comando habría las siguientes:
-c
Muestra los caracteres que haya en los primeros bytes que le pongamos. Por ejemplo si ponemos:
head -c 8 archivo1
Mostrara los primeros 8 bytes del archivo.
-n
Muestra las primeras líneas que le indiquemos. Por ejemplo si ponemos:
head -n 8 archivo1
Mostrara las primeras 8 líneas del archivo.
-n
Muestra las primeras líneas que le indiquemos. Por ejemplo si ponemos:
head -n 8 archivo1
Mostrara las primeras 8 líneas del archivo.
-q
No muestra en la primera línea el nombre del fichero.
-v
Muestra en la primera línea el nombre del fichero.
La sintaxis del comando es head nombreArchivo1 nombreArchivo2 ... tail Muestra las 10 últimas líneas de un fichero. Como opciones del comando habría las siguientes:
-c
Muestra los caracteres que haya en los últimas bytes que le pongamos. Por ejemplo si ponemos:
tail -c 8 archivo1
Mostrara los últimos 8 bytes del archivo.
-n
Muestra las primeras líneas que le indiquemos. Por ejemplo si ponemos:
tail -n 8 archivo1
Mostrara las últimas 8 líneas del archivo.
-n
Muestra las últimas líneas que le indiquemos. Por ejemplo si ponemos:
tail -n 8 archivo1
Mostrara las últimas 8 líneas del archivo.
-q
No muestra en la primera línea el nombre del fichero.
-v
Muestra en la primera línea el nombre del fichero.
La sintaxis del comando es tail nombreArchivo1 nombreArchivo2
Comprimir y descomprimir archivos
Para comprimir y descomprimir archivos están los comandos gzip y bzip2. Estos dos comandos solo permiten comprimir y descomprimir un archivo a la vez y no pueden comprimir y descomprimir directorios. Vamos a empezar comentando primero gzip.
Gzip
Gzip se complementa con el comando gunzip que lo que hace es descomprimir archivos comprmidos con gzip. Si queremos comprimir un archivo con gzip lo haríamos de la siguiente forma:
gzip documento
Esto crearía el archivo documento.gz. El archivo documento desaparece y se crea documento.gz que es el archivo comprimido. Ahora para descomprimirlo habría que hacer lo siguiente:
gzip -d documento.gz
O también:
gunzip documento.gz
Esto descomprimiría el archivo documento.gz y crearía el archivo documento. Gzip además posee más opciones como las siguientes, algunas de ellas son aplicables también al comando gunzip:
-d
Descomprime un archivo comprimido con gzip.
-l
Muestra información sobre el archivo comprimido que le pasemos como parametro.
-r
A esta opción se le pasa como parametro un directorio. Gzip navegara por ese directorio de forma recursiva y comprimira todos los archivos que encuentre dentro de la estructura de directorios.
-t
Comprueba que un archivo comprimido con gzip este correcto. Si se encuentra bien no muestra ningún error y si lo encuentra nos informa de cual es el problema.
-v
Muestra el nombre y el porcentaje de reducción por cada fichero comprimido o descomprimido.
Ahora continuamos con bzip2.
Bzip2
Bzip se complementa con el comando bunzip2 que lo que hace es descomprimir archivos comprmidos con bzip2. Si queremos comprimir un archivo con bzip lo haríamos de la siguiente forma:
bzip2 documento
Esto crearía el archivo documento.bz2. El archivo documento desaparece y se crea documento.bz2 que es el archivo comprimido. Ahora para descomprimirlo habría que hacer lo siguiente:
bzip2 -d documento.bz2
O también:
bunzip2 documento.bz2
Esto descomprimiría el archivo documento.bz2 y crearía el archivo documento. Bzip2 además posee más opciones como las siguientes, algunas de ellas son aplicables también al comando bunzip2:
-d
Descomprime un archivo comprimido con bzip2.
-l
Muestra información sobre el archivo comprimido que le pasemos como parametro.
-t
Comprueba que un archivo comprimido con gzip este correcto. Si se encuentra bien no muestra ningún error y si lo encuentra nos informa de cual es el problema.
-v
Muestra el nombre y el porcentaje de reducción por cada fichero comprimido o descomprimido.
Al usar cualquiera de los dos comandos al comprimir se genera un fichero .gz y desaparece el archivo de origen, al descomprimirlo se crea el fichero comprimido y desaparece el archivo .gz. A la hora de comprimir se obtiene mayor ratio de compresión comprimiendo con bzip2.
Empaquetar directorios. Comando tar
El comando tar permite crear a partir de varios ficheros un único archivo que los contiene. También permite empaquetar en un único fichero uno o varios directorios. Si quisieramos hacer un paquete de la siguiente estructura de directorios directorio1/directorio2/directorio3 habría que poner:
tar vcf directorioEmpaquetado.tar directorio1
Esto nos pondría en el archivo directorioEmpaquetado.tar toda la estructura de directorios a partir del directorio1 con todos sus archivos.
A diferencia de gzip y bzip2 no desaparece el archivo o directorios que empaquetemos. Ahora si queremos desempaquetar el archivo que acabamos de crear había que poner lo siguiente:
tar vxf directorioEmpaquetado.tar
Con esta orden desempaquetaríamos el archivo y nos generaría de nuevo la estructura de directorios. Al desempaquetar el archivo .tar no se borra el archivo .tar. El comando tar se suele usar generalmente para hacer backups y se suele combinar con los comandos gzip y bzip2 para que el archivo que se genere ocupe menos espacio. Para empaquetar y comprimir un directorio se puede hacer en dos pasos empaquetando primero el directorio y luego comprimiendolo o bien en un solo comando.
Si se quiere hacer con gzip para empaquetarlo y comprimirlo habría que poner:
tar cfvz directorioEmpaquetado.tar.gz directorio
Ahora para desempaquetarlo y descomprimirlo se haría de la siguiente forma:
tar xfvz directorioEmpaquetado.tar.gz
Si quisieramos desempaquetarlo y descomprimirlo a un directorio concreto se haría de la siguiente forma:
tar zxvf directorioEmpaquetado.tar.gz -C directorioDestino
Si queremos ver el contenido de un fichero con extensión tar.gz hay que poner:
tar ztvf directorioEmpaquetado.tar.gz
Ahora para hacer lo mismo pero comprimiendolo con bzip2 habría que poner:
tar jfvc directorioEmpaquetado.tar.bz2 directorio
Ahora para desempaquetarlo y descomprimirlo se pondría:
tar jfvx directorioEmpaquetado.tar.bz2
Si quisieramos desempaquetarlo y descomprimirlo a un directorio concreto se haría de la siguiente forma:
tar jxvf directorioEmpaquetado.tar.bz2 -C directorioDestino
Si queremos ver el contenido de un fichero con extensión tar.bz2 hay que poner:
tar jtvf directorioEmpaquetado.tar.bz2
Ver espacio libre en sistemas de ficheros
Si se quiere saber el espacio libre que tenemos en un dispositivo o en una partición se puede usar el comando df. Este comando muestra la siguiente información: Sistema de ficheros del que se muestra la información. Tamaño del sistema de ficheros. Espacio usado en el sistema de ficheros. Espacio libre en el sistema de ficheros. Porcentaje usado del sistema de ficheros. Donde se encuentra montado el sistema de ficheros. El comando tiene los siguientes opciones:
-h
Muestra la información del tamaño de los archivos en bytes, KB, MB o Gygas en función de lo que ocupe el archivo.
-k
Muestra la información del tamaño de los archivos en kylobytes.
-m
Muestra la información del tamaño de los archivos en megabytes.
Ver tamaño de archivos y carpetas
Para ver el tamaño de archivos y carpetas se suele usar el comando du. Este comando tiene los siguientes parámetros: -h
Muestra la información del tamaño de los archivos en bytes, KB, MB o Gygas en función de lo que ocupe el archivo. -s
Muestra un resumen para todos los argumentos que se han pasado. Si pasamos como parámetro un directorio mostrará lo que ocupa el directorio, esto lo hara de forma recursiva. -a
Muestra el tamaño para todos los fichero, no solo para los directorios. Si se pasa un directorio como parámetro mostrara el tamaño de cada directorio y de cada fichero contenido en cada uno. --exclude=patrón
Se puede poner un patrón para que no se tengán en cuenta aquello que coincida con el patrón puesto. Ejemplos de uso de du: du -sh directorio: mostrará el tamaño total de un directorio. du -cah directorio: mostrará el tamaño total de un directorio así como los subdirectorios que halla dentro del directorio. Se muestran también el tamaño de cada fichero contenido en los directorios. du -sh archivo: muestra el tamaño de un archivo.
Ver procesos
Para ver los procesos que hay corriendo en nuestra máquina se usa el comando ps. Este comando muestra que procesos se est? ejecutando así como el estado de los mismos. Para ver todos los procesos que se están ejecutando se pone:
ps aux Para buscar si se esta ejecutando algún programa en concreto se pondría: ps aux | grep programa
Si quisieramos saber si se está ejecutando apache habría que poner ps aux | grep apache.
Matar procesos
Para matar un proceso que se está ejecutando se usa el comando kill. Para poder matar un proceso es necesario saber cual es su PID (Identificador de proceso). Para obtener el pid se hace con ps, si por ejemplo queremos matar el proceso de XMMS se pondría: ps aux | grep xmms Esto nos devuelve una línea con información sobre el proceso, el PID es lo que viene en la segunda columna. Si por ejemplo el ps nos devuelve 2345 para matar el proceso habría que poner: kill -9 2345
Memoria disponible
Si se quiere saber la memoria que tenemos en la máquina hay que ejecutar el comando free. El comando muestra tanto la memoria física del ordenador como la swap. Para ver la memoria que esta en uso free -m En este caso lo mostrara en megas la memoria, pero se puede ver en bytes pasandole de parámetro una b, con k lo mostrará en KB y con g en GB.
Hay otros parámetros interesantes como -t que nos muestra el total de RAM + SWAP y la opción -s segundos que mostrar la información cada x segundos que le pongamos como parámetro.
Rendimiento del sistema
Para ver el rendimiento del sistema se suele usar el comando top. Este comando muestra el uso de micro, cuanto tiempo lleva arrancada la máquina, procesos corriendo, usos de memoria, usuarios en el sistema, los procesos que más memoria consumen ... Para salir de top hay que pulsar la tecla "q". Pulsando la tecla "k" nos pregunta que proceso queremos terminar. Pulsando la tecla "u" nos pregunta de que usuario queremos ver los usuarios y nos los muestra. Pulsando la tecla "M" ordena los procesos por consumo de memoria.
Búsqueda de ficheros, comando find
Este comando nos permite realizar la búsqueda de ficheros dentro de nuestro sistema. Su sintaxis básica es la siguiente: find path -name nombreArchivo(el nombre entre comillas)
Las búsquedas que se realizan con el comando find se hacen de fornma recursiva. Por ejemplo para encontrar el archivo "prueba" dentro del directorio actual en el que nos encontramos habría que poner lo siguiente: find . -name "prueba"
El punto significa el directorio actual. Por defecto la búsqueda del archivo es case-sensitive lo que quiere decir que se buscará el nombre del archivo según se haya escrito diferenciando entre mayúsculas y minúsculas en el nombre de lo que se va a buscar. En el ejemplo anterior hemos buscado el archivo "prueba" pero si hubiese un archivo llamado "pruebA" no nos lo mostraría. Para hacer que busque todos los archivos sin tener en cuenta mayúsculas y minúsculas habr? que escribir el comando de la siguiente manera:
find . -iname "prueba"
El comando find tiene una gran cantidad de opciones, vamos ha enumerar y a explicar las principales: -type: especifica que tipo de fichero se quiere buscar. Los tipos de fichero que se le pueden poner para buscar son los siguientes: d - directorios f - ficheros l - enlaces simb?icos s - sockets -perm: se busca ficheros que posean los permisos que se indican. Si se pone delante de los permisos "-" se busca aquellos que no posean esos permisos. -user: se buscan ficheros cuyo propietario sea el usuario indicado. -group: se buscan ficheros que sean miembro de determinado grupo. -nouser: se buscan ficheros cuyo propietario sea el usuario indicado. -nogroup: se buscan ficheros que sean miembro de determinado grupo. -size: busca ficheros de un determinado tamaño. -newer: busca ficheros que sean más nuevos que el fichero 1 pero más antiguos que el fichero 2.. -mtime: busca ficheros que han sido modificados antes de x d?s. Si pone el car?ter "-" antes de los d?s se buscan ficheros en ese mismo día o antes que han sido modificados. Si se pusiese "-mtime -5" se buscarían aquellos ficheros que han sido modificados hace 5 días. Si se pone el carácter "+" se buscan ficheros que no han sido modificados en los días pasados como parámetros. Ejemplos de busquedas: Buscar el archivo "abc" en el directorio actual:
find . -name "abc"
Buscar archivos cuyo nombre sea "abc" sin tener en cuentas mayúsculas ni minúsculas: find . -iname "abc"
Buscar archivos cuya primera letra sea A,B o C en el directorio /etc find /etc -name "[ABC]*"
Buscar archivos que terminen en "wd" en el directorio /etc, sin importar las mayúsculas y minúsculas y redirigir la salida al fichero find.log find /etc -iname "*wd" > find.log
Realizar lo mismo de lo anterior solo que mandando los mensajes de error al fichero findErrors.log find /etc -iname "*wd" 2>findErrors.log
La misma búsqueda que la anterior haciendo que no se muestren los mensajes de error por la pantalla: find /etc/ -iname "*wd" 2>/dev/null
Buscar en el directorio actual los directorios que hay: find . -type d
Buscar en el directorio actual los directorios que empiezan por A: find . -type d -name "A*"
Búsquedas complejas Hasta ahora las búsquedas que hemos visto son búsquedas sencillas pero ahora voy a poner ejemplos de búsquedas más complejas ayudandonos de pipes.
Buscar en el directorio /etc el archivo "passwd" y buscar dentro si hay un usuario llamado root:
find /etc -name "passwd" | xargs grep "root"
Hacer la misma búsqueda evitando que se muestren mensajes de error por pantalla find /etc -name "passwd" 2>/dev/null | xargs grep "root"
El comando xargs lo que permite es la ejecución de un comando tomando como parámetro de entrada la entrada standard. Para el ejemplo anterior lo que haría sería buscar el archivo "passwd" dentro del directorio /etc y en el caso de encontrar alguna coincidencia se ejecutaría el comando grep que buscaría la cadena de texto "root". En el caso de que se produzcan errores en la busqueda del fichero "passwd" debido por ejemplo a la falta de permisos para acceder a un determinado directorio estos se mandarán a /dev/null y no veríamos dichos mensajes por la pantalla. Hacer la misma búsqueda que en el caso anterior pero esta vez que se muestren todos los usuarios del archivo passwd excepto "root":
find /etc -name "passwd" 2>/dev/null | xargs grep -v "root"
Borrar los archivos que empiezen por "A" en el directorio actual y hacia abajo: find . -type f -iname "A*" | xargs rm
Lo mismo que en el caso anterior pero que se pida confirmación antes de borrar find . -type f -name "A*" -exec rm -i {} \;
La opción -exec permite realizar lo mismo que si se pone xargs pero sin usar un pipe. La sintaxis de -exec es la siguiente:
find path -name nombreArchivo -exec comandoAEjecutar {} \;
Cuando se usa la opcion -exec el comando find todos los resultados obtenidos con a exec para que trabaje con cada uno. Lo que pasa es que en algunos sistemas hay un límite en la longitud de la cadena que se le pasa a exec por lo que al rato de estar ejecutandose esta búsqueda termina por error. Para estos casos es mejor utilizar xargs. He puesto esta opción porque al querer ejecutar el borrado interactivo de los ficheros con xargs no funcionaba bien del todo pues no me dejaba responder a si quería o no borrar un fichero.
Buscar archivos dentro del nuestro directorio de trabajo que contegan sh en su nombre y ver su información.
find $HOME -name "*sh*" | xargs ls -l
El "$HOME" es una variable del sistema que define donde se encuentra el directorio de trabajo de un usuario. El caracter "~" realiza la misma función. Buscar aquellos ficheros que han sido modificados en los últimos 14 días:
find . -type f -mtime -14
Si se quiere buscar más de un fichero con el comando find se hace usando el parámetro -o. Lo que se consigue con este parámetro es hacer busquedas en las que se cumpla o una condición u otra. Por ejemplo para buscar todos los fichero con extensión "xml" y "xsl" del directorio actual se haría de la siguiente forma: find . -name "*.xml" -o -name "*.xsl"
Programar tareas
Si se quieren dejar tareas que se ejecuten de forma periódica se puede usar el comando crontab. Para crear o editar un fichero de cron se usa el comando crontab -e. Al escribir este comando se abre un archivo vacio listo para ser editado con VI. En este nuevo fichero se añadirán las tareas que deseemos programar. La sintaxis de cada línea es la siguiente: minutos (0 - 59) hora (0 - 23) día del mes (1 - 31) mes (1 - 12) día de la semana (0 - 6, el domingo es 0) comando a ejecutar
Comparar archivos y directorios con diff
En linux podemos comparar el contenido de dos archivos o ver las diferencias entre dos directorios usando el comando diff. La sintaxis básica es la siguiente: diff fichero1 fichero2
diff directorio1 directorio2
En la salida que se muestra al comparar dos archivos las líneas que comienzan con los caracteres "%<" corresponden a líneas del primer fichero, mientras que las que empiezan con "%>" corresponden a líneas del segundo fichero. Si por ejemplo tenemos dos directorios y solo queremos ver que ficheros son diferentes entre los dos habría que poner:
diff -q directorio1 directorio2
Si al comparar dos archivos se quiere que no se tengan en cuenta las mayusculas y las minusculas hay que poner: diff -i fichero1 fichero2
Si al comparar dos archivos no se quiere que se tengan en cuenta los blancos hay que poner: diff -w fichero1 fichero2
Permisos
En linux podemos dar diferentes tipos de permisos a los ficheros y permisos que tenemos en nuestro sistema. Para ello cada fichero tiene 3 tipos de permisos para cada propietario, grupo y el resto que no pertenecen a los dos anteriores. Los tipos de permisos que podemos encontrar son los siguientes: r -> permiso de lectura, para un fichero significa que se puede leer el contenido mientras que para un directorio quiere decir que se permite listar el contenido de dicho directorio w -> permiso de escritura, para un fichero significa que se puede modificar el contenido mientras que para un directorio quiere decir que se pueden crear y borrar contenidos dentro del directorio x -> permiso de ejecución, para un fichero significa que se puede ejecutar ese fichero y para un directorio quiere decir que se puede acceder al directorio
Si listamos el contenido de un directorio con "ls -l" podremos ver cuales son los permisos de lo que contiene el directorio: -rw-r--r-- 1 lostscene lost 4960 Jul 11 12:12 prueba.txt
De lo que se ve en la línea anterior esto es lo que significa cada campo: - -> indica que se trata de un fichero, si fuese un directorio se mostraría el caracter "d" y si fuese un enlace simbólico el caracter "l" rw- -> esos tres caracteres son los permisos para el propieptario del fichero que en esta caso se llama "lostscene". Los permisos que tendrí son lectura y escritura, no tendría ejecución porque aparace el caracter "-". Cuando no se tiene un permiso se muestra el caracter "-" r-- -> esos tres caracteres son los permisos para el grupo al que pertenece el fichero que en este caso se llama "lost". Para el grupo tiene el permiso de lectura solamente r-- -> esos tres caracteres son los permisos para aquellos que no son el propietario ni el grupo al que pertenece el fichero. Para este caso solo se tiene el permiso de lectura
Si ahora quisieramos cambiar los permisos de ese fichero usaremos el comando "chmod". Este comando se puede usar de varias formas. Una de ellas se llama forma octal que consiste en que cada permiso tiene un valor, los valores son los siguientes: permiso de lectura (r) -> vale 4 permiso de escritura (w) -> vale 2 permiso de ejecución (x) -> vale 1
Para dar permisos con la forma octal lo que se hace es sumar lo que vale cada uno de los permisos que vamos a dar. Si por ejemplo al fichero le queremos dar todos los permisos al propietario, de lectura al grupo y al resto nada lo harímos poniendo "chmod 740 prueba.txt". Primero se pone "chmod" luego los permisos y después a lo que se lo queramos aplicar. Ponemos 740 porque 7 es la suma de los valores de los permisos que le damos al propietario, 4 al grupo y 0 al resto. permisos para el propietario -> 4 (valor del permiso de lectura) + 2 (valor del permiso de escritura) + 1 (valor del permiso de ejecución) = 7 permisos para el grupo -> 4 (valor del permiso de lectura) + 0 (vale 0 porque no le queremos dar el permiso) + 1 (vale 0 porque no le queremos dar el permiso) = 4 permisos para el resto -> 0 (vale 0 porque no le queremos dar el permiso) + 0 (vale 0 porque no le queremos dar el permiso) + 1 (vale 0 porque no le queremos dar el permiso) = 4
Si por ejemplo quisieramos dar todos los permisos al usuario, grupo y resto serí "chmod 777 prueba.txt". La otra forma de dar permisos es indicar al comando chmod a quien se lo queremos dar y que permiso. A quien se lo queremos dar se indica de la siguiente forma:
u -> propietario del fichero g -> grupo al que pertenece el fichero o -> aquellos que no son el propietario a -> a todos
Los permisos se indican de la siguiente forma: r -> permiso de lectura w -> permiso de escritura x -> permiso de ejecución
Para dar, quitar o igualar permiso se indican con los siguiente caracteres: + -> se añade un permiso - -> se quita un permiso = -> se igualan los permisos
Si por ejemplo queremos quitar al grupo el permiso de ejecució habría que poner "chmod g-x prueba.txt". Si queremos dar todos los permisos al propietario sería "chmod u+rwx prueba.txt" y si por ejemplo al grupo le queremos dar el permiso de lectura y al resto quitarle el permiso de ejecución sería "chmod g+w,o-x prueba.txt".