El otro día en clase de SOGS, aprendimos algunos comandos para montar (mount) y desmontar (umount) dispositivos, tocamos un poco el comando fdisk y utilizamos comandos para la creación de sistemas de archivos (mkfs).
Algunos ejemplos para utilizar estos comandos son:
mount -t ext2 /dev/vdb /mnt/vdb --> Este comando lo que hace es montarte el dispositivo vdb en el directorio /mnt/vdb, con un sistema de archivos ext2.
Otra manera de utilizar este comando es con la opción de -a, mount -a /dev/vdb --> La diferencia con el anterior es que al poner la opción -a, el dispositivo se montará con las especificaciones que se dan en el fichero /etc/fstab:
Si queremos desmontar un dispositivo, utilizamos el comando umount. Por ejemplo: umount /dev/vdb y podemos utilizar el comando lsblk -f para ver que nuestro dispositivo ha sido desmontado correctamente.
Luego si queremos crear un sistema de archivos utilizamos el comando mkfs. Por ejemplo si queremos crear un EXT2 --> Introducimos el comando mkfs -t ext2 /dev/vdb. Una vez le hayamos dado un formato al dispositivo lo montamos con el comando mount.
Hasta aquí una breve información de lo que podemos hacer con estos comando, si queremos más información podemos introducir en nuestra terminal man y el nombre de nuestro comando, en mi caso, man mkfs:
Después de hablaros sobre la utilización de estos comandos, entró en el título del post, "Mi primer Script en Bash".
El otro día me di cuenta que esto de crear, montar, desmontar... eran tareas repetitivas y que podrían cansar un poco, entonces me surgió la idea de crear mi propio Script para que haga todas estas cosas. Me puse a buscar un manual de Bash, empecé a buscar diferentes estructuras y gracias también a mis compañeros de clase, hice mi primer Script.
Este Script, lo que hace básicamente es montar dispositivos, desmontar dispositivos, crear sistemas de archivos (EXT2,EXT4 Y NTFS) y mostrar información de las particiones del sistema.
Os dejó un enlace por si queréis descargaros el Script para poder utilizarlo y reducir el tiempo de aplicar todos los comandos, o incluso para que modifiquéis el código para hacer muchas más funciones -->Descargar<--
Para poder utilizar el Script, nos metemos como root y le damos los permisos de ejecución con el comando chmod +x nombre del script, en nuestro caso, chmod +x mi-primer-script.sh y luego lo ejecutamos con el comando source mi-primer.script.sh o ./nombredelscript.
Eso es todo, cualquier pregunta o sugerencia me la puedes dejar en los comentarios, nos vemos en la próxima entrada. chau ;D
Fdisk, es uno de los comandos más importantes que todo administrador de sistemas debe de conocer, ya que con este comando podremos gestionar y administrar nuestros discos duros.
Con este comando podremos crear, eliminar, redimensionar, cambiar o copiar y mover particiones usando las distintas opciones que nos ofrece. A continuación veremos algunos de los comandos más usados para gestionar nuestras particiones en un sistema Linux.
*Para poder utilizar el comando Fdisk y sus distintas opciones tenemos que estar como un superusuario.
1.Ver todas las particiones:
Para listar todas las particiones de nuestro sistema tendremos que poner el argumento " -l ", que hará que se listen todas las particiones ordenadamentes por nombre de los distintos dispositivos.
2.Ver un disco en específico:
Para poder ver todas las particiones de un único disco, tenemos que añadir el nombre del disco al comando anterior es decir algo así:
3.Ver todas las opciones del comando:
Para poder ver todas las opciones del comando fdisk, tenemos que introducir el comando seguido de una unidad de disco y una vez dentro del menú de fdisk, pulsamos la tecla "m" y aparecerán todas las opciones:
4.Ver todas las tablas de particiones del Sistema:
Para poder ver la tabla de particiones del sistema, tenemos que entrar en el menú de fdisk y teclear la tecla "p":
5.Crear una Partición:
Para crear una partición nueva, tenemos que meternos en el menú de fdisk y pulsar el botón "n", luego tendremos que teclear "e" (Si queremos crear una partición extendida) o "p" (Si queremos crear una partición primaria). Y finalmente nos pedirá el tamaño de nuestra partición. (En mi caso los valores serán por defecto):
6.Corregir una partición:
Para corregir una partición tenemos que meternos en el menú de fdisk y teclear "x" para acceder a las opciones avanzadas, "f" para reparar y "w" para guardar los cambios:
7.Borrar particiones:
Para borrar particiones tenemos que volver a meternos al menú de fdisk y teclear "d" y el número de la partición que quieras borrar:
Otras opciones son por ejemplo formatear una partición que sería con el comando mkfs.ext4(formato que queremos darle) /dev/sda4 -> mkfs.ext4 /dev/sda4. Y si te olvidas del tamaño de una partición tan solo tienes que poner fdisk -s /dev/sda4 o cualquiera que sea tu unidad.
¡SI TE HA GUSTADO EL POST COMPARTELO, SI TIENES ALGUNA PREGUNTA O SUGERENCIA PUEDES DEJÁRMELO EN LOS COMENTARIOS!
Hoy en clase de Administración de Sistemas, he conocido el comando Screen, y ahora en casa he estado jugando en casa y esto es lo que he averiguado.
Screen es una herramienta destinada a la terminal de Linux con la
que se puede crear y manejar varias sesiones y programas de manera
simultanea desde una sola terminal. (es un comando muy utilizado para trabajar en servidores)
Pero además, permite cerrar la terminal y volverse a conectar a la
sesión de screen que conservará las "terminales virtuales" que
tuviéramos abiertas.
En Screen se manejan 3 conceptos:
la “sesión“, es un área de trabajo, que se crea cuando ejecutas el comando screen.
Una ventana, es una shell abierta dentro de una sesión de screen. En una sesión de screen puede haber múltiples ventanas.
Una región, es una división, realizada a una ventana,
que dentro contiene otra ventana, uno puede dividir una sesión de screen
en 2 o más partes, horizontal o verticalmente y en cada split (porción de una región) desplegar una ventana.
Aquí dejo un ejemplo de su ejecución y algunas opciones muy
útiles. Más adelante veremos como manejarse una vez lanzada una sesión.
$ screen -S nombreDeLaSesion
# OPCIONES
# -S sockname Da nombre a la sesión [pid].sockname.
# -ls Lista las sesiones abiertas de screen.
# -r Reattach a un sesión. Es posible especificar el nombre ej: screen -r sockname
# -t título Permite dar un título a una ventana.
CREANDO SESIONES EN SCREEN:
$ screen -S sesion1 -t virtualHost
Con este comando creamos una sesión (sesion1) y creamos también una ventana con el título de
virtual Host. Una sesión puede tener múltiples ventanas.
$ screen -t startScript (Para crear ventanas).
DENTRO DE UNA SESIÓN:
Estas son algunas de las combinaciones posibles para manejarse dentro de una sesión de screen:
VENTANAS:
Ctrl-a ? Ayuda y sumario de funciones
Ctrl-a c Crear una nueva ventana (sin nombre).
Ctrl-a Ctrl-n Cambiar a la Siguiente o Anterior terminal
Ctrl-a Ctrl-N Cambiar a la Siguiente o Anterior terminal N [0-9]
Ctrl-a ” Lista navegable de terminales en funcionamiento
Ctrl-a a Limpiar un Ctrl-a pulsado por error
Ctrl-a Ctrl-d Desconectar y dejar la sesión en funcionamiento
Ctrl-a x Bloquear todas las terminales con una clave
DIVIDIR LAS SESIONES:
Ctrl-a S Divide horizontalmente
Ctrl-a tab Salta a la siguiente zona
Ctrl-a X Cerrar la zona actual
Ctrl-a Q Cerrar todas las zonas excepto la actual
SALIR DE SCREEN:
Ctrl-a d Dettach. Sale de la sesión pero la deja en segundo plano junto a todas sus ventanas.
exit Cierra la ventana actual. Cerrando todas las ventanas se cierra la sesión de screen.
OPCIONES DE COPIADO:
Ctrl-a + [ Entrar en modo copia/scroll.
Enter Comenzar la selección de texto / Finalizar la selección
de texto, copiar y salir modo copia/scroll.
Cursor Desplazamiento del cursor selecciona el texto a
copiar (si estamos en modo copia/scroll).
ESC Salir del modo copia/scroll sin copiar nada.
Ctrl-a + ] Pegar el texto copiado.
OPCIONES DE MULTIUSUARIOS:
Para crear una sesión multiusuario, tenemos que crear una sesión y luego habilitar el modo multiusuario:
CTRL+a y escribir “:multiuser on”
Luego tenemos que autorizar a los usuarios:
CTRL+a “:acladd [lista de usuarios]”
Después tenemos que conectarnos a esa sesión:
# screen -x [nombre de la sesión] o # screen -r [PID de la sesión]
A estos usuarios le podemos poner permisos:
CTRL+a :aclchg soporte -w “#”
*La utilidad de las cónsolas multi-usuario es que permiten a algunos trabajar y otros “ver” lo que uno está realizando,
los permisos son w:write, r:read y x:execution con los valores “+” (garantizar) y “-” (revocar), luego de
los permisos viene el número de la ventana donde recibirá los permisos (el símbolo “#” indica “todas las ventanas”).
Ver los usuarios conectados por screen:CTRL+a SHIFT-“+” (CTRL+a “*”)
También podemos mandar mensajes entre todos los usuarios:
CTRL+a “:wall [mensaje]”
CONCLUSIÓN: Screen es una herramienta muy poderosa que nos permite trabajar en cualquier parte y
también de manera colaborativa en las terminales Linux.
¡SI TE HA GUSTADO EL POST COMPARTELO, SI TIENES ALGUNA PREGUNTA O SUGERENCIA PUEDES DEJÁRMELO EN LOS COMENTARIOS!
¡Hola queridos lectores!, quiero empezar mi primera entrada en el blog, con un tema que he dado recientemente en clase que es: la administración de procesos en sistemas Linux.
Antes de mostrar los comandos para administrar los procesos, quiero daros una información amplía de los procesos.
Un proceso es la representación de un Sistema Operativo en ejecución, es decir, es un programa ejecutable. Un programa ejecutable se define mediante unos códigos y una definición de datos. Para poner un proceso en ejecución necesitamos asignarle memoria e inicializar los registros de la cpu para que pueda ser ejecutado. Un proceso puede ser un proceso ''Padre'' que crea procesos ''H'ijos'', al acabar con un proceso padre acabamos con los procesos hijos, si acabamos los procesos hijos, no nos cargamos el proceso padre.
Para gestionar estos procesos, el sistema utiliza una estructura de datos llamada PCB (Process Control Block).
Por último, un proceso tiene distintos estados:
RUN: el proceso tiene asignada una CPU y está ejecutandose.
READY: el proceso está preparado para ejecutarse pero está esperando que se le asigne una CPU.
BLOCKED: el proceso no tiene/consume CPU, está bloqueado esperando a que termine entrada/salida de datos o la llegada de un evento.
ZOMBIE: el proceso ha terminado su ejecución pero aún no ha desaparecido, esto ocurre cuando nos cargamos un proceso padre y este no ha notificado a los procesos hijos.
Ahora sí, después de esta breve información de los procesos, pasamos a conocer algunos de los comandos para administrar procesos en Linux:
ps
El comando es el que permite informar sobre el estado de los procesos.
esta basado en el sistema de archivos /proc, es decir, lee directamente
la información de los archivos que se encuentran en este directorio.
Tiene una gran cantidad de opciones, incluso estas opciones varían
dependiendo del estilo en que se use el comando. Estas variaciones sobre
el uso de son las siguientes:
Estilo BSD, donde las opciones no llevan guión
Estilo GNU, donde se utilizan nombres de opciones largas y van precedidas por doble guión --
Estilo UNIX, donde las opciones van precedidas por un guión -
Sea cual sea el estilo utilizado, dependiendo de las opciones
indicadas, varias columnas se mostrarán en el listado de procesos que
resulte, estas columnas pueden ser entre muchas otras, las siguientes (y
principales):
p o PID
Process ID, número único o de identificación del proceso.
P o PPID
Parent Process ID, padre del proceso
U o UID
User ID, usuario propietario del proceso
t o TT o TTY
Terminal asociada al proceso, si no hay terminal aparece entonces un '?'
T o TIME
Tiempo de uso de cpu acumulado por el proceso
c o CMD
El nombre del programa o camndo que inició el proceso
RSS
Resident Sise, tamaño de la parte residente en memoria en kilobytes
SZ o SIZE
Tamaño virtual de la imagen del proceso
NI
Nice,
valor nice (prioridad) del proceso, un número positivo significa menos
tiempo de procesador y negativo más tiempo (-19 a 19)
C o PCPU
Porcentaje de cpu utilizado por el proceso
STIME
Starting Time, hora de inicio del proceso
S o STAT
Status del proceso, estos pueden ser los siguientes
R runnable, en ejecución, corriendo o ejecutándose
S sleeping, proceso en ejecución pero sin actividad por el momento, o esperando por algún evento para continuar
T sTopped, proceso detenido totalmente, pero puede ser reiniciado
Z zombie, difunto, proceso que por alguna razón no terminó de manera correcta, no debe haber procesos zombies
D uninterruptible sleep, son procesos generalmente asociados a acciones de IO del sistema
X dead, muerto, proceso terminado pero que sigue apareciendo, igual que los Z no deberían verse nunca
Las opciones completas de las encuentras en las páginas del manual (), o escribiendo en la terminal , y para ver un resumen de sus opciones más comunes usa :
#> ps --help
********* simple selection ********* ********* selection by list *********
-A all processes -C by command name
-N negate selection -G by real group ID (supports names)
-a all w/ tty except session leaders -U by real user ID (supports names)
-d all except session leaders -g by session OR by effective group name
-e all processes -p by process ID
T all processes on this terminal -s processes in the sessions given
a all w/ tty, including other users -t by tty
g OBSOLETE -- DO NOT USE -u by effective user ID (supports names)
r only running processes U processes for specified users
x processes w/o controlling ttys t by tty
*********** output format ********** *********** long options ***********
-o,o user-defined -f full --Group --User --pid --cols --ppid
-j,j job control s signal --group --user --sid --rows --info
-O,O preloaded -o v virtual memory --cumulative --format --deselect
-l,l long u user-oriented --sort --tty --forest --version
-F extra full X registers --heading --no-heading --context
********* misc options *********
-V,V show version L list format codes f ASCII art forest
-m,m,-L,-T,H threads S children in sum -y change -l format
-M,Z security data c true command name -c scheduling class
-w,w wide output n numeric WCHAN,UID -H process hierarchy
A continuación algunos cuantos ejemplos de con la salida recortada.
Muestra los procesos en forma de árbol,
te da las opciones más comunes. Recomiendo uses lo uses con la opción
-A y -G para que te un árbol con líneas con líneas estilo ASCII y de
terminal VT100 respectivamente, puedes añadir también -u para mostrar
entre paréntesis al usuario propietario del proceso:
El comando , que literalmente quiere
decir matar, sirve no solo para matar o terminar procesos sino
principalmente para enviar señales (signals) a los procesos. La señal
por default (cuando no se indica ninguna es terminar o matar el
proceso), y la sintaxis es , siendo
PID el número de ID del proceso. Asi por ejemplo, es posible enviar una
señal de STOP al proceso y se detendrá su ejecución, después cuando se
quiera mandar una señal de CONTinuar y el proceso continuara desde donde
se quedo.
La lista previa presenta una lista de todas las posibles señales que
pueden mandarse a un proceso y estas pueden ser invocadas a través del
número de la señal o de su código, por ejemplo:
#> kill -9 11428
#> kill -SIGKILL 11428
Las señales más comunes son la 19 y 20 que detienen momentáneamente
la ejecución de un proceso o programa, 18 la continua, 1 que es la señal
de hang up que obliga al proceso a releer sus archivos de configuración
estando en ejecución y 9 que termina rotundamente un proceso.
killall
El comando , que funciona de manera similar a ,
pero con la diferencia de en vez de indicar un PID se indica el nombre
del programa, lo que afectará a todos los procesos que tengan ese
nombre. Asi por ejemplo si se tienen varias instancias ejecutándose del
proxy server squid, con eliminará todos los procesos que se esten ejecutando con el nombre 'squid'
Permite cambiar la prioridad de un proceso. Por defecto, todos los
procesos tienen una prioridad igual ante el CPU que es de 0. Con
es posible iniciar un programa (proceso) con la prioridad modificada,
más alta o más baja según se requiera. Las prioridades van de -20 (la
más alta) a 19 la más baja. Solo root o el superusuario puede establecer
prioridades negativas que son más altas. Con la opción -l de es posible observar la columna NI que muestra este valor.
#> nice
0
#> nice -n -5 comando
renice
Asi como establece la prioridad de un proceso cuando se incia su ejecución, permite alterarla en tiempo real, sin necesidad de detener el proceso.
#> nice -n -5 yes
#> ps -el
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 12826 12208 4 75 -5 - 708 write_ pts/2 00:00:00 yes
#> renice 7 12826
12826: prioridad antigua -5, nueva prioridad 7
#> ps -el
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 12826 12208 4 87 7 - 708 write_ pts/2 00:00:15 yes
nohup y &
Cuando se trata ejecutar procesos en background (segundo plano) se utiliza el comando o el operador & . Aunque realizan una función similar, no son lo mismo.
Si se desea liberar la terminal de un programa que se espera durará
un tiempo considerable ejecutándose, entonces se usa . Esto funciona
mejor cuando el resultado del proceso no es necesario mandarlo a la
salida estándar (stdin), como por ejemplo cuando se ejecuta un respaldo o
se abre un programa Xwindow desde la consola o terminal. Para lograr
esto basta con escribir el comando en cuestión y agregar al final el
símbolo & (ampersand).
Sin embargo lo anterior produce que el padre del proceso PPID que se
invocó sea el proceso de la terminal en si, por lo que si cerramos la
terminal o salimos de la sesión también se terminaran los procesos hijos
que dependan de la terminal, no muy conveniente si se desea que el
proceso continué en ejecución.
Para solucionar lo anterior, entonces se usa el comando
que permite al igual que '&' mandar el proceso y background y que
este quede inmune a los hangups (de ahí su nombre nohup) que es cuando
se cuelga o termina la terminal o consola de la cual se ejecutó el
proceso.
Asi se evita que el proceso se "cuelgue" al cerrar la consola.
jobs
Si por ejemplo, se tiene acceso a una única consola o terminal, y se
tienen que ejecutar varios comandos que se ejecutarán por largo tiempo,
se pueden entonces como ya se vió previamente con y el operador '&' mandarlos a segundo plano o background con el objeto de liberar la terminal y continuar trabajando.
Pero si solo se está en una terminal esto puede ser difícil de controlar, y para eos tenemos el comando que lista los procesos actuales en ejecución:
#> yes > /dev/null &
[1] 26837
#> ls -laR > archivos.txt &
[2] 26854
#> jobs
[1]- Running yes >/dev/null &
[2]+ Running ls --color=tty -laR / >archivos.txt &
En el ejemplo previo, se ejecutó el comando
y se envió a background (&) y el sistema devolvió [1] 26837,
indicando asi que se trata del trabajo o de la tarea [1] y su PID, lo
mismo con la segunda tarea que es un listado recursivo desde la raíz y
enviado a un archivo, esta es la segunda tarea.
Con los comandos (foreground) y
background es posible manipular procesos que esten suspendidos
temporalmente, ya sea porque se les envió una señal de suspensión como
STOP (20) o porque al estarlos ejecutando se presionó ctrl-Z. Entonces
para reanudar su ejecución en primer plano usaríamos :
#> jobs
[1]- Stopped yes >/dev/null &
[2]+ Stopped ls --color=tty -laR / >archivos.txt &
#> fg %1
#> jobs
[1]+ Running yes >/dev/null &
[2]- Stopped ls --color=tty -laR / >archivos.txt &
Obsérvese como al traer en primer plano al 'job' o proceso 1, este
adquirió el símbolo [+] que indica que esta al frente. Lo mismo sería
con que volvería a reinicar el proceso pero en segundo plano. Y también es posible matar los procesos con indicando el número que devuelve : , terminaría con el proceso en número 1.
top
Una utilería muy usada y muy útil para el monitoreo en tiempo real
del estado de los procesos y de otras variantes del sistema es el
programa llamado , se ejecuta desde la línea de comandos, es interactivo y por defecto se actualiza cada 3 segundos.
$> top
top - 13:07:30 up 8 days, 6:44, 4 users, load average: 0.11, 0.08, 0.08
Tasks: 133 total, 1 running, 131 sleeping, 0 stopped, 1 zombie
Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 497356k total, 472352k used, 25004k free, 21500k buffers
Swap: 1156640k total, 257088k used, 899552k free, 60420k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26156 sergon 15 0 2160 1016 784 R 1 0.2 0:00.93 top
1 root 15 0 2012 616 584 S 0 0.1 0:00.98 init
2 root RT 0 0 0 0 S 0 0.0 0:00.29 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.00 watchdog/0
5 root RT 0 0 0 0 S 0 0.0 0:00.38 migration/1
...
Estando adentro de la apliación, presionando 'h' muestra una ayuda de los posibles comandos que permiten configurar , por ejemplo, al presionar 's' pregunta por el tiempo en segundos de actualización, etc.
Estos son los comandos principales para la administración de procesos en Sistemas Operativos Linux, aunque existen otro comandos como por ejemplo: atop, xkill, pkill, pgrep, etc.
¡SI TE HA GUSTADO EL POST COMPARTELO, SI TIENES ALGUNA PREGUNTA O SUGERENCIA PUEDES DEJÁRMELO EN LOS COMENTARIOS!