Konsola linuksowa podstawy (wersja 0 7)

Wstęp

Linuksa, tak jak jego ojca Uniksa, można obsługiwać jedynie z linii poleceń. Wszystkie środowiska graficzne (KDE, Gnome) oraz menadżery okien stanowią jedynie nakładkę na środowisko konsolowe. Działanie jest to rozmyślne, ponieważ praca z linii komend umożliwia szybką oraz wygodną administrację systemem, jest ergonomiczna dla systemu (nie ma zbędnego obciążenia wyświetlaniem grafiki) oraz umożliwia łatwą automatyzację działań (nie ma potrzeby w skryptach tworzyć interfejsów graficznych). Należy więc oczekiwać, iż długo jeszcze nie wystąpi tutaj taka ewolucja jak w przypadku systemu Windows, czyli eliminacja środowiska tekstowego na rzecz graficznego.

Podstawowe wiadomości - powłoka bash

Polecenie w Linuksie są to programy napisane w różnych językach programowania C, C++, Perl, Awk lub innych. Stanowią one pewny pośrednik między jądrem systemu a użytkownikiem.

Powłoka systemowa to specjalny program będący pośrednikiem między systemem a użytkownikiem. Zawiera ona wbudowane polecenia, dzięki którym życie staje się prostsze. Istnieje kilka popularnych powłok: bash, ash, csh. Najpopularniejszą jest bash, która jest dołączana jako domyślna powłoka w wielu dystrybucjach.

Po zalogowaniu się użytkownika do systemu uruchamia się automatycznie skrypt .bashrc. Zawiera on podstawowe zmienne użytkownika i jest wykonywany przy każdym zalogowaniu. Inny skrypt, .bash_profile jest uruchamiany przy pierwszym logowaniu się do systemu.

Historia poleceń znajduje się w pliku .bash_history. Dzięki temu w powłoce bash mamy możliwość przy pomocy strzałek góra - dół odtwarzać wcześniej wydane polecenia. Wielu początkujących crakerów (włamywaczy komputerowych) zapomina o istnieniu tego pliku.

Krótki tekst porównujący różne powłoki znajdziesz na stronie http://lubuska.zapto.org/~hoppke/too_much_to_learn/shelle.html.

Pomoc w środowisku konsoli

Pracując w Linuksie w trybie konsoli mamy do dyspozycji kilka źródeł pomocy do programów: dokumentacje w katalogu opisów, strony pomocy systemowej man, strony pomocy info oraz opcje --help w prawie każdym programie.

Opcja --help

Prawie każdy program reaguje na wpisanie opcji --help albo -h wyświetlając krótką informację o sposobie używania aplikacji. Dzięki temu nie musimy zaglądać do dokumentacji ani stron podręczników systemowych.

Przykład: zobacz efekt polecenia ls --help

Manual

Jeżeli twórcy programu albo dystrybucji uznali za konieczne utworzenie strony pomocy systemowej opisującej konfigurację i użytkowanie aplikacji dostępna jest ona po wydaniu polecenia man nazwa_programu. Przeważnie oprócz jednej strony dostępne są także dalsze, wymienione w sekcji zobacz także .

Przykład: Pomoc w postaci stron man do polecenia ls otrzymamy wydając polecenie man ls

.

Info

Info jest nowszą wersją polecenia man. Posiada interakcyjną możliwość przechodzenia między kolejnymi tematami. Część opisów programów jest dostępna już tylko w tej postaci.

Przykład: Pomoc w postaci info do polecenia ls otrzymamy wydając polecenie info ls

.

Dokumentacja w katalogu /usr/share/doc

Twórcy programów bardzo często dostarczają dokumentację do swoich programów dokładnie opisującą sposób instalacji i użytkowania aplikacji. Dostępna jest ona w podkatalogu z nazwą programu katalogu /usr/share/doc.

Przykład: Opis instalacji i użytkowania serwera Apache znajdziemy w katalogu /usr/share/doc/Apache_numer_wersji

Apropos

Często jednak mamy problem: jakie komendy są związane z danym tematem? I tutaj przychodzi nam z pomocą polecenie aproposwyszukujące właśnie wśród dostępnych tematów manuala tematy związane. Interesujący nas temat podajemy jako parametr.

[ziutus2@localhost bin]$ apropos remove | grep director
cleanlinks (1x) - remove dangling symbolic links and empty directories
mrd (1) - remove an MSDOS subdirectory
rm (1) - remove files or directories
rmdir (1) - remove empty directories

Ćwiczenie 1

Proszę wykonać następujące czynności:

  1. Sprawdzić przy pomocy opcji -help jak można uzyskać wyświetlenie informacji o poleceniu df (określa ono zajętość poszczególnych systemów plików) z wynikiem bardziej zrozumiałym dla użytkowników czyli z liczbami w postaci kilobajtów i megabajtów.

  2. Sprawdzić przy pomocy podręcznika systemowego (man) jak można uzyskać wyświetlanie informacji o prawach użytkownika i objętości pliku w poleceniu ls. Tą samą informację należy wyszukać korzystając z pomocy w postaci info. Proszę odnaleźć plik informujący o procedurze instalacji bazy danych MySQL (wskazówka: znajduje się on w którymś z podkatalogów katalogu /usr/share/doc).

