Guía de comandos UNIX/LINUX

Aunque me enfoco más a Oracle y herramientas de BI, es muy importante y conveniente, el tener nociones de algunos comandos en sistemas operativos Unix, como Linux, AIX, HP-UX, etcétera. Esto, porque muchas veces las bases de datos están montadas en sistemas operativos de este tipo.

Así, en este único post, estaré complentándolo conforme vaya conociendo un nuevo comando, o conozca un aspecto nuevo de este tipo de sistemas operativos.

Notas

  • Algunos de los comandos o sus variantes no funcionan o no existen de acuerdo al sistema operativo que se esté usando: HP-UX, Solaris, AIX, RedHat, Ubuntu, Suse, etcétera. Para ver más detalle de la sintáxis de un comando, se puede usar el comando man, cuyo formato es como sigue:

man comando

  • En el formato de los comandos:
    • [] denotan algo opcional, lo que está contenido en ellos, puede o no ir.
    • | indican que se puede tener una opción u otra, por ejemplo a|b, significa que puede ser a o puede ser b.
  • En este tipo de sistemas operativos, las mayúsculas y minúsculas son tratadas de manera distinta, por lo que HOLA es diferente de hola. Esto para tener el cuidado necesario al momento de copiar un archivo o buscar un patrón en un archivo, etcétera.
  • En sistemas operativos Linux, es común que para comandos importantes como chown, se agregue un sudo antes para que lo ejecute como root, para esto, es probable que pida la contraseña del usuario principal.

Comandos

alias [nombre_alias=comando]

Sirve para ponerle un alias a un comando cualquiera, no importa que este sea complejo. Si es este último el caso, entonces de debe encerrar entre comillas.

Si se teclea sin ningún parámetro, mostrará todos los alias que están configurados.

Ejemplo:

orlando_olguin@ooo-laptop:~$ alias comando="ls -la"
orlando_olguin@ooo-laptop:~$ comando
total 28460
drwxr-xr-x  41 orlando_olguin orlando_olguin     4096 oct 16 22:56 .
drwxr-xr-x   4 root           root               4096 abr 17 19:06 ..
drwx------   3 orlando_olguin orlando_olguin     4096 abr 17 19:36 .adobe
-rw-rw-r--   1 orlando_olguin orlando_olguin      166 oct 15 17:24 .asunder
-rw-rw-r--   1 orlando_olguin orlando_olguin      149 oct 15 17:14 .asunder_album_artist
-rw-rw-r--   1 orlando_olguin orlando_olguin       86 oct 15 17:14 .asunder_album_genre
-rw-rw-r--   1 orlando_olguin orlando_olguin      486 oct 15 17:14 .asunder_album_title
-rw-------   1 orlando_olguin orlando_olguin    21782 oct 16 23:23 .bash_history
-rw-r--r--   1 orlando_olguin orlando_olguin      220 abr 17 19:06 .bash_logout
-rw-r--r--   1 orlando_olguin orlando_olguin     3716 abr 17 19:10 .bashrc
drwx------  24 orlando_olguin orlando_olguin     4096 ago  2 23:51 .cache
drwxr-xr-x   9 orlando_olguin orlando_olguin     4096 may  1 15:03 .cddbslave
drwx------   3 orlando_olguin orlando_olguin     4096 abr 17 19:25 .compiz
drwx------  29 orlando_olguin orlando_olguin     4096 ago 20 12:52 .config

orlando_olguin@ooo-laptop:~$ alias
alias comando='ls -la'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto -i'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ps='ps -fe | grep -v grep'

awk ‘{print “comando ” parámetro(s) [“comando” parámetro(s)…]}’

Este comando sirve para generar de manera serial, algún comando que se quiera ejecutar para distintos archivos y/o directorios. Usualmente, se combina con otros comandos que listan archivos. Por medio de la opción sh, se pueden ejecutar, si no se incluye, sólo se listan.

Los parámetros se listan por medio de $no_parámetro, usando el $1 para el primer parámetro, $2 para el segundo y así sucesivamente.

Ejemplo:

orlandoolguin@ooo-laptop:~/ewq/ooo_scripts$ ls d*.sql
date.sql  dbsize.sql  dictcol.sql  dict.sql  dir.sql  discon.sql  distr.sql  dummy.sql
orlandoolguin@ooo-laptop:~/ewq/ooo_scripts$ ls d*.sql | awk '{print "ls -l " $1}'
ls -l date.sql
ls -l dbsize.sql
ls -l dictcol.sql
ls -l dict.sql
ls -l dir.sql
ls -l discon.sql
ls -l distr.sql
ls -l dummy.sql
orlandoolguin@ooo-laptop:~/ewq/ooo_scripts$ ls d*.sql | awk '{print "ls -l " $1}' | sh
-rwxrwxrwx 1 orlandoolguin orlandoolguin 791 2010-05-28 22:48 date.sql
-rwxrwxrwx 1 orlandoolguin orlandoolguin 1259 2010-05-28 22:48 dbsize.sql
-rwxrwxrwx 1 orlandoolguin orlandoolguin 1114 2010-06-22 10:04 dictcol.sql
-rwxrwxrwx 1 orlandoolguin orlandoolguin 1006 2010-06-01 13:04 dict.sql
-rwxrwxrwx 1 orlandoolguin orlandoolguin 1136 2010-06-21 16:36 dir.sql
-rwxrwxrwx 1 orlandoolguin orlandoolguin 2040 2010-06-17 19:34 discon.sql
-rwxrwxrwx 1 orlandoolguin orlandoolguin 1209 2010-06-28 11:14 distr.sql
-rwxrwxrwx 1 orlandoolguin orlandoolguin 3772 2011-02-19 01:14 dummy.sql

cat [directorio/]nombre_archivo

Muestra el contenido de un archivo en un sólo vistazo, no se detiene hasta que se termina de mostrar el archivo.

Ejemplo:

$ ls
archivo.txt            audit_bk_20080828.log
$ cat audit_bk_20080828.log
SYS
SYSTEM
OUTLN
JONES
SCOTT
BLAKE
TRACESVR
ADMAUD
CLARK
ALTEC
ADAMS
DBSNMP
PRUEBA02
PRUEBA27
PRUEBA32
PRUEBA30
PRUEBA05
PRUEBA08
PRUEBA11
PRUEBA14

