Autor Téma: Úkol :-)  (Přečteno 3519 krát)

Offline Zikáč

  • Nováček
  • *
  • Příspěvků: 9
    • Zobrazit profil
Úkol :-)
« kdy: 27. 11. 2017, 23:14:10 »
Ahoj všichni :-)

Jsem tady nový (defacto i ve světě Linuxu), a ve škole jsem dostal úkol vytvořit skript v shellu s následujícím zadáním:

Vytvoření nového účtu uživatele, jehož domovský adresář bude zadán při/po spuštění skriptu.

Vytvoření nového uživatele bych zvládl, zadání domovského adresáře též, ale pokud ten úkol dobře chápu, je požadováno, že jméno uživatele i domovský adresář se vytvoří podle požadavků uživatele. A to je pro mě oříšek. Nevím, jak to napsat, aby po spuštění skriptu se vytvořil dotaz na jméno uživatele a cestu, kde chce vytvořit domovský adresář.

Nevěděl byste někdo, jak to vytvořit?

Předem všem děkuji za jakoukoliv pomoc :-)

P.S. Google už jsem zkoušel asi 4 hodiny projíždět, ale bohužel jsem nenarazil na nic kloudného.

Offline Petr Krčmář

  • Administrátor
  • Aktivní­ uživatel
  • *****
  • Příspěvků: 447
    • Zobrazit profil
    • Debian-linux.cz
Re:Úkol :-)
« Odpověď #1 kdy: 28. 11. 2017, 08:24:52 »
Ke čtení uživatelských vstupů slouží v shellu příkaz read, který jako parametr přijímá název proměnné, do které bude vstup uložen. Vyzkoušej:

Kód: [Vybrat]
#!/bin/bash
echo -n "Zadej jmeno: "
read jmeno
echo "Uzivatel se jmenuje" $jmeno

Offline Zikáč

  • Nováček
  • *
  • Příspěvků: 9
    • Zobrazit profil
Re:Úkol :-)
« Odpověď #2 kdy: 28. 11. 2017, 13:52:43 »
Tohle jsem zkoušel ještě včera, každopádně děkuji :-)
Hlavní problém mi dělá to zadání domovského adresáře.. Nevím, jaký parametr použít. Použiju read, ale co dál?

Ještě jednou děkuji.

Offline Petr Krčmář

  • Administrátor
  • Aktivní­ uživatel
  • *****
  • Příspěvků: 447
    • Zobrazit profil
    • Debian-linux.cz
Re:Úkol :-)
« Odpověď #3 kdy: 28. 11. 2017, 14:16:45 »
Zkus si vyvolat manuál pomocí man adduser a najdi si v něm parametr, který určuje domovský adresář uživatele. Tomu předáš jako argument proměnnou s obsahem, který zadal uživatel.

Offline Zikáč

  • Nováček
  • *
  • Příspěvků: 9
    • Zobrazit profil
Re:Úkol :-)
« Odpověď #4 kdy: 28. 11. 2017, 18:25:25 »
A mám použít adduser nebo useradd?

Offline Petr Krčmář

  • Administrátor
  • Aktivní­ uživatel
  • *****
  • Příspěvků: 447
    • Zobrazit profil
    • Debian-linux.cz
Re:Úkol :-)
« Odpověď #5 kdy: 28. 11. 2017, 19:06:44 »
Jak jsem napsal, rozhodně adduser. To je chytřejší obal nad nízkoúrovňovou utilitou useradd, tu nepoužívej.

Offline Zikáč

  • Nováček
  • *
  • Příspěvků: 9
    • Zobrazit profil
Re:Úkol :-)
« Odpověď #6 kdy: 28. 11. 2017, 20:25:33 »
Když to napíšu takto:

echo -n "Zadej jmeno uzivatele: "
read jmeno

echo -n "Zadej domovsky adresar: "
read home

adduser --home $home $jmeno


Při spuštění mi to píše:

adduser - příkaz nenalezen

Co dělám špatně?

Offline Petr Krčmář

  • Administrátor
  • Aktivní­ uživatel
  • *****
  • Příspěvků: 447
    • Zobrazit profil
    • Debian-linux.cz
Re:Úkol :-)
« Odpověď #7 kdy: 28. 11. 2017, 21:39:58 »
Řekl bych, že to pouštíš jako běžný uživatel. Spravovat uživatele může jen root.