Konsola - pomocne skróty klawiszowe

Konsola to mimo wszystko najpopularniejszy sposób konfigurowania systemu. Początki Linuksa wywodzą się z Uniksa, więc nie powinno dziwić, iż posiada on bardzo wygodną powłokę bash. Jednym z elementów uprzyjemniających pracę z konsolą są skróty klawiszowe.

Klawisze Shift + Page Up i Shift + PageDown pozwalają przewijać zawartość obecnego ekranu ukazując to co było na nim przed chwilą. Automatyczne dokończenie nazwy polecenia uzyskamy naciskając klawisz TAB. Jeżeli powłoka nie jest wstanie samodzielnie dokończyć nazwy polecenia ponownie naciśnięcie TAB spowoduje wyświetlenie listy dostępnych możliwości. Po historii poleceń poruszamy się klawiszami Strzałka Góra i Strzałka Dół, natomiast kombinacja CTRL + R pozwala wyszukać w historii poleceń komendy wcześniej już wykonanej (co zwalnia nas z ponownego jej wpisywania). Jeżeli natomiast chcemy przerwać działanie programu to w większości przypadków uda nam się to dzięki kombinacji CTRL + C. Sam proces możemy zatrzymać naciskając CTR + Z.

Gpm jako copy-paste w środowisku konsoli

Z czasem, gdy dość często używamy konsoli, będziemy potrzebowali łatwego sposobu przenoszenia fragmentów tekstu między konsolami. Przyda się nam wtedy program gpm (standardowo instalowany w prawie każdej dystrybucji).

Program gpm umożliwia łatwe kopiowanie tekstu między konsolami. Lewym klawiszem zaznaczamy fragment tekstu (ekranu), prawym wstawiamy.

Uwaga: Nie jest możliwe kopiowanie między wirtualnymi terminalami a środowiskiem graficznym

Ciekawostka: gpm nie umożliwia tylko kopiowanie tekstu, do klawiszy można przyporządkować także inne akcje, np. zamykanie systemu.

Strumienie i przetwarzanie potokowe, idea i zastosowania

Każdy program pracujący w konsoli ma trzy strumienie: wejściowy, wyjściowy oraz błędów. Standardowe wejście to konsola, wyjście oraz wyjście dla błędów to ekran monitora. Pozwala to w wygodny sposób kierować strumieniami komunikatów a także układać polecenia w ciągi, co pozwala tworzyć nawet skomplikowane polecenia.

Strumień wyjściowy możemy przekierować korzystając z znaku >. Pozwala to w łatwy sposób np. zapisać dane do pliku. 
Przykład: zapiszmy wszystkie pliki z obecnego katalogu do pliku spis.txt.

ls > spis.txt

Strumień wejściowy zmieniamy z domyślnej klawiatury dzięki '<'. Przydatne jest to w przypadku, gdy chcemy przekazać dane zapisane w pliku do skryptu czy polecenia. 
Przykład: Policzmy ile jest plików zapisanych w poprzednim przykładzie.

wc -l < spis.txt

Standardowy strumień błędów aplikacji możemy przekierować używając znaku '2>'. Dzięki temu możemy łatwo zapisać błędy np. do pliku. 
Przykład: błędy z programu ls zapiszemy do pliku bledy.txt.

ls bledny_katalog 2> bledy.txt

Jeżeli chcemy przekazywać dane z jednego polecenia do drugiego najlepiej skorzystać z łącznika |. 
Przykład: Chcemy znaleźć pakiety z nazwą zawierającą słowo MySQL. Zrobimy to następująco:

rpm -qa | grep MySQL

Ćwiczenie 2

Proszę wykonać następujące czynności:

  1. Stworzyć plik z listą katalogów i plików w katalogu głównym (tylko).

  2. Przeliczyć ile katalogów zostało zapisanych w pliku z poprzedniego punktu, czyli ile katalogów znajduje się w katalogu głównym.

  3. Sporządzić listę katalogów i plików z katalogu /usr/share/doc (tylko i wyłącznie z tego katalogu) z literą y w nazwie (z pomocą polecenia grep).

Pliki i dowiązania twarde oraz miękkie

