Newsgroup: it.comp.os.linux.iniziare
Titolo: Sostituire una stringa con un'altra in tutti i file presenti in un sistema Unix like

Salve,
 
ho una macchina di test con Debian ma parlo più in generale per i 
sistemi Unix like su cui vorrei provare a sostituire una stringa con un 
altra tipo ovunque ci sia la parola "casa" sostituirla con la parola 
"tetto".
 
Ribadisco è un test, ipotizzo questa strada partendo da /:
 
1) Rendere tutti i file visibili:
 
# find . -type f -name '.*' \
     -execdir sh -c '[ ! -e "${1#.}" ] && mv "$1" "${1#.}"' sh {} ';'
 
2) Rendere tutti i file scrivibili dando a tutti i permessi +777
 
# chmod -R 777 /
 
3) Utilizzare il comando sed che trovi e sostituisca quello che mi 
interessa ad esempio:
 
# sed -i 's/
pl...@disney.it/pi...@disney.it/gI
' /
 
Di seguito le mie fonti:
https://unix.stackexchange.com/questions/395530/unix-how-to-change-all-hidden-files-to-visible-in-a-multiple-sub-directories
 
 
https://www.cyberciti.biz/faq/how-to-use-sed-to-find-and-replace-text-in-files-in-linux-unix-shell/
 
 
https://www.theunixschool.com/2011/02/sed-replace-or-substitute-file-contents.html
 
 
Saluti.
^Bart

 # chmod -R 777 /
 
Il punto uno si può saltare ed anzi sarebbe pericoloso rendere visibili 
tutti i file e rinominare quelli con nomi uguali quindi meglio far 
girare il 777 anche sui files nascosti:
 
