[bash] verifica e inserimento stringa in un file

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
piccolotauro2
Prode Principiante
Messaggi: 40
Iscrizione: martedì 13 maggio 2014, 11:52

[bash] verifica e inserimento stringa in un file

Messaggio da piccolotauro2 »

Ciao a tutti,
è la prima volta che scrivo nel forum ed ho proprio bisogno di aiuto.
Deco realizzare uno script bash che verifichi se all'interno di un file c'è una stringa e in caso contrario la inserisca.
Nello specifico devo verificare che:
nel file /conf/context.xml sia presente la seguente direttiva:
<Manager ... randomClass="java.security.SecureRandom" />

potreste darmi qualche dritta su come automatizzare questo?nel senso ciò che dovrei fare è:
1-cercare il file con percorso /conf/context.xml
2-scorrerlo
3-trovare <Manager
4-vedere se al suo interno c'è randomClass="java.security.SecureRandom" />
5-se non c'è inserirla nel file
6-salvare il file

spero tanto in un vostro aiuto
grazie mille
1001001
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1506
Iscrizione: mercoledì 22 dicembre 2010, 18:09
Desktop: Unity
Distribuzione: Ubuntu 14.04.1 LTS 64bit
Località: Verona

Re: [bash] verifica e inserimento stringa in un file

Messaggio da 1001001 »

Ciao! Due domande:
1)
piccolotauro2 ha scritto:4-vedere se al suo interno c'è randomClass="java.security.SecureRandom" />
questa stringa è sempre sulla stessa riga di <Manager o può anche essere in righe successive? E se può essere in righe successive, c'è un limite massimo di righe da guardare o bisogna andare fino alla fine del file/fino a un certo carattere delimitatore?

2)
piccolotauro2 ha scritto:5-se non c'è inserirla nel file
dove? All'inizio, alla fine, in mezzo, a un numero di riga particolare?
"I find your lack of faith disturbing."
piccolotauro2
Prode Principiante
Messaggi: 40
Iscrizione: martedì 13 maggio 2014, 11:52

Re: [bash] verifica e inserimento stringa in un file

Messaggio da piccolotauro2 »

Innanzitutto grazie infinite per la risp
Allora:
Ciao! Due domande:

La stringa non è sempre sulla stessa riga di <Manager e può anche essere in righe successivese, potrebbero anche essere due elementi manager e in questo caso andrebbe aggiunta la scritta in ognuno di questi per cui il file andrebbe fatto scorrere tutto


2dove? All'inizio, alla fine, in mezzo, a un numero di riga particolare?
Andrebbe bene anche nella riga sotto all'elemento manager

Spero tu mi possa aiutare e davvero grazie
piccolotauro2
Prode Principiante
Messaggi: 40
Iscrizione: martedì 13 maggio 2014, 11:52

Re: [bash] verifica e inserimento stringa in un file

Messaggio da piccolotauro2 »

help me please:(
1001001
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1506
Iscrizione: mercoledì 22 dicembre 2010, 18:09
Desktop: Unity
Distribuzione: Ubuntu 14.04.1 LTS 64bit
Località: Verona

Re: [bash] verifica e inserimento stringa in un file

Messaggio da 1001001 »

Scusa, non sono sicuro di avere capito bene come devono essere apportate le modifiche.. potresti postare un (corto) file di esempio in cui mostri il contenuto del file prima e dopo aver effettuato l'inserimento, in modo da vedere tutti i possibili casi?
"I find your lack of faith disturbing."
piccolotauro2
Prode Principiante
Messaggi: 40
Iscrizione: martedì 13 maggio 2014, 11:52

Re: [bash] verifica e inserimento stringa in un file

Messaggio da piccolotauro2 »

Il file è abbastanza lungo ed è un XML quindi lo script dovrebbe verificare se c'è la stringa ed eventualmente inserirla come attributo
1001001
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1506
Iscrizione: mercoledì 22 dicembre 2010, 18:09
Desktop: Unity
Distribuzione: Ubuntu 14.04.1 LTS 64bit
Località: Verona

Re: [bash] verifica e inserimento stringa in un file

Messaggio da 1001001 »

Non sono sparito eh, ci sto pensando...ma bash non mi sembra lo strumento più adatto per farlo, sinceramente...deve proprio essere bash o può essere anche qualcos'altro?
piccolotauro2 ha scritto:Il file è abbastanza lungo ed è un XML quindi lo script dovrebbe verificare se c'è la stringa ed eventualmente inserirla come attributo
Per questo dicevo di postare un file corto :) se è lungo, taglialo e posta solo la parte che mostra un esempio di quello che vorresti fare...
"I find your lack of faith disturbing."
piccolotauro2
Prode Principiante
Messaggi: 40
Iscrizione: martedì 13 maggio 2014, 11:52