System plików Linuksa (ext2 i jego nowsza wersja ext3) ma budowę bardziej podobną do sieci niż korzenia drzewa. Podstawowym pojęciem są tzw i-węzły (inodes). Są to struktury systemowe przechowywujące informacje na temat plików i katalogów przechowywanych na dysku. W nim są zapisane wszystkie dane dotyczące pliku: właściciel i grupa, rozmiar, czas utworzenia i modyfikacji, informacje dotyczące zapisu i odczytu, a także fizyczne położenie na dysku. Każdy i-węzeł posiada numer ale nie nazwę, wiec plik nawet nie potrzebuje nazwy! Konsekwencją tego jest fakt, iż każdy katalog to tak na prawdę plik z zapisaną informacja o numerze i-węzła i nazwą oraz to iż do każdego pliku można stworzyć wiele nazw. Tutaj dochodzimy do ważnych pojęć jakim są dowiązania sztywne i symboliczne.

Dowiązanie sztywne jest to wskazanie na ten sam plik w innym miejscu niż nastąpiło pierwsze dowiązanie. Dla systemu plików nie ma więc różnicy skąd nastąpi interwencja na pliku bo i tak modyfikowany jest obiekt wskazywany przez i-węzeł. Ograniczeniem jest fakt iż dowiązanie twarde (sztywne) jest ograniczone do jednego systemu plików. Dopiero usunięcie ostatniego dowiązania twardego powoduje usunięcie pliku z dysku.

Dowiązanie miękkie jest to wskazanie na dany plik, które może przekraczać systemy plików. Jednak usunięcie wskazywanego pliku powoduje, iż plik faktycznie zostanie on usunięty. Dowiązanie miękkie nie broni przed tym, można je porównać do skrótu z Windows'a.

Katalogi są traktowane jak zwykle pliki, jednak ze względów porządkowych zakazane jest tworzenie wielu dowiązań do jednego katalogu.

Prawda dostępu do plików

Linux jest środowiskiem wieloużytkowym, co widać także w filozofii dostępu do plików i katalogów. Podstawowy model dostępu do plików określa odpowiednio prawa dostępu dla właściciela pliku, grupy oraz wszystkich innych. Każda z tych grup może mieć prawo do zapisu (w) wykonywania (x) oraz czytania (r). Dodatkowo często przy wyświetlaniu informacji o praw dostępu dodawana jest dodatkowa informacja o rodzaju pliku. Może on być zwykłym plikiem (-), katalogiem (d), linkiem symbolicznym (l), urządzeniem blokowym (b) lub znakowym (c). Czasem zamiast typowego x w prawach oznaczających możliwość wykonania przez użytkownika czy grupę możemy zobaczyć s. Oznacza to iż plik jest wykonywany nie z prawami użytkownika ale właściciela lub odpowiednio grupy np. uruchamiamy jako użytkownik program do partycjonowania dysku z uprawnieniami administratora systemu.

Przykładowy zapis tych uprawnień to:

-rw-rw-r-- 1 ziutus ziutus 164 lut 18 10:15 flash.html

Co oznacza iż jest to zwykły plik (-) użytkownik ma prawo do odczytu i zapisu (rw-), grupa ma prawo do odczytu i zapisu (rw-) a wszyscy inni jedynie do odczytu (r--).

W przypadku pracy w środowisku konsoli prawa dostępu możemy zobaczyć po wydaniu polecenia ls -l

ziutus@ziutus:~/public_html$ ls -l
razem 372
drwxrwxr-x 8 ziutus ziutus 4096 paź 24 2001 abrax
-rw-rw-r-- 1 ziutus ziutus 164 lut 18 10:15 flash.html
drwxrwxr-x 2 ziutus ziutus 4096 lut 18 10:14 fun
drwxrwxr-x 10 ziutus ziutus 4096 sty 1 06:43 homepage
drwxrwxr-x 7 ziutus ziutus 4096 sty 16 09:21 homepage2
drwxrwxr-x 7 ziutus ziutus 4096 sty 30 17:48 homepage3
-rw-rw-r-- 1 ziutus ziutus 2042 mar 21 12:33 index.html
drwxrwxr-x 40 ziutus ziutus 4096 mar 21 13:44 kurshtml
drwxrwxr-x 8 ziutus ziutus 4096 maj 11 11:22 linuxinpl3
drwxrwxr-x 4 ziutus ziutus 4096 kwi 28 16:11 linuxinpl4
drwxrwxr-x 2 ziutus ziutus 4096 lut 3 16:36 lin-wrozka
-rw-r--r-- 1 ziutus ziutus 300106 lis 19 2001 marcin.zip
drwxrwxr-x 3 ziutus ziutus 4096 mar 18 04:25 pl2
drwxr-xr-x 2 ziutus ziutus 4096 lis 9 2001 praca
drwxrwxr-x 4 ziutus ziutus 4096 gru 7 2001 projekt
drwxrwxr-x 8 ziutus ziutus 4096 paź 21 2001 sklep0.4
drwxrwxr-x 5 ziutus ziutus 4096 mar 28 15:00 sklep05
-rw-rw-r-- 1 ziutus ziutus 192 mar 28 15:37 test.php
drwxrwxr-x 12 ziutus ziutus 4096 gru 6 2001 ubiquick
ziutus@ziutus:~/public_html$

