Diferencia entre revisiones de «Comandos del shell»

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda
 
(No se muestran 23 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
En aquest article estan les ordres bàsiques que cal controlar abans de posar-se a fer scripts.
A banda d'aquests, cal utilitzar el [[Grep]], [[awk]] i [[Sed]]. I es recomana llegit [[Comandos interesantes]]
No estan totes les opcions, per veure tot el que poden fer, executa el manual en línia amb man <comanda>
[[Exercicis resolts del shell de Linux]]
== Comm ==
Aquest comandament compara dos fitxers ordenats.
El resultat és una eixida en 3 columnes. La primera columna conté les línies úniques al primer fitxer, la segona les úniques al segon i la tercera les comuns. Es poden eliminar columnes amb -1, -2 i -3.
Per tant, les següents combinacions amb fitxers A i B són:
* '''comm -1 A B''' : B
* '''comm -2 A B''' : A
* '''comm -3 A B''' : AΔB (Diferencia simètrica)
* '''comm -12 A B''': A∩B (Intersecció)
* '''comm -13 A B''': B-A (Diferència de conjunts)
* '''comm -23 A B''': A-B (Diferència de conjunts)
== Cut ==
== Cut ==


Sirve para cortar las líneas según un criterio.  
Serveix per tallar les línies segons un criteri .


===Opciones===
=== Opcions ===


* -c Corta por caracteres, se puede establecer un principio y un final.
* -c talla per caràcters , es pot establir un principi i un final .
* -f Corta por columnas. El delimitar de las columnas se pone con -d
* -f talla per columnes . El delimitar de les columnes es posa amb -d


Las columnas se especifican separadas con comas (no puede reordenar), Se puede especificar un nargo poniendo N-M o -N o N- para decir que queremos desde el principio hasta N o desde N hasta el final.
Les columnes s'especifiquen separades amb comes (no pot reordenar), es pot especificar un rang posant NM o -N o N - per dir que volem des del principi fins a N o des de N fins al final .


=== Ejemplos ===
=== Exemples ===


  $ cut -d: -f1,3 /etc/passwd                
  $ cut -d: -f1,3 /etc/passwd




Mostra la hora actual:
Mostra l'hora actual :
  $ date | cut -c12-19
  $ date | cut -c12-19


Obtener la MAC
Obtenir la MAC
   
   
  $ ifconfig eth0 | grep HWaddr | cut -d “ “ -f 11
  $ ifconfig eth0 | grep HWaddr | cut -d"" -f11


Dar formato a un teléfono:
Donar format a un telèfon :
  $ echo '950000000' | cut --output-delimiter "-" -c1-2,3-5,6-
  $ echo '950000000' | cut --output-delimiter "-" -c1-2,3-5,6-


== head y tail ==
== Head i tail ==


Comandos para ver, respectivamente, el principio y el final de ficheros.
Ordres per veure , respectivament , el principi i el final de fitxers .


Se puede definir la cantidad de líneas que se quieren ver.
Es pot definir la quantitat de línies que es volen veure .


=== Ejemplos ===
=== Exemples ===


  $ (head -5; tail -5) < datos
  $ (head -5 ; tail -5) < dades


Comando para ver las primeras 5 líneas y las últimas 5 líneas de un fichero. El () sirve para agrupar los dos comandos y que acepten la misma entrada estándar.
Ordre per veure les primeres 5 línies i les últimes 5 línies d'un fitxer . El ( ) serveix per agrupar els dos comandaments i que acceptin la mateixa entrada estàndard .


== paste ==
== nl ==


(Ver también [[#Cut|cut]])
Aquest comandament sense arguments mostra les línies d'un fitxer, de manera similar al '''cat -n''', però no numera les que no tenen res escrit:


Paste sirve para unir varios ficheros pero en distintas columnas de la salida.
$ nl AnalogReadSerial.ino
    1 /*
    2   AnalogReadSerial
      ....


Por ejemplo, tenemos los ficheros:
Amb -b podem indicar una expressió regular que indica les línies que sí són numerades:


  ==> datos1 <==  
$ nl -b 'pA' AnalogReadSerial.ino
      /*
    1   AnalogReadSerial
 
== Paste ==
 
( Veure també [ [ # Cut | cut ] ] )
 
Paste serveix per unir diversos fitxers però en diferents columnes de la sortida .
 
=== Exemples ===
 
Per exemple , tenim els fitxers:
 
  == > dades1 < ==
  1
  1
  2
  2
  3
  3


  ==> datos2 <==
  == > dades2 < ==
  a
  a
  b
  b
  c
  c


  ==> datos3 <==
  == > dades3 < ==
  *
  *
  **
  **
  ***
  ***


Usamos el paste para verlos en columnas:
Fem servir el paste per veure'ls en columnes :
 
$ Paste dades*
1 a *
2b **
3.c ***
 
== seq ==
 
Serveix per a obtindre una seqüencia numèrica.
$ seq 1 10
 
En general, es recomana utilitzar l'expansió de claus per a fer el comandament anterior:
$ echo {1..10}
Ja que no executa un altre procés i és més ràpid al ser natiu de bash. No obstant seq permet més opcions com establir l'interval:
$ seq 1 2 100
Aquest trau els parells.
 
També permet treballar en decimals:
$ seq .5 .25 3.25
 
== Sort ==
 
El comandament '''sort''' ordena el que li entra per la entrada estàndard. Si no especifiquem res, ordena alfabèticament. Però accepta opcions com:
* '''-n''': Ordenar numèricament.
* '''-r''': Ordenar inversament.
* '''-R''': Ordenar de forma aleatòria.
 
Altres opcions són més sofisticades, com la '''-k''' en la que pots indicar la columna per la qual vols ordenar. Això combinat amb '''-t''' per indicar el delimitador, permet ordenacions tan complexes com la següent, en la que s'ordena numèricament una llista d'IPs:
$ cat ips.txt | sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4
 
== Tr ==
 
Tradueix caràcters o els esborra.
Agafa els caràcters de l'entrada i els tradueix en funció dels paràmetres .
 
Cal tenir en compte que tr treballa amb la taula d'ASCII, de manera que podem establir un rang entre els caràcters a traduir :
 
$ echo " Hola" | tr 'a-z' 'A-Z'
 
Per passar a majúscules o:
 
$ echo "Missatge" | tr '\!-~' 'P-~\!-O'
 
Per xifrar segons el xifrat César tots els caràcters imprimibles del missatge amb un desplaçament de 47 . Per això tradueix de ! a ~ ( tots els caràcters imprimibles de ASCII ) pel rang de P a ~ seguit del rang de ! a O. És l'anomenat ROT47 , que és una extensió del famós [ http://es.wikipedia.org/wiki/ROT13 ROT13 ]
 
=== Opcions ===
* -c Treu el complement dels caràcters seleccionats.
* -d Esborra els caràcters seleccionats
* -s Esborra repetits. Aquest és molt útil per evitar dobles espais o errors de sintaxi.
 
=== Exemples ===
Obtenir lletres aleatòries en minúscules
$ head /dev/urandom | tr -dc "a-z"
En aquest exemple , esborra amb -d tots el que no sigui de az en posar el -c del complement .
 
A partir de l'exemple anterior es pot obtenir un generador d'adreces [ [ MAC ] ] :
 
$ head /dev/urandom | tr - dc "A-F0-9" | head -c 16 | cut --output-delimiter ":" -c1-2,3-4,5-6,7-8,9-10,11-12
 
S'obtenen lletres A a F i números de 0 a 9, és a dir , els símbols del [ [ hexadecimal ] ] . Després es divideixen en grups de 2 , separats per ":"
 
 
== uniq ==
 
D'una llista prèviament ordenada, trau els elements sense repetir.


  $ paste datos*
  $ echo -e "1\n2\n3\n3\n3" | uniq
1 a *
2 b **
3 c ***


== tr ==
=== Opcions ===


Traduce caracteres o los borra.
* -c Trau la quantitat de repreticions dels elements.
Coge los caracteres de la entrada y los traduce en función de los parámetros.
* -d imprimix sols les línies duplicades.
* -u imprimix sols les línies úniques.


Hay que tener en cuenta que tr trabaja con la tabla de ASCII, por lo que podemos establecer un rango entre los caracteres a traducir:


$ echo "Hola" | tr 'a-z' 'A-Z'
== fold ==


Para pasar a mayúsculas o:
A partir d'una entrada, retalla les línies per tindre una eixida de, com a màxim, uns caracters.


  $ echo "Mensaje" | tr '\!-~' 'P-~\!-O'
  $ cat /dev/urandom | tr -dc ' -~' | fold -w12


Para cifrar según el cifrado Cesar todos los caracteres imprimibles del mensaje con un desplazamiento de 47. Por eso traduce de ! a ~ (todos los caracteres imprimibles de ASCII) por el rango de P a ~ seguido del rango de ! a O.


=== Opciones ===
= Enllaços =
* -c Saca el complemento de los caracteres seleccionados.
* -d Borra los caracteres seleccionados
* -s Borra repetidos. Este es muy útil para evitar dobles espacios o errores de sintaxis.


=== Ejemplos ===
* http://linuxcommand.org/man_pages/declare1.html
Obtener letras aleatorias en minúsculas
* https://github.com/dbohdan/structured-text-tools
$ head /dev/urandom | tr -dc "a-z"
En este ejemplo, borra con -d todos lo que no sea de a-z al poner el -c del complemento.

Revisión actual - 17:33 20 ene 2021

En aquest article estan les ordres bàsiques que cal controlar abans de posar-se a fer scripts.

A banda d'aquests, cal utilitzar el Grep, awk i Sed. I es recomana llegit Comandos interesantes

No estan totes les opcions, per veure tot el que poden fer, executa el manual en línia amb man <comanda>

Exercicis resolts del shell de Linux

Comm

Aquest comandament compara dos fitxers ordenats.

El resultat és una eixida en 3 columnes. La primera columna conté les línies úniques al primer fitxer, la segona les úniques al segon i la tercera les comuns. Es poden eliminar columnes amb -1, -2 i -3.

Per tant, les següents combinacions amb fitxers A i B són:

  • comm -1 A B : B
  • comm -2 A B : A
  • comm -3 A B : AΔB (Diferencia simètrica)
  • comm -12 A B: A∩B (Intersecció)
  • comm -13 A B: B-A (Diferència de conjunts)
  • comm -23 A B: A-B (Diferència de conjunts)

Cut

Serveix per tallar les línies segons un criteri .

Opcions

  • -c talla per caràcters , es pot establir un principi i un final .
  • -f talla per columnes . El delimitar de les columnes es posa amb -d

Les columnes s'especifiquen separades amb comes (no pot reordenar), es pot especificar un rang posant NM o -N o N - per dir que volem des del principi fins a N o des de N fins al final .

Exemples

$ cut -d: -f1,3 /etc/passwd


Mostra l'hora actual :

$ date | cut -c12-19

Obtenir la MAC

$ ifconfig eth0 | grep HWaddr | cut -d"" -f11

Donar format a un telèfon :

$ echo '950000000' | cut --output-delimiter "-" -c1-2,3-5,6-

Head i tail

Ordres per veure , respectivament , el principi i el final de fitxers .

Es pot definir la quantitat de línies que es volen veure .

Exemples

$ (head -5 ; tail -5) < dades

Ordre per veure les primeres 5 línies i les últimes 5 línies d'un fitxer . El ( ) serveix per agrupar els dos comandaments i que acceptin la mateixa entrada estàndard .

nl

Aquest comandament sense arguments mostra les línies d'un fitxer, de manera similar al cat -n, però no numera les que no tenen res escrit:

$ nl AnalogReadSerial.ino 
    1	/*
    2	  AnalogReadSerial
     ....

Amb -b podem indicar una expressió regular que indica les línies que sí són numerades:

$ nl -b 'pA' AnalogReadSerial.ino
      /*
    1	  AnalogReadSerial

Paste

( Veure també [ [ # Cut | cut ] ] )

Paste serveix per unir diversos fitxers però en diferents columnes de la sortida .

Exemples

Per exemple , tenim els fitxers:

== > dades1 < ==
1
2
3
== > dades2 < ==
a
b
c
== > dades3 < ==
*
**
***

Fem servir el paste per veure'ls en columnes :

$ Paste dades*
1 a *
2b **
3.c ***

seq

Serveix per a obtindre una seqüencia numèrica.

$ seq 1 10

En general, es recomana utilitzar l'expansió de claus per a fer el comandament anterior:

$ echo {1..10}

Ja que no executa un altre procés i és més ràpid al ser natiu de bash. No obstant seq permet més opcions com establir l'interval:

$ seq 1 2 100 

Aquest trau els parells.

També permet treballar en decimals:

$ seq .5 .25 3.25

Sort

El comandament sort ordena el que li entra per la entrada estàndard. Si no especifiquem res, ordena alfabèticament. Però accepta opcions com:

  • -n: Ordenar numèricament.
  • -r: Ordenar inversament.
  • -R: Ordenar de forma aleatòria.

Altres opcions són més sofisticades, com la -k en la que pots indicar la columna per la qual vols ordenar. Això combinat amb -t per indicar el delimitador, permet ordenacions tan complexes com la següent, en la que s'ordena numèricament una llista d'IPs:

$ cat ips.txt | sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4

Tr

Tradueix caràcters o els esborra. Agafa els caràcters de l'entrada i els tradueix en funció dels paràmetres .

Cal tenir en compte que tr treballa amb la taula d'ASCII, de manera que podem establir un rang entre els caràcters a traduir :

$ echo " Hola" | tr 'a-z' 'A-Z'

Per passar a majúscules o:

$ echo "Missatge" | tr '\!-~' 'P-~\!-O'

Per xifrar segons el xifrat César tots els caràcters imprimibles del missatge amb un desplaçament de 47 . Per això tradueix de ! a ~ ( tots els caràcters imprimibles de ASCII ) pel rang de P a ~ seguit del rang de ! a O. És l'anomenat ROT47 , que és una extensió del famós [ http://es.wikipedia.org/wiki/ROT13 ROT13 ]

Opcions

  • -c Treu el complement dels caràcters seleccionats.
  • -d Esborra els caràcters seleccionats
  • -s Esborra repetits. Aquest és molt útil per evitar dobles espais o errors de sintaxi.

Exemples

Obtenir lletres aleatòries en minúscules

$ head /dev/urandom | tr -dc "a-z"

En aquest exemple , esborra amb -d tots el que no sigui de az en posar el -c del complement .

A partir de l'exemple anterior es pot obtenir un generador d'adreces [ [ MAC ] ] :

$ head /dev/urandom | tr - dc "A-F0-9" | head -c 16 | cut --output-delimiter ":" -c1-2,3-4,5-6,7-8,9-10,11-12

S'obtenen lletres A a F i números de 0 a 9, és a dir , els símbols del [ [ hexadecimal ] ] . Després es divideixen en grups de 2 , separats per ":"


uniq

D'una llista prèviament ordenada, trau els elements sense repetir.

$ echo -e "1\n2\n3\n3\n3" | uniq

Opcions

  • -c Trau la quantitat de repreticions dels elements.
  • -d imprimix sols les línies duplicades.
  • -u imprimix sols les línies úniques.


fold

A partir d'una entrada, retalla les línies per tindre una eixida de, com a màxim, uns caracters.

$ cat /dev/urandom | tr -dc ' -~' | fold -w12


Enllaços