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

Enlaces Simbolicos

 ENLACE SIMBOLICO

Para crear uno se usa ln. existen dos tipos de enlaces soft and hard.

ln -s archivo enlacearchivo enlace suave o simbolico
ln archivo enlacearchivo enlace duro.

los enlaces suaves son como los atajos de windows o los alias de macOS.
si eliminas el programa original,el enlace suave deja de ser util,en cambio el enlace duro seguirá funcionando

para saber donde apunta un enlace simbolico, se puede
usar el programa readlink o ls -l link

Uso de diff. Comparar JPEGS y TXTS

 SUSTITUCION DE PROCESOS(Redireccionamiento)
supongamos que queremos comparar cada jpeg con su  correspondiente txt

ls jpegexample  file1.jpg  file1.txt  file2.jpg  file2.txt ...  y quieres confirmar que cada jpeg tiene su fichero  txt y viceversa
Lo que haces es crear una carpeta  con los JPEGS y los TXT 
ls *.jpg | cut -d. -f1 > /tmp/jpegs  ls *.txt | cut -d. -f1 > /tmp/txts 
y luego comparar ambas carpetas con diff 
diff /tmp/jpegs /tmp/texts 
usando el redireccionamiento puedes hacerlo todo en  una linea: 
diff <(ls *.jpg|cut -d. -f1) <(ls *.txt|cut -d. -f1)  y sin mover los archivos

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

Permisos de archivo

 ls -l Se usa para ver los permisos de un archivo
ls -ld Se usa para ver los permisos de carpeta  

-rw-------. 1 root root 6277 Apr 10 01:26 linux 

el primer caracter(-) depende de que es el archivo: 
- para archivos,
d para directorio,
l para enlaces  simbolicos,
p para tuberias,
c para caracteres del  dispositivo,
b para bloques del dispositivo. 
rw- son los permisos del dueño del archivo,en este  caso r(read),w(write). Como sale - en vez de  x(execute) significa que el dueño del archivo no tiene   permiso de ejecutar el archivo.  los siguientes 3 - son los permisos del grupo al que  pertenece, --- significa que para el grupo root no  tiene permiso de read(leer),write(escribir)   y execute(ejecucion).  

los ultimos --- son los permisos para cualquiera que  quiera acceder al archivo y no sea el usuario root o  parte del grupo root.  

-rwx---rwx. 1 root root 6277 Apr 10 01:26 linux  este ultimo ejemplo significa que el usuario root  tiene permisos de leer(r),escribir(w) y ejecutar(x)  y las ultimas rwx son los permisos para desconocidos  .el primer root es el dueño del archivo y el 2do root  que pertenece al grupo root.

mkdir -m 0755 asdf - crea carpeta con permisos
rm -r borra una carpeta vacia
chgrp - cambia el grupo de un archivo
chmod - modif8ca los permisos de un archivo
chown - cambia al dueño de un archivo
chmod a+x filenam todos ganan permiso de lectura 
chmod u+x filename el Usuario gana permiso de  ejecucion 
chmod --reference=file1 file2  los permisos de archivo2 son iguales al del archivo1
chmod 644 - todos pueden leer,pero tu puedes escribir
chmod 600 - privado
chmod 700 carpeta privada
chmod 755 todos pueden leer,tu puedes escribir
ug+rw u significa user y g group....añade read y write.
a-x quita permisos de ejecucion a todos.

Casos Especiales

ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54192 nov 18  2015
/usr/bin/passwd
el caracter (s) indica que solo se ejecuta con root

ls -l /usr/bin/write
-rwxr-sr-x 1 root tty  19584   7 sep 13:05
/usr/bin/write
el caracter(s) indica que solo se ejecuta bajo la identidad de su grupo,en este caso,tty.

ls -ld /tmp
drwxrwxrwt 22 root root 4096 ago  3 20:36 /tmp
el caracter(t) bajo el dominio de otros significa que solo el dueño del directorio y el dueño del archivo creado en TMP pueden eliminarlos.

Directorios de linux

 En linux,los directorios pueden tener categorias,que  representan distintos tipos de archivos 

 /bin/ - viene de binary,que son los programas 
