CosasCLI/cosasCLI.md

1157 lines
31 KiB
Markdown
Raw Permalink Normal View History

# Introducción
En esta hoja se van a ir incluyendo comandos útiles de terminal de Linux y Mac.
2023-04-03 15:07:52 -06:00
1. [Comandos generales](#ComandosGeneralesTag)
2023-04-12 20:06:46 -06:00
* [Operaciones aritméticas con Python desde la terminal](#OperacionesAritPythonTag)
2023-04-03 15:07:52 -06:00
* [Monitoreo tipo htop de GPU de Nvidia](#MonitoreoGPUTag)
* [Consulta de IP local](#ConsultaIPlocalTag)
* [Permisos de un disco duro externo](#PermisosHDexternoTag)
* [Administración de usuarios](#AdministracionUsuariosTag)
2. [GIT](#GITTag)
* [Configuración de GIT de forma local](#ConfiguracionGITLocalTag)
* [Creación de un repositorio local](#CreacionRepoLocalTag)
* [GitLab](#GitLabTag)
1. [Configuración de llaves para acceso a GitLab mediante SSH](#LlavesSSHTag)
2. [Subir a GitLab un repositorio local](#SubirRepoGitLabtag)
* [Comandos esenciales de GIT](#ComandosEsencialesGitTag)
2023-04-03 15:07:52 -06:00
3. [TMUX](#tmuxTag)
* [Manejo de ventanas en `tmux`](#ManejoVentanasTmuxTag)
* [Manejo de sesiones en `tmux`](#ManejoSesionesTmuxTag)
* [Manejo de páneles en `tmux`](#ManejoPanelesTmuxTag)
* [Archivo de configuración de `tmux`](#ArchivoConfigTmuxTag)
2023-04-03 15:07:52 -06:00
4. [Image Magick](#ImageMagickTag)
2023-04-13 09:10:24 -06:00
* [Comandos sueltos de ImageMagick](#ComandosImageMagickTag)
* [Optimización de archivos PDF](#OptimizacionPdfTag)
1. [Mediante la aplicación `ps2pdf` de Ghostscript](#OptimizarPdfGSATag)
2. [Mediante script explícito de Ghostscript](#OptimizarPdfGSATag)
* [Cambiar un PDF de RGB a CMYK](#CambiarRgbCmykTag)
* [Convertir a curvas los textos contenidos en un archivo SVG](#ConvertirACurvasTag)
* [Cambiar el tamaño y la resolución de una imagen](#CambiaTamanhoResImagenTag)
2023-04-03 15:07:52 -06:00
5. [Audio](#audioTag)
* [Modificación de etiquetas y metadatos de MP3](#ModificacionMP3Tag)
2023-04-03 15:07:52 -06:00
6. [ArchLinux](#ArchLinuxTag)
7. [xmGrace](#xmgraceTag)
2023-04-03 15:07:52 -06:00
* [Ajuste del tamaño de ventana por defecto](#AjusteVentanaGraceTag)
8. [Markdown](#MarkdownTag)
2023-04-03 15:07:52 -06:00
* [Instalación de `vim-instant-markdown`](#InstalacionVimMarkdownTag)
<!-- ============================================================ -->
# <a id=ComandosGeneralesTag></a> Comandos generales
2023-04-12 20:06:46 -06:00
### <a id=OperacionesAritPythonTag></a> Operaciones aritméticas con Python desde la terminal
Se asigna a `x` el resultado de la operación aritmética del ejemplo y luego se imprime `x` con 3 decimales, en este caso especificados con `format`, que es un formateo de la versión 3 de Python:
```
$ python3 -c "x = 100 * 15.620 / 26.721; print('{0:.3f}'.format(x))"
```
Este comando se puede llamar desde dentro de VIM.
2023-04-03 15:07:52 -06:00
### <a id=MonitoreoGPUTag></a> Monitoreo tipo htop de GPU de Nvidia
Para actualización cada 1 s
```
$ nvidia-smi -l 1
```
2023-04-03 15:07:52 -06:00
### <a id=ConsultaIPlocalTag></a> Consulta de IP local
En Mac
```
$ ipconfig getifaddr en0
```
En Debian/Arch
```
$ ip addr
```
o de manera abreviada
```
$ ip a
```
El servicio `ssh` en Mac está desactivado por defecto.
El manejo es el siguiente:
```
sudo systemsetup -setremotelogin on
sudo systemsetup -getremotelogin
sudo systemsetup -setremotelogin off
```
Para saber lo que hay conectado en una red local se usa `nmap`
```
$ nmap -sn 192.168.0.0/24
```
que es lo que sale con `ip addr`
Sin opciones se ven qué servicios tienen activados
```
$ nmap 192.168.0.0/24
```
Saber hostame en Mac
```
$ scutil --get HostName
```
Cambiar hostname en Mac
```
$ sudo scutil --set HostName 'nuevoHostname'
```
2023-04-03 15:07:52 -06:00
### <a id=PermisosHDexternoTag></a> Permisos de un disco duro externo
Saber las particiones (dos opciones)
```
# fdisk -l
$ lsblk
```
Saber la UUID de una partición
```
# blkid
```
Saber partición y dónde está montada
```
$ df -h
```
Hacer que un disco duro externo sea escribible por el usuario. (Pendiente agregar la modificación que hay que hacer en el archivo `fstab`.)
```
2023-04-11 14:47:47 -06:00
# chgrp plugdev /media/user/<UUID>
# chmod g+rw /media/user/<UUID>
```
2023-04-03 15:07:52 -06:00
### <a id=AdministracionUsuariosTag></a> Administración de usuarios
Crear el usuario `fulano`.
```
# useradd fulano
```
Crear el usuario `fulano` con su carpeta personal.
```
# useradd -m fulano
```
Crear el usuario `fulano` con carpeta personal que pertenecerá al grupo principal `grupo`.
```
# useradd -m -g grupo fulano
```
Asignar (o modificar) la contraseña del usuario `fulano`.
```
# passwd fulano
```
Crea el directorio `home` del usuario `fulano` por defecto
```
# mkhomedir_helper fulano
```
<!-- ******************************************************************************** -->
2023-04-03 15:07:52 -06:00
# <a id=GITTag></a> GIT
2023-04-03 15:07:52 -06:00
### <a id=ConfiguracionGITLocalTag></a> Configuración de GIT de forma local
* Configuración del usuario
```
$ git config --global user.name "Fulanito de Tal"
$ git config --global user.email "correo@dominio.algo"
$ git config --global core.editor "vim"
$ git config --global -e
$ git config --global --list
```
2023-04-03 15:07:52 -06:00
### <a id=CreacionRepoLocalTag></a> Creación de un repositorio local
1. Crear una carpeta e ingresar en ella.
```
$ mkdir nombreProyecto
$ cd nombreProyecto
```
Si ya se tiene una carpeta con contenido también se puede inicializar para darle seguimiento desde Git.
2. Inicializar creando el repositorio local
```
$ git init
```
3. Crear el archivo para colocar los nombres de archivos que no llevarán seguimiento en Git. Esto es importante porque puede haber archivos locales que por cierta conveniencia no deben ir en el repositorio, en especial si se planea ponerlo en un repositorio remoto.
```
$ touch .gitignore
```
En este archivo se colocan los nombres junto con las carpetas que los contienen. Por ejemplo, si dentro de la carpeta `nombreProyecto` existe una de nombre `bin` y dentro de ésta un archivo de nombre `a.out` que no llevará seguimiento en Git, el nombre de archivo que se agrega en `.gitignore` es:
```
bin/a.out
```
NOTA: Las carpetas vacías no llevan seguimiento de Git por defecto. Si se quiere mantenerlas se les agrega al menos un archivo vacío.
2023-04-03 15:07:52 -06:00
## <a id=GitLabTag></a> GitLab
2023-04-03 15:07:52 -06:00
### <a id=LlavesSSHTag></a> Configuración de llaves para acceso a GitLab mediante SSH
Una de las ventajas de trabajar con Git es la posibilidad de colocar repositorios en una nube y poder acceder a ésta desde cualquier lugar. Para ello es necesario establecer un canal de comunicación entre la versión del repositorio en forma local y la versión de la nube para que se puedan actualizar a través de comandos. Esto se hace mediante el protocolo SSH (Secure SHell de FreeBSD) y se automatiza con el uso de un par de llaves RSA, privada y pública, para que la comunicación sea directa sin necesidad de estar poniendo passwords. Estas llaves sirven para cualquier comunicación mediante SSH, aquí se describe su uso para comunicar el repo local con el repo ubicado en la nube de GitLab y los pasos son los siguientes:
1. La generación del par de llaves RSA se logra con el siguiente comando:
```
$ ssh-keygen -t rsa
```
2. Ambas llaves se guardan en el directorio `$HOME/.ssh`, una es pública y la otra privada y se pueden identificar por el nombre de archivo. Por defecto tienen los nombres `id_rsa` e `id_rsa.pub`, aunque se le puede cambiar (manteniendo la extensión `.pub` a la que le corresponde) para identificar a qué computadora pertenecen esas llaves. La llave privada no debe compartirse con nadie o mandarla a otras computadoras. La llave pública es la que se comparte, y en este caso es la que se va a usar para establecer el vínculo SSH entre la computadora local y GitLab. Copiar el contenido de la llave pública visualizando su contenido de la siguiente manera, seleccionándolo y copiándolo.
```
$ cat id_rsa.pub
```
2. Si ya se tiene cuenta en GitLab se abre la página y se ingresa a ella. Arriba a la derecha (al momento de escribir esta parte, abril de 2023) se encuentra la foto de perfil de usuario. Hacer clic allí, desplegar el menú y seleccionar `Preferences`. En la columna de la izquierda seleccionar `SSH Keys`. Pegar allí el contenido de la llave `id_rsa.pub` y rellenar los demás campos como se decida. En `Title` se pone el nombre de la computadora a la que pertenece la llave, en `Usage type` puede quedar como `Authentication & Signing` y en `Expiration date` se puede seleccionar una fecha. Se da clic en `Add key`.
3. Completado lo anterior se puede ingresar a GitLab desde la terminal mediante SSH.
2023-04-03 15:07:52 -06:00
### <a id=SubirRepoGitLabtag></a> Subir a GitLab un repositorio local
Aun cuando se puede crear un repositorio en GitLab y modificar contenido desde allí, lo normal es que el proyecto se desarrolle de forma local y se suban los cambios al repositorio en GitLab, que es lo que se describe a continuación.
1. Se ingresa a la página principal de la cuenta propia en GitLab. Es conveniente crear diferentes grupos, dentro de los cuales se alojen los proyectos. Ingresar al menú desde la parte de arriba y a la izquierda y seleccionar Grupos o Proyectos, dependiendo de lo que se vaya a hacer, en este caso, Proyectos. Seleccionar `New project` arriba a la derecha en la ventana principal.
2. Seleccionar `Create blank project` y enseguida se rellenan los campos. Notar que aquí hay opción de definir si el proyecto va a ser público o privado. Se puede optar por que se genere o no un archivo `README`. Enseguida se crea el proyecto.
3. Enseguida copiar el enlace de acceso al proyecto en el botón `Clone` ubicado a la derecha. Copiar la liga de la opción `Clone with SSH`.
4. Ingresar desde la terminal en la computadora local al proyecto que se ha creado y pegar allí el contenido del portapapeles como se muestra en el siguiente comando:
```
$ git remote add origin https://gitlab.com/nombreGrupo/nombreProyecto.git
```
5. Agregar a `stagging` los archivos que se tengan del proyecto con el siguiente comando:
```
$ git add .
```
6. Comprometer o hacer "commit" de los archivos en `stagging` agregando un mensaje de lo que se hizo de cambios. El comando es el siguiente:
```
$ git commit -m "Commit Inicial."
```
7. Enviar a Gitlab los archivos comprometidos
```
$ git push -u origin master
```
2023-04-03 15:07:52 -06:00
## <a id=ComandosEsencialesGitTag></a> Comandos esenciales de GIT
<!-- ------------------------------------------------------------ -->
* Consulta del estado de un repositorio
```
$ git status
```
<!-- ------------------------------------------------------------ -->
* Agregar un archivo a *stagging*
```
$ git add archivo
```
<!-- ------------------------------------------------------------ -->
* Borrar un archivo del prepositorio y del disco
```
$ git rm archivo
```
<!-- git restore - - stagged archivo, git restore archivo, git mv arch1 arch2 -->
<!-- ------------------------------------------------------------ -->
* Comprometer o hacer *commit* a archivos en *stagging*
```
$ git commit -m "Mensaje"
```
<!-- ------------------------------------------------------------ -->
* *Unstagging* archivos
```
$ git reset HEAD archivo
```
<!-- ------------------------------------------------------------ -->
* Clonar un repo en un directorio local
```
$ git clone git@gitlab.com/grupo/repo.git
```
* agregar el alias `originVec` al repo en GitLab
```
$ git remote add originVec git@gitlab.com/grupo/repo.git
```
* Saber los alias del repo remoto en GitLab
```
$ git remote -v
```
* Enviar las actualizaciones de la rama `master` al repo `originVec`
```
$ git push originVec master
```
* Descargar las actualizaciones de la rama `master` al repo `originVec`
```
$ git pull originVec master
```
* Crear nueva rama de nombre `feature/new-feature`
```
$ git checkout -b feature/new-feature
```
* Cambiarse a la rama `master`
```
$ git checkout master
```
* Fast merge a branch from master
```
$ git checkout master
$ git merge feature/new-feature
```
* Borrar una rama forzadamente
```
$ git branch -D feature/new-feature
```
* Saber las ramas que hay
```
$ git branch
```
2023-04-03 15:07:52 -06:00
# <a id=tmuxTag></a> TMUX
`tmux` es un programa de terminal para gestionar varias terminales.
Los siguientes comandos son para configurar `tmux` y los necesarios para sobrevivir con el programa. Primero se incluyen los esenciales y quizá se vayan incorporando algunos de menor frecuencia de uso.
1. Para introducir comandos se utiliza la combinación
`Ctrl+a <comando>`
la cual también se denota en los apuntes como
`C-a <comando>`.
Equivale a presionar la combinación de teclas `C-a`, soltar y enseguida la tecla del comando.
Por defecto es `C-b`, pero se puede mapear a `C-a` por ser más práctico. Ver abajo en el archivo de configuración para saber cómo hacerlo.
2. El comando `:` es para ingresar a la línea de comandos de `tmux`
3. Desde línea de comandos `C-a` es igual al comando `tmux` en la terminal, es decir
`C-a :<comando>`
equivale a poner en la terminal
```
2023-04-11 14:49:42 -06:00
$ tmux <comando>
```
4. Entrar a tmux
```
$ tmux
```
5. Cerrar tmux, lo que cierra todas las sesiones
```
C-a :kill-server
```
6. En `tmux` el trabajo diario se puede organizar de la siguiente manera:
- En `tmux` se tienen una o más **sesiones**.
- Cada **sesión** puede tener una o más **ventanas**.
- Cada **ventana** se puede dividir en dos o más páneles o **panes**.
2023-04-03 15:07:52 -06:00
## <a id=ManejoVentanasTmuxTag></a> Manejo de ventanas en `tmux`
Crear ventana
```
C-a c
```
Crear ventana en el directorio actual. Ver abajo archivo de configuración para dejar esta opción por defecto.
```
C-a :new-window -c "#{pane_current_path}"
```
Cerrar ventana. Puede utilizarse alguna de las siguientes tres maneras, en la terminal o dos opciones de línea de comandos de Tmux.
```
$ exit
C-a x
C-a &
```
Cambiar nombre de ventana
```
C-a ,
```
Ir a una ventana dada
```
2023-04-11 14:49:42 -06:00
C-a <Número de ventana>
```
Ir a ventana desde listado
```
C-a w
```
Ir a la ventana siguiente
```
C-a n
```
Ir a la ventana previa
```
C-a p
```
Ir al buffer del histórico de la ventana. Con `AvPag`, `RePag` y flechas de dirección &uarr; y &darr; se avanza o retrocede.
```
C-a [
```
Salir del histórico de la ventana
```
q
```
Renumera una ventana actual (a un número sin ocupar)
```
C-a :move-window -t número
```
Renumera la ventana número `X` al número `Y` si es que `Y` no está ocupado
```
C-a :move-window -s X -t Y
```
Invierte numeración de dos ventanas
```
C-a :swap-window -s X -t Y
```
2023-04-03 15:07:52 -06:00
## <a id=ManejoSesionesTmuxTag></a> Manejo de sesiones en `tmux`
Terminar una sesión. Para la sesión actual:
```
C-a :kill-session
```
y para una sesión diferente a la actual:
```
C-a :kill-session -t nombreSesion
```
Crear sesión. Convenientemente es recomendable utilizar mayúsculas y nombres cortos para las sesiones.
```
C-a :new -s SESIONNUEVA
```
Listar sesiones. Puede ser una de las siguientes formas:
```
C-a :list-sessions
C-a :ls
```
Renombrar sesión. Puede ser una de las siguientes formas:
```
C-a :rename-session nuevoNombre
C-a $
```
Renombrar sesión específica. Puede ser una de las siguientes formas:
```
C-a :rename-session -t oldName newName
C-a :rename -t oldName newName
```
Ir a sesión
```
C-a :attach-session -t miSesion
```
Ir a sesión desde listado
```
C-a s
```
2023-04-03 15:07:52 -06:00
## <a id=ManejoPanelesTmuxTag></a> Manejo de páneles en `tmux`
Dividir verticalmente
```
C-a %
```
Dividir horizontalmente
```
C-a "
```
Moverse entre panes
```
C-a cursores
```
2023-04-03 15:07:52 -06:00
## <a id=ArchivoConfigTmuxTag></a> Archivo de configuración de `tmux`
Archivo de configuración (hay que crearlo)
```
$HOME/.tmux.conf
```
Agregar lo siguiente para remapear el atajo
```
# ---------- Inicio remapear el atajo
# Ademas de Ctrl+A, se agrega un atajo de teclado tipo screen (Ctrl+A)
# Para tmux < 1.6:
set-option -g prefix C-a,C-b
# Para tmux >= 1.6:
#set-option -g prefix C-a
#set-option -g prefix2 C-b
# Empezar la numeración de las ventanas creadas en 1 (la primera ventana)
set -g base-index 1
# ---------- Fin remapear el atajo
```
Agregar lo siguiente para que las nuevas ventanas creadas dentro de una sesión se inicien en el directorio que tiene la ventana actual:
```
# ---------- Inicio Nueva ventana en directorio actual
bind c new-window -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
# ---------- Fin Nueva ventana en directorio actual
```
- Recargar el archivo de configuración de `tmux` se hace una de las siguientes opciones (en la terminal o en la línea de comandos de Tmux):
```
$ tmux source-file ~/.tmux.conf
C-a :source-file ~/.tmux.conf
```
2023-04-03 15:07:52 -06:00
# <a id=ImageMagickTag></a> Image Magick
2023-04-13 09:10:24 -06:00
## <a id=ComandosImageMagickTag></a> Comandos sueltos de ImageMagick
Recortar una imagen en PNG con fondo transparente de manera que la imagen quede del tamaño del contenido.
```
$ convert archivoEntrada.png -trim +repage archivoSalida.png
```
Cambiar la resolución de una imagen PNG.
```
$ convert entrada.png -density 118.11x118.11 -units pixelsPerCentimeter salida.png
```
&emsp;En donde 118.11 px/cm = 300 dpi. Para PNG es posible que se tengan que usar unidades de px/cm para que funcione, dependiendo de la versión de ImageMagick.
&emsp;Si acepta directamente las unidades en pulgadas el comando es el siguiente.
```
$ convert entrada.png -density 300 -units pixelsPerInch salida.png
```
Medidas del tamaño carta:
```
8.5" por 11"
21.59 cm por 27.94 cm
2550 px por 3300 px
```
Redimensionar una imagen a tamaño carta y especificar resolución a 300 dpi.
```
$ convert entrada.png \
-resize 2550x3300 \
-density 118.11x118.11 \
-units pixelspercentimeter \
salida.png
```
Colocar una imagen en un lienzo tamaño carta a 300 dpi. La imagen se redimensiona a un tamaño dado por `-resize` de manera que queda lo más grande posible en ese espacio sin deformarse. La resolución de la imagen está dada por `-density`. Agrega un fondo blanco mediante `-background` y coloca la imagen en un espacio tamaño carta definido por `-extent`.
```
$ convert entrada.png \
-resize 2550x3300 \
-density 118.11x118.11 \
-units pixelspercentimeter \
-background white \
-gravity center \
-extent 2550x3300 \
salida.png
```
Ajuste de niveles
```
$ convert entrada.png -level 5%,80% salida.png
```
Los niveles se usan también para intercambiar color. Cambia el White,Black por el par de colores dados por `colorA,colorB` en donde si se deja en blanco, como el primer valor del ejemplo, ese color se mantiene inalterado.
```
$ convert entrada.png +level-colors ,DodgerBlue salida.png
```
Gaussian redistribution para una imagen. Da mejor resultado que con ajustes de color y niveles. Es script de Fred.
```
$ redist -s gaussian 60,60,60 entrada.png salida.png
```
Cortar imágenes
```
$ convert entrada.png -crop WxH+0+0 +repage salida.png
```
`WxH` anchura por altura en pixeles.
`+0+0` coordenadas medidas desde la parte superior derecha.
`+repage` reubica el origen del sistema de coordenadas en la parte superior derecha.
Apaga canal alfa, pero la mantiene como parte de la imagen. Pone fondo negro.
```
2023-12-19 15:42:06 -06:00
$ convert entrada.png -alpha off salida.png
```
Remueve canal alfa y pone fondo blanco.
```
2023-12-19 15:42:06 -06:00
$ convert entrada.png -alpha remove salida.png
```
Remueve canal alfa y pone de fondo el color que se le indica, en este caso, azul.
```
2023-12-19 15:42:06 -06:00
$ convert entrada.png -background blue -alpha remove salida.png
```
Extraer imágenes de un pdf en su formato original:
```
$ pdfimages -all in.pdf imagen
```
2023-04-03 15:07:52 -06:00
2023-04-13 09:10:24 -06:00
## <a id=OptimizacionPdfTag></a> Optimización de archivos PDF
### <a id=OptimizarPdfGSATag></a> Mediante la aplicación `ps2pdf` de Ghostscript
```
$ ps2pdf entrada.pdf salida.pdf
```
### <a id=OptimizarPdfGSATag></a> Mediante script explícito de Ghostscript
1. Se crea un script de bash con un nombre apropiado como `optimizarPdf.sh` que tenga el siguiente contenido:
```
#!/usr/bin/bash
# Para optimizar el pdf de nombre "archivo.pdf" se corre como:
#
# ./optimizarPdf.sh archivo 300
#
# en donde 300 es la resolución que también puede ser de 150 y 72
archivo=$1
res=$2
echo "Se seleccionó $res dpi"
archIn=$archivo.pdf
archOut=$archivo-${res}dpi.pdf
case $res in
300)
resTipo='/printer' # o usar /prepress
;;
150)
resTipo='/ebook'
;;
72)
resTipo='/screen'
;;
*)
echo "Resolucion no valida. Puede ser 300, 150 o 72"
exit 0
;;
esac
gs \
-sDEVICE=pdfwrite \
-dMaxSubsetPct=100 \
-dPDFSETTINGS=$resTipo \
-sOutputFile="$archOut" \
-dNOPAUSE \
-dBATCH \
-dAutoFilterColorImages=false \
-dColorImageFilter=/FlateEncode \
-dAutoFilterGrayImages=false \
-dGrayImageFilter=/FlateEncode \
-dMonoImageFilter=/FlateEncode \
"$archIn"
exit 0
```
2. Se le cambian los permisos para que pueda ser ejecutable y se mueve a un directorio que sea reconocido por el `$PATH`, por ejemplo, `/home/$USER/bin`.
```
$ chmod +x optimizarPdf.sh
$ mv optimizarPdf.sh /home/$USER/bin
```
3. El script optimiza las imágenes dentro del PDF para que queden a 72 dpi, 150 dpi o 300 dpi. Entonces, para optimizar un archivo PDF de nombre `archivo.pdf` a 300 dpi el script se ejecuta como:
```
$ optimizarPdf.sh archivo 300
```
en donde el nombre del archivo se indica sin la extensión. Los posibles valores de resolución en dpi son los indicados.
## <a id=CambiarRgbCmykTag></a> Cambiar un PDF de RGB a CMYK
1. Se crea un script de bash con un nombre apropiado como `pdfRgb2Cmyk.sh` que tenga el siguiente contenido:
```
#!/usr/bin/bash
# Para cambiar el pdf de nombre "archivo.pdf" de RGB a CMYK se corre como:
#
# ./pdfRgb2Cmyk.sh archivo
archivo=$1
archIn=$archivo.pdf
archOut=$archivo-cmyk.pdf
gs \
-sDEVICE=pdfwrite \
-dNOPAUSE \
-dNOCACHE \
-dBATCH \
-dSAFER \
-dAutoRotatePages=/None \
-sColorConversionStrategy=CMYK \
-dProcessColorModel=/DeviceCMYK \
-sOutputFile="$archOut" \
"$archIn"
exit 0
```
2. Se le cambian los permisos para que pueda ser ejecutable y se mueve a un directorio que sea reconocido por el `$PATH`, por ejemplo, `/home/$USER/bin`.
```
$ chmod +x pdfRgb2Cmyk.sh
$ mv pdfRgb2Cmyk.sh /home/$USER/bin
```
3. El script cambia a CMYK las imágenes de un archivo PDF que estén en RGB y se ejecuta como:
```
$ pdfRgb2Cmyk.sh archivo
```
en donde el nombre del archivo se indica sin la extensión.
## <a id=ConvertirACurvasTag></a> Convertir a curvas los textos contenidos en un archivo SVG
1. Se crea un script de bash con un nombre apropiado como `inkCurva.sh` que tenga el siguiente contenido:
```
#!/usr/bin/bash
# Para ejecutar
#
# $ inkCurva.sh archivo
#
# en donde 'archivo' es el archivo.svg. El resultado tiene por nombre archivocurvas.svg
ruta=`pwd`
# Descomentar si se usa en MacOS
# correInks=/Applications/Inkscape.app/Contents/Resources/bin/inkscape
# En este caso cambiar el hashbang de la primera línea a #!/bin/bash
# Descomentar si se usa un Inkscape instalado mediante gestor de paquetes
# correInks=/usr/bin/inkscape
# Descomentar si se ejecuta Inkscape desde un binario tipo AppImage, ajustar la ruta y el nombre
correInks=/home/$USER/local/inkscape122/Inkscape-b0a8486-x86_64.AppImage
$correInks $ruta/$1.svg --export-text-to-path --export-plain-svg=$ruta/$1curvas.svg
```
2. Se le cambian los permisos para que pueda ser ejecutable y se mueve a un directorio que sea reconocido por el `$PATH`, por ejemplo, `/home/$USER/bin`.
```
$ chmod +x inkCurva.sh
$ mv inkCurva.sh /home/$USER/bin
```
3. El script convierte a curvas todos los textos contenidos en `archivo.svg` de Inkscape y se ejecuta como:
```
$ inkCurva.sh archivo
```
en donde el nombre del archivo se indica sin la extensión.
## <a id=CambiaTamanhoResImagenTag></a> Cambiar el tamaño y la resolución de una imagen
Supóngase que se tiene una imagen a la cual se le quiere cambiar su tamaño de manera proporcional, sea a una altura o una anchura y una resolución deseadas. Para esa tarea se puede utilizar el script [`tamanhoImagen.py`](https://git.cuates.net/braquistos/CosasCLI/src/branch/master/tamanhoImagen.py) incluido en este repositorio y su uso es de la siguiente forma:
```
$ ./tamanhoImagen.py nombreImagen.png H 12 300
```
en donde se va a modificar el archivo de imagen `nombreImagen.png`. La `H` significa que se va a especificar su altura, la cual es de `12` centímetros a una resolución de `300` dpi. La otra opción es indicarle que se especificará su anchura con `W` en vez de `H`. Tanto como la altura, como la anchura se han de dar en centímetros y la resolución se especifica considerando las unidades dpi.
Como resultado se generará un archivo de nombre `nombreImagen-modificada.png` y se desplegara información de la imagen original y de la de salida. Es importante notar que si el porcentaje indicado al final es mayor al 110 %, entonces es posible que la imagen comience a verse pixeleada, por lo que es recomendable partir de una imagen original de mejor calidad. Por el momento sólo soporta imágenes PNG y JPEG que son de las más comunes, aunque manchándose un poco las manos en el teclado se puede hacer la modificación en los dos condicionales del script y las pruebas pertinentes para que soporte más formatos. Es quizá obvio, pero necesario, decir que se requiere tener instalado ImageMagick y Python 3 para que funcione.
Este script, con los permisos de ejecución adecuados, puede colocarse en una ruta reconocida por la variable $PATH, por ejemplo, `/home/$USER/bin` y ser accesible desde cualquier directorio. Siendo así, se puede incorporar en scripts de bash para hacer redimensionamiento masivo de imágenes. Supongamos que estamos dentro de una carpeta y se requiere que todas las imágenes PNG contenidas allí midan 9 cm de ancho y estén a 200 dpi. El script de bash podría llamarse `cambiarTamagno.sh` e iría de la siguiente forma:
```
#!/usr/bin/bash
lado=W # Se indica que va a ser la anchura
longitud=9
resolucion=200
for i in `ls -1 *.png`
do
tamanhoImagen.py $i $lado $longitud $resolucion
done
exit 0
```
Para ejecutarlo una vez ajustados los permisos para que sea ejecutable puede ser:
```
$ ./cambiarTamagno.sh >& salida.out &
```
en donde el archivo `salida.out` contendrá toda la información de las imágenes originales y generadas.
2023-04-13 09:10:24 -06:00
# <a id=audioTag></a> Audio
## <a id=ModificacionMP3Tag></a> Modificación de etiquetas y metadatos de MP3
El programa para modificar etiquetas y metadatos de un archivo mp3 es `eyeD3` y se instala en Debian como:
```
# apt install eyed3
```
Para ver lo que trae el archivo:
```
$ eyeD3 "archivo.mp3"
```
Para borrarle todo (antes de agregar los nuevos metadatos)
```
$ eyeD3 --remove-all "archivo.mp3"
```
Contenido de un script en Bash para introducir etiquetas y metadatos a un archivo mp3.
```
# 01
eyeD3 --to-v2.4 \
--artist "Nombre del artista" \
--album "Nombre del Álbum" \
--title "Nombre de la rola" \
--track 1 \ # Número de rola en el Álbum
--release-year 2018 \
--add-image nombreImagen.jpg:FRONT_COVER \
--rename '$track:num - $title' \
"nombre de archivo previo.mp3"
```
El script modifica los metadatos del archivo `nombre de archivo previo.mp3`, introduce datos básicos como Artista, Álbum, Rola, número de rola en el álbum, el año en que se dio a conocer y le agrega una imagen de portada del álbum de nombre `nombreImagen.jpg`. Renombra el archivo al estilo `00 - Título.mp3` en donde 00 es el número de rola.
Para modificar varios archivos de un álbum dado se modifica el script en cuanto a las etiquetas `--artist`, `--album`, `--release-year`, `--add-image` se repite el bloque tanntas veces como haya rolas en el álbum y se ajustan de forma manual los datos particulares de cada rola.
La información introducida es la que se visualiza en cualquier reproductor de música en mp3.
2023-04-03 15:07:52 -06:00
# <a id=ArchLinuxTag></a> ArchLinux
Paquetes AUR ArchLinux
https://wiki.archlinux.org/title/Arch_User_Repository
2023-04-03 15:07:52 -06:00
# <a id=xmgraceTag></a> xmGrace
Grace (`xmgrace`) es un programa para realizar gráficas 2D para sistemas tipo Unix como Linux y que utiliza X Windows System para el despliegue gráfico.
2023-04-03 15:07:52 -06:00
## <a id=AjusteVentanaGraceTag></a> Ajuste del tamaño de ventana por defecto
De forma predeterminada el lienzo de la gráfica visualizada es de mayor tamaño que la ventana de visualización, lo que hace necesario estar haciendo un poco más grande esa ventana para lograr ver el gráfico cada vez que se genera, situación que puede ser tediosa. En esta parte se detallan los pasos a seguir para modificar por defecto el tamaño de esa ventana.
1. Si no existe, crear en HOME el archivo .Xdefaults (checar que es oculto)
```
$ touch $HOME/.Xdefaults
```
2. Abrir el archivo (con VIM, por ejemplo) y poner la siguiente línea y ajustar los valores si es necesario.
```
XMgrace*mainWin.geometry: 1150x900
```
3. Recargar el archivo con
```
$ xrdb -merge ~/.Xdefaults
```
2023-04-03 15:07:52 -06:00
# <a id=MarkdownTag></a> Markdown
2023-04-03 15:07:52 -06:00
## <a id=InstalacionVimMarkdownTag></a> Instalación de `vim-instant-markdown`
`vim-instant-markdown` es un plugin que permite utilizar `vim` para editar textos con `markdown` visualizando la salida en un navegador en tiempo real.
La referencia principal es la siguiente: https://github.com/instant-markdown/vim-instant-markdown
Una forma de instalar el plugin en Debian se describe en los siguientes pasos:
1. Instalar javascript si no se tiene:
```
# apt install nodejs npm xdg-utils
```
2. Instalar el plugin
```
# npm -g install instant-markdown-d
```
3. Si no se tiene manejador de plugins en `vim` una posibilidad es instalar [`vim-plug`](https://github.com/junegunn/vim-plug) llevando a cabo los siguientes pasos:
* Ejecutar el siguiente comando que crea el directorio `~/.vim/autoload/` y descarga allí el script `plug.vim`.
```
$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
```
* Agregar las siguientes líneas al `.vimrc` en las que se incluye la llamada al plugin `vim-instant-markdown`, que es el que se quiere instalar. Desde luego dentro del entorno se pueden incluir otros plugins.
```
call plug#begin('~/.vim/plugged')
Plug 'instant-markdown/vim-instant-markdown', {'for': 'markdown', 'do': 'yarn install'}
call plug#end()
```
* Reiniciar `vim` e instalar los plugins con
```
:PlugInstall
```
4. Para la configuración de `vim-instant-markdown` se agregan las siguientes líneas al archivo `.vimrc`. Por defecto están todas comentadas a excepción de la única necesaria. Descomentar las que se requieran para activar funcionalidades.
```
filetype plugin on
" syntax enable
" set nomore
" set noswapfile
" set viminfo=
"let g:instant_markdown_logfile = '/tmp/instant_markdown.log'
"Uncomment to override defaults:
"let g:instant_markdown_slow = 1
"let g:instant_markdown_autostart = 0
"let g:instant_markdown_open_to_the_world = 1
"let g:instant_markdown_allow_unsafe_content = 1
"let g:instant_markdown_allow_external_content = 0
"let g:instant_markdown_mathjax = 1
"let g:instant_markdown_mermaid = 1
"let g:instant_markdown_autoscroll = 0
"let g:instant_markdown_port = 8888
"let g:instant_markdown_python = 1
```
5. Ya está `vim-instant-markdown` listo para usarse.