<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Systemy Operacyjne - 2024 on Side Effects</title><link>https://marcinklimek.github.io/student/2024-so/</link><description>Recent content in Systemy Operacyjne - 2024 on Side Effects</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Thu, 30 Nov 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://marcinklimek.github.io/student/2024-so/index.xml" rel="self" type="application/rss+xml"/><item><title>Systemy Operacyjne - Krótki wstęp</title><link>https://marcinklimek.github.io/student/2024-so/2023-11-18-so-lab-intro/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://marcinklimek.github.io/student/2024-so/2023-11-18-so-lab-intro/</guid><description>&lt;h1 id="wstęp">Wstęp&lt;/h1>
&lt;h2 id="krótki-wstęp">Krótki wstęp&lt;/h2>
&lt;h3 id="system-operacyjny">System operacyjny&lt;/h3>
&lt;p>System operacyjny (OS) to podstawowe oprogramowanie, które zarządza sprzętem komputerowym i umożliwia interakcję użytkownika z komputerem. Jest to warstwa między aplikacjami a sprzętem komputerowym, koordynująca wszystkie podstawowe funkcje i procesy.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Podstawowe Funkcje&lt;/p>
&lt;ul>
&lt;li>Zarządzanie Zasobami&lt;/li>
&lt;li>Uruchamianie Aplikacji&lt;/li>
&lt;li>Interfejs Użytkownika&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Rodzaje Systemów Operacyjnych&lt;/p>
&lt;ul>
&lt;li>Systemy na Komputery Osobiste: Windows, macOS i różne dystrybucje Linuxa&lt;/li>
&lt;li>Mobilne Systemy Operacyjne: iOS, Android&lt;/li>
&lt;li>Systemy Serwerowe: Windows Server, Linux Server&lt;/li>
&lt;li>Systemy Wbudowane&lt;/li>
&lt;li>Systemy czasu rzeczywistego&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Znaczenie&lt;/p></description><content:encoded><![CDATA[<h1 id="wstęp">Wstęp</h1>
<h2 id="krótki-wstęp">Krótki wstęp</h2>
<h3 id="system-operacyjny">System operacyjny</h3>
<p>System operacyjny (OS) to podstawowe oprogramowanie, które zarządza sprzętem komputerowym i umożliwia interakcję użytkownika z komputerem. Jest to warstwa między aplikacjami a sprzętem komputerowym, koordynująca wszystkie podstawowe funkcje i procesy.</p>
<ol>
<li>
<p>Podstawowe Funkcje</p>
<ul>
<li>Zarządzanie Zasobami</li>
<li>Uruchamianie Aplikacji</li>
<li>Interfejs Użytkownika</li>
</ul>
</li>
<li>
<p>Rodzaje Systemów Operacyjnych</p>
<ul>
<li>Systemy na Komputery Osobiste:    Windows, macOS i różne dystrybucje Linuxa</li>
<li>Mobilne Systemy Operacyjne:   iOS, Android</li>
<li>Systemy Serwerowe: Windows Server, Linux Server</li>
<li>Systemy Wbudowane</li>
<li>Systemy czasu rzeczywistego</li>
</ul>
</li>
<li>
<p>Znaczenie</p>
<ul>
<li>System operacyjny jest kluczowym elementem każdego komputera, umożliwiając efektywne i bezpieczne wykorzystanie jego zasobów.</li>
<li>Ułatwia interakcję użytkownika z komputerem, oferując przyjazny interfejs i zarządzanie aplikacjami.</li>
<li>Zapewnia bezpieczeństwo danych, zarządzając dostępem do zasobów i izolując różne procesy.</li>
</ul>
</li>
</ol>
<h3 id="czym-jest-wirtualizacja">Czym jest wirtualizacja?</h3>
<p><strong>W kontekście przedmiotu SO</strong></p>
<p>Wirtualizacja to proces tworzenia wirtualnych, a nie fizycznych wersji systemu operacyjnego.</p>
<ul>
<li>
<p>Zalety:
Wirtualizacja pozwala na bardziej efektywne wykorzystanie zasobów sprzętowych, umożliwiając uruchamianie wielu systemów operacyjnych i aplikacji na pojedynczym fizycznym serwerze. Zapewnia to oszczędności kosztów, zwiększa elastyczność, ułatwia backup, odzyskiwanie po awarii oraz testowanie i rozwój oprogramowania.</p>
</li>
<li>
<p>Rodzaje Wirtualizacji:</p>
<ul>
<li>Wirtualizacja serwerów: Pojedynczy serwer fizyczny jest dzielony na wiele izolowanych serwerów wirtualnych.</li>
<li>Wirtualizacja sieci: Zasoby sieciowe, takie jak przełączniki, routery i połączenia sieciowe, są wirtualizowane.</li>
<li>Wirtualizacja pamięci masowej: Dzieli i zarządza zasobami pamięci masowej w sposób elastyczny i efektywny.</li>
<li>Wirtualizacja aplikacji: Aplikacje są uruchamiane w odizolowanych środowiskach, co zapobiega konfliktom między oprogramowaniem.</li>
</ul>
</li>
</ul>
<h4 id="hypervisor">Hypervisor:</h4>
<p>To oprogramowanie umożliwiające wirtualizację, zarządzające VM-ami i przydzielające im zasoby. Istnieją dwa główne typy hipernadzorców:</p>
<ul>
<li>Bare-Metal: Zainstalowany bezpośrednio na sprzęcie.</li>
<li>Hostowany: Działa na konwencjonalnym systemie operacyjnym.</li>
</ul>
<h4 id="zalety-ochrony-i-bezpieczeństwa">Zalety Ochrony i Bezpieczeństwa:</h4>
<p>Wirtualizacja umożliwia lepsze zarządzanie bezpieczeństwem, izolując różne systemy operacyjne i aplikacje, co zmniejsza ryzyko rozprzestrzeniania się problemów z jednego systemu na inny.</p>
<h4 id="elastyczność-i-skalowalność">Elastyczność i Skalowalność:</h4>
<p>Ułatwia skalowanie zasobów w górę lub w dół w zależności od potrzeb, bez konieczności inwestowania w dodatkowy sprzęt.</p>
<h3 id="dostępne-technologie">Dostępne technologie</h3>
<h4 id="hipervisor">Hipervisor</h4>
<h5 id="hipervisor---bare-metal">Hipervisor - Bare-Metal</h5>
<p>Te hipernadzorcy działają bezpośrednio na sprzęcie gospodarza, kontrolując sprzęt i zarządzając systemami operacyjnymi gości.</p>
<ul>
<li>VMware ESXi: Szeroko stosowany w środowiskach korporacyjnych, oferując zaawansowane funkcje i narzędzia zarządzania.</li>
<li>Microsoft Hyper-V: Dostępny na Windows Server i niektórych edycjach Windows 10 i 11, znany ze swojej integracji z ekosystemami Microsoft.</li>
<li>Citrix Hypervisor: Dawniej znany jako XenServer, to potężny hipernadzorca open source często używany w centrach danych.</li>
<li>Oracle VM Server dla SPARC/x86: Zaprojektowany dla sprzętu Oracle, zwykle stosowany w środowiskach korporacyjnych.</li>
<li>KVM (Kernel-Based Virtual Machine): Zintegrowany z Linuksem, KVM zamienia jądro Linuksa w hipernadzorcę bare-metal.</li>
</ul>
<h5 id="hipernadzorcy---hostowane">Hipernadzorcy - Hostowane</h5>
<p>Te hipernadzorcy działają na konwencjonalnym systemie operacyjnym, tak jak inne programy komputerowe.</p>
<ul>
<li>VMware Workstation (dla Windows/Linux) i Fusion (dla macOS)</li>
<li>Oracle VirtualBox</li>
<li>Parallels Desktop</li>
</ul>
<ol start="2">
<li>Pełne Symulacje Systemów</li>
</ol>
<p>Te narzędzia wykraczają poza tradycyjną wirtualizację, symulując całe systemy, w tym sprzęt i środowiska sieciowe.</p>
<ul>
<li>QEMU: Open-source emulator, który może wykonywać wirtualizację sprzętu.</li>
<li>GNS3 (Graphical Network Simulator-3): Głównie używany dla urządzeń sieciowych</li>
<li>Simics: Pełny symulator systemu używany do symulacji procesorów, systemów i kompletnych systemów sieciowych.</li>
</ul>
<ol start="3">
<li>Wirtualizacja Aplikacji
Skupia się na uruchamianiu poszczególnych aplikacji w odizolowanym środowisku.</li>
</ol>
<ul>
<li>Microsoft Application Virtualization (App-V): Zaprojektowany dla środowisk Windows, pozwala aplikacjom działać w izolowanych środowiskach.</li>
<li>Wine: Nie jest właściwie oprogramowaniem do wirtualizacji, ale pozwala uruchamiać aplikacje Windows na systemach operacyjnych podobnych do Unix.</li>
<li>Docker: Specjalizuje się w konteneryzacji, umożliwiając aplikacjom i ich zależnościom działanie w izolowanych procesach zasobów.</li>
</ul>
<ol start="4">
<li>Wirtualizacja oparta na chmurze</li>
</ol>
<ul>
<li>Amazon EC2 (część AWS)</li>
<li>Google Compute Engine</li>
<li>Microsoft Azure Virtual Machines</li>
</ul>
<ol start="5">
<li>Specjalistyczne lub niszowe narzędzia do wirtualizacji</li>
</ol>
<ul>
<li>Bochs: Emulator dla platform x86 i x86-64, bardziej skupiony na dokładności emulacji.</li>
<li>Bhyve: Lekki hipernadzorca działający na FreeBSD.</li>
<li>Gem5: To już jest bardziej symulator architektury</li>
</ul>
]]></content:encoded></item><item><title>Systemy Operacyjne - Lab01</title><link>https://marcinklimek.github.io/student/2024-so/2023-11-18-so-lab-01/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://marcinklimek.github.io/student/2024-so/2023-11-18-so-lab-01/</guid><description>&lt;h1 id="lab-01">Lab 01&lt;/h1>
&lt;h2 id="uwagi-do-ćwiczeń">Uwagi do ćwiczeń&lt;/h2>
&lt;h3 id="tworzymy-sprawozdanie-z-wykonanych-czynności">Tworzymy sprawozdanie z wykonanych czynności&lt;/h3>
&lt;p>&lt;strong>Proszę o wykonywanie poniższych ćwiczeń dokumentując rezultaty&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>zapisanie numeru polecenia w nagłówku&lt;/li>
&lt;li>opis czynności&lt;/li>
&lt;li>wykonywanie zrzutów ekranu&lt;/li>
&lt;li>umieszczanie tych zrzutów jako zawartości do dowolnego edytora tekstu np. Word, Writer&lt;/li>
&lt;li>w żadnym przypadku nie kopiujemy manual-a lub helpa&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Sprawozdanie zapisujemy w formacie PDF i przesyłamy do systemu jako potwierdzenie swojego udziału w zajęciach i wykonania ćwiczeń.&lt;/strong>&lt;/p>
&lt;p>&lt;strong>Plik sprawozdania proszę zapisać jako: Sprawozdanie_lab01_JanKowalski.pdf, dla studenta o nazwisku Jan Kowalski.&lt;/strong>&lt;/p></description><content:encoded><![CDATA[<h1 id="lab-01">Lab 01</h1>
<h2 id="uwagi-do-ćwiczeń">Uwagi do ćwiczeń</h2>
<h3 id="tworzymy-sprawozdanie-z-wykonanych-czynności">Tworzymy sprawozdanie z wykonanych czynności</h3>
<p><strong>Proszę o wykonywanie poniższych ćwiczeń dokumentując rezultaty</strong></p>
<ul>
<li>zapisanie numeru polecenia w nagłówku</li>
<li>opis czynności</li>
<li>wykonywanie zrzutów ekranu</li>
<li>umieszczanie tych zrzutów jako zawartości do dowolnego edytora tekstu np. Word, Writer</li>
<li>w żadnym przypadku nie kopiujemy manual-a lub helpa</li>
</ul>
<p><strong>Sprawozdanie zapisujemy w formacie PDF i przesyłamy do systemu jako potwierdzenie swojego udziału w zajęciach i wykonania ćwiczeń.</strong></p>
<p><strong>Plik sprawozdania proszę zapisać jako: Sprawozdanie_lab01_JanKowalski.pdf, dla studenta o nazwisku Jan Kowalski.</strong></p>
<h2 id="ćwiczenia">Ćwiczenia</h2>
<ul>
<li>
<p>Pobierz obraz instalacyjny Debian 12</p>
<ul>
<li>Przejdź na oficjalną stronę Debian i pobierz obraz ISO Debiana 12.</li>
<li>Strona pobierania systemu Debian.</li>
</ul>
</li>
<li>
<p>Utwórz nową maszynę wirtualną w VirtualBox:</p>
<ul>
<li>Przejdź na oficjalną stronę VirtualBox-a, pobierz i zainstaluj środowisko virtualne VirtualBox na przykład w wersji: 7.0.12 dla używanego przez Ciebie systemu np. Windows</li>
<li>Link do pobrania VirtualBoxa</li>
<li>Uruchom VirtualBox.</li>
<li>Kliknij na przycisk &ldquo;Nowa&rdquo; w górnym menu.</li>
<li>Podaj nazwę maszyny, wybierz typ jako &ldquo;Linux&rdquo; i wersję jako &ldquo;Debian (64-bit)&rdquo;.</li>
<li>Przypisz pamięć RAM (zalecane 4 GB).</li>
<li>Utwórz nowy dysk twardy o rozmiarze co najmniej kilka gigabajtów, np. 50GB</li>
<li>W ustawieniach sieci VirtualBox dla nowo utworzonej maszyny ustaw TYLKO kartę numer 1 podłączoną jako: &ldquo;Mostkowana karta sieciowa (bridged)&rdquo;</li>
</ul>
</li>
<li>
<p>Podłącz obraz ISO Debiana do maszyny wirtualnej:</p>
<ul>
<li>W oknie głównym VirtualBox zaznacz utworzoną maszynę wirtualną.</li>
<li>Kliknij na przycisk &ldquo;Ustawienia&rdquo;.</li>
<li>Przejdź do zakładki &ldquo;Nośniki&rdquo; (Storage).</li>
<li>W sekcji &ldquo;Kontroler SATA&rdquo; kliknij na ikonę dysku i wybierz obraz ISO Debiana.</li>
</ul>
</li>
<li>
<p>Uruchom maszynę wirtualną i rozpocznij instalację:</p>
<ul>
<li>W oknie głównym VirtualBox zaznacz maszynę wirtualną i kliknij na przycisk &ldquo;Uruchom&rdquo;.</li>
<li>Wybierz opcję instalacji o nazwie &ldquo;Install&rdquo; (nie Graphical install).</li>
<li>Postępuj zgodnie z krokami instalatora, w tym wybierając odpowiednią lokalizację dla systemu, hasło administratora (root), nawą konta będzie Pani/Pana Imię a hasło dowolne zgodne z polityką haseł systemu Linux.</li>
<li>Nazwa hosta: &ldquo;debian-Imię&rdquo; (Imię Pani/Pana. Proszę wykonać screen z tj czynności)</li>
<li>Nazwa konta to login do systemu: CloudA</li>
<li>Środowisko graficzne proszę wybrać dowolne inne niż &ldquo;Gnome&rdquo; - np. XFCE</li>
</ul>
</li>
<li>
<p>Zakończ instalację i uruchom system:</p>
<ul>
<li>Po zakończeniu procesu instalacji, zaznacz opcję &ldquo;Uruchom ponownie teraz&rdquo;.</li>
<li>Po restarcie usuń obraz ISO z napędu wirtualnego (kliknij na ikonę dysku w zakładce &ldquo;Nośniki&rdquo; w ustawieniach maszyny wirtualnej i sprawdź czy napęd został odłączony).</li>
<li>System Debian 12 powinien teraz uruchomić się zainstalowany na wirtualnej maszynie.</li>
<li>ZAINSTALUJ VM BOX TOOLS (Narzędzia, dodatki gościa)</li>
<li>Po zakończeniu instalacji utwórz MIGAWKĘ do nowego systemu, aby później można było wrócić do tego stanu jak po instalacji.</li>
</ul>
</li>
</ul>
]]></content:encoded></item><item><title>Systemy Operacyjne - Lab02</title><link>https://marcinklimek.github.io/student/2024-so/2023-11-18-so-lab-02/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://marcinklimek.github.io/student/2024-so/2023-11-18-so-lab-02/</guid><description>&lt;h1 id="lab-02">Lab 02&lt;/h1>
&lt;h2 id="uwagi-do-ćwiczeń">Uwagi do ćwiczeń&lt;/h2>
&lt;h3 id="tworzymy-sprawozdanie-z-wykonanych-czynności">Tworzymy sprawozdanie z wykonanych czynności&lt;/h3>
&lt;p>&lt;strong>Proszę o wykonywanie poniższych ćwiczeń dokumentując rezultaty&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>zapisanie numeru polecenia w nagłówku&lt;/li>
&lt;li>opis czynności&lt;/li>
&lt;li>wykonywanie zrzutów ekranu&lt;/li>
&lt;li>umieszczanie tych zrzutów jako zawartości do dowolnego edytora tekstu np. Word, Writer&lt;/li>
&lt;li>w żadnym przypadku nie kopiujemy manual-a lub helpa&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Sprawozdanie zapisujemy w formacie PDF i przesyłamy do systemu jako potwierdzenie swojego udziału w zajęciach i wykonania ćwiczeń.&lt;/strong>&lt;/p>
&lt;p>&lt;strong>Plik sprawozdania proszę zapisać jako: Sprawozdanie_lab02_JanKowalski.pdf, dla studenta o nazwisku Jan Kowalski.&lt;/strong>&lt;/p></description><content:encoded><![CDATA[<h1 id="lab-02">Lab 02</h1>
<h2 id="uwagi-do-ćwiczeń">Uwagi do ćwiczeń</h2>
<h3 id="tworzymy-sprawozdanie-z-wykonanych-czynności">Tworzymy sprawozdanie z wykonanych czynności</h3>
<p><strong>Proszę o wykonywanie poniższych ćwiczeń dokumentując rezultaty</strong></p>
<ul>
<li>zapisanie numeru polecenia w nagłówku</li>
<li>opis czynności</li>
<li>wykonywanie zrzutów ekranu</li>
<li>umieszczanie tych zrzutów jako zawartości do dowolnego edytora tekstu np. Word, Writer</li>
<li>w żadnym przypadku nie kopiujemy manual-a lub helpa</li>
</ul>
<p><strong>Sprawozdanie zapisujemy w formacie PDF i przesyłamy do systemu jako potwierdzenie swojego udziału w zajęciach i wykonania ćwiczeń.</strong></p>
<p><strong>Plik sprawozdania proszę zapisać jako: Sprawozdanie_lab02_JanKowalski.pdf, dla studenta o nazwisku Jan Kowalski.</strong></p>
<h2 id="zadania">Zadania</h2>
<ol>
<li>
<p>Uzyskaj informacje na temat systemu uname -a, uptime</p>
</li>
<li>
<p>Uzyskaj informacje na temat swojego konta: finger.</p>
</li>
<li>
<p>Spróbuj zastosować uzyskane informacje do poleceń: write, mesg.</p>
</li>
<li>
<p>Wypróbuj polecenia: w, who, whoami, finger, chfn, write, mesg</p>
</li>
<li>
<p>Przy użyciu polecenia man wyjaśnij znaczenie komend:</p>
<pre><code> ls cat rm cp mv mkdir touch
</code></pre>
</li>
<li>
<p>Stwórz w swoim domowym katalogu poniższa strukturę plików:</p>
<pre><code>Praca
   |--- Arkusze
   |            |--- Archiwum
   |            |--- Rachunki
   |--- Teksty              |
                            |--- Faksy
                            |--- Umowy
</code></pre>
</li>
<li>
<p>Jaki jest efekt wykonania komendy: ls -l , cd ~, pwd ?</p>
</li>
<li>
<p>Sprawdź i opisz działanie: ls -l | more oraz cat /etc/passwd | less</p>
</li>
<li>
<p>Zapoznaj się z opisem komendy chmod oraz ls -l (man chmod) (man ls)</p>
</li>
<li>
<p>Korzystając z utworzonej struktury katalogów w pkt. 4, ustaw następujące prawa dostępu:</p>
</li>
</ol>
<ul>
<li>do katalogu Praca:
<ul>
<li>dla użytkownika - tylko prawo do wykonywania,</li>
<li>dla grupy - brak praw,</li>
<li>dla pozostałych - brak praw,</li>
</ul>
</li>
<li>do katalogu Arkusze:
<ul>
<li>dla użytkownika - wszystkie prawa,</li>
<li>dla grupy - brak praw,</li>
<li>dla pozostałych - prawo do czytania,</li>
</ul>
</li>
</ul>
<table>
  <thead>
      <tr>
          <th>Użytkownik (user)</th>
          <th></th>
          <th></th>
          <th></th>
          <th>Grupa (group)</th>
          <th></th>
          <th></th>
          <th></th>
          <th>Inni użytkownicy (others)</th>
          <th></th>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td></td>
          <td>r</td>
          <td>w</td>
          <td>x</td>
          <td></td>
          <td>r</td>
          <td>w</td>
          <td>x</td>
          <td></td>
          <td>r</td>
          <td>w</td>
          <td>x</td>
      </tr>
  </tbody>
</table>
<ol start="7">
<li>Sprawdź i opisz działanie: chown, chgrp</li>
</ol>
]]></content:encoded></item><item><title>Systemy Operacyjne - Lab03</title><link>https://marcinklimek.github.io/student/2024-so/2023-11-28-so-lab-03/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://marcinklimek.github.io/student/2024-so/2023-11-28-so-lab-03/</guid><description>&lt;h1 id="lab-03">Lab 03&lt;/h1>
&lt;h2 id="uwagi-do-ćwiczeń">Uwagi do ćwiczeń&lt;/h2>
&lt;h3 id="tworzymy-sprawozdanie-z-wykonanych-czynności">Tworzymy sprawozdanie z wykonanych czynności&lt;/h3>
&lt;p>&lt;strong>Proszę o wykonywanie poniższych ćwiczeń dokumentując rezultaty&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>zapisanie numeru polecenia w nagłówku&lt;/li>
&lt;li>opis czynności&lt;/li>
&lt;li>wykonywanie zrzutów ekranu&lt;/li>
&lt;li>umieszczanie tych zrzutów jako zawartości do dowolnego edytora tekstu np. Word, Writer&lt;/li>
&lt;li>w żadnym przypadku nie kopiujemy manual-a lub helpa&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Sprawozdanie zapisujemy w formacie PDF i przesyłamy do systemu jako potwierdzenie swojego udziału w zajęciach i wykonania ćwiczeń.&lt;/strong>&lt;/p>
&lt;p>&lt;strong>Plik sprawozdania proszę zapisać jako: Sprawozdanie_lab03_JanKowalski.pdf, dla studenta o nazwisku Jan Kowalski.&lt;/strong>&lt;/p></description><content:encoded><![CDATA[<h1 id="lab-03">Lab 03</h1>
<h2 id="uwagi-do-ćwiczeń">Uwagi do ćwiczeń</h2>
<h3 id="tworzymy-sprawozdanie-z-wykonanych-czynności">Tworzymy sprawozdanie z wykonanych czynności</h3>
<p><strong>Proszę o wykonywanie poniższych ćwiczeń dokumentując rezultaty</strong></p>
<ul>
<li>zapisanie numeru polecenia w nagłówku</li>
<li>opis czynności</li>
<li>wykonywanie zrzutów ekranu</li>
<li>umieszczanie tych zrzutów jako zawartości do dowolnego edytora tekstu np. Word, Writer</li>
<li>w żadnym przypadku nie kopiujemy manual-a lub helpa</li>
</ul>
<p><strong>Sprawozdanie zapisujemy w formacie PDF i przesyłamy do systemu jako potwierdzenie swojego udziału w zajęciach i wykonania ćwiczeń.</strong></p>
<p><strong>Plik sprawozdania proszę zapisać jako: Sprawozdanie_lab03_JanKowalski.pdf, dla studenta o nazwisku Jan Kowalski.</strong></p>
<h2 id="informacje-wstępne">Informacje wstępne</h2>
<p>Zapoznaj się z podstawowymi elementami programowania w powłoce bash oraz rozwiąż zadania umieszczone na końcu tekstu.</p>
<p>PROGRAMOWANIE W BASH’U</p>
<p><em>Lista słów zastrzeżonych:</em></p>
<pre><code>!
case
do
done
elif
else
esac
fi
for
function
if
in
select
then
until
while
{
}
time
\[
\]
</code></pre>
<h2 id="ważniejsze-polecenia-powłoki">WAŻNIEJSZE POLECENIA POWŁOKI:</h2>
<table><tbody><tr><td><p><span>Instrukcja</span></p></td><td><p><span>Składnia</span></p></td><td><p><span>Przykład</span></p></td></tr><tr><td><p><span><span>if</span></span></p></td><td><p><span><span>if warunek</span></span></p><p><span><span>then</span></span></p><p><span><span>polecenie1</span></span></p><p><span><span>else</span></span></p><p><span><span>polecenie2</span></span></p><p><span><span>fi</span></span></p></td><td><p><span><span>if [ -e ~/.bashrc ]</span></span></p><p><span><span>then</span></span></p><p><span><span>echo "Masz plik.bashrc"</span></span></p><p><span><span>else</span></span></p><p><span><span>echo "Nie masz pliku .bashrc"</span></span></p><p><span><span>fi</span></span></p></td></tr><tr><td><p><span><span>case</span></span></p></td><td><p><span><span>case zmienna in</span></span></p><p><span><span>"wzorzec1") polecenie1 ;;</span></span></p><p><span><span>"wzorzec2") polecenie2 ;;</span></span></p><p><span><span>"wzorzec3") polecenie3 ;;</span></span></p><p><span><span>*) polecenie_domyślne</span></span></p><p><span><span>esac</span></span></p></td><td><p><span><span>echo "Podaj cyfrę dnia tygodnia"</span></span></p><p><span><span>read d</span></span></p><p><span><span>case "$d" in</span></span></p><p><span><span>"1") echo "Poniedziałek" ;;</span></span></p><p><span><span>"2") echo "Wtorek" ;;</span></span></p><p><span><span>"3") echo "Środa" ;;</span></span></p><p><span><span>"4") echo "Czwartek" ;;</span></span></p><p><span><span>"5") echo "Piątek" ;;</span></span></p><p><span><span>"6") echo "Sobota" ;;</span></span></p><p><span><span>"7") echo "Niedziela" ;;</span></span></p><p><span><span>*) echo "Nic nie wybrałeś"</span></span></p><p><span><span>esac</span></span></p></td></tr><tr><td><p><span><span>for</span></span></p></td><td><p><span><span>for zmienna in lista</span></span></p><p><span><span>do</span></span></p><p><span><span>polecenie</span></span></p><p><span><span>done</span></span></p></td><td><p><span><span>for x in jeden dwa trzy</span></span></p><p><span><span>do</span></span></p><p><span><span>echo "To jest $x"</span></span></p><p><span><span>done</span></span></p></td></tr><tr><td><p><span><span>while</span></span></p></td><td><p><span><span>while warunek</span></span></p><p><span><span>do</span></span></p><p><span><span><span>polecenie</span></span></span></p><p><span><span>done</span></span></p></td><td><p><span><span>x=1;</span></span></p><p><span><span>while [ $x -le 10 ]; do</span></span></p><p><span><span><span>echo "Napis pojawił się po raz: $x"</span></span></span></p><p><span><span>x=$[x + 1]</span></span></p><p><span><span>done</span></span></p></td></tr><tr><td><p><span><span>until</span></span></p></td><td><p><span><span>until warunek</span></span></p><p><span><span>do</span></span></p><p><span><span><span>polecenie</span></span></span></p><p><span><span>done</span></span></p></td><td><p><span><span>x=1;</span></span></p><p><span><span>until [ $x -ge 10 ]; do</span></span></p><p><span><span>echo "Napis pojawił się po raz: $x"</span></span></p><p><span><span>x=$[x + 1]</span></span></p><p><span><span>done</span></span></p></td></tr><tr><td><p><span><span>read</span></span></p></td><td><p><span><span><span>read -opcje nazwa_zmiennej</span></span></span></p></td><td><p><span><span>echo -n "Wpisz coś:\a"</span></span></p><p><span><span>read wpis</span></span></p><p><span><span>echo "$wpis"</span></span></p></td></tr></tbody></table>
<h3 id="kilka-przykładów-operatorów-polecenia-test">Kilka przykładów operatorów polecenia &ldquo;test&rdquo;</h3>
<ul>
<li>-a plik istnieje</li>
<li>- plik istnieje i jest plikiem znakowym</li>
<li>-e plik istnieje</li>
<li>-h plik istnieje i jest linkiem symbolicznym</li>
<li>= sprawdza czy wyrażenia są równe</li>
<li>!= sprawdza czy wyrażenia są różne</li>
<li>-n wyrażenie ma długość większą niż 0</li>
<li>-d wyrażenie istnieje i jest katalogiem</li>
<li>-z wyrażenie ma zerową długość</li>
<li>-r można czytać plik</li>
<li>-w można zapisywać do pliku</li>
<li>-x można plik wykonać</li>
<li>-f plik istnieje i jest plikiem zwykłym</li>
<li>-N plik istnieje i był zmieniany od czasu jego ostatniego odczytu</li>
<li>plik1 -nt plik2 plik1 jest nowszy od pliku2</li>
<li>plik1 -ot plik2 plik1 jest starszy od pliku2</li>
<li>-lt mniejsze niż</li>
<li>-gt większe niż</li>
<li>-ge większe lub równe</li>
<li>-le mniejsze lub równe</li>
</ul>
<h3 id="zmienne">Zmienne</h3>
<h2 id="ekspansja-wyrażen">Ekspansja wyrażen</h2>
<p>W powłoce Bash, różne typy cudzysłowów (<code>&quot;&quot;</code> i <code>''</code>) mają różne zachowania w odniesieniu do interpretacji zawartych w nich ciągów znaków. Oto główne cechy obu typów:</p>
<h3 id="1-podwójne-cudzysłowy-">1. Podwójne Cudzysłowy <code>&quot;&quot;</code></h3>
<ul>
<li>
<p><strong>Ekspansja Zmiennych</strong>: Wewnątrz podwójnych cudzysłowów, zmienne są rozwijane (expanded). Oznacza to, że wartość zmiennej zostanie wstawiona w miejsce jej nazwy. Na przykład, <code>$HOME</code> zostanie zastąpione rzeczywistą ścieżką katalogu domowego użytkownika.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;Twój katalog domowy to: </span><span class="nv">$HOME</span><span class="s2">&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p><strong>Ekspansja Poleceń</strong>: Podwójne cudzysłowy pozwalają na ekspansję poleceń. Oznacza to, że polecenie umieszczone wewnątrz <code>$(...)</code> lub w starszej notacji <code>`...`</code> zostanie wykonane, a jego wynik zostanie wstawiony w miejsce ekspansji.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;Aktualna data to: </span><span class="k">$(</span>date<span class="k">)</span><span class="s2">&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p><strong>Ekspansja Wyrażeń Arytmetycznych</strong>: Wyrażenia arytmetyczne umieszczone w <code>$((...))</code> są rozwijane i obliczane.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;Dwa plus dwa to: </span><span class="k">$((</span><span class="m">2</span> <span class="o">+</span> <span class="m">2</span><span class="k">))</span><span class="s2">&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p><strong>Zachowanie Niektórych Znaków Specjalnych</strong>: Znaki takie jak <code>\n</code> (nowa linia) są interpretowane i przetwarzane.</p>
</li>
</ul>
<h3 id="2-pojedyncze-cudzysłowy--">2. Pojedyncze Cudzysłowy <code>' '</code></h3>
<ul>
<li>
<p><strong>Brak Ekspansji Zmiennych i Poleceń</strong>: Wewnątrz pojedynczych cudzysłowów, ekspansja zmiennych, poleceń i wyrażeń arytmetycznych nie zachodzi. Cały tekst jest traktowany dosłownie, jako stały ciąg znaków.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s1">&#39;Twój katalog domowy to: $HOME&#39;</span>
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p><strong>Dosłowna Interpretacja Zawartości</strong>: Wszystko, co znajduje się w pojedynczych cudzysłowach, jest interpretowane dosłownie. Oznacza to, że specjalne znaki Bash, takie jak <code>*</code>, <code>&amp;</code>, <code>#</code>, itp., nie są interpretowane jako specjalne i są traktowane jako zwykłe znaki.</p>
</li>
<li>
<p><strong>Brak Interpretacji Znaków Ucieczki</strong>: Znaki ucieczki, takie jak <code>\n</code>, nie są interpretowane, ale są traktowane jako zwykłe znaki.</p>
</li>
</ul>
<h3 id="special-parameters-in-linux-bashshell">Special Parameters in Linux Bash/Shell</h3>
<p><code>$0</code>
Used to reference the name of the current shell or current shell script. so you can use this if you want to print the name of the current shell script.</p>
<p><code>$#</code>
Reference the total number of parameters</p>
<p><code>$*</code>
Reference to all parameters passed to the script (However, when double-quoted -&gt; “$@” it will have different results from “$*”)</p>
<p>&ldquo;$*&rdquo;  is equivalent to  &ldquo;$1c$2c…&rdquo; , where c is the first character of the value of the  IFS  variable. If  IFS  is unset, the parameters are separated by spaces. If  IFS  is null, the parameters are joined without intervening separators.</p>
<p><code>$@</code>
Reference to all parameters passed to the script (However, when double-quoted -&gt; “$@” it will have different results from “$*”)
&ldquo;$@&rdquo;  is equivalent to  &ldquo;$1&rdquo; &ldquo;$2&rdquo; … .</p>
<p><code>$?</code>
Exit status from last command in foreground</p>
<p><code>$$</code>
Current Shell’s PID or Current script’s PID
In a () subshell, it expands to the process ID of the invoking shell, not the subshell.</p>
<p><code>$-</code>
Expands to the current option flags as specified upon invocation, by the  set  builtin command, or those set by the shell itself (such as the -i option).</p>
<p><code>$_</code>
At shell startup, set to the absolute pathname used to invoke the shell or shell script being executed as passed in the environment or argument list. Subsequently, expands to the last argument to the previous simple command executed in the foreground, after expansion. Also set to the full pathname used to invoke each command executed and placed in the environment exported to that command. When checking mail, this parameter holds the name of the mail file.</p>
<h3 id="other-special-characters-symbols">Other special characters, symbols</h3>
<p>Comment
<code>#</code>
Comment a single line</p>
<p><code>$var</code>
Prints the value of variable “var” defined within the script</p>
<p><code>$n</code>
Positional Parameter: Print value of nth argument passed to the bash script</p>
<p><code>&gt;</code>
Redirect output</p>
<p><code>&gt;&gt;</code>
Append to end of a file</p>
<p><code>&lt;</code>
Redirect input</p>
<p><code>()</code>
Execute in subshell
Similar to {} but where commands within are executed in a subshell (a new process). Used much like a sandbox, if a command causes side effects (like changing variables), it will have no effect on the current shell.</p>
<p><code>[]</code>
Matching any characters enclosed
Deprecated, an alias for the old test command. Commonly used in POSIX shell scripts. Lacks many features of [[ ]].</p>
<p><code>“</code>
Used to substitute output of enclosed command
Deprecated, use $( ) instead.</p>
<p><code>|</code>
Pipe output of last command’s results to next command as input</p>
<p>`````
Escape character</p>
<p><code>&amp;</code>
Run any process in the background</p>
<p><code>?</code>
Matching single character in filename</p>
<p><code>*</code>
Matching any characters</p>
<p><code>;</code>
Separate commands on the same line</p>
<p><code>~</code>
Home directory</p>
<p><code>!</code>
Command history</p>
<p><code>=</code>
Assign a value to a variable e.g. dir=/var/log
Whitespace is not allowed on either side of the = character</p>
<p><code>[[]]</code>
Test/Evaluate a condition expression to determine whether true or false , e.g. Checking file existence, compare values, strings etc.</p>
<p><code>{}</code>
Inline group, commands inside the curly braces are treated as if they were one command.</p>
<p><code>(())</code>
Arithmetic expression, characters such as +, -, *, and / are mathematical operators used for calculations. They can be used for variable assignments like (( a = 1 + 2 )) as well as tests like if (( a &gt; b )).</p>
<p><code>$(())</code>
Arithmetic expression, Comparable to the above, but the expression is replaced with the result of its arithmetic evaluation. Example: echo “The average is $(( (a+b)/10 ))”.</p>
<p><code>$[]</code>
Arithmetic expression
Deprecated, use $(( )) instead.</p>
<h2 id="zadania">Zadania</h2>
<ol>
<li>Utwórz nowy plik o nazwie pierwszy (polecenie touch), a następnie zapisz w nim skrypt wypisujący na ekranie komunikat „Systemy operacyjne”</li>
<li>Uzupełnij skrypt z zadania 1, tak by wypisywał także zawartość pliku .bashrc.</li>
<li>Korzystając z polecenia ln, utwórz dwa dowiązania do programu z zadania 1 - nazwa dowiązania jest dowolna, pierwsze dowiązanie powinno być symboliczne natomiast drugie tzw. twarde, opisz w komentarzu zadania różnicę pomiędzy tymi dowiązaniami.</li>
<li>Napisz skrypt moje_konto wypisujący informacje o nazwie Twojego konta, ścieżce dostępu do swojego katalogu głównego (użyj polecenia printenv | more, by zobaczyć wszystkie zmienne środowiskowe).</li>
<li>Napisz skrypt wypisz wypisujący zawartość bieżącego katalogu wraz z pełną informacją o plikach i katalogach posiadających określone rozszerzenie podane jako parametr skryptu.</li>
<li>Napisz skrypt sprawdzający czy plik podany jako parametr znajduje się w bieżącym katalogu.</li>
<li>Napisz skrypt parametry wypisujący liczbę parametrów z jakimi został uruchomiony.</li>
<li>Napisz skrypt wypisujący słownie cyfrę podaną przez użytkownika jako parametr wywołania tego skryptu. (np. dla parametru 2 skrypt zwróci słowo „dwa”).</li>
<li>Napisz skrypt, który wykryje czy liczba podana jako parametr jest dodatnia.</li>
<li>Napisz skrypt zwracający średnią arytmetyczną wszystkich liczb podanych jako parametry skryptu</li>
</ol>
]]></content:encoded></item><item><title>Systemy Operacyjne - Lab04</title><link>https://marcinklimek.github.io/student/2024-so/2023-11-28-so-lab-04/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://marcinklimek.github.io/student/2024-so/2023-11-28-so-lab-04/</guid><description>&lt;h1 id="lab-04">Lab 04&lt;/h1>
&lt;h2 id="uwagi-do-ćwiczeń">Uwagi do ćwiczeń&lt;/h2>
&lt;h3 id="tworzymy-sprawozdanie-z-wykonanych-czynności">Tworzymy sprawozdanie z wykonanych czynności&lt;/h3>
&lt;p>&lt;strong>Proszę o wykonywanie poniższych ćwiczeń dokumentując rezultaty&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>zapisanie numeru polecenia w nagłówku&lt;/li>
&lt;li>opis czynności&lt;/li>
&lt;li>wykonywanie zrzutów ekranu&lt;/li>
&lt;li>umieszczanie tych zrzutów jako zawartości do dowolnego edytora tekstu np. Word, Writer&lt;/li>
&lt;li>w żadnym przypadku nie kopiujemy manual-a lub helpa&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Sprawozdanie zapisujemy w formacie PDF i przesyłamy do systemu jako potwierdzenie swojego udziału w zajęciach i wykonania ćwiczeń.&lt;/strong>&lt;/p>
&lt;p>&lt;strong>Plik sprawozdania proszę zapisać jako: Sprawozdanie_lab04_JanKowalski.pdf, dla studenta o nazwisku Jan Kowalski.&lt;/strong>&lt;/p></description><content:encoded><![CDATA[<h1 id="lab-04">Lab 04</h1>
<h2 id="uwagi-do-ćwiczeń">Uwagi do ćwiczeń</h2>
<h3 id="tworzymy-sprawozdanie-z-wykonanych-czynności">Tworzymy sprawozdanie z wykonanych czynności</h3>
<p><strong>Proszę o wykonywanie poniższych ćwiczeń dokumentując rezultaty</strong></p>
<ul>
<li>zapisanie numeru polecenia w nagłówku</li>
<li>opis czynności</li>
<li>wykonywanie zrzutów ekranu</li>
<li>umieszczanie tych zrzutów jako zawartości do dowolnego edytora tekstu np. Word, Writer</li>
<li>w żadnym przypadku nie kopiujemy manual-a lub helpa</li>
</ul>
<p><strong>Sprawozdanie zapisujemy w formacie PDF i przesyłamy do systemu jako potwierdzenie swojego udziału w zajęciach i wykonania ćwiczeń.</strong></p>
<p><strong>Plik sprawozdania proszę zapisać jako: Sprawozdanie_lab04_JanKowalski.pdf, dla studenta o nazwisku Jan Kowalski.</strong></p>
<h2 id="zadania-część-pierwsza">Zadania, część pierwsza</h2>
<ol>
<li>
<p>Zapoznaj się i opisz polecenia: <strong>df</strong>, <strong>du</strong></p>
</li>
<li>
<p>Zapisz informacje dotyczące zasobów dyskowych Twojej maszyny wirtualnej.</p>
<ul>
<li>Ile wolnego miejsca posiadasz w zasobach dyskowych?          &hellip;[MB]</li>
<li>Ile miejsca zajmują zasoby zawarte w Twoim katalogu domowym? &hellip; [B]</li>
</ul>
</li>
<li>
<p>Opisz krótko działanie poszczególnych poleceń:</p>
<pre><code> du plik_lub_katalog
 du -m Katalog/
 du -mc Katalog/
 du -ms *
</code></pre>
</li>
<li>
<p>Jockery i Maski</p>
<pre><code> ? [] {} – do czego służą, jak ich używać?
</code></pre>
</li>
<li>
<p>Które z poniższych plików zostaną skopiowane w wyniku wykonania następującej komendy:</p>
<pre><code> cp ?m[abc0-4]*.{exe,txt,tar}* /tmp/

 math0.exe
 smart.txt
 m3p.exe
 om3.tar6
 abc04.txt
 smith4.txt
 ma0.exe.txt
 sma.txt-exe
 em3p.om3.t
 am1234.txt
 smi0-4.txt
</code></pre>
</li>
<li>
<p>Zastosuj powyższe jockery wraz ze znanymi ci już poleceniami (ls, echo, cat, more, less)</p>
<p>Wykonaj je, zaobserwuj wynik działania. Kilka przykładów:</p>
<pre><code> echo &quot;tekst&quot; &gt; plik.txt
 echo &quot;tekst drugi&quot; 1&gt; plik.txt
 echo &quot;Drugi wiersz&quot; &gt;&gt; plik.txt
 ls -l ttt 2&gt; plik.z.bledami
 ls -l | more
 ls -l | less
</code></pre>
</li>
<li>
<p>Co oznaczają poniższe jockery:</p>
<pre><code> &amp;
 &gt;
 1&gt;
 2&gt;
 &gt;&gt;
 &gt;&amp;
 |
 |&amp; 
</code></pre>
</li>
<li>
<p>Polecenie: cat</p>
<pre><code> cat plik Wyświetlanie na ekranie zawartości pliku
 cat &gt; plik Zapisywanie tekstu z klawiatury do pliku
 cat &gt;&gt; plik Dopisywanie tekstu z klawiatury do pliku
 cat dokumenty &gt; dokumenty_kopia Przepisanie zawartości pliku &quot;dokumenty&quot; do pliku &quot;dokumenty_kopia&quot;
 cat dokumenty &gt;&gt; dokumenty_kopia Dopisanie zawartości pliku &quot;dokumenty&quot; do pliku &quot;dokumenty_kopia&quot;
</code></pre>
<ul>
<li>Przekieruj odpowiednio polecenie df do pliku &ldquo;space_inf&rdquo; zapisując tym samym informacje o zasobach dyskowych (dane z pkt. 2).</li>
<li>Dopisz do pliku informację dotyczącą katalogu domowego pkt. 2</li>
<li>Korzystając z polecenia umożliwiającego pisanie tekstu z klawiatury zapisz do pliku info_student swoje imię i nazwisko</li>
<li>Dopisz zawartość pliku &ldquo;space_inf&rdquo; do pliku info_student</li>
</ul>
</li>
<li>
<p>Utwórz strukturę katalogów jednym poleceniem</p>
<pre><code> └── zadanie-1
     ├── katalog-a
     ├── katalog-b
     └── katalog-c
         ├── moje-dane
         └── notatki
</code></pre>
<p>W katalogu moje_dane utwórz pik dane.txt zawierający: Twoje imię i nazwisko, grupę, numer indeksu. Ustanów dla wszystkich katalogów z powyższego drzewa następujące prawa dostępu: drwx&mdash;r-x . Dla pliku dane.txt ustaw tylko prawa do czytania i pisania dla użytkownika (właściciela)</p>
</li>
<li>
<p>Napisz skrypt o nazwie server.sh,</p>
<p>Skrypt powinien przyjmować jeden z trzech parametrów:</p>
<pre><code> start, stop i restart. 
</code></pre>
<p>Po wybraniu jednej z dostępnych opcji skrypt powinien wyświetlić odpowiedni komunikat w przeciwnym razie poinformować o błędnym wywołaniu skryptu i zwrócic informację o dostępnych opcjach.</p>
</li>
<li>
<p>Napisz prostą grę</p>
<p>Gra ma polegać na wylosowaniu liczby od 0-10. Następnie pozwalająca w trzech krokach strzelić grającemu wylosowaną liczbę, informując podczas błędnego strzału o tym czy podana liczba jest za duża bądź też za mała. Pamiętaj o obsłudze błędów.</p>
</li>
</ol>
<h2 id="zadania-część-nieobowiązkowa-dodatkowa">Zadania, część nieobowiązkowa (dodatkowa)</h2>
<ul>
<li>E1. Opisz polecenia/programy: ftp, lynx, telnet</li>
<li>E2. Zapoznaj się z obsługą: ftp (z lini komend), lynx, telnet</li>
<li>E3. Pobierz z serwera publicznego ftp.task.gda.pl plik /pub/doc/Sieciowy_Savoir-vivre.txt
<br/>Pobrany plik umieść w rozwiązaniu zadania.</li>
</ul>
]]></content:encoded></item><item><title>Systemy Operacyjne - Lab05</title><link>https://marcinklimek.github.io/student/2024-so/2023-11-28-so-lab-05/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://marcinklimek.github.io/student/2024-so/2023-11-28-so-lab-05/</guid><description>&lt;h1 id="lab-05">Lab 05&lt;/h1>
&lt;h2 id="uwagi-do-ćwiczeń">Uwagi do ćwiczeń&lt;/h2>
&lt;h3 id="tworzymy-sprawozdanie-z-wykonanych-czynności">Tworzymy sprawozdanie z wykonanych czynności&lt;/h3>
&lt;p>&lt;strong>Proszę o wykonywanie poniższych ćwiczeń dokumentując rezultaty&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>zapisanie numeru polecenia w nagłówku&lt;/li>
&lt;li>opis czynności&lt;/li>
&lt;li>wykonywanie zrzutów ekranu&lt;/li>
&lt;li>umieszczanie tych zrzutów jako zawartości do dowolnego edytora tekstu np. Word, Writer&lt;/li>
&lt;li>w żadnym przypadku nie kopiujemy manual-a lub helpa&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Sprawozdanie zapisujemy w formacie PDF i przesyłamy do systemu jako potwierdzenie swojego udziału w zajęciach i wykonania ćwiczeń.&lt;/strong>&lt;/p>
&lt;p>&lt;strong>Plik sprawozdania proszę zapisać jako: Sprawozdanie_lab05_JanKowalski.pdf, dla studenta o nazwisku Jan Kowalski.&lt;/strong>&lt;/p></description><content:encoded><![CDATA[<h1 id="lab-05">Lab 05</h1>
<h2 id="uwagi-do-ćwiczeń">Uwagi do ćwiczeń</h2>
<h3 id="tworzymy-sprawozdanie-z-wykonanych-czynności">Tworzymy sprawozdanie z wykonanych czynności</h3>
<p><strong>Proszę o wykonywanie poniższych ćwiczeń dokumentując rezultaty</strong></p>
<ul>
<li>zapisanie numeru polecenia w nagłówku</li>
<li>opis czynności</li>
<li>wykonywanie zrzutów ekranu</li>
<li>umieszczanie tych zrzutów jako zawartości do dowolnego edytora tekstu np. Word, Writer</li>
<li>w żadnym przypadku nie kopiujemy manual-a lub helpa</li>
</ul>
<p><strong>Sprawozdanie zapisujemy w formacie PDF i przesyłamy do systemu jako potwierdzenie swojego udziału w zajęciach i wykonania ćwiczeń.</strong></p>
<p><strong>Plik sprawozdania proszę zapisać jako: Sprawozdanie_lab05_JanKowalski.pdf, dla studenta o nazwisku Jan Kowalski.</strong></p>
<h2 id="zadania">Zadania</h2>
<ol>
<li>
<p>Podstawy jezyka Python</p>
<ul>
<li>Skorzystaj z linku: [Learning Python](Learning Python)</li>
<li>Wykonaj zadania od modułu &ldquo;Hello, World!&rdquo; do &ldquo;Modules and Packages&rdquo;.</li>
<li>Do każdego poprawnie wykonanego zadania utwórz zrzut ekranu i umieść go w sprawozdaniu.</li>
</ul>
</li>
<li>
<p>Napisz skrypt w języku Python, wyświetlający w konsoli napis Hello World oraz informację o użytkowniku, który uruchomił ten skrypt. Pamiętaj o zastosowaniu poprawnego interpretera.</p>
</li>
<li>
<p>EXTRA (2 punkty) Napisz program w języku Python szyfrujący i deszyfrujący pliki za pomocą klucza lub hasła - pamiętaj o komentarzach tłumaczących działanie poszczególnych funkcji.</p>
</li>
</ol>
<p><em>Mała podpowiedź, w języku Python warto korzystać z importu gotowych bibliotek.</em></p>
]]></content:encoded></item><item><title>Systemy Operacyjne - Lab06</title><link>https://marcinklimek.github.io/student/2024-so/2024-01-10-so-lab-06/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://marcinklimek.github.io/student/2024-so/2024-01-10-so-lab-06/</guid><description>&lt;h1 id="lab-06">Lab 06&lt;/h1>
&lt;h2 id="uwagi-do-ćwiczeń">Uwagi do ćwiczeń&lt;/h2>
&lt;h3 id="tworzymy-sprawozdanie-z-wykonanych-czynności">Tworzymy sprawozdanie z wykonanych czynności&lt;/h3>
&lt;p>&lt;strong>Proszę o wykonywanie poniższych ćwiczeń, dokumentując rezultaty&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>zapisanie numeru polecenia w nagłówku&lt;/li>
&lt;li>opis czynności&lt;/li>
&lt;li>wykonywanie zrzutów ekranu&lt;/li>
&lt;li>umieszczanie tych zrzutów jako zawartości do dowolnego edytora tekstu np. Word, Writer&lt;/li>
&lt;li>w żadnym przypadku nie kopiujemy manual-a lub helpa&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Sprawozdanie zapisujemy w formacie PDF i przesyłamy do systemu jako potwierdzenie swojego udziału w zajęciach i wykonania ćwiczeń.&lt;/strong>&lt;/p>
&lt;p>&lt;strong>Plik sprawozdania proszę zapisać jako: Sprawozdanie_lab06_JanKowalski.pdf, dla studenta o nazwisku Jan Kowalski.&lt;/strong>&lt;/p></description><content:encoded><![CDATA[<h1 id="lab-06">Lab 06</h1>
<h2 id="uwagi-do-ćwiczeń">Uwagi do ćwiczeń</h2>
<h3 id="tworzymy-sprawozdanie-z-wykonanych-czynności">Tworzymy sprawozdanie z wykonanych czynności</h3>
<p><strong>Proszę o wykonywanie poniższych ćwiczeń, dokumentując rezultaty</strong></p>
<ul>
<li>zapisanie numeru polecenia w nagłówku</li>
<li>opis czynności</li>
<li>wykonywanie zrzutów ekranu</li>
<li>umieszczanie tych zrzutów jako zawartości do dowolnego edytora tekstu np. Word, Writer</li>
<li>w żadnym przypadku nie kopiujemy manual-a lub helpa</li>
</ul>
<p><strong>Sprawozdanie zapisujemy w formacie PDF i przesyłamy do systemu jako potwierdzenie swojego udziału w zajęciach i wykonania ćwiczeń.</strong></p>
<p><strong>Plik sprawozdania proszę zapisać jako: Sprawozdanie_lab06_JanKowalski.pdf, dla studenta o nazwisku Jan Kowalski.</strong></p>
<h2 id="zadania---część-pierwsza">Zadania - Część pierwsza</h2>
<p>Monitorowanie procesów:</p>
<ol>
<li>Użyj polecenia top lub htop (jeśli jest dostępne) aby monitorować procesy w czasie rzeczywistym.</li>
<li>Zidentyfikuj procesy, które zużywają najwięcej zasobów (CPU i pamięci RAM).</li>
<li>Zapisz, jak zmienia się zużycie zasobów przez te procesy w ciągu kilku minut.</li>
<li>Wybierz jeden z procesów monitorowanych w części 1.</li>
<li>Zmodyfikuj priorytet wybranego procesu, używając polecenia nice lub renice.</li>
<li>Obserwuj, jak zmiana priorytetu wpływa na alokację zasobów dla tego procesu.</li>
<li>Omów, jak zmiana priorytetu procesu wpłynęła na jego zachowanie i zużycie zasobów.</li>
<li>Wnioski: Wyjaśnij, w jakich sytuacjach zarządzanie priorytetami procesów może być przydatne.</li>
</ol>
<p>Obsługa repozytorium Github:</p>
<ol>
<li>Załóż konto na GitHub i utwórz nowe repozytorium.</li>
<li>Sklonuj repozytorium na lokalny komputer.</li>
<li>Wykonaj prosty kalkulator w języku python.
<ol>
<li>Przyjmuje 3 argumenty: calc.py &lt;liczba_1&gt; &lt; operacja + - &gt; &lt;liczba_2&gt;</li>
<li>Zapisuje wynik do pliku /tmp/wynik.txt</li>
</ol>
</li>
<li>Wykonaj pierwszy commit i push konfiguracji systemu do repozytorium na GitHub.</li>
<li>Dokumentuj wszystkie kroki i napisz krótki raport opisujący proces i napotkane wyzwania.</li>
<li>Na koniec utwórz skrypt w bash, skrypt ma być uruchamiany podczas startu naszego systemu i jego zadaniem jest uruchomienie naszego kalkulatora(crontab).</li>
</ol>
<h2 id="zadania---część-druga">Zadania - Część druga</h2>
<ol>
<li>Napisz skrypt w jezyku AWK zapisujący do pliku named1.txt tylko te linie, które zawierają słowo &ldquo;Zadanie&rdquo;.</li>
<li>Napisz skrypt w języku BASH, wyświetlający tylko te pliki, które zostały zmodyfikowane w miesiącu podanym jako parametr skryptu.</li>
</ol>
<h3 id="podstawy-awk">Podstawy AWK</h3>
<p><a href="https://www.youtube.com/watch?v=u0wSncMHAyM">Mała pomoc przy AWK - youtube</a></p>
<h4 id="basics">Basics</h4>
<p>AWK - programming language used for processing text data</p>
<p>Each program of this language consists of any number of params pattern {action}</p>
<p>Running scripts</p>
<pre><code>awk -f script_file.awk [parameters]
awk 'pattern {action}' [parameters]
</code></pre>
<p>Sample</p>
<pre><code>#!/bin/env awk

pattern1 {action1}
pattern2 {action2}
</code></pre>
<p>We give the right to exercise; we run like a shell script</p>
<p>Built-in variables:</p>
<ul>
<li>ARGC - the number of arguments given from the command line</li>
<li>ARGV - array of arguments given from the command line</li>
<li>CONVFMT - internal conversion of numbers into strings (default &ldquo;% .6g&rdquo;)</li>
<li>ENVIRON - array indexed by environment variable names (eg ENVIRON [&ldquo;OSTYPE&rdquo;] = &ldquo;linux-gnu&rdquo;)</li>
<li>FILENAME - the name of the currently processed file</li>
<li>FNR - record number in the currently processed file</li>
<li>FS - separator of input fields</li>
<li>NF - number of fields in the record</li>
<li>NR - the number of the record processed in the entire input stream</li>
<li>OFMT - printed number format (default &ldquo;% .6g&rdquo;)</li>
<li>OFS - output field separator (default space character)</li>
<li>ORS - separator of output records (default &ldquo;\n&rdquo;)</li>
<li>RS - input record separator (&quot;\n&quot; by default)</li>
</ul>
<p>Control instructions:</p>
<pre><code>if ( condition ) instruction[ else instruction ]
while ( condition ) instruction
do instruction while ( condition )
for ( initialization; condition; increment ) instruction
for ( variable in array ) instruction
break
continue
</code></pre>
]]></content:encoded></item><item><title>Systemy Operacyjne - Pomoc</title><link>https://marcinklimek.github.io/student/2024-so/2023-11-19-so-lab-help/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://marcinklimek.github.io/student/2024-so/2023-11-19-so-lab-help/</guid><description>&lt;h1 id="help">Help&lt;/h1>
&lt;h2 id="sudoers-add-to">Sudoers add to&lt;/h2>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">su -
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">usermod -aG sudo username
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol>
&lt;li>
&lt;p>&lt;strong>Log in as root&lt;/strong>: You need to have root access to edit the sudoers file. If you&amp;rsquo;re not already logged in as root, you can switch to the root user by typing &lt;code>su -&lt;/code> and entering the root password.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Edit the sudoers file&lt;/strong>: The recommended way to edit the sudoers file is by using the &lt;code>visudo&lt;/code> command. This command opens the sudoers file in a text editor and performs syntax checking on save, reducing the risk of breaking the file with incorrect syntax. Enter the command &lt;code>visudo&lt;/code> in the terminal.&lt;/p></description><content:encoded><![CDATA[<h1 id="help">Help</h1>
<h2 id="sudoers-add-to">Sudoers add to</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">su -
</span></span><span class="line"><span class="cl">usermod -aG sudo username
</span></span></code></pre></td></tr></table>
</div>
</div><ol>
<li>
<p><strong>Log in as root</strong>: You need to have root access to edit the sudoers file. If you&rsquo;re not already logged in as root, you can switch to the root user by typing <code>su -</code> and entering the root password.</p>
</li>
<li>
<p><strong>Edit the sudoers file</strong>: The recommended way to edit the sudoers file is by using the <code>visudo</code> command. This command opens the sudoers file in a text editor and performs syntax checking on save, reducing the risk of breaking the file with incorrect syntax. Enter the command <code>visudo</code> in the terminal.</p>
</li>
<li>
<p><strong>Add marcin to sudoers</strong>: In the editor, look for a line that looks like this: <code>root ALL=(ALL:ALL) ALL</code>. Below this line, add a new line for &lsquo;marcin&rsquo; with the same format: <code>marcin ALL=(ALL:ALL) ALL</code>. This line means that &lsquo;marcin&rsquo; can execute any command as any user.</p>
</li>
<li>
<p><strong>Save and exit</strong>: After adding the line, save the file and exit the editor. In most cases, <code>visudo</code> uses the nano editor, so you can save by pressing <code>Ctrl + O</code> and exit by pressing <code>Ctrl + X</code>.</p>
</li>
<li>
<p><strong>Test sudo access</strong>: Switch back to the &lsquo;marcin&rsquo; user account and try running a command with <code>sudo</code> to see if it works. For example, try <code>sudo apt update</code>.</p>
</li>
</ol>
<p>Remember, it&rsquo;s important to be cautious when granting sudo privileges, as it gives the user significant control over the system. Make sure that &lsquo;marcin&rsquo; is a trusted user who needs these privileges for legitimate reasons.</p>
<h2 id="linki">Linki</h2>
<p>Linki symboliczne (soft links) i twarde linki (hard links) to dwie metody tworzenia odniesień do plików w systemach Unix i Linux. Oba typy linków służą do tworzenia skrótów do plików, ale różnią się w kilku kluczowych aspektach:</p>
<ol>
<li>
<p><strong>Definicja</strong>:</p>
<ul>
<li><strong>Twarde linki (Hard Links)</strong>: Twardy link to dodatkowa nazwa dla istniejącego pliku. W systemie plików, zarówno twardy link, jak i oryginalny plik wskazują na tę samą lokalizację danych na dysku. Twarde linki działają tylko w obrębie tego samego systemu plików.</li>
<li><strong>Linki symboliczne (Soft/Symbolic Links)</strong>: Link symboliczny to specjalny rodzaj pliku, który wskazuje na inny plik lub katalog poprzez ścieżkę. Link symboliczny jest oddzielnym plikiem i zawiera jedynie odniesienie (ścieżkę) do docelowego pliku lub katalogu.</li>
</ul>
</li>
<li>
<p><strong>Zachowanie przy usunięciu oryginalnego pliku</strong>:</p>
<ul>
<li><strong>Twarde linki</strong>: Jeśli oryginalny plik zostanie usunięty, twardy link nadal działa i zapewnia dostęp do zawartości pliku, ponieważ wskazuje na te same dane na dysku.</li>
<li><strong>Linki symboliczne</strong>: Jeśli oryginalny plik zostanie usunięty, link symboliczny stanie się nieaktywny (&ldquo;zepsuty&rdquo;) i nie będzie mógł zapewnić dostępu do usuniętych danych.</li>
</ul>
</li>
<li>
<p><strong>Przechodzenie przez systemy plików</strong>:</p>
<ul>
<li><strong>Twarde linki</strong>: Nie mogą być tworzone między różnymi systemami plików, ponieważ bezpośrednio wskazują na konkretne miejsce na dysku.</li>
<li><strong>Linki symboliczne</strong>: Mogą wskazywać na pliki i katalogi w różnych systemach plików.</li>
</ul>
</li>
<li>
<p><strong>Zajmowane miejsce</strong>:</p>
<ul>
<li><strong>Twarde linki</strong>: Nie zajmują dodatkowego miejsca na dysku, ponieważ są tylko dodatkowym wpisem w tabeli inodów systemu plików.</li>
<li><strong>Linki symboliczne</strong>: Zajmują niewielką ilość miejsca na dysku, ponieważ są osobnymi plikami zawierającymi ścieżkę do celu.</li>
</ul>
</li>
<li>
<p><strong>Widoczność zmian</strong>:</p>
<ul>
<li><strong>Twarde linki</strong>: Każda zmiana w pliku jest od razu widoczna we wszystkich twardych linkach, ponieważ wskazują one na te same dane.</li>
<li><strong>Linki symboliczne</strong>: Zmiany w oryginalnym pliku są widoczne poprzez link, ale zmiana nazwy lub usunięcie oryginalnego pliku spowoduje, że link symboliczny stanie się nieaktywny.</li>
</ul>
</li>
</ol>
<p>W praktyce, linki symboliczne są bardziej elastyczne i powszechnie stosowane, zwłaszcza kiedy potrzebna jest odniesienie do katalogów lub plików na różnych systemach plików. Twarde linki są używane rzadziej, głównie z powodu ich ograniczeń i sposobu, w jaki działają na poziomie systemu plików.</p>
<p>Typowy przykład użycia twardych linków w systemach Linux i Unix to tworzenie dodatkowych odniesień do plików bez konieczności duplikowania ich zawartości. Jednym z konkretnych zastosowań twardych linków jest system zarządzania kopiami zapasowymi, takich jak metoda używana przez narzędzie <code>rsnapshot</code>.</p>
<p><strong>Przykład z użyciem <code>rsnapshot</code> lub podobnych narzędzi do tworzenia kopii zapasowych:</strong></p>
<p>W systemach kopii zapasowych, które wykorzystują twarde linki, kopie zapasowe są tworzone w taki sposób, że przy każdym nowym backupie, pliki, które nie uległy zmianie od ostatniej kopii, są reprezentowane przez twarde linki do wcześniej zbackupowanych plików, a nie przez ich pełne kopie. Oto jak to działa:</p>
<ol>
<li>
<p><strong>Pierwszy Backup</strong>: W trakcie pierwszego backupu, wszystkie pliki są fizycznie kopiowane do lokalizacji backupu.</p>
</li>
<li>
<p><strong>Kolejne Backupy</strong>: W trakcie kolejnych backupów, tylko pliki, które uległy zmianie od ostatniego backupu, są kopiowane. Pliki, które nie uległy zmianie, są reprezentowane przez twarde linki do wcześniej zapisanych plików.</p>
</li>
</ol>
<p>Korzyści z tego podejścia:</p>
<ul>
<li><strong>Oszczędność Miejsca</strong>: Ponieważ niezmienione pliki nie są kopiowane wielokrotnie, a jedynie tworzone są ich twarde linki, oszczędza się znaczną ilość miejsca na dysku.</li>
<li><strong>Efektywność</strong>: Twarde linki są tworzone znacznie szybciej niż kopiowanie całych plików, co sprawia, że proces backupu jest szybszy.</li>
<li><strong>Prostota Zarządzania</strong>: Każda kopia backupu wygląda jak kompletny zestaw danych, mimo że większość plików jest współdzielona między różnymi backupami.</li>
</ul>
<p>To podejście sprawdza się szczególnie w przypadku, gdy wiele plików pozostaje niezmienionych między kolejnymi backupami, co jest typowe dla większości systemów i użytkowników. Twarde linki w tej sytuacji pozwalają na efektywne i ekonomiczne zarządzanie przestrzenią dyskową bez utraty informacji o historii zmian plików.</p>
<h2 id="katalogi">Katalogi</h2>
<p>W systemach operacyjnych opartych na Unixie, takich jak Linux, istnieje szereg standardowych katalogów, z których każdy pełni określoną funkcję. Oto charakterystyczne cechy najważniejszych z nich:</p>
<ol>
<li>
<p><strong><code>/</code> (Root)</strong>: To jest katalog główny, korzeń całego systemu plików. Wszystkie inne katalogi są zamontowane bezpośrednio lub pośrednio w tym katalogu.</p>
</li>
<li>
<p><strong><code>/bin</code> (Binary)</strong>: Zawiera podstawowe programy (binaria) używane przez wszystkich użytkowników systemu, takie jak powłoka (shell), cp, mv, rm, cat itp.</p>
</li>
<li>
<p><strong><code>/boot</code></strong>: Zawiera pliki niezbędne do rozruchu systemu, w tym kernel (jądro systemu) i bootloader, np. GRUB.</p>
</li>
<li>
<p><strong><code>/dev</code> (Devices)</strong>: Zawiera pliki specjalne, które reprezentują urządzenia, zarówno blokowe, jak i znakowe, np. dyski twarde, terminaly.</p>
</li>
<li>
<p><strong><code>/etc</code></strong>: Zawiera konfiguracje systemowe specyficzne dla danej maszyny, czyli skrypty startowe systemu, pliki konfiguracyjne usług/systemów.</p>
</li>
<li>
<p><strong><code>/home</code></strong>: Domyślny katalog dla danych użytkowników. Każdy zarejestrowany użytkownik posiada tu swój podkatalog.</p>
</li>
<li>
<p><strong><code>/lib</code> (Library)</strong>: Zawiera biblioteki współdzielone i moduły jądra niezbędne do uruchomienia systemu i programów w katalogu <code>/bin</code> oraz <code>/sbin</code>.</p>
</li>
<li>
<p><strong><code>/media</code></strong>: Miejsce do montowania zewnętrznych nośników danych, takich jak dyski USB, CD-ROMy.</p>
</li>
<li>
<p><strong><code>/mnt</code> (Mount)</strong>: Tradycyjnie używany do tymczasowego montowania systemów plików, chociaż w nowszych dystrybucjach częściej używa się <code>/media</code>.</p>
</li>
<li>
<p><strong><code>/opt</code> (Optional)</strong>: Przeznaczony dla dodatkowego oprogramowania i aplikacji (często tych zainstalowanych z zewnątrz standardowego systemu zarządzania pakietami).</p>
</li>
<li>
<p><strong><code>/proc</code></strong>: Wirtualny system plików, który udostępnia interfejs do struktur danych jądra. Nie jest przechowywany na dysku, lecz tworzony w czasie działania systemu.</p>
</li>
<li>
<p><strong><code>/root</code></strong>: Katalog domowy użytkownika root (superużytkownika), zazwyczaj nie umieszczony w <code>/home</code>, aby zapewnić bezpieczeństwo.</p>
</li>
<li>
<p><strong><code>/sbin</code> (System Binary)</strong>: Zawiera ważne programy do administracji systemem, które są zwykle potrzebne do uruchamiania, naprawy lub odzyskiwania systemu.</p>
</li>
<li>
<p><strong><code>/srv</code> (Service)</strong>: Zawiera dane związane z usługami serwerowymi uruchamianymi na systemie.</p>
</li>
<li>
<p><strong><code>/tmp</code> (Temporary)</strong>: Przechowuje pliki tymczasowe tworzone przez aplikacje i system. Zawartość tego katalogu jest często czyszczona przy uruchomieniu systemu.</p>
</li>
<li>
<p><strong><code>/usr</code> (Unix System Resources)</strong>: Druga, po <code>/</code>, największa hierarchia, zawierająca większość aplikacji i narzędzi użytkownika, bibliotek, dokumentacji itp.</p>
</li>
<li>
<p><strong><code>/var</code> (Variable)</strong>: Zawiera zmienne dane, takie jak logi, bazy danych, pliki spoolowe i pliki tymczasowe, które mogą rosnąć w czasie.</p>
</li>
</ol>
<p>Każdy z tych katalogów odgrywa ważną rolę w organizacji i funkcjonowaniu systemu operacyjnego i jest integralną częścią jego struktury.</p>
<h2 id="zamkniecie-maszyny">zamkniecie maszyny</h2>
<p>W systemach operacyjnych typu Unix, takich jak Linux, polecenia <code>shutdown -r now</code> i <code>systemctl reboot</code> są używane do restartowania systemu, ale istnieją między nimi pewne różnice, zarówno pod względem ich działania, jak i zachowania systemu:</p>
<ol>
<li>
<p><strong><code>shutdown -r now</code></strong>:</p>
<ul>
<li>Polecenie <code>shutdown</code> jest tradycyjnym narzędziem Unix do zamykania lub restartowania systemu.</li>
<li>Parametr <code>-r</code> oznacza restart (reboot), a <code>now</code> określa, że ma to nastąpić natychmiast.</li>
<li><code>shutdown</code> stopniowo zamyka system, zamykając wszystkie procesy, wysyłając powiadomienia do zalogowanych użytkowników i synchronizując dyski przed restartem.</li>
<li><code>shutdown</code> zapewnia bezpieczne wyłączanie systemu, co jest szczególnie ważne w środowiskach serwerowych lub w przypadku wielu użytkowników.</li>
</ul>
</li>
<li>
<p><strong><code>systemctl reboot</code></strong>:</p>
<ul>
<li><code>systemctl</code> to narzędzie do zarządzania systemem i usługami w systemd, który jest obecnie standardowym systemem inicjującym w wielu dystrybucjach Linux.</li>
<li>Polecenie <code>systemctl reboot</code> natychmiast inicjuje restart systemu, bez wysyłania dodatkowych powiadomień do zalogowanych użytkowników.</li>
<li>Jest to bardziej bezpośrednie polecenie do restartowania systemu i jest częścią nowszej filozofii zarządzania systemami opartą na systemd.</li>
<li>Podobnie jak <code>shutdown</code>, <code>systemctl reboot</code> także dba o bezpieczne zamknięcie systemu, zamykając procesy i synchronizując dyski.</li>
</ul>
</li>
</ol>
<p><strong>Podsumowanie</strong>:</p>
<ul>
<li>Główna różnica polega na tym, że <code>shutdown -r now</code> jest bardziej &ldquo;łagodne&rdquo; i tradycyjne, zapewniając pewne powiadomienia i stopniowe zamykanie systemu, podczas gdy <code>systemctl reboot</code> jest częścią nowszego systemd i działa nieco szybciej i bezpośredniej.</li>
<li>Oba polecenia są bezpieczne do użytku i osiągają ten sam cel – restartują system, ale różnią się sposobem, w jaki informują użytkowników i zamykają bieżące procesy.</li>
</ul>
<p>Dowiązanie symboliczne:</p>
<p><code>lrwxrwxrwx 1 root root 14 Sep 20 14:15 /usr/sbin/reboot -&gt; /bin/systemctl</code></p>
<h2 id="systemctl">systemctl</h2>
<p><code>systemctl</code> to narzędzie do zarządzania systemem i usługami w systemd, które jest standardowym systemem inicjującym i menedżerem systemu i usług w wielu nowoczesnych dystrybucjach Linuxa. Oto lista typowych poleceń, które są używane z <code>systemctl</code>:</p>
<ol>
<li>
<p><strong>Zarządzanie Stanem Systemu</strong></p>
<ul>
<li><code>systemctl reboot</code>: Restartuje system.</li>
<li><code>systemctl poweroff</code>: Wyłącza system.</li>
<li><code>systemctl suspend</code>: Zawiesza system.</li>
<li><code>systemctl hibernate</code>: Hibernuje system.</li>
<li><code>systemctl hybrid-sleep</code>: Przechodzi w stan uśpienia hybrydowego (połączenie hibernacji i uśpienia).</li>
</ul>
</li>
<li>
<p><strong>Zarządzanie Usługami</strong></p>
<ul>
<li><code>systemctl start [nazwa_usługi]</code>: Uruchamia daną usługę.</li>
<li><code>systemctl stop [nazwa_usługi]</code>: Zatrzymuje daną usługę.</li>
<li><code>systemctl restart [nazwa_usługi]</code>: Restartuje daną usługę.</li>
<li><code>systemctl reload [nazwa_usługi]</code>: Przeładowuje konfigurację danej usługi bez zatrzymywania jej.</li>
<li><code>systemctl enable [nazwa_usługi]</code>: Włącza usługę, aby uruchamiała się przy starcie systemu.</li>
<li><code>systemctl disable [nazwa_usługi]</code>: Wyłącza usługę z automatycznego uruchamiania przy starcie systemu.</li>
<li><code>systemctl status [nazwa_usługi]</code>: Wyświetla aktualny stan danej usługi.</li>
</ul>
</li>
<li>
<p><strong>Zarządzanie Celami (Targets)</strong></p>
<ul>
<li><code>systemctl isolate [nazwa_celu]</code>: Przełącza system do określonego celu (np. graphical.target).</li>
<li><code>systemctl set-default [nazwa_celu]</code>: Ustawia domyślny cel, do którego system będzie uruchamiany.</li>
</ul>
</li>
<li>
<p><strong>Diagnostyka i Logi</strong></p>
<ul>
<li><code>systemctl list-units</code>: Wyświetla wszystkie aktywne jednostki (usługi, gniazda, timery itp.).</li>
<li><code>systemctl list-unit-files</code>: Wyświetla listę wszystkich jednostek wraz z ich aktualnym stanem włączenia.</li>
<li><code>systemctl daemon-reload</code>: Odświeża konfigurację systemd po zmianach w plikach jednostek.</li>
<li><code>systemctl cat [nazwa_usługi]</code>: Wyświetla zawartość pliku konfiguracyjnego danej usługi.</li>
</ul>
</li>
<li>
<p><strong>Zarządzanie Gniazdami i Timerami</strong></p>
<ul>
<li><code>systemctl list-sockets</code>: Wyświetla aktywne gniazda.</li>
<li><code>systemctl list-timers</code>: Wyświetla aktywne timery.</li>
</ul>
</li>
</ol>
<p><code>systemctl</code> jest potężnym narzędziem, które pozwala na zaawansowane zarządzanie różnymi aspektami systemu i usług w systemach Linux korzystających z systemd. Powyższe polecenia to tylko podstawowe operacje, które można wykonać za pomocą tego narzędzia.</p>
<h3 id="jak-naprawić-problem-z-vboxaddserice-loaded-failed">Jak naprawić problem z &ldquo;vboxadd.serice loaded failed&rdquo;</h3>
<p>Komunikat &ldquo;vboxadd.service loaded failed failed&rdquo;, który widzisz w wyniku polecenia <code>systemctl list-units</code>, wskazuje na problem z usługą <code>vboxadd</code>, która jest częścią VirtualBox Guest Additions. VirtualBox Guest Additions to zestaw narzędzi i sterowników zaprojektowanych, aby poprawić wydajność i użyteczność systemów operacyjnych gości w VirtualBox.</p>
<p>Oto kroki, które można podjąć, aby rozwiązać ten problem:</p>
<ol>
<li>
<p><strong>Sprawdzenie Stanu Usługi</strong>: Najpierw sprawdź dokładny status usługi i wszelkie komunikaty o błędach:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">systemctl status vboxadd.service
</span></span></code></pre></td></tr></table>
</div>
</div><p>Uważnie przeczytaj wyjście tego polecenia, aby zrozumieć, dlaczego usługa nie uruchamia się poprawnie.</p>
</li>
<li>
<p><strong>Ponowne Uruchomienie Usługi</strong>: Spróbuj ręcznie uruchomić usługę, aby zobaczyć, czy to rozwiąże problem:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo systemctl restart vboxadd.service
</span></span></code></pre></td></tr></table>
</div>
</div><p>Następnie sprawdź, czy usługa uruchomiła się poprawnie:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">systemctl status vboxadd.service
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p><strong>Reinstalacja VirtualBox Guest Additions</strong>: Jeśli problem nadal występuje, możliwe, że należy przeinstalować VirtualBox Guest Additions. To można zrobić z poziomu systemu gościa. W zależności od dystrybucji, kroki mogą się nieco różnić. Typowo, należy zamontować obraz Guest Additions i uruchomić skrypt instalacyjny:</p>
<ul>
<li>W VirtualBox, włącz maszynę wirtualną i wybierz &ldquo;Devices&rdquo; &gt; &ldquo;Insert Guest Additions CD image&hellip;&rdquo;.</li>
<li>W systemie gościa, zamontuj CD i uruchom skrypt instalacyjny.</li>
</ul>
</li>
<li>
<p><strong>Aktualizacja VirtualBox</strong>: Upewnij się, że Twoja wersja VirtualBox na hoście jest aktualna. Stare wersje mogą powodować problemy z kompatybilnością.</p>
</li>
<li>
<p><strong>Sprawdzenie Logów Systemowych</strong>: Dodatkowe informacje mogą znajdować się w logach systemowych. Możesz je sprawdzić za pomocą polecenia:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">journalctl -xe
</span></span></code></pre></td></tr></table>
</div>
</div><p>Szukaj wpisów związanych z <code>vboxadd.service</code>.</p>
</li>
</ol>
<h2 id="skrót-na-klawiaturze-do-terminala-w-xfce">Skrót na klawiaturze do terminala w XFCE</h2>
<p>W środowisku graficznym XFCE, domyślnym skrótem klawiaturowym do uruchomienia terminala jest zwykle <code>Ctrl</code> + <code>Alt</code> + <code>T</code>. Jednakże, warto zauważyć, że ten skrót może być różny w zależności od dystrybucji i tego, czy zostały dokonane jakieś indywidualne modyfikacje w ustawieniach skrótów klawiszowych.</p>
<p>Jeśli ten skrót nie działa w twoim systemie Debian z XFCE, możesz go ustawić lub sprawdzić, jaki jest aktualny skrót, wykonując następujące kroki:</p>
<ol>
<li>Otwórz <strong>Ustawienia</strong> XFCE.</li>
<li>Przejdź do sekcji <strong>Klawiatura</strong>.</li>
<li>Wybierz zakładkę <strong>Skróty aplikacji</strong>.</li>
<li>Znajdź lub dodaj nowy skrót dla terminala. Zazwyczaj poleceń uruchamiających terminal to <code>xfce4-terminal</code> lub po prostu <code>terminal</code>.</li>
</ol>
<p>Jeśli nie widzisz tam skrótu <code>Ctrl</code> + <code>Alt</code> + <code>T</code> dla terminala, możesz go dodać ręcznie:</p>
<ul>
<li>Kliknij <strong>Dodaj</strong>.</li>
<li>Wprowadź <code>xfce4-terminal</code> jako polecenie.</li>
<li>Naciśnij kombinację <code>Ctrl</code> + <code>Alt</code> + <code>T</code> (lub inną według preferencji), gdy zostaniesz poproszony o wskazanie skrótu klawiszowego.</li>
</ul>
<h1 id="wirtualizacja">Wirtualizacja</h1>
<h2 id="kubernetes">Kubernetes</h2>
<p>Kubernetes, często skracane do &ldquo;K8s&rdquo;, to otwartoźródłowy system do automatyzacji wdrażania, skalowania i zarządzania aplikacjami kontenerowymi. Jest to narzędzie stworzone przez Google, które stało się standardem w świecie zarządzania kontenerami. Oto kilka kluczowych cech charakterystycznych Kubernetes:</p>
<ol>
<li>
<p><strong>Orkiestracja Kontenerów</strong>: Kubernetes umożliwia uruchamianie i zarządzanie kontenerami na dużą skalę. Kontenery mogą być wdrażane, skalowane i zarządzane w sposób zautomatyzowany.</p>
</li>
<li>
<p><strong>Abstrakcja od Infrastruktury</strong>: Kubernetes abstrahuje infrastrukturę sprzętową od aplikacji, co pozwala na łatwe przenoszenie aplikacji między różnymi środowiskami, od lokalnych do chmur publicznych.</p>
</li>
<li>
<p><strong>Samonaprawialność</strong>: System może automatycznie restartować kontenery, które przestały działać, zastępować kontenery, wykrywać i nie używać maszyn, które nie odpowiadają na zapytania, oraz skalować aplikacje w oparciu o zapotrzebowanie.</p>
</li>
<li>
<p><strong>Skalowalność i Łatwość Zarządzania</strong>: Kubernetes umożliwia łatwe skalowanie aplikacji w górę lub w dół, automatycznie lub manualnie, oraz sprawia, że zarządzanie aplikacjami jest bardziej efektywne.</p>
</li>
<li>
<p><strong>Usługi Dostępności i Balansowanie Obciążenia</strong>: Kubernetes może eksponować kontener na określony adres IP lub nazwę hosta. Jeśli ruch do kontenera jest duży, Kubernetes potrafi balansować obciążenie i dystrybuować ruch sieciowy, aby zapewnić stabilność działania aplikacji.</p>
</li>
<li>
<p><strong>Zarządzanie Konfiguracją i Sekretami</strong>: Umożliwia zarządzanie konfiguracją i sekretami, co jest kluczowe w przypadku aplikacji wymagających bezpiecznego przechowywania i zarządzania poufnymi danymi.</p>
</li>
<li>
<p><strong>Automatyczne Rozwijanie i Wycofywanie Zmian</strong>: Kubernetes umożliwia automatyczne rozwijanie i wycofywanie zmian, co jest szczególnie przydatne w procesach ciągłej integracji i ciągłego wdrażania (CI/CD).</p>
</li>
<li>
<p><strong>Deklaratywne Konfiguracje</strong>: Kubernetes wykorzystuje deklaratywne konfiguracje do zarządzania aplikacjami, co ułatwia utrzymanie i aktualizowanie stanu pożądanego dla wdrożeń.</p>
</li>
<li>
<p><strong>Wsparcie Społeczności i Ekosystemu</strong>: Jako projekt prowadzony przez Cloud Native Computing Foundation (CNCF), Kubernetes cieszy się silnym wsparciem społeczności i rozbudowanym ekosystemem narzędzi i dodatków.</p>
</li>
<li>
<p><strong>Wszechstronność</strong>: Kubernetes jest odpowiedni zarówno dla małych, jak i dużych, rozbudowanych aplikacji, dzięki swojej modułowości i możliwości dostosowania do różnych wymagań.</p>
</li>
</ol>
<p>Kubernetes znacząco wpłynął na sposób, w jaki organizacje wdrażają i zarządzają aplikacjami, szczególnie w środowiskach chmurowych i w kontekście mikrousług.</p>
<h1 id="apt-sources">apt sources</h1>
<pre><code>  deb https://ftp.debian.org/debian/ bookworm contrib main non-free non-free-firmware
  # deb-src https://ftp.debian.org/debian/ bookworm contrib main non-free non-free-firmware

  deb https://ftp.debian.org/debian/ bookworm-updates contrib main non-free non-free-firmware
  # deb-src https://ftp.debian.org/debian/ bookworm-updates contrib main non-free non-free-firmware

  deb https://ftp.debian.org/debian/ bookworm-proposed-updates contrib main non-free non-free-firmware
  # deb-src https://ftp.debian.org/debian/ bookworm-proposed-updates contrib main non-free non-free-firmware

  deb https://ftp.debian.org/debian/ bookworm-backports contrib main non-free non-free-firmware
  # deb-src https://ftp.debian.org/debian/ bookworm-backports contrib main non-free non-free-firmware

  deb https://security.debian.org/debian-security/ bookworm-security contrib main non-free non-free-firmware
  # deb-src https://security.debian.org/debian-security/ bookworm-security contrib main non-free non-free-firmware 
</code></pre>
<h1 id="wybrane-polecenia-systemu">Wybrane polecenia systemu</h1>
<h2 id="wiadomości-wysyłane-za-pomocą-polecenia-write">wiadomości wysyłane za pomocą polecenia <code>write</code></h2>
<p>Aby móc odbierać wiadomości wysyłane za pomocą polecenia <code>write</code> w systemie Debian, należy upewnić się, że kilka warunków jest spełnionych:</p>
<ol>
<li>
<p><strong>Uruchomione Usługi</strong>:</p>
<ul>
<li>Upewnij się, że usługi odpowiedzialne za obsługę wiadomości, takie jak <code>write</code>, <code>talk</code>, itp., są aktywne na systemie.</li>
</ul>
</li>
<li>
<p><strong>Sprawdzenie Stanu <code>mesg</code></strong>:</p>
<ul>
<li>Polecenie <code>write</code> używa TTY (terminala) użytkownika do wysyłania wiadomości. Aby móc odbierać wiadomości, użytkownik musi mieć włączoną opcję odbioru wiadomości na swoim TTY. Można to sprawdzić, wpisując polecenie <code>mesg</code>.</li>
<li>Jeśli wynik to <code>is y</code>, oznacza to, że odbiór wiadomości jest włączony. Jeśli wynik to <code>is n</code>, odbiór wiadomości jest wyłączony.</li>
<li>Aby włączyć odbiór wiadomości, wpisz <code>mesg y</code>.</li>
</ul>
</li>
<li>
<p><strong>Zezwolenie na Wiadomości od Innych Użytkowników</strong>:</p>
<ul>
<li>Jeśli masz włączone środowisko graficzne, może być konieczne sprawdzenie ustawień prywatności w swoim menedżerze okien lub środowisku pulpitu, aby upewnić się, że zezwala ono na odbiór wiadomości od innych użytkowników.</li>
</ul>
</li>
<li>
<p><strong>Sprawdzenie Polityki Bezpieczeństwa</strong>:</p>
<ul>
<li>W niektórych środowiskach zaostrzone polityki bezpieczeństwa mogą blokować komunikację między użytkownikami za pomocą poleceń takich jak <code>write</code>. Upewnij się, że taka komunikacja jest dozwolona w ramach polityk bezpieczeństwa systemu.</li>
</ul>
</li>
<li>
<p><strong>Sprawdzenie Zapory Sieciowej i SELinux</strong>:</p>
<ul>
<li>Jeśli na systemie działają zaawansowane mechanizmy bezpieczeństwa, takie jak zapora sieciowa lub SELinux, mogą one wpływać na możliwość korzystania z poleceń takich jak <code>write</code>. Upewnij się, że nie blokują one tego rodzaju komunikacji.</li>
</ul>
</li>
</ol>
<p>Po wykonaniu powyższych kroków powinieneś być w stanie odbierać wiadomości wysyłane za pomocą polecenia <code>write</code> w systemie Debian. Pamiętaj, że polecenie <code>write</code> działa na poziomie terminala, więc zarówno nadawca, jak i odbiorca muszą być zalogowani w terminalu.</p>
<p>apropos
finger
chfn
.plan</p>
<p>apt list &ndash;installed
apt install mc htop tmux net-ttols neofetch iptraf etckeeper lynis fail2ban glances</p>
<h1 id="skrypty">Skrypty</h1>
<h2 id="edytor-nano">Edytor nano</h2>
<h3 id="edycja-ilosci-tabów">Edycja ilosci tabów</h3>
<p>Aby zmienić ilość znaków, jaką reprezentuje tabulacja (tab) w edytorze <code>nano</code>, możesz użyć opcji konfiguracyjnych w pliku konfiguracyjnym <code>nano</code> lub bezpośrednio w linii poleceń. Oto sposoby, jak to zrobić:</p>
<h4 id="1-użycie-opcji-w-linii-poleceń">1. Użycie Opcji w Linii Poleceń</h4>
<p>Możesz uruchomić <code>nano</code> z opcją <code>-T</code>, aby ustawić szerokość tabulacji. Na przykład, aby ustawić szerokość tabulacji na 4 znaki, użyj:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">nano -T4 plik.txt
</span></span></code></pre></td></tr></table>
</div>
</div><h4 id="2-edycja-pliku-konfiguracyjnego-nano">2. Edycja Pliku Konfiguracyjnego Nano</h4>
<p>Możesz również ustawić tę opcję w pliku konfiguracyjnym <code>nano</code>, którym zazwyczaj jest <code>~/.nanorc</code> (lub globalny plik konfiguracyjny w <code>/etc/nanorc</code>, zależnie od systemu i uprawnień).</p>
<ol>
<li>
<p>Otwórz plik <code>~/.nanorc</code> w edytorze <code>nano</code>:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">nano ~/.nanorc
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p>Dodaj linię konfiguracyjną określającą szerokość tabulacji. Na przykład, aby ustawić szerokość tabulacji na 4 znaki, dodaj:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">set tabsize 4
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p>Zapisz i zamknij plik (<code>Ctrl+O</code>, <code>Enter</code>, <code>Ctrl+X</code>).</p>
</li>
</ol>
<p>Po zmodyfikowaniu ustawień w pliku <code>~/.nanorc</code>, każde nowe uruchomienie <code>nano</code> będzie używać tych ustawień, chyba że zostaną nadpisane przez opcje w linii poleceń.</p>
<h4 id="ważne-uwagi">Ważne Uwagi</h4>
<ul>
<li>Upewnij się, że masz uprawnienia do edycji pliku <code>~/.nanorc</code>. Jeśli plik nie istnieje, możesz go stworzyć.</li>
<li>Zmiany w pliku <code>~/.nanorc</code> wpłyną tylko na użytkownika, który dokonał tych zmian, podczas gdy edycja <code>/etc/nanorc</code> wpłynie na wszystkich użytkowników systemu.</li>
<li>Opcje linii poleceń mają pierwszeństwo przed ustawieniami w pliku konfiguracyjnym.</li>
</ul>
<h3 id="copypaste">Copy/Paste</h3>
<p>W edytorze <code>nano</code>, kopiowanie i wklejanie bloku tekstu wymaga kilku kroków, ponieważ <code>nano</code> nie posiada standardowej funkcjonalności schowka tak jak wiele graficznych edytorów. Oto, jak to zrobić:</p>
<h3 id="krok-po-kroku">Krok po Kroku</h3>
<ol>
<li>
<p><strong>Zaznaczanie Tekstu</strong>:</p>
<ul>
<li>Przejdź do początku tekstu, który chcesz skopiować.</li>
<li>Naciśnij <code>Alt</code> + <code>A</code> (lub <code>^</code> + <code>^</code> w niektórych konfiguracjach) aby rozpocząć zaznaczanie tekstu. Zobaczysz, że na dole ekranu pojawi się informacja &lsquo;Mark Set&rsquo;.</li>
<li>Przesuń kursor, aby zaznaczyć pożądany blok tekstu.</li>
</ul>
</li>
<li>
<p><strong>Kopiowanie Tekstu</strong>:</p>
<ul>
<li>Po zaznaczeniu tekstu naciśnij <code>Alt</code> + <code>^</code> (czyli <code>Alt</code> + <code>6</code>). To skopiuje zaznaczony tekst do &ldquo;bufora wycinka&rdquo; w nano.</li>
</ul>
</li>
<li>
<p><strong>Przechodzenie do Miejsca Docelowego</strong>:</p>
<ul>
<li>Przenieś kursor do miejsca, gdzie chcesz wkleić skopiowany tekst.</li>
</ul>
</li>
<li>
<p><strong>Wklejanie Tekstu</strong>:</p>
<ul>
<li>Wklej skopiowany tekst, naciskając <code>Ctrl</code> + <code>U</code>.</li>
</ul>
</li>
</ol>
<h3 id="dodatkowe-informacje">Dodatkowe Informacje</h3>
<ul>
<li>W nano nie ma klasycznego schowka, jak w systemach okienkowych. Zamiast tego, nano używa &ldquo;bufora wycinka&rdquo; do przechowywania tekstu.</li>
<li>Jeśli chcesz przenieść tekst (a nie skopiować), po zaznaczeniu tekstu, zamiast kopiować, po prostu użyj <code>Ctrl</code> + <code>K</code> do wycięcia tekstu, a następnie <code>Ctrl</code> + <code>U</code> do wklejenia w nowym miejscu.</li>
<li><code>nano</code> ma ograniczone możliwości w porównaniu do bardziej zaawansowanych edytorów, więc niektóre operacje mogą być mniej intuicyjne niż w edytorach takich jak Vim czy Emacs.</li>
</ul>
<p>Te kroki powinny pozwolić na skuteczne kopiowanie i wklejanie tekstu w edytorze <code>nano</code>.</p>
<h2 id="skąd-wziął-się-skrót-rc">Skąd wziął się skrót RC</h2>
<p>Skrót &ldquo;RC&rdquo; w nazwach plików konfiguracyjnych, takich jak <code>.bashrc</code> w systemach Unix i Linux, pochodzi od &ldquo;run commands&rdquo; (wykonywanie poleceń). Tradycja ta sięga początków systemów Unix.</p>
<h3 id="pochodzenie-i-znaczenie">Pochodzenie i Znaczenie:</h3>
<ol>
<li>
<p><strong>Historia</strong>: Skrót &ldquo;RC&rdquo; pojawił się w pierwszych wersjach systemu Unix. Został użyty w plikach, które system czytał przy starcie lub przy logowaniu się użytkownika, aby skonfigurować środowisko lub uruchomić określone programy.</p>
</li>
<li>
<p><strong>Run Commands</strong>: &ldquo;RC&rdquo; oznacza &ldquo;run commands&rdquo;, co dosłownie tłumaczy się jako &ldquo;wykonywanie poleceń&rdquo;. Pliki te zawierają zestaw poleceń, które są automatycznie wykonane przez shell lub aplikację w momencie jej uruchomienia.</p>
</li>
<li>
<p><strong>Przykłady Użycia</strong>:</p>
<ul>
<li><code>.bashrc</code>: Jest to skrypt, który jest wykonywany przez każdą interaktywną, nie logującą się instancję bash (np. nowe okno terminala w systemach graficznych). Zawiera konfiguracje specyficzne dla użytkownika dla sesji bash, takie jak aliasy i zmienne środowiskowe.</li>
<li><code>.vimrc</code>: Plik konfiguracyjny dla edytora Vim, zawierający ustawienia, skróty klawiszowe, wtyczki itp.</li>
</ul>
</li>
</ol>
<h3 id="użycie-w-innych-kontekstach">Użycie w Innych Kontekstach:</h3>
<p>Skrót &ldquo;RC&rdquo; został również zaadaptowany przez inne systemy i aplikacje, zachowując podobne znaczenie. W kontekście oprogramowania, plik &ldquo;RC&rdquo; często odnosi się do pliku, który zawiera instrukcje konfiguracyjne, które są &ldquo;uruchamiane&rdquo; lub przetwarzane, gdy aplikacja się startuje.</p>
<p>Podsumowując, &ldquo;RC&rdquo; w nazwach plików konfiguracyjnych w systemie Unix i Linux odnosi się do plików zawierających zestaw poleceń, które są automatycznie wykonywane w określonych sytuacjach, co pozwala na dostosowanie zachowania systemu lub aplikacji do potrzeb użytkownika.</p>
<h2 id="exitcode">Exitcode</h2>
<p>W skryptach Bash, kod wyjścia (exit code) ostatnio wykonanego polecenia jest przechowywany w zmiennej <code>$?</code>. Aby sprawdzić ten kod wyjścia, wykonaj polecenie, a następnie odwołaj się do zmiennej <code>$?</code>. Oto przykład:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/bin/bash
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="c1"># wykonanie jakiegoś polecenia</span>
</span></span><span class="line"><span class="cl">ls /nieistniejacy_katalog
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># sprawdzenie kodu wyjścia</span>
</span></span><span class="line"><span class="cl"><span class="nv">exitcode</span><span class="o">=</span><span class="nv">$?</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># sprawdzenie, czy polecenie zakończyło się sukcesem</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[</span> <span class="nv">$exitcode</span> -eq <span class="m">0</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;Polecenie zakończone sukcesem.&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">else</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;Polecenie zakończone błędem. Kod wyjścia: </span><span class="nv">$exitcode</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>W tym przykładzie:</p>
<ol>
<li>Uruchomione zostaje polecenie <code>ls /nieistniejacy_katalog</code>.</li>
<li>Zmienna <code>$?</code> przechowuje kod wyjścia tego polecenia.</li>
<li>Wartość <code>$?</code> jest przypisywana do zmiennej <code>exitcode</code>.</li>
<li>Skrypt sprawdza, czy <code>exitcode</code> jest równy 0 (co oznacza sukces), a jeśli nie - informuje o błędzie i wyświetla kod wyjścia.</li>
</ol>
<p>Uwaga:</p>
<ul>
<li>Kod wyjścia 0 zazwyczaj oznacza, że polecenie zostało wykonane pomyślnie, natomiast każda inna wartość wskazuje na jakiś błąd.</li>
<li>Zmienna <code>$?</code> powinna być sprawdzana bezpośrednio po wykonaniu polecenia, ponieważ każde kolejne polecenie nadpisze jej wartość swoim własnym kodem wyjścia.</li>
<li>Różne polecenia mogą zwracać różne kody błędów, więc warto sprawdzić dokumentację danego polecenia, aby zrozumieć, co oznaczają różne kody wyjścia.</li>
</ul>
<h2 id="elf-executable-and-linkable-format">ELF (Executable and Linkable Format)</h2>
<p>Pierwsze znaki w pliku ELF (Executable and Linkable Format) pod Linuxem są częścią tzw. nagłówka ELF. Są one niezwykle ważne, gdyż informują system operacyjny o sposobie interpretacji zawartości pliku. Oto ich znaczenie:</p>
<ol>
<li>
<p><strong>0x7F oraz &lsquo;ELF&rsquo;</strong>: Pierwsze cztery bajty pliku ELF zawsze zaczynają się od bajtu 0x7F, po którym następują litery &lsquo;E&rsquo;, &lsquo;L&rsquo;, &lsquo;F&rsquo;. Ta sekwencja jest magicznym numerem, który umożliwia systemowi operacyjnemu rozpoznanie formatu pliku jako ELF.</p>
</li>
<li>
<p><strong>Klasa pliku (32-bit lub 64-bit)</strong>: Następny bajt określa, czy plik jest przeznaczony dla systemu 32-bitowego czy 64-bitowego.</p>
</li>
<li>
<p><strong>Format kodowania danych (Big Endian lub Little Endian)</strong>: Kolejny bajt wskazuje na sposób kodowania danych - czy jest to Big Endian, gdzie najbardziej znaczący bajt jest przechowywany jako pierwszy, czy Little Endian, gdzie najpierw przechowywany jest najmniej znaczący bajt.</p>
</li>
<li>
<p><strong>Wersja pliku ELF</strong>: Wskazuje na wersję formatu ELF użytego w pliku.</p>
</li>
<li>
<p><strong>Typ procesora i systemu operacyjnego</strong>: Kolejne bajty określają typ procesora i system operacyjny, dla którego plik został skompilowany.</p>
</li>
<li>
<p><strong>Pozostałe elementy nagłówka</strong>: Zawierają informacje takie jak punkt wejścia programu, położenie tabeli segmentów programu, położenie tabeli nagłówków sekcji oraz ich wielkości i ilość.</p>
</li>
</ol>
<p>Nagłówek ELF jest kluczowy dla poprawnego załadowania i wykonania pliku w systemie operacyjnym Linux. Zapewnia on wszystkie niezbędne informacje potrzebne do prawidłowego zarządzania kodem zawartym w pliku.</p>
<h3 id="shebang">Shebang</h3>
<p>Shebang to specjalna sekwencja znaków na początku skryptu tekstowego, która wskazuje, który interpreter powinien zostać użyty do wykonania zawartości pliku.</p>
<p>Oto jak to działa:</p>
<p>Shebang: Na początku skryptu znajduje się linia zaczynająca się od #!, po której następuje ścieżka do interpretera. Na przykład, #!/bin/bash wskazuje, że skrypt powinien być wykonany przez interpreter Bash, a #!/usr/bin/env python3 wskazuje na interpreter Python 3.</p>
<p>Uruchamianie Skryptu: Gdy użytkownik próbuje uruchomić skrypt (np. ./skrypt.sh), system operacyjny sprawdza pierwsze dwa znaki pliku. Jeśli są to #!, system przekazuje plik do interpretera określonego w shebangu.</p>
<p>Interpreter: Interpreter wskazany w shebangu otwiera plik, interpretuje jego zawartość i wykonuje polecenia w nim zawarte.</p>
<p>Ciekawostką jest, że choć to nie kernel bezpośrednio interpretuje shebang, to mechanizm ten jest wspierany na poziomie systemu plików w kernelu. Dzięki temu możliwe jest rozpoznanie i właściwe przetworzenie plików ze skryptami. Bez tego wsparcia, użytkownik musiałby ręcznie wskazać interpreter, aby uruchomić skrypt, np. bash skrypt.sh zamiast po prostu ./skrypt.sh.</p>
<h2 id="jak-to-działa-w-systemie">Jak to działa w systemie</h2>
<p>Proces rozpoznawania przez system operacyjny, czy dany plik to skrypt wymagający interpretera, czy kod binarny (tak jak ELF), odbywa się w kilku krokach:</p>
<ol>
<li>
<p><strong>Sprawdzenie uprawnień do wykonania</strong>: Gdy użytkownik próbuje uruchomić plik, system najpierw sprawdza, czy plik ma ustawione uprawnienia do wykonania. Jeśli nie, proces jest zatrzymywany.</p>
</li>
<li>
<p><strong>Odczytanie pierwszych bajtów pliku</strong>: System operacyjny odczytuje pierwsze bajty pliku, aby zdecydować, jak go interpretować. Dla plików wykonywalnych (np. ELF), te pierwsze bajty zawierają specjalny nagłówek binarny.</p>
</li>
<li>
<p><strong>Rozpoznanie shebangu</strong>: Jeśli plik zaczyna się od sekwencji <code>#!</code> (shebang), system rozumie, że plik jest skryptem i musi być przekazany do odpowiedniego interpretera. Po znakach <code>#!</code> następuje ścieżka do interpretera, który powinien być użyty.</p>
</li>
<li>
<p><strong>Wywołanie interpretera</strong>: System uruchamia interpreter określony w shebangu, przekazując mu ścieżkę do skryptu jako argument. Na przykład, dla skryptu z shebangiem <code>#!/bin/bash</code>, system wywoła <code>/bin/bash /ścieżka/do/skryptu</code>.</p>
</li>
<li>
<p><strong>Wykonywanie skryptu przez interpreter</strong>: Interpreter odczytuje i wykonuje polecenia zawarte w skrypcie.</p>
</li>
<li>
<p><strong>Kontynuacja lub zakończenie procesu</strong>: Po zakończeniu wykonywania skryptu przez interpreter, kontrola wraca do systemu operacyjnego, który kontynuuje swoje normalne działanie lub kończy proces, jeśli to koniec skryptu.</p>
</li>
</ol>
<p>W przypadku plików binarnych (np. ELF), system rozpoznaje je przez ich nagłówek i natychmiast przystępuje do ich ładowania i wykonania, zamiast przekazywać je do interpretera. Jest to możliwe dzięki różnym formatom nagłówków dla plików wykonywalnych i skryptów tekstowych.</p>
<h3 id="to-samo-ale-nieco-detaliczniej">To samo, ale nieco detaliczniej</h3>
<p>Proces identyfikacji i uruchamiania plików wykonywalnych lub skryptów z shebangiem (<code>#!</code>) w systemie Linux odbywa się na kilku poziomach, od wywołań użytkownika aż po niskopoziomowe operacje kernela. Oto szczegółowy opis, jakie funkcje systemowe są zaangażowane w ten proces:</p>
<ol>
<li>
<p><strong>Wywołanie przez Użytkownika</strong>: Gdy użytkownik próbuje uruchomić plik (np. przez wpisanie <code>./skrypt.sh</code> w terminalu), shell (np. bash) wykonuje funkcję <code>execve()</code>. Jest to funkcja systemowa, która służy do uruchamiania nowego programu, zastępując bieżący proces.</p>
</li>
<li>
<p><strong>Odczyt Nagłówka Pliku przez Kernel</strong>: Kernel, po otrzymaniu żądania od <code>execve()</code>, próbuje odczytać nagłówek pliku, aby zdecydować, jak go obsłużyć. Robi to za pomocą niskopoziomowych operacji wejścia-wyjścia.</p>
</li>
<li>
<p><strong>Rozpoznanie Shebangu</strong>: Jeśli pierwsze dwa znaki pliku to <code>#!</code>, kernel rozpoznaje plik jako skrypt tekstowy. W tym momencie kernel analizuje resztę linii po <code>#!</code>, aby znaleźć ścieżkę do odpowiedniego interpretera.</p>
</li>
<li>
<p><strong>Wywołanie Interpretera</strong>: Kernel używa ponownie <code>execve()</code>, ale tym razem do uruchomienia interpretera określonego w shebangu, przekazując mu ścieżkę do skryptu jako argument.</p>
</li>
<li>
<p><strong>Przetwarzanie Skryptu przez Interpreter</strong>: Interpreter, teraz działający jako proces, odczytuje i wykonuje polecenia zawarte w skrypcie.</p>
</li>
</ol>
<p>Warto zauważyć, że proces ten różni się od ładowania zwykłych plików wykonywalnych (takich jak ELF), gdzie kernel bezpośrednio zajmuje się ładowaniem pliku do pamięci i uruchamianiem go, bez konieczności przekazywania kontroli do zewnętrznego interpretera.</p>
<p>Dodatkowo, w zależności od dystrybucji i konfiguracji systemu Linux, mogą być używane różne shelle oraz mechanizmy uruchamiania plików, ale opisany powyżej proces <code>execve()</code> i interpretacji shebangu jest dość uniwersalny w kontekście systemów Unixopodobnych.</p>
<h2 id="ekspansja-wyrażen">Ekspansja wyrażen</h2>
<p>W powłoce Bash, różne typy cudzysłowów (<code>&quot;&quot;</code> i <code>''</code>) mają różne zachowania w odniesieniu do interpretacji zawartych w nich ciągów znaków. Oto główne cechy obu typów:</p>
<h3 id="1-podwójne-cudzysłowy-">1. Podwójne Cudzysłowy <code>&quot;&quot;</code></h3>
<ul>
<li>
<p><strong>Ekspansja Zmiennych</strong>: Wewnątrz podwójnych cudzysłowów, zmienne są rozwijane (expanded). Oznacza to, że wartość zmiennej zostanie wstawiona w miejsce jej nazwy. Na przykład, <code>$HOME</code> zostanie zastąpione rzeczywistą ścieżką katalogu domowego użytkownika.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;Twój katalog domowy to: </span><span class="nv">$HOME</span><span class="s2">&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p><strong>Ekspansja Poleceń</strong>: Podwójne cudzysłowy pozwalają na ekspansję poleceń. Oznacza to, że polecenie umieszczone wewnątrz <code>$(...)</code> lub w starszej notacji <code>`...`</code> zostanie wykonane, a jego wynik zostanie wstawiony w miejsce ekspansji.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;Aktualna data to: </span><span class="k">$(</span>date<span class="k">)</span><span class="s2">&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p><strong>Ekspansja Wyrażeń Arytmetycznych</strong>: Wyrażenia arytmetyczne umieszczone w <code>$((...))</code> są rozwijane i obliczane.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;Dwa plus dwa to: </span><span class="k">$((</span><span class="m">2</span> <span class="o">+</span> <span class="m">2</span><span class="k">))</span><span class="s2">&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p><strong>Zachowanie Niektórych Znaków Specjalnych</strong>: Znaki takie jak <code>\n</code> (nowa linia) są interpretowane i przetwarzane.</p>
</li>
</ul>
<h3 id="2-pojedyncze-cudzysłowy--">2. Pojedyncze Cudzysłowy <code>' '</code></h3>
<ul>
<li>
<p><strong>Brak Ekspansji Zmiennych i Poleceń</strong>: Wewnątrz pojedynczych cudzysłowów, ekspansja zmiennych, poleceń i wyrażeń arytmetycznych nie zachodzi. Cały tekst jest traktowany dosłownie, jako stały ciąg znaków.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s1">&#39;Twój katalog domowy to: $HOME&#39;</span>
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p><strong>Dosłowna Interpretacja Zawartości</strong>: Wszystko, co znajduje się w pojedynczych cudzysłowach, jest interpretowane dosłownie. Oznacza to, że specjalne znaki Bash, takie jak <code>*</code>, <code>&amp;</code>, <code>#</code>, itp., nie są interpretowane jako specjalne i są traktowane jako zwykłe znaki.</p>
</li>
<li>
<p><strong>Brak Interpretacji Znaków Ucieczki</strong>: Znaki ucieczki, takie jak <code>\n</code>, nie są interpretowane, ale są traktowane jako zwykłe znaki.</p>
</li>
</ul>
<h3 id="podsumowanie">Podsumowanie</h3>
<p>Wybór między podwójnymi a pojedynczymi cudzysłowami zależy od potrzeby ekspansji i interpretacji zawartości ciągu. Jeśli potrzebujesz, aby zmienne, polecenia i wyrażenia arytmetyczne były rozwijane, użyj podwójnych cudzysłowów. Jeśli chcesz, aby tekst był traktowany dosłownie, bez żadnej ekspansji, użyj pojedynczych cudzysłowów.</p>
<h2 id="składnia-if">składnia IF</h2>
<p>Składnia instrukcji <code>if</code> w Bashu jest kluczowym elementem tworzenia skryptów warunkowych. Oto podstawowa struktura:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[</span> warunek <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># komendy wykonywane, gdy warunek jest prawdziwy</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="elementy-składni">Elementy Składni:</h3>
<ol>
<li>
<p><strong><code>if</code></strong>: Rozpoczyna instrukcję warunkową.</p>
</li>
<li>
<p><strong><code>[ warunek ]</code></strong>: Testuje warunek. Nawiasy kwadratowe <code>[ ]</code> są aliasem dla polecenia <code>test</code>, które sprawdza, czy podany warunek jest prawdziwy. Wewnątrz nawiasów kwadratowych musi być przestrzeń między nawiasem a warunkiem.</p>
</li>
<li>
<p><strong><code>then</code></strong>: Jeśli warunek jest prawdziwy (zwraca kod wyjścia 0), to Bash wykonuje komendy po <code>then</code>.</p>
</li>
<li>
<p><strong><code>fi</code></strong>: Zamyka instrukcję <code>if</code>. To jest odwrócenie słowa <code>if</code>, co jest typowym sposobem oznaczania zakończenia bloków kodu w skryptach powłoki (podobnie jak <code>esac</code> dla <code>case</code>).</p>
</li>
<li>
<p><strong><code>;</code></strong>: Średnik jest używany do oddzielenia różnych poleceń w tej samej linii. Możesz zastąpić średnik przez nową linię. Na przykład, <code>then</code> może znajdować się w tej samej linii co warunek, jeśli zastosujesz <code>;</code>:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[</span> warunek <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># komendy</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>lub w nowej linii bez średnika:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[</span> warunek <span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="k">then</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># komendy</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span></code></pre></td></tr></table>
</div>
</div></li>
</ol>
<h3 id="dlaczego-używa-się---i-">Dlaczego używa się <code>[ ]</code> i <code>;</code>?</h3>
<ul>
<li>
<p><strong><code>[ ]</code></strong>: Użycie nawiasów kwadratowych jest sposobem na wykorzystanie polecenia <code>test</code> w bardziej czytelnej formie. <code>[ warunek ]</code> jest równoznaczne z <code>test warunek</code>. Warunki wewnątrz nawiasów kwadratowych mogą obejmować porównania liczb, sprawdzanie ciągów znaków, czy też testowanie właściwości plików.</p>
</li>
<li>
<p><strong><code>;</code></strong>: Średnik jest używany do oddzielenia różnych poleceń w Bashu. W przypadku instrukcji <code>if</code>, oddziela on warunek od słowa kluczowego <code>then</code>. Jest to konieczne, gdy oba te elementy znajdują się w tej samej linii.</p>
</li>
</ul>
<h3 id="przykład">Przykład:</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[</span> <span class="nv">$liczba</span> -eq <span class="m">10</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;Liczba jest równa 10.&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>W tym przykładzie, jeśli zmienna <code>liczba</code> jest równa 10, skrypt wyświetli komunikat &ldquo;Liczba jest równa 10.&rdquo;</p>
<h3 id="przykład-użycia-instrukcji-if-w-bash">Przykład Użycia Instrukcji <code>if</code> w Bash:</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="k">if</span> <span class="o">[</span> <span class="nv">$x</span> -eq <span class="m">5</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;x jest równe 5&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">elif</span> <span class="o">[</span> <span class="nv">$x</span> -lt <span class="m">5</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;x jest mniejsze niż 5&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">else</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;x jest większe niż 5&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>W tym przykładzie, instrukcja <code>if</code> sprawdza, czy zmienna <code>x</code> jest równa 5, mniejsza niż 5, czy większa. W zależności od warunku, wykonuje odpowiednią część kodu.</p>
<p>Pamiętaj, że podręcznik <code>man</code> dla Bash zawiera bardzo szczegółowe i techniczne informacje, które mogą być przytłaczające dla początkujących użytkowników. Dla bardziej przystępnego wprowadzenia do instrukcji <code>if</code> i innych konstrukcji w Bashu, możesz rozważyć także korzystanie z różnych zasobów online i poradników.</p>
<h2 id="jak-wykonać-polecenie-i-zachować-jego-standardowe-wyjście">Jak wykonać polecenie i zachować jego standardowe wyjście?</h2>
<p>W Bashu, aby wykonać polecenie i zachować jego standardowe wyjście (<code>stdout</code>) w zmiennej, używa się tzw. command substitution, czyli substytucji polecenia. Jest to mechanizm, który pozwala na przechwycenie wyjścia polecenia i przypisanie go do zmiennej. Oto dwa sposoby, jak możesz to zrobić:</p>
<h3 id="1-użycie-">1. Użycie $(&hellip;)</h3>
<p>Najczęściej używaną i zalecaną składnią substytucji polecenia jest <code>$(...)</code>. Przykład:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nv">wynik</span><span class="o">=</span><span class="k">$(</span>polecenie<span class="k">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="nv">$wynik</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>W tym przypadku, <code>polecenie</code> zostanie wykonane, a jego standardowe wyjście zostanie przypisane do zmiennej <code>wynik</code>. Możesz potem użyć tej zmiennej do dalszych działań w skrypcie.</p>
<h3 id="2-użycie-">2. Użycie <code>...</code></h3>
<p>Starszą, ale nadal obsługiwaną składnią substytucji polecenia są backticks <code>`...`</code>. Przykład:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nv">wynik</span><span class="o">=</span><span class="sb">`</span>polecenie<span class="sb">`</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="nv">$wynik</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Ta składnia działa tak samo jak <code>$(...)</code>, ale może być mniej czytelna, szczególnie w skomplikowanych skryptach lub gdy substytucje są zagnieżdżone.</p>
<p><strong>Ważne Uwagi</strong>:</p>
<ul>
<li>Pamiętaj, aby nie dodawać spacji wokół znaku <code>=</code> podczas przypisywania wartości do zmiennej.</li>
<li>Jeśli polecenie zawiera elementy, które mogą być interpretowane przez powłokę, należy je umieścić w cudzysłowie wewnątrz substytucji polecenia.</li>
<li>W przypadku poleceń generujących wielolinijkowe wyjście, wszystkie linie zostaną zapisane w zmiennej, a możesz je później przetworzyć według potrzeb.</li>
</ul>
<p>Substytucja polecenia jest bardzo przydatnym mechanizmem w skryptach Bash, pozwalającym na elastyczne manipulowanie i wykorzystywanie wyjścia różnych poleceń.</p>
<h1 id="lab-02">Lab 02</h1>
<h2 id="uname">uname</h2>
<h2 id="htop-glances">htop glances</h2>
<p>Informacja &ldquo;Load&rdquo; w programie <code>htop</code> odnosi się do tzw. wskaźników obciążenia systemu (ang. load averages). Są to trzy wartości, które pokazują średnie obciążenie systemu w ciągu ostatnich 1, 5 i 15 minut. Oto, jak można je interpretować:</p>
<ol>
<li>
<p><strong>Wartości &ldquo;Load&rdquo;</strong>: Są to trzy liczby, np. <code>0.00 0.01 0.05</code>. Każda z nich reprezentuje średnią liczbę procesów oczekujących na wykonanie lub korzystających z procesora w danym okresie czasu. Pierwsza liczba dotyczy ostatniej minuty, druga – ostatnich 5 minut, a trzecia – ostatnich 15 minut.</p>
</li>
<li>
<p><strong>Interpretacja wartości</strong>:</p>
<ul>
<li><strong>Poniżej 1.00</strong>: Oznacza to, że procesor nie jest w pełni wykorzystany i prawdopodobnie nie ma zatorów.</li>
<li><strong>Równe 1.00</strong>: Oznacza to, że procesor jest w pełni wykorzystywany, ale bez przeciążenia.</li>
<li><strong>Powyżej 1.00</strong>: Jeśli wartość przekracza liczbę rdzeni procesora, oznacza to, że system ma więcej pracy, niż może obsłużyć, co może prowadzić do opóźnień.</li>
</ul>
</li>
<li>
<p><strong>Znaczenie dla wydajności</strong>:</p>
<ul>
<li>Niskie wartości &ldquo;Load&rdquo; zwykle wskazują na to, że system działa płynnie.</li>
<li>Wysokie wartości, szczególnie jeśli są utrzymujące się przez dłuższy czas, mogą wskazywać na przeciążenie systemu, co może wymagać optymalizacji lub upgrade&rsquo;u sprzętu.</li>
</ul>
</li>
<li>
<p><strong>Różnice między wartościami</strong>:</p>
<ul>
<li>Jeśli wartość dla 1 minuty jest znacznie wyższa niż dla 15 minut, może to oznaczać krótkotrwałe przeciążenie.</li>
<li>Jeśli wartość dla 15 minut jest wysoka, ale dla 1 minuty niska, może to oznaczać, że wcześniej wystąpiło przeciążenie, ale obecnie sytuacja jest stabilna.</li>
</ul>
</li>
</ol>
<p>Warto pamiętać, że interpretacja tych wartości może się różnić w zależności od specyfiki systemu i liczby rdzeni procesora. Idealne wartości &ldquo;Load&rdquo; mogą być różne dla różnych systemów i zastosowań.</p>
<h2 id="finger-chfn-w-who">Finger chfn w who</h2>
<p>Polecenie <code>finger</code> służy do wyświetlania informacji o użytkownikach w systemach Unix i Unix-podobnych. Dostarcza informacji takich jak login użytkownika, nazwa, biuro, numer telefonu, adres e-mail oraz czas ostatniego logowania. Może również pokazać, czy użytkownik jest aktualnie zalogowany i od jakiego czasu, jak również zawartość pliku <code>.plan</code> użytkownika, który często zawiera informacje o jego aktualnych zajęciach lub planach.</p>
<p>Co do dostępności <code>finger</code> w Debianie 12 (nazwanym &ldquo;Bookworm&rdquo; w momencie pisania tego tekstu), trzeba pamiętać, że różne dystrybucje Linuxa mogą lub nie zawierać <code>finger</code> w swoich standardowych repozytoriach. Jednakże, <code>finger</code> jest często dostępny w większości dystrybucji i można go zainstalować z repozytorium, jeśli nie jest zainstalowany domyślnie.</p>
<p>Aby sprawdzić, czy <code>finger</code> jest dostępny w Twojej dystrybucji Debiana oraz zainstalować go, możesz użyć następujących poleceń:</p>
<ol>
<li>
<p>Sprawdź, czy <code>finger</code> jest dostępny:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">apt-cache search ^finger
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p>Jeśli jest dostępny, zainstaluj go za pomocą:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo apt-get install finger
</span></span></code></pre></td></tr></table>
</div>
</div></li>
</ol>
<p>Warto zauważyć, że z powodu zagrożeń bezpieczeństwa związanych z ujawnianiem informacji o użytkownikach, wiele systemów i administratorów rezygnuje z korzystania z <code>finger</code>. Należy więc używać go z rozwagą, zwłaszcza w środowiskach produkcyjnych.</p>
<h2 id="write-mesg">write mesg</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">   mesg y
</span></span><span class="line"><span class="cl">   mesg n
</span></span><span class="line"><span class="cl">   
</span></span><span class="line"><span class="cl">   write marcin
</span></span></code></pre></td></tr></table>
</div>
</div><p>druga sesja po ssh</p>
<h2 id="ps-ax">ps ax</h2>
<p>PROCESS STATE CODES
Here are the different values that the s, stat and state output
specifiers (header &ldquo;STAT&rdquo; or &ldquo;S&rdquo;) will display to describe the state of
a process:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl">         <span class="n">D</span>    <span class="n">uninterruptible</span> <span class="n">sleep</span> <span class="p">(</span><span class="n">usually</span> <span class="n">IO</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">         <span class="n">I</span>    <span class="n">Idle</span> <span class="n">kernel</span> <span class="n">thread</span>
</span></span><span class="line"><span class="cl">         <span class="n">R</span>    <span class="n">running</span> <span class="ow">or</span> <span class="n">runnable</span> <span class="p">(</span><span class="n">on</span> <span class="n">run</span> <span class="n">queue</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">         <span class="n">S</span>    <span class="n">interruptible</span> <span class="n">sleep</span> <span class="p">(</span><span class="n">waiting</span> <span class="k">for</span> <span class="n">an</span> <span class="n">event</span> <span class="n">to</span> <span class="n">complete</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">         <span class="n">T</span>    <span class="n">stopped</span> <span class="n">by</span> <span class="n">job</span> <span class="n">control</span> <span class="k">signal</span>
</span></span><span class="line"><span class="cl">         <span class="n">t</span>    <span class="n">stopped</span> <span class="n">by</span> <span class="n">debugger</span> <span class="n">during</span> <span class="n">the</span> <span class="n">tracing</span>
</span></span><span class="line"><span class="cl">         <span class="n">W</span>    <span class="n">paging</span> <span class="p">(</span><span class="ow">not</span> <span class="n">valid</span> <span class="n">since</span> <span class="n">the</span> <span class="mf">2.6</span><span class="o">.</span><span class="n">xx</span> <span class="n">kernel</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">         <span class="n">X</span>    <span class="n">dead</span> <span class="p">(</span><span class="n">should</span> <span class="n">never</span> <span class="n">be</span> <span class="n">seen</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">         <span class="n">Z</span>    <span class="n">defunct</span> <span class="p">(</span><span class="s2">&#34;zombie&#34;</span><span class="p">)</span> <span class="n">process</span><span class="p">,</span> <span class="n">terminated</span> <span class="n">but</span> <span class="ow">not</span> <span class="n">reaped</span> <span class="n">by</span>
</span></span><span class="line"><span class="cl">              <span class="n">its</span> <span class="n">parent</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="n">For</span> <span class="n">BSD</span> <span class="n">formats</span> <span class="ow">and</span> <span class="n">when</span> <span class="n">the</span> <span class="n">stat</span> <span class="n">keyword</span> <span class="n">is</span> <span class="n">used</span><span class="p">,</span> <span class="n">additional</span>
</span></span><span class="line"><span class="cl"> <span class="n">characters</span> <span class="n">may</span> <span class="n">be</span> <span class="n">displayed</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">         <span class="o">&lt;</span>    <span class="n">high</span><span class="o">-</span><span class="n">priority</span> <span class="p">(</span><span class="ow">not</span> <span class="n">nice</span> <span class="n">to</span> <span class="n">other</span> <span class="n">users</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">         <span class="n">N</span>    <span class="n">low</span><span class="o">-</span><span class="n">priority</span> <span class="p">(</span><span class="n">nice</span> <span class="n">to</span> <span class="n">other</span> <span class="n">users</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">         <span class="n">L</span>    <span class="n">has</span> <span class="n">pages</span> <span class="n">locked</span> <span class="n">into</span> <span class="n">memory</span> <span class="p">(</span><span class="k">for</span> <span class="n">real</span><span class="o">-</span><span class="n">time</span> <span class="ow">and</span> <span class="n">custom</span> <span class="n">IO</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">         <span class="n">s</span>    <span class="n">is</span> <span class="n">a</span> <span class="n">session</span> <span class="n">leader</span>
</span></span><span class="line"><span class="cl">         <span class="n">l</span>    <span class="n">is</span> <span class="n">multi</span><span class="o">-</span><span class="n">threaded</span> <span class="p">(</span><span class="n">using</span> <span class="n">CLONE_THREAD</span><span class="p">,</span> <span class="n">like</span> <span class="n">NPTL</span> <span class="n">pthreads</span>
</span></span><span class="line"><span class="cl">              <span class="k">do</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">         <span class="o">+</span>    <span class="n">is</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">foreground</span> <span class="n">process</span> <span class="n">group</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Polecenie <code>ps ax</code> w systemach Unix i Linux wyświetla informacje o aktualnie działających procesach. Jedna z kolumn, która się pojawia w wynikach tego polecenia, to &ldquo;STAT&rdquo; lub &ldquo;STATS&rdquo;, która zawiera kody wskazujące na aktualny stan procesu. Oto niektóre z najczęściej spotykanych kodów w tej kolumnie:</p>
<ol>
<li><strong>R</strong> - Running: Proces jest aktywny (działający lub gotowy do uruchomienia).</li>
<li><strong>S</strong> - Sleeping: Proces czeka na zdarzenie lub sygnał (często stan bezczynności).</li>
<li><strong>D</strong> - Uninterruptible Sleep: Proces jest w stanie &ldquo;głębokiego snu&rdquo; i nie może być przerwany (np. oczekujący na operacje wejścia/wyjścia).</li>
<li><strong>T</strong> - Stopped: Proces został zatrzymany, np. poprzez sygnał sterujący.</li>
<li><strong>Z</strong> - Zombie: Proces zakończył działanie, ale wciąż jest obecny w systemie, oczekując na to, by proces macierzysty odczytał jego kod wyjścia.</li>
</ol>
<p>Dodatkowo, mogą się pojawić inne znaki, które dostarczają więcej szczegółów:</p>
<ul>
<li><strong>&lt;</strong> - Proces o wysokim priorytecie (nie fair-scheduled).</li>
<li><strong>N</strong> - Proces o niskim priorytecie.</li>
<li><strong>L</strong> - Proces ma zablokowane strony w pamięci (np. dla operacji wejścia/wyjścia).</li>
<li><strong>s</strong> - Proces jest liderem sesji.</li>
<li><strong>l</strong> - Proces jest wielowątkowy (multi-threaded).</li>
<li><strong>+</strong> - Proces jest w grupie procesów pierwszoplanowych.</li>
</ul>
<p>Kody te mogą być połączone, by dostarczyć bardziej szczegółowych informacji na temat stanu procesu. Na przykład, &ldquo;Ss&rdquo; wskazywałby na proces, który jest w stanie snu (S), będąc jednocześnie liderem sesji (s). Interpretacja tych kodów może pomóc w zrozumieniu działania systemu oraz w diagnozowaniu problemów z wydajnością lub zachowaniem systemu.</p>
<h3 id="lider-sesji">Lider sesji</h3>
<p>Bycie &ldquo;liderem sesji&rdquo; w kontekście procesów systemowych odnosi się do roli, jaką dany proces pełni w zarządzaniu grupą powiązanych procesów w systemie operacyjnym typu Unix lub Linux. Oto kluczowe aspekty tej roli:</p>
<ol>
<li>
<p><strong>Definicja Sesji</strong>:</p>
<ul>
<li>Sesja w systemie operacyjnym to zbiór procesów, które są grupowane razem na potrzeby zarządzania i kontroli. Zwykle sesja rozpoczyna się przy logowaniu użytkownika do systemu i kończy przy jego wylogowaniu.</li>
</ul>
</li>
<li>
<p><strong>Lider Sesji</strong>:</p>
<ul>
<li>Lider sesji to proces, który rozpoczyna sesję. Jest to zazwyczaj powłoka logowania lub proces inicjujący interakcję użytkownika (np. proces getty w systemach Unix/Linux).</li>
<li>Lider sesji posiada unikalny identyfikator sesji (Session ID), który jest przypisywany wszystkim procesom w ramach tej sesji.</li>
<li>Jako lider, proces ma kontrolę nad innymi procesami w tej samej sesji, w tym nad ich tworzeniem i zarządzaniem.</li>
</ul>
</li>
<li>
<p><strong>Znaczenie w Kontroli Procesów</strong>:</p>
<ul>
<li>Lider sesji często odgrywa kluczową rolę w zarządzaniu sygnałami i zakończeniem procesów w swojej sesji. Na przykład, gdy użytkownik wylogowuje się, proces lidera sesji otrzymuje sygnał, który może być następnie przekazywany do innych procesów w sesji.</li>
<li>W niektórych przypadkach, gdy lider sesji kończy działanie, wszystkie powiązane procesy w sesji mogą zostać automatycznie zakończone.</li>
</ul>
</li>
<li>
<p><strong>Zombie i Sieroty</strong>:</p>
<ul>
<li>Gdy lider sesji kończy działanie, pozostałe procesy w sesji, które nadal działają, stają się &ldquo;sierotami&rdquo;. Te procesy sieroty są zwykle przydzielane nowemu liderowi sesji (często procesowi init).</li>
<li>Procesy &ldquo;zombie&rdquo;, które zakończyły działanie, ale wciąż czekają na odczytanie ich statusu wyjścia przez proces macierzysty, mogą również powstać, gdy lider sesji nie zarządza poprawnie zakończeniem procesów.</li>
</ul>
</li>
</ol>
<p>Zrozumienie roli lidera sesji jest ważne przy diagnozowaniu i zarządzaniu zachowaniem procesów w systemie, szczególnie w kontekście zakończenia sesji użytkownika lub zarządzania procesami w tle.</p>
<h2 id="kill">kill</h2>
<h2 id="skrypty-z-zadań">Skrypty z zadań</h2>
<h3 id="lab-5-6">lab 5 6</h3>
<p>zqmH0ZJUQguQ52nlk2m1</p>
<p>?m[abc0-4]<em>.{exe,txt,tar}</em></p>
<p>touch math0.exe smart.txt m3p.exe om3.tar6 abc04.txt smith4.txt ma0.exe.txt sma.txt-exe em3p.om3.t am1234.txt smi0-4.txt</p>
<p><a href="https://docs.python.org/3/library/os.html#os.getlogin">https://docs.python.org/3/library/os.html#os.getlogin</a></p>
<p>import getpass</p>
<p>getpass.getuser()</p>
<p>os.getlogin()</p>
<p>echo &ldquo;MK, grp, 1234&rdquo; &gt; &ldquo;zadanie-1/katalog-$dir/moje-dane/dane.txt&rdquo;</p>
<p>touch math0.exe smart.txt m3p.exe om3.tar6 abc04.txt smith4.txt ma0.exe.txt sma.txt-exe em3p.om3.t am1234.txt smi0-4.txt</p>
<p>#!/usr/bin/awk -f</p>
<p>/Zadanie/ {
print $0 &gt; &ldquo;named1.txt&rdquo;
}</p>
<p>$ awk &lsquo;/Zadanie/ {print $0 &gt;&ldquo;amed1.txt&rdquo;}&rsquo; zadanie.txt</p>
<p>#!/bin/env bash</p>
<p>ls -al | awk &ldquo;/$1/ {print $0}&rdquo;</p>
]]></content:encoded></item></channel></rss>