4.
Utilización de la línea de comandos
4.1. Introducción a la línea de comandos
Trabajar con la línea de comandos no es una tarea tan desalentadora como muchos pudieran
pensar. No se requieren conocimientos especiales para usar la línea de comandos, pues es
un programa como otro cualquiera. La mayoría de las acciones realizadas en Linux pueden
llevarse a cabo usando la línea de comandos. Aunque existen herramientas gráficas para la
mayoría de programas, a veces esto no es suficiente. Entonces es cuando la línea de
comandos cobra su utilidad.
La terminal es llamada a menudo la línea de comandos, el "prompt", o el "shell". Antes,
éste era el único método por el cual el usuario interactuaba con el ordenador; sin embargo,
muchos usuarios de Linux encuentran más rápido el uso de la terminal que un método
gráfico e incluso hoy día tiene algunas ventajas.
El uso original de la terminal era como administrador de ficheros y de hecho todavía es
usado con este fin. Usted puede usar la terminal como un navegador de archivos para
administrar sus ficheros y deshacer los cambios realizados.
Los comandos, en su mayor parte, no son realmente más que pequeños programa
incorporados en el sistema operativo. Técnicamente, lo único que diferencia los comandos
de los programas (o de los scripts) es que los comandos siempre están en carpetas muy
concretas (/bin, /usr/bin, y en el caso de haber iniciado sesión como superusuario, /sbin), así
que no es necesario especificar dónde se encuentran.
Por ello, todas las reglas de sintaxis aplicables a los comandos son aplicables a cualquier
programa o script de Bash, con un cambio: en lugar de escribir el nombre del comando, hay
que especificar exactamente dónde está el programa o script (la ruta del programa o script).
4.2. Conceptos de la línea de comandos
El concepto de línea de comandos
Una línea de comandos es una cadena de caracteres formada por un comando que
corresponde a un archivo ejecutable del sistema o, más bien, un comando de shell como así
también argumentos opcionales (parámetros):
ls -al /home/jf/
En el comando anterior, ls es el nombre del comando, -al y home/jean-francois/ son
argumentos. Los argumentos que comienzan con - se denominan opciones. Por lo general,
para cada comando, hay una cierta cantidad de opciones que se pueden detallar al introducir
uno de los siguientes comandos:
comando –help
comando -?
man comando
Reglas de sintaxis
Capitalización
Regla número 1: la distinción entre mayúsculas y minúsculas es crucial. Los nombres de
los comandos siempre se escriben en minúsculas; los parámetros cambian de significado o
son inservibles si se usa la capitalización incorrecta.
anais@pepeluis:~$ LS -L
bash: LS: no se encontró la orden
anais@pepeluis:~$ ls -l
drwxr-xr-x 1 pepeluis pepeluis 4096 mar 4 20:08 Documentos
drwxr-xr-x 2 pepeluis pepeluis 4096 mar 4 20:08 Escritorio
drwxr-xr-x 1 pepeluis pepeluis 4096 mar 8 19:37 experimento
anais@pepeluis:~$ ls -L
Documentos Escritorio experimento
Parámetros
Regla número 2: todos los parámetros se separan por espacios; la consola reconoce la
primera palabra como el nombre del comando (o la ruta del programa) y cada cadena de
texto entre espacios como un parámetro.
anais@pepeluis:~$ cd Documentos
anais@pepeluis:~/Documentos:$ ls
drwxr-xr-x 1 pepeluis pepeluis 4096 mar 4 23:24 Pinky y Cerebro
drwxr-xr-x 2 pepeluis pepeluis 4096 mar 6 13:35 Recetas de cocina
anais@pepeluis:~/Documentos:$ cd Pinky y Cerebro
bash: cd: Pinky: No existe el fichero o el directorio
El sistema entendió "acceder a la carpeta Pinky" (el comando cd solo admite un argumento
y considera los siguientes palabreo; otro comando podría haber intentado acceder a los
archivos "Pinky", "y" y "Cerebro", por ejemplo). Para poder usar un espacio, lo más fácil es
entrecomillar el nombre entre apóstrofos:
anais@pepeluis:~/Documentos$ cd 'Pinky y Cerebro'
anais@pepeluis:~/Documentos/Pinky y Cerebro:$
También se pueden escribir las primeras letras y pulsar la tecla Tabulación para activar el
autocompletado. El resultado sera éste:
anais@pepeluis:~/Documentos$ cd Pinky\ y\ Cerebro
(de haber varias opciones posibles, mantener pulsada la tecla Tabulación para que
aparezcan todas en pantalla. Tecléense unas cuantas letras más, y vuélvase a probar)
La barra inversa (\), que se puede obtener en teclados españoles pulsando Alt Gr + º, es un
"carácter de escape". Esto significa que modifica el significado del carácter siguiente: por
ejemplo, \n significa "salto de línea". La barra es necesaria porque hay varios símbolos que
tienen un significado especial en Bash (el espacio es el más evidente). Si rodea un
argumento con apóstrofos, ninguno de estos símbolos usará su significado especial, pero
será imposible acceder a ninguna carpeta con apóstrofos.
Existen muchas formas de usar parámetros con apóstrofos, si se sabe sintaxis de Bash. A
este nivel básico, la forma más fácil y segura es sustituyendo el apóstrofo por '\.
Rutas
A estas horas ya habrá advertido el significado de la barra hacia adelante (/); la carpeta que
va después de ella está contenida dentro de la carpeta que va antes de ella. Una barra hacia
adelante suelta indica el directorio raíz
Cada vez que sea necesario escribir una ruta como un parámetro, se puede escribir:
explicitando la ruta exacta, en referencia al directorio raíz (si la ruta empieza con
una barra)
indicando la ruta en referencia a la carpeta actual (como se hizo en los ejemplos
anteriores)
en referencia a una de las siguientes abreviaturas (también se pueden usar solas)
o . para la carpeta actual. (Pinky y Cerebro sería sinónimo con ./Pinky y
Cerebro) Conveniente para mover archivos desde una carpeta arbitraria a la
carpeta actual, o para ejecutar scripts en la carpeta actual. Curiosamente, es
posible escribir rm experimento para borrar el archivo "experimento", pero
para arrancarlo es necesario escribir ./experimento, a menos que esté en una
de las carpetas clave. Es decir, el punto no es obligatorio para los
parámetros, pero sí para los nombres del programa a ejecutar.
o .. para el directorio inmediatamente superior. (muy fácilmente
combinable: ../.. indica el directorio superior del superior; ../../yinlao indica
la carpeta "yinlao" que está en el directorio superior del superior del actual;
etc.)
o ~ para la carpeta personal (depende de qué nombre haya usado para iniciar
sesión)
Opciones (un tipo especial de parámetros)
Regla número 3: las opciones se escriben anteponiendo un guion, si constan de una sola
letra; o dos, si constan de varias. En casi todos los comandos (o por lo menos en todos los
comandos de sistema) todas las opciones que se utilicen de una sola letra se pueden
contraer juntando todas las letras y usando un solo guion al principio. Esto funciona
excepto cuando las opciones necesiten, a su vez, parámetros; en este caso, el parámetro se
aplica a la última opción.
Ejemplo: ls -a -l equivale a ls -al
4.3. Ejecución de utilidades, y comandos
sudo
El programa sudo (del inglés substitute user do1 ,2 ) es una utilidad de los sistemas
operativos tipo Unix, como Linux, BSD, o Mac OS X, que permite a los usuarios ejecutar
programas con los privilegios de seguridad de otro usuario (normalmente el usuario root)
de manera segura. Se instala por defecto en /usr/bin.
apt (Advanced Packaging Tool o Herramienta Avanzada de Empaquetado) es el medio para
gestionar paquetes, ya sea instalar o eliminar programas. Para detalles sobre apt, puedes
dirigirte a este enlace.
Su analizamos el comando completo, nos daremos cuenta de que sudo apt-get, sería algo
como “hacerse super usuario para conseguir que el paquete“.
sudo apt-get install gimp
Si nos remitimos a la explicación previa, nos daremos cuenta de que estaríamos escribiendo
algo como “hacerse super usuario para conseguir que el paquete GIMP se instale“, no es
nada del otro mundo… no son comandos “come gente” o que se necesita muchos
conocimientos, es cuestión de saber que significa y que hace!.
sudo apt-get remove thunderbird
Aquí indicamos algo como “hacerse super usuario para conseguir que el paquete
thunderbird se remueva” como dije anteriormente, nada del otro mundo…
En algunas páginas, agregan el comando “purge” para eliminar, esto se usa para eliminar
por completo la aplicación incluyendo los archivos de configuración y la cache, vale la
pena mencionar que al remover sin purgar, las aplicaciones permanecen en cache por si
acaso mas adelante la volvamos a instalar y nos evitemos tener que descargar toda la
aplicación nuevamente incluyendo las librerías y dependencias de dicha aplicación.
Actualmente hay herramientas de limpieza que se encargan de esto, ubuntu tweak y
bleachbit son las mas populares (de momento), aunque si deseamos hacerlo mediante la
terminal, colocamos lo siguiente (usaremos el ejemplo de thunderbird):
Comandos de ayuda
Sintaxis Explicación
Información general autoexplicativa. Excesivamente detallada; clasifica
Info
los comandos según utilidad.
Manual completo (o casi completo) sobre un comando
man <comando> Existe un manual para el propio comando man, al que se accede por man
man
<comando> --
Ayuda básica sobre un comando (no todos la ofrecen)
help
<comando> --
Sintaxis básica sobre un comando (no todos la ofrecen)
usage
whatis
Información muy reducida sobre un comando
<comando>
apropos
Parecido al anterior
<comando>
Algunos comandos de utilidad en Linux
Instalaciones y configuraciones
apt-get install gdm Para instalar gdm. Esto se ejecuta si el paquete gdm esta en el
repositorio escogido en la [Link]
apt-get remove –purge paquete Desinstala y borra las configuraciones
apt-get remove paquete Desinstala paquete
apt-get update Para actualizar la lista de paquetes. Debe hacerse cada vez que se hacen
cambios en la [Link]
wget –c [Link] ... Para descargar desde una direccion (puede ser
tambien de una direccion http)
apt-cache show gdm Muestra las dependencias del paquete gdm
dpkg –i gdm Para instalar gdm (archivos .deb)hay que ponerse en el mismo directorio
donde esta el paquete
dpkg –r paquete para desinstalar
aptitude Para instalar paquetes. De esta forma tambien se instalaran las dependencias
(paquetes del que depende el paquete seleccionado para poder trabajar bien)
dpkg-reconfigure xserver-xorg Para configurar xorg
dpkg-reconfigure xserver-xfree86 Para configurar xfree86
dpkg-reconfigure gdm Para configurar gdm permite escoger también si hay varios gestores
instalados
knoppix lang=es En la instalacion de Kanoppix para poner al inicio el lenguaje espa;ol
después de boot
knoppix-installer Para instalar el cd-live de knoppix en el disco duro
apt-get ftp para instalr el ftp y poder hacerlo desde consola
apt-get –f Cuando hay paquetes rotos ejecutar esto
Usuarios y contraseñas
sudo root Para acceder al usuario root
sudo passwd root Cambia la contraseña de root (Activa la cuenta de root al iniciar Ubuntu
server)
sudo adduser username admin. Para adicionar el usuario admin
Trabajo con Consola
Ctrl.+shift+t Para abrir varias pestanas
Alt+f1, Alt+f2.. Para abrir varias consolas
Alt+ctrl.+f1, alt+ctrl.+f2… Para abrir varias consolas despues que se ha accedido al modo
grafico
Alt+ctrl.+f7 Para regresar al modo grafico del modo consola
Shift+page up Para subir y ver pantallas que no se ven en el modo consola
Shift+page down Para bajar y ver pantallas que no se ven en el modo consola
Nau + tab completa el comando (en este caso nautilus)
Varios
/etc/init.d/gdm restart Para reiniciar gdm (u otro servicio como exim4, ect)
/etc/init.d/gdm stop Para parar gdm
/etc/init.d/exim4 start Para iniciar exim4
exec startx para iniciar el servidor x
locale-gen para configurar los locales
mc Para llamar al editor de texto mc
cvs-makerepos para crear repositorios
make *.bin para compilar )bin aplicación en binario lenguaje de maquina)
cfdisk Para hacer particiones
5. Estructura de los comandos Linux
5.1. La entrada y salida estándar.
Una vez que se ejecuta un comando, se crea un proceso. Este proceso abre tres flujos:
stdin, denominado entrada estándar, en cuyo caso el proceso lee los datos de
entrada. De manera predeterminada, stdin se refiere al teclado. STDIN se identifica
con el número 0.
stdout, denominado salida estándar, en cuyo caso el proceso escribe los datos de
salida. De manera predeterminada, stdout se refiere a la pantalla. STDOUT se
identifica con el número 1.
stderr, denominado error estándar, en cuyo caso el proceso escribe los mensajes
del error. De manera predeterminada, stderr se refiere a la pantalla. STDERR se
identifica con el número 2.
Por lo tanto, de manera predeterminada, cada vez que se ejecuta un programa, los datos se
leen desde el teclado y el programa envía su salida y sus errores a la pantalla. Sin embargo,
también es posible leer datos desde cualquier dispositivo de entrada, incluso desde un
archivo, y enviar la salida a un dispositivo de visualización, un archivo, etc.
Vamos a explicar los usos que podemos dar estos tres canales para enviar y recoger los
datos que surgen de la ejecución de un script, comando o aplicación.
Standard input (stdin)
Stdin, o standard input son los datos que son enviados al programa, quizás para al usuario
de terminal sea el menos utilizado ya que lo normal suele ser interpretar los datos que el
programa o comando envía, y no al revés. Normalmente stdin es texto enviado por el
usuario, vamos a ver un ejemplo.
En un script en perl, podemos solicitar la interacción del usuario mediante STDIN, por
ejemplo en este caso recogemos mediante STDIN el valor de dos variables que el usuario
escribe:
#!/usr/bin/perl
print "Introduce tu nombre:\n";
my $nombre = <STDIN>;
print "Introduce tu apellido:\n";
my $apellido = <STDIN>;
Otro ejemplo que se me ocurre es el que puse en la entrada de automatizar comandos FTP,
en este caso a la conexión FTP le pasamos de antemano los comandos a ejecutar:
ftp -inv direccion_ip<<FINFTP
comando1
comando2
comando3
FINFTP
Standard output (stdout)
A través de la salida estándar, “stdout” se reciben los datos que vuelca el comando o
programa durante su ejecución, ejemplos sencillos de stdout serían por ejemplo el resultado
de un “ls”,”cat” o cualquier otro comando de terminal. En cambio, hay otros comandos o
programas que no muestran salida (a no ser que se especifique), como por ejemplo mover o
copiar ficheros. Como ya sabemos cualquiera de estos flujos de datos se puede manipular,
vamos a ver un ejemplo para comprender sus posibilidades.
Si hicieramos un “ls” a una carpeta, la salida de datos (stdout) se muestra en nuestra
terminal:
$ ls
backups cpq games local log opt spool www
cache crash lib lock mail run tmp
Para manipular la salida estándar, utilizaremos el símbolo “>”. Si por ejemplo quisieramos
que stdout fuera redirigido a un fichero de texto, haríamos así:
$ ls > [Link]
Como podrás comprobar, por pantalla no aparece el resultado del comando, sino que se ha
almacenado en el fichero indicado:
$ cat [Link]
backups cpq games local log opt spool www
cache crash lib lock mail run tmp
Standard error (stderr)
A través del canal stderr los programas o comandos suelen enviar el informe de error de la
ejecución de un comando en caso de fallar. En nuestros scripts o comandos podemos
combinar el uso de stdout y stderr para separar la salida estándar de los errores,
almacenarlos en registros independientes o manipularlos por separado.
En el siguiente ejemplo vamos a ejecutar un “ls” con parámetros incorrectos, por defecto la
salida de errores se volcará en pantalla (terminal):
$ ls -7
ls: opción incorrecta -- '7'
Pruebe `ls --help' para más información.
Si quisieramos almacenar los errores de la ejecución del comando en caso de suceder,
podemos volcarlos usando en lugar del símbolo “>” el número 2 seguido de “>”, “2>”:
$ ls -7 2> [Link]
Como puedes ver los errores ya no aparecen por pantalla, pero si abrimos el fichero de log
tenemos el registro del fallo:
$ cat [Link]
ls: opción incorrecta -- '7'
Pruebe `ls --help' para más información.
Si quisieramos redirigir tanto el stdout como stderr al mismo sitio, en lugar de especificar
dos veces el destino podemos hacerlo del siguiente modo “2>&1″. Vamos a ver un ejemplo
Stdout y stderr a un fichero de log:
$ ls -3 > [Link] 2>&1
5.2. Funcionalidades comunes a todos los comandos.
5.2.1. Completar comandos.
Por defecto, mientras escribimos un comando en la terminal podemos autocompletarlo si
presionamos la tecla Tab, pero si el comando está precedido por sudo no lo autocompleta.
Para arreglar esto hay que editar el archivo ~/.bashrc (si no lo tienes, créalo) con tu editor
preferido (gedit, nano, vim, kate…) y añadir estas líneas:
if [ "$PS1" ]; then
complete -cf sudo
fi
5.2.2. Conectar varios comandos.
Concatenar comandos:
con | hace que la salida del primero se convierta en la entrada del segundo.
[root@server ~]# cmd1 | cmd2
Con & hará que los dos (o más) comandos se ejecuten de manera simultanea.
[root@server ~]# cmd1 & cmd2
Con || El segundo comando se ejecutará si el primero termina sin éxito.
[root@server ~]# cmd1 || cmd2
Con && El segundo comando se ejecutará solo si el primero termina con éxito.
[root@server ~]# cmd1 && cmd2
Con ; El segundo comando se ejecutará sin importar el resultado del primero.
[root@server ~]# cmd1 ; cmd2
COMANDO CAT
Visualiza por la salida estándar el contenido de uno o varios archivos.
cat (concatenar)
Sintaxis:
$cat [-opciones] fichero1 fichero2 .......
El funcionamiento de esta orden es el siguiente: Lee secuencialmente cada archivo de
entrada y lo escribe en la salida estándar, la referencia de la orden concatenar establece un
grupo de archivos en una sola salida. Otros usos de esta orden permiten: crear, copiar,
concatenar o encolar los datos contenidos en los ficheros.
Opciones:
-b Numera todas las líneas de salida, menos las que están en blanco, comenzando
por 1.
-n Numera todas las líneas de salida.
-s Reemplaza múltiples líneas en blanco adyacentes en una sola línea.
-v Muestra los caracteres de control, y caracteres de 8 bits como ‘M-’.
-T Muestra las tabulaciones con ^I.
-E Visualiza ‘$’ al encontrar un retorno de carro.
-e Equivalente a -vE
-t Equivalente a -vT
-A Equivalente a -vET
Variantes en el uso de cat:
cat Si se utiliza sin argumentos, cat espera a que el usuario introduzca caracteres por
el teclado hasta que se pulsa CTRL-D. Las líneas introducidas se reproducen en la
salida estándar, (produce el efecto eco).
cat fichero Es el uso normal de esta orden. Muestra el contenido del fichero en la
salida estándar.
cat fichero1 fichero2 Visualiza varios ficheros.
cat > fichero Crea un fichero con lo que se escriba desde el terminal. Se termina
con ^D. Si el fichero existe, borra su contenido y lo graba de nuevo.
cat fichero1 > fichero2 Copia fichero1 en fichero2. Si había algo en fichero2
desaparecerá.
cat fichero1 fichero2 > fichero3 Concatena fichero1 y fichero2 y los almacena en
fichero3, permaneciendo invariables los dos primeros.
cat fichero1 >> fichero2 Encola o añade fichero1 en fichero2, el primero
permanece intacto.
cat >> fichero1 Añade al final del fichero
cat | more Si el archivo a visualizar es muy grande, podemos paginar la salida
Podemos utilizarlo para unir videos, por ejemplo:
Hice 2 capturas de video de mi escritorio, una llamada [Link] y la otra
[Link], luego las uní¬ con el comando cat, formando un nuevo video que apenas
termina la parte 1 muestra la parte 2 sin problemas, sin corte.
El archivo de salida, llamado acá “[Link]”, lo creará de los 2 videos anteriores.
cat [Link] [Link] >[Link]
5.2.3. Uso de comodines.
Caracteres “comodín”
Una característica importante de la mayoría de los intérpretes de comandos en Unix es la
capacidad para referirse a más de un archivo usando expresiones regulares. En su forma
más simple, esto consiste en la utilización de los llamados “comodines” que permiten
referirse a, por ejemplo, todos los archivos cuyo nombre contiene una determinada
secuencia de caracteres.
Los comodines “*” y “?”
El comodín “*” hace referencia cualquier cadena de caracteres en el nombre del archivo.
Cuando se usa el carácter “*” para referirse al nombre de un archivo, el intérprete de
comandos lo sustituye por todas las combinaciones posibles provenientes de los archivos en
el directorio al cual nos estamos refiriendo.
Veamos un ejemplo rápido. Supongamos que diego tiene los archivos hugo, paco y luis en
el directorio actual.
/home/diego$ ls
hugo luis paco
/home/diego$
Para listar todos los archivos con la letra “o” en su nombre, usamos la orden:
/home/diego$ ls *o*
hugo paco
/home/diego$
Como podemos ver, el comodín “*” ha sido sustituido con todas las combinaciones
posibles que coincidían de entre los archivos del directorio actual.
El uso de “*” solo, hace referencia a todos los archivos, puesto que todos los caracteres
coinciden con el comodín.
/home/diego$ ls *
hugo luis paco
/home/diego$
Veamos algunos otros ejemplos:
/home/diego$ ls h*
hugo
/home/diego$ ls *is
luis
/home/diego$ ls *u*
hugo luis
/home/diego$ ls p*o
paco
/home/diego$
El proceso de la sustitución de caracteres como “*” en nombres de archivos es llamado
“expansión de comodines” y es efectuado por el intérprete de comandos. Esto es
importante: los comandos, como ls, nunca ven el “*” en su lista de parámetros. Es el
intérprete quien expande los comodines para incluir todos los nombres de archivos que se
adaptan. Por lo tanto la orden:
/home/diego$ ls *o*
es expandida para obtener
/home/diego$ ls hugo paco
Otro carácter comodín es “?”. Este carácter comodín sólo expande un único carácter. Luego
“ls ?” mostrará todos los nombres de archivos con un carácter de longitud, y “ls termca?”,
por ejemplo, mostrará “termcap” pero no “[Link]”. Aquí tenemos otro ejemplo:
/home/diego$ ls hu?o
hugo
/home/diego$ ls p??o
paco
/home/diego$ ls ???s
luis
/home/diego$
Como podemos ver, los caracteres comodín nos permiten referirse a más de un archivo a la
vez. En el sumario de comandos básicos dijimos que cp y mv pueden copiar o mover
múltiples archivos de una vez. Por ejemplo:
/home/diego$ cp /etc/s* /home/diego
Copiará todos los archivos de /etc que comiencen con “s” al directorio /home/diego.
Los comodines y los archivos ocultos
Los comodines “*” y “?” no coincidirán con nombres de archivos que comiencen con un
punto (“.”). Estos archivos son tratados como ocultos. Los archivos de este tipo no son
mostrados en un listado normal de ls y no son afectados por el uso de “*” y “?”.
Por ejemplo, ya hemos mencionado que cada directorio tiene dos entradas especiales: “.”,
que hace referencia al directorio actual, y “..”, que se refiere al directorio padre. Como ya
hemos visto, al usar ls esas dos entradas no se muestran:
/home/diego$ ls
hugo luis paco
/home/diego$
Si usamos el parámetro “-a” con ls podremos ver nombres de archivos que comienzan con
“.”. Observemos:
/home/diego$ ls -a
. .. .bash_profile .bashrc hugo luis paco
/home/diego$
Ahora podemos ver las dos entradas especiales, “.” y “..”, así como otros dos archivos
ocultos: “.bash_profile” y “.bashrc”.
Estos dos archivos son usados en el arranque por el intérprete de comandos bash cuando
diego realiza el login.
5.2.4. Alias de comandos.
COMANDO alias:
El comando alias te permite crear un atajo a un comando. Como el nombre indica,
puedes establecer el nombre del alias/atajo para los comandos/rutas que sean muy largos
para recordarlos.
SINTAXIS:
La sintaxis es
alias [opciones] [ NombreAlias [ =String ] ]
OPCIONES:
-a Eliminar todos las definiciones de alias del entorno de ejecución shell actual.
-p Mostrar la lista de alias de la forma nombre alias=valor en el salida estándar.
EJEMPLO:
1. Para crear un atajo temporalmente:
alias lhost='cd /var/www/html'
Este comando establecerá lhost a cd /var/www/html/.
Ahora si escribes lhost te llevará a la carpeta especificada.
2. Para crear un atajo permanente:
Puedes poner tus alias en el archivo /home/user/.bashrc Es bueno añadirlos al final del
archivo. O utilizar el siguiente comando:
echo 'alias home=”cd /var/www/html/hscripts/linux-commands” ' >> ~/.bashrc && .
~/.bashrc
La parte "&& . ~/.bashrc" del comando anterior sirve para recargar el fichero y tener
disponible instantáneamente el alias añadido.
** alias home='cd /var/www/html/hscripts/linux-commands'
Ahora si escribes home te llevará a la carpeta especificada.
3. Para crear un atajo para un comando:
alias c='clear'
Este comando establecerá c a clear.
Ahora si escribes c borrará la pantalla.
Eliminación de un alias.
Para eliminar el alias "imagenes":
unalias imagenes
Ver los alias definidos.
Para visualizar un listado de los alias existentes:
alias
Si usamos los alias correctamente, nos permitirán ahorrarnos muchas pulsaciones de
teclado, así como ganar en agilidad y velocidad en el manejo del terminal.
5.3. La bash shell. , el cshell, XTERM
Linux dispone de una potente shell, llamada bash.
Introducción a la shell
El intérprete de comandos es la interfaz entre el usuario y el sistema operativo. Por esta
razón, se le da el nombre inglés "shell", que significa "caparazón".
Por lo tanto, la shell actúa como un intermediario entre el sistema operativo y el usuario
gracias a líneas de comando que este último introduce. Su función es la de leer la línea de
comandos, interpretar su significado, llevar a cabo el comando y después arrojar el
resultado por medio de las salidas.
La shell es un archivo ejecutable que debe interpretar los comandos, transmitirlos al sistema
y arrojar el resultado. Existen varios shells. La más común es sh (llamada "Bourne shell"),
bash ("Bourne again shell"), csh ("C Shell"), Tcsh ("Tenex C shell"), ksh ("Korn shell") y
zsh ("Zero shell"). Generalmente, sus nombres coinciden con el nombre del ejecutable.
Cada usuario tiene una shell predeterminada, la cual se activará cuando se abra un
indicador del comando. La shell predeterminada se especifica en el archivo de
configuración /etc/passwd en el último campo de la línea que corresponde al usuario. Es
posible cambiar de shell durante una sesión. Para esto, sólo debe ejecutar el archivo
ejecutable correspondiente, por ejemplo:
/bin/bash
Indicador del sistema
La shell se inicia al leer su configuración completa (en un archivo del directorio /etc/) y
después al leer la configuración propia del usuario (en un archivo oculto cuyo nombre
comienza con un punto y que se ubica en el directorio básico del usuario, es decir
/home/user_name/.configuration_file). A continuación, aparece el siguiente indicador
(prompt en inglés):
equipo:/directorio/actual$
De manera predeterminada, para la mayoría de las shells, el indicador consiste en el nombre
del equipo, seguido de dos puntos (:), el directorio actual y después un carácter que indica
el tipo de usuario conectado:
"$" especifica un usuario normal
"#" especifica el administrador, llamado "root"
BASH
Descripción
BASH es un shell de Unix (intérprete de comandos de Unix) escrito para el proyecto GNU.
Su nombre es un acrónimo de bourne-again shell (otro shell bourne); haciendo un juego de
palabras (born-again significa renacimiento) sobre el Bourne shell (sh), que fue uno de los
primeros shells importantes de Unix.
BASH es el shell por defecto en la mayoría de sistemas GNU/Linux, además de Mac OS X
Tiger, y puede ejecutarse en la mayoría de los sistemas operativos tipo UNIX. También se
ha portado a Microsoft Windows por el proyecto Cygwin.
SINTAXIS
La sintaxis de órdenes de bash es un superconjunto de la sintaxis del shell Bourne. La
especificación definitiva de la sintaxis de órdenes de bash, puede encontrarse en el BASH
Reference Manual distribuido por el proyecto GNU. Esta sección destaca algunas de las
características únicas de bash.
Características únicas de BASH
La mayoría de los shell scripts (guiones de órdenes) Bourne pueden ejecutarse por bash sin
ningún cambio, con la excepción de aquellos scripts de shell Bourne que hacen referencia a
variables especiales de Bourne o que utilizan una orden interna de Bourne.
La sintaxis de órdenes de bash incluye ideas tomadas desde el Korn Shell (ksh) y el C Shell
(csh), como la edición de la línea de órdenes, el historial de órdenes, la pila de directorios,
las variables $RANDOM y $PPID, y la sintaxis de substitución de órdenes POSIX: $(...).
Cuando se utiliza como un intérprete de órdenes interactivo, bash proporciona
autocompletado de nombres de programas, nombres de archivos, nombres de variables, etc,
cuando el usuario pulsa la tecla TAB.
Los scripts de bash reciben los parámetros que le pasa la shell como $1, $2, ..., $n.
Podemos saber cuantos hemos recibido con el símbolo $#.
Ejemplo de uso
Por ejemplo, si nuestro script necesita dos parámetros pondremos:
if [ $# -lt 1 ]; then
echo "Necesitas pasar dos parámetros"
fi
Hola mundo en BASH
Para empezar, haré una mención al simplismo "Hola mundo" de BASH, y también lo
explicare.
#!/bin/bash
# Script de hola mundo
echo "hola mundo"
Salida:
hola mundo
Explicación
Es muy simple, en realidad. Lo que hacemos aquí al escribir primero "#!/bin/bash", es
llamar a nuestra shell BASH, que por lo general se ubica en /bin/bash, pero podría estar en
otro lugar, así que si no la tenemos ahí se ejecutara el comando "locate bash" desde nuestra
terminal, o bien si no tenemos locate podemos usar "which bash" o bien desde nuestro
directorio raiz ( / ) ejecutamos "find bash" para localizar la ruta del programa bash.
Comentario en BASH
Pero ¿el símbolo '#' escrito al inicio de una linea, es un comentario? En realidad sí, como en
la segunda linea vemos, eso es un comentario, es decir, algo que no es interpretado y está
ahí para que el programador/coder/scripter se ubique y sepa que es lo que hace el código,
esto ayuda a tener mejor orden y al corregir el codigo si tiene BUGS. Pero la excepción a
esto, es al escribir #!/ruta/de/interprete , esto nos sirve para llamar a nuestro interprete,
como perl, bash, sh, python, etc, (que son otros lenguajes) y se usa para los lenguajes
interpretados, de modo que se ejecuten en donde corresponde....
Imprimiendo en BASH
Por último tenemos el comando echo, como en batch, que sirve para imprimir texto en la
pantalla.
Xterm
Xterm es un emulador de terminal para el sistema de ventanas X Window System aunque
su origen es anterior a este.
Fue desarrollado originalmente como un emulador de terminal independiente para la
VAXStation 100 (VS100) por Mark Vandevoorde, un estudiante de Jim Gettys, en 1984, al
mismo tiempo que el trabajo en X Window System empezó.
C Shell es un lenguaje de programación, conocido también como csh y que fue desarrollado
por Bill Joy en la Universidad de Berkeley, California. Se le considera más idóneo para
programadores que Bourne Shell (sh), además de hacer reflejar que la informática se estaba
haciendo más interactiva. Hoy día, el original C Shell, no goza de un amplio uso en Unix;
ha sido superado por otros Shells [1], como Tenex C Shell (tcsh) basado en el código
original C Shell, pero incorporando finalización de nombres a ficheros, y edición a
comandos de línea, comparables a Korn Shell (Ksh), y el GNU Bourne-Again Shell (Bash).
Otro C Shell modernizado, y de desarrollo independiente, creado por Nicole Hamilton, aún
subsiste en Windows, bajo la forma de Hamilton C Shell.
Algunos datos acerca de C Shell
• Su sintaxis es muy parecida al lenguaje de programación C, razón por
la cual los archivos de secuencias de shell escritos para csh con frecuencia no pueden
ejecutarse bajo bash o ksh.
• Edición de comandos, históricos y asignación de alias son alguna de
las características de shell C deseables que no son disponibles en Bourne.
• Su indicador es el signo de porcentaje (%).
• El programa ejecutable para este shell se encuentra en el archivo
/bin/csh (Linux).
6. Comandos y filtros para procesar archivos de texto
6.1. Streems, pipes y redirecciones
Redirecciones y Pipes
Cuando utilizamos la consola a menudo la salida de un comando la tenemos que aprovechar
en otro, preferiríamos que la salida se nos guardase directamente en un fichero, o
simplemente deseamos utilizar cierta información de la salida de dicho comando. En
GNU/Linux, hay dos mecanismos que nos facilitan enormemente esta tarea, y que con la
costumbre llegan a ser casi imprescindibles: las redirecciones, y los pipes (o tuberías).
Redirecciones
En GNU/Linux, al final todo es tratado como si fuera un fichero y como tal, tenemos
descriptores de fichero para aquellos puntos donde queramos acceder. Hay unos
descriptores de ficehro por defecto:
0: Entrada estándar (normalmente el teclado).
1: Salida estándar (normalmente la consola).
2: Salida de error.
Para redirigir las salidas utilizaremos el descriptor de fichero seguido del símbolo '>' (o <
si redirigimos la entrada hacia un comando, pero eso todavía no lo explicaremos). Veamos
unos ejemplos:
$ ls -l >fichero
Guarda la salida de ls -l en fichero. Si no existe lo crea, y si existe lo sobreescribe.
$ ls -l >>fichero
Añade la salida del comando a fichero. Si no existe lo crea, y si existe, lo añade al final.
$ ls -l 2>fichero
Si hay algún error, lo guarda en fichero (podría salir un error si no tuviéramos permiso de
lectura en el directorio).
Es importante ver que si no se especifica el descriptor de fichero se asume que se
redirige la salida estándar. En el caso del operador < se redirige la entrada estándar, es
decir, el contenido del fichero que especificáramos, se pararía como parámetro al comando.
Si quisiéramos redirigir todas las salidas a la vez havia un mismo fichero, podríamos
utilizar >&. Además, con el carácter & podemos redirigir salidas de un tipo hacia otras, por
ejemplo, si quisiéramos redirigir la salida de error hacia la salida estándar podríamos
indicarlo con: 2>&1. Es importante tener en cuenta que el orden de las redirecciones es
significativo: se ejecutarán de izquierda a derecha.
Tuberías o pipes
Este mecanismo nos permite pasar la salida de un comando a otro. Para ello se usa la
sintaxis: <comando1> | <comando2>. Con esto, la salida de comando1 será la entrada de
comando2. Vamos a ver unos ejemplos:
$ rpm -qa | grep <nombre_paquete>
El primero de los dos comandos nos haría una lista de todos los paquetes instalados.
Imaginemos que sólo queremos saber si tenemos instalado uno en concreto. Con el segundo
comando limitamos la salida a los paquetes que en el nombre que contengan el patrón que
especificamos en <nombre_paquete>. Por ejemplo, para saber si tenemos instalado algún
paquete llamado glibc haríamos:
$ rpm -qa | grep "glibc"
grep es un parseador de expresiones regulares, es decir, le damos un patrón y un fichero (o
introducimos lo que sea por consola, o lo pasamos con un pipe) y de ese texto nos devuelve
sólo loq eu coincide con el patrón. Este es el funcionamiento básico de grep pero es
muchísimo más potente. Para más información: man grep.
Otro ejemplo útil seria, por ejemplo, cuando queremos saber el PID de un proceso. En vez
de mostrarlos todos y tener que buscarlo podríamos hacer:
$ ps -e | grep <nombre_proceso>
y así nos mostraría sólo las líneas que contuvieran <nombre_proceso> (es decir,
limitaríamos la salida al proceso que queremos).
6.2. Redireccionar la salida estándar, la entrada estándar y
la salida de errores.
Es posible cambiar la fuente de la entrada o el destino de la salida de los comandos
toda la E/S se hace a través de ficheros
cada proceso tiene asociados 3 ficheros para la E/S
Nombre Descriptor de fichero Destino por defecto
entrada estándar (stdin) 0 teclado
salida estándar (stdout) 1 pantalla
error estándar (stderr) 2 pantalla
o por defecto, un proceso toma su entrada de la entrada estándar, envía su
salida a la salida estándar y los mensajes de error a la salida de error
estándar
Ejemplo
$ ls /bin/bash /kaka
ls: /kaka: No hay tal fichero o directorio # Error
/bin/bash # Salida estándar
$
Para cambiar la entrada/salida se usan los siguientes caracteres:
Carácter Resultado
comando < fichero Toma la entrada de fichero
comando > fichero Envía la salida de comando a fichero; sobreescribe cualquier cosa
de fichero
comando 2> fichero Envía la salida de error de comando a fichero (el 2 puede ser
reemplazado por otro descriptor de fichero)
comando >> fichero Añade la salida de comando al final de fichero
comando << etiqueta Toma la entrada para comando de las siguientes lineas, hasta una
línea que tiene sólo etiqueta
comando 2>&1 Envía la salida de error a la salida estándar (el 1 y el 2 pueden ser
reemplazado por otro descriptor de fichero, p.e. 1>&2)
comando &> fichero Envía la salida estándar y de error a fichero; equivale a comando >
fichero 2>&1
comando1 | comando2 pasa la salida de comando1 a la entrada de comando2 (pipe)
Ejemplos
ls -l > [Link]
Crea el fichero [Link] conteniendo la salida de ls -l
ls -l /etc >> [Link]
Añade a [Link] el contenido del directorio /etc
cat < [Link] | more
Muestra el contenido de [Link] página a página (equivale a more
[Link])
ls /kaka 2> /dev/null
Envía los mensajes de error al dispositivo nulo (a la basura)
> kk
Crea el fichero kk vacío
cat > entrada
Lee información del teclado, hasta que se teclea Ctrl-D; copia todo al fichero
entrada
cat << END > entrada
Lee información del teclado, hasta que se introduce una línea con END; copia todo
al fichero entrada
ls -l /bin/bash /kaka > salida 2> error
Redirige la salida estándar al fichero salida y la salida de error al fichero error
ls -l /bin/bash /kaka > [Link] 2>&1
Redirige la salida estándar y de error al fichero [Link]; el orden es
importante:
ls -l /bin/bash /kaka 2>&1 > [Link]
no funciona, por qué?
ls -l /bin/bash /kaka &> [Link]
Igual que el anterior
cat /etc/passwd > /dev/tty2
Muestra el contenido de /etc/passwd en el terminal tty2
o usar el comando tty para ver el nombre del terminal en el que estamos
6.3. Enlazar la salida de un comando con la entrada de
otro mediante pipes (tuberías).
Uno de los principios de la filosofía Unix consiste en tener aplicaciones muy pequeñas que
hagan tareas muy puntuales y que usadas en conjunto puedan realizar tareas complejas.
Entonces, siguiendo este principio debe existir una forma para que varias aplicaciones
puedan interactuar entre sí, aquí es donde entran las tuberías.
Recordando: Una tubería en Linux no es más que una forma práctica de redireccionar la
salida estándar de un programa hacia la entrada estándar de otro. Esto se logra usando el
símbolo | (pipe).
Por ejemplo, podríamos ver los procesos que están corriendo en el sistema usando ps y le
redireccionamos la salida a sort para que los ordene por PID:
$ ps -a | sort
También podemos redireccionar la salida estándar del comando cat y pasarla como entrada
estándar del comando wc para contar las líneas y palabras de un archivo:
$ cat [Link] | wc
Por ejemplo, supongamos que quieres encontrar el número de archivos que hay en un
directorio mostrando una lista de ellos y luego contando las líneas. Una manera fácil de
hacer esto es escribir la salida con el comando ls hacia un archivo temporal y luego
contarlos desde ahí usando el comando wc -l (wc por "word count", "contar palabras").
Linux hace esto fácil, permitiendo la escritura de archivos usando la redirección de salida,
lo que esta representado en la consola por el signo "mayor que" (>). Como un ejemplo, para
escribir la salida del comando ls a un archivo temporal /tmp/mi_directorio.txt podemos
hacer lo siguiente:
$ ls > /tmp/mi_directorio.txt
Y luego , como habíamos dicho antes, usar wc -l:
$ wc -l /tmp/mi_directorio.txt
Al parecer en el directorio actual hay ocho archivos. Pero, usar un archivo temporal
requiere de un poco más de escritura ya que además hay que borrarlo. Afortunadamente,
Linux nos trae otro símbolo especial para salvarnos, la barra vertical (|), que nos permite
conectar la salida de un comando a la entrada de otro. Este símbolo es conocido como pipe
(significa tubería o cañería, en español), y lo puedes usar para evitar el uso de un archivo
temporal:
$ ls | wc -l
(Salida de ls entubada directamente hacia wc -l, que la toma como pseudofichero temporal
de entrada)
6.4. Redireccionar la salida estándar a un archivo.
Una redirección consiste en trasladar la información de un tipo a otro, por ejemplo de la
salida estándar a la entrada estándar o del error estándar a la salida estándar. Esto lo
logramos usando el símbolo >.
Por ejemplo, para redireccionar la salida de un comando y volcarla a un archivo bastaría
con ejecutar:
$ ls -la ~ > [Link]
6.5. Uso de los comandos tee y xargs.
En el punto anterior sobre las tuberías, usted aprendió cómo tomar la salida de un comando
y utilizarla como la entrada a otro comando. Supongamos en cambio, que quiera utilizar la
salida de un comando o los contenidos de un archivo como argumento a un comando en
lugar de como entrada. Las tuberías no funcionarían en ese caso.
Comandos útiles con pipes y redirecciones
1. tee
o copia la entrada estándar a la salida estándar y también al fichero indicado
como argumento:
ls -l | tee [Link] | less
Muestra la salida de ls -l página a página y la almacena en
[Link]
o Opciones:
-a: no sobreescribe el fichero, añade al final
2. xargs
o permite pasar un elevado número de argumentos a otros comandos
o lee la entrada estándar, y ejecuta el comando uno o más veces, tomando
como argumentos la entrada estándar (ignorando líneas en blanco)
o Ejemplos:
$ locate README | xargs cat | fmt -60 >\
/home/pepe/readmes
locate encuentra los ficheros README; mediante xargs los ficheros se
envían a cat que muestra su contenido; este se formatea a 60 caracteres por
fila con fmt y se envía al fichero readmes
$ locate README | xargs -i cp {} /tmp/
copia los README en el directorio /tmp; la opción -i permite que {} sea
reemplazado por los nombres de los ficheros
3. exec
o ejecuta un programa reemplazando el shell actual con el programa (es decir,
al programa se le asigna el PID del shell, dejando el shell de existir)
$ echo $$ #$$ indica el PID del shell actual
4946
$ exec sleep 20
En otro terminal, ejecutamos
$ ps a | grep 4946
4946 pts/13 Ss+ 0:00 sleep 20
o si no se especifica el programa, exec puede usarse para redireccionar las
entradas y salidas
Redirecciona la salida estándar a el fichero /tmp/salida
$ exec > /tmp/salida
Redirecciona el fichero /tmp/entrada como entrada estándar
$ exec < /tmp/entrada
6.6. Utilización de los comandos disponibles en Linux:
Algunos comandos Linux, descripción, ejemplos de uso
COMANDO DESCRIPCIÓN EJEMPLO
Cambia el usuario actual a
nombreusuario (pedirá la
su nombreusuario contraseña del usuario con el su root
que queramos iniciar la
sesión)
Muestra los usuarios
who –u who -u
conectados al sistema
Muestra la fecha y hora del
who -b who -b
último reinicio del sistema
Muestra todos los procesos
en ejecución y el
ps –A ps -A
identificador de proceso
(PID)
Muestra todos los procesos
ps -A | grep bash ps -A | grep bash
que lleven la palabra "bash"
Muestra los procesos y los
ps -fu Oracle usuarios que los ejecutan en ps -fu oracle
formato UNIX
Muestra los procesos
ps -e -orss=,args= | sort -b - ordenados por uso de ps -e -orss=,args= | sort -b -
k1,1n | pr -TW$COLUMNS memoria (los que más k1,1n | pr -TW$COLUMNS
memoria usan al final)
Procesos activos del sistema
Pstree jerarquizados en forma de pstree
árbol
Cierra el proceso
kill -9 numeroproceso especificado por el PID kill -9 745
(numeroproceso)
Lista los ficheros y
ls –l directorios de la ubicación ls -l
actual
ls –lSrh Muestra una lista de los ls -lSrh
ficheros de una carpeta
ordenados por tamaño (los
más grandes al final)
Ejecuta el fichero de script
sh nombreficherosh sh [Link]
especificado
Ejecuta la aplicación
./nombrefichero ./mysql
especificada
Instala la aplicación
especificada (si se tiene
apt-get install
conexión a Internet), sólo apt-get install mysql-server
nombreaplicacion
disponible en distribuciones
Debian
Actualiza la base de datos de
paquetes a actualizar o
instalar a partir del fichero
'/etc/apt/[Link]'. La base
apt-get update apt-get update
de datos la constituyen un
conjunto de ficheros
ubicados en
'/var/lib/apt/lists/'
Actualiza todos los paquetes
apt-get upgrade instalados en el sistema a la apt-get upgrade
última versión disponible
Comprueba la correcta
instalación de los paquetes
descargados en
'/var/cache/apt/archives/',
apt-get install –f apt-get install -f
repitiendo la instalación si
fuese necesario o bajando
algún paquete dependiente
que no se haya descargado
Elimina todos los paquetes
(.deb) descargados
apt-get clean (almacenados apt-get clean
automáticamente en
'/var/cache/apt/archives/')
cp nombrefichero Copia uno o varios (*) cp * /usr/bin
carpetadestino ficheros a la carpeta
especificada
Mueve una carpeta/fichero al
destino especificado,
mv nombrecarpeta
también sirve para mv /home/alonso /etc
carpetadestino
renombrar
ficheros/directorios
Busca una aplicación en la
lista de aplicaciones a
apt-cache search datoabuscar ap-cache search mysql
instalar (sólo distribuciones
Debian)
Muestra el usuario con el
whoami que se ha iniciado la sesión whoami
de terminal
Muestra el directorio de
pwd pwd
trabajo actual
Muestra la IP del pc y la
ifconfig ifconfig
configuración de red
Muestra información de las
tarjetas de red inalámbrica
iwconfig iwconfig wlan0
(wireless) que haya
instaladas en el equipo
ping host Realiza ping entre pcs ping [Link]
Detiene los servicios de red
ifconfig id_tarjeta down de la tarjeta especificada ifconfig eth0 down
(id_tarjeta)
Inicia los servicios de red de
ifconfig id_tarjeta up la tarjeta especificada ifconfig eth0 up
(id_tarjeta)
Muestra información de la
route route
tabla de enrutación de la red
Añade como puerta de
route add default gw enlace (gateway) por defecto route add default gw
ip_puerta_enlace id_tarjeta la indicada en [Link] eth0
ip_puerta_enlace
passwd nombreusuario Cambia la contraseña al passwd alonso
usuario especificado
Muestra el contenido de un
cat nombrefichero cat /etc/mysql/[Link]
fichero (de texto)
Utililidad que sirve para
modificar ficheros de texto
plano:
pulse "i" para editar
vi nombrefichero el fichero. vi /etc/mysql/[Link]
pulse "ESCAPE", a
continuación ":wq" e
INTRO para guardar
los cambios y cerrar
el fichero.
Ejecuta el comando
especificado con los
sudo apt-get install mysql-
sudo comando usuario derechos del usuario
server root
especificado (pedirá la
contraseña de este usuario)
Muestra el tamaño de todos
los subdirectorios del
directorio especificado y el
tamaño total del mismo .
-h: Muestra el resultado en
du nombredirectorio -h -s unidades entendibles por el du -sh /home
usuario (Bytes, MB, GB,
etc).
-s: no muestra el tamaño de
los subdirectorios, sí lo tiene
en cuenta para el tamaño
total de la carpeta
Borra / elimina el fichero
rm nombrefichero rm /home/alonso/[Link]
especificado
Elimina uno o varios
ficheros sin pedir
rm -f -v confirmación (-f), mostrando rm -f -v fernando*
los ficheros que va
eliminando (-v)
Elimina un fichero de forma
segura (ya no podrá ser
recuperado). El comando
shred -u nombre_fichero shred -u "fernando alonso"
"rm" no elimina ficheros
completamente, podrían ser
recuperados
Elimina una carpeta
completa y todas sus
subcarpetas:
-f: no pide confirmación al
eliminar.
rm -f -r -v nombre_carpeta rm -f -r -v /home/alonso
-r: elimina recursivamente
carpetas y subcarpetas y su
contenido.
-v: muestra el nombre de los
ficheros y carpetas que va
eliminando.
date Muestra la hora y la fecha date
Cambia los segundos, los
date --set="día mes hora en minutos, la hora, el día, el date --set="14 DEC 2011
formato" mes y el año de la fecha del [Link]"
sistema
date +%Y%m%d -s Cambia el día, el mes y el date +%Y%m%d -s
"20111214" año de la fecha del sistema "20111214"
Muestra un calendario del
cal mes año cal 12 2005
mes y año especificados
Muestra ayuda sobre el
man comando man ifconfig
comando especificado
Cambia del directorio actual
cd nombredirectorio cd /usr/bin
al directorio especificado
mkdir nombredirectorio Crea un directorio mkdir prueba
Elimina el directorio
rmdir nombredirectorio especificado (debe estar rmdir prueba
vacío)
rm -r nombredirectorio Elimina el directorio rm -r prueba
especificado y todo su
contenido
Muestra el tipo de archivo o
directorio. Las posibles
salidas:
ASCII English text
file nombrefichero directory file cdrom
symbolic link to
'enlace'
executable
...
Busca ficheros coincidentes
find expresionbusqueda con la expresión de find . -name "*mysql*" -print
búsqueda
Muestra los ficheros de
find -size +500000 find -size +500000
tamaño superior a 500 MB
Muestra el CRC del fichero
cksum nombrefichero cksum isoinfo
y el tamaño en bytes
grep MemTotal Muestra la memoria RAM grep MemTotal
/proc/meminfo total del sistema /proc/meminfo
Muestra la cantidad de
grep SwapTotal grep SwapTotal
espacio swap del sistema
/proc/meminfo /proc/meminfo
(memoria de intercambio)
Muestra las unidades de
disco, el tamaño y el espacio
libre.
df -h df -h
-h: muestra el resultado en
unidades entendibles por el
usuario (M= Megabytes,
G=Gigabytes, etc).
Muestra el espacio libre,
df . -h ocupado y total del disco df . -h
actual
Muestra información del
sistema. uname -a es
equivalente a uname -
snrvmpio, donde:
-s: nombre del
kernel.
-n: nombre del
equipo en la red
(host).
-r: release del kernel.
uname -a uname -a
-v: versión del
kernel.
-m: nombre hardware
de la máquina.
-p: tipo de
procesador.
-i: tipo de plataforma
hardware.
-o: nombre sistema
operativo.
Muestra y modifica las
tablas de conversión de
direcciones IP en direcciones
arp físicas que usa el protocolo arp -i eth0
de resolución de direcciones
(ARP ó Address Resolution
Protocol)
Asigna al fichero
nombrearchivo permisos del
chmod 777 nombrearchivo lectura, escritura y ejecución chmod 777 prueba
para el propietario, grupo e
invitado
Cambia el propietario del
chown nombreusuario
archivo nombrearchivo a chown alonso prueba
nombrearchivo
nombreusuario
date --set=15:30 Cambia la hora del sistema a date --set=15:30
las 15:30
Elimina el usuario
deluser nombreusuario nombreusuario y todos sus deluser alonso
archivos de configuración
Muestra el driver de la
discover --xdriver video discover --xdriver video
tarjeta de video
Muestra el driver de la
discover ethernet discover ethernet
tarjeta de red
Muestra el valor de la
variable de entorno
echo $NOMBREVARIABLE echo $HOSTNAME
especificada
(nombrevariable)
Muestra las variables de
env entorno definidas para el env
usuario actual
Muestra la estructura y tipo
fdisk -l fdisk -l
de particiones
Busca todos los ficheros que
find / -name mysql* -exec rm find / -name mysql* -exec rm
comiencen por "mysql" y los
{} ; {};
ELIMINA
Muestra información sobre
free la memoria RAM y Swap free
(total, libre y ocupada)
Comprueba el sistema de
fsck /dev/hda1 fsck /dev/hda1
ficheros de la partición hda1
Compila
"nombreprograma.c" y
gcc -o nombreprograma
devuelve el gcc -o prueba prueba.c
ficheroresultante.c
ficheroresultante.c
compilado
Muestra los grupos de
groups seguridad a los que groups
pertenece el usuario actual
groupadd nombregrupo Añade un nuevo grupo de groupadd leerayuda
seguridad
Descomprime y
gunzip [Link] | tar -xvf gunzip [Link] | tar -xvf
desempaqueta el archivo
[Link] [Link]
'[Link]'
Comprime el archivo
gzip fichero "fichero", renomb?andolo a gzip mysql
'[Link]'
Desempaqueta el archivo
tar xvf [Link] tar xvf [Link]
"[Link]"
Comprime/Empaqueta los
tar -czvf fichero_tar ficheros especificados en tar -czvf /tmp/[Link]
ficheros_comprimir "ficheros_comprimir" en el /root/*
fichero "fichero_tar"
Muestra el contenido del
tar -tzvf fichero_tar fichero "fichero_tar" tar -tzvf /tmp/[Link]
(comprimido con "tar")
Muestra el contenido del
tar -tzvf /dev/st0 dispositivo de copia de tar -tzvf /dev/st0
seguridad "/dev"st0"
Descomprime el contenido
del dispositivo de copia de
tar -czvf /dev/st0 seguridad "/dev/st0" en la tar -czvf /dev/st0
ubicación donde se ejecute el
comando
Muestra las 10 primeras
head nombrefichero líneas del fichero head mysql
nombrefichero
Listado de los comandos
history history
utilizados por el usuario
Reinicia el servicio
nombreservicio -k restart httpd -k restart
nombreservicio
ifdown eth0 Para el servicio de red 'eth0' ifdown eth0
Arranca el servicio de red
ifup eth0 ifup eth0
'eth0'
netstat -a Muestra los puertos abiertos netstat -a
Muestra las conexiones
netstat -atun | grep ESTAB establecidas a puertos netstat -atun | grep ESTAB
determinados
Muestra la ubicación del
type comando type ifconfig
comando especificado
Monta la unidad de cdrom en
modo sólo lectura (r), con
mount -rt iso9660 /dev/hdc sistema de ficheros (t) mount -rt iso9660 /dev/hdc
/cdrom 'iso9660', en el dispositivo /cdrom
'/dev/hdc', disponible en el
directorio '/cdrom'
Monta la unidad de disquete,
con sistema de ficheros 'MS-
mount -t msdos /dev/fd0 mount -t msdos /dev/fd0
DOS', en el dispositivo
/floppy /floppy
'/dev/fd0', disponible en el
directorio '/floppy'
Desmonta el dispositivo
umount /dispositivo umount /cdrom
especificado
Desmonta todas las unidades
umount -a umount -a
y dispositivos montados
Muestra las líneas, palabras
wc nombrefichero y caracteres del fichero wc prueba
especificado
Muestra información del
dominio especificado (fecha
whois nombredominio whois [Link]
registro, fecha expiración,
dns, ...)
Realiza control remoto al
equipo con la IP especificada
(deberá tener instalado y en
xvncviewer ip ejecución vncserver). xvncviewer [Link]
Permite el control remoto
tanto con PCs con Linux
como con PCs con Windows
which comando Localiza la ubicación del which ls
comando especificado
Descarga el fichero
wget [Link]
nombrefichero de la
wget (en este caso el ftp debe
dirección ftp direccionftp.
direccionftp/nombrefichero soportar conexiones
También sirve para conexión
anónimas)
mediante http
Añade un nuevo grupo de
addgroup nombregrupo addgroup accesored
seguridad
Añade un nuevo usuario con
useradd -g nombregrupo el nombre nombreusuario
useradd -g root alonso
nombreusuario perteneciente al grupo
nombregrupo
Elimina un usuario del
userdel nombre_usuario userdel ajpdsoft
sistema
Convierte a minúsculas
tr 'A-Z' 'a-z' < [Link] todos los caracteres del tr 'A-Z' 'a-z' < prueba
archivo '[Link]'
Muestra información de los
procesos que se están
ejecutando, uso de CPU,
memoria, PID, ... con la
top top
característica de que se va
actualizando cada 5
segundos o tras pulsar la
barra espaciadora
Muestra las últimas diez
tail nombrefichero líneas del fichero tail [Link]
nombrefichero
Reinicia el sistema en los
minutos especificados,
shutdown 15 'El sistema se
previamente envía un
shutdown minutos 'mensaje' reiniciará en 15 minutos,
mensaje a todos los usuarios
guarde su información'
conectados con el texto:
mensaje
Apaga el sistema
shutdown -h now instantáneamente shutdown -h now
(equivalente a halt o init 0)
Reiniciar el sistema
shutdown -r now instantáneamete (equivalente shutdown -r now
a reboot o init 6)
Reinicia el equipo a la hora y
shutdown -r hh:mm shutdown -r 20:00
minuto indicada
Copia todo el disco duro
cat /dev/hda > /dev/hdb cat /dev/hda > /dev/hdb
'hda' en el disco duro 'hdb'
Crea la imagen ISO-9660 del
cat /dev/cdrom > CD-ROM introducido, con cat /dev/cdrom >
/usr/[Link] el nombre '[Link]' en el /usr/[Link]
directorio '/usr'
Cambia el grupo del archivo
chgrp grupo archivo especificado al grupo chgrp accesored [Link]
especificado
sqlplus /nolog
Si tenemos Oracle instalado
sqlplus /nolog connect / as sysdba
se conectará a la BD
select status from v$instance
Muestra el navegador de
hardware (modo gráfico):
hwbrowser& discos duros, SCSI, CD- hwbrowser&
ROM, USB, Unidades de
cinta, etc
Ejecuta repetidamente el
comando entre comillas y
watch "comando" watch "du -s -h"
muestra el resultado en
pantalla
Busca los archivos
whereis ls
whereis ejecutables, las fuentes y el
manual de un comando whereis man
Desactiva la tarjeta de red
ifdown eth0 ifdown eth0
especificada (eth0)
Activa la tarjeta de red
ifup eth0 ifup eth0
especificada (eth0)
chkconfig Muestra/Modifica el estado chkconfig --list dbora
de los servicios del sistema
en cada nivel de arranque
(runlevel)
Añade/Elimina módulos del
modprobe modprobe qla2300
Kernel de Linux
Muestra estadísticas de uso
de la memoria, cpu,
vmstat watch "vmstat -s -S: M"
lectuas/escrituras en disco,
etc
Muestra estadísticas de uso
free watch "free -m"
de la memoria
Muestra el estado de los
lsmod módulos en el Kernel de lsmod
Linux
En el directorio init.d se
guardan todos los servicios
cd /etc/init.d instalados en el equipo, cd /etc/init.d
accediendo a este directorio
ls -l y haciendo un ls -l se pueden ls -l
ver
Muestra el estado del
service nombre_servicio servicio especificado
service dsmserv status
status "nombre_servicio": stopped,
se está ejecutando, ...
Inicia el servicio
service nombre_servicio start especificado service dsmserv start
"nombre_servicio"
Detiene el servicio
service nombre_servicio stop especificado service dsmserv stop
"nombre_servicio"
Reinicia el servicio
service nombre_servicio
especificado service dsmserv restart
restart
"nombre_servicio"
Cambia el valor de una export
export nombrevariable=valor
variable de entorno $PATH=/home/oracle/bin
echo nombrevariable Muestra el valor de la echo $PATH
variable de entorno
nombrevariable
Muestra todas las variables
set set
de entorno shell y su valor
Inicia el programa rman,
$ORACLE_HOME/bin/rman $ORACLE_HOME/bin/rman
para copias de seguridad de
target=/ target=/
Oracle en caliente
Muestra la IP de la interfaz
hostname -i de red actual del equipo hostname -i
(normalmente eth0)
Muestra el estado actual de
ethtool eth0 la interfaz de red indicada ethtool eth0
"eth0"
Permite cambiar de forma
ethtool --change eth0 autoneg manual la velocidad del ethtool --change eth0 autoneg
off speed 100 duplex full interfaz de red indicado, en off speed 100 duplex full
este caso "eth0"
Añade una nueva IP al
ip addr add [Link] brd ip addr add [Link] brd
interfaz de red indicado, en
+ dev eth0 + dev eth0
este caso "eth0"
Muestra todas las
ip addr show direcciones de todas las ip addr show
interfaces de red del equipo
Muestra un calendario del
mes anterior, el actual y el
cal -3 cal -3
siguiente a la fecha actual
del equipo
Muestra las veces que el
equipo se ha reiniciado, la
last reboot last reboot
fecha, la hora y el tipo de
reinicio
Muestra el nombre y la
head -n1 /etc/issue versión de la distribución de head -n1 /etc/issue
GNU Linux instalada
grep "model name" Muestra el fabricante, el grep "model name"
/proc/cpuinfo modelo y la velocidad del
procesador (CPU) del equipo /proc/cpuinfo
Realiza un test para calcular
hdparm -tT /dev/sda la velocidad de transferencia hdparm -tT /dev/sda
del disco duro indicado
Permite asignar a un
comando creado por
nosotros mismos con el
nombre que queramos
"nombre_alias" la ejecución
de otro comando Linux, por
alias nombre_alias='comando' ejemplo, el siguiente alias listar='ls -lah'
comando Linux: alias
listar='ls -lah' creará un
nuevo "comando" llamado
"listar" que cada vez que se
ejecute será igual que si
ejecutásemos el comando ls
-lah
Muestra los dispositivos PCI
lspci -tv (Peripheral Component lspci -tv
Interconnect )
Muestra los dispostivos
lsusb -tv USB, la ubicación, el bus, el lsusb -tv
puerto
Muestra y permite editar
(como si de vi se tratase) el
fichero /etc/sudoers, donde
se le indica a Linux qué
visudo visudo
usuarios podrán ejecutar
comandos como si fuesen el
superusuario root utilizando
el comando "sudo"
Realiza una conexión
mediante Telnet al equipo
telnet IP Puerto telnet [Link] 4899
indicado "IP" utilizando el
puerto indicado "Puerto"
Editor en modo texto más
nano nombre_fichero intuitivo y fácil de usar que nano /etc/sudoers
vi
Realiza un conexión
ftp mediante el protocolo FTP a ftp
un servidor de FTP
Agrega el usuario
usermod -a -G nombre_grupo "nombre_usuario" al grupo
de seguridad usermod -a -G dba root
nombre_usuario
"nombre_grupo"
Muestra el uid interno del
usuario "nombre_usuario" y
id nombre_usuario id root
los grupos de seguridad a los
que pertenece
Añade un nuevo usuario al
adduser -u 0 -o -g 0 -G
sistema operativo como si se adduser -u 0 -o -g 0 -G
0,1,2,3,4,6,10 -M
tratase del superusuario root 0,1,2,3,4,6,10 -M fernando
nombre_usuario
(con los mismos permisos)
Edita el fichero "crontab"
(equivalente al programador
de tareas de Windows).
crontab -e Permite agregar nuevas crontab -e
tareas programadas,
modificar o eliminar las
actuales
init numero_nivel Cambia el nivel de ejecución init 5
al indicado:
0 - halt (apagar
equipo).
1 - Single user mode
(modo monousuario).
2 - Multiuser,
without NFS
(multiusuario, sin
funciones de red).
3 - Full multiuser
mode (multiusuario,
con funciones de
red).
4 - unused (no
utilizado).
5 - X11
(multiusuario, red,
modo gráfico).
6 - reboot (reinicio
del sistema).
Muestra el nivel de
ejecución anterior y el
runlevel runlevel
actual. Si no ha cambiado,
mostrará "N" en el anterior
Apaga el equipo. Comando
equivalente a ejecutar: init 0
(más o menos). En realidad,
lo que hace halt es
comprobar si el sistema se
halt halt
está deteniendo (reiniciando
o apagando) consultado el
fichero /var/log/wtmp. Si no
se está deteniendo ya lo
apaga
Apaga el equipo (equivalente
poweroff a init 0, shutdown -h now, poweroff
halt)
Reinicia el equipo
reboot (equivalente a shutdown -r reboot
now, init 6)
ulimit Muestra o modifica ciertos ulimit -a
límites del sistema:
Tamaño máximo de
los archivos creados
en el núcleo.
Tamaño del
segmento de pila.
Tamaño del
segmento de datos de
un proceso
Máxima priorida en
tareas programadas.
Número máximo de
ficheros abiertos.
Tamaño de la
memoria virtual.
Número máximo de
procesos de usuario.
Tiempo de uso de la
CPU.
Todos las las opciones (en
inglés):
-S use the `soft'
resource limit
-H use the `hard'
resource limit
-a all current limits
are reported
-b the socket buffer
size
-c the maximum size
of core files created
-d the maximum size
of a process's data
segment
-e the maximum
scheduling priority
(`nice')
-f the maximum size
of files written by the
shell and its children
-i the maximum
number of pending
signals
-l the maximum size
a process may lock
into memory
-m the maximum
resident set size
-n the maximum
number of open file
descriptors
-p the pipe buffer
size
-q the maximum
number of bytes in
POSIX message
queues
-r the maximum real-
time scheduling
priority
-s the maximum
stack size
-t the maximum
amount of cpu time
in seconds
-u the maximum
number of user
processes
-v the size of virtual
memory
-x the maximum
number of file locks
Muestra o modifica valores
sysctl del kernel en tiempo de sysctl -a
ejecución
tcpdump Captura y muestra en tiempo tcpdump -c 100 -w [Link]
real los paquetes
transmitidos y recibidos en
la red a la cual el ordenador
está conectado. Analiza el
tráfico de la red.
Muestra datos del fichero
indicado: nombre, tamaño,
bloques, dispositivo en el
que se encuentra, inode,
stat nombre_fichero links, permisos, uid, gid, stat /etc/mysql/[Link]
fecha de último acceso,
fecha de última
modificación, fecha de
cambio
Abre la bandeja del lector de
eject cdrom0 eject cdrom0
DVD/CD
Cierra la bandeja del lector
eject -t cdrom0 eject -t cdrom0
de DVD/CD
Crea un enlace duro (con el
mismo inodo), es decir el
ln ruta_fichero ruta_enlace ln /etc/mysql/[Link] /var/my
mismo fichero con distintos
nombres
Crea un enlace simbólico a
la carpeta "carpeta" en
"ruta_enlace" con el nombre ls -s /etc/var/www
ls -s carpeta ruta_enlace
de fichero enlazado (también /home/ajpdsoft/web
se pueden crear enlaces
simbólicos a ficheros)
Elimina el enlace simbólico
unlink nombre_fichero_enlace a fichero unlink /home/ajpdsoft/web
"nombre_fichero_enlace"
Compara el fichero1 con el
diff /etc/[Link]
diff fichero1 fichero2 fichero2, muestra las
/etc/mysql/[Link]
difirencias
Compara el fichero1 con el
join /etc/[Link]
join fichero1 fichero2 fichero2, muestra las líneas
/etc/mysql/[Link]
coincidentes
split -b bytes fichero Divide o parte el fichero split -b 125 /var/www/joomla
"fichero" en trozos del
tamaño indicado en "bytes".
Dejará el fichero inicial
intacto y generará tantos
trozos como sean necesarios
del tamaño máximo indicado
Une los ficheros trocezados
con split que cumplan la
cat comodines > fichero condición indicada en cat joomla* > joomla_unido
"comodines" en el
fichero"fichero"
Añade la línea de texto echo
echo "texto" >> fichero "texto" al final del fichero "max_allowed_packet=20mb
"fichero" >> /etc/mysql/[Link]
Muestra el MD5 del archivo
md5sum fichero md5sum /var/www/[Link]
"fichero"
Guarda el MD5 del archivo
md5sum fichero > md5sum /var/www/[Link]
"fichero" en el archivo
[Link] > resultado_md5.txt
"[Link]"
Verifica si el MD5 guardado
en el fichero
"fichero_con_md5" coincide
con el fichero indicado
md5sum -w -c dentro del fichero para el md5sum -w -c
fichero_con_md5 MD5 (el fichero resultado_md5.txt
"fichero_con_md5" debe
contener una línea con el
MD5 y el nombre del fichero
a verificar
Busca la palabra clave
"palabra" dentro de man
(información sobre
apropos palabra apropos split
comandos linux), si la
encuentra muestra dónde la
ha encontrado
Muestra la hora actual, el
número de días que el PC
está encendido, número de
uptime uptime
usuarios conectados al
equipo, carga media del
equipo
Elimina el grupo de
delgroup nombre_grupo delgroup postgresql
seguridad "nombre_grupo"
Elimina el grupo de
delgroup nombre_grupo -- seguridad "nombre_grupo" delgroup postgre --only-if-
only-if-empty sólo si no tiene usuarios empty
asignados
Muestra el nombre del
fichero de la terminal
tty tty
conectada a la salida
estándar
Muestra el nombre de red del
hostname hostname
equipo
Cambia la IP para la tarjeta
de red "eth0" por la nueva
"Nueva_IP" con la máscara
de subred "Máscara". No
guarda los cambios, sólo se
ifconfig eth0 Nueva_IP ifconfig eth0 [Link]
aplicará el cambio hasta el
netmask Máscara [Link]
próximo reinicio del equipo.
Para hacer el cambio
permanente hay que editar el
fichero
/etc/network/interfaces
Ejecuta la aplicación java
java -jar [Link] java -jar [Link]
"[Link]"
/etc/init.d/servicio stop Detiene el servicio "servicio" /etc/init.d/postgresql stop
/etc/init.d/servicio start Inicia el servicio "servicio" /etc/init.d/postgresql start
Reinicia el servicio
/etc/init.d/servicio restart "servicio" (lo detiene y lo /etc/init.d/postgresql restart
inicia)
Muestra el estado del
/etc/init.d/servicio status servicio "servicio" (si está o /etc/init.d/postgresql status
no iniciado, pid)
mkfs -t tipo_sistema Crea un sistema de ficheros mkfs -t ext3 /dev/sda2
dispositivo Linux con el tipo de sistema
"tipo_sistema" en el
dispositivo indicado en
"dispositivo". Para que este
comando funcione la
partición de disco a crear no
debe estar montada
5 comandos para controlar la memoria en GNU/Linux
El uso de memoria en GNU/Linux es algo importante para un administrador de sistemas.
Existen comandos para todo ya que es posible que estemos trabajando bajo en un servidor
sin entorno gráfico. Cuando se trabaja en los servidores con acceso de solo shell lo
recomendable es usar los comandos que vamos a ver a continuación. Revisaremos una serie
de comandos que se pueden utilizar para comprobar el uso de memoria en un sistema
GNU/Linux. A menudo es importante para verificar el uso de la memoria y cuanta memoria
usa cada proceso en los servidores, de manera que los recursos no están a la altura.
Comando free
El comando free es el comando más simple y fácil de usar para comprobar el uso de
memoria en GNU/Linux. Aquí está un ejemplo rápido:
$ free
La opción -m nos muestra los datos en MB. Nos nuestra por columnas el total de memoria
instalada en el ordenador, la usada, la libre, la compartida, y la buffer y caché. Además nos
nuestra una segunda fila con los datos de la memoria Swap.
/proc/meminfo
La siguiente forma de comprobar el uso de memoria es leer el archivo /proc/meminfo.
Debes saber que el sistema de ficheros /proc no contiene archivos reales. Son archivos
dinámicos o virtuales que contienen información sobre el núcleo y el sistema.
$ cat /proc/meminfo
Si nos fijamos en los valores MemTotal, MemFree, Buffers, Cached, SwapTotal, SwapFree
(puedes usar cat /proc/meminfo | grep [Valor]) podremos ver que son los mismos valores
que cuando hacemos uso del comando free.
vmstat
El comando vmstat con la opción -s expone las estadísticas de uso de memoria tanto como
el anterior comando. Aquí un ejemplo:
$ vmstat -s
Comando top
Posiblemente el más usado. El comando top se utiliza generalmente para comprobar la
memoria y el uso de CPU por cada proceso. Sin embargo, también se puede usar para
visualizar informes de uso total de la memoria y se puede utilizar para vigilar el uso total de
memoria RAM.
$ top
Comando htop
Uno que no conocía y que me ha gustado mucho. Al igual que top, el comando htop
muestra el uso de memoria, junto con otros detalles:
$ htop
Fuentes Consultadas
[Link]
[Link]
[Link]
[Link]
de-comandos
[Link]