Translate
lunes, 17 de noviembre de 2014
Manejo de Shell en Linux
Manejo de Shell en Linux
Comandos básicos para el manejo de sesiones
Listado y cambio de directorios
Gestión de archivos y directorios
Manipulación de los atributos de archivos y directorios
Lectura de archivos
Edición de archivos
Comandos básicos para el manejo de sesiones
La línea de comandos es la forma más directa de enviar comandos a un servidor GNU/Linux. Si usa la
línea de comandos rápidamente verá que es mucho más potente y tiene más capacidades que otros prompts
(por ejemplo, DOS). La razón de esto es que tiene un acceso directo a miles de utilitarios que no tienen
equivalente gráfico, o que no sería fácil acceder a todas las opciones y combinaciones posibles por medio de
menús y botones.
Inicio de sesión
Cuando se accede a una terminal o consola GNU/Linux se presenta una simple interfaz similar a:
webserver login:
En este ejemplo el término “webserver” hace referencia al nombre del equipo. En este momento estará en
condiciones de ingresar su nombre de usuario y luego de presionar la tecla Enter le aparecerá el prompt
password:, donde deberá ingresar su contraseña para esta cuenta. Debido a que la conexión en la consola
no hace eco de los caracteres que representan a la contraseña, deberá tener cuidado cuando ingresa su
contraseña ya que no podrá visualizar la cantidad de caracteres ingresados.
Shell
Al iniciar su sesión en una terminal GNU/Linux se encontrará, en caso de trabajar con un sistema Debian
y conectarse como el superusuario root , con un prompt similar a:
webserver:~#
Como ya se aclaró anteriormente, “webserver” hace referencia al nombre del equipo. El carácter “~” indica
que el directorio en el que nos encontramos posicionados es nuestro directorio personal (generalmente
/root). Obviamente, este sector del prompt se modificará a medida que nos desplacemos por toda la
estructura de directorios. El carácter “#” indica que estamos utilizando una shell con toda su potencialidad ya
que nos hemos registrado con la cuenta de superusuario.
En el caso de ingresar al sistema con una cuenta de usuario común, el prompt se asemejará a:
jperez@webserver:~$
La diferencia con el caso anterior es que al comienzo del prompt se indica el nombre de usuario que está
utilizando esta sesión. Por otro lado, el carácter “$” ubicado al final del prompt indica que el usuario “jperez”
no tiene privilegios de supersusuario.
Terminales
Un sistema GNU/Linux es un sistema multiusuario. Esto quiere decir que varios usuarios pueden
conectarse simultáneamente al sistema y trabajar de forma independiente. Una de las formas más simples de
realizar esta tarea es trabajar con distintas terminales e iniciar sesión con un usuario distinta en cada una de
ellas ya que cada terminal nos deja operar desde una shell absolutamente independiente.
Por defecto, el sistema nos presenta en pantalla la terminal número 1 (denominada tty1). Para
desplazarnos entre las distintas terminales deberemos presionar la combinación de teclas ALT + Fx, donde
Fx identifica a una tecla de función en la que x es el número de terminal a la que queremos acceder. Así, por
ejemplo, para desplazarnos a la tercera terminal deberemos presionar la combinación de teclas ALT + F3.
Para identificar el número de terminal en la que nos encontramos en determinado momento debemos
utilizar el siguiente comando:
~$ tty
Manejo de Shell en Linux - 2
Laboratorio de Sistemas Operativos – EEST Nº 5 “Galileo Galilei”
Cambiar de usuario
Otra forma de aprovechar las características de sistema multiusuario que GNU/Linux nos ofrece es utilizar
el comando su, que nos permite cambiar de usuario sin necesidad de conectarnos nuevamente en otra
terminal.
Si estamos conectados como superusuario simplemente debemos ejecutar:
~# su - jlopez
En este caso jlopez es el nombre de usuario que comenzaremos a utilizar a continuación (siempre y
cuando, obviamente, jlopez sea un usuario ya registrado en el sistema).
Si por el contrario, estamos conectados con una cuenta de usuario común y nos queremos convertir en
superusuario debemos ingresar el siguiente comando:
~$ su -
Acto seguido, se nos preguntará la contraseña del superusuario antes de poder “convertirnos” en él.
Información de usuario
Si en algún momento deseamos obtener información acerca del usuario con el que estamos conectados
podemos utilizar alguno de los siguientes dos comandos:
~$ id
Este comando nos brinda información importante acerca del usuario que lo ejecuta. Los datos más
destacados que se pueden obtener son el identificador del usuario (uid), el identificador del grupo principal
al que pertenece el usuario (gid) y el nombre de los grupos adicionales de los que forma parte el usuario.
El otro comando, mucha más simple de utilizar es who:
~$ who
En este caso se muestra el nombre de usuario, la terminal en la que se encuentra conectado y la fecha y
hora en que inició sesión.
Cierre de sesión
Para finalizar una sesión en un sistema GNU/Linux se pueden utilizar indistintamente cualquiera de los
siguientes dos comandos:
~$ exit
~$ logout
El mismo objetivo se logra si presionamos la combinación de teclas CTRL + D.
Listado y cambio de directorios
Listar directorios
El comando ls (LiSt) es equivalente a dir de DOS, pero puede hacer mucho más. De hecho, esto se debe
en gran parte al hecho de que los archivos también pueden hacer más. La sintaxis del comando ls es la
siguiente:
ls [opciones] [archivo|directorio] [archivo|directorio..
Si no se especifica archivo o directorio alguno en la línea de comandos, ls imprimirá la lista de los
archivos del directorio corriente. Sus opciones son muchas y sólo citaremos unas pocas:
-a: lista todos los archivos, incluyendo los archivos ocultos (en GNU/Linux los archivos ocultos son
aquellos cuyo nombre comienza con “.“)
-R: lista recursivamente, es decir, todos los archivos y subdirectorios del directorio que se menciona en la
línea de comandos;
-l: muestra información adicional sobre los archivos;
Algunos ejemplos:
~$ls —R
En este caso se lista recursivarnente el contenido del directorio actual.
~$ls -al images/*.png 3- -- - Manejo de Shell en Linux
Laboratorio de Sistemas Operativos – EEST Nº 5 “Galileo Galilei”
En este ejemplo se listan todos los archivos (incluso los archivos ocultos) del directorio images/ cuyo
nombre termina con .png. Note que esto también incluye al archivo .png si es que existe uno.
De todos los casos anteriores conviene detenerse un instante en el uso del comando ls junto al
parámetro -l. Tomemos el ejemplo de un archivo y un directorio. Abajo se muestra el resultado de ingresar
el comando ls -1 desde una línea de comandos:
~$ls -1
-rw-r----- 1 root shadow 664 2009-04-05 14:11 shadow
drwxr-xr-x 2 root root 4096 2009-04-05 14:11 w3m
Los diferentes campos de salida del comando ls -1 son los siguientes (de izquierda a derecha):
Los primeros diez caracteres representan sucesivamente el tipo de archivo y los derechos asociados al
mismo. El primer carácter es el tipo del archivo: contiene un guión (—) si es un archivo regular, o una d si
es un directorio. Los nueve caracteres que siguen representan los permisos asociados con ese archivo.
Aquí puede ver la distinción que se hace entre los diferentes usuarios para el mismo archivo: los primeros
tres caracteres representan los derechos asociados con el dueño del archivo, los siguientes tres se aplican
a todos los usuarios que pertenecen al grupo pero que no son el dueño, los últimos tres se aplican a los
otros. Un guión (-) significa que el permiso no está activo.
Luego viene el número de vínculos del archivo.
A continuación viene el nombre del dueño del archivo y el nombre del grupo dueño.
Finalmente, se muestra el tamaño del archivo (en bytes) y la fecha de su última modificación, seguido por
el nombre del archivo o directorio propiamente dicho.
Ahora observemos en detalle los permisos asociados con cada uno de estos archivos: antes que nada,
debemos quitar el carácter que representa al tipo, y para el archivo shadow obtenemos los siguientes
derechos rw-r-----. La interpretación de los mismos es la que sigue:
Los primeros tres (rw-) son los derechos del usuario dueño del archivo, en este caso root. Por lo tanto,
el usuario root, tiene el derecho de leer el archivo (r), de modificarlo (w) pero no de ejecutarlo (-).
Los tres siguientes (r--) se aplican a todo usuario que no es root pero que es miembro del grupo
shadow. Dicho usuario podrá leer el archivo (r), pero no podrá modificarlo ni ejecutarlo (--).
Los tres restantes (---) se aplican a todo usuario que no es root ni es miembro del grupo shadow. Dicho
usuario simplemente no tendrá derecho alguno sobre el archivo.
Para el directorio w3m, los derechos son rwxr-xr-x, entonces:
root, como dueño del directorio, puede listar los archivos que contiene (r), agregar o quitar archivos del
mismo (w), y recorrerlo (x).
Cada usuario que no es root pero es miembro del grupo root, podrá listar los archivos de ese directorio
(r), pero no podrá quitar ni agregar archivos (—), y lo podrá recorrer (x).
Cualquier otro usuario sólo podrá listar el contenido de este directorio (r--), y nada más. Incluso no
podrá ingresar al directorio.
Cambiar directorios
El comando cd es exactamente el mismo que en DOS, con alguna funcionalidad extra. Hace justo lo que
su acrónimo indica, cambiar el directorio de trabajo. Puede usar . para referirse al directorio corriente y ..
para referirse al directorio padre del directorio corriente. Si ingresa cd solo, será llevado de vuelta a su
directorio personal. Si ingresa cd - será llevado al último directorio en el cual estuvo. Y, finalmente, puede
especificar el directorio destino al que nos queremos desplazar. Note que como usuario no privilegiado
normalmente no puede ingresar a los directorios personales de otros usuarios (a menos que esos usuarios lo
hayan autorizado explícitamente o esa sea la configuración predeterminada del sistema). A continuación se
presentar algunos ejemplos:
~$ pwd
/home/jperez
~$ cd /usr/share/doc/HOWTO
~$ pwd Manejo de Shell en Linux - 4
Laboratorio de Sistemas Operativos – EEST Nº 5 “Galileo Galilei”
/usr/share/doc/HOWTO
~$ cd ../FAQ-Linux
~$ pwd
/usr/share/doc/FAQ-Linux
~$ cd
~$ pwd
/home/jperez
El primer comando que aparece en el ejemplo anterior es pwd. Este comando nos devuelve la ruta
completa al directorio en el cual nos hallamos posicionados. El uso del comando cd es bastante simple. Se
puede indicar como parámetro el directorio de destino o ejecutarlo sin parámetros, en este caso nos
devolverá a nuestro directorio personal (/home/jperez en nuestro ejemplo).
Gestión de archivos y directorios
Gestionar archivos significa copiar, mover y borrar archivos. Más adelante, veremos formas de cambiar
los atributos de los mismos (dueño y permisos asociados).
Creación de directorios y archivos vacíos
mkdir (MaKe DlRectory) se usa para crear directorios. Su sintaxis es simple:
mkdir [opciones] [directorio …]
Sólo una opción es digna de interés: la opción -p. La misma hace dos cosas: Creará los directorios padre
si es que aún no existían. Si no se especifica esta opción y los directorios padre no existen, mkdir
simplemente fallará, quejándose que dichos directorios padre no existen. Por otro lado, si el directorio padre
ya existe simplemente creará el nuevo directorio.
Aquí tiene algunos ejemplos:
~$ mkdir pepe
Crea un directorio denominado pepe en el directorio actual;
~$ mkdir -p imagenes/misc docs
Crea un directorio misc en el directorio imagenes creando primero el ultimo si es que no existe (-p);
también crea un directorio denominado docs en el directorio actual.
Inicialmente, el comando touch no está orientado a la creación de archivos sino a la actualización de la
hora de acceso y modificación de los archivos. Sin embargo, touch creará los archivos mencionados como
archivos vacíos si es que no existían. La sintaxis es:
touch [opciones] archivo [archivo …]
Entonces, ejecutar el comando:
~$ touch archivo1 imagenes/archivo2
Creará un archivo vacío denominado archivo1 en el directorio corriente y un archivo vacío denominado
archivo2 en el directorio imagenes, si dichos archivos no existían.
Borrar archivos y directorios
El comando rm (ReMove) reemplaza a los comandos del y deltree de DOS, y agrega más opciones. Su
sintaxis es la siguiente:
rm [opciones] [archivo|directorio ...]
Las opciones incluyen:
-r, o -R: borrar recursivamente. Esta opción es obligatoria para borrar un directorio, vacío o no. Sin
embargo, también puede usar el comando rmdir para borrar directorios vacíos.
-f: fuerza la supresión de los archivos o directorios, incluso si el usuario no tiene derecho de escritura
sobre los archivos. 5- -- - Manejo de Shell en Linux
Laboratorio de Sistemas Operativos – EEST Nº 5 “Galileo Galilei”
Algunos ejemplos:
~$ rm imagenes/*.jpg archivo1
Borra todos los archivos cuyo nombre termina en .jpg en el directorio imagenes y borra el archivo
archivo1 en el directorio actual.
~$ rm -Rf imagenes/misc/ archivo*
Borra todo el directorio misc/ del directorio imagenes/ junto con todos los archivos del directorio actual
cuyos nombres comiencen con archivo sin pedir confirmación alguna.
Atención: U Atención: U Atención: U Atención: Un archivo borrado utilizando n archivo borrado utilizando n archivo borrado utilizando n archivo borrado utilizando rm se borra se borra se borra se borra irrevocablemente irrevocablemente irrevocablemente irrevocablemente. ¡No hay forma alguna de . ¡No hay forma alguna de . ¡No hay forma alguna de . ¡No hay forma alguna de
recuperarlo! recuperarlo! recuperarlo! recuperarlo!
Mover o renombrar archivos y directorios
La sintaxis del comando mv (MoVe) es la siguiente:
mv [opciones] [archivo|directorio …]
Algunas opciones:
-f: fuerza la operación, no hay advertencia alguna en caso de que la operación sobrescriba un archivo
que ya existe.
-i: lo contrario a –f, pide confirmación al usuario antes de sobre-escribir un archivo existente.
Algunos ejemplos:
~$ mv -i /tmp/pics/*.png .
Mover todos los archivos del directorio /tmp/pics/ cuyos nombres terminan en .png al directorio
corriente (.), pidiendo confirmación antes de sobre-escribir cualquier archivo.
~$ mv pepe pupu
Cambiar el nombre del archivo pepe por pupu. Si ya hubiera un directorio pupu, el efecto de este
comando sería mover todo el directorio pepe (el directorio en sí mismo más todos los archivos y directorios
que contenga, recursivamente) dentro del directorio pupu.
~$ mv —f archivo* imagenes/ tacho/
Mover, sin pedir confirmación, todos los archivos del directorio actual cuyos nombres comiencen con
archivo junto con todo el directorio imagenes al directorio tacho.
Copiar archivos y directorios
cp (CoPy) reemplaza a los comandos copy, xcopy de DOS, y agrega más opciones. Su sintaxis es la
siguiente:
cp [opciones] [archivo|directorio …]
cp tiene un montón de opciones. Estas son las más comunes:
-R: copiar recursivamente; obligatoria para copiar un directorio, incluso si está vacío.
-i: pedir confirmación antes de sobre-escribir cualquier archivo que pudiera sobre-escribirse.
-f: lo opuesto de -i, reemplazar cualquier archivo existente sin pedir confirmación alguna.
Algunos ejemplos:
~$ cp -i /tmp/imagenes/* imagenes/
Copia todos los archivos del directorio /tmp/imagenes al directorio imagenes/ ubicado en el directorio
corriente. Si se va a sobre-escribir un archivo se pide confirmación.
~$ cp -R docs miscosas/
Copia recursivamente todo el directorio docs al directorio miscosas ubicados ambos en el directorio
actual.
~$ cp pepe pupu
Hace una copia del archivo pepe bajo el nombre pupu en el directorio actual. Manejo de Shell en Linux - 6
Laboratorio de Sistemas Operativos – EEST Nº 5 “Galileo Galilei”
Manipulación de los atributos de archivos y directorios
La serie de comandos que se presentan aquí se usan para cambiar el dueño o el grupo propietario de un
archivo o sus permisos.
Cambiar el dueño y el grupo propietario de uno o más archivos
La sintaxis del comando chown (CHange OWNer) es la siguiente:
chown [opciones] [archivo|directorio …]
Las opciones incluyen:
-R: recursivo; para cambiar el dueño de todos los archivos y subdirectorios en un directorio dado.
-v: modo verboso; muestra todas las acciones efectuadas por chown; reporta cuales archivos cambiaron
de dueño como resultado del comando y cuales no han cambiado.
Algunos ejemplos:
~$ chown nobody shared/libro.tex
Cambiar el dueño del archivo shared/libro.tex a nobody.
chown -Rv reina:musica *.mid conciertos/
Atribuye todos los archivos en el directorio actual cuyos nombres terminan con .mid y todos los archivos
y subdirectorios del directorio conciertos al usuario reina y al grupo musica, reportando los archivos y
directorios afectados por el comando.
El comando chgrp (CHange GRouP) le permite cambiar el grupo propietario de un archivo o un grupo de
archivos; su sintaxis es muy similar a la del comando chown:
chgrp [opciones] [archivo|directorio ...]
Las opciones de este comando son las mismas que las de chown, y se usa de manera muy similar. Por lo
tanto, el comando:
~$ chgrp disk /dev/hd*
Le atribuye al grupo disk todos los archivos en el directorio /dev/ cuyos nombres comiencen con hd.
Cambiar los permisos sobre los archivos y directorios
El comando chmod (CHange MODe) tiene una sintaxis bien particular. La sintaxis general es:
chmod [opciones] [archivo|directorio …]
Pero lo que lo distingue son las diferentes formas que puede tomar el cambio de modo. Este se puede
especificar de dos maneras:
En octal; se utilizan tres números para especificar los permisos de los usuarios dueños, el grupo
propietario y todos los “otros” usuarios respectivamente. Estos números deben estar contenidos en el rango
0-7. El número 4 se utiliza para permiso de lectura, 2 para permiso de escritura y 1 para permiso de
ejecución. Si queremos representar un permiso combinado de lectura y escritura debemos utilizar el número
6 (sumando los permisos de lectura y escritura) y así sucesivamente con cualquier otra combinación. Por lo
tanto, el permiso rwxr-xr-- se corresponde con el valor octal 754 ya que los permisos del dueño (los
primeros tres caracteres “rwx”) representan un 7, los del grupo propietario (r-x) un 5 y los permisos de los
otros (r--) un 4.
Con expresiones; aquí los permisos se expresan con una secuencia de expresiones separadas por comas.
Por lo tanto, una expresión toma la forma [categoría] <+|—|=>.
La categoría puede ser una o más de:
u (User, permisos para el dueño)
g (Group, permisos para el grupo propietario)
o (Others, permisos para los “otros”)
Si no se especifica categoría alguna, los cambios se aplicarán para todas las categorías. Un “+” agrega un
permiso, un “-“ lo niega y un “=” lo garantiza. 7- -- - Manejo de Shell en Linux
Laboratorio de Sistemas Operativos – EEST Nº 5 “Galileo Galilei”
Finalmente, el permiso es uno o más de:
r (Read, lectura)
w ( Write, escritura)
x (eXecute, ejecución)
Las opciones principales son bastante similares a las de chown o chgrp:
-R: cambiar los permisos recursivamente.
-v: modo “verboso”, muestra las acciones efectuadas para cada archivo.
Ejemplos:
~$ chmod -R o-w /shared/docs
Quitar recursivamente el permiso de escritura para los “otros” sobre todos los archivos y subdirectorios
del directorio /shared/docs/.
~$ chmod -R og-w,o-x privado/
Quitar recursivamente el permiso de escritura para el grupo y para los otros sobre todo el directorio
privado, y quitar el permiso de ejecución para los otros.
~$ chmod -v 644 varios/archivo*
Cambia los permisos de todos los archivos del directorio varios cuyos nombres comiencen con
archivo a rw-r--r-- (es decir, permiso de lectura para todos y permiso de escritura sólo para el dueño), y
reporta sólo los archivos afectados por la operación.
Lectura de archivos
Mostrar el contenido de uno o más archivos en pantalla
No hay mucho más que decir, este comando simplemente hace eso: mostrar el contenido de uno o más
archivos en la salida estándar, normalmente la pantalla:
~$ cat /etc/fstab
/dev/hda5 / ext3 defaults 1 1
/dev/hda6 /home ext3 defaults 1 2
/dev/hda7 swap swap defaults O O
/dev/hda8 /usr ext3 defaults 1 2
none /proc proc defaults O O
/dev/cdrom /mnt/cdrom auto user,noauto,nosuid,exec,nodev,ro O O
En este primer ejemplo se muestra en pantalla el contenido de un archivo llamado fstab ubicado en el
directorio /etc.
~$ cat conf.modules shells
alias parport_lowlevel parport_pc
pre—instail plip modprobe parport_pc ; echo 7 > /proc/parport/O/irq
#pre—install pcmcia_core /etc/rc.d/init.d/pcmcia start
#alias car—major-14 sound
alias sound esssoloi
keep
/bin/zsh
/bin/bash
/bin/sh
/bin/tcsh
/bin/csh
/bin/ash
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario