RSS
Facebook
G+

Buscador de IntercambioSOS:


Retroceder   Foro de Ayuda IntercambiosvirtualeS > Soporte Sobre: Software > Sistemas Operativos > Linux
Comunidad

Respuesta
 
Herramientas Desplegado
Antiguo 30-nov-2012     #1
Post Tema 103: Comandos GNU y UNIX - 103.1 Trabajar en línea de comandos

Bueno comenzamos con la serie de posts que iran dedicados a sacarse la certificación LPIC-1, y lo hacemos con el uso de comandos en el Terminal que de bien seguro nos seran muy utiles a todos aquellos que usamos alguna distribución linux. Estos comandos, son un estandard para las más de 600 distribuciones disponibles en el ciber espació, pero a menudo haré referencia a Ubuntu y derivadas, Debian y las basadas en RedHat como Fedora y CentOS.


103.1 Trabajar en línea de comandos (Peso 4)

Los aspirantes a obtener el Certificado LPI-1 deben ser capaces de interactuar con shells y comandos utilizando la terminal. El objetivo supone la utilización del shell bash.
Conocimientos clave:
  • Utilizar comandos simples y secuencias de comandos en el terminal.
  • Utilizar y modificar el entorno de shell, incluso la definición, referencia y exportación de variables de entorno.
  • Utilizar y editar el historial de comandos.
  • Ejecutar comandos localizados dentro y fuera del camino definido por la variable PATH.
Lista parcial de archivos, términos y herramientas tratadas:
  • .
  • bash
  • echo
  • env
  • exec
  • export
  • pwd
  • set
  • unset
  • man
  • uname
  • history
La terminal

La terminal o consola de GNU/Linux será nuestra “amiga” inseparable si queremos gestionar eficientemente nuestro sistema linux. Aunque existen varias herramientas gráficas para la administración y configuración de sistemas GNU/Linux, es prácticamente imprescindible que un administrador Linux sepa trabajar desde la terminal de lineas de comandos para poder configurar y administrar todo el equipo.

Principalmente dos son las razones por las que el terminal es importante: la primera es que las herramientas gráficas requieren de más recursos del equipo (CPU, HD, etc…), por lo tanto es importante optimizar los recursos de la máquina sobretodo en equipos servidores. La otra razón importante es que en la mayoria de los casos el administrador no tendrá el equipo delante suyo, es decir, tendrá que conectarse remotamente a través de ssh o similares para poder efectuar las tareas administrativas.

Una vez iniciada la sesión en un terminal, se podrá ver el prompt formado normalmente por el nombre de usuario una @ y el nombre del equipo, seguido del directorio actual. Si al final del indicador de comandos hay una # indica que la sesión está iniciada como root (el administrador del sistema con permisos absolutos), si en cambio al final hay un $ significa que la sesión esta iniciada por un usuario corriente.



¿ Qué es la shell ?
La shell o línea de comandos es la interficie con el sistema que nos permite ejecutar programas y comandos. De echo, la propia shell no es más que otro programa, un interprete de linea de comandos que puede ser utilizado para ejecutar, suspender, detener o incluso escribir otros programas. La shell ejecuta los comandos o programas introducidos desde la entrada estándar (teclado) o desde un fichero, pero además la shell es en sí misma un lenguaje de programación que, como otros lenguajes de alto nivel, permite variables, estructuras de control de flujo y funciones.
El shell interpreta la primera palabra suministrada como un comando. Debe suministrarse el camino completo o relativo al comando, a menos que este se encuentre localizado en unos de los directorios incluidos en la variable de entorno PATH. Si el programa se encuentra en el directorio de trabajo actual y fuera de los directorios incluidos en PATH, su nombre debe venir precedido por ./, por ejemplo ./script.sh.

Existen diferentes shells como Bourne Shell (sh), Korn Shell (ksh), C-Shell (csh y tcsh), o GNU Bourne-Again SHell (bash). Esta última: bash, es la shell por defecto de los sistemas operativos GNU y es compatible con sh, incorporando además, características de ksh.

Bash

Bash es un interprete de comandos Unix escrito para el projecto GNU. Es un derivado de Bourne Shell (sh). El bash no está presente únicamente bajo Linux. Al ser software libre, se puede ejecutar bajo numerosas plataformas, entre ellas MacOS y Windows.
A continuación veremos algunos comandos importantes incorporados en el Bash:
  • alias : Crea un alias (nombre alternativo) para un comando
$ alias rm="rm -i" (Obliga a que se confirme cada vez que se utilice el comando rm)
  • exec : Un comando invocado con exec sustituye la sesión actual del shell
