Post on 17-Mar-2020
Wstęp do systemu Unix
Norbert Jankowski
Katedra Informatyki StosowanejUniwersytet Mikołaja Kopernika
www.is.umk.pl/~norbert/unix
NJ/Unix (KIS) Wstęp do systemu Unix 1 / 155
1 Unix i inne systemy2 Unix3 Serwery Wydziałowe i UMK4 Pliki, katalogi, partycje i ich narzędzia5 Przegląd poleceń
PomocCo/gdzie. . .ProcesyCzas
6 Archiwizacjagziptarcpiorsync
7 Powłoki — bashbashInstrukcje bash
NJ/Unix (KIS) Wstęp do systemu Unix 2 / 155
FuncjePrzykłady skryptów
8 Powłoki — csh, tcsh, sh, bashcshInstrukcje cshPrzykłady skryptów
9 Wirtualizacja — uruchamianie systemów wirtualnych
10 Poczta UMK/WWW
11 Knoppix
NJ/Unix (KIS) Wstęp do systemu Unix 3 / 155
Rola systemu operacyjnego
UżytkownikProgramSystem operacyjnyKomputer (Hardware)
NJ/Unix (KIS) Wstęp do systemu Unix 4 / 155
Unix i inne systemy
Systemy operacyjne
SOVMS
DOS
Windows
Unix
Mac OS
George
Web OS’ySingularity
NJ/Unix (KIS) Wstęp do systemu Unix 5 / 155
Unix i inne systemy
Systemy Unix
SOBSD
SolarisSunOS
AIX
Linux
HP-UX
SCO Unix
System V
NJ/Unix (KIS) Wstęp do systemu Unix 6 / 155
Unix i inne systemy
Systemy Linux
SOFedoraRed Hat
CentOS
[open]SuSe
Knoppix
Debian
UbuntuGentoo
Auroxi PLD
Linus Torvalds — twórca jądra Linuxa
NJ/Unix (KIS) Wstęp do systemu Unix 7 / 155
Unix
Unix, użytkownicy, procesy
UnixWieleprocesów
Programy
Serwisyssh
poczta WWW
NFS
Wieluużytkown-
ików
konto(-a)
NJ/Unix (KIS) Wstęp do systemu Unix 8 / 155
Unix
Dostęp użytkownika do systemu unix
UnixDostępzdalny
telnet ssh
X Serwer
VNC NX
Konsola terminale
TightVNC (Windows)
NJ/Unix (KIS) Wstęp do systemu Unix 9 / 155
Unix
Konto
Kontouid+u-numer
hasło
grupa
katalogdomowy
shell
NJ/Unix (KIS) Wstęp do systemu Unix 10 / 155
Serwery Wydziałowe i UMK
Konto — serwer UMK, serwery Wydziałowe
Strony LAN: http://lan.fizyka.umk.pl.Rozdział „1.3 Dostęp do konta wydziałowego (z powłoką) dlastudentów”.Strona http://www.uci.umk.pl/studenci/konto/.Po stworzeniu konta na stronach UCI w nocy następujeautomatycznie utworzenie konta na serwerze Wydziałowym.Postać uid: XXXXXX, gdzie XXXXXX to numer indeksuAdres poczty: XXXXXX@fizyka.umk.pl a takżei.nazwisko.s01@fizyka.umk.pl, gdzie „i” litera imienia
NJ/Unix (KIS) Wstęp do systemu Unix 11 / 155
Serwery Wydziałowe i UMK
Serwery Wydziałowe
WWW: www.fizyka.umk.plKonta z powłoką / Unix:
[ferm | nobel | uran | tor].fizyka.umk.plPoczta: mail.fizyka.umk.pl (SMTP, POP3, IMAP),ameryk.fizyka.umk.pl (POP3)Poczta WWW: poczta.umk.pl
IMP | Serwer/domena = „@fizyka.umk.pl (Studenci)”Studenci IMP
Dostęp z zewnątrz do Unixa: ameryk.fizyka.umk.plDostęp radiowy: Eduroam (http://eduroam.umk.pl/), OpenVPN(http://lan.fizyka.umk.pl)
NJ/Unix (KIS) Wstęp do systemu Unix 12 / 155
Serwery Wydziałowe i UMK
Logowanie do serwera Unix — Secure shell (SSH)
• ssh następca telnet• Konta z powłoką / Unix:
[ferm | nobel | uran | tor].fizyka.umk.pl
ssh$ ssh␣adres.maszyny$ ssh␣uid@adres.maszyny
$ ssh␣ferm.fizyka.umk.pl
login as: ziutekziutek@ferm’s password:Last login: Thu Oct 13 4:08:34 2008 from ciupaga.fizyka.umk.plziutek@ferm [~] 12:20$
• PUTTY (Windows)
NJ/Unix (KIS) Wstęp do systemu Unix 13 / 155
Pliki, katalogi, partycje i ich narzędzia
Pliki i katalogi
/
boot etc lib
modules
bin sbin usr
bin etc include lib
tmp home var
log spool
/ . .. ˜ ˜ziutek
pre* *post [abc]*[xyz] [a-z,0-9]* *.txt *.[cC] *.[cC]* *.[cC]??
/ /etc /usr/lib .xxxxxxx — pliki/katalogi ukryte
./etc etc ./.. .. ../../.. ./A/B_pod_A
NJ/Unix (KIS) Wstęp do systemu Unix 14 / 155
Pliki, katalogi, partycje i ich narzędzia
Podstawowe operacje na plikach i katalogach
pwdcdlscat, zcatless (more)mkdirrmdircpmvrmln
NJ/Unix (KIS) Wstęp do systemu Unix 15 / 155
Pliki, katalogi, partycje i ich narzędzia
pwd
$ pwd
/home/ziutek
cd$ cd␣/tmp$ cd␣podKatalog/xyz/$ cd␣-$ cd␣-$ cd␣
przejście do kat. domowego (cd ˜)
NJ/Unix (KIS) Wstęp do systemu Unix 16 / 155
Pliki, katalogi, partycje i ich narzędzia
ls$ ls␣/
bin del ff media opt scratch sys wwwboot dev home misc proc scratch2 tmp xxxd2 etc lib mnt root scratch_biofiz usrdebug.log fc4-smp lost+found net sbin staff var
$ ls␣a*$ ls␣*.c␣*.txt$ ls␣*.c␣/tmp/*.txt
NJ/Unix (KIS) Wstęp do systemu Unix 17 / 155
Pliki, katalogi, partycje i ich narzędzia
ls$ ls␣-l␣/etc
drwxr-xr-x 2 root root 4096 lip 15 2005 4Suite-rw-r--r-- 1 root root 15289 mar 23 2005 a2ps.cfg-rw-r--r-- 1 root root 2562 mar 23 2005 a2ps-site.cfgdrwxr-xr-x 4 root root 4096 lip 15 2005 acpi-rw-r--r-- 1 root root 46 lis 2 02:02 adjtimedrwxr-xr-x 4 root root 4096 lip 15 2005 alchemist-rw-r--r-- 1 root root 1512 kwi 25 2005 aliases-rw-r----- 1 root smmsp 12288 lis 10 2006 aliases.dbdrwxr-xr-x 4 root root 4096 lut 8 2006 alsadrwxr-xr-x 2 root root 4096 lis 10 2006 alternatives-rw-r--r-- 1 root root 329 mar 20 2006 anacrontab-rw-r--r-- 1 root root 395 sty 12 2005 ant.confdrwxr-xr-x 2 root root 4096 lip 15 2005 ant.d-rw------- 1 root root 1 kwi 8 2005 at.deny-rw-r----- 1 root root 404 lut 6 2006 auditd.conf-rw-r----- 1 root root 335 lut 6 2006 audit.rules...
NJ/Unix (KIS) Wstęp do systemu Unix 18 / 155
Pliki, katalogi, partycje i ich narzędzia
ls$ ls␣-la␣~
drwxr-xr-x 34 root root 4096 lis 2 00:10 .drwxr-xr-x 28 root root 4096 cze 5 10:56 ..-rw-r--r-- 1 root root 421 paź 14 2005 AddPrinterClient-rw-r--r-- 1 root root 0 sty 27 2006 .addressbook-rw------- 1 root root 2285 sty 27 2006 .addressbook.ludrwxr-xr-x 3 root root 4096 paź 14 2005 .adobe-rw------- 1 root root 1427 lip 15 2005 anaconda-ks.cfg-rw------- 1 root root 98444 kwi 17 2008 %backup%~-rw------- 1 root root 7802 mar 3 2007 .bash_historydrwxr-xr-x 2 root root 4096 cze 6 12:25 bindrwx------ 4 root root 4096 paź 21 2005 .cache...
-a — pliki/katalogi ukryte-R — rekurencja-t — sortowanie po czasie aktualizacji
NJ/Unix (KIS) Wstęp do systemu Unix 19 / 155
Pliki, katalogi, partycje i ich narzędzia
cat$ ls␣/etc␣>␣/tmp/j23.txt$ cat␣/tmp/j23.txt
4Suitea2ps.cfga2ps-site.cfgacpiadjtimealchemistaliasesaliases.dbalsaalternativesanacrontabant.conf...
$ zcat␣/var/log/cron.123.gz
NJ/Unix (KIS) Wstęp do systemu Unix 20 / 155
Pliki, katalogi, partycje i ich narzędzia
cat, more, less
$ cat␣p1␣p2␣p3␣>␣p
$ more␣/etc/passwd$ less␣/etc/passwd
poruszanie się: ←,→, ↑, ↓, page up, page down,szukanie: /xyz, szukanie dalej: n
NJ/Unix (KIS) Wstęp do systemu Unix 21 / 155
Pliki, katalogi, partycje i ich narzędzia
mkdir
mkdir$ mkdir␣/tmp/xyz$ ls␣-la␣/tmp/xyz$ mkdir␣/tmp/xyz/j23$ ls␣-laR␣/tmp/xyz
[root@hel ~]# mkdir /tmp/xyz[root@hel ~]# ls -la /tmp/xyzrazem 8drwxr-xr-x 2 root root 4096 lis 2 20:12 .drwxrwxrwt 28 root root 4096 lis 2 20:12 ..[root@hel ~]# mkdir /tmp/xyz/j23[root@hel ~]# ls -la /tmp/xyz/j23razem 8drwxr-xr-x 2 root root 4096 lis 2 20:13 .drwxr-xr-x 3 root root 4096 lis 2 20:13 ..
$ mkdir␣-p␣/tmp/a/b/c/d
NJ/Unix (KIS) Wstęp do systemu Unix 22 / 155
Pliki, katalogi, partycje i ich narzędzia
rmdir
rmdir$ rmdir␣/tmp/xyz/j23$ rmdir␣/tmp/xyz$ ls␣-laR␣/tmp/xyz
rmdir /tmp/xyz/j23/[root@hel ~]# rmdir /tmp/xyz/[root@hel ~]# ls -laR /tmp/xyzls: nie ma dostępu do /tmp/xyz: Nie ma takiego pliku ani katalogu
NJ/Unix (KIS) Wstęp do systemu Unix 23 / 155
Pliki, katalogi, partycje i ich narzędzia
cp, mv
cp, mv$ cp␣co␣gdzie$ cp␣/etc/passwd␣/tmp/$ cp␣/etc/passwd␣/tmp/xyz$ cp␣/etc/p*␣~/tmp/$ cp␣./podKat/*.c␣/tmp/kopia/
$ mv␣co␣gdzie$ mv␣/etc/passwd␣/tmp/$ mv␣/etc/passwd␣/tmp/xyz$ mv␣/etc/p*␣~/tmp/$ mv␣./podKat/*.c␣/tmp/kopia/
$ cp␣-a␣co␣gdzie— dobre do kopiowania całych drzew z utrzymaniem praw i własności
NJ/Unix (KIS) Wstęp do systemu Unix 24 / 155
Pliki, katalogi, partycje i ich narzędzia
scp — kopiowanie pomiędzy komputerami
scp$ scp␣co␣gdzie$ scp␣maszyna5:/tmp/plik␣.$ scp␣katABC/*␣nobel.fizyka.umk.pl:/tmp/$ scp␣katABC/*␣nobel.fizyka.umk.pl:tmp/$ scp␣katABC/*␣ziutek@j23.fizyka.umk.pl:/tmp/
-p — zachowuje daty i prawa-r — rekurencyjnie katalog
Windows: pscp (putty), WinSCP
NJ/Unix (KIS) Wstęp do systemu Unix 25 / 155
Pliki, katalogi, partycje i ich narzędzia
rm
rm$ rm␣pliki$ rm␣*.bak␣*.txt~$ rm␣*$ rm␣-r␣~/kopie
$ rm␣-rf␣xyz— usuwa bez pytania, ostatecznie ;)
NJ/Unix (KIS) Wstęp do systemu Unix 26 / 155
Pliki, katalogi, partycje i ich narzędzia
touch
touch$ touch␣j23$ ls␣j23
[root@hel ~norbert/tmp]# touch j23[root@hel ~norbert/tmp]# ls -la j23-rw-r--r-- 1 root root 0 lis 1 11:25 j23
NJ/Unix (KIS) Wstęp do systemu Unix 27 / 155
Pliki, katalogi, partycje i ich narzędzia
linki
ln$ cd␣~$ ln␣-s␣/var/log/messages␣m$ ls␣-la␣m$ less␣m
[root@hel ~norbert/tmp]# cd ~[root@hel ~]# ln -s /var/log/messages m[root@hel ~]# ls -la mlrwxrwxrwx 1 root root 17 lis 3 00:29 m -> /var/log/messages[root@hel ~]# less m...Nov 2 04:49:43 hel dhcpd: DHCPINFORM from 158.75.4.161 via eth1Nov 2 04:49:43 hel dhcpd: DHCPACK to 158.75.4.161 (00:0c:76:4b:27:9b) via eth1Nov 2 04:49:46 hel dhcpd: DHCPINFORM from 158.75.4.161 via eth1...
NJ/Unix (KIS) Wstęp do systemu Unix 28 / 155
Pliki, katalogi, partycje i ich narzędzia
$ ln␣-s␣~kolega/projekt/X␣~/projekty/
$ rm␣m— usuwa link jeśli to link symboliczny, w przeciwnym razie dowiązanie
• Link „twardy”:$ ln␣ciupaga␣ciupaga2$ ln␣~kolega/ciupaga␣.
• Link twardy tylko w obrębie danej partycji.
NJ/Unix (KIS) Wstęp do systemu Unix 29 / 155
Pliki, katalogi, partycje i ich narzędzia
Prawa dostępu
chmod 744 /tmp/p1.txt chmod u=rwx /tmp/p2.txt
chmod NNN plikKat
u g orwx rwx rwx421 421 421
chmod
ugoa
+
-=
rwxst
plikKat
u właścicielg wł. grupowyo innia wszyscy
+ dodać- zabrać= ustaw na
r czytaniew pisanie/zmianax wykonywanie/dostęps set[uid|gui]t del flag
NJ/Unix (KIS) Wstęp do systemu Unix 30 / 155
Pliki, katalogi, partycje i ich narzędzia
chmod$ chmod␣700␣plik$ chmod␣770␣plik$ chmod␣777␣p*$ chmod␣744␣plik$ chmod␣100␣plik$ chmod␣0␣plik$ chmod␣1700␣plik$ chmod␣6770␣katal
• 4-cyfra:1–t, 2–s (g), 4–s (u)
NJ/Unix (KIS) Wstęp do systemu Unix 31 / 155
Pliki, katalogi, partycje i ich narzędzia
chmod$ chmod␣u+rw␣plik$ chmod␣u+rw␣p*$ chmod␣go-rw␣plik$ chmod␣go=rw␣plik$ chmod␣u=rwx␣plik$ chmod␣go=␣plik$ chmod␣u+x␣plik$ chmod␣a+x␣-R␣plik
chmod$ chmod␣u+s␣prog$ chmod␣g+s␣katal$ chmod␣+t␣/tmp
-rwsr-xr-x 1 root root 24792 wrz 25 2007 /usr/bin/passwdll /tmpdrwxrwxrwt 26 root root 4096 lis 24 12:05 .
NJ/Unix (KIS) Wstęp do systemu Unix 32 / 155
Pliki, katalogi, partycje i ich narzędzia
Strona WWW użytkownika xyz a prawa dostępu
• Katalog startowy — ~xyz/public_html
• Plik startowy — index.html
$ chmod␣711␣~xyz$ chmod␣711␣~xyz/public_html$ chmod␣744␣~xyz/public_html/*
• index.htm, index.php, ...???
• prosty sposób na współdzielenie zasobów. . .
NJ/Unix (KIS) Wstęp do systemu Unix 33 / 155
Pliki, katalogi, partycje i ich narzędzia
Regulacja praw tworzonych plików i katalogów
umaskZabranie praw czytania i pisania dla grupy i innych:$ umask␣066Zabranie wszystkich praw dla grupy i innych:$ umask␣077Zabranie wszystkich praw dla innych użytkowników:$ umask␣007
NJ/Unix (KIS) Wstęp do systemu Unix 34 / 155
Pliki, katalogi, partycje i ich narzędzia
Ustawianie właściciela chown i chgrp
chown$ chown␣j23␣plik$ chown␣j23.stud␣plik$ chown␣-R␣j23.stud␣katal
chgrp
$ chgrp␣stud␣prog$$ chmod␣g+s␣proj33␣/work/proj33$ chgrp␣-R␣proj33␣/work/proj33
NJ/Unix (KIS) Wstęp do systemu Unix 35 / 155
Pliki, katalogi, partycje i ich narzędzia
Wyszukiwanie — find
findWyszukuje wszystko z .$ find␣.Wyszukuje wszystko z /tmp/xyz$ find␣/tmp/xyzWyszukaj pliki a* z ’.’ i podkatalogów$ find␣.␣-name␣"a*"␣-print$ find␣.␣-name␣"a*"
./Programy/SNNSv3.3/examples/art1_letters.cfg
./Programy/SNNSv3.3/examples/art1_letters.net
./Programy/SNNSv3.3/examples/art1_letters.pat
...
$ find␣.␣-mtime␣-20␣\(␣-name␣"*.c"␣-or␣-name␣"*.h"␣\)
NJ/Unix (KIS) Wstęp do systemu Unix 36 / 155
Pliki, katalogi, partycje i ich narzędzia
find$ find␣.␣-name␣"a*"␣-mtime␣+2$ find␣.␣-name␣"*.c"␣-name␣"*.h"␣-atime␣+2-xdev (-mount) — tylko dana partycja / urządzenie-newer␣file — elementy młodsze niż „file”-anewer␣file — j.w. tylko czas dostępu-type [f|d|l]-group␣g-user␣u-size␣+100M -delete
$ find␣.␣-exec␣echo␣xx␣’{}’␣yy␣\;
xx . yyxx ./Root yyxx ./T yyxx ./diary yyxx ./lan yy
NJ/Unix (KIS) Wstęp do systemu Unix 37 / 155
Pliki, katalogi, partycje i ich narzędzia
mc
• Norton commander → MC
• Total commander
NJ/Unix (KIS) Wstęp do systemu Unix 38 / 155
Pliki, katalogi, partycje i ich narzędzia
Selekcja wierszy z pliku
grep
$ grep␣tekst␣plik$ grep␣-i␣tekst␣plik$ grep␣-v␣tekst␣plik$ grep␣^poczatek␣plik$ grep␣koniec$␣plik
-i — nie rozróżnia małe/duże-l — nazwy plików
-n — numery wierszy-v␣tekst — wiersze bez ‘tekst’
[root@hel ~]# grep ^tom /etc/passwdtomkoz:x:5613:102:Tomasz Korzeniewski:/home/tomkoz:/bin/tcshtomlacz:x:5156:105:Tomasz Laczkowski:/home/tomlacz:/bin/tcshtomek:x:6787:105:Tomasz Dziubak:/home/tomek:/bin/tcsh...
NJ/Unix (KIS) Wstęp do systemu Unix 39 / 155
Pliki, katalogi, partycje i ich narzędzia
Początki i końce plików — head i tail
head$ head␣/etc/passwd$ head␣-5␣/etc/passwd
tail$ tail␣/var/log/messages$ tail␣-200␣/var/log/messages$ tail␣-f␣/var/log/messages
NJ/Unix (KIS) Wstęp do systemu Unix 40 / 155
Pliki, katalogi, partycje i ich narzędzia
Zliczanie znaków, słów, wierszy — wc
wc$ wc␣/etc/passwd$ wc␣-l␣/etc/passwd$ wc␣plik1␣plik2␣plik3
-c — znaki-w — słowa-l — wiersze
NJ/Unix (KIS) Wstęp do systemu Unix 41 / 155
Pliki, katalogi, partycje i ich narzędzia
sort, uniq
sort$ sort$ sort␣plik$ sort␣-n$ ls␣-l␣|␣sort␣-k␣5
-n — numerycznie (nie-alfanumeryczne)-r — odwrotny porządek-k␣N — sortuje względem kolumny N
uniq
$ uniq␣plik
NJ/Unix (KIS) Wstęp do systemu Unix 42 / 155
Pliki, katalogi, partycje i ich narzędzia
Porównywanie plików
diff$ diff␣plikA␣plikB$ diff␣/etc/passwd␣/etc/passwd~
> s211232:x:5538:104:Karol Piotr Świetlik:/home/s211232:/bin/tcsh1477a1599,1600> s188923:x:5633:104:Lukasz Mentel:/home/s188923:/bin/tcsh> s201370:x:5634:104:Tomasz Pawlak:/home/s201370:/bin/tcsh1505a1629> s183675:x:5583:104:Marcin Szupke:/home/s183675:/bin/tcsh1544,1717d1667< 227198:x:5712:104:Mateusz Jędrzej Baziński:/home/227198:/bin/tcsh< 233633:x:5713:104:Konrad Pawlak:/home/233633:/bin/tcsh
Z diff3 −→ CVS, SVN
NJ/Unix (KIS) Wstęp do systemu Unix 43 / 155
Pliki, katalogi, partycje i ich narzędzia
Analiza zajętości partycji
df$ df␣/tmp$ df␣~$ df
[root@ciupaga ~]# dfSystem plików bl. 1K B użyte dostępne %uż. zamont. na/dev/root 28842780 27426140 1416640 96% //dev/sda1 287782 81582 206200 29% /boot/dev/shm 1548156 24 1548132 1% /dev/shm/dev/sda7 328891672 167652776 161238896 51% /staff/dev/sda8 77490532 58762976 18727556 76% /images/dev/sda5 2893628 244032 2649596 9% /tmp/dev/sda2 38456340 30281176 8175164 79% /var/dev/sdb1 307663800 226677156 80986644 74% /windows
NJ/Unix (KIS) Wstęp do systemu Unix 44 / 155
Pliki, katalogi, partycje i ich narzędzia
Analiza zajętości katalogów
du$ du$ du␣-s␣*
[root@hel /staff/stud]# du -s *19596 s11409417980 s1301018828 s130185352 s1302004 s13242510492 s13291966760 s1349689180 s1404671628 s142400
Informacje w KBKiedyś należało dodać -k aby informacje były w KB.
NJ/Unix (KIS) Wstęp do systemu Unix 45 / 155
Pliki, katalogi, partycje i ich narzędzia
Montowanie urządzeń
mount$ mount␣/dev/sda1␣/kat1$ mount␣-t␣ext3␣/dev/sda1␣/kat1$ mount␣-t␣ntfs␣/dev/sda1␣/kat1$ mount␣/dev/cdrom␣/media/cdrom$ mount␣maszynaABC:/work/projektX␣/work/projektX$ mount␣-o␣loop␣-t␣iso9660␣obrazCD.iso␣/tmp/jakisKat$ mount␣-t␣smbfs␣//maszyna/udział␣/tmp/jakisKat␣-o␣\username=win_user,password=hasło
umount$ umount␣/kat1
• umount wymaga aby udział nie był używany!• exportfs␣-o␣rw␣maszyna:/usr/tmp — udostępnienie udziałumaszynie maszyna. Por. plik /etc/exports
NJ/Unix (KIS) Wstęp do systemu Unix 46 / 155
Pliki, katalogi, partycje i ich narzędzia
mount/dev/root on / type ext3 (rw)/dev/proc on /proc type proc (rw)/dev/sys on /sys type sysfs (rw)/dev/devpts on /dev/pts type devpts (rw,gid=5,mode=620)/dev/sda1 on /boot type ext3 (rw)/dev/shm on /dev/shm type tmpfs (rw)/dev/sda7 on /staff type ext3 (rw,noatime,usrquota,barrier=1)/dev/sda8 on /images type ext3 (rw,noatime,barrier=1)/dev/sda5 on /tmp type ext3 (rw,noatime)/dev/sda2 on /var type ext3 (rw,noatime)/staff on /misc/staff type none (rw,bind).../misc/staff/dokt/drpepe on /home/drpepe type none (rw,bind)/misc/staff/kis/duch on /home/duch type none (rw,bind)/misc/staff/ifiz/jacek on /home/jacek type none (rw,bind)/misc/staff/stud/189220 on /home/189220 type none (rw,bind)/misc/staff/ifiz/milosz on /home/milosz type none (rw,bind)
NJ/Unix (KIS) Wstęp do systemu Unix 47 / 155
Pliki, katalogi, partycje i ich narzędzia
/etc/fstab
/etc/fstabLABEL=/ / ext3 defaults 1 1LABEL=/boot /boot ext3 defaults 1 2...LABEL=/staff /staff ext3 usrquota,noatime,barrier=1 1 2/dev/sdb1 /windows ext3 noatime,barrier=1 1 2LABEL=/tmp /tmp ext3 noatime 1 2LABEL=/var /var ext3 noatime 1 2/dev/sda6 swap swap defaults 0 0
mount/fstab
$ mount␣/var
mount/fstab/NFS — jako element /etc/fstabciupaga:/software /software nfs rw,defaults 0 0
NJ/Unix (KIS) Wstęp do systemu Unix 48 / 155
Pliki, katalogi, partycje i ich narzędzia
/etc/exports — NFS
/etc/exports/scratch 158.75.5.0/24(rw,root_squash)/software 158.75.4.0/23(rw,no_root_squash)#/software 158.75.4.5(rw,no_root_squash)#/software 158.75.4.0/23(ro,root_squash)#/software 192.168.9.0/24(ro,root_squash)
root_squash root ⇒ nobody (na kliencie)
NJ/Unix (KIS) Wstęp do systemu Unix 49 / 155
Pliki, katalogi, partycje i ich narzędzia
dd
dd$ dd␣if=/dev/cdrom␣of=cd.iso$ dd␣if=/dev/dvd␣of=/tmp/dvd.iso
Tworzy 1GB plik duzy_plik$ dd␣if=/dev/zero␣of=duzy_plik␣bs=1024K␣count=1024
Poniższe może sie przyda do oceny prędkości czytania urządzenia wpołączeniu z sync$ dd␣if=duzy_plik␣of=/dev/null$ dd␣if=duzy_plik␣of=/dev/null␣bs=1024
NJ/Unix (KIS) Wstęp do systemu Unix 50 / 155
Przegląd poleceń Pomoc
Pomoc
man$ man␣ls
LS(1) User Commands LS(1)
NAMEls - list directory contents
SYNOPSISls [OPTION]... [FILE]...
DESCRIPTIONList information about the FILEs (the current directory by default).Sort entries alphabetically if none of -cftuvSUX nor --sort.
Mandatory arguments to long options are mandatory for short optionstoo.
-a, --all
NJ/Unix (KIS) Wstęp do systemu Unix 51 / 155
Przegląd poleceń Pomoc
man$ man␣-s␣3␣printf
PRINTF(3) Linux Programmer’s Manual PRINTF(3)
NAMEprintf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf,vsnprintf - formatted output conversion
SYNOPSIS#include <stdio.h>
int printf(const char *format, ...);int fprintf(FILE *stream, const char *format, ...);int sprintf(char *str, const char *format, ...);int snprintf(char *str, size_t size, const char *format, ...);
NJ/Unix (KIS) Wstęp do systemu Unix 52 / 155
Przegląd poleceń Pomoc
info$ info␣find
File: find.info, Node: Invoking find, Next: Invoking locate, Up: Reference
6.1 Invoking ‘find’===================
find [-H] [-L] [-P] [FILE...] [EXPRESSION]
‘find’ searches the directory tree rooted at each file name FILE byevaluating the EXPRESSION on each file it finds in the tree.
The options ‘-H’, ‘-L’ or ‘-P’ may be specified at the start of thecommand line (if none of these is specified, ‘-P’ is assumed). If youspecify more than one of these options, the last one specified takes
NJ/Unix (KIS) Wstęp do systemu Unix 53 / 155
Przegląd poleceń Co/gdzie. . .
Kto
who$ who
[norbert@hel ~]$ whoroot pts/0 2008-11-17 00:09 (norbert.vpn.phys.uni.torun.pl)jkob pts/6 2008-10-29 23:46 (:1.0)jkob pts/7 2008-10-29 23:46 (:2.0)
w$ w
[root@hel /var/log]# w14:57:41 up 58 days, 4:43, 3 users, load average: 0,77, 0,98, 0,91USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATroot pts/0 norbert.vpn.phys 13:54 0.00s 0.55s 0.01s wjkob pts/6 :1.0 29Oct08 24days 0.08s 0.08s -tcshjkob pts/7 :2.0 29Oct08 24days 0.25s 0.25s -tcsh
NJ/Unix (KIS) Wstęp do systemu Unix 54 / 155
Przegląd poleceń Co/gdzie. . .
Który, gdzie
which$ which
[norbert@hel /]$ which find/usr/bin/find
where$ where
[norbert@hel ~]$ where find/usr/bin/find./find
NJ/Unix (KIS) Wstęp do systemu Unix 55 / 155
Przegląd poleceń Co/gdzie. . .
finger
finger
$ finger␣tomek
[root@hel /staff/stud]# finger tomekLogin: tomek Name: Tomasz DziubakDirectory: /home/tomek Shell: /bin/tcshNever logged in.New mail received nie lis 23 18:44 2008 (CET)
Unread since nie wrz 14 21:35 2008 (CEST)No Plan.
.plan — plik z planem/opisem (o danej osobie)
NJ/Unix (KIS) Wstęp do systemu Unix 56 / 155
Przegląd poleceń Procesy
Procesy
ps
$ ps
[norbert@hel ~]$ psPID TTY TIME CMD3788 pts/0 00:00:00 ps11477 pts/0 00:00:00 tcsh[norbert@hel ~]$
ps
$ ps␣l$ ps␣u
[norbert@hel ~]$ ps uUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDnorbert 3958 0.0 0.0 88212 868 pts/0 R+ 01:16 0:00 ps unorbert 11477 0.0 0.0 88860 1800 pts/0 S 00:10 0:00 -tcsh
-l — jeszcze więcej. . .NJ/Unix (KIS) Wstęp do systemu Unix 57 / 155
Przegląd poleceń Procesy
ps
$ ps␣au
[norbert@hel ~]$ ps auUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDnorbert 4083 0.0 0.0 88212 864 pts/0 R+ 01:16 0:00 ps auroot 7230 0.0 0.0 3792 528 tty2 Ss+ Sep26 0:00 /sbin/mingettyroot 7231 0.0 0.0 3792 520 tty3 Ss+ Sep26 0:00 /sbin/mingettyroot 7232 0.0 0.0 3792 532 tty4 Ss+ Sep26 0:00 /sbin/mingettyroot 7233 0.0 0.0 3792 528 tty5 Ss+ Sep26 0:00 /sbin/mingettyroot 7234 0.0 0.0 3792 528 tty6 Ss+ Sep26 0:00 /sbin/mingettyroot 10613 0.0 0.0 88812 1768 pts/0 Ss 00:09 0:00 -tcshroot 11476 0.0 0.0 121128 1272 pts/0 S 00:10 0:00 su - norbertnorbert 11477 0.0 0.0 88860 1800 pts/0 S 00:10 0:00 -tcshjkob 19743 0.0 0.0 88772 1736 pts/6 Ss+ Oct29 0:00 -tcshjkob 19810 0.0 0.0 89080 2080 pts/7 Ss+ Oct29 0:00 -tcshsjw 27205 0.0 0.0 88580 1524 pts/1 Ss+ Oct09 0:00 -bin/tcsh...
NJ/Unix (KIS) Wstęp do systemu Unix 58 / 155
Przegląd poleceń Procesy
ps
$ ps␣aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.0 10308 768 ? Ss Sep26 0:23 init [3]root 2 0.0 0.0 0 0 ? S< Sep26 0:00 [kthreadd]root 3 0.0 0.0 0 0 ? S< Sep26 0:00 [migration/0]root 4 0.0 0.0 0 0 ? S< Sep26 9:31 [ksoftirqd/0]root 5 0.0 0.0 0 0 ? S< Sep26 0:13 [watchdog/0]root 6 0.0 0.0 0 0 ? S< Sep26 1:01 [events/0]root 7 0.0 0.0 0 0 ? S< Sep26 0:00 [khelper]root 60 0.0 0.0 0 0 ? S< Sep26 3:56 [kblockd/0]root 62 0.0 0.0 0 0 ? S< Sep26 0:00 [kacpid]root 63 0.0 0.0 0 0 ? S< Sep26 0:00 [kacpi_notify]root 170 0.0 0.0 0 0 ? S< Sep26 0:00 [cqueue]root 172 0.0 0.0 0 0 ? S< Sep26 0:00 [ksuspend_usbd]...
$ ps␣-U␣xyz␣u␣$ ps␣axu␣|␣grep␣xyz-U — uruchomiony przez uid, -u — efektywny uid ps␣eflU␣norbert
NJ/Unix (KIS) Wstęp do systemu Unix 59 / 155
Przegląd poleceń Procesy
top
$ top
top - 01:40:39 up 63 days, 14:21, 9 users, load average: 0.00, 0.00, 0.00Tasks: 217 total, 1 running, 216 sleeping, 0 stopped, 0 zombieCpu(s): 0.1% us, 0.2% sy, 0.0% ni, 99.7% id, 0.1% wa, 0.0% hi, 0.0% siMem: 1035832k total, 932752k used, 103080k free, 250916k buffersSwap: 1959888k total, 219152k used, 1740736k free, 363748k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND22183 norbert 16 0 2144 1144 824 R 1.0 0.1 0:00.06 top
1 root 16 0 1736 88 60 S 0.0 0.0 0:17.62 init2 root RT 0 0 0 0 S 0.0 0.0 0:21.02 migration/03 root 34 19 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/04 root RT 0 0 0 0 S 0.0 0.0 0:01.74 migration/15 root 34 19 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/16 root RT 0 0 0 0 S 0.0 0.0 0:02.28 migration/27 root 34 19 0 0 0 S 0.0 0.0 0:00.05 ksoftirqd/2
10 root 10 -5 0 0 0 S 0.0 0.0 0:02.57 events/0
VIRT = SWAP + RES RES = CODE + DATA DATA = data + stackSHR – pamięć współdzielona z innymi procesami
NJ/Unix (KIS) Wstęp do systemu Unix 60 / 155
Przegląd poleceń Procesy
Usuwanie procesów
kill$ kill␣1234$ kill␣-9␣1234
Zabija wszystkie procesy do których ma się prawa (nigdy nie wykonywaćjako root!):$ kill␣-9␣0
NJ/Unix (KIS) Wstęp do systemu Unix 61 / 155
Przegląd poleceń Procesy
Zmiana priorytetów procesów
nice, renice$ nice␣-priorytet␣proces␣argumenty$ nice␣-19␣prg␣13␣1313␣131313$ nice␣-19␣dlugie_obliczenia$ nice␣-19␣jakas_archiwizacja
$ renice␣priorytet␣PID$ renice␣19␣1234
NJ/Unix (KIS) Wstęp do systemu Unix 62 / 155
Przegląd poleceń Procesy
Zadania
CTRL-c — przerywa zadanie, CTRL-z — zawiesza zadanie
Uruchomienie zadania w tle$ find␣/␣-name␣"core"␣>␣/tmp/wynik␣&$ nohup␣find␣/␣-name␣"core"␣>␣/tmp/wynik␣&
jobs
$ jobs
[root@hel ~norbert/tmp]# emacs zzz...[CTRL-z][root@hel ~norbert/tmp]# find / > zzz &[2] 20123[root@hel ~norbert/tmp]# jobs[1] + Suspended emacs zzz[2] - Running find / > zzz
NJ/Unix (KIS) Wstęp do systemu Unix 63 / 155
Przegląd poleceń Procesy
fg — przywracanie wykonywania
$ fg␣%1
bg — kontynuacja wykonywania w tle
$ bg␣%2
jobs, kill %N[root@hel ~norbert/tmp]# jobs[2] + Suspended find / > zzz[root@hel ~norbert/tmp]# kill %2[2] Terminated find / > zzz
NJ/Unix (KIS) Wstęp do systemu Unix 64 / 155
Przegląd poleceń
Zmiana tożsamości
$ su$ su␣-$ su␣-c␣polecenie␣userXYZ
$ su␣norbert$ su␣-␣norbert$ su$ su␣-
[root@hel ~]# su norbert[norbert@hel /root]$ exitexit[root@hel ~]# su - norbert[norbert@hel ~]$ suHasło:[norbert@hel /home/norbert]# exitexit[norbert@hel ~]$ su -Hasło:[root@hel ~]#
NJ/Unix (KIS) Wstęp do systemu Unix 65 / 155
Przegląd poleceń Czas
Data, czas, strefa czasowa
date$ date␣MMDDhhmm[[CC]YY][.ss]
$ date$ date␣+%y%m%d-%H%M%S
pon, 13 lis 2008, 10:18:16 CET
081113-101816
Ustawianie strefy czasowejln␣-sf␣/usr/share/zoneinfo/your/zone␣/etc/localtimeln␣-sf␣/usr/share/zoneinfo/Europe/Warsaw␣/etc/localtime
Synchronizacja zegara
$ rdate␣-s␣ntp.task.gda.pl
NJ/Unix (KIS) Wstęp do systemu Unix 66 / 155
Przegląd poleceń Czas
Liczenie zużytego czasu
time$ time␣polecenie␣arg1␣arg2␣...$ time␣grep␣kot␣/etc/*
...0.052u 0.039s 0:00.64 12.5% 0+0k 11096+8io 0pf+0w
%Uuser %Ssystem %Eelapsed %PCPU (%Xtext+%Ddata %Mmax)
NJ/Unix (KIS) Wstęp do systemu Unix 67 / 155
Przegląd poleceń
Drukowanie
lpr
$ lpr␣-Pabc␣plik
lpq
$ lpq␣-Pabc
lprm
$ lprm␣nr_zad
NJ/Unix (KIS) Wstęp do systemu Unix 68 / 155
Przegląd poleceń
mail — łatwy sposób wysłania emaila
Ten sposób obsługi jest szczególnie przydatny dla skryptów.
mail$ mail␣-s␣tytul␣adresat
$ mail␣-s␣swieta␣j23@fizyka.umk.pl␣<␣tresc_listu
• Przydatne dla różnych typów alarmów/komentarzy• email 2 SMS. . .CTRL-d — koniec pliku
NJ/Unix (KIS) Wstęp do systemu Unix 69 / 155
Przegląd poleceń
at, atq, atrm, batch
Wykonywanie zadań w kolejkach i w określonym czasie.Wyjście i wyjście błędów przesyłane jest emailem.
at$ at␣[-q␣kolejka]␣[-f␣plik_z_zadaniami]␣CZAS$ xx
[root@hel ~]# at 7:11at> zadanie1at> <EOT>job 102 at Mon Dec 8 07:11:00 2008[root@hel ~]#[root@hel ~]# at 7:11 Dec 13at> zadanie2at> <EOT>job 103 at Sat Dec 13 07:11:00 2008
-q [a-z] — kolejki są nazywane literami od „a” do „z”. Z czym takżewiążą się priorytety
NJ/Unix (KIS) Wstęp do systemu Unix 70 / 155
Przegląd poleceń
at[root@hel ~]# at 7:11 Dec 13, 2010at> zadanie3at> <EOT>job 104 at Mon Dec 13 07:11:00 2010[root@hel ~]#[root@hel ~]# at -f plik 7:11 Dec 13, 2010job 105 at Mon Dec 13 07:11:00 2010[root@hel ~]#
atq
$ atq
[root@hel ~]# atq102 Mon Dec 8 07:11:00 2008 a root103 Sat Dec 13 07:11:00 2008 a root104 Mon Dec 13 07:11:00 2010 a root105 Mon Dec 13 07:11:00 2010 a root[root@hel ~]#
NJ/Unix (KIS) Wstęp do systemu Unix 71 / 155
Przegląd poleceń
atrm[root@hel ~]# atrm 103 104[root@hel ~]# atq102 Mon Dec 8 07:11:00 2008 a root105 Mon Dec 13 07:11:00 2010 a root[root@hel ~]#
batch[norbert@hel ~]$ batch < plikjob 109 at Tue Dec 2 11:46:00 2008[norbert@hel ~]$
NJ/Unix (KIS) Wstęp do systemu Unix 72 / 155
Przegląd poleceń
Dziennik zadań cyklicznych — crontab
MIN • GODZ • DZIEŃ-Mie • MIES • DZIEŃ-Tyg • z-a-d-a-n-i-e
crontab
$ crontab␣plik$ crontab␣[-u␣user]␣[-l]␣[-e]␣[-r]
[norbert@hel ~]$ crontab2 13 * * 7 skrypt13[norbert@hel ~]$ crontab -l2 13 * * 7 skrypt13[norbert@hel ~]$ crontab -r[norbert@hel ~]$ crontab -lno crontab for norbert
-e — edycja*/30␣*␣*␣*␣*␣/root/bin/chkfw.sh␣>>␣/var/log/chkfw.log — co 30minut0␣8,14,20␣*␣*␣*␣/root/bin/wbijanieCiupagi — wyk. o godz 8, 14, 20
NJ/Unix (KIS) Wstęp do systemu Unix 73 / 155
Przegląd poleceń
Narzędzia tworzenia systemów plików
mkfs$ mkfs.ext3␣/dev/sdc4$ mkfs.ext3␣-L␣’/boot’␣/dev/sdc4$ mkfs.ntfs␣/dev/hdb1$ mkfs.msdos␣/dev/hdb1$ mkfs.reiserfs␣/dev/sdb1
• mkswap␣/dev/sda4• dd␣if=/dev/zero␣of=plik_wymiany␣bs=1024␣count=65536;• swapon␣plik_wymiany• tune2fs␣...• fsck␣/dev/sd2-a — auto-naprawa
NJ/Unix (KIS) Wstęp do systemu Unix 74 / 155
Archiwizacja gzip
Kompresja
gzip, gunzip
$ gzip␣pliktworzy: plik.gz
$ gunzip␣plik.gztworzy plik i usuwa plik.gz
-d — dekompresja (dla gzip)-c — wynik na std wyjście-r — rekurencyjnie podróżuje po katalogu (także dla gzunip)compress, uncompress
$ compress␣pliktworzy: plik.Z
$ uncompress␣plik.Ztworzy plik i usuwa plik.Z
NJ/Unix (KIS) Wstęp do systemu Unix 75 / 155
Archiwizacja tar
tar
tar c$ tar␣cvf␣archiwum.tar␣./projektX
[root@hel ~norbert]# tar cvf archiwum.tar projektXprojektX/projektX/a1projektX/a2projektX/a3
c — createv — verbosef — file
NJ/Unix (KIS) Wstęp do systemu Unix 76 / 155
Archiwizacja tar
tar c — tworzenie archiwum$ tar␣cvf␣-␣./projektX␣|␣gzip␣>␣archiwum.tar.gz
[root@hel ~norbert]# tar cvf - ./projektX | gzip > archiwum.tar.gz./projektX/./projektX/a1./projektX/a2./projektX/a3[root@hel ~norbert]# ll archiwum.tar.gz-rw-r--r-- 1 root root 162 lis 30 23:43 archiwum.tar.gz
tar c$ tar␣czf␣archiwum.tar.gz␣./projektX
NJ/Unix (KIS) Wstęp do systemu Unix 77 / 155
Archiwizacja tar
tar t — podgląd archiwum
$ tar␣tf␣archiwum.tar$ tar␣tzf␣archiwum.tar.gz$ gzip␣-cd␣archiwum.tar.gz␣|␣tar␣tvf␣-$ tar␣tvzf␣archiwum.tar.gz
[root@hel ~norbert]# tar tzf archiwum.tar.gz./projektX/./projektX/a1./projektX/a2./projektX/a3[root@hel ~norbert]# tar tvzf archiwum.tar.gzdrwxr-xr-x root/root 0 2008-11-30 23:39 ./projektX/-rw-r--r-- root/root 0 2008-11-30 23:39 ./projektX/a1-rw-r--r-- root/root 0 2008-11-30 23:39 ./projektX/a2-rw-r--r-- root/root 0 2008-11-30 23:39 ./projektX/a3
NJ/Unix (KIS) Wstęp do systemu Unix 78 / 155
Archiwizacja tar
tar x — wyciąganie z archiwum
$ tar␣xf␣archiwum.tar$ tar␣xzf␣archiwum.tar.gz$ gzip␣-cd␣archiwum.tar.gz␣|␣tar␣xvf␣-$ tar␣xvzf␣archiwum.tar.gz
[root@hel ~norbert]# tar xvzf archiwum.tar.gz./projektX/./projektX/a1./projektX/a2./projektX/a3
NJ/Unix (KIS) Wstęp do systemu Unix 79 / 155
Archiwizacja tar
tar | tar
$ tar␣cf␣-␣projektX/␣|␣tar␣xvf␣-␣-C␣~/tmp/
[root@hel ~norbert]# tar cf - projektX/ | tar xvf - -C ~/tmp/projektX/projektX/a1projektX/a2projektX/a3
$ tar␣cf␣-␣projektX/␣|␣ssh␣ferm␣tar␣xf␣-␣-C␣~/tmp/
NJ/Unix (KIS) Wstęp do systemu Unix 80 / 155
Archiwizacja cpio
cpio
cpio -o — tworzenie archiwum
$ cd␣projektX$ ls|cpio␣-ov␣>␣/tmp/archiwum.cpio
-v — verbose
cpio -i — wyciąganie z archiwum
$ cpio␣-iv␣<␣archiwum.cpio$ cpio␣-ivt␣<␣archiwum.cpio
-t — wyświetla zawartość
cpio -i — wyciąganie z archiwum
$ cpio␣-ivdm␣<␣archiwum.cpio
-d — katalogi, -m — czas modyfikacji
NJ/Unix (KIS) Wstęp do systemu Unix 81 / 155
Archiwizacja cpio
cpio + gzip
$ ls␣|␣cpio␣-o␣|␣gzip␣>␣/tmp/kopia.cpio.gz$ gzip␣-dc␣/tmp/kopia.gz␣|␣cpio␣-it$ cd␣~/nowe_miejsce/$ gzip␣-dc␣/tmp/kopia.gz␣|␣cpio␣-idm
find + cpio + gzip
$ find␣.␣-depth␣-print␣|␣cpio␣-o␣|␣gzip␣>␣/tmp/k.cpio.gz$ find␣.␣-depth␣-print␣-newer␣STAMP|␣cpio␣-o␣|␣\gzip > /tmp/k.cpio.gz
find + cpio ”w-locie”
$ find␣.␣-depth␣-print0␣|␣cpio␣--null␣-pvmd␣new-dir
-print0 i --null — znaki specjalne w nazwach
NJ/Unix (KIS) Wstęp do systemu Unix 82 / 155
Archiwizacja rsync
rsync
rsync — przesyła tylko to co się zmieniło!
rsync
$ rsync␣źródło␣cel$ rsync␣-v␣-a␣--delete␣~/projektX/␣/tmp/kopia/projektX/$ rsync␣-v␣-ax␣--delete␣~/projektX/␣\
158.75.5.111:/tmp/kopia/projektX/
-v — verbose--delete — usuwa stare pliki po stronie docelowej-x — nie pozwala wykraczać poza system pliku (partycję)-n [–dry-run] — tylko pokazuje co się zmieniło-z — kompresuje podczas transmisji--exclude=WZORZEC — pozwala omijać zgodnie ze wzorcem--progress
NJ/Unix (KIS) Wstęp do systemu Unix 83 / 155
Archiwizacja rsync
wget
wget
$ wget␣URL$ wget␣www.is.umk.pl$ wget␣www.is.umk.pl/x/y/z/str.html$ wget␣-r␣ftp://ftp.icm.edu.pl/pub/OpenOffice/stable/3.0.0/$wget␣-r␣-l␣1␣ftp://ftp.icm.edu.pl/pub/OpenOffice/stable/3.0.0/
-r — rekurencja-l␣GŁĘBOKOŚĆ
NJ/Unix (KIS) Wstęp do systemu Unix 84 / 155
Archiwizacja rsync
ftp
ftp$ ftp␣ftp.icm.edu.pl
[root@hel ~norbert/tmp/zzxx]# ftp ftp.icm.edu.plConnected to ftp.icm.edu.pl (193.219.28.140).220-220- FTP na SunSITE (6,5 TB oprogramowania).220- Uwagi: sunsite@icm.edu.pl (odpowiadamy na wszystkie dot. SunSITE’a)...Name (ftp.icm.edu.pl:root): ftp331 Guest login ok, send your complete e-mail address as password.Password:230 Guest login ok, access restrictions apply.ftp> cd /pub/Linux/fedora/linux/releases/10/Fedora/i386/iso/250 CWD command successful.ftp> get Fedora-10-i386-DVD.isoftp> quit
ls cd get␣file put␣file lcd pwdNJ/Unix (KIS) Wstęp do systemu Unix 85 / 155
Powłoki — bash bash
bash
• .login • .logout• .bashrc
alias$ alias␣e=’emacs␣-nw’
[root@hel ~]# e plik.txt
$ alias␣l’ls␣-lat’$ alias␣L=’ls␣-lat␣|␣less’
alias — lista aliasów alias␣e — pokazuje definicjęunalias␣L usuwa alias ’L’
NJ/Unix (KIS) Wstęp do systemu Unix 86 / 155
Powłoki — bash bash
.loginfinger
.bashrcalias e=’emacs -nw’alias sx=’ssh ja@moja_ulubiona_maszyna’...
NJ/Unix (KIS) Wstęp do systemu Unix 87 / 155
Powłoki — bash bash
Zmienne środowiskowe
=, unset, let
$ x=abc
[root@hel ~]# x=abc[root@hel ~]# echo $xabc[root@hel ~]# x="a b ccc"[root@hel ~]# echo $xa b ccc[root@hel ~]# echo "$x"a b ccc[root@hel ~]# echo ’$x’$x[root@hel ~]# x="Jestem w katalogu ‘pwd‘"; echo $xJestem w katalogu /root
NJ/Unix (KIS) Wstęp do systemu Unix 88 / 155
Powłoki — bash bash
[root@hel ~]# x=kota[root@hel ~]# echo $xkota[root@hel ~]# y="Ala ma $x"[root@hel ~]# echo $yAla ma kota[root@hel ~]# tab=( kot pies smok )[root@hel ~]# echo $tabkot[root@hel ~]# echo ${tab[0]}kot[root@hel ~]# echo ${tab[1]}pies[root@hel ~]# echo $#tab3
NJ/Unix (KIS) Wstęp do systemu Unix 89 / 155
Powłoki — bash bash
interakcja!
$ read␣x
[norbert@hel ~]$ read xdd[norbert@hel ~]$ echo $xdd
zmienne globalne
$ ABC=wartosc$ export␣ABC$ echo␣$ABC$ env$ PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin:
NJ/Unix (KIS) Wstęp do systemu Unix 90 / 155
Powłoki — bash bash
let$ let␣x=1$ let␣x=x+1
[root@hel ~]# let x=1[root@hel ~]# let x=x+1[root@hel ~]# let "x=x+1"[root@hel ~]# echo $x2[root@hel ~]# let "r=x>5" # tu musi być "[root@hel ~]# echo $r0[root@hel ~]# let "r=x<5"[root@hel ~]# echo $r1[root@hel ~]# let x++[root@hel ~]# echo $x3[root@hel ~]# let "z=3>2 && x>0"[root@hel ~]# echo $z1
NJ/Unix (KIS) Wstęp do systemu Unix 91 / 155
Powłoki — bash bash
Operatory
- !** * / % + - ++ --< <= > >= == !=&& ||~ & | ^= += -= *= /= %=
+operatory bitowe$ let␣’x=!z’$ let␣’x++’$ a=‘expr␣$x␣+␣1‘
-eq (=), -ne (!=), -gt (>), -ge (>=), -lt (<), -le (<=),-a (&&), -o (||)
$ if␣[␣"$a"␣-le␣"$b"␣]
NJ/Unix (KIS) Wstęp do systemu Unix 92 / 155
Powłoki — bash bash
Ważne zmienne
• $0␣␣␣␣$1␣$2␣$3␣... • $#␣␣␣␣$*␣$@ • $cwd• $HOME• $PATH• $PROMPT_COMMAND• $PIPESTATUS$ ls|grep␣zzz␣|...$ echo␣${PIPESTATUS[1]}• $SHELL• $? ret-val• $$ PID• $- flagi skryptu
NJ/Unix (KIS) Wstęp do systemu Unix 93 / 155
Powłoki — bash bash
Postać polecenia
$ polecenie␣arg1␣arg2␣arg3␣...’aaaa␣bbbb␣cccc’ — zamyka jako całość/jeden arg"aaaa␣bbbb␣cccc" — zamyka jako całość/jeden arg wstawiającwartości zmiennych‘polecenie␣arg1␣arg2‘ — wstawia wynik polecenia
$ prg␣"Jan␣Kowalski"␣’$j23’␣660123123$ prg␣"Jan␣Kowalski"␣$j23␣660123123$ prg␣"Jan␣Kowalski"␣"$j23"␣660123123␣"a␣"’b␣c’
$ x="Jak␣to␣zrobic"$ x="Jak␣$x␣zrobic"$ x=’Jak␣$x␣zrobic’
$ x=‘ls‘$ x=$(ls)
[norbert@n ~]$ echo ‘ls‘Desktop Documents Download Music Pictures Public ...
NJ/Unix (KIS) Wstęp do systemu Unix 94 / 155
Powłoki — bash bash
$ polecenie1;␣polecenie2;␣polecenie3$mkdir␣/tmp/kopia;␣cd␣~j23/projekt234/;␣tar␣cf␣/tmp/kopia/zzz.tar␣.
$ polecenie1␣|␣polecenie2␣|␣polecenie3$ find␣.␣-depth␣-print␣|␣cpio␣-o␣|␣gzip␣>␣/tmp/k.cpio.gz$ polecenie1␣|&␣polecenie2␣|&␣polecenie32>&1␣| ≡ |&
$ polecenie␣<␣plik$ polecenie␣0<␣plik$ polecenie␣>␣plik$ polecenie␣1>␣plik$ polecenie␣2>␣plik$ polecenie␣&>␣plik$ polecenie␣>>␣plik
eval␣ttt=\"\$"${attrtab[$j]}"\"
NJ/Unix (KIS) Wstęp do systemu Unix 95 / 155
Powłoki — bash bash
Skrypty
Skrypt = plik z zestawem poleceń do wykonania
Skrypt=program — +x
J23#!/bin/bashecho Jestem skryptem J23echo No to pa\!echo Padaja \$\$\$-yecho ’’# komentarz rozpoczyna się od #
chmod␣+x␣J23
#!/bin/bash#!/bin/bash -x#!/bin/tcsh#!/usr/bin/perl
NJ/Unix (KIS) Wstęp do systemu Unix 96 / 155
Powłoki — bash bash
[norbert@hel ~]$ chmod +x J23[norbert@hel ~]$ ./J23Jestem skryptem J23No to pa!Padaja $$$-y[norbert@hel ~]$
bash -x J23[norbert@hel ~]$ bash -x ./J23echo Jestem skryptem J23Jestem skryptem J23echo No to pa!No to pa!echo Padaja $$$-yPadaja $$$-yecho
bash␣-v␣./J23 -v — pokazuje wiersz oryginalny/źródłowy
NJ/Unix (KIS) Wstęp do systemu Unix 97 / 155
Powłoki — bash bash
#!/bin/bashecho $*echo $1echo $#
[norbert@hel ~]$ ./J23 a b ca b ca3[norbert@hel ~]$ ./J23
0
NJ/Unix (KIS) Wstęp do systemu Unix 98 / 155
Powłoki — bash bash
Opóźnienie
$ sleep␣iles_sekund$ sleep␣20
Załadowanie zawartości pliku
$ source␣plik_z_poleceniami$ source␣definicje
tee$ polecenie␣|␣tee␣plik$ tail␣-f␣/var/log/messages␣|␣grep␣DHCP␣|␣tee␣plik.DHCP
NJ/Unix (KIS) Wstęp do systemu Unix 99 / 155
Powłoki — bash bash
$? — wartość ostatnio wykonanegoproramu/skryptu/polecenia
[norbert@n ~]$ mkdir /j23mkdir: cannot create directory ‘/j23’: Permission denied[norbert@n ~]$ echo $?1[norbert@n ~]$ mkdir /tmp/j23[norbert@n ~]$ echo $?0
$ exit␣n
$ exit␣0$ exit␣13
NJ/Unix (KIS) Wstęp do systemu Unix 100 / 155
Powłoki — bash Instrukcje bash
if
if then
if wyrażenie warunkowe; thenpoleceniafi
if then else
if wyrażenie warunkowe; thenpolecenia
elsepolecenia
fi
NJ/Unix (KIS) Wstęp do systemu Unix 101 / 155
Powłoki — bash Instrukcje bash
if cd.
if then elif else
if wyrażenie warunkowe; thenpolecenia
elif wyrażenie warunkowe; thenpolecenia
elsepolecenia
fi
NJ/Unix (KIS) Wstęp do systemu Unix 102 / 155
Powłoki — bash Instrukcje bash
[n@n ~]$ set x=4[n@n ~]$ if (($x < 5)); then echo TAK; fiTAK[n@n ~]$ x=55[n@n ~]$ if [ "$x" -eq "55" ]; then echo TAK; fiTAK[n@n ~]$ if [[ $x -eq "11" && $y = "tt" ]]; then echo TAK; fi
[n@n ~]$ if mkdir "/tmp/ciupaga" 2>/dev/null; then echo Jest; fiJest[n@n ~]$ [[ -d /tmp/CCCC ]] || echo "NIE ma CCCC"NIE ma CCCC[n@n ~]$ [[ -d /tmp/CCCC ]] || mkdir /tmp/CCCC
if [ -f /etc/sysconfig/i18n -a -z "${NOLOCALE:-}" ] ; then ...if [ -f /etc/sysconfig/i18n ] && [ -z "${NOLOCALE:-}" ] ; then ...
NJ/Unix (KIS) Wstęp do systemu Unix 103 / 155
Powłoki — bash Instrukcje bash
if [ -L plik_kat]; ...
$ if␣[␣-L␣plik_kat];␣then␣...$ if␣[␣-f␣~/mojPlik];␣then␣...
L znaczenied kataloge istniejef pliko jestem właścicielemr prawo czytaniaw prawo pisaniax prawo wykonywanias plik o zerowej długości! negacja (np.: ! -d ddd)
f1␣-nt␣f2 f1 nowszy niż f2f1␣-ot␣f2 f1 starszy niż f2
NJ/Unix (KIS) Wstęp do systemu Unix 104 / 155
Powłoki — bash Instrukcje bash
#!/bin/bashif [[ $# == 0 || $1 == "−h" ]]; then
echo Nie podałeś argumentówecho Skrypt wymaga abyś podał następujące argumentyecho 1 −−− .....echo 2 −−− .....exit 1
fi
echo cześć właściwa#
[norbert@n ~]$ ./zNie podałeś argumentówSkrypt wymaga abyś podał następujące argumenty1 --- .....2 --- .....
NJ/Unix (KIS) Wstęp do systemu Unix 105 / 155
Powłoki — bash Instrukcje bash
while
while
while wyrażenie_warunkowe; dopolecenia
done
#!/bin/bashlet i=0while (( $i < 10)); do
echo Nie będę pil piwalet i++
donewhile (( $i < 20)); do
echo będę się uczył programowania w Pascalulet i++
done
while [ $i −le n ]; do ...
NJ/Unix (KIS) Wstęp do systemu Unix 106 / 155
Powłoki — bash Instrukcje bash
for
for
foreach element in lista_elementów; dopolecenia
done
zamiana co na-co
#!/bin/bashfor i in ∗$1∗; do
mv $i ‘echo $i | sed −n s/$1/$2/p‘done
NJ/Unix (KIS) Wstęp do systemu Unix 107 / 155
Powłoki — bash Instrukcje bash
for
zajetosc katalogUzytkownikow
#!/bin/bashfor i in ‘ ls $1 ‘; do
y=(‘du −sk $1/$i‘)if (( ${y[0]} > $2 )); then echo $i; fi
done
multimail adresy tresc tytul
#!/bin/bashfor m in ‘cat $1 ‘; do
echo mail $m −s "$3" < $2done
NJ/Unix (KIS) Wstęp do systemu Unix 108 / 155
Powłoki — bash Instrukcje bash
for
for + awk
for name in $(awk ’BEGIN{FS=":"}{print $1}’ < "/etc/passwd" )doecho "$name"
done
for ((a; b; c))
for ((a=1, b=1; a <= LIMIT ; a++, b++))do # The comma chains together operations.echo −n "$a−$b␣"
done
NJ/Unix (KIS) Wstęp do systemu Unix 109 / 155
Powłoki — bash Instrukcje bash
case
case
case wyr inwyr_warunkoweA)polecenia;;
wyr_warunkoweB)polecenia;;
wyr_warunkoweC)polecenia;;
∗)polecenia
esac
NJ/Unix (KIS) Wstęp do systemu Unix 110 / 155
Powłoki — bash Instrukcje bash
case
case "$menuItem" in"ladowanie")
# polecenia ładujące coś tam ...dozrobienia=$(cat $zadania);;
"kopia")# wykonanie stosownych kopii ...wykonajKopie;;
"raport")# zrobinie raportu z czegoś ...echo Zrobiłem $nZadan zadań;;
∗)polecenia
esac
NJ/Unix (KIS) Wstęp do systemu Unix 111 / 155
Powłoki — bash Funkcje
Funkcje w bash’u
function nazwa_funkcji {polecenia ...
}
lub
nazwa_funkcji () {polecenia ...
}
wypiszHELP () {echo polecenie J23echo zadaniem polecenia jest ...
}
# wywołanie funkcji :wypiszHELP
NJ/Unix (KIS) Wstęp do systemu Unix 112 / 155
Powłoki — bash Funkcje
funfun () {if [ "$1" = "Zenek" ]; thenecho ’Cześć!’return 0;
elseecho ’Ciebie nie znam’return 1;
fi}# wywołania:funfun "Zenek"funfun "Wieńczysław"
ErrorEk () {echo "Errorek:␣$∗"
}# wywołanie:ErrorEk Ciupaka w plecach
NJ/Unix (KIS) Wstęp do systemu Unix 113 / 155
Powłoki — bash Funkcje
maksik () {let w="$1␣>␣$2␣?␣$1␣:␣$2"return $w;
}maksik 222 33echo Wynik maksika to: $?
ll () {ls −la −−color $∗ | less −r
}
NJ/Unix (KIS) Wstęp do systemu Unix 114 / 155
Powłoki — bash Przykłady skryptów
Skrypt do archiwizacji
ARCH /staff/stud j23 /tmp/j23.tar.gz
#!/bin/bash# $1 − z ktorego katalogu# $2 − ktory katalog# $3 − plik z archiwum# $4 − jesli jest okresla na jaka maszyne arch skopiowacif [ −z "$3" ]; then
echo Skrypt ARCHecho "ARCH␣kat−init␣kat−src␣plik−arch␣[maszyna−arch]"exit 1
ficd $1 || exit 13if [ $# = 3 ]; then
tar czf $3 $2else
tar czf − $2 | ssh $4 "cat␣>␣$3"fi
ARCH␣/staff/stud␣j23␣/tmp/j23.tar.gz␣m.fizyka.umk.plNJ/Unix (KIS) Wstęp do systemu Unix 115 / 155
Powłoki — bash Przykłady skryptów
Skrypt do wyboru użytkowników wskazanej grupy unixowej
Wiersz pliku group: stud::104:Wiersz pliku passwd:tomek:x:6777:104:Tomasz␣Kowalski:/home/tomek:/bin/tcsh
$ gawk␣-F:␣’$1␣==␣"stud"␣{print␣$3}’␣/etc/group$ gawk␣-F:␣’$1␣==␣"’$1’"␣{print␣$3}’␣/etc/group
$ gawk␣-F:␣’$4␣==␣"104"␣{␣print␣$1}’␣/etc/passwd$ gawk␣-F:␣’$4␣==␣"’$grpID’"␣{␣print␣$1}’␣/etc/passwd
Group
#!/bin/bash# $1 − nazwa grupygrpID=‘gawk −F: ’$1 == "’$1’" {print $3}’ /etc/group‘gawk −F: ’$4 == "’$grpID’" { print $1}’ /etc/passwd
Group␣studNJ/Unix (KIS) Wstęp do systemu Unix 116 / 155
Powłoki — bash Przykłady skryptów
Archiwizacja grupy użytkowników
ARCHGrp
#!/bin/bash# $1 − nazwa grupy ktorej uzytkownicy maja byc zarchiwizowani# $2 − katalog, w którym maja być umieszczone archiwaif [ $# != 2 ]; then echo "złe wywolanie"; exit 1; fifor u in $(Group $1); do# ARCH /home/ $u $2/${u}.tar.gz
ARCH /home/ $u $2/${u}‘date +%y%m%d−%H%M‘.tar.gzdone
• ARCHGrp␣stud␣/backups
NJ/Unix (KIS) Wstęp do systemu Unix 117 / 155
Powłoki — bash Przykłady skryptów
Skrypt kontrolujący zajętość partycji
df
[root@hel ~norbert]# dfFilesystem 1K-blocks Used Available Use% Mounted on/dev/root 28842780 27769956 1072824 97% //dev/sda1 287782 81582 206200 29% /boot/dev/shm 1548156 0 1548156 0% /dev/shm/dev/sda7 328891672 192795332 136096340 59% /staff/dev/sdb1 307663800 226789352 80874448 74% /windows
$ df␣|␣tail␣--lines=+2␣|␣sed␣s/%//␣|␣gawk␣’$5␣>␣95␣{print␣$6}’
ZajetoscPart próg
#!/bin/bashdf | tail −−lines=+2 | sed s/%// | gawk ’$5 > ’$prog’ {print $6}’
df | tail --lines=+2 | sed s/%// | gawk ’$5 > ’$prog
ZajetoscPart␣95NJ/Unix (KIS) Wstęp do systemu Unix 118 / 155
Powłoki — bash Przykłady skryptów
Skrypt kontrolujący zajętość partycji II
ZajetoscPart
#!/bin/bashif [ "$1" == ’’ ]; thenecho ZajetoscPart prog [email ]echo ’prog − prog zajetosci ’echo ’email − email, jesli podany wynik zostanie przeslany emailem’exit 1;fix=‘df −P | tail −−lines=+2 | sed s/%// | \
gawk ’$5 > ’$1’ {print $6}’‘if [ −z "$x" ]; then exit 0; fiif [ $# == 1 ]; then
echo $xelse
echo $x | mail −s "Zajetosc␣ partycji ␣przekroczona,␣prog␣[$1]" $2fi
ZajetoscPart␣95␣norbert@is.umk.pl
NJ/Unix (KIS) Wstęp do systemu Unix 119 / 155
Powłoki — bash Przykłady skryptów
Analiza zajętości katalogów użytkowników
ZajetoscHOME
#!/bin/bashfor i in $( ls $1); do
y=(‘du −sk $1/$i‘)if [[ "${y[0]}" > "$2" ]]; then
cat <<EOF | mail $iTwój katalog zajmuje za dużo miejsca .Można zajmować: $2 KB. Zajmujesz: $y[1] KB.
Proszę o usunięcie części zasobów.
J23 & 007EOF
fidone
ZajetoscHOME␣/staff/stud␣100000
NJ/Unix (KIS) Wstęp do systemu Unix 120 / 155
Powłoki — bash Przykłady skryptów
Wynik skryptuTwoj katalog zajmuje za duzo miejsca.Mona zajmowac: 20 KB. Zajmujesz: 9024 KB.
Prosze o usuniecie czesci zasobow.
J23 & 007
ZajetoscHOME␣/staff/stud␣100000
NJ/Unix (KIS) Wstęp do systemu Unix 121 / 155
Powłoki — csh, tcsh, sh, bash csh
csh
• .login • .logout• .cshrc
alias$ alias␣e␣emacs␣-nw
[root@hel ~]# e plik.txt
$ alias␣l␣ls␣-lat$ alias␣L␣’ls␣-lat␣\!*␣|␣less’
[root@hel ~]# alias ImieNazwisko ’echo \!:2’[root@hel ~]# ImieNazwisko Ala ZiebaZieba
alias — lista aliasów alias␣e — pokazuje definicjęunalias␣L usuwa alias ’L’
NJ/Unix (KIS) Wstęp do systemu Unix 122 / 155
Powłoki — csh, tcsh, sh, bash csh
.loginfinger
.cshrcalias e emacs -nwalias sx ssh ja@moja_ulubiona_maszyna...
NJ/Unix (KIS) Wstęp do systemu Unix 123 / 155
Powłoki — csh, tcsh, sh, bash csh
Zmienne środowiskowe
set, setenv, @ unset, unsetenv
set$ set␣x=abc
[root@hel ~]# set x=abc[root@hel ~]# echo $xabc[root@hel ~]# setautologout 60cwd /roothome /rootpath (/root/bin /usr/sbin /sbin /usr/kerberos/sbin /usr/kerberos/bin /usr/local/sbin /usr/local/bin /sbin /bin /usr/sbin /usr/bin /usr/X11R6/bin .)prompt [root@%m %c2]%#shell /bin/tcshstatus 0user rootx abc
NJ/Unix (KIS) Wstęp do systemu Unix 124 / 155
Powłoki — csh, tcsh, sh, bash csh
[root@hel ~]# set x=kota[root@hel ~]# echo $xkota[root@hel ~]# set y="Ala ma $x"[root@hel ~]# echo $yAla ma kota[root@hel ~]# set tab=(kot pies smok)[root@hel ~]# echo $tabkot pies smok[root@hel ~]# echo $tab[1]kot[root@hel ~]# echo $tab[2]pies[root@hel ~]# echo $#tab3[root@hel ~]# echo $?tab1[root@hel ~]# echo $?tabat0
NJ/Unix (KIS) Wstęp do systemu Unix 125 / 155
Powłoki — csh, tcsh, sh, bash csh
set z interakcją!
$ set␣x=$<
[norbert@hel ~]$ set x=$<dd[norbert@hel ~]$ echo $xdd
setenv$ setenv␣ABC␣wartosc$ setenv$setenv␣PATH␣"/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin:"
setenv␣X␣$<
NJ/Unix (KIS) Wstęp do systemu Unix 126 / 155
Powłoki — csh, tcsh, sh, bash csh
@$ @␣x=1$ @␣x=($x␣+␣1)
[root@hel ~]# @ x=1[root@hel ~]# @ x=($x + 1)[root@hel ~]# echo $x2[root@hel ~]# @ r=($x > 5)[root@hel ~]# echo $r0[root@hel ~]# @ r= ( $x < 5 )[root@hel ~]# echo $r1[root@hel ~]# @ x++[root@hel ~]# echo $x3[root@hel ~]# @ z=( 3>2 && $x > 0 )[root@hel ~]# echo $z1
NJ/Unix (KIS) Wstęp do systemu Unix 127 / 155
Powłoki — csh, tcsh, sh, bash csh
Operatory:
- !
* / % + - ++ --
< <= > >= == !=
&& ||
~ & | ^
NJ/Unix (KIS) Wstęp do systemu Unix 128 / 155
Powłoki — csh, tcsh, sh, bash csh
Ważne zmienne
• $argv␣␣␣␣$1␣$2␣$3␣...• $cwd• $HOME• $PATH• $prompt• $shell• $status• $$
NJ/Unix (KIS) Wstęp do systemu Unix 129 / 155
Powłoki — csh, tcsh, sh, bash csh
Postać polecenia
$ polecenie␣arg1␣arg2␣arg3␣...’aaaa␣bbbb␣cccc’ — zamyka jako całość/jeden arg"aaaa␣bbbb␣cccc" — zamyka jako całość/jeden arg wstawiającwartości zmiennych‘polecenie␣arg1␣arg2‘ — wstawia wynik polecenia
$ prg␣"Jan␣Kowalski"␣’$j23’␣660123123$ prg␣"Jan␣Kowalski"␣$j23␣660123123$ prg␣"Jan␣Kowalski"␣"$j23"␣660123123␣"a␣"’b␣c’
$ set␣x="Jak␣to␣zrobic"$ set␣x="Jak␣$x␣zrobic"$ set␣x=’Jak␣$x␣zrobic’
$ set␣x=‘ls‘
[norbert@n ~]$ echo ‘ls‘Desktop Documents Download Music Pictures Public ...
NJ/Unix (KIS) Wstęp do systemu Unix 130 / 155
Powłoki — csh, tcsh, sh, bash csh
$ polecenie1;␣polecenie2;␣polecenie3$mkdir␣/tmp/kopia;␣cd␣~j23/projekt234/;␣tar␣cf␣/tmp/kopia/zzz.tar␣.
$ polecenie1␣|␣polecenie2␣|␣polecenie3$ find␣.␣-depth␣-print␣|␣cpio␣-o␣|␣gzip␣>␣/tmp/k.cpio.gz$ polecenie1␣|&␣polecenie2␣|&␣polecenie3
$ polecenie␣>␣plik$ polecenie␣>>␣plik$ polecenie␣>&␣plik
eval␣set␣ttt=\"‘echo␣’$’$attrtab[$j]‘\"
NJ/Unix (KIS) Wstęp do systemu Unix 131 / 155
Powłoki — csh, tcsh, sh, bash csh
Skrypty
Skrypt = plik z zestawem poleceń do wykonania
Skrypt=program — +x
J23#!/bin/tcshecho Jestem skryptem J23echo No to pa\!echo Padaja \$\$\$-yecho ’’# komentarz rozpoczyna się od #
chmod␣+x␣J23
#!/bin/tcsh -x
#!/bin/bash
#!/usr/bin/perlNJ/Unix (KIS) Wstęp do systemu Unix 132 / 155
Powłoki — csh, tcsh, sh, bash csh
[norbert@hel ~]$ chmod +x J23[norbert@hel ~]$ ./J23Jestem skryptem J23No to pa!Padaja $$$-y
[norbert@hel ~]$
tcsh -x J23[norbert@hel ~]$ tcsh -x ./J23echo Jestem skryptem J23Jestem skryptem J23echo No to pa!No to pa!echo Padaja $$$-yPadaja $$$-yecho
tcsh␣-v␣./J23 -v — pokazuje wiersz oryginalny/źródłowyNJ/Unix (KIS) Wstęp do systemu Unix 133 / 155
Powłoki — csh, tcsh, sh, bash csh
$argv#!/bin/tcsh
echo $argvecho $argv[1]echo $#argv#
[norbert@hel ~]$ ./J23 a b ca b ca3[norbert@hel ~]$ ./J23
argv: Subscript out of range.
NJ/Unix (KIS) Wstęp do systemu Unix 134 / 155
Powłoki — csh, tcsh, sh, bash csh
Opóźnienie
$ sleep␣iles_sekund$ sleep␣20
Załadowanie zawartości pliku
$ source␣plik_z_poleceniami$ source␣definicje
tee$ polecenie␣|␣tee␣plik$ tail␣-f␣/var/log/messages␣|␣grep␣DHCP␣|␣tee␣plik.DHCP
NJ/Unix (KIS) Wstęp do systemu Unix 135 / 155
Powłoki — csh, tcsh, sh, bash csh
$status
[norbert@n ~]$ mkdir /j23mkdir: cannot create directory ‘/j23’: Permission denied[norbert@n ~]$ echo $status1[norbert@n ~]$ mkdir /tmp/j23[norbert@n ~]$ echo $status0
$ exit␣n
$ exit␣0$ exit␣13
NJ/Unix (KIS) Wstęp do systemu Unix 136 / 155
Powłoki — csh, tcsh, sh, bash Instrukcje csh
if
ifif(wyrażenie) polecenie
if thenif(wyrażenie) then
polecenie1...
endif
if then elseif(wyrażenie) then
poleceniaelse
poleceniaendif
NJ/Unix (KIS) Wstęp do systemu Unix 137 / 155
Powłoki — csh, tcsh, sh, bash Instrukcje csh
[norbert@n ~]$ set x=3[norbert@n ~]$ if ( $x < "5" ) echo TAKTAK[norbert@n ~]$ set x=6[norbert@n ~]$ if ( $x < "5" ) echo TAK[norbert@n ~]$ set x=11[norbert@n ~]$ if ( $x < "5" ) echo TAK[norbert@n ~]$ set x=aa[norbert@n ~]$ if ( $x == "aa" ) echo TAKTAK[norbert@n ~]$ if ( $?x ) echo TAKTAK[norbert@n ~]$
NJ/Unix (KIS) Wstęp do systemu Unix 138 / 155
Powłoki — csh, tcsh, sh, bash Instrukcje csh
if(-L xxxx) ...
$ if(-f␣~/xyz-ustawienia)␣then$ ␣␣source␣~/xyz-ustawienia$ endif
$ if(!␣-e␣jakis_plik)␣touch␣jakis_plik
L znaczenied kataloge istniejef pliko jestem właścicielemr prawo czytaniaw prawo pisaniax prawo wykonywaniaz plik o zerowej długości
NJ/Unix (KIS) Wstęp do systemu Unix 139 / 155
Powłoki — csh, tcsh, sh, bash Instrukcje csh
#!/bin/tcshif($#argv == 0) then
echo Nie podałeś argumentówecho Skrypt wymaga abyś podał następujące argumentyecho 1 --- .....echo 2 --- .....exit 1
endif
echo cześć właściwa#
[norbert@n ~]$ ./zNie podałeś argumentówSkrypt wymaga abyś podał następujące argumenty1 --- .....2 --- .....
NJ/Unix (KIS) Wstęp do systemu Unix 140 / 155
Powłoki — csh, tcsh, sh, bash Instrukcje csh
goto
gotogoto etykieta...etykieta:
if($#argv == 0) goto opisif($#argv == 1) goto typaif($#argv == 2) goto typbecho Skrypt źle wywołanyexit 2opis:...exit 1typa:...exit 0typb:...exit 0
NJ/Unix (KIS) Wstęp do systemu Unix 141 / 155
Powłoki — csh, tcsh, sh, bash Instrukcje csh
while
whilewhile(wyrażenie)
poleceniaend
#!/bin/tcsh@ i= 0while($i < 10)
echo Nie będę pil piwa@ i= $i + 1endwhile($i < 20)
echo będę się uczył programowania w Pascalu@ i= $i + 1end
NJ/Unix (KIS) Wstęp do systemu Unix 142 / 155
Powłoki — csh, tcsh, sh, bash Instrukcje csh
foreach
foreachforeach element (lista_elementów)
poleceniaend
zamiana co na-co#!/bin/tcshforeach i (*$1*)
mv $i ‘echo $i | sed -n s/$1/$2/p‘end
zajetosc katalogUzytkownikow
#!/bin/tcshforeach i (‘ls $1‘)
set y=‘du -sk $1/$i‘if($y[1] > $2) echo $i
end
multimail adresy tresc tytul
#!/bin/tcshforeach m (‘cat $1‘)
mail $m -s "$3" < $2end
NJ/Unix (KIS) Wstęp do systemu Unix 143 / 155
Powłoki — csh, tcsh, sh, bash Instrukcje csh
switch
switch
switch(łańcuch_znakowy)case etykietaA:
poleceniabreaksw
case etykietaB:poleceniabreaksw
case etykietaC:poleceniabreaksw
default:poleceniabreaksw
endsw
NJ/Unix (KIS) Wstęp do systemu Unix 144 / 155
Powłoki — csh, tcsh, sh, bash Instrukcje csh
switch...switch($1)
case [tT][aA][kK]:set tak=1breaksw
case [nN][iI][eE]:set tak=0breaksw
default:echo zly argument 1: [$1].exit 13breaksw
endsw...
NJ/Unix (KIS) Wstęp do systemu Unix 145 / 155
Powłoki — csh, tcsh, sh, bash Przykłady skryptów
Skrypt do archiwizacji
ARCH /staff/stud j23 /tmp/j23.tar.gz#!/bin/tcsh# $1 - z ktorego katalogu# $2 - ktory katalog# $3 - plik z archiwum# $4 - jesli jest okresla na jaka maszyne arch skopiowacif($#argv < 3 || $#argv > 4) then
echo Zle wywolanieecho "ARCH kat-init kat-src plik-arch [maszyna-arch]"exit 1
endifcd $1if($status != 0) exit 13if($#argv == 3) then
tar czf $3 $2else
tar czf - $2 | ssh $4 "cat > $3"endif
ARCH␣/staff/stud␣j23␣/tmp/j23.tar.gz␣m.fizyka.umk.plNJ/Unix (KIS) Wstęp do systemu Unix 146 / 155
Powłoki — csh, tcsh, sh, bash Przykłady skryptów
Skrypt do wyboru użytkowników wskazanej grupy unixowej
Wiersz pliku group: stud::104:Wiersz pliku passwd:tomek:x:6777:104:Tomasz␣Kowalski:/home/tomek:/bin/tcsh
$ gawk␣-F:␣’$1␣==␣"stud"␣{print␣$3}’␣/etc/group$ gawk␣-F:␣’$1␣==␣"’$1’"␣{print␣$3}’␣/etc/group
$ gawk␣-F:␣’$4␣==␣"104"␣{␣print␣$1}’␣/etc/passwd$ gawk␣-F:␣’$4␣==␣"’$grpID’"␣{␣print␣$1}’␣/etc/passwd
Group#!/bin/tcsh# $1 - nazwa grupyset grpID=‘gawk -F: ’$1 == "’$1’" {print $3}’ /etc/group‘gawk -F: ’$4 == "’$grpID’" { print $1}’ /etc/passwd
Group␣stud
NJ/Unix (KIS) Wstęp do systemu Unix 147 / 155
Powłoki — csh, tcsh, sh, bash Przykłady skryptów
Archiwizacja grupy użytkowników
ARCHGrp#!/bin/tcsh# $1 - nazwa grupy ktorej uzytkownicy maja byc zarchiwizowaniif($#argv != 1) exit 1set uset=‘Group $1‘foreach u ($uset)# ARCH /home/ $u ${u}.tar.gz
ARCH /home/ $u ${u}‘date +%y%m%d-%H%M‘.tar.gz
• ARCHGrp␣stud
NJ/Unix (KIS) Wstęp do systemu Unix 148 / 155
Powłoki — csh, tcsh, sh, bash Przykłady skryptów
Skrypt kontrolujący zajętość partycji
df
[root@hel ~norbert]# dfFilesystem 1K-blocks Used Available Use% Mounted on/dev/root 28842780 27769956 1072824 97% //dev/sda1 287782 81582 206200 29% /boot/dev/shm 1548156 0 1548156 0% /dev/shm/dev/sda7 328891672 192795332 136096340 59% /staff/dev/sdb1 307663800 226789352 80874448 74% /windows
$ df␣|␣tail␣--lines=+2␣|␣sed␣s/%//␣|␣gawk␣’$5␣>␣95␣{print␣$6}’
ZajetoscPart prog
#!/bin/tcshdf | tail --lines=+2 | sed s/%// | gawk ’$5 > ’$prog’ {print $6}’
df | tail --lines=+2 | sed s/%// | gawk ’$5 > ’$prog
ZajetoscPart␣95
NJ/Unix (KIS) Wstęp do systemu Unix 149 / 155
Powłoki — csh, tcsh, sh, bash Przykłady skryptów
Skrypt kontrolujący zajętość partycji II
#!/bin/tcshset x=‘df | tail --lines=+2 | sed s/%// | \
gawk ’$5 > ’$1’ {print $6}’‘if("$x" == ’’) exit 0if($#argv == 1) then
echo $xelse
echo $x | mail -s "Zajetosc partycji przekroczona, prog [$1]" $2endif
ZajetoscPart␣95␣norbert@is.umk.pl
NJ/Unix (KIS) Wstęp do systemu Unix 150 / 155
Powłoki — csh, tcsh, sh, bash Przykłady skryptów
Analiza zajętości katalogów użytkowników
ZajetoscHOME#!/bin/tcsh
#foreach i (‘cat $1‘)foreach i (‘ls $1‘)
set y=‘du -sk $1/$i‘if($y[1] > $2) then
cat <<EOF | mail $iTwój katalog zajmuje za dużo miejsca.Można zajmować: $2 KB. Zajmujesz: $y[1] KB.
Proszę o usunięcie części zasobów.
J23 & 007EOF
endifend
ZajetoscHOME␣/staff/stud␣100000NJ/Unix (KIS) Wstęp do systemu Unix 151 / 155
Powłoki — csh, tcsh, sh, bash Przykłady skryptów
Wynik skryptuTwoj katalog zajmuje za duzo miejsca.Mona zajmowac: 20 KB. Zajmujesz: 9024 KB.
Prosze o usuniecie czesci zasobow.
J23 & 007
ZajetoscHOME␣/staff/stud␣100000
NJ/Unix (KIS) Wstęp do systemu Unix 152 / 155
Wirtualizacja — uruchamianie systemów wirtualnych
Wirtualizacja
VirtualBoxVirtual PCXenKVMVMWare
poczta.umk.pl
NJ/Unix (KIS) Wstęp do systemu Unix 153 / 155
Knoppix
Knoppix — Linux lekarstwo/diagnostyka/praca . . .
• Linux na CD/DVD• http://www.knoppix.net/• www.knoppix.pl/
Inne dystrybucje CD/DVDSUSE LiveFC LiveCentOS LiveLinux-EduCD+ wiele innych
NJ/Unix (KIS) Wstęp do systemu Unix 155 / 155