Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 64 additions & 0 deletions podzim_2025/lucie-talasova/LT-ukol1a-git-teoreticke_otazky.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Úkoly - Git

## Teoretické otázky

## 1. Proč je vhodné nastavit uživatelské jméno a e-mail hned po instalaci?
Když se spolupracuje na projektu, je nutné, aby bylo vidět, kdo změny udělal. Když to nenastavím hned, mohlo by se stát, že na to zapomenu, a nebude pak zřejmé, kdo je autorem změn.

## 2. Jaký je rozdíl mezi pracovním adresářem, indexem (staging area) a repozitářem?
- **Pracovní adresář** je místo, kde fyzicky vytvářím a upravuju svoje soubory.
- **Index (staging area)** je mezikrok, kam se soubory přidávají pomocí `git add`, než se uloží do historie GITu.
- **Repozitář** obsahuje historii všech commitů, tedy všech uložených verzí projektu.

## 3. Co se děje při příkazu `git add` a co při `git commit`?
- `git add` přidá změny z mého pracovního adresáře do indexu, tj. připraví je ke commitu.
- `git commit` všechny změny z indexu commitne do historie repozitáře GITU jako jeden commit.

## 4. Vysvětli, co je to commit hash a proč je důležitý.
Je to unikátní identifikátor každého commitu - **hash** (např. `a4f6b2d...`). Lze podle něj commit dohledávat a upravovat.

## 5. Jak Git uchovává historii změn? Uveď rozdíl oproti klasickému ukládání souborů.
Git neukládá celé soubory při každé změně, ale ukládá jn **rozdíly (dify)** mezi verzemi. Díky tomu je efektivní a rychlý. Klasické zálohování by při každé změně vytvářelo celou kopii souboru.

## 6. Co znamená, že Git je „distribuovaný systém pro správu verzí“?
Každý uživatel má kompletní kopii celého repozitáře, včetně historie. To znamená, že může pracovat offline, dělat commity a prohlížet historii i bez připojení k internetu. Centrální server (většinou GitHub) slouží k synchronizaci změn, které jednotliví spolupracovníci udělali.

## 7. Proč je doporučeno používat větve místo práce přímo v hlavní větvi (main/master)?
Větve umožňují pracovat na projektu bez ovlivnění stabilní hlavní verze. Teprve až když je práce hotová a zkontrolovaná, sloučí se do hlavní větve. Díky tomu se minimalizují chyby a chaos.

## 8. Jaký je rozdíl mezi `git merge` a `git rebase`? Uveď příklad, kdy bys použil/a který.
- **Merge** spojí dvě větve dohromady a zachová historii tak, jak byla – vytvoří nový „merge commit“.
- **Rebase** přepíše historii tak, že změny z jedné větve „přehraje“ na konec jiné větve.

**Kdy použít:**
- `merge` – když chci zachovat úplnou historii (např. při sloučení feature větve do mainu).
- `rebase` – když chci historii zpřehlednit (např. před odesláním na GitHub).

**Rozdíl v historii:**
- Merge přidá nový commit, který spojuje obě větve.
- Rebase vytvoří nové commity s přepsanou historií, takže působí, jako by změny vznikly přímo na mainu.

## 9. Jaký je účel pull requestu a proč se používá?
Pull request slouží k návrhu sloučení změn z jedné (pracovní) větve do jiné (main). Umožňuje ostatním členům týmu zkontrolovat kód, diskutovat o něm a schválit ho před začleněním do hlavní větve.

## 10. Co znamená code review a jaký je jeho přínos?
Code review je proces, kdy někdo jiný než autor projde změny v kódu a zhodnotí je. Pomáhá odhalit chyby, zlepšuje kvalitu kódu a zároveň slouží jako forma učení se mezi vývojáři.

## 11. K čemu je soubor `.gitignore`?
Slouží k určení, které soubory nebo adresáře má Git ignorovat, tj. nezahrnovat do verzovacího systému. Typicky logy, dočasné soubory, konfigurace prostředí apod.