Re: [bash] verifica e inserimento stringa in un file

Messaggio da piccolotauro2 »

purtroppo se si può fare (e dicono si possa fare) lo devo fare con bash.
allora immagina il file context.xml così:
............
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
<Manager ... />

...........
che dovrebbe fare lo script:
scorrere tutto il file xml, una volta trovato <Manager verificare che non ci sia randomClass="java.security.SecureRandom" /> e nel caso non ci sia inserirlo,
per avere una cosa del genere:

....................
<Manager
randomClass="java.security.SecureRandom" />

forse la cosa migliore sarebbe:
1-cercare randomClass="java.security.SecureRandom" />
2- se non c'è cercare <Manager e se c'è inserire nella riga sotto

tra l'altro più scrivo e più dubbi mi vengono...perche in realtà potrebbe non esserci neanche <Manager e toccherebbe inserire pure quello
che casino:(
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [bash] verifica e inserimento stringa in un file

Messaggio da vaeVictis »

Certo che si può fare.
Con "lo devo fare con bash" intendi che puoi o che non puoi usare strumenti (bash) tipo awk, sed e compagnia bella?

Per il resto del messaggio, un paio di chiarimenti.
1) Tu devi sempre e solo controllare la presenza della stringa che inizia con (per separare il codice dal resto del messaggio, usa l'apposito tag dell'editor del forum)

Codice: Seleziona tutto

<Manager
o devi poter controllare la presenza di una stringa che inizi con la apertura di un generico tag che magari vuoi passare al comando, onde avere il tutto più generico?
2) Stessa domanda per la stringa che devi eventualmente inserire. Immagino non sia sempre

Codice: Seleziona tutto

 randomClass="java.security.SecureRandom" />
... in cui presumo che il token di chiusura del tag magari non lo inserisci, nel caso in cui ci sia già il tag di apertura (e quindi presumo già anche quello di chiusura).
3) Qualora non trovassi la riga cercata e la dovessi inserire, ti interessa una particolare posizione (sia per siga sia per riferimento a qualche tag che venga prima o dopo la riga in cui viene scritta l'apertura dal tuo comando)?
Se ti interessa, si può impostare, ma il programma deve rileggere il file e quindi rallenta.
Se non ti interessa la metti direttamente alla fine del file.

Infine, tornando all'uso di bash... ma l'uso di qualche libreria per il parsing xml?
No?
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
tomm
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 796
Iscrizione: lunedì 15 ottobre 2007, 10:16
Desktop: Gnome
Distribuzione: Ubuntu 16.04

Re: [bash] verifica e inserimento stringa in un file

Messaggio da tomm »

ti consiglio di usare xmlstarlet.
Ad esempio, con questo comando puoi verificare la presenza dell'attributo randomClass nell'elemento /Context/Manager:

Codice: Seleziona tutto

xmlstarlet sel -t -m "/Context/Manager" -v "@randomClass" conf/context.xml
piccolotauro2
Prode Principiante
Messaggi: 40
Iscrizione: martedì 13 maggio 2014, 11:52

Re: [bash] verifica e inserimento stringa in un file

Messaggio da piccolotauro2 »

Grazie a tutti per l'aiuto...
1) Tu devi sempre e solo controllare la presenza della stringa che inizia con (per separare il codice dal resto del messaggio, usa l'apposito tag dell'editor del forum)
Codice: Seleziona tutto
<Manager
o devi poter controllare la presenza di una stringa che inizi con la apertura di un generico tag che magari vuoi passare al comando, onde avere il tutto più generico?

non ho ben capito la domanda comunque devo verificare che ci sia l'attributo <Manager se c'è devo verificare se c'è randomClass e se non c'è inserirlo...potrebbe anche non esserci <Manager e quindi dovrei inserire sia <Manager che random class.Potrebbero anche esserci due o tre <Manager e quindi dovrei inserire random class per ogni <Manager
2) Stessa domanda per la stringa che devi eventualmente inserire. Immagino non sia sempre
Codice: Seleziona tutto
randomClass="java.security.SecureRandom" />