Offline Zikáč

  • Nováček
  • *
  • Příspěvků: 9
    • Zobrazit profil
Re:Úkol :-)
« Odpověď #8 kdy: 28. 11. 2017, 21:46:44 »
V zadání úkolu je:

soubor s řešením (použitým příkazem nebo příkazy), které musí být spustitelné na jiném systému stejných parametrů a u kteréhokoli uživatele (nesmí být závislé na jménu uživatele či typu jeho oprávnění).

Tak teď nevím..

Jak mám ten skript napsat, aby se spouštěl s požadavkem na root přístup?

Offline Petr Krčmář

  • Administrátor
  • Aktivní­ uživatel
  • *****
  • Příspěvků: 447
    • Zobrazit profil
    • Debian-linux.cz
Re:Úkol :-)
« Odpověď #9 kdy: 28. 11. 2017, 22:08:12 »
Ale notak, přece nečekáš celý postup. Obecná rada zní: použij chytře Google. Když se ho zeptáš "how to run command as root", dozvíš se, že existuje příkaz sudo.

Offline Zikáč

  • Nováček
  • *
  • Příspěvků: 9
    • Zobrazit profil
Re:Úkol :-)
« Odpověď #10 kdy: 29. 11. 2017, 21:23:29 »
Tak nakonec jsem na to přišel. Sudo mi zezačátku nechtěl fungovat, ale pak jsme se nějak domluvili :-)

Děkuji moc za rady :-)

Offline Zikáč

  • Nováček
  • *
  • Příspěvků: 9
    • Zobrazit profil
Re:Úkol :-)
« Odpověď #11 kdy: 09. 12. 2017, 19:47:54 »
Opět zdravím všechny :-)

A opět máme úkol, tentokrát to snad bude jednodušší. Mám spouštět skript každých 20 minut po restartu. To jak nastavit spouštění každých 20 minut bych už měl pomocí crontab, ale jak tam přidat ten restart(reboot)? Googlování ukazuje na @reboot, ale to se mi nějak nezdá. Byla by možná rada?

P.S.: Mám spouštět ten skript, který jsem tvořil na začátku tohoto vlákna - vytvoření uživatele.

Předem děkuji.

Offline Petr Gajdůšek

  • Začátečník
  • **
  • Příspěvků: 60
    • Zobrazit profil
Re:Úkol :-)
« Odpověď #12 kdy: 10. 12. 2017, 01:10:31 »
Ahoj,

nemám zkušenosti, ale kdybych chtěl co nejjednodušeji něco spouštět každých 20 minut po restartu, podíval bych se nejdříve na
Kód: [Vybrat]
man 5 systemd.timera na popis voleb OnBootSec= a OnUnitActiveSec=, případně OnUnitInactiveSec=

Offline Zikáč

  • Nováček
  • *
  • Příspěvků: 9
    • Zobrazit profil
Re:Úkol :-)
« Odpověď #13 kdy: 10. 12. 2017, 12:50:48 »
Zkoušel jsem hledat podle tvé rady. Našel jsem tento postup:

https://jason.the-graham.com/2013/03/06/how-to-use-systemd-timers/

Vše se mi povedlo nastavit bez problémů, skript se ale vůbec nespustí. Je na tom postupu něco špatně?

Díky..

Offline Petr Gajdůšek

  • Začátečník
  • **
  • Příspěvků: 60
    • Zobrazit profil
Re:Úkol :-)
« Odpověď #14 kdy: 10. 12. 2017, 17:18:45 »
Ten postup je v pořádku.

Snad jen zvýšit přesnost pomocí AccuracySec=, protože výchozí hodnota je 1 minuta, takže se ti skript bude volat každých 20 - 21 minut.

Zkontroluj status toho timeru a podívej se na logy.

TIP: Pokud ten script něco zapíše na standardní výstup (nebo standardní chybový výstup) tak se to objeví v logách. Toho můžeš využít k ladění.

Kód: [Vybrat]
$ sudo systemctl status myscript.timer
$ sudo journalctl --no-tail --follow --boot --unit myscript.service

Případně všechny logy (při omezení na unitu mně journalctl vynechává logy).
Kód: [Vybrat]
$ sudo journalctl --no-tail --follow --boot