Linux tiene una estructura de directorios y ficheros muy similar a la de DOSWin. Los ficheros tienen nombres que obedecen unas normas especiales, están guardados en directorios y algunos son ejecutables, y entre éstos, la mayoría tiene opciones en la línea de órdenes. Incluso puede utilizar comodines, redirección y tuberías. Sólo hay unas pocas diferencias:
NOTENOUG.TXT
. Bajo Linux podemos hacerlo mejor. Si
instaló Linux usando un sistema de ficheros tal como ext2 o umsdos, puede
utilizar nombres más largos (hasta 255 caracteres), y con más de un punto
en ellos: por ejemplo, Este_es.un.nombre_de.fichero.MUY.largo
.
Fíjese que he utilizado tanto mayúsculas como minúsculas: en efecto...
FICHERO.tar.gz
, y fichero.tar.gz
son
dos ficheros distintos. ls
es una orden, LS
es un error;
$ # la siguiente orden crea un directorio llamado "Mis ficheros antiguos"
$ mkdir "Mis ficheros antiguos"
$ ls
Mis ficheros antiguos bin tmp
No deben usarse ciertos caracteres: algunos son !*$&#
.
ls -F
. Por ejemplo:
$ ls -F
cindy.jpg cjpg* Soy_un_directorio/ mi_1er_script* old~
Los ficheros cjpg*
y mi_1er_script*
son «programas»
ejecutables. Bajo DOS, las copias de seguridad de los ficheros suelen acabar en
.BAK
, mientras que bajo Linux acaban con un virgulilla ~. Un fichero
cuyo nombre empieza con un punto es considerado como oculto. Ejemplo: el
fichero .Soy.un.fichero.oculto
no se mostrará a un orden ls
;
/opción
.
En Linux se obtienen con -opción
o --opción
. Ejemplo: dir
/s
se convierte en ls -R
. Fíjese en que muchos programas DOS
(como PKZIP
o ARJ
) utilizan opciones de tipo Unix.
Ahora puede saltar a la sección de equivalencias, pero yo de usted seguiría leyendo.
Unix tiene un tipo de fichero que no existe bajo DOS: el enlace simbólico.
Puede pensar en él como un puntero o enlace a un fichero o a un directorio y
que puede utilizarse en lugar del fichero o del directorio al que apunta; es
similar a los «Accesos Directos» de Windows. Ejemplos de enlaces simbólicos son
/usr/X11
, que apunta a /usr/X11R6
; /dev/modem
, que
apunta a /dev/ttyS0
o a /dev/ttyS1
.
Para crear un enlace simbólico:
$ ln -s <fichero_o_directorio> <nombre_del_enlace>
Ejemplo:
$ ln -s /usr/doc/g77/DOC g77manual.txt
Ahora puede referirse a g77manual.txt
en lugar de
/usr/doc/g77/DOC
. Los enlaces aparecen en los listados de
directorio así:
$ ls -F
g77manual.txt@
$ ls -l
l(muchas cosas...) g77manual.txt -> /usr/doc/g77/DOC
Los ficheros y directorios de DOS tienen los siguientes atributos: A
(fichero), H
(oculto), R
(sólo-lectura), y S
(sistema).
Sólo H
y R
tienen sentido bajo Linux: los ficheros ocultos
comienzan con un punto, y los de sólo lectura, tienen activado el permiso
r
, pero nada más.
Bajo Unix un fichero tiene «permisos» y un propietario, que pertenece a un «grupo». Mire este ejemplo:
$ ls -l /bin/ls
-rwxr-xr-x 1 root bin 27281 Aug 15 1995 /bin/ls*
El primer campo contiene los permisos del fichero /bin/ls
, que
pertenece a root
, del grupo bin
. Dejando la información restante
a un lado (el libro de Matt esta ahí para ese propósito), sólo recordaré
lo que significa -rwxr-xr-x
(de izquierda a derecha):
-
es el tipo de fichero (-
= fichero normal, d
=
directorio, l
= enlace, etc.); rwx
son los permisos del
propietario del fichero (leer, escribir, ejecutar); r-x
son los
permisos para el grupo del propietario del fichero (leer y ejecutar); (no
tocaré el concepto de grupo, puede pasar sin él mientras sea un novato ;-)
r-x
son los permisos para todos los demás usuarios (leer, ejecutar).
Esa es la razón de que no pueda borrar el fichero /bin/ls
a
menos que sea root: no tiene el permiso de escritura para hacer eso. Para
cambiar los permisos de un fichero, la orden es:
$ chmod <quiénXperm> <fichero>
donde quién
podría ser:
u
usuario, que es el propietario,g
(grupo), o
(otros).X
puede ser tanto +
como -
, y perm
puede ser:
r
(lectura), w
(escritura)x
(ejecución). Ejemplos:
$ chmod u+x fichero
esto habilita el permiso de ejecución para el propietario del fichero.
Atajo: chmod +x fichero
.
$ chmod go-wx fichero
esto quita el permiso de escritura y de ejecución para todo el mundo menos al usuario.
$ chmod ugo+rwx fichero
esto le da a todo el mundo el permiso de lectura, escritura y ejecución.
$ chmod +s fichero
esto convierte al fichero en setuid o suid; esto es, un fichero que todo el mundo puede ejecutar con los privilegios de su dueño. Normalmente, se encontrará con archivos suid del root; estos son, a menudo, ficheros importantes del sistema, como el servidor X.
Una manera más corta de referirse a los permisos es con números: rwxr-xr-x
puede ser expresado como 755
(cada letra corresponde a un bit:
---
es 0, --x
es 1, -w-
es 2, -wx
es 3...). Parece
difícil, pero con algo de práctica el concepto se domina. root, el
administrador y superusuario, puede cambiar los permisos de los ficheros de
todo el mundo. Hay mucha más información acerca de esto: LPM.
A la izquierda, las órdenes de DOS; a la derecha, sus equivalentes en Linux.
COPY: cp
DEL: rm
MOVE: mv
REN: mv
TYPE: more, less, cat
Operadores de redirección y de tuberías:
< > >> |
Comodines: * ?
nul: /dev/null
prn, lpt1: /dev/lp0 o /dev/lp1; lpr
EJEMPLOS
DOS Linux
---------------------------------------------------------------------
C:\GUIDO>ATTRIB +R FICH.TXT $ chmod 400 fich.txt
C:\GUIDO>COPY JOE.TXT JOE.DOC $ cp joe.txt joe.doc
C:\GUIDO>COPY *.* TOTAL $ cat * > total
C:\GUIDO>COPY FRACTALS.DOC PRN $ lpr fractals.doc
C:\GUIDO>DEL TEMP $ rm temp
C:\GUIDO>DEL *.BAK $ rm *~
C:\GUIDO>MOVE PAPER.TXT TMP\ $ mv paper.txt tmp/
C:\GUIDO>REN PAPER.TXT PAPER.ASC $ mv paper.txt paper.asc
C:\GUIDO>PRINT LETTER.TXT $ lpr letter.txt
C:\GUIDO>TYPE LETTER.TXT $ more letter.txt
C:\GUIDO>TYPE LETTER.TXT $ less letter.txt
C:\GUIDO>TYPE LETTER.TXT > NUL $ cat letter.txt > /dev/null
no disponible $ more *.txt *.asc
no disponible $ cat section*.txt | less
Notas:
*
es más inteligente bajo Linux: *
equivale a todos los
ficheros excepto los ocultos; .*
equivale a todos los ficheros ocultos;
*.*
equivale sólo a aquellos ficheros que tienen un punto en medio del
nombre, seguido de otros caracteres; p*r
equivaldría tanto a peor
como a por
; *c*
equivaldría tanto a pecado
como a peca
.
more
, pulse espacio para ir leyendo a través del
fichero, q
o Ctrl-C para salir. less
es más intuitivo y permite
utilizar las teclas del cursor;
UNDELETE
, así que piénselo dos veces antes de borrar
cualquier cosa;
2>
para redirigir los mensajes de error (stderr); más aún, el
operador 2>&1
redirige stderr a stdout (la salida estándar),
mientras que 1>&2
redirige stdout a stderr;
[]
. Usar [abc]*
equivale a los ficheros que empiezan por a
, por b
o por c
;
*[I-N,1,2,3]
equivale a los ficheros que acaban por I, J, K, L,
M, N, 1, 2, 3
;
RENAME
como en DOS; esto es, mv *.xxx *.yyy
no
funciona. Un orden similar a REN está disponible en
ftp://sunsite.unc.edu/pub/Linux/utils/file
;
cp -i
y mv -i
para ser avisado cuando un fichero vaya
a ser sobreescrito.
Para ejecutar un programa, escriba su nombre tal y como lo haría bajo DOS. Si
el directorio ---vea la sección
Directorios---
donde el programa está guardado está incluido en la variable de entorno
PATH
---sección
Inicialización--- el
programa comenzará a ejecutarse. Excepción: al contrario que bajo DOS, en
Linux un programa localizado en el directorio actual no se ejecutará a manos
que el directorio actual (simbolizado por «.
») esté incluido en el PATH.
Para evitarlo, suponiendo que el programa se llame prog
, teclee
./prog
.
Este es el aspecto típico de una línea de órdenes:
$ orden [-o1 [-o2] ... [-on]] [par1 [par2] ... [parn]] [< input] [> output]
donde -o1
, ..., -on
son las opciones del programa, par1
,
..., parn
son los parámetros del programa. Puede encadenar varias
órdenes en la línea de órdenes:
$ orden1 ; orden2 ; ... ; ordenN
Esto es todo acerca de ejecutar órdenes, pero es fácil ir un paso más allá. Una de las principales razones para usar Linux es que es un sistema operativo multitarea ---puede ejecutar varios programas (a partir de ahora, procesos) a la vez---. Puede lanzar procesos en segundo plano (background) y seguir trabajando inmediatamente. Más aún, Linux permite tener varias sesiones abiertas simultáneamente: es como tener muchos ordenadores en los que trabajar a la vez.
su - <nombre_de_usuario>
. Ejemplo:
su - root
. Esto es útil, por ejemplo, cuando se necesita realizar
una tarea que sólo el root puede hacer.
exit
. Si hay trabajos parados
(ver más abajo), será avisado.
&
',
al final de la línea de órdenes:
$ nomprog [-opciones] [parametros] [< input] [> output] &
[1] 123
[1]
; ver más abajo), y con un PID (123 en nuestro
ejemplo).
ps ax
. Esto generará
una lista de procesos actualmente en ejecución.
kill <PID>
.
Puede que necesite matar un proceso cuando no sepa cómo cerrarlo de la
manera correcta... ;-). A veces, sólo podrá matar un proceso con
kill -SIGKILL <PID>
.
Además, el intérprete de órdenes permite suspender temporalmente (parar)
un proceso, mandar un proceso al segundo plano, y traer un proceso del
segundo plano al primer plano. En este contexto, los procesos son
denominados «trabajos» (jobs).
jobs
. Aquí los trabajos
son identificados por su número de trabajo, no por su PID.
bg <trabajo>
.
fg <%trabajo>
. Para traer al primer plano el último trabajo
enviado al segundo plano, simplemente teclee fg
.
kill <%trabajo>
donde trabajo
puede ser 1, 2, 3...
Usando estas órdenes puede formatear un disco, comprimir un puñado de ficheros, compilar un programa, y descomprimir un fichero simultáneamente, y todavía tener la línea de órdenes a su disposición. Inténtelo con Windows, sólo para ver la diferencia de prestaciones (siempre que no se le cuelgue, claro).
Para ejecutar un programa en una máquina remota cuyo nombre es
maquina.remota.edu
, teclee:
$ telnet maquina.remota.edu
Tras introducir su nombre de usuario y contraseña, arranque su programa favorito. Obviamente, debe tener una cuenta en la máquina remota.
Si tiene X11, puede incluso ejecutar una aplicación X en un ordenador
remoto, mostrándolo en su pantalla de X. Supongamos
maquina.remota.edu
la máquina X remota y sistema.linux.yo
su
máquina Linux. Para ejecutar desde sistema.linux.yo
un programa X
que reside en maquina.remota.edu
, haga lo siguiente:
$ xhost +maquina.remota.edu
$ telnet maquina.remota.edu
remote:$ DISPLAY=sistema.linux.yo:0.0
remote:$ programa &
(en vez de DISPLAY...
, puede que tenga que escribir setenv
DISPLAY sistema.linux.yo:0.0
. Depende del intérprete de órdenes remoto).
Y.. ¡voila! Ahora programa
se iniciará en maquina.remota.edu
y
se mostrará en su máquina. Aunque mejor no intente esto con un módem,
porque sería demasiado lento para poder utilizarse. Además: es un método
muy inseguro: por favor, lea el «mini-COMO de Aplicaciones X Remotas» en
http://sunsite.unc.edu/LDP/HOWTO/mini/Remote-X-Apps
.