chmod permisos [directorio/]nombre_archivo

Con este comando, se pueden modificar los permisos de un archivo. Estos se ven al momento de ejecutar un ls -la y son los que se ven en la parte izquierda del archivo. Por ejemplo:

oracle@orlandoolguin:~/prueba$ ls -la prueba.txt
-rwxrwxrwx  1 oracle oracle   44 2009-09-20 14:01 prueba.txt

Estos permisos, -rwxrwxrwx, se dividen en 4 grupos de los 10 caracteres que los componen:

Si tiene una d, implica que el “archivo”, es un directorio, de lo contrario, es un archivo.
rwx Los 3 siguientes caracteres, son los permisos que se tienen para el usuario actual; r – lectura, w – escritura, x – ejecutable
rwx Los 3 siguientes caracteres, son los permisos que se tienen para el grupo al que pertenece el archivo; r – lectura, w – escritura, x – ejecutable
rwx Los 3 últimos caracteres, son los permisos para cualquier otro usuario que no pertence al grupo; r – lectura, w – escritura, x – ejecutable

Nota. En Linux y Unix, cualquier archivo puede ser ejecutable no importante su extensión o incluso, si no tiene. Para lograr esto, debe tener permisos para ejecutarse (x) en cualquiera de los 3 grupos de permisos.

Ok, ahora, ¿cómo le asignamos los permisos con el chmod? Es muy sencillo. Si recuerdan las posiciones en el código binario, encontrarán que se leen de derecha a izquierda con un valor para cada posición:

posición   X  Y  Z
valor      4  2  1

Así, si queremos que se activen la posición X y la Z, se suma 4 + 1 = 5. Si se desea activar nada más la Y, entonces es el valor 2. Si se desean activar las 3, se suma 4 + 2 + 1 = 7.

De esta forma, para cambiar los permisos a un archivo, se usa el chmod con un número para cada uno de los 3 grupos.

Ejemplo:

oracle@orlandoolguin:~/prueba$ ls -la prueba.txt
-rwxrwxrwx 1 oracle oracle 44 2009-09-20 14:01 prueba.txt
oracle@orlandoolguin:~/prueba$ chmod 775 prueba.txt
oracle@orlandoolguin:~/prueba$ ls -la prueba.txt
-rwxrwxr-x 1 oracle oracle 44 2009-09-20 14:01 prueba.txt
oracle@orlandoolguin:~/prueba$ chmod 555 prueba.txt
oracle@orlandoolguin:~/prueba$ ls -la prueba.txt
-r-xr-xr-x 1 oracle oracle 44 2009-09-20 14:01 prueba.txt
oracle@orlandoolguin:~/prueba$ chmod 744 prueba.txt
oracle@orlandoolguin:~/prueba$ ls -la prueba.txt
-rwxr--r-- 1 oracle oracle 44 2009-09-20 14:01 prueba.txt

chown usuario:grupo [directorio/]nombre_archivo

Muchas veces, al crear un archivo, lo hacemos por ejemplo con nuestro usuario, y este usuario pertenece a un grupo. Sin embargo, al entrar con otro usuario, por ejemplo Oracle; queremos que acceda a dicho archivo, pero al pertenecer a otro grupo, no lo podrá ejecutar a menos que tenga los permisos de la sección de otros como vimos en el tema anterior del chmod.

Para resolver esto, se tiene que usar la herramienta chown con root para poder cambiar de usuario y grupo a un archivo. En el caso de Linux, hay que recordar que se precede la herramienta sudo para realizar esto.

Ejemplo:

oracle@orlandoolguin:~/prueba$ ls -la prueba.txt
-rwxr--r-- 1 oracle oracle 44 2009-09-20 14:01 prueba.txt
oracle@orlandoolguin:~/prueba$ sudo chown oolguin:oolguin prueba.txt
[sudo] password for oracle:
oracle@orlandoolguin:~/prueba$ ls -la prueba.txt
-rwxr--r-- 1 oolguin oolguin 44 2009-09-20 14:01 prueba.txt
oracle@orlandoolguin:~/prueba$ sudo chown oracle:oracle prueba.txt
oracle@orlandoolguin:~/prueba$ ls -la prueba.txt
-rwxr--r--  1 oracle oracle   44 2009-09-20 14:01 prueba.txt

cp [-r] [directorio/]nombre_archivo directorio|nvo_nombre_archivo|directorio/nombre_archivo

Copia un archivo hacia otra ubicación, o en la misma ubicación con otro nombre. La opción -r indica que será recursivo, si lo que se está copiando, es un directorio, entonces con esta opción se indica que se copiarán todos sus subdirectorios.

Ejemplo:

$ ls
archivo.txt            audit_bk_20080828.log
$ cp audit_bk_20080828.log prueba.log
$ ls
archivo.txt            audit_bk_20080828.log  prueba.log

convert [opciones]  [directorio/]nombre_archivo [directorio/]nombre_archivo

Este comando, sirve para manipular imágenes de una manera sencilla y rápida. Se puede convertir una imagen desde un formato a otro simplemente con cambiar la extensión de la imagen como se puede ver a continuación:

orlando_olguin@ooo-laptop:~$ ls apaqro_limpieza_01*
apaqro_limpieza_01.jpg
orlando_olguin@ooo-laptop:~$ convert apaqro_limpieza_01.jpg apaqro_limpieza_01.bmp
orlando_olguin@ooo-laptop:~$ ls apaqro_limpieza_01*
apaqro_limpieza_01.bmp  apaqro_limpieza_01.jpg

Después de realizar el procedimiento de conversión, ya podemos ver la imagen como un bmp. Ahora, un par de las opciones más usadas por mi, son:

-resize ANCHOxALTO
Ajusta el tamaño de la imagen de manera proporcional, de tal forma que no exceda el ancho y alto en pixeles estipulados.

-quality PORCENTAJE
Disminuye la calidad de la imagen al porcentaje determinado del original. Esto sirve mucho para cuando se quieren publicar imágenes en alguna página web y que se quiere que mantengan un buen tamaño.