W przypadku systemu plików ext2 i ext3 (podstawowego dla Linuksa) istnieje możliwość zastosowania rozszerzonych atrybutów. Pozwalają one na ustalić takie reguły jak: niemodyfikowanie czasu dostępu do pliku (oszczędność dla laptopów), tylko dopisywanie do pliku (przydatne np. przy dziennikach systemowych), automatyczną kompresję pliku przez jądro (oszczędność miejsca kosztem czasu dostępu), wykluczenie z kopii sporządzanych programem dump, zakaz modyfikacji pliku (praktycznie obowiązkowe dla plików konfiguracyjnych), sterowanie procesem księgowania pliku, bezpieczne usuwanie pliku (blok po skasowanym pliku jest zerowany i ponownie nadpisywany), czy zabezpieczenie przed przypadkowym usunięciem.

Modele te nie zawsze spełniają swoje zadania. Można wtedy zastosować ACLe czyli listy dostępu do plików. Ze względu na fakt iż Linux pracuje z wieloma systemami plików, a nie każdy z nich obsługuje ACLe, nie zostały one włączone do jądra systemu. W przypadku ext2 i ext3 można go zainstalować jako łata na jądro w przypadku innych systemów bywa różnie. Więcej o tym w dziale poświeconym linuksowym systemom plików.

Bity SUID i SGID

Bit ten (dziesiąty bit określający dostęp do plików) określa pewną wyjątkowość podczas wykonwynia pliku. Otóż pliki z ustwionym tym plikiem są wykonywane z uprawnieniami właściciela (suid) lub grupy (guid). Podstawowym przykładem programu z ustawionym bitem suid jest passwd służącym do zmiany hasła dostępu użytkownika do konta. Właścicielem tego programu jest root. Gdy użytkownik chce zmienić hasło uruchamia ten program, a ponieważ ma on dostęp do systemu z uprawnieniemi administratora może manipulować plikami z hasłami. Inaczej użytkownik nie mógłby zmienić swojego hasła.

Ponieważ programy, których właścicielem jest administrator systemu i mają ustawiony bit suid są bardzo niebezpieczne ze względów bezpieczeństwa (mogą powodować bardzo dużo nadużyć) administratorzy starają się zminimalizować ich ilość. W Internecie można często spotkać sposoby usuwania tego bitu.

Konsola - Pliki i katalogi

Informacje o plikach i katalogach

Przejdźmy do kolejnego etapu: operacji na katalogach i plikach. Najpierw sprawdźmy nazwę katalogu w którym się znajdujemy (komenda pwd).

[ziutus@localhost ziutus]$ pwd
/home/ziutus

Dalej sprawdźmy co znajduje się w tym katalogu (komenda ls).

[ziutus@localhost ziutus]$ ls
Desktop/ drakeconf.png menudrake1.png public_html/ www.pdi.net/
zrzut ekranu3.png
Documents/ evolution/ OpenOffice.org1.0/ test.html zrzut
ekranu1.png

Wszystkie pliki (Czyli także te ukryte) zobaczymy dodając parametr -a

[ziutus@localhost ziutus]$ ls -a
./ .draksync .mailcap .ssh/
../ evolution/ .mc/
.sversionrc
.bash_history .gaimrc .mcop/
test.html
.bash_logout .gconf/ .MCOP-random-seed tmp/

Natomiast więcej informacji o samych plikach uzyskamy dzięki parametrowi -l. Będzie to prawa dostępu, właściciel i grupa właścicieli, wielkość, czas ostatniej modyfikacji.

[ziutus@localhost ziutus]$ ls -l
razem 396
drwxr-xr-x 3 ziutus ziutus 4096 sie 22 07:00 Desktop/
drwxr-xr-x 2 ziutus ziutus 4096 sie 14 18:07 Documents/
-rw-r--r-- 1 ziutus ziutus 39438 sie 14 21:45 drakeconf1.png
-rw-r--r-- 1 ziutus ziutus 39438 sie 14 21:45 drakeconf.png
drwx------ 4 ziutus ziutus 4096 sie 17 07:59 evolution/
drwx------ 5 ziutus ziutus 4096 sie 22 06:29 Mail/
-rw-r--r-- 1 ziutus ziutus 69307 sie 17 11:18 zrzut ekranu1.png
-rw-r--r-- 1 ziutus ziutus 87013 sie 17 11:31 zrzut ekranu2.png
-rw-r--r-- 1 ziutus ziutus 69101 sie 17 11:42 zrzut ekranu3.png

Czasem w skryptach wygodnie jest oddzielić informację o nazwie katalogu od nazwy pliku w nim. Dokonujemy tego przy pomocy poleceń dirname (podaje nazwę katalogu) oraz basename (podaje nazwę pliku) podając im pełną ścieżkę do pliku.