chmod 777 -R ./* ./.[!.]*
 
oppure da bash
 
shopt -s dotglob
 
Fonte: 
https://askubuntu.com/questions/1126651/how-to-sudo-chmod-r-777-including-hidden-files
 
 
Saluti.
^Bart

 chmod 777 -R ./* ./.[!.]*
 
Perche` farsi male?
 
Per fare quel chmod su tutti i file
si deve essere root, se si e` root
non c'e` bisogno del chmod.
 
Una possibile soluzione e`:
 
find . -type f -exec sed -i 's/pippo/pluto/g' {} \;
 
Vi sono molte altre possiblita`.
 
Chiaramente, non ha molto senso fare un sed
su *tutti* i file del sistema, inclusi i
file binari...
 
bye,
 
-- 
 
piergiorgio

 bye,
 
Saluti.
^Bart
 

> find . -type f -exec sed -i 's/pippo/pluto/g' {} \;
 
find . -type f -exec sed -i 
's/
pluto.p...@disney.it/topolino...@disney.it/g
' {} \;
 
Qualcosa di identico a questo ovvero la sosituzione di un account mail 
con un altro mi da "invalid command code" e poi scorre tutti i file di 
fatto non si blocca ma vedo la lista dei vari files e per ognuno appare 
quel messaggio...
 
Saluti.
^Bart

 Pippo o PIPPO e verranno tirati dentro anche i files nascosti?
 
Per "grep" c'e` "-i" per rendere la ricerca
case insensitive.
 
Riguardo i file nascosti non saprei, si
dovrebbe provare...
 
bye,
 
-- 
 
piergiorgio


Non saprei, o "sed" e` sbagliato oppure
la sintassi di "-exec" (il "-i" potrebbe
essere interpretato da "find"...).
 
Prova solo "sed", su un singolo file, e`
vedi cosa dice.
 
bye,
 
-- 
 
piergiorgio

 Non saprei, o "sed" e` sbagliato oppure
 
Mi sa tanto che semplicemente manca l'a capo \ dopo -i ciao
 
-- 
Yoda
 

Il 25/02/21 18:39, Yoda ha scritto:

Perdona l'ignoranza ma "l'a capo" lo si usa quando si programma e vuoi 
scrivere lo stesso codice che andrebbe sulla stessa linea su più linee o 
per i commenti, se io incollo nella console tutta la stringa perché devo 
usare l'a capo?
 
Io incollo tutto su una riga nella finestra del terminale:
 
find . -type f -exec sed -i 
's/
pluto.p...@disney.it/topolino...@disney.it/g
' {} \;
 
Saluti.
^Bart

 bye,
 
Saluti.
^Bart
 

 's/
pluto.p...@disney.it/topolino...@disney.it/g
' {} \;
 
Ho fatto ora una prova in una determinata directory dove ho creato un 
file chiamato Test.txt all'interno del quale ho inserito vari nomi ed il 
seguente comando tutto su una riga funziona:
 
gabriele@HP-2170P-DEB:~/Documenti/Test$ find 
/home/gabriele/Documenti/Test -type f -exec sed -i 's/pippo/gabriele/gI' 
{} \;
 
Ho aggiunto l'opzione I dopo la g che permette di non fermarsi al case 
sensitive quindi anche Pippo diventa gabriele.
 
Step successivo partire dalla radice sempre tutto su una riga mi dice 
"sed: impossibile aprire il file temporaneo /sys/devices... permesso 
negato" magari facendolo lavorare andrà oltre ciò che è bloccato e 
arriverà ai file "giusti"! :)
 
root@HP-2170P-DEB:~# find / -type f -exec sed -i 's/pippo/gabriele/gI' {} \;
 
Step finale rendere il file invisibile e vedere se me lo cambia.
 
gabriele@HP-2170P-DEB:~/Documenti/Test$ find 
/home/gabriele/Documenti/Test -type f -exec sed -i 's/pippo/gabriele/gI' 
{} \;
 
Confermo, senza specificare altro con lo stesso comando con cui mi 
cambia i file visibili mi cambia anche gli invisibili.
 
Saluti!
^Bart

 # chmod -R 777 / 
 
non gli stai rendendo scrivibili, li stai rendendo anche eseguibili. inoltre non stai operando solo sui file ma anche sulle directory. 
posto che se su linux i permessi sono assegnabili per user, group e others ci sarà un motivo, ancora non capisco il senso del test. se qualche incauto lanciasse il comando come l'hai scritto sputtanerebbe anche la madonna. 
 
 

 girare il 777 anche sui files nascosti: 
 
toglimi una curiosità: stai scrivendo un manuale di sabotaggio? ;-)

 's/
pluto.p...@disney.it/topolino...@disney.it/g
' {} \;
 
Se usi GNU find (come è probabile):
 
find . -type f -exec sed -i
's/pluto\.paperino\@disney\.it/
topolino...@disney.it/g
' '{}' \+
 
 
 
 
 

> toglimi una curiosità: stai scrivendo un manuale di sabotaggio? ;-)
 
Quasi! :)
 
Ho voluto provare, fare un test, una pazzia, stupidaggine, etc. su una 
macchina con un sistema operativo unix like (Catalina) nel sostituire 
l'email legata all'ID Apple con un'altra mail legata ad un altro ID 
Apple e vedere se quando il s.o. mi chiedeva le credenziali dell'ID mi 
mostrasse quello "originale" o quello "sostituito".
 
Anche se fossi riuscito nell'intento le credenziali inserite avrebbero 
comunque richiesto il match con il server Apple e quindi quest'ultimo 
non avrebbe permesso di sbloccare un sistema con S/N 12345 registrato 
con l'email 
pi...@disney.it
 se lo stesso si fosse loggato con l'email 
pape...@disney.iy
 
Sicuramente tali file di configurazione non sono in chiaro e sarebbe 
davvero risibile se lo fossero, magari tali dati sono all'interno di 
qualche db crittografato ma volevo capire quanto un eventuale 
malintenzionato potesse agire su quel sistema partendo dal fatto di 
essere root ma di NON conoscere le credenziali dell'ID Apple.
 
Oppure capire se si potesse "eliminare" l'ID Apple andando a disattivare 
dei demoni, cancellare directory, etc. alla fin fine se si è root di una 
macchina, sapendo dove andare a mettere le mani, si può fare tutto.
 
Dovevo comunque fare un factory reset per poi installare Big Sur quindi 
alla fine anche in caso di "danni" avrei finito con il reinstallare tutto.
 
Saluti.
^Bart
 

 mostrasse quello "originale" o quello "sostituito". 
 
va bene, per carità. ma mi spieghi cosa diamine c'azzecca con questo rinominare tutti i file nascosti e mettere i permessi 777 a tutti i file e directory?

 essere root ma di NON conoscere le credenziali dell'ID Apple.
 
Principiante... :-)
 
Se uno e` root, sostituisce il comando "login"
(e tutti quelli necessari), con altri che
"catturano" le credenziali e le salvano da
qualche parte o le mandano a qualcuno.
 
bye,
 
-- 
 
piergiorgio

 bye,
 
Saluti.
^Bart