Uważaj na pomoc.

Mam jedną listę „A” z

netstat -ntlp | grep -oP ":[:1]?[:1]?(.*)+" | grep -oP "\d\d+"

To wygląda jak

80
443
8080
22
25

Mam kolejną listę „B” z

ufw status numbered | grep -oP "\] \d+" | grep -oP "\d+"

Wygląda jak

80
443
22

Chcę więc wiedzieć, które porty nasłuchują, ale nie otwierają się za pomocą ufw, tj. Odjąć [„A”] - [„B”] i zobaczyć

8080
25

Z jakimś poleceniem, takim jak

netstat -ntlp | grep -oP ":[:1]?[:1]?(.*)+" | grep -oP "\d\d+" | SELECT ALL NOT IN `ufw status numbered | grep -oP "\] \d+" | grep -oP "\d+"`

Jak to zrobić?

2
Master 2 kwiecień 2020, 13:54

4 odpowiedzi

Najlepsza odpowiedź

Zwykle jest to praca comm:

netstat -ntlp | grep -oP ":[:1]?[:1]?(.*)+" | grep -oP "\d\d+" |
sort | comm -23 - <(ufw status numbered | grep -oP "\] \d+" | grep -oP "\d+" | sort)
3
KamilCuk 2 kwiecień 2020, 11:12

Możesz użyć grep:

grep -vxFf <(cmd2) <(cmd1)

Tutaj zamień cmd1 na netstat ... polecenie i zamień cmd2 na ufw ... polecenie.

3
anubhava 2 kwiecień 2020, 11:09

To rozwiązanie wymaga wstępnego sortowania wyjść:

$ netstat -ntlp | grep -oP ":[:1]?[:1]?(.*)+" | grep -oP "\d\d+" | sort > A
                                                                 ^^^^^^
$ ufw status numbered | grep -oP "\] \d+" | grep -oP "\d+" | sort > B
                                                           ^^^^^^

Elementy unikalne dla A:

$ comm -23 A B
25
8080
$ 

... ale także, jeśli potrzebujesz, przedmioty unikalne dla B:

$ comm -13 A B
$ 

... i elementy wspólne dla A i B:

$ comm -12 A B
22
443
80
$ 

Szczegółowe informacje można znaleźć w sekcji man comm.

1
rtx13 2 kwiecień 2020, 13:46

Możesz sprawdzić polecenie uniq -u:

http://man7.org/linux/man-pages/man1/uniq.1.html

Przekazujesz grupę linii do uniq -d i przekierowujesz do wyjścia. Wydrukuje tylko te zduplikowane. Wystarczy więc zebrać oba wyniki z listy A i listy B w tekst:

Lista A:

netstat -ntlp | grep -oP ":[:1]?[:1]?(.*)+" | grep -oP "\d\d+" >> output.txt

Lista B:

ufw status numbered | grep -oP "\] \d+" | grep -oP "\d+" > output.txt & gt; & gt; wyjście.txt`

(UWAGA: Używasz '>>' over '>', aby dołączyć zawartość na końcu pliku. Więc upewnij się, że wyczyścisz ją przy każdej iteracji!)

Następnie:

uniq -u output.txt

W razie potrzeby możesz również przekierować wyjście uniq -u:

uniq -u output.txt > gotuniques.txt

Edycja: formatowanie Edit2: Byłem zdezorientowany przez -d, gdy odpowiedź wymaga -u.

1
marques 3 kwiecień 2020, 09:08