942 lines
34 KiB
Markdown
942 lines
34 KiB
Markdown
# AYUDA LINUX
|
||
|
||
**Navegación y Exploración**
|
||
|
||
clear ctrl+l limpiar terminalpwd – Muestra el directorio actual (Print Working Directory).ls – Lista archivos y directorios.
|
||
|
||
ls -R Lista filas y subdirectorios
|
||
|
||
ls -l – Lista en formato largo (permisos, tamaño, fecha).
|
||
|
||
ls -a – Muestra archivos ocultos (incluye . y ..).
|
||
|
||
tree – Muestra la estructura de directorios en forma de árbol.
|
||
|
||
ls | wc -l Cuenta filas/archivos y directorios
|
||
|
||
ls -a | wc -l Cuenta tambien archivos ocultos
|
||
|
||
ls -R | wc -l Cuenta files en directorio atual y subdirectorios
|
||
|
||
ls \*.txt | wc -l Cuenta filas con determinada extension
|
||
|
||
**Creación y Manipulación de Archivos**
|
||
touch – Crea un archivo vacío o actualiza su fecha de modificación.
|
||
Ejemplo: touch archivo.txt
|
||
mkdir – Crea un directorio.
|
||
Ejemplo: mkdir carpeta
|
||
cp – Copia archivos o directorios.
|
||
cp archivo.txt destino/
|
||
cp -r directorio/ destino/ (copia recursiva para directorios).
|
||
|
||
cp -r directorio/origen . (copia directorio origen al directorio donde estas situado usando con punto al final)
|
||
mv – Mueve o renombra archivos.
|
||
mv archivo.txt nuevo\_nombre.txt (renombra).
|
||
mv archivo.txt /ruta/destino/ (mueve).
|
||
rm – Elimina archivos.
|
||
rm archivo.txt
|
||
rm -r directorio/ (elimina recursivamente).
|
||
rm -f (fuerza eliminación sin confirmación).
|
||
|
||
**Visualización de Archivos**
|
||
cat – Muestra el contenido de un archivo.
|
||
Ejemplo: cat archivo.txt
|
||
less / more – Muestra el contenido paginado (para archivos largos).
|
||
head – Muestra las primeras líneas (por defecto, 10).
|
||
head -n 5 archivo.txt (muestra 5 líneas).
|
||
tail – Muestra las últimas líneas.
|
||
tail -f archivo.log (sigue cambios en tiempo real, útil para logs).
|
||
|
||
**Búsqueda de Archivos**
|
||
find – Busca archivos por nombre, tipo, tamaño, etc.
|
||
find /ruta -name "\*.txt" (busca archivos .txt).
|
||
find / -type f -size +10M (archivos >10MB).
|
||
grep – Busca texto dentro de archivos.
|
||
grep "palabra" archivo.txt
|
||
grep -r "texto" /directorio/ (búsqueda recursiva).
|
||
|
||
**Buscar y borrar duplicados**
|
||
|
||
sudo apt install fdupes
|
||
fdupes -r /ruta/de/la/carpeta Buscar duplicados (sin borrar)
|
||
fdupes -rd \~/Documentos Te pregunta cuáles borrar
|
||
|
||
fdupes -rdN \~/Documentos Borra todos menos uno
|
||
|
||
**Permisos y Propiedad**chmod – Cambia permisos (lectura, escritura, ejecución).chmod 755 archivo.sh (permisos en formato numérico).chmod -R 777 db permisos a carpeta y contenidochmod +x script.sh (agrega permiso de ejecución). chown – Cambia el propietario de un archivo. chown usuario:grupo archivo.txt
|
||
|
||
**Compresión y Descompresión**
|
||
tar – Empaqueta y descomprime archivos.
|
||
tar -cvf archivo.tar directorio/ (crea un .tar).
|
||
tar -xvf archivo.tar (extrae).
|
||
tar -czvf archivo.tar.gz directorio/ (comprime con gzip).
|
||
gzip / gunzip – Comprime/descomprime archivos .gz.
|
||
zip / unzip – Trabaja con archivos .zip.
|
||
|
||
**Transferencia y Descarga**
|
||
wget – Descarga archivos desde la web.
|
||
Ejemplo: wget <https://ejemplo.com/archivo.zip>
|
||
curl – Transferencia de datos desde/hacia servidores.
|
||
Ejemplo: curl -O <https://ejemplo.com/archivo.txt>
|
||
|
||
**Comparación de Archivos** diff – Compara dos archivos línea por línea. Ejemplo: diff archivo1.txt archivo2.txt
|
||
|
||
**Enlace simbolico**
|
||
|
||
Enlaces ln – Crea enlaces (links) entre archivos.
|
||
|
||
ln -s /ruta/origen /ruta/enlace (enlace simbólico).
|
||
|
||
**Puertos**
|
||
|
||
Mostrar os puertos ocupados
|
||
|
||
sudo ss -tulpn  
|
||
|
||
ejemplo resultado:
|
||
|
||
Netid Local Address:Port Process
|
||
tcp 0.0.0.0:22 sshd
|
||
tcp 0.0.0.0:80 nginx
|
||
tcp 0.0.0.0:443 nginx
|
||
|
||
**Buscar un puerto concreto**, por ejemplo el 8080:
|
||
|
||
sudo ss -ltnp | grep :8080
|
||
|
||
**Ver qué proceso usa un puerto:**
|
||
|
||
sudo lsof -i :8080
|
||
|
||
sudo lsof -i :443
|
||
|
||
|
||
|
||
**Formatear discos**
|
||
|
||
sudo fdisk /dev/sdX Borrar el disco
|
||
|
||
Dentro de `fdisk`:
|
||
|
||
`g → GPT (recomendado) | n → nueva partición | w → guardar cambios`
|
||
|
||
lsblk para comprobar
|
||
|
||
sudo mkfs.ext4 /dev/sdX1 formatear particion en ext4
|
||
|
||
sudo mkfs.ext4 /dev/sdX formatear todo el disco en ext4
|
||
|
||
sudo mkfs.ext4 -L DATOS /dev/sdX1 formatear y asignar etiqueta
|
||
|
||
(mejor usars particiones y no todo el disco)
|
||
|
||
sudo e2label /dev/sdX1 DATOS asignar etiqueta
|
||
|
||
|
||
|
||
sudo mkdir /mnt/datos crear punto de montaje
|
||
|
||
sudo mkdir /mnt/datos montar el disco
|
||
|
||
df -h verificar
|
||
|
||
|
||
|
||
Montaje automático de disco
|
||
|
||
blkid /dev/sdX1 obtener UUID
|
||
|
||
sudo nano /etc/fstab editar fstab
|
||
|
||
UUID=xxxx-xxxx /mnt/datos ext4 defaults 0 2 añadir linea para el disco
|
||
|
||
|
||
|
||
Resumen rapido discos
|
||
|
||
lsblk sudo umount /dev/sdX1
|
||
|
||
sudo mkfs.ext4 /dev/sdX1
|
||
|
||
sudo mount /dev/sdX1 /mnt/datos
|
||
|
||
|
||
|
||
TERMINAL CTRL + ATL + T abrir terminal
|
||
|
||
ctrl + l = clear limpiar terminal
|
||
|
||
bash terminal normal
|
||
|
||
zsh terminal zsh
|
||
|
||
echo \$SHELL info shell activa chsh -s /bin/bash cambiar shell bash - cerrar sesion aplicar cambios chsh -s /bin/zsh cambiar shell zsh - cerrar sesion aplicar cambios
|
||
|
||
|
||
|
||
**USUARIOS** - GRUPOS
|
||
|
||
uname -a Datos instalacion linux
|
||
|
||
whoami Usuario actual
|
||
|
||
cut -d: -f1 /etc/passwd Ver usuarios del sistema sudo adduser nombre\_usuario Crear usuario sudo passwd nombre\_usuario Cambiar contraseña de usuario
|
||
|
||
id nombre\_usuario Informacion de usuario su - nombre\_usuario Cambiar a otro usuario sudo su cambiar a root (superusuario)
|
||
|
||
|
||
|
||
**HOSTS**
|
||
|
||
/etc/hosts
|
||
|
||
sudo nano /etc/hosts
|
||
|
||
|
||
|
||
**PATH**
|
||
|
||
Añadir al PATH
|
||
|
||
nano \~/.bashrc Ver/editar path usando bash nano
|
||
|
||
\~/.zshrc Ver/editar path usando zshrc
|
||
|
||
export PATH=PATH:/opt/lampp/bin
|
||
|
||
Editar al final del archivo, ejemplo echo 'export LS\_COLORS="LS\_COLORS:di=36"' >> \~/.bashrc Escribir directamente en PATH source \~/.bashrc
|
||
|
||
|
||
|
||
**PARAR/MATAR PROCESOS**
|
||
|
||
ps aux Ver procesos
|
||
|
||
ps aux | grep gunicorn Localizar un proceso
|
||
|
||
kill \<PID> Matar proceso 
|
||
|
||
kill -9 \<PID> Forzar matar proceso 
|
||
|
||
sudo systemctl stop gunicorn Parar proceso iniciado como servicio systemd
|
||
|
||
|
||
**DIRECTORIOS Y ARCHIVOS**
|
||
ls listar directorio
|
||
ls -lah -l lista, -a ocultos, -h tamaño
|
||
ls -d \*/ mostrar solo directorios
|
||
ls -1 mostrar 1 columna
|
||
ls -lh -l lista, -h tamaño
|
||
Crear enlace simbólico/acceso directo:
|
||
ln -s /home/juan/Documentos/Proyectos \~/Escritorio/Proyectos
|
||
|
||
du -h Lista directorios y subdirectorios - tamaño
|
||
du -sh \* Archivos y directorios - tamaño (ruta actual)
|
||
du -sh \*/ Directorios - tamaño (ruta actual)
|
||
du -sh /home Directorios home - tamaño
|
||
du -sh Tamaño total de la carpeta actual
|
||
du -sh \* | sort -hr Tamaño archivos/directorios ordenados
|
||
|
||
crear alias tamaños archivos/directorios
|
||
alias size='du -sh \* 2>/dev/null | sort -hr'
|
||
source \~/.bashrc
|
||
|
||
lsblk Listar discos y particiones
|
||
df -h Ver discos y tamaño
|
||
sudo fdisk -l Detalle de particiones
|
||
free -h Saber memoria total y disponible del equipo
|
||
uname -r kernel en uso
|
||
dpkg --list | grep linux-image lista de kernels instalador en sistema
|
||
sudo reboot Actualizar a ultimo kernel si esta instalado
|
||
|
||
mkdir crear directorios rmdir o rm -d eliminar directorios vacíos. rm -r eliminar directorios no vacíos. mv nombreviejoarchivo1 nombrenuevoarchivo1 cambiar nombre de arhivos/directorios cat >> nombre\_del\_archivo.txt crear un archivo echo "Esto es un ejemplo" > nombre\_del\_archivo.txt crear un archivo
|
||
|
||
|
||
|
||
**Montar/Desmontar USB**
|
||
sudo mkdir -p /mnt/mi\_usb # Cambia "mi\_usb" por el nombre que prefieras
|
||
sudo mount /dev/sdb1 /mnt/mi\_usb # Reemplaza "/dev/sdb1" con tu dispositivo
|
||
sudo mount -t ntfs-3g /dev/sdb1 /mnt/mi\_usb # Para NTFS
|
||
sudo mount -t vfat /dev/sdb1 /mnt/mi\_usb # Para FAT32
|
||
sudo mount -o rw /dev/sdb1 /mnt/mi\_usb Si el dispositivo está en modo solo lectura, intenta montarlo con permisos de escritura
|
||
sudo apt install ntfs-3g Para dispositivos NTFS, ntfs-3g
|
||
sudo umount /dev/sdb1
|
||
sudo umount /mnt/mi\_usb
|
||
|
||
Montaje automático al recinicar (opcional)
|
||
sudo nano /etc/fstab
|
||
UUID=.... /mnt/mi\_usb ntfs-3g defaults 0 0
|
||
UUID=.... /mnt/externo ext4 defaults,nofail 0 2
|
||
|
||
Para obtener el UUID del dispositivo, usa: sudo blkid sudo blkid /dev/sdb1
|
||
|
||
|
||
|
||
**Servicios**
|
||
sudo systemctl start nombre\_del\_servicio Iniciar servicio
|
||
sudo systemctl stop nombre\_del\_servicio Detener servicio
|
||
sudo systemctl restart nombre\_del\_servicio Reiniciar servicio
|
||
sudo systemctl status nombre\_del\_servicio Estado servicio
|
||
sudo systemctl enable nombre\_del\_servicio Habilitar el servicio al inicio del sistema
|
||
sudo systemctl disable nombre\_del\_servicio Deshabilitar arranque automatico
|
||
|
||
|
||
|
||
poweroff / sudo shutdown -h now Apagar
|
||
reboot / sudo shutdown -r now Reiniciar
|
||
systemctl suspend Suspender
|
||
ctrl + alt + sup cerrar sesion
|
||
gnome-session-quit --logout cerrar sesion terminal
|
||
alt + f2 ejecutar orden
|
||
alt + f4 cerrar ventana
|
||
super + h minimizar ventana
|
||
super + d mostrar escritorio
|
||
crtl + q cerrar ventana
|
||
|
||
sudo apt update && sudo apt upgrade -y Actualizar sistema
|
||
|
||
lsb\_release -a Versión linux instalada
|
||
top Info procesos
|
||
htop Info procesos color
|
||
|
||
**ABRIR EDITOR DE TEXTO GNOME, GEDIT, NANO (terminal)**
|
||
|
||
gnome-text-editor Abrir editor gnome
|
||
|
||
gedit Abrir editor gedit (gedit prueba.txt)
|
||
|
||
nano Abrir editor nano
|
||
|
||
**BUSCAR ARCHIVOS**
|
||
|
||
find /ruta/de/busqueda -name "archivo.ext"
|
||
|
||
find / nombre\_archivo Busca en todo el sistema
|
||
|
||
sudo find / -type f -name "nombre\_programa" 2>/dev/null Buscar en todo el sistema ignora permisos whereis nombre\_archivo locate nombrearchivo sudo apt install plocate sudo updatedb actualiza la base de datos para buscar grep -r "texto a buscar" /ruta Buscar el texto dentro de archivos which nombre\_programa Buscar si esta dentro del PATH
|
||
|
||
**Clonar USB**
|
||
|
||
lsblk o fdisk -l Identificar unidades usb
|
||
|
||
sudo dd if=/dev/sdX of=/dev/sdY bs=4M status=progress clonar directamente usb1 a usb2
|
||
|
||
sudo dd if=/dev/sdX of=backup\_usb.img bs=4M status=progress clonar imagen sudo dd if=backup\_usb.img of=/dev/sdY bs=4M status=progress Restaurar imagen
|
||
|
||
opcion2 (utilizar gnome disks) abre discos - seleccionar usb origen - menu (...) - crear imagen disco. guardar archivo .img Para restaurar usasr "restaurar imagen de disco"
|
||
|
||
|
||
|
||
**Cambiar fecha/hora**
|
||
|
||
sudo date --set="Sep 30 08:55:00 2025"
|
||
|
||
|
||
|
||
**Instalar/Desinstalar paquete DEB desde la Terminal**
|
||
|
||
sudo dpkg -i google-chrome-stable\_current\_amd64.deb dpkg --list ver lista de paquetes instalados sudo dpkg –remove teamviewer Desintalar paquete .deb sudo apt-get remove nombre\_del\_paquete Desinstalar paquete.deb
|
||
|
||
**APT**
|
||
sudo apt install nombre\_paquete Instalar programa
|
||
sudo apt list muestra los paquetes instalados
|
||
apt search nombre\_paquete Buscar paquete apt
|
||
apt-cache search nombre\_paquete Buscar más específicamente
|
||
apt show nombre\_paquete Información del paquete
|
||
sudo apt remove nombre\_paquete Eliminar programa
|
||
sudo apt purge –auto-remove teamviewer Eliminar programa y dependencias
|
||
sudo apt-get autoclean Autolimpiar paquetes apt
|
||
sudo apt-get clean Eliminar cache
|
||
sudo apt-get autoremove Eliminar paquetes y dependencias que ya no hacen falta
|
||
apt-get download \<nombre\_del\_paquete> Descargar paquete apt
|
||
apt-cache depends \<nombre\_del\_paquete> Saber dependencias de un paquete / despues descargar
|
||
cada dependencias con apt-get download
|
||
sudo apt-get install -f resolver errores dependencias
|
||
|
||
Descargar paquetes con apt-offline
|
||
sudo apt install apt-offline
|
||
Instalar en el equipo con conexion
|
||
apt-offline set --install-packages solicitud.sig
|
||
Generar solicitud descarga en equipo sin conexion apt-offline get solicitud.sig --bundle paquetes.zip Copia solicitud.sig en equipo conexion apt-offline install paquetes.zip Ejecutar en equipo sin conexion
|
||
|
||
**INSTALAR PAQUETES SNAP**
|
||
|
||
sudo snap install nombre-del-paquete
|
||
sudo snap install nombre-del-paquete --channel=versión # Instalar una versión específica
|
||
snap find término-de-búsqueda # Buscar paquetes disponibles
|
||
snap info nombre-del-paquete # Ver información detallada de un paquete
|
||
snap list # Listar todos los paquetes instalados
|
||
snap list --all # Ver paquetes instalados con más detalles
|
||
sudo snap remove nombre-del-pquete # Eliminar un paquete
|
||
sudo snap remove --purge nombre-del-paquete # Eliminar completamente (incluyendo datos)
|
||
sudo snap revert nombre-del-paquete # Revertir a versión anterior
|
||
sudo snap refresh nombre-del-paquete # Actualizar un paquete específico
|
||
sudo snap refresh # Actualizar todos los paquetes snap refresh --list # Ver actualizaciones disponibles
|
||
|
||
**INSTALAR PAQUETES .AppImage** (autoejecutables)
|
||
Make it executable
|
||
chmod a+x Subsurface\*.AppImage
|
||
and run!
|
||
./Subsurface\*.AppImage
|
||
|
||
**INSTALAR .XZ**
|
||
unxz edit-1.0.0-x86\_64-linux-gnu.xz Descomprimir, dejara archivo ejecutable
|
||
chmod +x edit-1.0.0-x86\_64-linux-gnu Hacer archivo ejecutable
|
||
sudo mv edit-1.0.0-x86\_64-linux-gnu /usr/local/bin/edit Opcional-Mover para usar en cualquier parte del sistema
|
||
|
||
**INSTALAR tar.gz**
|
||
tar -xzf nombrearchivo.tar.gz --descomprimir el archivo
|
||
|
||
ejecutar el script, normalmente bin/nombrescript.sh
|
||
Nota: NO SE DEBE extraer una nueva instancia sobre una ya existente. La carpeta de destino debe estar vacía.
|
||
|
||
**ARCHIVOS COMPRIMIR/DESCOMPRIMIR RAR**
|
||
sudo apt update
|
||
sudo apt install unrar rar
|
||
|
||
unrar x archivo.rar Descomprimir archivo
|
||
unrar e archivo.rar Descomprimir sin estructura carpetas
|
||
rar a nombre\_archivo.rar archivo1 archivo2 directorio/ Crear archivo rar
|
||
rar a backup.rar /ruta/al/archivo.txt /ruta/al/directorio
|
||
rar a -m5 archivo.rar directorio/ Maxima compresion
|
||
unrar l archivo.rar Listar contenido archivo rar
|
||
unrar x -pcontraseña archivo.rar Extraer archivo con contraseña
|
||
|
||
**INSTALAR tar.xz DESDE LA TERMINAL**
|
||
tar -xf nombre\_del\_paquete.tar.xz
|
||
cd nombre\_del\_paquete
|
||
./configure
|
||
make
|
||
sudo make install
|
||
|
||
##### Instalar ZIP
|
||
|
||
Descomprimir: unzip nombrearchivo.zip
|
||
Cd a la carpeta descomprimida
|
||
./configure
|
||
make
|
||
sudo make install
|
||
|
||
INSTALAR GESTOR PAQUETES SYNAPTIC
|
||
sudo apt install synaptic
|
||
|
||
|
||
|
||
**INSTALAR CODECS MULTIMEDIA**
|
||
|
||
sudo apt install Ubuntu-restricted-extras
|
||
|
||
Instalar paquetes habituales en conjunto
|
||
sudo apt install idle python3-pip onedrive sqlite3 sqlitebrowser timeshift speedtest-cli gnome-shell-extension-manager neofetch
|
||
htop gdebi zsh nodejs npm filezilla apache2 mysql-client mysql-server php libapache2-mod-php php-mysql php-sqlite3 phpmyadmin
|
||
|
||
sudo snap install bitwarden spotify gitea nextcloud mysql-workbench-community
|
||
|
||
INSTALACION PROGRAMAS
|
||
|
||
sudo snap install bitwarden Bitwarden (también .deb en web)
|
||
|
||
sudo apt install wine Wine
|
||
|
||
gnome contacts (centro aplicaciones) contacts
|
||
|
||
wine /ruta/a/heidisql\_installer.exe Heidisql con wine
|
||
|
||
OhMyZsh
|
||
|
||
wget OhMyZsh sh -c "\$(wget -O- <https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/uninstall.sh>)" local-wp (descargar .deb/web)
|
||
|
||
sudo apt install nextcloud-desktop Instalar cliente escritorio nextcloud ubuntu-desktop (diferente aplicacion snap)
|
||
Desinstalar libreoffice
|
||
sudo apt update
|
||
sudo apt remove --purge libreoffice\*
|
||
sudo apt clean
|
||
sudo apt-get autoremove
|
||
|
||
##### INSTALAR/DESINSTALAR XAMPP
|
||
|
||
xampp (descargar .run de web) XAMPP
|
||
sudo chmod +x xampp-linux-x64-*-installer.run
|
||
sudo ./xampp-linux-x64-*-installer.run
|
||
Desinstalar Xampp
|
||
sudo /opt/lampp/lampp stop
|
||
sudo rm -rf /opt/lampp
|
||
sudo rm -f /usr/share/applications/xampp-control-panel.desktop
|
||
|
||
##### INSTALAR LAMP
|
||
|
||
sudo apt update && sudo apt upgrade
|
||
sudo apt install apache2
|
||
sudo apt install mysql-server
|
||
sudo mysql\_secure\_installation
|
||
sudo apt install php libapache2-mod-php php-mysql php-sqlite3
|
||
echo "" | sudo tee /var/www/html/info.php
|
||
sudo rm /var/www/html/info.php
|
||
sudo systemctl restart apache2
|
||
sudo apt install phpmyadmin
|
||
seleccionar apache - aceptar dbconfig-common
|
||
sudo snap install mysql-workbench-community
|
||
Crear usuario phpmyadmin para acceder:
|
||
sudo mysql Entrar mysql
|
||
CREATE USER 'usuario'@'localhost' IDENTIFIED BY 'clave\_segura';
|
||
GRANT ALL PRIVILEGES ON *.* TO 'usuario'@'localhost' WITH GRANT OPTION;
|
||
GRANT ALL PRIVILEGES ON nombre\_basedatos.\* TO 'usuario'@'localhost'; # Acceso a una sola base datos
|
||
FLUSH PRIVILEGES; Aplicar canbios
|
||
EXIT;
|
||
<http://localhost/phpmyadmin> Iniciar sesion en phpmyadmin
|
||
|
||
Eliminar usuario
|
||
DROP USER 'nombre\_usuario'@'host';
|
||
FLUSH PRIVILEGES;
|
||
|
||
UBUNTU DESKTOP ACCESOS mysql root (no tiene contraseña) 123Passowrd! Contraseña de phpmyadmin para mysql (ojo se puso mal pero es 123Passowrd! admin - 123Password! Phpmyadmin usuario
|
||
|
||
|
||
|
||
**ACTUALIZAR DISTRO UBUNTU DESDE TERMINAL**
|
||
sudo apt update && sudo apt upgrade && sudo apt dist-upgrade
|
||
sudo do-release-upgrade
|
||
|
||
**PAPELEREA EN ESCRITORIO**
|
||
|
||
gsettings set org.gnome.shell.extensions.ding show-trash true gsettings set org.gnome.shell.extensions.ding show-trash false
|
||
|
||
**LIMPIAR EL SISTEMA**
|
||
|
||
sudo apt autoclean
|
||
|
||
sudo apt autoremove
|
||
|
||
sudo apt clean
|
||
|
||
**GRUB (cambiar orden)**
|
||
sudo gedit /etc/default/grub GRUB DEFAULT= y un número que empieza en cero, equivalente al sistema operativo que arrancará en primer lugar por defecto.
|
||
sudo update-grub -actualizar cambios
|
||
|
||
**CREAR LANZADOR PYTHON**
|
||
|
||
1. Abre una terminal y navega a tu directorio personal: cd \~
|
||
|
||
2. Crea un nuevo archivo `.desktop` en la carpeta de aplicaciones locales: nano \~/.local/share/applications/python3.desktop
|
||
|
||
3. En ese archivo, pega el siguiente contenido: \[Desktop Entry] Version=1.0 Name=Python3 Script Launcher Exec=/usr/bin/python3 %f Icon=utilities-terminal Terminal=true Type=Application MimeType=text/x-python;
|
||
|
||
4. Guarda y cierra el archivo con `CTRL + O`, luego `ENTER`, y finalmente `CTRL + X`.
|
||
|
||
5. Actualiza las asociaciones MIME. Para que el sistema reconozca los cambios, actualiza la base de datos de MIME: update-desktop-database \~/.local/share/applications
|
||
|
||
6. Selecciona Python3 como aplicación predeterminada
|
||
|
||
PIP UBUNTU 24
|
||
Atención instalar complementos pip en ubuntu 24.04:
|
||
|
||
1. Permitir instalar con PIP normal: Eliminar el archivo que indica cambio de criterio cd /usr/lib/python3.11 sudo rm EXTERNALLY-MANAGED Restaurar: sudo touch EXTERNALLY-MANAGED
|
||
|
||
ERRORES PYTHON CON IMAGENES PIL - PILLOW
|
||
|
||
sudo apt-get install python3-pil python3-pil.imagetk
|
||
|
||
**CREAR UN ACCESO DIRECTO:**
|
||
Si el programa es una aplicación gráfica y quieres ejecutarlo desde el menú de aplicaciones, puedes crear un archivo .desktop en \~/.local/share/applications/.
|
||
Ejemplo de archivo .desktop:
|
||
|
||
\[Desktop Entry]
|
||
Name=Nombre del Programa
|
||
Exec=/ruta/al/directorio/nombre\_del\_programa
|
||
Icon=/ruta/al/icono.png
|
||
Type=Application
|
||
Categories=Utility;Application;
|
||
|
||
Guarda con la extensión .desktop y hacer ejecutable:
|
||
chmod +x \~/.local/share/applications/nombre\_del\_programa.desktop (hacer ejecutable)
|
||
|
||
**COPIAR ACCESO A APLICACIONES EN ESCRITORIO**
|
||
|
||
Los accesos directos estan en /usr/share/applications/ hace falta copiar y pegar en carpeta Escritorio
|
||
|
||
**XAMPP**
|
||
sudo /opt/lampp/lampp start Iniciar Xampp
|
||
sudo /opt/lampp/lampp stop Detener Xampp
|
||
Panel de control lamp sudo /opt/lampp/manager-linux-x64.run
|
||
Php.ini ubicacion /opt/lampp/etc
|
||
|
||
Elige la arquitectura para tu Linux OS, versión de 32-bits o de 64-bits.
|
||
|
||
1. Cambia los permisos al instalador chmod 755 xampp-linux-\*-installer.run
|
||
|
||
2. Ejecuta el instalador sudo ./xampp-linux-\*-installer.run directorio /opt/lampp.
|
||
|
||
SQLITE En aplicaciones con Sqlite3 la carpeta donde está la base de datos tiene que tener permisos de lectura y escritura porque si no da error en las updates-delete,etc.. En cambio, sí que lee la base de datos
|
||
|
||
**PERMISOS**
|
||
Qué son los permisos en Linux?
|
||
Cada archivo o carpeta tiene tres tipos de permisos para tres tipos de usuarios.
|
||
Tipos de usuarios:
|
||
Propietario (owner) – quien creó el archivo.
|
||
Grupo – otros usuarios del mismo grupo.
|
||
Otros (others) – todos los demás.
|
||
Tipos de permisos:
|
||
r = lectura (read) → ver contenido.
|
||
w = escritura (write) → modificar o eliminar.
|
||
x = ejecución (execute) → ejecutar como programa/script.
|
||
Representación numérica:
|
||
Cada permiso tiene un valor:
|
||
r = 4
|
||
w = 2
|
||
x = 1
|
||
Se suman por grupo. Ejemplo:
|
||
Permisos Valor
|
||
rwx 7 (4+2+1)
|
||
r-x 5 (4+0+1)
|
||
rw- 6 (4+2)
|
||
r-- 4
|
||
Entonces:
|
||
chmod 755 archivo
|
||
Significa:
|
||
7 (rwx) → dueño: todo permitido
|
||
5 (r-x) → grupo: leer y ejecutar
|
||
5 (r-x) → otros: leer y ejecutar
|
||
Comandos comunes:
|
||
chmod → cambia permisos
|
||
chown → cambia el propietario
|
||
ls -l → muestra los permisos de archivos
|
||
Supongamos que tienes esto:
|
||
mkdir proyecto
|
||
cd proyecto
|
||
touch script.sh
|
||
Paso 1: Ver los permisos actuales
|
||
ls -l
|
||
Salida típica:
|
||
-rw-r--r-- 1 usuario usuario 0 abr 29 12:00 script.sh
|
||
Esto significa:
|
||
-rw-r--r-- = el propietario puede leer y escribir, los demás solo leer.
|
||
No tiene permiso de ejecución (x), por eso no puedes correrlo como programa.
|
||
Paso 2: Dar permisos de ejecución al archivo
|
||
chmod +x script.sh
|
||
Ahora, ls -l muestra:
|
||
-rwxr-xr-x 1 usuario usuario 0 abr 29 12:00 script.sh
|
||
Ya puedes ejecutarlo:
|
||
./script.sh
|
||
Paso 3: Dar permisos de escritura a una carpeta (para copiar, crear o modificar dentro)
|
||
chmod 775 proyecto
|
||
Esto significa:
|
||
Dueño y grupo pueden leer, escribir y entrar (rwx).
|
||
Otros pueden leer y entrar, pero no escribir (r-x).
|
||
|
||
Paso 4: Hacer que Apache (u otro usuario) pueda escribir ahí
|
||
Si estás en un servidor web:
|
||
sudo chown -R www-data:www-data proyecto
|
||
sudo chmod -R 775 proyecto
|
||
|
||
chmod +x archivo.sh # hacer que un archivo sea ejecutable.
|
||
chmod 777 archivo.txt o ruta (Todos los permisos para todos)
|
||
sudo mkdir -m 777 /home/carpeta\_nueva crea una carpeta con permisos
|
||
chmod 755 script.sh Significa:7 (rwx) → El propietario puede leer, escribir y ejecutar. 5 (r-x) → El grupo y otros pueden leer y ejecutar, pero no modificar.
|
||
chmod 644 documento.txt Significa: 6 (rw-) → El propietario puede leer y escribir. 4 (r--) → El grupo y otros solo pueden leer.
|
||
chmod -R 755 /ruta/de/la/carpeta chmod -R (Aplicar permisos de forma recursiva)
|
||
|
||
Permisos de grupo a varios usuarios
|
||
sudo groupadd media # crear grupo
|
||
sudo usermod -aG media jesus # añadir usuario al grupo
|
||
sudo usermod -aG media transmission-daemon # añadir usuario al grupo
|
||
sudo chgrp media /mnt/Toshiba # cambiar el grupo de la carpeta
|
||
sudo chmod g+rw /mnt/Toshiba # Dar permisos de lectura y escritura al grupo:
|
||
newgrp media # Aplicar cambios (reinicia sesión o ejecuta):
|
||
|
||
Permisos con setfacl
|
||
|
||
sudo apt update && sudo apt install acl -y sudo setfacl -m u:jesus:rwx /mnt/Toshiba #asigna permisos de lectura y escritura -m: Modifica los permisos ACL. u:jesus:rwx: Da permisos de lectura (r), escritura (w) y ejecución (x) al usuario jesus. sudo setfacl -Rm u:jesus:rwx /mnt/Toshiba sudo setfacl -dm u:jesus:rwx /mnt/Toshiba -R: Aplica recursivamente en los archivos existentes. -d: Establece permisos por defecto para nuevos archivos. getfacl /mnt/Toshiba
|
||
|
||
CREAR ACCESOS DIRECTOS enlace simbolico ln -s /home/jesus/Documentos /home/jesus/Escritorio #este ejemplo crea acceso directo a documentos en escritorio ln -s /path destino /path colocacion acceso directo /home/jesus/Documentos
|
||
|
||
CARPETA FONDOS DE ESCRITO /usr/share/backgrounds
|
||
|
||
EXTENSIONES <https://extensions.gnome.org/> Blur my shell Add to desktop Dash to dock Caffeine Coverflow Alt-Tab ArcMenu Vitals Custom Hot Corners – Extended Places status indicator Apps menu Bluetooth Quick connect Services Systemd show desktop applet
|
||
|
||
VELOCIDAD INTERNET desde terminal (speedtest) speedtest speedtest-cli // speedtest --simple
|
||
|
||
JUEGOS LINUX frozen bubble Cannonball Supertuxkart Supertux Killbots Kapman Quadrapassel Trackmania Nations Forever Chess gnome kobodeluxe (apt) open-invaders (apt) astromenace (apt) chromium-bsu (sudo apt)
|
||
|
||
WINE wine aplicacion.exe #ejecutar una aplicacion .exe
|
||
|
||
PDF HERRAMIENTAS sudo apt install pdfarranger pdfarranger sudo dpkg -i pdfsam\_\*.deb pdfSam Basic (descargar del sitio web) sudo apt install ghostscript ghostscript (comprimir pdf) gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=salida.pdf entrada.pdf Puedes cambiar /screen por /ebook, /printer o /prepress según el nivel de calidad/ tamaño.
|
||
|
||
INSTALAR GNOME
|
||
|
||
Para instalar GNOME con la menor cantidad de utilidades de GNOME, tendrías que instalar un paquete llamado vanilla-GNOME usando el comando dado: sudo apt install vanilla-gnome-desktop Y si quieres tener una experiencia GNOME completa, puede simplemente instalar el gnome paquete: sudo apt install gnome desintalar gnome ubuntu sudo apt-get remove --auto-remove gnome-shell sudo apt-get purge --auto-remove gnome-shell
|
||
|
||
ENTORNOS DE ESCRITORIO
|
||
|
||
Sudo apt-get install Ubuntu-mate-desktop Sudo apt-get install cinnamon-desktop-environment Sudo apt-get install kde-standard
|
||
|
||
REINICIAR EL DOCK
|
||
|
||
dconf reset -f /org/gnome/shell/extensions/dash-to-dock/ dconf reset -f /org/gnome/shell/extensions/favorite-apps
|
||
|
||
DOCK UBUNTU MINIMIZAR APLICACIÓN
|
||
|
||
gsettings set org.gnome.shell.extensions.dash-to-dock click-action 'minimize' gsettings reset org.gnome.shell.extensions.dash-to-dock click-action #quitar gsettings range org.gnome.shell.extensions.dash-to-dock click-action #opciones
|
||
|
||
REINICIAR UBUNTU POR DEFECTO (DOCK, FONDOS, ETC... como recien instalado) dconf reset -f /
|
||
|
||
**ACTUALIZAR LA APP UBUNTU STORE**
|
||
|
||
snap refresh snap-store --channel=latest/stable/ubuntu-24.04 This command may fail and output something look like: snap ‘snap-store’ has running apps, pids: 2205. In the case, just kill snap-store using the ID number (replace 2205 to yours): Sudo kill –9 2205 (o el numero que salga) Then, re-run the snap refresh command.
|
||
|
||
DOCK TRANSPARENTE
|
||
gsettings set org.gnome.shell.extensions.dash-to-dock transparency-mode 'FIXED'
|
||
gsettings set org.gnome.shell.extensions.dash-to-dock background-opacity 0.2
|
||
Change 0.0 to any number between 0 and 1.
|
||
To reset to the default setting:
|
||
gsettings reset org.gnome.shell.extensions.dash-to-dock background-opacity
|
||
|
||
MAME Ruta: /usr/share/games
|
||
|
||
CONFIGURAR TECLADO
|
||
KALI LINUX
|
||
Poner idioma español
|
||
sudo dpkg-reconfigure localeses\_ES.UTF-8 UTF-8
|
||
reiniciar
|
||
|
||
Unbuntu, etc. sudo dpkg-reconfigure keyboard-configuration Desde Ajustes – Teclado y poner español
|
||
|
||
Cambiar permisos desde la consola
|
||
Nos vamos a Aplicaciones -> Accesorios -> Terminal
|
||
Por ejemplo yo le quiero dar permisos de lectura, escritura y ejecución para los 3 grupos a una carpeta llamada Prueba que está en el Escritorio, así que navego hasta el escritorio:
|
||
cd Escritorio
|
||
|
||
Y tengo dos opciones,la numérica y la alfabética:
|
||
1.- chmod 777 Prueba
|
||
2.- chmod rwx Prueba
|
||
|
||
Si la carpeta pertenece a root, tendremos que hacerlo asi:
|
||
1.- sudo chmod 777 Prueba
|
||
2.- sudo chmod rwx Prueba
|
||
|
||
Si queremos que se haga de manera recursiva, es decir, que los ficheros y carpetas contenidos en Prueba, también reciban estos cambios, hacemos esto:
|
||
1.- chmod -R 777 Prueba
|
||
2.- chmod -R rwx Prueba
|
||
|
||
Cualquiera de las dos y teniendo en cuenta lo de sudo.
|
||
Un par de ejemplos más:
|
||
Queremos que el usuario tenga RWX, el grupo RW y los demás R, en la carpeta Prueba:
|
||
1.- chmod 764 Prueba
|
||
2.- chmod u=rwx,g=rw,o=r Prueba
|
||
u equivale a usuario (user) g a grupo (group) y o a otros (others). También sirve lo de -R y sudo.
|
||
Queremos que el usuario tenga RW, el grupo R y los demás R, en la carpeta Prueba:
|
||
1.- chmod 644 Prueba
|
||
2.- chmod u=rw go=rw Prueba
|
||
Igualmente sirve lo de -R y sudo.
|
||
Para quitar permisos, realmente es cambiarlos por otros, asi que es lo mismo que aquí se explica.
|
||
|
||
SOLUCION FALTA DE SONIDO ubuntu (no reconoce audio)
|
||
sudo apt-get install --reinstall alsa-base pulseaudio
|
||
sudo alsa force-reload
|
||
|
||
SOLUCION ERROR PYTHON PYSIDE6
|
||
sudo apt install libxcb-cursor0 libxcb-xinerama0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0
|
||
|
||
AÑADIR PROGRAMA/CARPETA AL PATH
|
||
nano \~/.bashrc - nano \~/.zshrc
|
||
export PATH=PATH:HOME/ruta/al/directorio - Guardar y cerrar.
|
||
Ejemplo - export PATH=PATH:HOME/python/venv/lib/python3.12/site-packages/PySide6\`\`
|
||
|
||
source \~/.bashrc - Actualizar
|
||
Verificar path
|
||
echo \$PATH
|
||
|
||
**GITEA**
|
||
Gitea (arrancar y parar) Instalado desde snap
|
||
localhost:3000 (puerto 3000)
|
||
Iniciar Gitea sudo snap start gitea
|
||
Detener Gitea sudo snap stop gitea
|
||
Verificar estado sudo snap services gitea
|
||
Deshabilitar inicio sudo snap disable gitea
|
||
Reiniciar Gitea sudo snap restart gitea
|
||
Eliminar Gitea sudo snap remove gitea
|
||
|
||
**LOCAL-WP (solucion problema)**
|
||
Local-wp ubuntu 24.04 (solucionar problemas de instalación con dependencias)
|
||
curl -O <http://launchpadlibrarian.net/648013231/libtinfo5_6.4-2_amd64.deb>
|
||
sudo dpkg -i libtinfo5\_6.4-2\_amd64.deb
|
||
curl -O <http://launchpadlibrarian.net/648013227/libncurses5_6.4-2_amd64.deb>
|
||
sudo dpkg -i libncurses5\_6.4-2\_amd64.deb
|
||
curl -O <http://launchpadlibrarian.net/646633572/libaio1_0.3.113-4_amd64.deb>
|
||
sudo dpkg -i libaio1\_0.3.113-4\_amd64.deb
|
||
|
||
sudo apt install ./local-9.1.1-linux.deb (o bien)
|
||
sudo dpkg -i local-9.1\*.deb
|
||
|
||
resolver error: sudo apt install libxapp-gtk3-module sudo apt install libxapp-gtk3-module
|
||
|
||
**DOCKER**
|
||
|
||
Para instalar Docker en Ubuntu, sigue estos pasos:
|
||
|
||
1. Eliminar versiones antiguas (si existen) sudo apt remove docker docker-engine docker.io containerd runc
|
||
|
||
2. Instalar dependencias necesarias sudo apt update sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
|
||
|
||
3. Agregar el repositorio oficial de Docker curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb \[arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] <https://download.docker.com/linux/ubuntu> \$(lsb\_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||
|
||
4. Instalar Docker Engine sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io
|
||
|
||
5. Verificar que Docker esté funcionando sudo systemctl status docker (Deberías ver active (running)). Para probarlo, ejecuta: sudo docker run hello-world (Si funciona, verás un mensaje de confirmación).
|
||
|
||
6. (Opcional) Evitar usar sudo con Docker Para no tener que escribir sudo cada vez, agrega tu usuario al grupo docker: sudo usermod -aG docker \$USER newgrp docker # Recarga los grupos sin reiniciar sesión Ahora puedes probar sin sudo: docker run hello-world
|
||
|
||
docker ps # Ver contenedores en ejecución docker stop mi-web # Detener el contenedor docker start mi-web # Iniciar el contenedor nuevamente docker rm mi-web # Eliminar el contenedor (cuando ya no lo necesites)
|
||
|
||
**ARREGLAR GRUB**
|
||
|
||
Confirmar si se usa UEFI y ver archivo .efi
|
||
ls -l /boot/efi/EFI/ubuntu/
|
||
|
||
Verificar modo de arranque
|
||
\[ -d /sys/firmware/efi ] && echo "UEFI" || echo "BIOS"
|
||
|
||
Archivo BIOS para grub - uefi.
|
||
/boot/efi/EFI/ubuntu/grubx64.efi - Sin secure boot
|
||
/boot/efi/EFI/ubuntu/shimx64.efi - Con secure boot
|
||
|
||
Reinstalar grub EN UEFI
|
||
sudo grub-install --target=x86\_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
|
||
|
||
Reparar el arranque UEFI
|
||
sudo mount /dev/sdXY /mnt # Reemplaza sdXY con tu partición raíz (ej: sda2)sudo mount /dev/sdXZ /mnt/boot/efi # Reemplaza sdXZ con tu partición EFI (ej: sda1)sudo grub-install --efi-directory=/mnt/boot/efisudo update-grubsudo update-grub
|
||
|
||
sudo fdisk -l -para identificar particion y la de linux/ubuntu
|
||
|
||
sudo mount /dev/nvme0n1p6 /mnt --Particion linux
|
||
sudo mount /dev/nvme0n1p1 /mnt/boot/efi --Particion efi
|
||
sudo mount --rbind /dev /mnt/dev
|
||
sudo mount --rbind /proc /mnt/proc
|
||
sudo mount --rbind /sys /mnt/sys
|
||
sudo chroot /mnt --Entrar como root
|
||
grub-install /dev/nvme0n1 --Instala grub en efi
|
||
update-grub
|
||
exit
|
||
sudo reboot
|
||
|
||
script automatico
|
||
\#!/bin/bash
|
||
|
||
echo "📦 Montando particiones..."
|
||
sudo mount /dev/nvme0n1p6 /mnt
|
||
sudo mount /dev/nvme0n1p1 /mnt/boot/efi
|
||
sudo mount --bind /dev /mnt/dev
|
||
sudo mount --bind /proc /mnt/proc
|
||
sudo mount --bind /sys /mnt/sys
|
||
|
||
echo "🔧 Entrando a chroot para instalar GRUB..."
|
||
sudo chroot /mnt /bin/bash -c "
|
||
grub-install /dev/nvme0n1 &&
|
||
update-grub &&
|
||
echo '✅ GRUB instalado correctamente dentro de chroot'
|
||
"
|
||
|
||
echo "🚀 Reparación completa. Puedes reiniciar ahora."
|
||
|
||
nano reparar-grub.sh
|
||
chmod +x reparar-grub.sh
|
||
sudo ./reparar-grub.sh
|
||
|
||
Saber si se esta en UEFI o Legacy BIOS
|
||
ls /sys/firmware/efi - Si hay contenido esta en UEFI
|
||
\[ -d /sys/firmware/efi ] && echo "Estás en modo UEFI" || echo "Modo legacy bios"
|
||
|
||
Añadir windows a Grub si ha desaparecido
|
||
Actualiza GRUB con detección de otros sistemas operativos:
|
||
sudo apt install os-prober
|
||
sudo update-grub
|
||
Esto ejecutará os-prober, que buscará otros sistemas instalados, como Windows, y regenerará el menú de GRUB.
|
||
⚠️ Si Windows no aparece aún, puede que os-prober esté deshabilitado (desde Ubuntu 22.04):
|
||
Edita el archivo de configuración de GRUB:
|
||
sudo nano /etc/default/grub
|
||
GRUB\_DISABLE\_OS\_PROBER=false
|
||
sudo update-grub
|
||
sudo reboot
|
||
|
||
|
||
|
||
**CRON**
|
||
|
||
systemctl status cron Estado servicio cron
|
||
crontab -e Tabla de cron propio de cada usuario
|
||
|
||
crontab -u www-data -e cron del usuario www-data
|
||
|
||
sudo crontab -e Cron de sudo
|
||
|
||
crontab -l Lista las tareas cron
|
||
grep CRON /var/log/syslog Logs cron
|
||
|
||
###### Sintaxis de una regla en `cron`
|
||
|
||
Cada línea en `crontab` sigue este formato:
|
||
|
||
* comando\_a\_ejecutar │ │ │ │ │ │ │ │ │ └── Día de la semana (0-6, donde 0 = domingo) │ │ │ └──── Mes (1-12) │ │ └────── Día del mes (1-31) │ └──────── Hora (0-23) └────────── Minuto (0-59)
|
||
|
||
* Ejecutar un script cada día a las 2:30 AM 30 2 \* \* \* /ruta/al/script.sh
|
||
|
||
* Ejecutar cada 5 minutos: \*/5 \* \* \* \* /ruta/al/script.sh
|
||
|
||
* Ejecutar todos los lunes a las 8:00 AM: 0 8 \* \* 1 /ruta/al/script.sh
|
||
|
||
######
|
||
|
||
minuto hora día\_mes mes día\_semana
|
||
|
||
###### Ubicación de los crontabs
|
||
|
||
1. **Usuario actual:** `crontab -e` → se guarda en `/var/spool/cron/crontabs/usuario`
|
||
|
||
2. **Global (para todos los usuarios):**
|
||
|
||
* `/etc/crontab`
|
||
|
||
* Archivos en `/etc/cron.d/`
|
||
|
||
* Directorios especiales:
|
||
|
||
* `/etc/cron.daily/` (se ejecuta una vez al día)
|
||
|
||
* `/etc/cron.hourly/` (cada hora)
|
||
|
||
* `/etc/cron.weekly/` (una vez a la semana)
|
||
|
||
* `/etc/cron.monthly/` (una vez al mes)
|
||
|
||
#### GENERAR TOKENS
|
||
|
||
**Linux / macOS**
|
||
OpenSSL
|
||
openssl rand -hex 32
|
||
|
||
Genera 32 bytes aleatorios en hexadecimal (64 caracteres).
|
||
|
||
/dev/urandom
|
||
cat /dev/urandom | tr -dc 'a-f0-9' | head -c 64
|
||
echo
|
||
UUID
|
||
uuidgen
|
||
Ejemplo:
|
||
550e8400-e29b-41d4-a716-446655440000
|
||
|
||
**Windows**
|
||
PowerShell
|
||
\[guid]::NewGuid()
|
||
|
||
O un token más largo:
|
||
-join ((48..57) + (97..102) | Get-Random -Count 64 | % {\[char]$\_})
|
||
OpenSSL en Windows
|
||
|
||
Si tienes instalado OpenSSL
|
||
openssl rand -hex 32
|
||
|
||
**Python (multiplataforma)**
|
||
Funciona igual en Linux, macOS y Windows:
|
||
import secrets
|
||
token = secrets.token\_hex(32)
|
||
print(token)
|