## 12. Co se stane, pokud přidáš do `.gitignore` soubor, který už je ve verzovací historii?
Git ho ignorovat nezačne automaticky, už je totiž sledovaný. Musím ho nejdřív odstranit z repozitáře pomocí `git rm --cached <soubor>` a teprve pak se začne ignorovat.

## 13. Proč je vhodné ignorovat logy, dočasné soubory editorů nebo sestavení?
Tyto soubory se mění často, ale nejsou pro projekt důležité. Zabíraly by místo, dělaly nepořádek v historii a mohly by obsahovat citlivé nebo zbytečné informace.

### 14. Jak se zapisují vzory do `.gitignore`? Uveď příklady pro:
- **Ignorování všech `.log` souborů:**
```
*.log
```
- **Ignorování adresáře `build`:**
```
/build/
```
212 changes: 212 additions & 0 deletions podzim_2025/lucie-talasova/LT-ukoly2-bash_I.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,212 @@
# Úkoly - Bash I

U úkolů označených ⌨* budeš potřebovat počítač.
Ostatní zkus dát „z hlavy“.

## 1. ⌨*

Co dělá příkaz `ls -v`?

* **A.** Vypíše verzi programu `ls` ......................................... --version
* **B.** Vypíše jméno aktuálního adresáře, ne jeho obsah..................... pwd
* **C.** Seřadí soubory podle hodnot (víceciferných) čísel v názvech ........ SPRÁVNÁ ODPOVĚĎ
* **D.** Vypíše obsah adresáře kompaktně – jednotlivá jména oddělí čárkou .... -m

Bonus: Jaké přepínače mají ostatní efekty?

## 2.

Začnu-li (jako uživatel `mh`) v adresáři `/home/mh/data`, které z těchto příkazů mě dostanou do `/home/mh`?

* **A.** `cd .`
* **B.** `cd /`
* **C.** `cd /home/mh` ..... SPRÁVNÁ ODPOVĚĎ
* **D.** `cd ../..`
* **E.** `cd ~`............. SPRÁVNÁ ODPOVĚĎ
* **F.** `cd home`
* **G.** `cd ~/data/..` .... SPRÁVNÁ ODPOVĚĎ
* **H.** `cd` .............. SPRÁVNÁ ODPOVĚĎ
* **I.** `cd ..` ........... SPRÁVNÁ ODPOVĚĎ
* **J.** otevření nového terminálu
Comment on lines +17 to +30
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

J. je taky správná odpověď, pokud nemáš bash nějak přenastavený, aby dělal něco jiného.


## 3.

Mám-li níže ukázané adresáře, a `pwd` vypisuje `/home/mh/vec`, co ukáže `ls -F ../archiv`?

{{ figure(
img=static('hierarchy.svg'),
alt='Diagram adresářové struktury',
) }}

<!--
{% raw %}
```graphviz
digraph hierarchy {
node [shape=folder];
"/" -> home;
home -> mh;
mh -> vec;
vec -> archiv;
archiv -> "2020-09-01";
archiv -> "2020-09-16";
archiv -> "2020-10-01";
mh -> archiv2;
archiv2 [label="archiv"]
archiv2 -> original;
archiv2 -> pnas_final;
archiv2 -> pnas_2
}
```
{% endraw %}
-->


* **A.** `../archiv`: Adresář nebo soubor neexistuje
* **B.** `2012-12-01 2013-01-08 2013-01-27`
* **C.** `2012-12-01/ 2013-01-08/ 2013-01-27/`
* **D.** `original pnas_final pnas_2`
* **E.** `original/ pnas_final/ pnas_2/` ............. SPRÁVNÁ ODPOVĚĎ

## 4.

Vypadá-li disk jako v předchozím úkolu a `pwd` vypisuje `/home/mh/archiv`, které z těchto příkazů vypíšou `pnas_2/ pnas_final/ original/`?

