Programowanie > Bash, skrypty powłoki

Wyświetlanie użytkowników

(1/1)

ordan0404:
Mam do zrobienia takie zadanie:
Wyświetl nazwy użytkowników, którzy należą do tej samej grupy, do której należy użytkownik jako który jesteś zalogowany(a) (groups, grep). Jeśli uzytkownik należy do kilku grup
wybierz pierwszą z nich (cut).

Po wpisaniu w terminalu groups wyświetla mi tylko do jakiej grupy należy zalogowany użytkownik i nie bardzo wiem jak zrobić to zadanie. Pomoże ktoś?

Paweł Kraszewski:
* groups przyjmuje opcjonalny parametr: kogo ma dotyczyć zapytanie
* Użytkowników masz w ogólnodostępnym pliku /etc/users.

Szczujesz wynik pierwszego na grep drugiego.

1709:
Wyjasnienie jest swietne, ale jesli mozna
to napisalbym jak jak ja to bym zrobil.

Zdanie w zadaniu trzeba troche rozbic bo jest troche zbyt skomplikowane.
Trzeba najpierw znalesc nazwe uzytkownia,
zeby znalesc do jakich grup on nalezy,
zeby potem wyswietlic nazwy uzytkownikow pierwszej znalezionej grupy.

W wyszukiwarce szukam wpisujac
linux + szukana fraza / zdanie / klucz,  np.

--- Cytuj ---linux wyswietlanie zalogowanego uzytkownika
--- Koniec cytatu ---

--- Cytuj ---linux wyswietlanie grup
--- Koniec cytatu ---

No to zaczynamy...
Szukamy "znalesc nazwe uzytkownia,"
Wpisujac w wyszukiwarke " linux wyswietlanie zalogowanego uzytkownika "
natrafiam na pierwszy wynik  https://www.arturpyszczuk.pl/commands-who.html

--- Kod: ---
$ who
xxx     tty8         2019-10-28 12:12 (:0)
--- Koniec kodu ---
Gdzie "xxx" to moja nazwa uzytkownika.

Potem "znalesc do jakich grup on nalezy,"
po wpisaniu w wyszukiwarke " linux wyswietlanie grup "
i w pierwszym wyniku jest to ale nie wyjasnione  https://www.arturpyszczuk.pl/commands-groups.html
a w drugim  https://linuxiarze.pl/uzytkownik/

--- Cytuj ---3. Aby sprawdzić do jakich grup należysz :

--- Kod: ---
groups nazwa_użytkownika
--- Koniec kodu ---

--- Koniec cytatu ---

--- Kod: ---
$ groups xxx
xxx : xxx lp floppy cdrom cdwriter audio video dialout users polkituser
--- Koniec kodu ---
Pokazuje ze pierwsza moja grupa ma identyczna nazwe jak nazwa uzytkownika xxx

No to teraz  " wyswietlic nazwy uzytkownikow pierwszej znalezionej grupy "
szukam " linux wyswietlanie nazwy uzytkownikow i grup "
i pierwszy wynik wyszukiwania  http://computersun.pl/linux/podstawy/uzytkownicy-grupy-w-linuksie-s_79.html
i jest tam wspomniane

--- Cytuj ---W Linuksie istnieją trzy standardowe pliki odnoszące się kolejno do użytkowników, grup i haseł.
Pierwszy z nich to /etc/passwd. Kiedyś przechowywano w nim hasła (ang. password), teraz umieszcza się tam informacje m.in. o użytkownikach.
--- Koniec cytatu ---
Nizej w przedstawionym formacie przeczytasz ze linia zawiera nazwe uzytkownika i grupe
No to szukamy wykorzystujac grep + nazwa grupy  + nazwa pliku.

Jeszcze cos.
W zadaniu jest wspomniane 

--- Cytuj ---Jeśli uzytkownik należy do kilku grup
wybierz pierwszą z nich (cut).
--- Koniec cytatu ---
Wiec zakladam ze nie mozemy podawac komend po kolei,
abo to dotyczy tylko przy zadaniu " znalesc do jakich grup on nalezy "
Albo jest to dodatkowe zadanie.

Z logiki nigdy nie bylem dobry, takze tu nie pomoge  :D

Aby komendy napisac razem mozna uzyc
- albo " | " (pipe)
- albo zapisac dane do pliku i zniego odczytywac
- albo zapisac dane do zmiennej i uzyc " ; " zeby napisac komendy w tej samej linii
aby operowac na danych / tekscie.

Taka praca nad tekstem roznie sie nazywa
" manipulacja tekstu " https://linux.die.net/Linux-CLI/text-manipulation-tools.html
" filtrowanie tekstu " https://www.tecmint.com/linux-file-operations-commands/
i jeszcze jedna nazwa chyba byla, ale nie pamiętam teraz.

Jak wpiszesz w wyszukiwarke " linux cut " to znajdziesz przyklady,
w jednym z nich  https://www.geeksforgeeks.org/cut-command-linux-examples/
Masz taki przyklad

--- Cytuj ---cut -d " " -f 1 state.txt
Andhra
Arunachal
Assam
Bihar
Chhattisgarh
--- Koniec cytatu ---
Czyli ze ucielo wszystko oprocz pierwszego slowa kazdej linii.
Zmieniajac " (field number) " mozesz zmienic wyswietlane slowo,
np  " jakies komendy |  cut -d " " -f3 " wyswieli trzecie slowo kazdej linii.

Taki tylko przyklad budowania takiego " tasiemca ".


--- Cytuj ---who
...
who | cut -d " " -f1
... ( wyswietla tylko nazwe uzytkownika z komendy who)
groups $(who | cut -d " " -f1)
... (wyswietla wszystkie grupy do jakich nalezy uzytkownik z wyniku wyzej)
groups $(who | cut -d " " -f1) | cut -d" " -f3
... ( wyswietla u mnie, pierwsza grupe z wyniku wyzej )
grep $(groups $(who | cut -d " " -f1) | cut -d" " -f3) /etc/passwd
... ( wyswietla wszystkie linie zawierajace nazwe grupy z wyniku wyzej )
--- Koniec cytatu ---

Ktore jak widac jest zbiorem uzytych komend


Tekst troche poprawilem, bo sie sam pogubilem :D
Juz poprawiony

ordan0404:
Dzięki wielkie, pomogło zrozumieć.

920806:
Ja polecam użyć zapoznać się z narzedziem awk :

np.
--- Kod: ---
who | awk '{print $1}'
--- Koniec kodu ---


Fajnie się tym formatuje output  :)

Nawigacja

[0] Indeks wiadomości

Idź do wersji pełnej