Wstęp do Programowania, laboratorium 01 Zadanie 1: Napisać

Transkrypt

Wstęp do Programowania, laboratorium 01 Zadanie 1: Napisać
Wstęp do Programowania, laboratorium 01
Zadanie 1: Napisać skrypt który:
1. utworzy cztery foldery o różnych nazwach
2. w pierwszym z nich utworzy plik (nazwa np. bin.txt) z listą plików z folderu /bin
3. w drugim z nich utworzy plik (np. etc.txt) z zawartością pliku /etc/passwd
4. w trzecim z nich utworzy jeden plik zawierający:
5. aktualną datę,
6. pierwsze 5 linii pliku bin.txt,
7. ostatnie 6 linii pliku etc.txt.
8. skopiuje pierwszy i drugi folder do folderu trzeciego,
9. utworzy w folderze trzecim link do folderu domowego użytkownika,
10. dopisze do pliku z punktu 4. zawartość folderu trzeciego (lista + informacje o plikach),
11. przeniesie plik z punktu 10. do folderu zawierającego folder trzeci,
12. usunie wszystko (łącznie z ewentualnie utworzonymi plikami tymczasowymi) poza plikiem
z punktu 10,
13. Wypisze do konsoli wiadomość pożegnalną.
Po wykonaniu skryptu powinien pozostać tylko jeden plik (zawartość: patrz punkty 4. i 10.)
Przykładowa zawartość pliku:
śro, 8 paź 2014, 11:18:36 CEST
bash
bunzip2
busybox
bzcat
bzcmp
nvidia-persistenced:x:109:120:NVIDIA Persistence Daemon,,,:/:/sbin/nologin
kracon:x:1106:1005:Lukasz Kracon:/home/students/zao13z/kracon:/bin/bash
ramut:x:1107:1005:Dominik Ramut:/home/students/zao13z/ramut:/bin/bash
mniesulo:x:1108:1006:Maciej Niesulowski:/home/students/inf13l/mniesulo:/bin/bash
michalak:x:1109:1006:Artur Michalak:/home/students/inf13l/michalak:/bin/bash
anowak:x:1110:1001:Adam Nowak:/home/workers/anowak:/bin/bash
razem 12
-rw-r--r-- 1 anowak workers 502 paź 8 11:18 all.txt
drwxr-xr-x 2 anowak workers 4096 paź 8 11:18 f1
drwxr-xr-x 2 anowak workers 4096 paź 8 11:18 f2
lrwxrwxrwx 1 anowak workers
20 paź 8 11:18 link -> /home/workers/anowak
Zadanie 2: Przeglądnąć zawartość pliku ~/.bashrc . Zrobić jego kopię zapasową. Dodać alias dla
komendy „ktogdzie” który uruchamiać będzie programy date oraz whoami. Zmienić 'styl' konsoli –
zmienna PS1.
Instrukcje
ctrl + c
powoduje zamknięcie aktualnie wykonywanego programu/skryptu
tab
podpowiada nazwę pliku/folderu. Jeśli w folderze jest plik
'alejamamdluganazwe', wpisanie 'ale' i wciśnięcie 'tab' powinno dokończyć
nazwę pliku (o ile nie ma drugiego pliku który też zaczyna się od 'ale')
.
aktualna lokalizacja
..
folder wyżej
Jak uzyskać pomoc dotyczącą programu na linuxie (3 przeważnie działające sposoby)
1. [program] --help
2. [program] -h
3. man [program]
Edytory tekstowe
nano
prosty i łatwy w obsłudze edytor
nano plik.txt
otwarcie (lub utworzenie) pliku plik.txt
ctrl+o – zapis pliku
ctrl+x – wyjście z programu
pico
to samo co nano
vi
gigantyczny i trudny w obsłudze edytor
vi plik.txt
otwarcie (lub utworzenie) pliku plik.txt
i – rozpoczęcie wprowadzania tekstu
esc – przerwanie wprowadzania tekstu (lub innych czynności)
:w – zapis pliku
:q – wyjście z programu
:!q – wyjście z programu i porzucenie zmian w pliku
powyższe komendy można wydać tylko po przerwaniu wprowadzania
tekstu
vim
to samo co vi
Podstawy operacji na plikach i folderach
cd
zmiana folderu
cd folder
przejście do folderu o nazwie 'folder' znajdującego się w aktualnym
położeniu
cd ..
przejście do folderu 'wyżej'
cd ../../
przejście dwa foldery wyżej
cd ../bla
przejście do folderu 'bla' znajdującego się poziom 'wyżej'
cd ~
przejście do folderu domowego użytkownika
cd ~/gry
przejście do folderu 'gry' w folderze użytkownika
ls
wypisanie listy plików i folderów z aktualnego położenia
ls -l
wypisanie listy plików i folderów z aktualnego położenia, wraz z
informacjami o nich (data
utworzenia, prawa
dostępu...)
ls ../
wypisanie listy plików i folderów z folderu wyżej
ls folder
wypisanie listy plików i folderów z folderu 'folder' znajdującego się w
aktualnym
położeniu
echo
wypisanie tekstu do konsoli
echo tekst
echo dlugi i niezwykle ciekawy tekst
>
przekierowanie tekstu wypisywanego przez program do pliku
(nadpisanie zawartości lub utworzenie)
>>
jw. dopisanie do pliku lub jego utworzenie
ls > "lista.txt"
wpisanie listy plików do pliku 'lista.txt'
ls -l ../ > bla
wpisanie listy plików do pliku 'bla'
echo "Tekst" >> bla
dopisanie "Tekst" na końcu pliku 'bla'
cat
łączenie plików (konkatenacja)
cat lista.txt bla
wypisanie w konsoli zawartości plików 'lista.txt' oraz bla'
cat lista.txt bla > polaczenie.txt
mkdir
utworzenie folderu
mkdir nazwa folder2 „folder trzeci”
utworzenie trzech folderów
rm
skasowanie pliku
rm lista.txt
rm *
skasowanie wszystkich plików z aktualnego folderu
rmdir
skasowanie folderu (tylko jeśli jest pusty)
rm -r folder2
skasowanie folderu wraz z zawartością
rm -r -f folder2
skasowanie folderu wraz z zawartością, ignorując sprzeciw
cp
kopiowanie plików/folderów
cp bla nowy.txt
utworzenie pliku 'nowy.txt' będącego kopią pliku 'bla'
cp bla nazwa
przekopiowanie pliku 'bla' do folderu 'nazwa' (tylko jeśli 'nazwa' jest
folderem,
jeśli 'nazwa' jest plikiem to zostanie
on nadpisany)
cp bla nazwa/
dodanie '/' na końcu zakłada, że 'nazwa' jest folderem i pozwala
uniknąć
nadpisania
mv
przeniesienie pliku (lub zmiana jego nazwy)
mv nowy.txt stary.txt
zmiana nazwy pliku 'nowy.txt' na 'stary.txt'
mv stary.txt nazwa/
przeniesienie pliku 'stary.txt' do folderu 'nazwa'
|
przekierowanie tekstu wypisywanego przez program do innego
programu
sort
posortowanie tekstu wypisywanego przez program
ls | sort
posortowanie plików i folderów alfabetycznie
ls . .. | sort
posortowanie listy plików i folderów z folderu aktualnego i poziom
wyżej
;
pozwala uruchomić kilka programów naraz, kolejne uruchamiają się
po zakończeniu poprzedniego
&&
jw, kolejne uruchamiają się jeśli poprzedni nie zwróci błędu
date; cal; whoami
wypisze date i kalendarz
gcc main.c && ./a.out
skompiluje plik main.c i uruchomi program a.out jeśli kompilacja się
powiedzie
Linkowanie plików
ln
utworzenie linku do pliku lub folderu
ln [plik istniejący] [nazwa linku]
tworzy plik 'nazwa linku' który ma taką samą zawartość jak [plik
istniejący] oraz modyfikacja jednego z nich skutkować będzie
modyfikacją drugiego. Usunięcie jednego z nich nie spowoduje
usunięcia drugiego. Jest to tzw. twardy link (hard link).
Ograniczenie: oba pliki muszą być na tej samej partycji.
ln -s [plik istniejący] [nazwa linku]
parametr '-s' powoduje, że pliki nie muszą być na tej samej partycji,
ale skasowanie oryginalnego ([plik istniejący]) spowoduje, że plik
[nazwa linku] przestanie działać - będzie wskazywał nieistniejący już
plik. Jest to
tzw. link symboliczny (symbolic link).
Możliwe jest linkowanie folderów, jednak tylko przy pomocy linków
symbolicznych.
Dostęp do plików i folderów
chmod
zmiana uprawnień dostępu dla: właściciela, grupy i pozostałych
użytkowników
możliwe uprawnienia: zapis, odczyt i wykonywanie
http://pl.wikipedia.org/wiki/Chmod
Porównywanie plików
diff
wypisuje zawartość plików z zaznaczonymi różnicami
diff plik1 plik2
porównanie zawartości 'plik1' i 'plik2'
diff -u plik1 plik2
inny sposób wypisania
cmp
porównuje zawartość plików i wypisuje liczbę różnic
Zmienne
$[nazwa zmiennej]
np. $PATH
[nazwa]=[wartość]
przypisanie [wartość] do zmiennej o nazwie [nazwa]
bla=tekst
przypisanie tekstu 'tekst' do zmiennej o nazwie 'bla'
echo $bla
wypisanie zawartości zmiennej 'bla'
PATH=$PATH:/sciezka/do/folderu
dopisanie ścieżki do zmiennej PATH
echo $PATH
Path jest zmienną zawierającą ścieżki do folderów które są
przeszukiwane w poszukiwaniu uruchamianych programów. Program
'ls' jest w folderze '/bin'. Folder '/bin' jest wpisany do zmiennej PATH.
System po wpisaniu 'ls' w konsoli przeszukuje wszystkie foldery ze
zmiennej PATH w poszukiwaniu pliku 'ls' w którymś z nich.
Aby móc uruchomić własny program z dowolnego miejsca w
systemie (nie podając całej ścieżki do niego), należy dodać folder
zawierający ten program do zmiennej PATH.
Różne przydatne programy
date
wypisanie daty
cal
wypisanie kalendarza
who
wypisanie listy zalogowanych użytkowników
whoami
wypisanie nazwy 'mojego' użytkownika
finger
sprawdzenie informacji o podanym użytkowniku
finger root
sprawdzenie informacji o koncie administratora na linuxie
ps
wypisanie listy uruchomionych procesów
top
konsolowy menedżer procesów
find
wyszukiwanie plików
find / -name "nazwa"
wyszukanie pliku o nazwie „nazwa”
find / -name "*koniec"
wyszukanie pliku z nazwą kończącą się słowem „koniec”
find / -name "poczatek*"
wyszukanie pliku z nazwą zaczynającą się od słowa „poczatek”
find / -iname "PLIK"
pomijana jest wielkość liter (plik, PLIK, Plik)
head
wypisanie pierwszych wierszy pliku
head -n2 plik.txt
wypisanie pierwszych dwóch wierszy pliku 'plik.txt'
tail
wypisanie ostatnich wierszy pliku
tail -n4 plik.txt
wypisanie ostatnich 4 wierszy pliku 'plik.txt'
Podpowiedzi
Zadanie 1.
ad 1 mkdir
ad 2 ls, operator >
ad 3 cat, operator >
ad 4 date, head i tail
ad 8 cp
ad 9 ln
ad 10 ls, operator >>
ad 11 mv
ad 12 rm
ad 13 echo
Zadanie 2.
cd ~
nano .bashrc
alias 'komenda' = 'polecenie; polecenie 2; polecenie 3'
http://sokrates.mimuw.edu.pl/~sebek/srodowisko.html
https://wiki.archlinux.org/index.php/Color_Bash_Prompt
Po zmianach pamiętać o zapisaniu i przeładowaniu pliku .bashrc – komenda „source ~/.bashrc” lub zmiana
uprawnień tego skryptu i jego uruchomienie (odpowiedni chmod a potem ~/.bashrc).