[ziutus@localhost ziutus]$ dirname /home/ziutus/test.html
/home/ziutus
[ziutus@localhost ziutus]$ basename /home/ziutus/test.html
test.html
[ziutus@localhost ziutus]$

Tworzenie, przenoszenie i kasowanie plików oraz katalogów

katalogi tworzymy przy pomocy polecenia mkdir a usuwamy przez wydanie komendy rmdir. Między katalogami przemieszczamy dzięki cd.

[ziutus@localhost ziutus]$ mkdir test
[ziutus@localhost ziutus]$ cd test
[ziutus@localhost test]$ pwd
/home/ziutus/test
[ziutus@localhost test]$ cd ..
[ziutus@localhost ziutus]$ rmdir test
[ziutus@localhost ziutus]$ cd test
bash: cd: test: Nie ma takiego pliku ani katalogu

przejdźmy do plików. W celu przećwiczenia operacji na plikach utwórzmy pusty katalog test a następnie przejdźmy do niego.

[ziutus@localhost test]$ pwd
/home/ziutus/test
[ziutus@localhost test]$ ls

Następnie utwórzmy pusty plik test1.txt poleceniem touch test1.txt

[ziutus@localhost test]$ touch test1.txt
[ziutus@localhost test]$ ls
test1.txt

Zmianę nazwy (a także przeniesienie go w inne miejsce) dokonamy dzięki poleceniu mv

[ziutus@localhost test]$ mv test1.txt test2.txt
[ziutus@localhost test]$ ls
test2.txt

Pliki kopiujemy poleceniem cp.

[ziutus@localhost test]$ ls
test2.txt
[ziutus@localhost test]$ cp test2.txt test1.txt
[ziutus@localhost test]$ ls
test1.txt test2.txt

A usuwamy komenda rm

[ziutus@localhost test]$ rm test2.txt
rm: usunąć `test2.txt'? t
[ziutus@localhost test]$ ls
test1.txt

Zmiana przynależności pliku

Kolejną ważną sprawą jest przynależność plików do właściciela, czy też grupy właścicieli. Czasem nadchodzi potrzeba jego zmiany, dokonamy tego przy pomocy komendy chown. Składnia polecenia obejmuje nazwę nowego użytkownika, nazwę grupy oddzieloną od nazwy użytkownika kropką oraz nazwę pliku, który modyfikujemy.

[ziutus@localhost test]$ ls -l
razem 0
-rw-r--r-- 1 ziutus ziutus 0 sie 23 15:16 test1.txt
[ziutus@localhost test]$ chown ziutus.lp test1.txt
[ziutus@localhost test]$ ls -l
razem 0
-rw-r--r-- 1 ziutus lp 0 sie 23 15:16 test1.txt

Samą grupę możemy zmienić dzięki poleceniu chgrp.

razem 0
-rw-r--r-- 1 ziutus lp 0 sie 23 15:16 test1.txt
[ziutus@localhost test]$ chgrp ziutus test1.txt
[ziutus@localhost test]$ ls -l
razem 0
-rw-r--r-- 1 ziutus ziutus 0 sie 23 15:16 test1.txt

Wyszukiwanie plików

Pliki wyszukujemy dzięki poleceniu find. W najprostrzej postaci podajemy tylko interesujący nas ciąg znaków. Opcjonalnie przed nim możemy jeszcze dodać ścieżkę przeszukiwania.

[ziutus@localhost test]$ ls
ala.txt test1.txt
[ziutus@localhost test]$ find te*
test1.txt

Bardzo przydatna jest możliwość wywołania polecenia na znalezionych plikach. Przypuśćmy, iż chcemy plikom w podkatalogach nadać prawo 640 a katalogom 750. Jak to uczynić? Polecenie find ma możliwość wywołania polecenia na znalezionych obiektach, należy użyć opcji -exec i podać polecenie (nazwę pliku zastępujemy ciągiem {}). Polecenie to kończymy znakiem `;

find . -type -d -exec chmod 750 {} `;
find . -type -f -exec chmod 640 {} `;

Możemy to też osiągnąć w inny sposób z wykorzystaniem komendy xargs:

find . type -d | xargs chmod 750
find . type -f | xargs chmod 640

Polecenie find umożliwia przeszukiwanie po wielu warunkach, jak rozmiar, właściciel, prawa dostępu itp. Więcej o nim dowiesz się z podręcznika systemowego man find.

Kopiowanie bitowe

Czasem można się także spotkać z potrzebą kopiowania bitowego (np. przy tworzeniu obrazu dyskietki czy partycji). Dokonujemy tego przy pomocy polecenia dd. Ma ono dwa parametry if wskazujący źródło oraz of wskazujący cel.

dd if=/dev/fd0 of=/tmp/fd0

Określenie typu pliku

W niektórych sytuacjach może okazać się przydatne określenie typu pliku z którym mamy do czynienia. Przydatne może się okazać tutaj polecenie find służące właśnie temu celowi.