Ejemplo:

orlando_olguin@ooo-laptop:~/pictures/2011/20110416/jpeg/small$ ls -la apaqro_limpieza_01*
-rw-r--r-- 1 orlando_olguin orlando_olguin 7056332 2011-04-28 14:26 apaqro_limpieza_01.jpg
orlando_olguin@ooo-laptop:~/pictures/2011/20110416/jpeg/small$ convert -resize 1200x800 -quality 75 apaqro_limpieza_01.jpg apaqro_limpieza_01_convertido.jpg
orlando_olguin@ooo-laptop:~/pictures/2011/20110416/jpeg/small$ ls -la apaqro_limpieza_01*
-rw-r--r-- 1 orlando_olguin orlando_olguin  168087 2011-04-28 14:37 apaqro_limpieza_01_convertido.jpg
-rw-r--r-- 1 orlando_olguin orlando_olguin 7056332 2011-04-28 14:26 apaqro_limpieza_01.jpg

crontab -e|-l

Sirve para programar cierta tarea recurrente en el servidor, esto se hace por medio de una tabla donde se programan las cosas. Con la opción -e se edita dicha tabla cronológica en el procesador vi. Con la opción -l, se lista lo que se tiene programado. La estructura de la tabla es como sigue:

mi hh dd mm ds comando_unix

donde:

mi   son los minutos, 0-59
hh   son las horas, 0-23
dd   son los días, 1-31
mm son los meses, 1-12
ds   es el día de la semana, 0_Domingo – 6_Sábado

Con estas opciones, se puede programar el comando_unix a ejecutar en una hora y minuto determinados, o en algún día de la semana en especial. Si no importa uno de los datos, se pone un asterisco * en la posición que le corresponde.

Ejemplo:

# Este proceso se ejecuta cada hora al minuto 30.
30  * * * * proc_hora.sh
# Este proceso se ejecuta todos los días a las 10:25 horas.
25 10 * * * proc_diario.sh
# Este proceso se ejecuta semanalmente, los domingos a las 8:10 horas.
10  8 * * 0 proc_semanal.sh

df (bdf) -k|-g|-h

El comando puede ser como df o bdf de acuerdo al sistema operativo, son muy similares y ofrecen casi la misma estructura de información. Muestra la estructura de file systems, así como el tamaño por cada uno de ellos y el espacio libre. Del formato:

-k   es para mostrar la información en Kbytes
-g   es para mostrar la información en Gbytes
-h   es para mostrar la información en un formato más claro de leer

Ejemplo:

$ df -h
Filesystem             size   used  avail capacity  Mounted on
/dev/dsk/c0t0d0s0       11G    10G    31M   100%    /
/devices                 0K     0K     0K     0%    /devices
ctfs                     0K     0K     0K     0%    /system/contract
proc                     0K     0K     0K     0%    /proc
mnttab                   0K     0K     0K     0%    /etc/mnttab
swap                   2.8G   1.0M   2.8G     1%    /etc/svc/volatile
objfs                    0K     0K     0K     0%    /system/object
fd                       0K     0K     0K     0%    /dev/fd
/dev/dsk/c0t0d0s5      5.8G   1.2G   4.5G    21%    /var
swap                   2.8G   216K   2.8G     1%    /tmp
swap                   2.8G    56K   2.8G     1%    /var/run
/dev/dsk/c0t0d0s7       49G   6.9G    42G    15%    /space
/export/home/patrol     11G    10G    31M   100%    /home/patrol

export VARIABLE_AMBIENTE=valor

Se usa para implementar una variable de ambiente con su respectivo valor. Al ser asignada de ésta forma, la variable de ambiente tiene vigencia mientras uno esté conectado en la sesión actual.

Ejemplo:

export ORACLE_SID=lab

grep [-c|-i|-l|-n|-v] palabra_o_patrón [directorio/]nombre_archivo

Se usa para buscar una palabra o patrón en un archivo. Las opciones usadas son:

-c para contar las veces que se encuentra la palabra en el archivo.
-i para ignorar si el patrón está en mayúsculas y minúsculas.
-l para listar el archivo que contiene el patrón, esto es útil cuando se busca en una serie de archivos.
-n para mostrar el número de línea donde se encontró el texto.
-v para mostrar las líneas donde no aparece el texto.

Ejemplo:

$ grep -c PRUEBA registros.log
8
$ grep -c prueba registros.log
0
$ grep -c -i  prueba registros.log
8
$ grep -l PRUEBA registros.log
registros.log
$ grep -n PRUEBA registros.log
13:PRUEBA02
14:PRUEBA27
15:PRUEBA32
16:PRUEBA30
17:PRUEBA05
18:PRUEBA08
19:PRUEBA11
20:PRUEBA14
$ grep -v PRUEBA registros.log
SYS
SYSTEM
OUTLN
JONES
SCOTT
BLAKE
TRACESVR
ADMAUD
CLARK
ALTEC
ADAMS
DBSNMP

ln [-opciones] archivo|directorio [alias_archivo|directorio]

Este comando, nos permite crear ligas hacia un directorio o archivo que se encuentra en algún otro lado. Hay ligas duras y ligas simbólicas, la diferencia estriba en que las primeras requieren a fuerza que el archivo o directorio destino exista. Si estas ligas existen en Windows, vendrían a sustituir un acceso directo.

Si se omite el alias que se le puede poner al archivo o directorio, y es un directorio, entonces tomará el nombre del último directorio después de la última diagonal (/). Para borrar una liga, se usa el comando rm como si fuera un archivo más.

Tiene varias opciones, pero unas de las más útiles y que yo uso más.  son:

s    Para crear una liga simbólica
f    Para forzar la creación

Ejemplo:

orlandoolguin@ooo-laptop:~/paraligas$ ls -la
total 8
drwxr-xr-x  2 orlandoolguin orlandoolguin 4096 2011-03-24 15:09 .
drwxr-xr-x 38 orlandoolguin orlandoolguin 4096 2011-03-24 15:09 ..
orlandoolguin@ooo-laptop:~/paraligas$ ls /u01/ewq/ooo_scripts
1o_leeme.txt  date.sql     dict.sql    dummy.sql        idxcol.sql  kilses.sql  objdef.sql               priv.sql    ses.sql     tbsdef.sql  user.sql    xplan.sql
conunx.sql    dbsize.sql   dir.sql     en_construccion  idxtab.sql  label.sql   objdep.sql               qrydef.sql  spdef.sql   tbs.sql     usrobj.sql
conwin.sql    DeTanel      discon.sql  getddl.sql       info.sql    lock.sql    objsize.sql              rowcnt.sql  syn.sql     trcoff.sql  vwdef.sql
crea_db       dictcol.sql  distr.sql   hvyqry.sql       kill.sql    login.sql   ooo_scrips_20110219.jpg  sec.sql     tabdef.sql  trcon.sql   waits.sql
orlandoolguin@ooo-laptop:~/paraligas$ ls -la
total 8
drwxr-xr-x  2 orlandoolguin orlandoolguin 4096 2011-03-24 15:09 .
drwxr-xr-x 38 orlandoolguin orlandoolguin 4096 2011-03-24 15:09 ..
orlandoolguin@ooo-laptop:~/paraligas$ ln -sf /u01/ewq/ooo_scripts
orlandoolguin@ooo-laptop:~/paraligas$ ls
ooo_scripts
orlandoolguin@ooo-laptop:~/paraligas$ ls -la
total 8
drwxr-xr-x  2 orlandoolguin orlandoolguin 4096 2011-03-24 15:10 .
drwxr-xr-x 38 orlandoolguin orlandoolguin 4096 2011-03-24 15:09 ..
lrwxrwxrwx  1 orlandoolguin orlandoolguin   20 2011-03-24 15:10 ooo_scripts -> /u01/ewq/ooo_scripts
orlandoolguin@ooo-laptop:~/paraligas$ ls ooo_scripts
1o_leeme.txt  date.sql     dict.sql    dummy.sql        idxcol.sql  kilses.sql  objdef.sql               priv.sql    ses.sql     tbsdef.sql  user.sql    xplan.sql
conunx.sql    dbsize.sql   dir.sql     en_construccion  idxtab.sql  label.sql   objdep.sql               qrydef.sql  spdef.sql   tbs.sql     usrobj.sql
conwin.sql    DeTanel      discon.sql  getddl.sql       info.sql    lock.sql    objsize.sql              rowcnt.sql  syn.sql     trcoff.sql  vwdef.sql
crea_db       dictcol.sql  distr.sql   hvyqry.sql       kill.sql    login.sql   ooo_scrips_20110219.jpg  sec.sql     tabdef.sql  trcon.sql   waits.sql
orlandoolguin@ooo-laptop:~/paraligas$ ln -sf /u01/ewq/ooo_scripts/dummy.sql
orlandoolguin@ooo-laptop:~/paraligas$ ls
dummy.sql  ooo_scripts
orlandoolguin@ooo-laptop:~/paraligas$ ls -la
total 8
drwxr-xr-x  2 orlandoolguin orlandoolguin 4096 2011-03-24 15:12 .
drwxr-xr-x 38 orlandoolguin orlandoolguin 4096 2011-03-24 15:09 ..
lrwxrwxrwx  1 orlandoolguin orlandoolguin   30 2011-03-24 15:12 dummy.sql -> /u01/ewq/ooo_scripts/dummy.sql
lrwxrwxrwx  1 orlandoolguin orlandoolguin   20 2011-03-24 15:10 ooo_scripts -> /u01/ewq/ooo_scripts
orlandoolguin@ooo-laptop:~/paraligas$ more dummy.sql
set echo   off
set verify off
--------------------------------------------------------------------------------------------------------------
-- Script.      Dummy.sql
-- Descripcion. Llena una tabla con datos DUMMY, puede crear una tabla-copia de la original.
-- Autor.       Orlando Olguin Olvera | https://orlandoolguin.wordpress.com
-- Fecha.       23/06/2010 | Creacion
--              19/02/2011 | Adecuacion para correccion de problema con NUMBER sin escala
-- Parametros   nombre_tabla   emp
--              cant_registros 100
--              band_clonacion false|true
--------------------------------------------------------------------------------------------------------------
...
orlandoolguin@ooo-laptop:~/paraligas$ rm dummy.sql
orlandoolguin@ooo-laptop:~/paraligas$ ls
ooo_scripts
orlandoolguin@ooo-laptop:~/paraligas$ ls -la /u01/ewq/ooo_scripts/dummy.sql
-rwxrwxrwx 1 orlandoolguin orlandoolguin 3772 2011-02-19 01:14 /u01/ewq/ooo_scripts/dummy.sql
orlandoolguin@ooo-laptop:~/paraligas$ ln -sf /u01/ewq/ooo_scripts/dummy.sql prueba.sql
orlandoolguin@ooo-laptop:~/paraligas$ ls
ooo_scripts  prueba.sql
orlandoolguin@ooo-laptop:~/paraligas$ ls -la
total 8
drwxr-xr-x  2 orlandoolguin orlandoolguin 4096 2011-03-24 15:13 .
drwxr-xr-x 38 orlandoolguin orlandoolguin 4096 2011-03-24 15:09 ..
lrwxrwxrwx  1 orlandoolguin orlandoolguin   20 2011-03-24 15:10 ooo_scripts -> /u01/ewq/ooo_scripts
lrwxrwxrwx  1 orlandoolguin orlandoolguin   30 2011-03-24 15:13 prueba.sql -> /u01/ewq/ooo_scripts/dummy.sql
orlandoolguin@ooo-laptop:~/paraligas$ more prueba.sql
set echo   off
set verify off
--------------------------------------------------------------------------------------------------------------
-- Script.      Dummy.sql
-- Descripcion. Llena una tabla con datos DUMMY, puede crear una tabla-copia de la original.
-- Autor.       Orlando Olguin Olvera | https://orlandoolguin.wordpress.com
-- Fecha.       23/06/2010 | Creacion
--              19/02/2011 | Adecuacion para correccion de problema con NUMBER sin escala
-- Parametros   nombre_tabla   emp
--              cant_registros 100
--              band_clonacion false|true
--------------------------------------------------------------------------------------------------------------
...

