Despliega todas las variables de ambiente. Si necesitas los detalles de una variable especifica, utiliza echo $NOMBRE_DE_VARIABLE.
exportEjemplo:
$ export
AWS_HOME=/Users/adnanadnan/.aws
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LESS=-R
$ echo $AWS_HOME
/Users/adnanadnan/.awswhatis despliega la descripcion para los comandos de usuario, llamadas del sistema, funciones de librerias y otros manuales de comandos.
whatis somethingEjemplo:
$ whatis bash
bash (1) - GNU Bourne-Again SHellwhereis realiza una busqueda de ejecutables, archivos de codigo fuente, manuales de pagina, utilizando una base de datos construida por el sistema de manera automatica.
whereis nameEjemplo:
$ whereis php
/usr/bin/phpwhich realiza una busqueda de ejecutables en los directorios especificados por la variable de ambiente PATH. Este comando despliega las rutas completas a los ejecutables.
which nombre_del_programa Ejemplo:
$ which php
/c/xampp/php/phpLimpia el contenido de la ventana.
| cat | chmod | chown | cp | diff | file | find | gunzip | gzcat | gzip | head |
| lpq | lpr | lprm | ls | more | mv | rm | tail | touch |
Puede ser utilizado para los siguientes propositos bajo UNIX o Linux
- Mostrar archivos de texto en pantalla
- Copiar archivos de texto
- Combinar archivos de texto
- Crear nuevos archivos de texto
cat nombredearchivo
cat archivo1 archivo2
cat archivo1 archivo2 > nuevoarchivocombinado
cat < archivo1 > archivo2 #copiar archivo1 a archivo2El comando chmod significa "cambiar modo" y permite cambiar los permisos de lectura, escritura y ejecucion en los archivos y carpetas para mas información de este comando revisa este enlace.
chmod -options nombredearchivoEl comando chown significa "cambiar propietario" y permite cambiar el propietario de archivos y carpetas, los cuales pueden ser usuarios o grupos. El uso basico es muy simple, primero se especifica el usuario (propietario) y despues el grupo, separados por dos puntos.
chown -options user:group nombredearchivoCopia un archivo de un lugar a otro.
cp nombredearchivo1 nombredearchivo2Donde nombredearchivo1 es la ruta fuente a el archivo y nombredearchivo2 es la ruta destino del archivo.
Compara archivos y lista las diferencias.
diff nombredearchivo1 nombredearchivo2Determina el tipo de archivo.
file filenameEjemplo:
$ file index.html
index.html: HTML document, ASCII textEncuentra archivos en un directorio
find directory options patternEjemplo:
$ find . -name README.md
$ find /home/user1 -name '*.png'Descomprime archivos comprimidos por gzip.
gunzip filenamePermite ver el contenido de un archivo gzipped sin tener que descomprimirlo.
gzcat filenameCompresses files.
gzip filenameOutputs the first 10 lines of file
head filenameRevisar la cola de impresion.
lpqEjemplo:
$ lpq
Rank Owner Job File(s) Total Size
active adnanad 59 demo 399360 bytes
1st adnanad 60 (stdin) 0 bytesImprimir un archivo.
lpr filenameEliminar algo de la cola de impresion.
lprm jobnumberLista archivos. ls tiene muchas opciones: -l lista archivos en 'formato largo', el cual contiene el tamaño exacto del archivo, quien es dueño del archivo, quien tiene permisos para verlo y cuando se modifico por ultima vez. -a lista todos los archivos, incluyendo los archivos ocultos. Para mas informacion de este comando revisa este link.
ls optionEjemplo:
$ ls -la rwxr-xr-x 33 adnan staff 1122 Mar 27 18:44 . drwxrwxrwx 60 adnan staff 2040 Mar 21 15:06 .. -rw-r--r--@ 1 adnan staff 14340 Mar 23 15:05 .DS_Store -rw-r--r-- 1 adnan staff 157 Mar 25 18:08 .bumpversion.cfg -rw-r--r-- 1 adnan staff 6515 Mar 25 18:08 .config.ini -rw-r--r-- 1 adnan staff 5805 Mar 27 18:44 .config.override.ini drwxr-xr-x 17 adnan staff 578 Mar 27 23:36 .git -rwxr-xr-x 1 adnan staff 2702 Mar 25 18:08 .gitignore
Despliega la primera parte de un archivo (desplazarse con espacio y presiona q para salir).
more filenameMueve un archivo de una localizacion a otra
mv filename1 filename2Donde filename1 es la ruta origen de el archivo y filename2 es la ruta destino del archivo.
Tambien puede ser utilizado para renombrar un archivo.
mv old_name new_nameElimina un archivo. Si se utiliza este comando en un directorio se producira un error.
rm: directory: is a directory
Para eliminar un directorrio, se tiene que incluir la bandera -r el cual removera el contenido del directorio de manera recursiva. Se tiene la opcion de incluir la bandera -f para forzar el borrado por ejemplo, sin tener que dar una confirmacion.
rm filenameDa como salida las ultimas 10 lineas de un archivo. Se puede utilizar la bandera -f para agregar datos a la salida a medida que el archivo crece.
tail filenameActualiza las marcas de tiempo de acceso y modificacion en el archivo. Si el archivo no existe se crea.
touch filenameEjemplo:
$ touch trick.md| awk | cut | echo | egrep | fgrep | fmt | grep | nl | sed | sort |
| tr | uniq | wc |
awk es el comando mas util para manejar archivos de texto. Opera en un archivo completo linea por linea. Por defecto utiliza el espacio en blanco para separar los campos. La sintaxis mas comun para el comando awk es
awk '/search_pattern/ { action_to_take_if_pattern_matches; }' file_to_parseTomemos el siguiente archivo /etc/passwd. A continuacion se muestran los datos de ejemplo que contiene este archivo:
root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
Ahora tomemos solo los nombres de usuario del archivo. Donde -F especifica con base en que se separaran los campos. En este caso sera :. { print $1 } indica imprimirr de salida el primer campo que coincida.
awk -F':' '{ print $1 }' /etc/passwdDespues de ejecutar el comando anterior se tendra la siguiente salida.
root
daemon
bin
sys
sync
Para mas detalles en como utilizar awk, revisa el siguiente link.
Elimina secciones de cada linea de los archivos Ejemplo.txt
red riding hood went to the park to playmuestra me las columnas 2, 7 , y 9 con un espacio en blanco como separador
cut -d " " -f2,7,9 Ejemplo.txtriding park playDespliega una linea de texto
despliega "hola mundo"
echo hola mundohola mundodespliega "hola mundo" con lineas nuevas entre palabras
echo -ne "Hello\nWorld\n"Hello
WorldImprime las lineas que corresponda a un patron - Expresion extendida (alias para: 'grep -E')
Ejemplo.txt
Lorem ipsum
dolor sit amet,
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet.Despliega lineas que contengan "Lorem" o "dolor" en ellas.
egrep '(Lorem|dolor)' Ejemplo.txt
or
grep -E '(Lorem|dolor)' Ejemplo.txtLorem ipsum
dolor sit amet,
et dolore magna
duo dolores et ea
sanctus est Lorem
ipsum dolor sitImprime lineas que correspondan a un patron - Correspondencia de patron FIJO (alias for: 'grep -F')
Ejemplo.txt
Lorem ipsum
dolor sit amet,
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
foo (Lorem|dolor)
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet.Encuentra la cadena exacta '(Lorem|dolor)' en Ejemplo.txt
fgrep '(Lorem|dolor)' Ejemplo.txt
or
grep -F '(Lorem|dolor)' Ejemplo.txtfoo (Lorem|dolor) Formateador de texto simple y optimizado
Ejemplo: Ejemplo.txt (1 linea)
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.Entrega lineas de Ejemplo.txt hasta 20 caracteres en total
cat Ejemplo.txt | fmt -w 20Lorem ipsum
dolor sit amet,
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet.Busca texto dentro de los archivos. Se puede utilizar grep para buscar lineas de texto que correspondan una o varias expresiones regulares y entrega como salida solo las lineas que corresponda.
grep pattern filenameEjemplo:
$ grep admin /etc/passwd
_kadmin_admin:*:218:-2:Kerberos Admin Service:/var/empty:/usr/bin/false
_kadmin_changepw:*:219:-2:Kerberos Change Password Service:/var/empty:/usr/bin/false
_krb_kadmin:*:231:-2:Open Directory Kerberos Admin Service:/var/empty:/usr/bin/falseTambien se puede forzar grep para que ignore mayusculas utilizando -i. -r puede ser utilizado para buscar todos los archivos en un directorio especificado, por ejemplo:
$ grep -r admin /etc/Y -w se puede utilizar para buscar solo palabras. Para mas detalles de grep revisa el siguiente link.
Numero de lineas en archivos Ejemplo.txt
Lorem ipsum
dolor sit amet,
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet.show Ejemplo.txt with line numbers
nl -s". " Ejemplo.txt 1. Lorem ipsum
2. dolor sit amet,
3. consetetur
4. sadipscing elitr,
5. sed diam nonumy
6. eirmod tempor
7. invidunt ut labore
8. et dolore magna
9. aliquyam erat, sed
10. diam voluptua. At
11. vero eos et
12. accusam et justo
13. duo dolores et ea
14. rebum. Stet clita
15. kasd gubergren,
16. no sea takimata
17. sanctus est Lorem
18. ipsum dolor sit
19. amet.Stream editor for filtering and transforming text
Ejemplo.txt
Hello This is a Test 1 2 3 4reemplaza todos los espacios con guiones
sed 's/ /-/g' Ejemplo.txtHello-This-is-a-Test-1-2-3-4reemplaza todos los digitos con "d"
sed 's/[0-9]/d/g' Ejemplo.txtHello This is a Test d d d dOrdena lineas de archivos de texto
Ejemplo.txt
f
b
c
g
a
e
dOrdenar Ejemplo.txt
sort Ejemplo.txta
b
c
d
e
f
gOrdena de manera aleatorio un archivo ordenadoEjemplo.txt
sort Ejemplo.txt | sort -Rb
f
a
c
d
g
eReemplaza o elimina caracteres.
Ejemplo.txt
hola mundo Foo Bar Baz!*toma todas las letras minusculas y las convierte en mayusculas *
cat Ejemplo.txt | tr 'a-z' 'A-Z' hola mundo FOO BAR BAZ!toma todos los espacios y los convierte en saltos de linea
cat Ejemplo.txt | tr ' ' '\n'Hello
World
Foo
Bar
Baz!Reporta o omite lineas repetidas
Ejemplo.txt
a
a
b
a
b
c
d
cmuestra solo lineas unicas de Ejemplo.txt (primero necesitas ordenarlo, de otra manera no vera las coincidencias)
sort Ejemplo.txt | uniqa
b
c
dmuestra los items unicos de cada linea y muestrar cuantas instancias encontro
sort Ejemplo.txt | uniq -c 3 a
2 b
2 c
1 dObtiene cuantas lineas, palabras y caracteres hay en un archivo.
wc filenameEjemplo:
$ wc demo.txt
7459 15915 398400 demo.txtDonde 7459 son lineas, 15915 son palabras y 398400 son caracteres.
| cd | mkdir | pwd |
Te mueve de un directorio a otro, ejecutando lo siguiente
$ cdte mueve al directorio home. Este comando acepta de manera opcional dirname, el cual te mueve a ese directorio.
cd dirnameCrea un nuevo directorio.
mkdir dirnamePuedes utilizar este comando para crear multiples directorios al mismo tiempo en el directorio actual.
mkdir 1stDirectory 2ndDirectory 3rdDirectoryTambien puedes utilizarlo para crear directorios padre al mismo tiempo. Por ejemplo, si quieres un directorio llamada 'project1' en otro subdirectorio como '/samples/bash/projects/', puedes ejecutar:
mkdir /samples/bash/projects/project1Si alguno de estos directorios no existe, se crearan tambien.
Te indica en que directorio te encuentras.
pwd| bg | cal | date | df | dig | du | fg | finger | jobs | last |
| man | passwd | ping | ps | quota | scp | ssh | top | uname | uptime |
| w | wget | whoami | whois |
Lista trabajos detenidos o en background; reinicia un trabajo en background.
Muestra el mes del calendario.
Muestra la fecha y hora actual.
Muestra el uso del disco.
Obtiene informacion DNS para un dominio.
dig domainMuestra el uso del disco de archivos y directorios. Para mas informacion en este comando revisa este link
du [option] [filename|directory]Opciones:
-h(legile para humanos) Despliega salida en kilobytes (K), megabytes (M) y gigabytes (G).-s(suprimir o sumarizar) Despliega el spacio total en disco de un directorio y suprime el reporte para los subdirectorios.
Ejemplo:
du -sh pictures
1.4M picturesObtiene el trabajo mas reciente en el foreground.
Despliega informacion acerca del usuario.
finger usernameLista los trabajos corriendo en el background, indicando el numero de trabajo.
Lista los ultimos logins del usuario especificado.
last yourUsernameMuestra el manual para un comando especificado.
man commandPermite al usuario logueado cambiar su password.
Ejecuta un ping a un host y entrega los resultados como salida.
ping hostLista tus procesos.
ps -u yourusernameUtilice las banderas ef, e para mostrar todos los procesos y f para una lista completa.
ps -efMuestra cual es la cuota de disco.
quota -vTransiferer archivos entre un host local y un host remoto o entre dos host remotos.
copiar de un host local a un host remoto
scp source_file user@host:directory/target_filecopiar de un host remoto a un host local
scp user@host:directory/source_file target_file
scp -r user@host:directory/source_folder target_folderEste comando tambien acepta la opcion -P que se puede utilizar para conectarse a un puerto especifico.
scp -P port user@host:directory/source_file target_filessh (cliente SSH) es un prrograma para iniciar sesion y ejecutar comandos en una maquina remota.
ssh user@hostEste comando tambien acepta la opcion -P que se puede utilizar para conectarse a un puerto especifico.
ssh -p port user@hostDespliega los procesos activos al momento.
Muestra informacion del kernel.
uname -aMuestra el tiempo que el sistema ha estado arriba.
Despliega quien esta en linea.
Descarga un archivo
wget fileRegresa el nombre del usuario que tiene la sesion.
Obtiene informacion whois para el dominio.
whois domain| kill | killall | & | nohup |
Elimina (termina) los procesos con el ID proporcionado.
kill PIDElimina todos los procesos con el nombre proporcionado
killall processnameEl simbolo & le indica al comando que se ejcuta como un proceso en background en una subshell.
command &nohup significa "No hang up" (No colgar). Esto permite ejecutarr comandos/procesos o shell scripts para que pueda continuar corriendo en background aun cuando se sale de una shell.
nohup commandCombinalo con & para crear un proceso en background.
nohup command &Las primera linea que escribiras en un archivo de bash script es llamado shebang. Esta linea en cualquier script determina la habilidad del script para ser ejecutado como un ejecutable independiente sin tener que teclear sh, bash, python, php, etcetera en la termina.
#!/usr/bin/env bashCrear variables en bash es similar a otros lenguajes. No existen los tipos de datos. Una variable en bash puede contener un numero, un caracter, una cadena de caracteres, etc. No tienes que declarar una variable, solo asignarle un valor creara la variable.
Ejemplo:
str="hola mundo"La linea anterior crea una variable str y asigna "hola mundo" a esta. El valor de la variable es obtenido añadiendo el $ al inicio de la variable.
Ejemplo:
echo $str # hola mundoComo en otros lenguajes, bash tambien tiene arreglos. Un arreglo es una variable que contiene multiples valores. No hay un limite maximo en el tamaño de un arreglo. Los arreglos en bash son base cero. El primer elemento es indexado con elemento 0.Hay varias maneras de crear arreglos en bash las cuales se muestran a continuacion.
Examples:
array[0]=val
array[1]=val
array[2]=val
array=([2]=val [0]=val [1]=val)
array=(val val val)Para mostrar el valor especifico de un indice se utiliza la siguiente sintaxis:
${array[i]} # donde i es el indiceSi no se proporciona un indice, se asume el elemento 0. Para encontrar cuandos valores hay en el arreglo utilice la siguiente sintaxis:
${#array[@]}Bash tambien tiene soporte para condiciones ternarias. Revisa algunos de los siguientes ejemplos.
${varname:-word} # if varname exists and isn't null, return its value; otherwise return word
${varname:=word} # if varname exists and isn't null, return its value; otherwise set it word and then return its value
${varname:+word} # if varname exists and isn't null, return word; otherwise return null
${varname:offset:length} # performs substring expansion. It returns the substring of $varname starting at offset and up to length charactersRevisa algunos ejemplos de sintaxis para como manipular cadenas
${variable#pattern} # si el patron corresponde al inicio del valor la variable, elimina la parte mas corta que corresponda y regresa el resto
${variable##pattern} # si el patron corresponde a el inicio del valor de la variable, elimina la parte mas larga y regresa el resto
${variable%pattern} # si el patron corresponde a el final del valor de la variable, elimina la parte mas corta y regresa el resto
${variable%%pattern} # si el patron corresponde a el final del valor de la variable, elimina la parte mas larga y regresa el resto
${variable/pattern/string} # el patron mas largo que corresponda en la variable es reemplazado por string. Solo la primera coincidencia es reemplazada.
${variable//pattern/string} # el patron mas largo que corresponda en la variable es reemplazado por string. Todas las coincidencias son reemplazadas.
${#varname} # regresa el largo del valor de la variable como un caracter de cadena Como en casi todos los lenguajes de prograrmacion, se pueden utilizar funciones para agrupar piezas de codigo de una manera mas logica o para practicar el divino arte de la recursion. Declarar una funcion solo consiste en escribir function mi_funcion { mi_codigo }. Llamar a la funcion es como llamar a cualquier otro programa, solo hay que escribir su nombre.
function nombre() {
comandos de shell
}Ejemplo:
#!/bin/bash
function hola {
echo mundo!
}
hola
function say {
echo $1
}
say "hola mundo!"Cuando ejecutas el ejemplo anterior la funcion hola enviara como salida "mundo!". Las funciones anteriores hola y say son identicas. La principal diferencia es que la funcion say. Esta funcion, imprime el primer argumento que recibe. Argumentos dentro las funciones son tratados en la misma manera que los argumentos dinamicos que se dan al script.
Las instrucciones condicionales en bash son similares a otros lenguajes de programacion. Las condiciones tienen muchas formas, como por ejemplo la forma mas basica es if expresion then instrucciones, donde instrucciones solo se ejecutan si la expresion es verdadera.
if [ expresion ]; then
se ejecutara solo si la expresion es verdadera
else
se ejecutara solo si la expresion es falsa
fiEn ocasiones, si las condiciones se vuelven confusas, se pueden escribir las mismas utilizando case statements.
case expression in
pattern1 )
statements ;;
pattern2 )
statements ;;
...
esacEjemplos de expresiones:
statement1 && statement2 # ambas condiciones son verdaderas
statement1 || statement2 # por lo menos una de las condiciones son verdaderas
str1=str2 # str1 es igual a str2
str1!=str2 # str1 no es igual a str2
str1<str2 # str1 es menor que str2
str1>str2 # str1 es mayor que str2
-n str1 # str1 no es nulo (tiene una longitud mayor que 0)
-z str1 # str1 es nulo (tiene una longitud de 0)
-a file # el archivo existe
-d file # el archivo existe y es un directorio
-e file # el archivo existe, mismo funcionamiento que -a
-f file # el archivo existe y es un archivo normal (por ejemplo, no es un directorio o un tipo de archivo especial)
-r file # se tiene permiso de lectura
-s file # el archivo existe y NO esta vacio
-w file # se tiene permiso de escritura
-x file # se tiene permisos para ejecutar el archivo o de busqueda si es un directorio
-N file # el archivo fue modificado desde la ultima lectura
-O file # eres el dueño del archivo
-G file # el ID del grupo del archivo es igual que el de tu usuario (o en alguno de tus grupos si tienes varios)
file1 -nt file2 # file1 es mas nuevo que file2
file1 -ot file2 # file1 es mas viejo que file2
-lt # menor que
-le # menor o igual que
-eq # igual
-ge # mayor o igual que
-gt # mayor que
-ne # no es igualHay tres tipos de ciclos en bash. for, while y until.
Diferentes sintaxis de for :
for x := 1 to 10 do
begin
statements
end
for name [in list]
do
statements that can use $name
done
for (( initialisation ; ending condition ; update ))
do
statements...
doneSintaxis de while :
while condition; do
statements
doneSintaxis de until :
until condition; do
statements
doneEjecutar nano ~/.bash_profile y agregar la siguiente linea:
alias dockerlogin='ssh www-data@adnan.local -p2222' # agregar tu alias en .bash_profileEjecutar nano ~/.bashrc y agregar la siguiente linea:
export hotellogs="/workspace/hotel-api/storage/logs"Ahora puedes utilizar el path guardado:
source ~/.bashrc
cd $hotellogsEsto se remonta a los dias cuando no se podia confiar en que los teclados tengan una tecla de flecha "hacia arriba", pero puede aun ser util
Para ejecutar el ultimo comando en su historia.
!!Un error comun es el olvidar utilizar sudo como prefijo de un comando que requiere privilegios parar su ejecucion. En lugarr de teclear todo el comando de nuevo, puedes usar:
sudo !!Esto cambiara mkdir somedir en sudo mkdir somedir.
Haga sus scrips de bash mas robustos ejecutando de manera regular limpieza.
function finish {
# your cleanup here. e.g. kill any forked processes
jobs -p | xargs kill
}
trap finish EXITCuando se ejecuta export FOO = BAR, la variable de ambiente solo se exporta en la shell actual y todos sus hijos, para persistirla en el futuro se puede simplemente agregar en el archivo ~/.bash_profile el comando para exportar la variable
echo export FOO=BAR >> ~/.bash_profilePuedes facilmente utilizar tus scripts creando un folder bin en tu directorio home utilizando mkdir ~/bin, de esta manera todos los scripts que se guarden en este directorio pueden ser utilizados desde cualquier directorio.
Si esto no funciona, prueba agregando el siguiente codto en tu archivo ~/.bash_profile y despues ejecuta source ~/.bash_profile.
# Configurar PATH para que incluya el directorio privado bin del usuario si existe
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fiPuedes facilmente depurar scrips de bash enviando diferentes opciones a el comando bash. Por ejemplo -n no ejecutara el comando y solo revisara errores de sintaxis. -v realiza un echo del comando antes de ejecutarlo. -x realiza un echo del comando despues de procesarlo.
ß
bash -n nombredelscript
bash -v nombredelscript
bash -x nombredelscript- Reportar problemas Como hacerlo
- Abril solicitudes de cambios con mejoras Como hacerlo
- Compartir informacion