* **A.** `ls pwd`
* **B.** `ls -r -F` ................. SPRÁVNÁ ODPOVĚĎ
* **C.** `ls -r -F /home/mh/archiv`.. SPRÁVNÁ ODPOVĚĎ

## 5. ⌨*

Zadej tenhle příkaz:

```console
$ touch novy_soubor.txt
```

1. Co tenhle příkaz udělal? (Nápověda: Použij `ls`)

Vytvořil prázdný novy_soubor.txt ve složce, ve které jsme v ten moment byli.

2. Když se do aktuálního adresáře podíváš grafickým manažerem souborů, ukáže se ti `novy_soubor.txt`?

Ano, ukáže.

3. Pusť `ls -l`. Zjistíš z výpisu, co nový soubor obsahuje?

Ne.
Comment on lines +94 to +96
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Zjistíš že je prázdný a tedy neobsahuje nic :)



4. K/ čemu slouží příkaz `touch`?

K vytvoření souboru.

## 6.

Po tom, co pustíš následující příkazy, si uvědomíš, že soubory `sucrose.dat` a `maltose.dat` jsou špatně umístěné – měly by být v adresáři `raw`.

```console
$ ls -F
analyzed/ raw/
$ ls -F analyzed
fructose.dat glucose.dat maltose.dat sucrose.dat
$ cd analyzed
```

Doplň příkaz, který je tam přesune.

```console
$ mv sucrose.dat maltose.dat ../raw/
```

## 7.

Vytvořila sis soubor `statsitika.txt`, ve kterém máš nějaké výpočty. Ale ve jméně je překlep! Které z těchto příkazů to spraví?

* **A.** `cp statsitika.txt statistika.txt`
* **B.** `mv statsitika.txt statistika.txt` SPRÁVNÁ ODPOVĚĎ
* **C.** `cp statsitika.txt .`
* **D.** `mv statsitika.txt .`


## 8.

Co vypíše `ls` na konci této sekvence příkazů?

```console
$ pwd
/home/jamie/data
$ ls
proteiny.dat
$ mkdir rekombinace
$ mv proteiny.dat rekombinace
$ cp rekombinace/proteiny.dat ../proteiny2.dat
$ ls
```


* **A.** `proteiny2.dat rekombinace`
* **B.** `rekombinace` ..............SPRÁVNÁ ODPOVĚĎ
* **C.** `proteiny.dat rekombinace`
* **D.** `proteiny2.dat`

## 9.

Máš následující soubory:

```console
$ ls -F
analyzed/ fructose.dat raw/ sucrose.dat
```

Zkus napsat co nejkratší příkaz, kterým přesuneš `fructose.dat` a `sucrose.dat` do adresáře `analyzed/`.

mv fructose.dat sucrose.dat analyzed/

## 10.

Které z následujících sad příkazů vytvoří tuhle strukturu adresářů?

```plain
2016-05-20/
└── data
├── processed
└── raw
```

**A.** .................................... SPRÁVNÁ ODPOVĚĎ
```console
$ mkdir 2016-05-20
$ mkdir 2016-05-20/data
$ mkdir 2016-05-20/data/processed
$ mkdir 2016-05-20/data/raw
```

**B.** ..................................... SPRÁVNÁ ODPOVĚĎ
```console
$ mkdir 2016-05-20
$ cd 2016-05-20
$ mkdir data
$ cd data
$ mkdir raw processed
```

**C.**
```console
$ mkdir 2016-05-20/data/raw
$ mkdir 2016-05-20/data/processed
```

**D.** ..................................... SPRÁVNÁ ODPOVĚĎ
```console
$ mkdir -p 2016-05-20/data/raw
$ mkdir -p 2016-05-20/data/processed
```

