Linux tiene un sistema de ficheros ---la estructura de directorios y los ficheros que contienen--- muy similar al del DOS. 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 comandos. Incluso puede utilizar comodines, redirección y tuberías como en DOS. 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
. Dése cuenta de que he
utilizado tanto mayúsculas como minúsculas: en efecto...
FICHERO.tar.gz
,
Fichero.tar.gz
y fichero.tar.gz
son tres ficheros distintos.
ls
es un comando, LS
sería un error;
.COM
y .EXE
para los
programas, o .BAT
para los ficheros de procesamiento por lotes. Los
ficheros ejecutables se marcan con un asterisco. 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 gurruño
~. Un fichero cuyo nombre empieza con un punto es considerado como
oculto. Ejemplo: el fichero .Soy.un.fichero.oculto
no se mostrará
a un comando 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.
Puede ahora saltar a las Sección Traduciendo, pero yo de usted seguiría leyendo.
Unix tiene un tipo de fichero que no existe bajo DOS: el enlace simbólico.
Puede pensar que es 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 95. Ejemplos de enlaces
simbólicos son /usr/X11
, que apunta a /usr/X11R6
;
/dev/modem
, que apunta a /dev/cua0
o a
/dev/cua1
, según donde esté el módem.
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 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
".
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).
A eso se debe el porqué no puede 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, el comando es:
$ chmod <quienXperm> <fichero>
donde quien
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 al ejecutarse lo hace con privilegios de root.
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
, al ser 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, los comandos de DOS; a la derecha, sus correspondientes de 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>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
idem $ more *.txt *.asc
idem $ cat section*.txt | less
C:\GUIDO>type letter.txt > nul $ cat letter.txt > /dev/null
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;
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 (Sección
Directorios) donde el programa está
guardado está incluido en la variable de entorno PATH
(Sección
Inicializacion), 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
.
Éste es el aspecto típico de una línea de comandos:
$ comando -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 varios
comandos en la línea de comandos:
$ comando1 ; comando2 ; ... ; comandoN
Esto es todo acerca de ejecutar comandos, 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.
$ Alt-F1 ... Alt-F6
$ su - <mi_nombre_de_usuario>
Ejemplo:
$ su - root
Esto es útil, por ejemplo, cuando se necesita montar un disco (Sección
Disquetes): normalmente, sólo root
puede hacer eso.
$ exit
Si hay trabajos parados (ver más abajo), será avisado.
$ nomprog [-opciones] [parametros] [< input] [> output]
&
, al final de la línea de comandos:
$ nomprog [-opciones] [parametros] [< input] [> output] &
[1] 123
el shell o intérprete de comandos identifica el proceso con un número de
trabajo (p.e.
$ ps -a
Esto generará una lista de procesos actualmente en ejecución.
$ kill <PID>
Puede necesitar matar un proceso cuando no sabe cómo cerrarlo de la manera
correcta... ;-). A veces, un proceso solo podrá ser matado con alguna de
las siguientes instrucciones:
$ kill -15 <PID>
$ kill -9 <PID>
Además, el intérprete de comandos 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
aquí los trabajos son identificados por su número de trabajo, no por su
PID.
$ Ctrl-C
$ Ctrl-Z
$ bg <trabajo>
$ fg <trabajo>
$ kill <%trabajo>
donde trabajo
puede ser 1, 2, 3; el %
indica que nos
referimos a un número de trabajo, y no a un PID. Usando estos comandos
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 comandos a su disposición. Inténtelo con el DOS. 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 cuya dirección IP es
remote.bigone.edu
, teclee:
$ slogin remote.bigone.edu -l <login_en_maquina_remota>
Tras meter su password, 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 remote.bigone.edu
la máquina X remota y local.linux.box
su máquina Linux. Para ejecutar
desde local.linux.box
un programa X que reside en
remote.bigone.edu
, haga lo siguiente:
$ xhost +remote.bigone.edu
$ slogin remote.bigone.edu -l <login_en_maquina_remota>
remote:$ DISPLAY=local.linux.box:0.0
remote:$ programa &
(en vez de DISPLAY...
, puede que tenga que escribir setenv
DISPLAY local.linux.box:0.0
. Depende del shell remoto).
Ahora programa
comenzará en remote.bigone.edu
y se mostrará en
su máquina. Aunque mejor no intente esto en una línea ppp.