/sbin/ - programas con intencion de ser ejecutado por  /root/  /lib/ - librerias usadas por programas 
/doc/ - documentacion  /info/ - documentacion usada por emacs
/man/ - documentacion mostrada por el programa man
/share/ - documentacion especifica de programas,como  ejemplos e instrucciones de instalacion
/etc/ - archivos de configuracion del sistem(y otros)
 

init.d - archivos de conf para el boteo (booting) de  linux
rc.d - archivos de conf para el boteo de linux rc1.d  rc2.d,rc3.d  /include/ - archivos cabeceras .h para programadores

/src/ - codigo fuente para programas
/cgi-bin/- scripts/programas que corren en paginas web
/html/ - paginas webs
/public_html/ - paginas webs
/www/ - paginas webs
/fonts/ - fuentes
/x11/ - x windows archivos del sistema
/dev/ - archivos de dispositivos para interactuar con  discos y otro hardware
/media/ - punto de montaje,carpeta que da acceso a un  disco 
/mnt/ - punto de montaje,carpeta que da acceso a un  disco 
/var/ - archivos especificos de tu sistema,creados y  actualizados con la ejecucion de estos 
/lock/ - archivos bloqueados por el programa para decir  "estoy ejecutando", la existencia de uno puede  prevenir que otro programa,u otra instancia del mismo  ejecute una accion
/log/ - archivos que rastrean eventos del sistema 
/mail/ - carpeta para correo entrante
/run/ - archivos ue contienen la ID de los procesos
/spool/ - archivos en cola como correo saliente,  impresoras,etc 
/tmp/ - almacenamiento temporal para programas o  personas 
/proc/ - describe los procesos activos 
/usr/local - archivos creados localmente por  organizaciones o tu pc
/usr/games - juegos  /bin es mas importante que /usr/bin porque esta mas  cerca del fichero raiz / y lo mismo pasa con /lib  y /usr/bin  /usr/share/doc/ info adicional sobre programas  /boot/ - archivos del inicio del sistema

domingo, 12 de noviembre de 2023

Archivos en linux

Existen 7 tipos de archivos en linux, los 3 mas importantes son: archivo,directorio y soft link.los otros son archivos que apuntan a un dispositivo de tipo bloque,archivos que apuntan a un dispositivo de tipo caracter(ambos presentes /dev/), archivos de tuberia llamado 'named pipe' para comunicacion entre procesos, archivos socket.

linux tiene 4 partes principales  

kernel - la parte mas baja del sistema operativo. toma  archivos,discos,redes,etc. la mayoria de los usuarios  rara vez se enteran del kernel.  programas - facilitan las tareas.

  shell (concha,caparazon) - Es una UI(interfaz del  usuario) para escribir y ejecutar comandos. Y muestra  los resultados. linux posee bash,csh,zsh,etc. En  cualquier caso las interfaces son similares entre si.  La concha es un intermediario entre el kernel y el  usuario.La shell NO ES el programa grafico llamado  terminal,sino quien lee y ejecuta comandos.  

x(X11) - sistema grafico que otorga ventanas,iconos,  menus y elementos GUI(graphic user interface). Los  mas populares son KDE y GNOME.  linux posee ademas entrada/salida. el programa wc  por ejemplo,acepta como entrada un archivo y  produce salida en la pantalla. ademas de I/O tiene un  flujo para mostrar errores. Normalmente la entrada es  un archivo o una entrada estandar,que suele ser el  teclado. La salida puede ser un archivo o una salida  estandar, usualmente son la pantalla o ventana de la  concha.  .  en terminal es tu directorio actual  .. en terminal es la carpeta superior  se pueden escribir ficheros .sh y luego ejecutarlos  usando bash.


teclas de acceso rapido

mayus+repag o avpag avanza o retrocede mas que estas por si solos.
CTRL+END llegar hasta el final de un texto.
END por si solo avanza hasta el fin de linea.
CTRL+HOME llegar hasta el principio de un texto.
HOME por si solo retrocede hasta el principio de una linea.
con SHIFT+TAB puede completarse una palabra buscada en la linea de comandos ademas puede usarse el comodin * para completar busquedas: puede hacer rm a* y eliminara todos los archivos que empiecen con a y sigan con cualquier cosa

Solo hecho en NANO.
ctrl+s guardar sin confirmar
ctrl+w borra toda la palabra, en nano busca
ctrl+u borra toda la linea
ctrl+d desconectarse de la terminal