[ziutus2@localhost ziutus2]$ file /etc/lilo.conf
/etc/lilo.conf: ASCII text

[ziutus2@localhost ziutus2]$ file /usr/bin/file
/usr/bin/file: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5,
dynamically linked (uses shared libs), stripped

Ćwiczenie 3

  1. Proszę przenieść się do katalogu domowego. Następnie sprawdzić przy pomocy polecenia pwd czy faktycznie tam się państwo znajdują oraz wyświetlić listę plików łącznie z ukrytymi. Proszę zapamiętać, które pliki mają w swojej nazwie słowo bash.

  2. Proszę utworzyć katalog test w katalogu domowym. Następnie przejść do niego i utworzyć w nim plik test.txt. Dalej proszę zmienić jego nazwę na test2.txt. Utworzony plik skopiujmy do tego samego katalogu pod nazwą test1.txt. A plik test2.txt usuwamy. Gdy wszystko jest wykonane usuwamy także plik test1.txt i wychodzimy z katalogu i sam katalog usuwamy.

  3. Proszę utworzyć plik o nazwie testowy.txt. Następnie zmienić jego właściciela na użytkownika root. Podobnie należy zmienić grupę właścicieli na root. Proszę wyszukać pliki zawierające słowo bash w nazwie w katalogu domowym.

Struktura katalogów w Linuksie

Podstawowym katalogiem w hierarchii jest katalog / czyli root (ang. korzeń). Od niego wywodzą się wszystkie dalsze. Ma to na celu wprowadzenie pewnego porządku.

Każdy katalog w katalogu głównym ma swoje historyczne i praktyczne umotywowanie, opis tego znajdziesz w tabeli poniżej.

Katalog Wielkość Opis
/boot do 10 MB podstawowe programy potrzebne do uruchomienia systemu
/bin średnio 7 MB podstawowe programy użytkowe dostępne dla każdego użytkownika udostępniane przez system,
/dev 0 MB (katalog specjalny) pliki specjalne urządzeń: dysków, drukarek, terminali, konsoli itp.
/etc ok. 10 - 20 MB dane systemowe i pliki konfiguracyjne systemu i plików (np. pliki haseł),
/home min. 20 MB / użytkownik katalog domowy użytkowników
/lib   binarne biblioteki programów (także moduły jądra)
/opt   katalog dla oprogramowania nie pochodzącego z dystrybucji
/proc 0 MB (katalog specjalny) wirtualny system plików, pozwala się komunikować w łatwy sposób z jądrem systemu
/root   prywatny katalog administratora systemu
/sbin do 10 MB programy do administracji systemem dostępne tylko dla administratora
/tmp   pliki tymczasowe różnych programów
/usr od 50 MB do kilku GB różne programy użytkowe, pliki nagłówkowe i biblioteki, dokumentacja systemu itp.
/var od 20 MB pliki tymczasowe systemu: logi z pracy systemu, poczta użytkownika, strony www, pliki baz danych itp.

Informacje o samym sobie

