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
Idź do wersji pełnej