$ exec telinit 1 (Cambia al nivel de ejecución 1, de los 6 disponibles y a continuación cierra la sesión shell)
  • echo : Replica un texto o el contenido de una variable
$ echo $PATH (Muestra el contenido de la variable de entorno PATH)
  • env : Sin argumentos, muestra las variables de entorno y sus contenidos. Puede ejecutar un comando con una variable de entorno modificada.
$ env DISPLAY=:1.0 xclock (Abre el programa xclock modificando el valor de la variable de entorno $DISPLAY)
  • export : Define una variable de entorno para la sesión y para todas las sesiones iniciadas a partir de ésta
$ export PATH=$PATH:/usr/local/bin (Redefine la variable $PATH para incluir el camino /usr/local/bin)
  • pwd : Muestra el directorio actual$ pwd ó echo
$PWD (Hay 2 formas de mostrar el directorio actual, como comando o como variable)
  • unset: Elimina una variable en la sesión.
$ unset NOMBRE (Borra la variable $NOMBRE)
  • uname: Muestra cierta información sobre el sistema, como el nombre de la distribución, versión del kernel, procesador…
$ uname -a (Muestra información del sistema)
Linux 2.6.28-17-generic #58-Ubuntu SMP Tue Dec 1 18:57:07 UTC 2009 i686 GNU/Linux
Se puede distinguir un comando interno del bash de un comando externo con la ayuda del comando interno type. Por ejemplo:
$ type date
date está asociado (/bin/date)
$ type pwd
pwd es una orden interna del shell
También puede encontrar otros tipos, como los alias de comandos. Ciertas distribuciones GNU/Linux proponen alias como ll, que corresponde en realidad a ls -l.
$ type ll
ll es un alias de `ls -l'
Podemos obtener una lista completa de estos comandos internos del bash con su descripción ejecutando:
$ man builtins
Y se puede obtener ayuda de cada uno de estos comandos usando el comando help, por ejemplo:
$ help alias
$ help jobs
$ help kill
$ help umask
Cuando se lanza el shell va a buscar y ejecutar varios scripts y ficheros de configuración que contienen una secuencias de comandos individuales que tienen como meta configurar el entorno del usuario.
Busca ejecutar, en este orden y si estan presentes los siguientes archivos.
/etc/profile (define variables generales para todos los usuarios)
~/.bash_profile (define variables para el usuario logeado)
~/.bash_login
~/.profile

En el momento de desconectarse, intenta ejecutar si existe el archivo:
~/.bash_logout

Variables

Las variables utilizadas en el shell son semejantes a las utilizadas en los lenguajes de programación clasica. Los nombres de variables se limitan a caracteres alfanuméricos. Para crear o modificar una variable, no deben utilizarse espacios:
$nombre_de_la_variable=valor_de_la_variable

El valor de una variable se muestra colocando el carácter $ delante del nombre:
$ echo $nombre_de_la_variable

Hay 2 tipos de variables, las locales y las exportadas:

  • Locales : son variables accesibles únicamente en la sesión actual del shell.
  • Exportadas: son variables accesibles en la sesión actual y en las otras sesiones iniciadas a partir de la actual.
El comando set muestra todas las variables definidas. Para ver únicamente aquellas que se exportan, se utiliza el comando env. Si una variable puede accederse por cualquier proceso o sesión del shell, se denomina variable global.

Algunas variables de entorno pueden definirse previamente, ya sean variables internas del Bash o aquellas definidas en los archivos de configuración.
Pueden establecerse variables de entorno de forma permanente difiniendolas en el archivo de configuración /etc/environment.

A continuación vemos algunas variables predefinidas:
  • DISPLAY : Determina en qué display del X el programa debe mostrar sus ventanas.
  • HOME : Camino al directorio personal del usuario.
  • HISTFILE : Caminio al historial de comandos del usuario (generalmente $HOME/.bash_history)
  • HISTSIZE : Tamaño en número de líneas del historial.
  • USER : El nombre del usuario en curso.
  • LOGNAME : El nombre que el usuario utilizó para entrar al sistema.
  • PATH : Lista de directorios separados por (:) en los cuales se buscarán programas si se solicitaron sin su camino completo o relativo.
  • CDPATH : Similar a PATH, pero lo que hace es determinar caminos extras para la orden cd.
  • PWD : El directorio actual.
  • SHELL : El shell utilizado (generalmente /bin/bash)
  • TERM : El tipo de emulador de terminal utilizado. Su contenido varía si se utiliza un terminal del X o una consola tty.
  • PS1 : Prompt String 1, cadena que representa el prompt estándar visualizado en la pantalla por el shell en espera de inserción de comando.
  • LANG : Definición del idioma a utilizar, así como el juego de caracteres.
  • RANDOM : Genera y contiene un número aleatorio entre 0 y 32767.
Otras variables especiales incorporadas del Bash actúan casi como comandos, devolviendo valores que son especialmente útiles en scripts. Éstas son:
  • $! : muestra el PID del último proceso ejecutado.
  • $$ : muestra el PID del shell actual.
  • $? : devuelve el valor 0 si el último comando tiene éxito, de lo contrario devuelve el valor 1.
Es posible obtener la longitud de una cadena con el carácter #.
$ a=McGregor
$ echo "Longitud de $a: ${#a}"
Longitud de McGregor: 9

Linux cuenta con dos medios para declarar una tabla o array de elementos: la utilización de corchetes [] y la creación global. El primer elemento es 0, el último 1023. Para acceder al contenido de la tabla, hay que poner la variable y el elemento entre {}.
$ Nombre[0]=”Eloy58
$ Nombre[1]=”Tururojo”
$ Nombre[2]=”Daniela”
$ Nombre[3]=”McGregor”
$ echo ${Nombre[2]}
Daniela

$

$ Nombre=(Eloy58 Tururojo Daniela McGregor)
(separamos los elementos de la lista con espacios)
$ echo ${Nombre[0]}
Eloy58
$
$ echo ${Nombre[*]} (Para listar todos los elementos)

Eloy58 Tururojo Daniela McGregor
$ echo ${#Nombre[*]} (Para conocer el número de elementos de un array)
4

$ idx=1
$ echo ${Nombre[idx]} (usamos la variable idx para indicar la posición. Como podeis ver cuando se encuentra dentro de un array, no se pone el $ delante)
Tururojo

Comandos secuenciales

La gran mayoría de las tareas depende de la ejecución de más de un comando. Para ejecutar 3 comandos en secuencia, independientemente del resultado de cada uno, se utiliza el siguiente formato:
$ comando1 ; comando2 ; comando3
Para ejecutar el comando siguiente solamente si el anterior tuvo éxito (se devolvió 0).
$ comando1 && comando2 && comando3
Para ejecutar el comando siguiente solamente si el anterior no tuvo éxito (se devolvió diferente de 0).
$ comando1 || comando2 || comando3
Referencia y manuales
En función del número demasiado grande de comandos disponibles en el entorno Linux, un recurso que agiliza la digitación de comandos y los caminos existentes es la utilización de la tecla [TAB]. Después de digitar las primeras letras de un comando o un camino de directorio, la tecla [TAB] completa la línea de acuerdo con los comandos y caminos encontrados.

Practicamente todos los comandos y archivos de configuración en Linux acompañan un manual. Este manual está accesible por medio del comando man, que muestra con detalle las funciones del ítem en cuestión. Para ver los parametros y entradas posibles que cualquier comando en el termina, basta usar el comando man, seguido del comando o archivo como argumento a continuación.
En general, los manuales tienen la siguiente organización:
  • Nombre : asunto de la página del manual seguido por una breve descripción.
  • Sinopsis : la sintaxis del comando.
  • Descripción : descripción detallada.
  • Opciones : revisión de todas las opciones y sus funciones.
  • Archivos : archivos relacionados con el asunto.
  • Vea también : otras páginas de manual relacionadas con el tema.
Otros comandos para buscar información son los siguientes:
  • info : Es una alternativa al comando man, pero de forma menos detallada. Su navegación está basada en el editor emacs, y es posible saltar a otras paginas (enlaces) pulsado enter en las lineas que empiezan con asterisco (*).
  • apropos : Busca ocurrencias de un término en la sección nombre de los manuales. Devuelve una breve descripción a cada ocurrencia encontrada y el nombre del respectivo comando o archivo.

El comando whatis

Una manera de identificar los manuales de referencia para un determinado término es utilizar el comando whatis. La base de datos del comando whatis almacena la sección nombre de los manuales del sistema. Para cada recurso del manual localizado, el whatis muestra una breve descripción.
$ whatis man
man (1) - una interfaz de los manuales de referencia electrónicos
man (7) - macros para formatear páginas del manual

Los números entre paréntesis se refieren a la sección a la cual pertenece la página del manual. Las secciones relacionadas a continuación:
  • Sección 1 : Programas disponibles para el usuario.
  • Sección 2 : Rutinas de Sistema Unix y C.
  • Sección 3 : Rutinas de bibliotecas del lenguaje C.
  • Sección 4 : Archivos especiales (dispositivos en /dev)
  • Sección 5 : Convenciones y formatos de archivos.
  • Sección 6: Juegos.
  • Sección 7: Diversos (macros textuales, etc).
  • Sección 8 : Procedimientos administrativos (daemons, etc).
Para acceder a un ítem de una sección específica, el número de la sección precede el nombre del ítem. Por ejemplo, para acceder al manual de man en la sección número 7:
$ man 7 man
El comando makewhatis nos ayuda a explora todas las páginas del manual del sistema y construye una base de datos para whatis y apropos.Generalmente éste es ejecutado por el root para mantener la base de datos actualizada:
# makewhatis
De forma habitual y estandarizada los archivos que contienen los manuales se almacenen en /usr/man y /usr/share/man, en subdirectorios correspondientes a la sección. Otras localizaciones diferentes a las descritas pueden especificarse por medio de la variable MANPATH. Esta variable se define en el archivo de configuración /usr/lib/man.conf ó /etc/man.conf. Al modificar este archivo, no debemos olvidar ejecutar como root el comando makewhatis para actulizar la base de datos con los nuevos manuales.

Otro directorio donde podemos encontrar documentación de diferentes programas instalados en nuestro sistema es /usr/share/doc.


Historial de comandos

Durante una sesión de terminal, todos los comandos que vamos ejecutando se van guardando en un buffer temporal, cuando cerramos la sesión estos comandos se guardan al final del archivo definido en la variable $HISTFILE, que suele ser .bash_history

A continuación vemos una serie de ordenes para ejecutar comandos del historial:
$ history | less (Muestra el historial de comandos)
$ !41 (Muestra la linea 41 del historial y luego la ejecuta)
$ !-9 (Ejecuta la novana línea del historial començando por la última ejecutada)
$ sudo !! (Ejecuta la última línea con sudo por delante)
$ !sudo (Ejecuta la última línea que empieza por sudo)
$ history -c (Borra el historial)
Si tenemos definida la variable $HISTCONTROL como ignoreboth significa que esta definida como ignoredups (evita duplicados contiguos en el historial) y ignorespace (no guarda en el historial todas aquellas líneas que empiezan con un espacio en blanco).

Algunos atajos útiles:
  • [Ctrl] C : Interrupción del programa. Se termina.
  • [Ctrl] Z : Para el programa o proceso.
  • [Ctrl] D : Interrumpe la introducción de datos en un prompt. Similar a exit o logout.
Bueno hasta aquí lo que comprende los comandos GNU/Linux que se contemplan en el apartdao Tema 103.1 Trabajar en linea de comandos con el terminal, seguiré añadiendo cosas vinculadas al post Administración de Linux - Certificación LPI


Saludos y espero que lo disfruten, hasta la proxima entrega.



Responder Citando
Los siguientes 6 usuarios agradecen a McGregor por este mensaje:
erderfin (01-dic-2012), Froyandres (30-nov-2012), Orpheus96 (05-dic-2012), osiel (30-nov-2012), platoyvaso (05-may-2013), Tururojo (11-dic-2012)
Antiguo 30-nov-2012     #2
Bueno Gracias por dedicarle tiempo a esta publicación




Enviar un mensaje por ICQ a Froyandres Enviar un mensaje por AIM a Froyandres Enviar un mensaje por MSN a Froyandres Enviar un mensaje por Yahoo  a Froyandres Responder Citando
Los siguientes 2 usuarios agradecen a Froyandres por este mensaje:
McGregor (01-dic-2012), platoyvaso (05-may-2013)
Antiguo 11-dic-2012     #3
Predeterminado

Excelente trabajo McGregor, la línea de comandos es muy poderosa, a seguir practicando.

Saludos.

Responder Citando
Usuarios que han agradecido este mensaje de Orpheus96
platoyvaso (05-may-2013)
Antiguo 11-dic-2012     #4
Predeterminado

Este no lo habia visto !!!!


excelenete compañero !!!
Responder Citando
Los siguientes 2 usuarios agradecen a baduser por este mensaje:
McGregor (14-dic-2012), platoyvaso (05-may-2013)
Antiguo 11-dic-2012     #5
Predeterminado

Muy bueno y muy util, McGregor.

Muchas gracias y Saludos.



Mi Sabiduria, abarca lo que una gota de Agua, en el Oceano del Conocimiento
Responder Citando
Los siguientes 2 usuarios agradecen a Tururojo por este mensaje:
McGregor (14-dic-2012), platoyvaso (05-may-2013)
Respuesta

Etiquetas
administración sistemas linux, certificación profesional linux, examen oficial lpi, lpi1


(0 miembros y 1 visitantes)
 

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado

Ir al Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
[Tutorial] Comandos MS-DOS/Atajos CMD valientes Tutoriales & Videos Tutoriales 19 13-mar-2014 22:28


Desarrollado por: vBulletin® Versión 3.8.1
Derechos de Autor ©2000 - 2024, Jelsoft Enterprises Ltd.
Ad Management by RedTyger