# pingwinowanie 3 ## zad 2 ![image](https://hackmd.io/_uploads/ryDmZTqCT.png) 1. ls - listuje pliki w podanej ścieżce - -l: Wyświetla listę plików w formie długiej, prezentując bardziej szczegółowe informacje, takie jak prawa dostępu, liczba dowiązań, właściciel, grupa, rozmiar w bajtach, data modyfikacji itp. - -a: Wyświetla wszystkie pliki, włączając w to te o nazwach rozpoczynających się od kropki (ukryte pliki). Domyślnie ls pomija pliki zaczynające się od kropki. - -h: Wyświetla rozmiar plików w bardzij czytelnej formie, używając odpowiednich jednostek (np. KB, MB, GB). - -S: Sortuje pliki według rozmiaru, zaczynając od największego. - -t: Sortuje pliki według daty modyfikacji, zaczynając od najnowszego. - -r: Odwraca kolejność sortowania. - -R: Wyświetla zawartość katalogów rekursywnie, tj. również podkatalogi i ich zawartość. 3. stat(1) - wypisuje różne metadane pliku takie jak: - Nazwę pliku - Typ pliku (np. czy to katalog, plik zwykły, link symboliczny itp.) - Rozmiar pliku - Identyfikatory właścicieli (UID i GID) - Prawa dostępu (również w symbolicznej i numerycznej formie) - Datę ostatniej modyfikacji, dostępu i zmiany - Numer i rodzaj urządzenia (dla urządzeń specjalnych) przykłady: ``` > stat Assignment1.ipynb File: Assignment1.ipynb Size: 71654 Blocks: 144 IO Block: 4096 regular file Device: 259,4 Inode: 30194450 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ kabanok) Gid: ( 1000/ kabanok) Access: 2024-02-26 16:34:55.593576291 +0000 Modify: 2024-03-07 21:15:23.870440543 +0000 Change: 2024-03-07 21:15:23.870440543 +0000 Birth: 2024-02-26 16:34:55.593576291 +0000 ``` ``` > stat /dev/nvme0 File: /dev/nvme0 Size: 0 Blocks: 0 IO Block: 4096 character special file Device: 0,5 Inode: 149 Links: 1 Device type: 240,0 Access: (0600/crw-------) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2024-03-21 11:51:16.801902318 +0000 Modify: 2024-03-21 11:51:16.801902318 +0000 Change: 2024-03-21 11:51:16.801902318 +0000 Birth: - ``` 3. realpath(1) - zwraca kanoniczną ścieżkę do podanej lokalizacji, eliminując wszelkie odwołania do katalogów symbolicznych. Jest to przydatne, gdy chcemy uzyskać pełną, "czystą" ścieżkę do pliku lub katalogu, pomijając ewentualne dowiązania symboliczne. 4. readlink(1) - jest używane do odczytywania wartości wskazania symbolicznego pliku i wyświetlania jej na standardowym wyjściu. Jest to przydatne, gdy chcemy poznać, na który plik lub katalog faktycznie wskazuje dowiązanie symboliczne. 5. dirname(1) - zwraca nazwę katalogu zawierającego daną ścieżkę. Jest używane do wyodrębnienia ścieżki katalogu z pełnej ścieżki do pliku. 6. basename(1) - zwraca ostatni segment ścieżki (czyli nazwę pliku lub katalogu) z podanej ścieżki. Jest używane do wyodrębnienia nazwy pliku z pełnej ścieżki. ### co robi: ``` for IMG in *.jpg do convert $IMG $(basename $IMG .jpg).png done ``` convert(1) służy do robienia operacji na obrazach. Powyższy kod zamienia wszystkie pliki .jpg na .png ## zad3 ![image](https://hackmd.io/_uploads/SknE-65Rp.png) **hostname(5)** - plik zawierający nazwę maszyny, na której teraz pracujemy, podczas bootowania zmienna `HOSTNAME` jest ustawiana na wartość tego pliku **machine-id(5)** - w tym pliku jest pojedyncza wartość w systemie szesnastkowym składająca się z 32 znaków, zakończona nową linią. Po zdekodowaniu z szesnastkowego systemu odpowiada ona 16-bajtowej wartości. Nie może składać się z samych zer. **os-release(5)** - plik zawierający informacje o systemie operacyjnym tj: ``` NAME="Manjaro Linux" PRETTY_NAME="Manjaro Linux" ID=manjaro ID_LIKE=arch BUILD_ID=rolling ANSI_COLOR="32;1;24;144;200" HOME_URL="https://manjaro.org/" DOCUMENTATION_URL="https://wiki.manjaro.org/" SUPPORT_URL="https://forum.manjaro.org/" BUG_REPORT_URL="https://docs.manjaro.org/reporting-bugs/" PRIVACY_POLICY_URL="https://manjaro.org/privacy-policy/" LOGO=manjarolinux ``` różne dla kazdego systemu (na oko, nie sprawdzane) **hostname(1)** - komenda służąca do wyświetlenia/zmiany hostname'a **hostnamectl(1)** - komenda służąca do zarządzaniem rzeczami związanymi z hostname'm **uuid(1)** - Generuje lub analizuje unikalne identyfikatory UUID na systemach Unixowych. **uuidgen(1)** - Generuje identyfikatory UUID w formacie standardowym lub innym. **dbus-uuidgen(1)** - Generuje identyfikatory UUID związanego z DBus. **uname(1)** - Wyświetla informacje o systemie operacyjnym, takie jak nazwa, wersja jądra, architektura itp. **lsb_release(1)** - Wyświetla informacje o dystrybucji Linux Standard Base (LSB), takie jak nazwa dystrybucji, numer wersji, identyfikator opublikowania itp. To chyba w miarę odpowiada na pytanie ale idk https://www.redswitches.com/blog/check-linux-version/ ## Zad 4 ![image](https://hackmd.io/_uploads/BkNYiRaCT.png) **lsof(8)** - to skrót od "list open files". Polecenie lsof jest używane do wyświetlania informacji na temat plików otwartych przez procesy na systemie. Może wyświetlać szczegóły dotyczące plików, gniazd sieciowych, katalogów i innych zasobów, które są używane przez działające procesy. **fuser(1)** - jest skrótem od "file user". Polecenie fuser jest używane do wyświetlania identyfikatorów procesów, które używają określonych plików, katalogów lub gniazd. ### Różnice fuser zwraca tylko identyfikatory procesów, które używają określonych zasobów, a nie szczegółowe informacje na ich temat. ### Jak ujawnićpliki otwarte przez dany proces? ``` lsof -p <PID> ``` ### Jak sprawdzić który proces otworzył dany plik? ``` fuser -v <PATH> ``` ### Jak ujawnić wszystkie pliki otwarte przez użytkownika? ``` lsof -u <USER> ``` ## zad 5 ![image](https://hackmd.io/_uploads/rJ4kJJ0Ca.png) ### Analiza działania programu: `strace` pozwala na monitorowanie działania programu poprzez wyświetlanie wywołań systemowych, które ten program wykonuje. Można użyć go do zrozumienia, jak program komunikuje się z systemem operacyjnym, jakie operacje plikowe wykonuje, jak zarządza pamięcią itp. Śledzenie wszystkich wywołań systemowych wykonanych przez program o nazwie example: ``` strace example ``` ### Debugowanie problemów z programem: W przypadku występowania problemów z działaniem programu, strace może pomóc w zidentyfikowaniu przyczyny problemu poprzez analizę wywołań systemowych. Może to obejmować próby dostępu do nieistniejących plików, błędów związanych z dostępem do pamięci, zablokowane operacje wejścia/wyjścia itp. Stworzenie pliku `trace.log` ``` strace -o trace.log example ``` ### Monitorowanie działania procesu w czasie rzeczywistym: Można również użyć strace do monitorowania działania procesu w czasie rzeczywistym. Jest to szczególnie przydatne, gdy chcesz śledzić interakcje między procesem a systemem operacyjnym w trakcie jego pracy. Śledzenie wywołań systemowych procesu o znanym identyfikatorze PID, na przykład 1234: ``` strace -p 1234 ``` ### Zabezpieczanie systemu: strace może być również używane do zabezpieczania systemu poprzez wykrywanie potencjalnie szkodliwych działań programów. Możesz użyć go do monitorowania podejrzanych procesów i identyfikacji ich podejrzanej aktywności. ``` strace -e trace=all -f -o suspicious.log ``` -o opcja używana jest do przekierowywania wyjścia strace do pliku. -p opcja pozwala śledzić wywołania systemowe procesu o określonym PID. -e trace=all pozwala na śledzenie wszystkich wywołań systemowych. -f opcja umożliwia śledzenie wywołań systemowych także dla procesów potomnych. ## zad 7 ### Program netstat(8): `netstat` jest narzędziem służącym do wyświetlania różnych informacji związanych z siecią, w tym informacji o czynnych gniazdach sieciowych, trasach sieciowych i statystykach protokołów sieciowych. ### Program ss(8): `ss` jest bardziej zaawansowanym narzędziem, które również umożliwia wyświetlanie informacji o czynnych gniazdach sieciowych, ale oferuje bardziej szczegółowe i zoptymalizowane wyjście w porównaniu z netstat. ### Opcja -U polecenia lsof(8): Opcja -U w poleceniu lsof umożliwia wyświetlanie tylko informacji o gniazdach Unixowych. ### Przykłady `netstat` ```bash # Wyświetlenie informacji o wszystkich gniazdach sieciowych netstat -a # Wyświetlenie informacji o czynnych gniazdach sieciowych wraz z informacjami o procesach netstat -atnp ``` `ss` ```bash # Wyświetlenie informacji o wszystkich gniazdach sieciowych wraz z informacjami o procesach ss -tulnep ``` `lsof -U` ```bash # Wyświetlenie informacji o wszystkich gniazdach Unixowych lsof -U # Dowiedzenie się, które gniazda należą do podanego procesu lsof -U -p <PID> ``` ## zad 9 ![image](https://hackmd.io/_uploads/SJyDF6RCT.png) Mamy na oko takie cuda ![image](https://hackmd.io/_uploads/B1ZYKpR06.png) I chodzi o to ~(chyba)~, że nie potrzebujemy żadnego netcata ani innych zewnętznych cudów tylko bash kox ziomek potrafi to zrobić sam Możemy dzięki temu robić takie coś ```bash= exec 3<>/dev/tcp/www.example.com/80 echo -e "GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: close\r\n\r\n" >&3 cat <&3 ``` ## zad10 ![image](https://hackmd.io/_uploads/B1taaTA06.png) ### DBus DBus to system magistrali który umożliwia komunikację między procesami. Jest używany do komununikacji z hardware a softem? ### dbus-monitor Służy do podejrzenia tej komunikacji na DBus ### testowanie No na oko coś się dzieje jak odłączam kabelki od kompa więc pewnie coś w tym stylu