Operační systéme II

Transkript

Operační systéme II
Operační systéme II
cvičení
Přihlášení: student student
mc – midnight commander
Ctrl+Alt+F1 až F6 – z grafického rozhraní
Alt+F1 až F6 – přepínání mezi nimi
Alt+F7 – zpět
ls adresář – zobrazí co je v daném adresáři
ls -l adresář – zobrací co je v daném adresáři a více detaily
ls -l adresář | more – zobazí po jednotlivých obrazovkách
ls -la – vypíše i skryté soubory
cd / - o úroveň výš
cd – hodí mě do mého adresáře – označen vlnovkou
cp „odkud“ „kam“- copy
mkdir – make directory
rm soubor – smaže soubor
rmdir adresář – smaže adresář
rm –r adresář – smaže vše v adresáři
cat – vypíše obsah souboru
man „příkaz“ – help příkazu (q - návrat z manuálu)
wc –l – počítá řádky
wc –m – počítá znaky
wc –c – počítá byty
root/
bin
boot
dev
etc
home
lib
media
mnt
opt
proc
root
sbin
srv
sys
tmp
usr
var
d rwx rwx rwx „počet linků“ „vlastník“ „datum poslední modifikace“ „délka“ „název“
d – adresář
- - soubor
l – link
r – právo číst
w – zapisovat
x – spustit ho
- - právo není uděleno
práva pro:
vlastník skupina ostatní
vlastník – každý adresář má svého vlastníka – individuálního i skupinového
ls –l /etc |grep „^d“ |wc –l
- spočítá jen adresáře
-1-
Christy
Operační systéme II
cvičení
bez šedé části – vypíše adresáře
cp /etc/passwd /home/student
- musíme mít práva
úplná cesta – začíná na začátku stromu (v rootu)
/etc/passwd
/home/student/data/data1
aktuální adresář – proměnná
neúplná cesta – použivá se tak, že se před ní předřadí aktuální adresář
cd /home/student/ – předřazení (umístění kde se nacházíme)
data/data1 – neúplná cesta
1. vytvořit adresář počítač4
mkdir pocitac4
2. zkopírovat soubory passwd a group pod názvem hesla a skupiny
cp /etc/passwd hesla
cp /etc/group skupiny
3. vypsat obsah souboru passwd
cat /etc/passwd
4. spočítat řádky souboru
cat /etc/passwd |wc –l
5. spočítat znaky souboru
cat /etc/passwd |wc –m
příkazy – např. ls
modifikátory – např. -la
argumenty – obvykle označení adresářů a souborů se kterými se má pracovat
Vi editor
1. v editoru vi napište následující program (jedná se o jednoduchou verzi programu cat)
vi mycat.c
/* cat: version 1 Print file on terminal */
#include <fcntl.h>
#include <stdio.h>
main(agrc,argv)
int argc;
char *argv[];
{
int d,count;
char buf[1024];
if(argc != 2);
printf(„error: cat must have one parametr\n“);
exit(1);
}
d = open(argv[1],O_RDONLY);
if(d == -1) {
printf(“cannot open file %s\n”, argv[1]);
exit(1);
}
while(( count = read(d,buf,sizeof(buf))) > 0)
write(1,buf,count);
return 0;
}
ESC
:w mycat.c
- uložení souboru
:q
-vyskočení bez uložení
-2-
Christy
Operační systéme II
cvičení
2. Program přeložte a spusťte.
Návod:
Soubor se zdrojovým programem nazvěte mycat.c
Překlad proveďte příkazem
$cc mycat.c –o mycat
- volání kompilátoru, musí se jmenovat *.c; -o definuje název, jinak by se jmenoval a.out
Přeloženým programem vypište obsah souboru /etc/passwd
$./mycat /etc/passwd
- tečka znamená aktuální adresář
3. V některém z editorů X-windows (např. v xeditu) napište následující skript:
#!/bin/bash
echo „********************************************“
echo „pripojeni uzivatele:“
who
echo „********************************************“
echo „Datum a cas:“
date
echo „********************************************“
4. Skript vyzkoušejte
Návod:
Soubor se skriptem nazvěte uvod.
Skriptu přidělte přístupové právo spuštění
$chod u+x uvod
Skript spusťte
$./uvod
Cvičení 3
1. Vypište hodnoty proměnných TERM, USER a ?. Zadejte příkaz ls tak, aby proměnná ? měla hodnotu 1.
echo $TERM
xterm
echo $USER
student
echo $?
0
ls -w
echo $?
1
2. V systému existují systémové programy true a false. Program true nedělá nic ale skončí úspěšně (tj. s návratovovou
hodnotou). Program false také nedělá nic , ale skončí neúspěšně (tj. s návratovou hodnotou 1).
V jazyce C realizujte vlastní verze těchto programů. Nazvěte je mytrue a myfalse a odzkoušejte.
main ()
main()
{
{
exit(1);
return 1;
}
}
3. Pomocí přesměrování standardního výstupu vytvořte programem cat soubor s názvem uzivatele a
s jednořádkovým obsahem
Tabulka uzivatelu:
Potom pomocí programu cat doplňte tento soubor o tabulku uživatelů, která je uložena v souboru /etc/passwd.
cat
ctrl+D
ctrl+C
cat >a
Tabulka uživatelů
ctrl+D
4. Soubor lze hledat pomocí příkazu
find / -name jméno_souboru -print
Spusťte příkaz find s přesměrováním chybového výstupu do souboru ~/find_errors nebo /dev/null.
find / -name jmeno_souboru 2>error
5. Příkazem nastavte proměnnou PATH tak, aby shell prohledával také aktuální a domácí adresář. Vyzkoušejte.
echo $PATH
6. Nastavte prompt shellu bash tak, aby se v promptu vypisoval také čas.
man bash
PS1="\n:xt>"
7. Změňte následující program cat (viz cvičení 2) tak, aby mohl být spuštěn také
A. bez parametrů (bude číst ze standardního vstupu) a
-3-
Christy
Operační systéme II
cvičení
B. s libovolným počtem parametrů (vypíše všechny soubory jeden po druhém)
/* cat: version 1 Print file on terminal */
#include <fcntl.h>
#include <stdio.h>
main(argc,argv)
int argc;
char *argv[];
{
int d,count;
char buf[1024];
if(argc != 2){
printf("error: cat must have one
parametr\n");
exit(1);
}
d = open(argv[1],O_RDONLY);
if(d == -1){
printf("cannot open file %s\n", argv[1]);
exit(1);
}
while(( count = read(d,buf,sizeof(buf))) > 0)
write(1,buf,count);
return 0 ;
}
Pomocí vašeho programu cat spojte soubory /etc/passwd a /etc/group a spojený soubor uložte do
passwd_group .
cat /etc/passwd > spoj
cat /etc/group >> spoj
cat /tec/passwd /tec/group >spoj
- jiná možnost zápisu
kii.pef.czu.cz
student student
ssh kii.pef.czu.cz -l student -p 995
putty
Cvičení 4
1. Použijte expansní výraz k výpisu informací o všech programech, které jsou v adresáři /bin a začínají na l nebo L.
Dalším příkazem zjistěte zda některý z programů v /bin končí na číslici.
ls /bin/[lL]*
ls -l /bin/*[0-9]
2. Příkazem ls vypište z domácího adresáře všechny skryté soubory.
ls ~/.*
3. Do proměnné X uložte aktuální datum a do proměnné Y uložte informaci o aktuálně připojených uživatelích (tj.
výstup programu who).
X=`date`
Y=`who`
4. Do proměnné Z uložte pouze aktuální čas.
(Návod: můžete buď použít modifikátor programu date který způsobí, že date vypíše pouze čas nebo můžete použít
složený příkaz
set ‘date‘ ; Z=$4
echo $4
set 100 200 300
echo $1
shift
echo $1
100
- posune to
200
-4-
Christy
Operační systéme II
cvičení
5. Sestavte tabulku z které bude patrné, jak následující znaky výluky ’
následujících znaků: $, *, \, ‘ ‘, > ?
echo $USER
echo `$USER`
echo "$USER"
’ , ”
” a \ ruší speciální význam
$
*
\
``
>
?
``
+
+
""
+
\
+
+
6. Napište script s nazvem nasob, který se bude spouštět se dvěma celočíselnými parametry a který vypíše jejich
součin
Návod:
#!/bin/bash
echo ‘expr $1 ’*’ $2‘
exit 0
Lze ve skriptu uzavřít znak * místo do jednoduchých uvozovek do dvojitých uvozovek? Vyzkoušejte a vysvětlete.
Zjednodušte druhou řádku skriptu a znovu skript vyzkoušejte.
expr 20 '*' 30
600
7. Vytvořte ve vašem domácím adresáři soubor který se bude jmenovat ?*!*. Potom jej přejmenujte na a_b.c
touch "?*!*"
8. Prohlédněte si jaké v shellu existují aliasy. Vytvořte v systému alias lb, který provede dlouhý výpis adresáře /bin
se zastavováním po naplnění obrazovky. Vyzkoušejte.
(alias lb=’ ls –l /bin | more’ )
alias lb=' ls -l /bin | more'
9. Jaký bude výsledek následujících složených příkazů:
test –w /etc/passwd ;echo $?
[ -f /bin/ls ];echo $?
[ -d /bin/ls ];echo $?
[ -r /etc/group –a –s /etc/group ];echo $?
Vyzkoušejte a vysvětlete. (operátor -a má význam and a operátor –s má význam nenulová délka souboru)
10. Jaký bude výsledek příkazů:
HISTSIZE=500
[ $HISTSIZE –lt 1000 ] ; echo $?
[ $HISTSIZE –ge 1000 ] ; echo $?
#!/bin/bash
if [ $# -eq 0 ]
then dir="."
else dir=$1
fi
while :
do
if [ ! -d $dir ]
then echo "$0 : $dir neni adresar"
else
echo "$dir :"
fcount=0
dcount=0
scount=0
for file in $dir/*
do
if [ -f $file ]
then
if [ -L $file ]
then scount=`expr $scount + 1`
-5-
Christy
Operační systéme II
cvičení
else fcount=`expr $fcount + 1`
fi
elif [ -d $file ]
then dcount=`expr $dcount + 1`
fi
done
echo $dcount adresaru $fcount obycejnych souboru $scount linku
fi
if [ $# -le 1 ]
then break
else
shift
dir=$1
fi
done
Cvičení 5
1. Jaký bude výsledek příkazů zadaných za sebou v bash shellu?
$echo
$echo
$!e
$echo
$[ -f
$echo
".*"
$?
’[ -f /etc/passwd ]’
/etc/passwd ] ; echo $?
.*
Echo $* Echo $? – vrati 0
!e – historie, posledni prikaz ktery zacina na retezec e
2. Vysvětlete a vyzkoušejte činnost následujícího skriptu. ( Proměnná # obsahuje počet parametrů spuštění)
#!/bin/bash
while [ $# -gt 0 ]
do
echo -n "$1 "
shift
done
echo
tento kód lze zaměnit za echo $* :)))
Skript podstatně zjednodušte tak, že použijete proměnnou *, která obsahuje všechy parametry spuštění.
3. Napište a odzkoušejte skript který spočte kolik je v zadaných adresářích podadresářů a kolik normálních souborů.
File: abc
Col 0
582 bytes
100%
#!/bin/bash
#nums : script vypise pocet souboru a adresaru
if [ $# -eq 0 ]
then dir="."
else dir=$1
fi
while :
do
if [ ! -d $dir ]
then echo "$0 : $dir neni adresar"
else
echo "$dir :"
fcount=0
dcount=0
for file in $dir/*
-6-
Christy
Operační systéme II
cvičení
do
if [ -f $file ]
then fcount=`expr $fcount + 1`
elif [ -d $file ]
then dcount=`expr $dcount + 1`
fi
done
echo $dcount adresaru $fcount obycejnych souboru
fi
if [ $# -le 1 ]
then break
else
shift
dir=$1
fi
done
Skript upravte tak, aby se:
1. započítávaly i skryté soubory
2. zvlášť vypisoval počet souborů, které jsou symbolickými linky
Cvičení 6
1. Ve svém domácím adresáři vytvořte kopie programů cp a cat s názvy kopie a vypis a dále podadresář
programy. V adresáři programy vytvořte hard link na program kopie s názvem cp a soft link na program
vypis s názvem cat, který bude obsahovat úplnou cestu k programu vypis. Kolik hard linků je na soubory kopie
a vypis a na podadresář programy? Ověřte programem ls.
/
- kopie (cp)
- výpis (cat)
- programy
- cat -> soft link na výpis
- cp -> hard link na kopie
– bude obsahovat úplnou cestu a pak tam bude hardlink, který se bude jmenovat cp na kopii
Cp cat ~/student/cat
Cp cp ~/student/cp
Mv cp kopie
Mv cat vypis
Ln soubor link
Ln –s soubor link
Ln –s ~/vypis ~/programy/cat
2. Pomocí programu grep zjistěte kolik je v adresáři /bin a /etc symbolických linků.
Návod : Pokud grep spustíte takto: grep ´^l´ , grep bude číst standardní vstup a propouštět pouze řádky, které
začínají na l.
Ls –l /bin | grep ‚*l‘ | wc -l
3. Nastavte přístupová práva k souboru kopie tak, aby výpis programem ls -l byl rwSr-sr—T a k souboru
vypis tak, aby výpis programem ls byl rwsr—xrwt. Který z programů kopie nebo vypis můžete spustit?
Vyzkoušejte.
Ls –l /usr/bin/passwd – vypise prava pro passwd | wc -l
Sbit uzivatele:
Find /usr/bin –user root –perm +6000
(hledani souboru, kde hledat, co se hleda – vlastnictvi root a permission a +6000 je sbit uzivatele nebo sbit skupiny)
Co udelat, kdyz se musi zmenit heslo rootu?
Xvin971 (mozna xwin971)
Jak nakopirovat bash pro sebe :)) (ale nejde to, prej, haha)
Cp /bin/bash ~
-7-
Christy
Operační systéme II
cvičení
Chmod 7777 ~/bash
Chown root bash
4. Zjistěte jak je v systému zajištěno, aby uživatel nemohl vytvořit kopii shellu s nastaveným s-bitem uživatele, který by
vlastnil root.
Návod : Vytvořte kopii shellu bash a nastavte mu všechna práva a s-bit uživatele. Potom zkuste předat jeho vlastnictví
superuživateli. Vytvořili jste kopii shellu s nastaveným s-bitem ve vlastnictví superuživatele?
5. Vytvořte v domácím adresáři kopii systémového programu cat s názvem mycat. Vytvořte soubor data s
libovolným obsahem. Nastavte přístupová práva k souborům mycat a data tak, aby ostatní uživatelé mohli zobrazit
obsah souboru data pouze vaším programem mycat .
Cesta povede takto, nikudy jinudy to jit nesmi:
Cat -> mycat -> data
Rwxr-xv-x +sbit uzivatele EVID
Jak musi byt nastavena prava, aby uzivatel soubor nemohl editovat a aby mohl
udelat zmenu sveho hesla?
/etc/passwd
/usr/bin/passwd
6. Programem find vytvořte soubor, který bude obsahovat výpis všech souborů, které jsou ve vlastnictví
superuživatele a které mají nastavem s-bit uživatele nebo s-bit skupiny. Popis programu find najdete v on-line
manuálu.
Cvičení 7
1.
a. Vypište všechny procesy, které v systému běží. (ps axl nebo ps –el)
b. Vypište jen procesy s přiřazeným terminálem. (ps al )
c. Vypište procesy, které máte ve svém vlastnictví. (ps -lu username )
d. Vypište všechny procesy, které jste spustili z shellu, kterému zadáváte příkazy. (ps –l)
(Ve všech příkazech můžete vynechat modifikátor l a dostanete zkrácený výpis. Pokud před modifikátory uvádíte – ,
používáte SYSTEM V syntax. Pokud – neuvádíte používáte BSD syntax.)
2. V jazyce C napište nekonečný cyklus.
Program spusťte na popředí a sledujte jeho činnost z jiného terminálu.
a. Program zrušte v okně, ve kterém běží.
b. Program znovu spusťte a zjistěte PID jeho rodiče.
c. Sledujte čas spotřebovaný procesem.
b. Program zrušte z druhého okna zasláním signálu.
3. Program z příkladu 1 spusťte na pozadí a sledujte jeho činnost ze stejného okna. Nakonec program zrušte.
4. Program z příkladu 1 spusťte na pozadí.
a. Program pozastavte zasláním signálu a přesvědčete se o jeho zablokování. (Signál, který způsobí pozastavení je
SIGSTOP (19) ).
b. Program odblokujte a přesvědčete se, že skutečně běží. (Signál, který způsobí odblokování je SIGCONT(18)).
c. Nakonec běžící program zrušte.
5. Napište skript, který každých 10 sec do souboru ~/journal vypíše datum a čas a připojené uživatele.
Skript vyzkoušejte.
Skript pozměňte tak, aby časový interval výpisu bylo možné zadávat parametrem spuštění skriptu.
6. Analýzou programu stanovte kolik procesů v systému poběží a kolik jich zůstane zablokováno , pokud přeložíte a
spustíte následující program.
main()
{
fork();
if(fork()==0)
-8-
Christy
Operační systéme II
cvičení
pause();
fork();
if(fork()==0)
while(1);
pause();
}
Výsledek ověřte tak, že program napíšete a spustíte.
Nakonec všechny procesy zrušte.
Fork znamená kopie.
Uložím jako něco.c
Nastaveni přístupových práv:
Chmod 777 neco.c
Kompilace
Cc neco.c
Vytvoří a.out a ten jde spouštět pomoci ./a.out
Ps –l
Vypíše procesy systému
./a.out &
Spuštění na pozadí
Při ps –l zobrazí a.out s PID
Kill PID – ukončí daný PID
Kill -19 PID
Pozastaví nebo dokončí prováděný PID
Kill -18 PID
Spuští daný PID
Killall a.out
Vypne najednou všechny vytvořené procesy programem a.out
Cvičení 8
1. Které z následujících znakových řetězců
12?
.cshrc
abc.c
!?cshrc
obsahují instanci následujícího regulárního výrazu:
a)
\.c.*
.c.*
b)
c)
bc..*
?c
bc
2. Výsledky z př. 1 ověřte pomocí programu grep. (Návod: Vytvoříte řádkový soubor, jehož řádky budou obsahovat
jednotlivé řetězce. Tento soubor bude vstupem programu grep, který budete spouštět s jednotlivými regulárními
výrazy.)
3. Pomocí programů ls, grep a wc spočtěte kolik je v /etc podadresářů a kolik je v /bin linkových souborů.
4. Pomocí programu grep vyhledejte všechny soubory s nastaveným s-bitem uživatele nebo s nastaveným s-bitem
skupiny. (Výpis všech souborů získáte příkazem ls –R / )
5. Přeložíte a spustíte následující program.
#include <stdio.h>
main()
{
if(fork()==0)
-9-
Christy
Operační systéme II
cvičení
execl(”/bin/date”, ”date”, NULL);
execl(”/bin/ls”, ”ls”,”-al”,”/etc”, NULL);
pause();
}
a)
b)
c)
d)
Který z programů ls a date je spuštěn rodičovským a který dětským procesem?
Kolik zůstane v systému zablokovaných procesů?
Vložte do programu tisky tak, aby bylo možné odpověď na otázku a) zkontrolovat. (Číslo procesu lze získat
pomocí volání getpid()a číslo rodičovského procesu pomocí volání getppid().
Program pozměňte tak, aby vznikl ještě jeden potomek původního rodičovského procesu, který bude vypisovat
obsah souboru /etc/passwd .
Grep ‚\.c.*‘
http://www.josef-dvorak.webzdarma.cz/36unx/36unx.htm
Ls –l /etc | grep ‚^d‘ | wc –l
Výsledek je 57 :))))
Ls –l /etc | grep ‚^l‘ | wc –l
Výsledek je 3
Cat ~/kopie | grep ‚^$‘ | wc -l
Wc –l – vytiskne počet řádek
Cat ~/kopie – vypíše na výstup obsah souboru kopie
Cat /etc/passwd | grep bash
Cat passwd udělá výpis souboru
Grep bash vypíše každou řádku, která obsahuje slovo bash
Cely příkaz vypíše soubor passwd, každou řádku, která obsahuje slovo bash
Ls –Rl / 2>/dev/null | grep ‘^_..[sS]‘
ls -Rl / 2>/dev/null | egrep '^[-dlbc]..[sS]|^_.....[sS]'
cc prog.c
- 10 -
Christy
Operační systéme II
cvičení
Dalsi priklad – kazdych 10 vterin vypise datum a prihlaseneho uzivatele do souboru journal
File Cv7
#!/bin/bash
if [ -f ~/journal ]
then rm ~/journal
fi
while :
do
date >>~/journal
who >>~/journal
echo '***********************' >>~/journal
sleep 10
done
chmod 777 cv7
./cv7
vytvori se soubor journal, ktery obsahuje dane informace.
Co dela program fork, jak ho resit co dela?
Fork vytvori novy proces puvodniho, takze mam dva procesy.
If fork==0 – pauza
- 11 -
Christy

Podobné dokumenty

Digitální kapesní videokamera „AIPTEK“

Digitální kapesní videokamera „AIPTEK“ Tiskněte tlačítko přepínaní režimů záznamu (MODE) tak dlouho, dokud se na displeji neobjeví symbol „hvězdy“ s písmenem „H“ (high = vysoká kvalita) nebo

Více

Databázové systémy Tomáš Skopal

Databázové systémy Tomáš Skopal mapování „objektů do tabulek“ přináší režii, kterou uživatel nevidí (což může být dobře i špatně)

Více

Tohle je jenom provizorní řešení (z časových důvodů)

Tohle je jenom provizorní řešení (z časových důvodů) Jestli budu dělat opravky :) tak si s tím možná ještě pohraji.

Více

Jana Richterová Půdní semenná banka a přežívání semenáčků v

Jana Richterová Půdní semenná banka a přežívání semenáčků v často bývá, že pro populační dynamiku daného druhu je limitující nedostatek semen na lokalitě, protože dosévané druhy často úspěšně klíčí i přežívají (review Turnbull et al.

Více

Swim Spa Hydropool

Swim Spa Hydropool 4. Pokud nemáte továrně vyrobený cedrový obklad, předpokládá se, že si stavíte vlastní na míru. Mějte proto na paměti následující: a) Váš bazén je samonosný. Cedrový obklad by měl být pouze pro dek...

Více

CPU RAM I/O BUS

CPU RAM I/O BUS verze je podstatně dražšı́ • pod Linux, soubory v /usr/doc obsahujı́ dokumentaci k jednotlivým komponentám OS a dalšı́m programům – HOWTO - jak udělat – FAQ (Frequently Asked Questions) - c...

Více

Souborové operace

Souborové operace ne adresáře. Pro mazání musí mít uživatel právo zápisu do adresáře, kde je soubor umístěn.

Více

Programování v Unixu

Programování v Unixu • předmět UNIX je 2/1, cvičení bude jednou za dva týdny v laboratoři UNIX • informace a materiály k přednášce na http://www.devnull.cz/mff • zapsat se na cvičení na webu • zápočet za zápočtový prog...

Více