**E.**
```console
$ mkdir 2016-05-20
$ cd 2016-05-20
$ mkdir data
$ mkdir raw processed
```

Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Úkoly – Správa uživatelů, Sudo

## 🧠 Teoretická část

# Domácí úkol – Linux: práce se soubory, uživateli a právy

## A. Práce se soubory a výstupem

1. **Co udělá `cat` a kdy je vhodné ho použít?**
`cat` vypíše obsah souboru do terminálu, případně spojí víc souborů za sebe. Výstup lze přesměrovat i do souboru. Ideální pro kratší soubory nebo spojování.

2. **Rozdíl mezi `less` a `cat`**
`cat` jen vypíše celý obsah a hotovo. `less` vypíše obsah souboru tak, že se dá v něm posunovat po obrazovkách pomocí šipek /`PgUp`/`PgDn` a hledat (`/text`). Lepší pro delší soubory.

3. **K čemu slouží `head` a jak určit počet řádků?**
`head` vypíše začátek souboru (automaticky 10 řádků). Počet řádků lze nastavit parametrem `-n`, např. `head -n 25 soubor.txt`.

4. **Jak zjistit počet řádků nebo slov v souboru?**
Pomocí `wc` (word count):
- řádky: `wc -l soubor.txt`
- slova: `wc -w soubor.txt`
- znaky: `wc -m soubor.txt`
- vše najednou: `wc soubor.txt`

5. **Jak zobrazit posledních 10 řádků souboru?**
`tail soubor.txt` (defaultně 10 řádků). Pro jiný počet: `tail -n 50 soubor.txt`.

---

## B. Uživatelé, skupiny a práva

1. **Rozdíl mezi uživatelem a skupinou v Linuxu**
Uživatel = účet (UID) s domovským adresářem a shell konfigurací. Skupina = logické seskupení uživatelů (GID) pro sdílení oprávnění. Uživatel může být členem více skupin; každá entita má primární skupinu.

2. **Význam `-rw-r--r--`**
První znak typ: `-` soubor (`d` složka, `l` symlink).
Pak práva uživatele - číst a zapisovat, práva skupiny - číst, práva všech ostatních - číst.

3. **Rozdíl mezi vlastníkem souboru a skupinou souboru**
Vlastník (user) je jeden konkrétní účet, který soubor vytvořil (nebo mu byl přiřazen); skupina je jedna vybraná skupina, jejíž členové mohou mít další práva k souboru (klidně i stejná, či dokonce vyšší než uživatel).

4. **Co obsahují `/etc/passwd` a `/etc/shadow`**
Etc je složka, ve které se nachází konfigurace. Není ve domovském adresáři; je to top-level vedle /home, /bin, /var, …
- `/etc/passwd`: základní údaje o účtech (login, UID, GID, domovský adresář, shell). Dnes neobsahuje hesla, ale placeholder `x`.
- `/etc/shadow`: hashovaná hesla a politiky (expirace apod.); přístup má jen root (kvůli bezpečnosti).

5. **K čemu slouží `chmod` a jak se používá**
Mění přístupová práva. Dva způsoby:
- Symbolicky: `chmod u+rwx,g+rx,o-r soubor`
- Osmiciferně (čísly): `chmod 754 soubor`

6. **K čemu slouží `useradd`, `groupadd`, `usermod`, `passwd`, `userdel`, `groupdel`**
- `useradd`: vytvoří nový účet (např. `sudo useradd -m -s /bin/bash jenda`).
- `groupadd`: vytvoří novou skupinu (např. `sudo groupadd editors`).
- `usermod`: změní vlastnosti účtu (např. přidání do skupin `sudo usermod -aG editors jenda`, změna shellu `-s`, domova `-d` …).
- `passwd`: nastaví/změní heslo uživatele (`sudo passwd jenda`).
- `userdel`: smaže účet (s domovem `-r`: `sudo userdel -r jenda`).
- `groupdel`: smaže skupinu (pokud už není primární pro nějaký účet).
Loading