ls [- [l|a|r|t]] [directorio|[directorio/]nombre_archivo|patrón]

Lista el contenido de un directorio, por medio de un patrón, se pueden traer nada más los archivos que concuerden con dicho patrón.

Ejemplo:

$ ls
archivo.txt    archivo2.txt   registros.log
$ ls -la
total 10
drwxr-xr-x   2 oracle   dba          512 Sep 25 09:51 .
drwxr-xr-x  14 oracle   dba         1024 Sep 25 09:07 ..
-rw-r--r--   1 oracle   dba          187 Sep 25 09:07 archivo.txt
-rw-r--r--   1 oracle   dba          148 Sep 25 09:51 archivo2.txt
-rw-r--r--   1 oracle   dba          148 Sep 25 09:10 registros.log
$ ls -lrt
total 6
-rw-r--r--   1 oracle   dba          187 Sep 25 09:07 archivo.txt
-rw-r--r--   1 oracle   dba          148 Sep 25 09:10 registros.log
-rw-r--r--   1 oracle   dba          148 Sep 25 09:51 archivo2.txt

lsblk

Lista los discos y sus particiones, lo he probado en Linux, no sé si funciona en Unix.

Ejemplo:

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 119.2G  0 disk 
├─sda1   8:1    0  14.3G  0 part /
├─sda2   8:2    0     1K  0 part 
├─sda5   8:5    0   3.8G  0 part [SWAP]
└─sda6   8:6    0 101.1G  0 part /home
sr0     11:0    1  1024M  0 rom

mkdir nombre_directorio

Crea un directorio nuevo.

Ejemplo:

$ ls
archivo.txt            audit_bk_20080828.log
$ mkdir directorio_prueba
$ ls
archivo.txt            audit_bk_20080828.log  directorio_prueba

more [directorio/]nombre_archivo

Muestra el contenido de un archivo por partes, cada vez que se llega al final de una página, se espera hasta que uno tecleé un comando-tecla especial. Si se combina con un comando previo separado por pipe (|), hace que el resultado del comando antes del pipe, sea tratado como un “archivo” y sobre él se hace el more.

Cuando el archivo está grande, en la parte inferior, se mostrará un texto con el porcentaje del avance que se tiene en el archivo, para avanzar línea por línea se usa Enter, para avanzar una página, se usa Espacio y para retroceder una página, se usa b.

Ejemplo:

$ ls
archivo.txt    registros.log
$ more registros.log
SYS
SYSTEM
OUTLN
JONES
SCOTT
BLAKE
TRACESVR
ADMAUD
CLARK
ALTEC
ADAMS
DBSNMP
PRUEBA02
PRUEBA27
PRUEBA32
PRUEBA30
PRUEBA05
PRUEBA08
PRUEBA11
PRUEBA14

mv [directorio/]nombre_archivo [directorio/]nombre_archivo | directorio

Mueve un archivo de ubicación si el destino es otro directorio. Si no es otra la ubicación, entonces sólo le cambia el nombre.

Ejemplo:

$ ls
archivo.txt            audit_bk_20080828.log
$ mv audit_bk_20080828.log registros.log
$ ls
archivo.txt    registros.log

passwd [usuario]

Este comando, nos permite cambiar la contraseña del usuario con el que estamos conectados a Linux o Unix. Si se cuenta con los privilegios suficientes, se puede cambiar la contraseña de cualquier usuario.

Ejemplo:

Para cambiar la contraseña del propio usuario:

orlando_olguin@ooo-laptop:~$ passwd
Changing password for orlando_olguin.
(current) UNIX password: 
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

Para cambiar la contraseña de cualquier otro usuario (si es Unix se hace con el usuario root):

orlando_olguin@ooo-laptop:~$ cd /etc
orlando_olguin@ooo-laptop:/etc$ grep /home passwd   <- Mostrando usuarios
syslog:x:101:102::/home/syslog:/bin/false
saned:x:110:116::/home/saned:/bin/false
orlando_olguin:x:1000:1000:orlando_olguin,,,:/home/orlando_olguin:/bin/bash
usbmux:x:113:46:usbmux daemon,,,:/home/usbmux:/bin/false
oracle:x:1001:1001:oracle,,,,:/home/oracle:/bin/bash
orlando_olguin@ooo-laptop:/etc$ sudo passwd oracle
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

ps [-fe]

Muestra los procesos que se encuentran corriendo en este momento.

Ejemplo:

$ ps -fe
     UID   PID  PPID   C    STIME TTY         TIME CMD
    root     0     0   0   Sep 19 ?           0:05 sched
    root     1     0   0   Sep 19 ?           0:02 /sbin/init
    root     2     0   0   Sep 19 ?           0:00 pageout
    root     3     0   1   Sep 19 ?          24:45 fsflush
  daemon   223     1   0   Sep 19 ?           0:00 /usr/lib/nfs/statd
    root     7     1   0   Sep 19 ?           0:24 /lib/svc/bin/svc.startd
    root     9     1   0   Sep 19 ?           0:13 /lib/svc/bin/svc.configd
    root    93     1   0   Sep 19 ?           1:32 /usr/lib/picl/picld
    root   226     7   0   Sep 19 ?           0:00 /usr/lib/saf/sac -t 300
    root   194     1   0   Sep 19 ?           0:00 /usr/lib/efcode/sparcv9/efdaemon
    root    85     1   0   Sep 19 ?           0:21 /usr/sbin/nscd
    root   321     1   0   Sep 19 ?           0:02 /usr/sbin/syslogd
    root   215     1   0   Sep 19 ?           0:12 /usr/sbin/cron
    root    46     1   0   Sep 19 ?           0:00 /sbin/dhcpagent
  daemon   220     1   0   Sep 19 ?           0:02 /usr/lib/nfs/nfsmapid
    root    74     1   0   Sep 19 ?           0:00 /usr/lib/sysevent/syseventd
    root   316     1   0   Sep 19 ?           0:00 /usr/lib/ssh/sshd
  daemon   219     1   0   Sep 19 ?           0:00 /usr/lib/nfs/nfs4cbd

pwd

Muestra el directorio en el que estamos posicionados.