Zalogujmy się najpierw do sytemu. Po wpisaniu swojego identyfikatora oraz hasła zobaczymy znak zachęty $ (znak # standardowo jest wyświetlany dla konta administratora).

[ziutus@localhost ziutus]$

Sprawdźmy teraz jako kogo rozpoznaje nas system. Uczynimy to przy pomocy whoami

[ziutus@localhost ziutus]$ whoami
ziutus

Następnie, dzięki poleceniu groups, zobaczmy do jakich grup należymy:

[ziutus@localhost ziutus]$ groups
ziutus usb fileshare lp

Pamiętajmy jednak iż w systemach Uniksowych użytkownik rozpoznawany jest tak naprawdę po numerach identyfikacyjnych. Poznamy je dzięki komendzie id:

[ziutus@localhost ziutus]$ id
uid=501(ziutus) gid=501(ziutus) grupy=501(ziutus),43(usb),16(fileshare),7(lp)

Pierwsze polecenie dość często stosujemy, gdy mamy wiele kont oraz tożsamości. Razem z poleceniem hostname pozwala określić gdzie jesteśmy i pod jaką tożsamością. Drugie poleceni pozwala nam określić do jakich grup należymy, a dzięki temu jakie uprawnienia możemy mieć. Ostatnie polecenie jest bardzo przydatne, gdy reinstalujemy system ale chcemy przenieść użytkowników nowego systemu.

Jeżeli chcemy zobaczyć jak długo mamy ważne konto i jakie rygory mamy względem zmiany hasła możemy użyć polecenia chagez parametrem -l:

[ziutus@duzy ziutus]$ chage -l ziutus
Minimum: 0
Maximum: 99999
Warning: 7
Inactive: -1
Last Change: sty 15, 2003
Password Expires: Never
Password Inactive: Never
Account Expires: cze 06, 2003

Oczywiście dyski nie są z gumy. W przypadku systemów wieloużytkowych warto wiedzieć ile miejsca możemy wykorzystać na dyskach.

[ziutus@localhost ziutus]$ quota
Limity dyskowe dla user ziutus (uid 501):
System plików bloki miękki twardy pobł. pliki miękki twardy pobł.
/dev/hdd3 3306* 4000 1500 584 1000 1500

Sprawdzmy jakiej powłoki używamy:

[ziutus@localhost ziutus]$ echo $SHELL
/bin/bash

Jeżeli aktualna powłoka nam nieodpowiada zawsze możemy ją zmienić. Najpierw należałoby jednak wiedzieć jakie mamy do dyspozycji. Możemy to sprawdzić dzięki spisowi wszystkich dostępnych powłok w systemie. Znajduje się on w pliku /etc/shells. Wyświetlając jego zawartość poznamy ich nazwy.

[ziutus@localhost ziutus]$ cat /etc/shells
/bin/sh
/bin/bash

Kolejną ważną informacją są ustawienia naszej powłoki. Dzięki temu możemy zmienić niektóre jej ustawienia dostosowując ją do naszych potrzeb.

[ziutus@localhost ziutus]$ env
PWD=/home/ziutus
XAUTHORITY=/home/ziutus/.Xauthority
LC_MESSAGES=pl
HOSTNAME=localhost.localdomain
NLSPATH=/usr/share/locale/%l/%N
LESSKEY=/etc/.less
LANGUAGE=pl
LESSOPEN=|/usr/bin/lesspipe.sh %s
LESS=-MM
BROWSER=kfmclient openProfile webbrowsing
USER=ziutus
HISTCONTROL=ignoredups
LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;
33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:
mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:
*.btm=01;32:*.bat=01;32:*.tar=01;31:*.tgz=01;31:*.tbz2=01;31:
*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lha=01;31:
*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:
*.tz=01;31:*.rpm=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:
*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:*.tiff=01;35:
LC_TIME=pl
MACHTYPE=i586-mandrake-linux-gnu
KDE_MULTIHEAD=false
HELP_BROWSER=kfmclient openProfile webbrowsing
MAIL=/var/spool/mail/ziutus
INPUTRC=/etc/inputrc
GTK_RC_FILES=/etc/gtk/gtkrc:/home/ziutus/.gtkrc:/home/ziutus/.gtkrc-kde
XMODIFIERS=@im=none
LANG=pl
LC_NUMERIC=pl
COLORTERM=
DISPLAY=:0.0
LOGNAME=ziutus
SHLVL=4
LC_CTYPE=pl
SESSION_MANAGER=local/localhost.localdomain:/tmp/.ICE-unix/2247
SHELL=/bin/bash
HOSTTYPE=i586
QT_XFT=0
OSTYPE=linux-gnu
HISTSIZE=1000
HOME=/home/ziutus
TERM=xterm
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/games:/home/ziutus/bin
SECURE_LEVEL=2
LC_MONETARY=pl
LC_COLLATE=pl
mc=() { mkdir -p $HOME/.mc/tmp 2>/dev/null;
chmod 700 $HOME/.mc/tmp;

Ćwiczenie 4

Proszę sprawdzić następujące informacje:

  1. jako kto Państwo występują w systemie,

  2. do jakich grup użytkowników Państwo należą,

  3. jakie identyfikatory numeryczne zostały Państwu przydzielone przez system.

Informacje o systemie dostępne dla zwykłego użytkownika

Czas poznać nazwę komputera i domeny. Pierwszą możemy poznać dzięki komendzie hostname.

[ziutus@localhost ziutus]$ hostname
localhost.localdomain

Natomiast domeny dzięki domainname

[ziutus@localhost ziutus]$ domainname
localdomain

Kolejną ważną informacją jest wersja jądra systemu i czas jego kompilacji. Poznamy ją dzięki poleceniu uname. Podając parametr -a dowiemy się także kilku innych rzeczy: nazwę domenową, czas kompilacji, architekturę systemu. Nie są to raczej informację przydatne zwykłemu użytkowi ale mogą nam uświadomić jak administrator dba o system a hackerowi dać wiedzę o architekturze procesora i wersji jądra.

[ziutus@localhost ziutus]$ uname -a
Linux localhost.localdomain 2.4.18-6mdk #1 Fri Mar 15 02:59:08 CET 2002 i586 unknown

Współczesne dyski są duże. Linuksa można instalować na kilku partycjach (co jest nawet zalecane) i czasem wygodnie jest wiedzieć jak te dyski są obciążone. Dowiemy się tego wydając polecenie df a wynik jego ucywilizujemy dodając parametr -h, dzięki któremu rozmiary będą podawane w MB lub GB.

[ziutus@localhost ziutus]$ df -h
System plików rozm. użyte dost. %uż. zamont. na
/dev/sda1 1.0G 895M 79M 92% /
none 62M 0 61M 0% /dev/shm
/dev/hdc3 461M 390M 48M 89% /mnt/debian
/dev/hdc1 2.4G 2.1G 439M 83% /mnt/windows

W przypadku niedostatecznie zabezpieczonych systemów użytkownicy mogą przeczytać komunikaty jądra wyświetlane przez polecenie dmesg. Istnieje też możliwość przeglądania informacji umieszczonych w katalogu /proc (m.in. ilość procesorów, informacje o partycjach czy procesach innych użytkowników).

Zauważmy też, iż systemy, w których nie korzysta się z ACLi, umożliwiają obejrzenie konfiguracji serwera zawartej w plikach konfiguracyjnych w katalogu /etc/

Odpowiedzi do ćwiczeń

Ćwiczenie 1

W celu określenia opcji umożliwiającej wyświetlanie informacji o zajętości systemów plików wydajemy polecenie df -help, następnie wyszukujemy w wyniku potrzebną opcję, powinna to być opcja -h, tak więc szukane polecenie ma postać df -h.

Ćwiczenie 2

  1. Listę katalogów z katalogu głównego, którą utworzymy w bieżącym katalogu w pliku o nazwie lista.txt, tworzymy przy następująco: ls / > lista.txt. Przeliczenia ilości katalogów dokonamy przy pomocy polecenia wc z przekierowaniem strumienia. Komenda pozwalająca na to jest postaci: wc -l < cat lista.txt

  2. Wyszukania katalogów i plików z nazwą zawierającą literę y możemy dokonać korzystając z polecenia grep i połączenia strumienia danych. Komenda pozwalająca to działanie to: ls | grep y. Innym sposobem wykonania tego punktu jest skorzystanie z komendy find.

Ćwiczenie 3

Do katalogu domowego przechodzimy przy pomocy polecenia cd ~. Poleceniem pwd upewniamy się że tak nastąpiło. Wyświetlenie wszystkich plików dokonujemy korzystając z polecenia ls z parametrem -a.

Do katalogu domowego najłatwiej powrócić korzystając z polecenia cd ~. Katalog test tworzymy poleceniem mkdir test. Plik test.txt tworzymy komendą touch test.txt. Zmianę nazwy dokonujemy dzięki poleceniu vm test.txt test2.txt. Plik kopiujemy następnie przy pomocy komendy cp test2.txt test1.txt. Plik test2.txt usuniemy poleceniem rm test2.txt, podobnie czynimy z plikiem test1.txt czyli usuwamy go dzięki komendzie rm test1.txt. Z katalogu wyjdziemy poleceniem cd .. a sam katalog test usuniemy poleceniem rmdir test.

Polecenie to można wykonać w dwóch etapach: pierwszym zmieniamy tylko użytkownika przy pomocy komendy chown (chown root testowy.txt) a następnie grupę do której należy przy pomocy polecenia chgrp (chgrp root testowy.txt). Można też wszystko wykonać przy pomocy jednego polecenia chown (chown root.root testowy.txt)

Wyszukania plików zawierających słowo bash w nazwie dokonamy przy pomocy polecenia find: find "bash"

Ćwiczenie 4

Problemy, które mamy tutaj do rozwiązania są dokładnie opisane w treści rozdziału. Informację o tym kim jesteśmy dla systemu uzyskujemy przy pomocy polecenia whoami. Informację o grupach dzięki komendzie groups. Natomiast informację o grupach mamy dzięki programowi id.


Wyszukiwarka

Podobne podstrony:
Metody projektowania 1 podstawowa wersja
linuks podstawy VXM26KKC7OQQLCOFDOZM63VVKLAH2EZ5A2RH5SI
Podstawy zarządzania II - wersja mini, Politechnika Lubelska, I SEMESTR, Podstawy Zarządzania
wersja podstawowa bibliografia wiedza o sztuce
Test sprawdzający Pieniądze i temperatura wersja A +6a, gimnazjum i podstawówka, gimnazjum, polak, m
CHEMIA LABORATORIUM SPRAWOZDANIE Działanie podstawowych zasad i kwasów na metale wersja 2
Mikrobiologia opracowanie na podstawie części II Skryptu WAM wersja ostateczna wreszcie kurna!!! , Z
Podstawy Linuksa?DORA
Podstawy zarządzania I - wersja mini, Politechnika Lubelska, I SEMESTR, Podstawy Zarządzania
podstawz maj wersja poprawiona
Podstawy Programowania Wersja Rozszerzona
podstawy echo wady serca wersja poprawiona i uzupelniona
Rozwinięta wersja sylab. Teoretyczne podstawy
Komendy I Podstawy Linuksa
Podstawy Mechaniki i Konstrukcji Maszyn (Projekt 1 wersja 1)
Niepewnosci pomiaru wersja podstawowa id 319237
komendy i podstawy linuksa CCT26YX3GVFSMOWZ6TPPCRVRX36M5AWU6Q7U66Q

więcej podobnych podstron