Etiquetas

C (31) Cpp (28) Linux (14) asm (8) Telegram (5) bot (5) libreria (5) Algoritmo (3) Errores comunes (3) python (3) Opengl (2) kali (2) Android (1) Snippet (1) nano (1) recursividad (1)

lunes, 13 de noviembre de 2023

Sobre la shell

 

 ¿Que es una shell? Pues no es nada mas que un interprete de comandos que funciona a traves de terminal. Se puede diferenciar usando bash sobre Qterminal, por ejemplo.

 echo $BASH muestra la shell que estas usando la mas  usual es bsh (bourne shell).  el cmd chsh puede ayudar a cambiar la shell,siendo  root puede cambiarle la shell a cualquier usuario. un  usuario normal solo puede cambiar la shell de su  cuenta. 

usando more shells en /etc/ nos encontramos 

 # /etc/shells: valid login shells  

/bin/sh
/bin/bash
/usr/bin/bash 
/bin/rbash 
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/bin/zsh
/usr/bin/zsh
/usr/bin/tmux
/usr/bin/screen  
vease que sh,bash,rbash,dash,zsh son de la carpeta bin  .

se pueden definir variables como $BASH usando linux=3 y luego  echo $linux en consola. Vease que linux distingue entre mayusculas y minusculas. existen variables predefinidas por  la shell como $DISPLAY,$HOME,$LOGNAME,$MAIL,$USER,  $TERM,etc. Para verlas todas hay que usar printenv  o set,o set -o, o echo  printenv muestra todas las variables  set muestra todas las variables 
echo $HOME - Muestra el valor de $HOME 
printenv HOME - lo mismo que echo $HOME 

para cambiarle el valor a una variable durante el uso  de un programa una vez:  printenv HOME: /root  HOME=/kalo printenv HOME  esto a su vez sin cambiar el valor original /root

VARIABLE $PATH
cuando se usa who,linux busca.en los directorios por el programa usando PATH. con echo $PATH se puede saber cuales son;

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/system/xbin:/system/bin

se puede agregar o modificar un directorio usando PATH=$PATH:/usr/share/doc ...por ejemplo,pero este cambio sera solo temporal. para hacerlo definitivo hay que modificar .bash_profile.

 

CONTROL DE TAREAS EN EL SHELL

jobs - mira las tareas actuales
& - manda un proceso a background,al fondo,2do plano  . se hizo para no tener que esperar a que termine un  proceso en 1er plano para iniciar otro.
suspend - suspender una concha
nohup ./my-shell-script.sh &  con nohup se evita que la orden sea asesinada cuando  hagamos logout de nuestro usuario
at -f backup.sh 10 am tomorrow  ejecuta el script mañana a las 10am  
watch -n 60 df -h  ejecuta cada 60segundos df -h,-n y --interval va con  los segundos para que la orden se ejecute periodica%
fg %ntarea- traer proceso al primer plano 
bg - traer proceso al 2do plano  nano linux

 con CTRL+Z puedes suspender la tarea del primer plano

REDIRECCION ENTRADA/SALIDA

cmd < infile le damos al comando como entrada el archivo infile
cmd > file ...crear/sobreescribir archivo
cdm >> file ...adjuntar

se puede escribir archivos de error mientras se ejecuta un programa...esto es una derivacion de la entrada en caso de fallar

nano 2> errorfile

la entrada y la entrada de error en diferentes
archivos: nano > outfile 2> errorfile

nano >& en un mismo archivo
nano &> en un mismo archivo

no queremos la salida standard,stderr,,solo si hay salida de errores

cat file.txt > /dev/null
./shell-script.sh > /dev/null

si no queremos ver la salida de errores

cat invalid-file-name.txt 2> /dev/null
./shell-script.sh 2> /dev/null

Ejecutar procesos paralelos
command1 ; command2 ; command3

Parar el resto de procesos si el anterior falla:
command1 && command2 && command3

para ejecutar comandos y parar la ejecucion tan pronto como uno finaliza: command1 || command2 || command3

una coma interpreta literalmente: echo '$HOME'
dos comas los interpreta como comandos echo "$HOME"
`` y $() se interpretan como comandos

pero $() es mejor porque puede anidar $(expr $(date +%Y) + 1)
usando \ se puede hacer una expresion literal:
echo a\* * deja de ser un comodin y es un asterisco

echo "\$HOME" $ se vuelve solo el signo dolar

linux tiene su propio historial y tiene los siguientes comandos.

!! corre el comando anterior
history - muestra el historial
history -C - borra el historial
history N - muestra el comando N usado
!N - reejecuta el comando N
!-N - reejecuta el comando -N?
!$ - ejecuta el parametro del comando anterior
ls asdf* asdf1 asdf2 asdf3
rm !$ ..lo que es igual a rm asdf*

PROCESOS

son programas,comandos o ejecutables. los procesos demonio son los que estan permanentemente en el sistema. siempre se esta ejecutando y esperando queel usuario haga uso de el. generalmente estos ultimos terminan en d(como crond,httpd,cupsd) todo proceso posee un PID.(process identifier) y todo proceso tiene un padre,excepto el primero que tiene PID 1 el primer proceso se llama init en distros que usan SysV, o systemd en la mayoria de las distros recientes.
ps permite ver los procesos del sistema. de modo predeterminado,solo muestra los iniciados desde la consola. los cmd kill y kill mandan señales a los procesos. kill espera un n de proceso como argumento,mientras que killall espera un comando. por default ambos envian la señal 15

gnome-system-monitor es un administrador grafico que funciona con gnome y kde top permite ver los procesos desde la consola

CODIGO DE RETORNO
todo comando en linux devuelve un codigo al terminar su ejecucion. 0 cuando ha terminado correctamente,diferente de 0 en caso contrario. dependiendo de la razon da un codigo u otro. se usa la.variable $!

ls zergfluf
$!


Fuente: Linux Pocket Guide

No hay comentarios.:

Publicar un comentario