Ejemplo:

$ pwd
/usr/local/oracle/prueb

reboot

Sirve para reiniciar el sistema, hay unas notas especiales en cuanto a Unix, por ejemplo, para HP-UX, lo catalogan como un reinicio no muy bueno, recomiendan usar el comando shutdown, también puede ser usado en Solaris.

Ejemplo:

$ sudo reboot
# reboot

rm [-rf|-r][directorio/]nombre_archivo

Borra el archivo, si se incluye el directorio, indica que se borrará dicho archivo de ese directorio.

Este comando también puede usarse para borrar un directorio completo, en cuyo caso, debe usarse el modificador -r de recursividad al interior del directorio.

Si se intenta borrar un directorio, puede ser que algún archivo o subdirectorio en su interior, requiera de una confirmación de si se borra o no, para evitar esto para todos los casos que se puedan presentar, se usa el modificador -rf de recursividad y forzar el borrado. ¡Precaución!,  si se usa este modificador al estar ubicado en un directorio tan importante como /, puede generarse un problema muy grave porque borrará todo un servidor, por lo que hay que asegurarse de estar en la ubicación correcta antes de ejecutarlo.

Ejemplo:

$ ls
archivo.txt            audit_bk_20080828.log  prueba.log
$ rm prueba.log
$ ls
archivo.txt            audit_bk_20080828.log

rmdir [-r] nombre_directorio

Elimina un directorio. Si se incluye la opción -r, entonces se hace recursivo, con lo que se borran todos sus subdirectorios.

Ejemplo:

$ ls
archivo.txt            audit_bk_20080828.log  directorio_prueba
$ rmdir directorio_prueba
$ ls
archivo.txt            audit_bk_20080828.log

sed -i s/texto_anterior/texto_nuevo/g [/directorio]nombre_archivo

Sirve para reemplazar un texto determinado en un archivo por otro nuevo, con la opción -i, se indica que se quiere modicar en el mismo archivo de manera permanente.

Por ejemplo, en el siguiente archivo llamado prueba.txt, se tiene el texto:

$ cat prueba.txt
esto es una prueba de texto
se debe buscar metallica
y reemplazar por otro valor.

y se desea reemplazar la palabra metallica por slayer, entonces el comando debería quedar como:

sed -i s/metallica/slayer/g prueba.txt

y al ejecutarlo, el resultado final será:

$ sed -i s/metallica/slayer/g prueba.txt
$ cat prueba.txt
esto es una prueba de texto
se debe buscar slayer
y reemplazar por otro valor.

set

Muestra el listado de variables de ambiente que se encuentran vigentes en este momento.

Ejemplo:

$ set
DISPLAY=192.168.2.96:0.0
ERRNO=13
FCEDIT=/bin/ed
HOME=/usr/local/oracle/
IFS='  '
LINENO=1
LOGNAME=oracle
MAIL=/var/mail//oracle
MAILCHECK=600
OLDPWD=/usr/local/oracle
OPTIND=1
ORACLE_BASE=/usr/local/oracle
ORACLE_HOME=/usr/local/oracle/product/10.2.0
ORACLE_SID=orcl
PATH=/usr/local/oracle/product/10.2.0/bin/usr/openwin/bin:/usr/dt/bin:/usr/bin
PPID=9369
PS1='$ '
PS2='> '
PS3='#? '
PS4='+ '
PWD=/usr/local/oracle/prueba
RANDOM=18331
SECONDS=1124
SHELL=/usr/bin/ksh
SSH_CLIENT='172.16.2.17 1216 22'
SSH_CONNECTION='172.16.2.17 1216 172.16.2.18 22'
SSH_TTY=/dev/pts/2
TERM=vt100
TMOUT=0
TZ=Mexico/General
USER=oracle
_=ls

shutdown [opciones] [tiempo]

De acuerdo a las opciones con que se ejecute, sirve para reiniciar o apagar el sistema.

Para reiniciar el sistema, se pueden usar los siguientes ejemplos:

$ sudo shutdown -r now  <- Reinicio inmediato en Linux.
# shutdown -r +#mins    <- Reinicio en #mins minutos en Linux.
# shutdown -r -y #segs  <- Reinicio en #segs segundos en HP-UX y Solaris.
# init 6                <- Reinicio inmediato en HP-UX.
# shutdown -Fr          <- Reinicio inmediato en AIX.

Por otro lado, para apagar el sistema, se pueden usar los siguientes ejemplos:

$ sudo shutdown -P now  <- Apagado inmediato en Linux.
# shutdown -P +#mins    <- Apagado en #mins minutos en Linux.
# shutdown -h -y #segs  <- Apagado en #segs segundos en HP-UX.
# init 0                <- Apagado inmediato en HP-UX.
# shutdown -F           <- Apagado inmediato en AIX.

tail [-n|-f] [directorio/]nombre_archivo

Muestra las últimas líneas de un archivo. Si usa la opción -n, donde n es un número entero positivo, se muestra esa cantidad de líneas del archivo. Si se usa la opción -f, entonces, se queda corriendo, mostrando el final de la archivo, actualizando cada vez que dicho archivo es modificado. Esto es muy útil para monitorear por ejemplo, el log del listener o el alert de la base de datos.

Ejemplo:

$ tail -5 registros.log
PRUEBA30
PRUEBA05
PRUEBA08
PRUEBA11
PRUEBA14
$ tail registros.log
ADAMS
DBSNMP
PRUEBA02
PRUEBA27
PRUEBA32
PRUEBA30
PRUEBA05
PRUEBA08
PRUEBA11
PRUEBA14

time comando

Mide el tiempo que tarda la ejecución de un comando, por ejemplo, se desea copiar el siguiente archivo de 226MB y medir el tiempo que tarda la copia:

$ du -sh sqldeveloper_4.0.3.16.84-2_all.deb 
226M    sqldeveloper_4.0.3.16.84-2_all.deb

entonces, el comando a ejecutar debería ser:

time cp sqldeveloper_4.0.3.16.84-2_all.deb  prueba.deb

Así, al ejecutarlo en el siguiente ejemplo, se tendrá el siguiente resultado:

$ time cp sqldeveloper_4.0.3.16.84-2_all.deb  prueba.deb

real    0m6.016s
user    0m0.008s
sys     0m0.360s

$ du -sh sqldeveloper_4.0.3.16.84-2_all.deb prueba.deb 
226M    sqldeveloper_4.0.3.16.84-2_all.deb
226M    prueba.deb

con lo que se puede ver que la copia del archivo tardó un total (real) de 6.01 segundos, el tiempo del usuario (user) o tiempo que tardó en realizar alguna acción fue de 0.008 segundos y el tiempo que tardó en hacer alguna llamada al sistema (sys) como un fork o un exec, fue de 0.360 segundos.

top [-s segundos] [-d repeticiones] [-n num_procesos] [-f nombre_archivo]

Con este comando, se pueden ver los procesos que están corriendo actualmente ordenados por uso de procesador  de mayor a menor, también se ve información de uso de memoria y estadísticas generales del procesador. Se pueden usar las opciones que se muestran en el formato para incrementar los segundos de refrescamiento, generar una cantidad de repeticiones, mostrar nada más un número determinado de procesos y todo estarlo enviando a un archivo de texto.

Ejemplo:

orac1:~ # top
top - 19:29:08 up 27 days,  5:34,  3 users,  load average: 0.20, 0.13, 0.07
Tasks: 108 total,   1 running, 107 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.5%us,  0.2%sy,  0.0%ni, 98.8%id,  0.5%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4136200k total,  2429188k used,  1707012k free,   483140k buffers
Swap:  4208988k total,        0k used,  4208988k free,  1421744k cached
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
24952 root      15   0  2184  944  696 R    2  0.0   0:00.01 top
    1 root      16   0   720  280  244 S    0  0.0   0:01.45 init
    2 root      RT   0     0    0    0 S    0  0.0   0:00.52 migration/0
    3 root      34  19     0    0    0 S    0  0.0   0:00.00 ksoftirqd/0
    4 root      RT   0     0    0    0 S    0  0.0   0:00.52 migration/1
    5 root      34  19     0    0    0 S    0  0.0   0:00.00 ksoftirqd/1
    6 root      10  -5     0    0    0 S    0  0.0   0:00.32 events/0

unalias nombre_alias

Con este comando se puede deshacer un alias creado previamente para algún otro con el comando alias.

Ejemplo:

orlando_olguin@ooo-laptop:~$ unalias ps
orlando_olguin@ooo-laptop:~$ alias
alias comando='ls -la'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto -i'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'

unset VARIABLE_AMBIENTE

Permite desconfigurar una variable de ambiente previamente creada con el comando export.

Ejemplo:

orlando_olguin@ooo-laptop:~$ export VARIABLE=valor_de_variable
orlando_olguin@ooo-laptop:~$ set | grep VARIABLE
VARIABLE=valor_de_variable
orlando_olguin@ooo-laptop:~$ unset VARIABLE
orlando_olguin@ooo-laptop:~$ set | grep VARIABLE
orlando_olguin@ooo-laptop:~$

vi [[directorio/]nombre_archivo]

Es un editor de texto, en él se pueden editar los archivos de texto en Unix o Linux. Para usarlo, se tiene que conocer una serie de comandos. De éstos, trataré de explicar los más comunes o los que más uso yo. Pero hay toda una serie de comandos alrededor. Recuerda usar el man para ver todos estos.

Modos de vi

Estando en vi, tenemos dos modos: Edición y Comando. En el primero, es donde se escribe directamente lo que contendrá el archivo. El segundo, es donde podremos ejecutar comandos como borrar un caracter, borrar una línea, movernos entre líneas y caracteres, etcétera:

Modo Edición

En este modo, sólo se usa ESC como único comando, para pasar de dicho modo al modo Comando.

Modo Comando

Movimiento

[n]h

Mueve el cursor n caracteres a la izquierda en la línea actual, no hace cambio de línea.

[n]l

Mueve el cursor n caracteres a la derecha en la línea actual, no hace cambio de línea.

[n]j

Mueve el cursor n líneas hacia abajo.

[n]k

Mueve el cursor n líneas hacia arriba.

b

Se usa para mover el cursor al inicio de la anterior palabra.

w

Sirve para mover el cursor al inicio de la siguiente palabra.

e

Estando posicionado el cursor en una palabra, hace que este se mueva al final de la palabra, si se repite, provoca que el cursor se mueva a la siguiente palabra posicionándose al final de la palabra.

0 (cero)

Mueve el cursor al inicio de la actual línea.

$

Mueve el cursor al final de la actual línea.

+ ó Enter

Mueve el cursor al inicio de la siguiente línea.

Mueve el cursor al inicio de la anterior línea.

[n]G

Mueve el cursor a la línea n si se incluye el número, si se deja la G sola, entonces mueve el cursor al final del archivo.

Borrado

[n]u

Deshace las n últimas modificaciones que se han hecho al archivo.

[n]dd

Borra n líneas a partir de la actual. Si n no se pone, entonces borra una línea. Si n es mayor a la cantidad de líneas que tiene el archivo, entonces no se ejecuta el comando.

[n]x

Borra n caracteres desde donde está posicionado el cursor. Si esto es al final de la línea, funciona como un backspace, si están en medio de una línea, entonces funciona como un Supr.

Cambio a modo Edición

i

Va al modo Edición e inserta en la posición del cursor un espacio donde se comenzará a escribir, o sea, Insertar.

a

Va al modo de Edición e inserta una posición adelante del cursor un espacio donde se comenzará a escribir, o sea, Añadir.

Búsqueda y reemplazo

/texto

Busca el texto hacia adelante posicionando el cursor en la primera ocurrencia, con n, se repite la búsqueda.

:[%]s/viejo_texto/nuevo_texto[/g]

Sirve para buscar viejo_texto y reemplazarlo con nuevo_texto una sola vez en la actual línea.

Al añadir el /g al final, reemplaza todas las ocurrencias de viejo_texto en la actual línea.

Si se agrega el modificador %, entonces se reemplazan todas las ocurrencias de viejo_texto en el archivo.

Adicional

: w [nombre_archivo]

