14 KiB
Introducción
En esta hoja se van a ir incluyendo comandos útiles de terminal de Linux y Mac.
Comandos generales
(Pendiente)
GIT
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
Creación de un repositorio local
- 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.
- Inicializar creando el repositorio local
$ git init
- 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.
GitLab
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:
- La generación del par de llaves RSA se logra con el siguiente comando:
$ ssh-keygen -t rsa
- 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 nombresid_rsa
eid_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
-
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 seleccionarSSH Keys
. Pegar allí el contenido de la llaveid_rsa.pub
y rellenar los demás campos como se decida. EnTitle
se pone el nombre de la computadora a la que pertenece la llave, enUsage type
puede quedar comoAuthentication & Signing
y enExpiration date
se puede seleccionar una fecha. Se da clic enAdd key
. -
Completado lo anterior se puede ingresar a GitLab desde la terminal mediante SSH.
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.
-
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. -
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 archivoREADME
. Enseguida se crea el proyecto. -
Enseguida copiar el enlace de acceso al proyecto en el botón
Clone
ubicado a la derecha. Copiar la liga de la opciónClone with SSH
. -
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
- Agregar a
stagging
los archivos que se tengan del proyecto con el siguiente comando:
$ git add .
- 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."
- Enviar a Gitlab los archivos comprometidos
$ git push -u origin master
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
- 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 repooriginVec
$ git push originVec master
- Descargar las actualizaciones de la rama
master
al repooriginVec
$ 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
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.
-
Para introducir comandos se utiliza la combinación
Ctrl+a <comando>
la cual también se denota en los apuntes comoC-a <comando>
. Equivale a presionar la combinación de teclasC-a
, soltar y enseguida la tecla del comando. Por defecto esC-b
, pero se puede mapear aC-a
por ser más práctico. Ver abajo en el archivo de configuración para saber cómo hacerlo. -
El comando
:
es para ingresar a la línea de comandos detmux
-
Desde línea de comandos
C-a
es igual al comandotmux
en la terminal, es decirC-a :<comando>
equivale a poner en la terminal
$ tmux <comando>
- Entrar a tmux
$ tmux
- Cerrar tmux, lo que cierra todas las sesiones
C-a :kill-server
- 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.
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
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 ↑ y ↓ 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
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
Manejo de páneles en tmux
Dividir verticalmente
C-a %
Dividir horizontalmente
C-a "
Moverse entre panes
C-a cursores
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
Image Magick
(Pendiente)
Markdown
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:
- Instalar javascript si no se tiene:
# apt install nodejs npm xdg-utils
- Instalar el plugin
# npm -g install instant-markdown-d
- Si no se tiene manejador de plugins en
vim
una posibilidad es instalarvim-plug
llevando a cabo los siguientes pasos:
- Ejecutar el siguiente comando que crea el directorio
~/.vim/autoload/
y descarga allí el scriptplug.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 pluginvim-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
- 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
- Ya está
vim-instant-markdown
listo para usarse.