pdf - Środowisko programisty
Transkrypt
pdf - Środowisko programisty
Środowisko programisty Zestaw 1 Semestr zimowy 2016/2017 Kraków, 4-6 października 2016 Polecenia powłoki Wprowadzenie Podczas tego kursu będziemy pracować w systemie Linux. W pracowni, po zalogowaniu mamy dostęp do konta wydziałowego. Do konta wydziałowego możemy dostać się zdalnie za pomocą serwera student. Wystarczy przejść do podkatalogu afs katalogu domowego. W wierszu poleceń (terminal ) wpisujemy ssh nazwa_uż[email protected] aby zalogować się na konto użytkownika na serwerze dla studentów. W systemie Windows możemy wykonać tę operację za pomocą programu putty, który należy pobrać z internetu. Po udanym zalogowaniu, użytkownik łączy się z powłoką systemową. Powłoka systemowa (ang. shell ) to program będący pośrednikiem pomiędzy systemem operacyjnym a użytkownikiem. Użytkownik wydaje polecenia dla systemu poprzez wpisywanie komend dla powłoki. Można powiedzieć, że pełni funkcję interpretera kolejno wpisywanych poleceń. W systemach uniksowych najpopularniejszą powłoką jest bash (ang. Bourne-Again SHell ). Gdy powłoka oczekuje kolejnej komendy, wyświetlany jest wiersz poleceń (ang. command prompt). Typowy wiersz składa się z podstawowej informacji o systemie, zakończony znakiem $, po którym możemy wpisać komendę. Jeśli np. wpiszemy whoami, naszym oczom ukaże się mniej więcej: $ whoami pdan przy założeniu, że pdan to Wasz login. Tak jak w tym przykładzie, często gdy wyjaśnia się interakcję pomiędzy użytkownikiem a powłoką, przedstawia się zarówno to co wpisał użytkownik (linie rozpoczynające się od $), jak i to co w odpowiedzi wypisał komputer (bez $ na początku). Typowe dystrybucje Linuxa wyposażone są w graficzny interfejs1 użytkownika (ang. GUI – Graphical User Interface). Taki interfejs pozwala na bardziej intuicyjne wydawanie poleceń przy pomocy myszki, np. poprzez klikanie w ikonki i ich przesuwanie. Każda taka operacja jest jednak tłumaczona na polecenia powłoki. Dla programisty pracującego w systemie Linux, bezpośrednie korzystanie z powłoki zamiast GUI jest często wygodniejsze: ∗ GUI pozwala jedynie na podstawowe operacje, często zorientowane na pracownika biurowego nie związanego z programowaniem. Shell daje znacznie większy wachlarz możliwości, udostępniając bardziej nietypowe polecenia, np. związane z programowaniem i kompilacją. ∗ Shell pozwala na łączenie komend w bardziej skomplikowane skrypty i automatyzację pracy. 1 ang. interface. Ktoś kiedyś chciał to tłumaczyć jako „międzymordzie”, ale na szczęście się nie przyjęło Strona 1/8 Środowisko programisty Zestaw 1 Semestr zimowy 2016/2017 Kraków, 4-6 października 2016 ∗ Komendy powłoki mogą być zapisane w pliku celem ich późniejszego, lub wielokrotnego wykonania. ∗ Komendy powłoki z łatwością mogą być udostępniane innym użytkownikom. Różne dystrybucje Linuxa posiadają inne interfejsy graficzne, ale podstawowe komendy shella pozostają takie same. Tutoriale i instruktaże jakie można znaleźć w Internecie (np. jak zainstalować i skonfigurować daną aplikację) często korzystają z poleceń shella, ze względu na ich precyzję i uniwersalność. Z tych powodów na naszym kursie skupiamy się właśnie na poleceniach powłoki. Wiedza tu zdobyta pozwoli Wam na sprawne dostosowanie środowiska do Waszych potrzeb i potrzeb każdego projektu, nad którym przyjdzie Wam pracować. Pomoc W pozostałej części dzisiejszego kursu przestawimy podstawowe instrukcje shella. Lista ta nie jest wyczerpująca: przedstawiamy tylko te najbardziej podstawowe komendy i nie wyjaśniamy ich wszystkich możliwych parametrów. Dlatego warto wiedzieć jak umieć dowiedzieć się czegoś. Z pomocą spieszy nam komenda man (ang. manual ). Wywołanie man <komenda> pozwoli nam przeczytać szczegółowy opis <komenda>, wraz z wszystkimi możliwymi parametrami jakie możemy tam przekazać. Na przykład, wywołując man whoami dowiemy się, że: DESCRIPTION Print the user name associated with the current effective user ID . Same as id - un . -- help display this help and exit -- version output version information and exit Jak można wyczytać, whoami działa tylko w jeden określony sposób, ale istnieje podobna komenda id która ma większe możliwości. Dlatego jeżeli staniecie przed jakimś problemem, gdzie dana komenda wydaje się być niewystarczająca, zachęcamy przeczytać manual — być może okaże się, że ta albo podobna komenda z jakimś dodatkowym parametrem wykona właśnie to czego oczekujecie. Poruszanie się po systemie plików Ważnym elementem każdego systemu operacyjnego jest możliwość przechowywania danych. Dane są przechowywane w postaci niezależnych plików, dzielące wspólną pamięć (przeważnie dyskową, ale nie tylko). Ze względu na dużą liczbę plików, są one zorganizowane w drzewo katalogów (ang. directory). Pliki użytkownika w typowym systemie linuksowym znajdują się w katalogu /home/<login>, gdzie <login> należy zamienić Waszym loginem. Jeśli np. moja nazwa użytkownika to Strona 2/8 Środowisko programisty Zestaw 1 Semestr zimowy 2016/2017 Kraków, 4-6 października 2016 pdan, to mój katalog domowy byłby /home/pdan. ∗ Pierwsze / oznacza korzeń drzewa katalogów (ang. root directory). Wszystkie pliki obsługiwane przez system znajdują się w tym katalogu ∗ home to nazwa katalogu znajdująca się bezpośrednio w korzeniu w którym przechowywane są pliki wszystkich użytkowników systemu ∗ <login>, np. pdan to podkatalog home-a w którym znajdują się Wasze pliki. Podczas pracy z bashem, w każdej chwili użytkownik “znajduje się” w jakimś katalogu. Komenda pwd pozwala szybko określić jaki jest aktualny katalog (ang. current directory / working directory): $ pwd / home / pdan Polecenie ls -al wyświetla całą zawartość bieżącego katalogu wraz z dodatkowymi informacjami na temat plików i folderów. 22 21 22 22 21 10:47 22:09 10:40 10:39 22:17 . .. plik - admina README . txt Srodowisko nazwa pliku Sep Sep Sep Sep Sep ostatnia modyfikacja wielkość pliku grupa właściciela właściciel liczba połączeń prawa dostępu typ pliku $ ls - al total 12 drwxrwxr - x 3 kecim kecim 4096 drwx - - - - - x 44 kecim users 4096 -r - -r - - - - - 1 kecim kecim 100 -rw - rw -r - - 1 kecim kecim 32 drwxrwxr - x 2 kecim kecim 4096 Na kolejnych zajęciach wyjaśnimy w szczegółach znaczenie poszczególnych kolumn. Plik/katalog jest ukryty gdy jego nazwa zaczyna się od kropki. Zwróć uwagę na dwa pierwsze katalogi w przykładzie . i .. reprezentują one odpowiednio aktualny katalog i katalog nadrzędny. Takie dwa ukryte katalogi znajdują się w każdym katalogu. Szczególny przypadek to katalog główny /, który sam dla siebie jest katalogiem nadrzędnym, a więc . i .. reprezentują tam ten sam katalog. Ponadto, katalog ~ w dowolnym kontekście oznacza katalog domowy danego użytkownika. pwd ls cd -l -a <nazwa> podaje pełną ścieżkę dostępu do aktualnego katalogu wyświetla zawartość podanego katalogu wyświetla dodatkowe informacje o plikach wyświetla pliki ukryte, zaczynające się od . zmienia aktualny katalog na <nazwa> Strona 3/8 Środowisko programisty Zestaw 1 Semestr zimowy 2016/2017 Kraków, 4-6 października 2016 touch <nazwa> mkdir <nazwa> -p rm <nazwa>... -r cp <z>... <do> mv <z>... <do> chmod <flagi> <plik>... du <plik>... find -b -h <katalog> -name <plik> -size <n> uaktualnienia czas ostatniej modyfikacji pliku <nazwa>. Jeśli plik nie istnieje to tworzy pusty tworzy pojedynczy katalog o podanej nazwie tworzy wszystkie niezbędne katalogi na ścieżce <nazwa> usuwa pliki <nazwa> (proponujemy nie używać rmdir) Usuwa katalog <nazwa>, wraz z całą zawartością kopiuje pliki <z> do pliku/katalogu <do> przenosi pliki <z> do pliku/katalogu <do> zmienia prawa własności plików i katalogów wyświetla rozmiar każdego wymienionego pliku (z osobna) Na typowym systemie blok to 1024 bajty, ale ogólnie ich wielkości mogą być różne na różnych systemach. wyświetla wielkość w bajtach a nie blokach wyświetla wielkość w wygodnych jednostkach szuka <plik> w <katalog>-u i jego podkatalogach szuka plików wielkości <n> bloków, gdzie każdy blok to 512 bajtów. Praca z plikami Podstawowym rodzajem pliku jest plik tekstowy, składa się on ze znaków czytelnych dla człowieka. Poniższe podstawowe komendy pozwalają na przeglądanie i edycję takich plików: wyświetla <tekst> na standardowym wyjściu wyświetla poprawnie <tekst>, nawet gdy zawiera znaki specjalne, takie jak spacje, #, !, etc... cat <pliki>... łączy <pliki> w jedną całość i wypisuje je na standardowe wyjście -n wyświetla numery linii -E wyświetla końce linii znakiem $ tac <pliki>... łączy <pliki>, ale wyświetla linie w odwrotnej kolejności wc <pliki>... liczy linie, słowa i znaki z <pliki> -c wyświetla liczbę znaków -w wyświetla liczbę słów -l wyświetla liczbę linii head wyświetla początkowe linie pliku -<n> wyświetla pierwszych <n> linii tail wyświetla końcowe linie pliku -<n> wyświetla ostatnich <n> linii sort sortuje linie ze standardowego wejścia echo <tekst> ’<tekst>’ Strona 4/8 Środowisko programisty Zestaw 1 Semestr zimowy 2016/2017 Kraków, 4-6 października 2016 sortuje linie w odwrotnej kolejności przepisuje linie ze standardowego wejścia, omijając sąsiadujące powtórzenia -r uniq Zużycie pamięci dyskowej Pracując na wspólnym serwerze, tak jak w przypadku TCS-u, trzeba mieć na względzie ile nasze pliki zajmują miejsca na dysku. Wprawdzie nasze dyski są spore, ale muszą przechowywać dane dla wszystkich studentów! By uniknąć sytuacji w której miejsca zupełnie brakuje, administratorzy wprowadzają limity dla każdego użytkownika. W ten sposób nawet jeśli ktoś zapełni swoją przestrzeń, nie wpłynie to negatywnie na Twoją pracę. Komenda quota podaje informację o ilości zużytej pamięci przez użytkownika, oraz jego dostępnych limitach. -g --group -v --verbose -s -q --human-readable --quiet Wyświetla limity dla grupy do której należy użytkownik Uwzględnia wszystkie dostępne systemy plików, nawet tam gdzie nie ma limitów Wyświetla ilość danych w wygodnych jednostkach Wyświetla informacje tylko gdy limity są przekroczone Na serwerach tcs limity są określone dla grupy użytkownika a niekoniecznie dla loginu. Dlatego rekomendujemy używać parametr -g: 0 0 ilość plików grace czas na poprawę limit twardy limit quota miękki limit aktualne zużycie ilość danych czas na poprawę twardy limit miękki limit aktualne zużycie $ quota - sg Disk quotas for group staff ( gid 50) : none Disk quotas for group users ( gid 100) : none Disk quotas for group fuse ( gid 109) : none Disk quotas for group pdan ( gid 627) : Filesystem space quota limit grace files random . direct :/ exports / home / student 9687 M 8192 M 16384 M 6 days 103 Użytkownik ma prawo przekroczyć miękki limit na krótki okres czasu (tzw. grace period ). Na przykładzie powyżej miękki limit został przekroczony i pozostało 6 dni by użytkownik skorygował problem. Ponadto użytkownik może być ponaglany do korekty w inny sposób, np. poprzez regularny automatyczny e-mail. Twardy limit nie może zostać przekroczony. Przy każdej operacji która mogłaby naruszyć ten limit zostanie wywołany błąd tak jakby nie było miejsca na dysku. Strona 5/8 Środowisko programisty Zestaw 1 Semestr zimowy 2016/2017 Kraków, 4-6 października 2016 Limit 0 oznacza, że nie ma żadnego limitu. W przykładzie powyżej, zostały określone limity 8G (miękki) i 16G (twardy) na ilość danych. Nie ma natomiast limitów na liczbę plików. Jeśli ilość wolnego miejsca jest niewielka, trzeba albo znaleźć i usunąć niepotrzebne pliki, albo je skompresować. Kompresji można dokonać różnymi programami, najbardziej popularne są gzip i tar. Skompresowane pliki nie są plikami tekstowymi i typowo mają końcówkę .gz. gzip <nazwa> kompresuje <nazwa>, tworząc <nazwa>.gz gzip -d <nazwa>.gz dekompresuje <nazwa>.gz tar czvf <katalog>.tar.gz <katalog> kompresuje <katalog> tar tzvf <katalog>.tar.gz listuje skompresowany <katalog> tar xzvf <katalog>.tar.gz dekompresuje <katalog> Pozostałe polecenia passwd whoami who clear exit zmienia hasło użytkownika wyświetla nazwę aktualnego użytkownika wyświetla wszystkich użytkowników zalogowanych aktualnie w systemie czyści ekran terminalu zamyka powłokę Ponadto komenda alias pozwala na tworzenie nowych skrótów, wyglądających jak osobne komendy. alias < nazwa >= ’ < tekst > ’ Za każdym razem, gdy zostanie wywołana komenda <nazwa>, zostanie ona zastąpiona treścią <tekst>. Wywołanie komendy alias bez parametrów wypisuje wszystkie aktywne aliasy. $ alias la = ’ ls -al ’ $ la total 12 drwxrwxr - x 3 kecim drwx - - - - - x 44 kecim -r - -r - - - - - 1 kecim -rw - rw -r - - 1 kecim drwxrwxr - x 2 kecim $ alias alias la = ’ ls -al ’ kecim 4096 Sep 22 10:47 . users 4096 Sep 21 22:09 .. kecim 100 Sep 22 10:40 plik - admina kecim 32 Sep 22 10:39 README . txt kecim 4096 Sep 21 22:17 Srodowisko Dany alias jest aktywny tylko podczas jednej sesji. Po otwarciu nowej trzeba go ponownie stworzyć. Na przyszłych zajęciach wyjaśnimy jak zautomatyzować ten proces. Strona 6/8 Środowisko programisty Zestaw 1 Semestr zimowy 2016/2017 Kraków, 4-6 października 2016 Anatomia polecenia Powyżej przedstawiliśmy kilkanaście podstawowych poleceń powłoki. Mimo różnic w działaniu można wyszczególnić kilka cech wspólnych. Każde polecenie składa się z nazwy i list argumentów. Można wyszczególnić trzy rodzaje argumentów: ∗ Flaga – zmienia działanie polecenia samym faktem że jest wymieniona. Na przykład komenda ls działa inaczej gdy wywołujemy bez argumentów, a inaczej gdy zaistnieje flaga -l lub flaga -s. Flagi typowo rozpoczynają się pojedynczym znakiem - i pojedynczą literą. Gdy występuje wiele flag, można je połączyć razem, np. ls -a -l oznacza to samo co ls -al. Poza jednoliterowymi flagami, mogą być też ich dłuższe wersje. Wtedy rozpoczynamy podwójnym -- i pełną nazwą, n.p. ls -a oznacza to samo co ls --all. Flag wieloznakowych nie można łączyć, każda zaczyna się od osobnego --. Uwaga: niektóre instrukcje używają pojedynczego - także do argumentów wieloznakowych. ∗ Wartości – wymagają podania konkretnej liczby lub nazwy by dany argument miał sens. Takie argumenty przekazuje się bezpośrednio po nazwie argumentu. Na przykład dla komendy find możemy przekazać -size 20c by znaleźć pliki o wielkości 20 znaków. Przekazanie samego -size tak jakby to była flaga nie miałoby sensu. Czasami zdarza się, że komenda wymaga znaku = pomiędzy nazwą argumentu a jego wartością. ∗ Argument pozycyjny – argumenty dla których nie podaje się nazwy tylko samą wartość. Znaczenie danego argumentu zależy od jej pozycji w liście argumentów. Na przykład dla cp komenda traktuje wszystkie argumenty pozycyjne poza ostatnim jako źródła, a ostatni jako punkt docelowy. Na przykład cp A B K skopiuje dwa pliki A i B to katalogu K. Komenda wypisuje wynik na standardowe wyjście, którym domyślnie jest ekran terminala. Komenda może też zmienić coś w systemie, np. dodać lub usunąć pliki, bądź zmienić aktualny katalog. args SYSTEM Działanie komendy często nie zależy tylko od argumentów. Wiele komend czyta dłuższe dane ze standardowego wejścia, czyli domyślnie z klawiatury. Działanie komendy może zależeć też od ogólnego stanu systemu. Np. to co wypisze komenda pwd zależy od katalogu w którym ją wywołujemy. stdin komenda stdout Dla niektórych komend takie domyślne działanie jest mało praktyczne. Na przykład, po co komu komenda sort czytająca tekst z klawiatury (zakończony Ctrl+D) i sortująca go alfabetycznie z wynikiem wyświetlonym ponownie na ekranie? Operacje takie mają większy sens gdy standardowe wejście lub wyjście zostanie przekierowane. Wejściem lub wyjściem wcale nie musi być klawiatura czy ekran, ale dowolny plik. Strona 7/8 Środowisko programisty Zestaw 1 Semestr zimowy 2016/2017 Kraków, 4-6 października 2016 ∗ komenda > plik – przekierowuje standardowe wyjście komendy do nowego pliku o podanej nazwie. Jeśli plik już istniał, jego stara wersja zostanie skasowana. ∗ komenda >> plik – przekierowuje standardowe wyjście komendy do pliku. Jeśli ów plik już istniał, dopisuje wynik do jego końca. ∗ komenda < plik – wczytuje plik jako standardowe wejście do komendy. Na przykład polecenie ls - al > out . txt Możliwe jest też łączenie wejść i wyjść wielu komend za pomocą potoków (symbol: |). Przykładowo, jeśli chcemy posortować odwrotnie leksykograficznie pierwszych 25 linijek pliku „in.txt” i zapisać wynik do „out.txt”: zawartość aktualnego katalogu sprawdzi w systemie jaka jest zawartość aktualnego katalogu i wypisze wynik w pliku out.txt. -a -l ls out.txt head -25 < in.txt | sort -r > out.txt Poprzez sprytne wykorzystanie potoków możemy poradzić sobie z tak naturalnymi problemami, jak zliczenie niepowtarzających się linii pliku „p2”: head sort < p2 | uniq | wc -l cat p2 | sort | uniq | wc -l in.txt -25 -r sort out.txt Strona 8/8