Guarda el archivo actual, si se agrega un nombre_archivo, entonces guarda el archivo actual con el nuevo nombre (Save As..).

:q[!]

Salir del vi si no hay cambios en el archivo, si se agrega el !, entonces descarta los cambios hechos y sale.

:wq

Salir vi guardando previamente los cambios realizados.

:set number[!]

Activa los números de línea, si se agrega el !, entonces se desactivan.

whoami

Este comando simple (así se ejecuta sin parámetros), sirve para saber con qué susuario estamos conectados.

Ejemplo:

orlando_olguin@ooo-laptop:~$ whoami
orlando_olguin

Caracteres especiales

#

Se usa en los distintos archivos que se manejan en estos sistemas operativos como comentarios. Se pone un # al inicio de la línea de texto que se pretende ignorar.

|

El pipe |, sirve para ejecutar 2 o más comandos “al mismo tiempo”. Funciona como la delimitación de un conjunto, en x | y, se ejecuta primero x y luego sobre x, se ejecuta y. Como se delimita en el ejemplo siguiente:

$ ls
archivo.txt    archivo2.txt   registros.log
$ ls | grep archivo
archivo.txt
archivo2.txt

En dicho ejemplo, en el primer ls, nada más muestro el contenido del directorio, pero al añadir el pipe | y el comando grep, éste último se aplica al conjunto creado por el primer comando, o podríamos decir que el primer comando, creó un archivo aunque de manera virtual y sobre ese archivo, se aplicó el grep. A continuación, muestro otro ejemplo:

$ ps -fe | grep oracle
  oracle  9773  9371   0 09:56:00 pts/2       0:00 ps -fe
  oracle  3364  3360   0   Sep 19 pts/5       0:00 bash
  oracle  3360  3305   0   Sep 19 pts/5       0:00 -ksh
  oracle  3580     1   0   Sep 19 ?           0:01 ora_d000_rit
  oracle  3582     1   0   Sep 19 ?           0:01 ora_s000_rit
  oracle  3567     1   0   Sep 19 ?           3:21 ora_ckpt_rit
  oracle  3559     1   0   Sep 19 ?           0:15 ora_psp0_rit
  oracle  3563     1   0   Sep 19 ?           0:39 ora_dbw0_rit
  oracle  3570     1   0   Sep 19 ?           0:40 ora_smon_rit
  oracle  3557     1   0   Sep 19 ?           3:08 ora_pmon_rit
  oracle  3565     1   0   Sep 19 ?           0:28 ora_lgwr_rit
  oracle  3574     1   0   Sep 19 ?           6:03 ora_cjq0_rit
  oracle  3578     1   0   Sep 19 ?           5:36 ora_mmnl_rit
  oracle  3572     1   0   Sep 19 ?           0:00 ora_reco_rit
  oracle  3586     1   0   Sep 19 ?           0:04 ora_qmnc_rit
  oracle  3561     1   0   Sep 19 ?           0:18 ora_mman_rit
  oracle  9371  9369   0 09:03:58 pts/2       0:00 -ksh
  oracle  3600     1   0   Sep 19 ?           0:00 ora_q000_rit
  oracle  3576     1   0   Sep 19 ?           1:27 ora_mmon_rit
  oracle  3602     1   0   Sep 19 ?           0:02 ora_q001_rit
  oracle  9369  9366   0 09:03:58 ?           0:00 /usr/lib/ssh/sshd

>

El >, al igual que en Windows (msdos), sirve para direccionar el resultado de algo hacia un archivo. Ejemplo:

$ ls
archivo.txt    archivo2.txt   registros.log
$ ps -fe | grep oracle > procs_oracle.log
$ ls
archivo.txt       archivo2.txt      procs_oracle.log  registros.log
$ more procs_oracle.log
  oracle  3364  3360   0   Sep 19 pts/5       0:00 bash
  oracle  3360  3305   0   Sep 19 pts/5       0:00 -ksh
  oracle  3580     1   0   Sep 19 ?           0:01 ora_d000_rit
  oracle  3582     1   0   Sep 19 ?           0:01 ora_s000_rit
  oracle  3567     1   0   Sep 19 ?           3:21 ora_ckpt_rit
  oracle  9820  9371   0 10:05:11 pts/2       0:00 ps -fe
  oracle  3559     1   0   Sep 19 ?           0:15 ora_psp0_rit
  oracle  3563     1   0   Sep 19 ?           0:39 ora_dbw0_rit
  oracle  3570     1   0   Sep 19 ?           0:40 ora_smon_rit
  oracle  3557     1   0   Sep 19 ?           3:09 ora_pmon_rit
  oracle  3565     1   0   Sep 19 ?           0:28 ora_lgwr_rit
  oracle  3574     1   0   Sep 19 ?           6:04 ora_cjq0_rit
  oracle  3578     1   0   Sep 19 ?           5:36 ora_mmnl_rit
  oracle  3572     1   0   Sep 19 ?           0:00 ora_reco_rit
  oracle  3586     1   0   Sep 19 ?           0:04 ora_qmnc_rit
  oracle  3561     1   0   Sep 19 ?           0:18 ora_mman_rit
  oracle  9371  9369   0 09:03:58 pts/2       0:00 -ksh
  oracle  3600     1   0   Sep 19 ?           0:00 ora_q000_rit
  oracle  3576     1   0   Sep 19 ?           1:27 ora_mmon_rit
  oracle  3602     1   0   Sep 19 ?           0:02 ora_q001_rit
  oracle  9369  9366   0 09:03:58 ?           0:00 /usr/lib/ssh/sshd

Si la información de este post te ha sido de utilidad o quieres que agregue algo más, deja por favor un comentario, contestaré a la brevedad.

Anuncios

4 Responses to Guía de comandos UNIX/LINUX

  1. Pingback: Ubuntu: Instalación del Flash Player « Orlando Olguín Olvera

  2. Pingback: Ubuntu: Paquetes instalados « Orlando Olguín Olvera

  3. Takeshy says:

    excelente post // podrias dar un ejemplo del proceso de identificacion FS lleno y como depurarlo???

  4. Pingback: Ubuntu: Instalación del Flash Player | Orlando Olguín Olvera

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: