Puncte:2

Conducte Shell

drapel ng

Încerc să înțeleg această linie Shell:

grep ^x06 ssh_known_hosts |
ssh-keygen -l -f -| 
\sed -e 's/^.*\(SHA256:\S\+\).*(\([^)]\+\))/\2: \1/' >fp
  • Deci cu grep practic căutăm datele ssh_unknown_hosts. Ce este ^x06 folosit pentru?
  • Cu ssh-keygen comanda cu care generăm o cheie SSH -l. Care este -f folosit pentru?
  • Ultima linie nu am primit-o.
Puncte:5
drapel cn
raj

grep caută fișierul ssh_known_hosts pentru linia (sau liniile) care încep cu x06 (^ indică un început de rând în a expresie uzuala) și îl emite.

Din om ssh-keygen:

 ssh-keygen -l [-f input_keyfile]

[...]

 -l Afișează amprenta fișierului cheie publică specificat. Chei private RSA1
         sunt de asemenea suportate. Pentru cheile RSA și DSA, ssh-keygen încearcă
         găsiți fișierul cheie publică care se potrivește și imprimă amprenta. Dacă
         combinat cu -v, o reprezentare artistică ASCII a cheii este sup…
         pliat cu amprenta.

Asa de ssh-keygen -l -f - citește cheia de la intrarea standard (adică din linia care a fost scoasă de grep) și își scoate amprenta digitală (- folosit ca nume de fișier indică intrarea standard).

The sed partea este cea mai dificilă. Trebuie să înțelegeți bine expresiile regulate pentru a înțelege ce face.

sed rulează comanda s/model/înlocuire/ pe fiecare linie de intrare, adică înlocuiește model cu înlocuire și copiază linia la ieșirea standard. Dacă model nu se găsește în linie, linia este copiată neschimbată.

The model sed cauta este: ^.*\(SHA256:\S\+\).*(\([^)]\+\)). Este o expresie regulată, desigur.

Poate fi defalcat astfel:

  • începutul rândului (^), urmat de zero sau mai multe caractere (.*), urmat de primul grup (partea dintre \( ... \); ajungem la detalii mai târziu), urmat de zero sau mai multe caractere (.*), urmat de al doilea grup, care este cuprins între paranteze literale (\( ... \)).

  • Primul grup este SHA256:\S\+. Aceasta înseamnă un șir literal SHA256:, urmat de unul sau mai multe caractere fără spații (\S\+) - cu toate acestea, trebuie menționat că nu toate sed implementările vor sprijini \S ca o indicație a caracterului non-spațial. Deci primele meciuri din grupă SHA256: urmat de orice caractere, până la primul spațiu.

  • Al doilea grup este [^)]\+, adică unul sau mai multe caractere care nu sunt egale cu paranteza de închidere. Ținând cont de faptul că întregul grup este pus în paranteză, al doilea grup se potrivește cu orice șir plasat între paranteze, până la paranteza de închidere.

Rezumând, sed caută în linie un model format din SHA256: plus orice caractere non-spațiu, și apoi orice șir plasat în paranteze, cu orice între ele.

Modelul potrivit este înlocuit cu \2: \1 care este textul care se potrivește celui de-al doilea grup (\2), două puncte, spațiu și textul care se potrivește cu primul grup (\1).

De exemplu, dacă ssh-keygen ieșirea conține o linie ca

începe ceva SHA256:123456 mijloc ceva (text în interiorul părintelui) termina ceva

sed va înlocui acea linie cu

text în interiorul părintelui: SHA256:123456 termina ceva

Liniile care nu conțin modelul nu vor fi modificate.

drapel ng
Hei, foarte amabil din partea că m-ai ajutat, am înțeles majoritatea, dar mă întreb ce face redirecționarea Input Output a shell-ului și a conductelor
drapel ng
Unde salvează computerul fișierele?
raj avatar
drapel cn
raj
@Sparta Ce fișiere? În acest cod, `ssh_known_hosts` este fișierul de intrare și `fp` este fișierul de ieșire în care este scrisă rezultatul final de la `sed`. Deoarece nu există nicio cale specificată, ambele fișiere se află în directorul curent.
drapel ng
Hei, mulțumesc pentru ajutor băieți, apreciez foarte mult

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.