... in cui presumo che il token di chiusura del tag magari non lo inserisci, nel caso in cui ci sia già il tag di apertura (e quindi presumo già anche quello di chiusura).
esattamente il tag di chiusura si dovrebbe verificare se c'è gia.
3) Qualora non trovassi la riga cercata e la dovessi inserire, ti interessa una particolare posizione (sia per siga sia per riferimento a qualche tag che venga prima o dopo la riga in cui viene scritta l'apertura dal tuo comando)?
Se ti interessa, si può impostare, ma il programma deve rileggere il file e quindi rallenta.
Se non ti interessa la metti direttamente alla fine del file.

puo anche essere messa alla fine l'importante è che si rispetti la sintassi del file xml

Infine, tornando all'uso di bash... ma l'uso di qualche libreria per il parsing xml?
No?

si potrebbe usare anche il parse se semplifica le cose...tu che dici?
piccolotauro2
Prode Principiante
Messaggi: 40
Iscrizione: martedì 13 maggio 2014, 11:52

Re: [bash] verifica e inserimento stringa in un file

Messaggio da piccolotauro2 »

tomm [url=http://forum.ubuntu-it.org/viewtopic.php?p=4582316#p4582316][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:ti consiglio di usare xmlstarlet.
Ad esempio, con questo comando puoi verificare la presenza dell'attributo randomClass nell'elemento /Context/Manager:

Codice: Seleziona tutto

xmlstarlet sel -t -m "/Context/Manager" -v "@randomClass" conf/context.xml
nel mio caso l'elemento è solo Manager quindi /Context/Manger andrebbe sostituito con solo /Manager giusto?
Avatar utente
tomm
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 796
Iscrizione: lunedì 15 ottobre 2007, 10:16
Desktop: Gnome
Distribuzione: Ubuntu 16.04

Re: [bash] verifica e inserimento stringa in un file

Messaggio da tomm »

si certo, ma quindi non si tratta del conf/context.xml di apache tomcat?
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [bash] verifica e inserimento stringa in un file

Messaggio da vaeVictis »

Il parser semplifica, altrimenti non avrebbero scritto i parser :)
Detto questo, ti lascio alle cure di tomm, che di sicuro conosce l'argomento meglio di me.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
piccolotauro2
Prode Principiante
Messaggi: 40
Iscrizione: martedì 13 maggio 2014, 11:52

Re: [bash] verifica e inserimento stringa in un file

Messaggio da piccolotauro2 »

si si si tratta del /conf/context.xml di apache tomcat....
piccolotauro2
Prode Principiante
Messaggi: 40
Iscrizione: martedì 13 maggio 2014, 11:52

Re: [bash] verifica e inserimento stringa in un file

Messaggio da piccolotauro2 »

in pratica io dovrei realizzare degli script di hardening per tomcat....e molte di queste regole prevedono la modifica/integrazione del file context.xml e server.xml
piccolotauro2
Prode Principiante
Messaggi: 40
Iscrizione: martedì 13 maggio 2014, 11:52

Re: [bash] verifica e inserimento stringa in un file

Messaggio da piccolotauro2 »

confido in tuo aiuto....molti controlli sono simili...se riuscissi a fare questo gli altri si potrebbero più o meno adattare.....
grazie mille
Avatar utente
tomm
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 796
Iscrizione: lunedì 15 ottobre 2007, 10:16
Desktop: Gnome
Distribuzione: Ubuntu 16.04

Re: [bash] verifica e inserimento stringa in un file

Messaggio da tomm »

allora il percorso esatto dovrebbe essere proprio /Context/Manager perché devi tenere conto anche del nodo principale
http://svn.apache.org/repos/asf/tomcat/ ... ontext.xml

Con questo comando puoi inserire il nodo Manager con l'attributo randomClass:

Codice: Seleziona tutto

xmlstarlet ed -s /Context -t elem -n Manager -v "" -i /Context/Manager -t attr -n randomClass -v java.security.SecureRandom conf/context.xml
piccolotauro2
Prode Principiante
Messaggi: 40
Iscrizione: martedì 13 maggio 2014, 11:52

Re: [bash] verifica e inserimento stringa in un file

Messaggio da piccolotauro2 »

ma xmlstarlet prevede qualche libreria?perche lanciandolo da linea di comando mi da comando non presente...
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [bash] verifica e inserimento stringa in un file

Messaggio da vaeVictis »

Ti suggerisce anche come installarlo

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~$ xmlstarlet
Il programma "xmlstarlet" non è attualmente installato. È possibile installarlo digitando:
sudo apt-get install xmlstarlet
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti