Ostatnio natknąłem się na niektóre polecenia linuksowe podczas logowania do witryny klienta, aby pobrać plik dziennika aktywności, a także studiuje niektóre z typów plików linuksowych, i proste polecenie, aby wiedzieć, co jest typy plików w systemie operacyjnym Linux.
Linux używa czterech podstawowych typów plików:
- zwykłe pliki
- katalogi
- dowiązania symboliczne
- pliki blokowe i pliki urządzeń znakowych
Typ pliku można określić wydając polecenie ls -l i czytając pierwszy znak każdego wiersza wyjścia.
Typowe wyjście polecenia ls jest następujące:
$ ls -l
total 8
-rw-r-r- 1 root root 22 Oct 6 15:33 anormalfile
brw-rw– 2 root disk 41, 0 May 5 1998 blockdev
crw-rw-rw- 2 root root 5, 0 May 5 1998 characterdev
drwxr-xr-x 2 root 4096 Oct 6 15:33 subdir
lrwxrwxrwx 1 root root 11 Oct 6 15:35 symbolic -> anormalfile
Pliki ordynarne zaczynają się od myślnika (-), katalogi zaczynają się od d, dowiązania symboliczne zaczynają się od znaku l, urządzenia blokowe są poprzedzone znakiem b, a urządzenia znakowe zaczynają się od litery c.
Zwykłe pliki
Zwykły plik może składać się z dowolnego rodzaju danych, w tym programów wykonywalnych. Większość plików w systemie plików Linux są tego typu.
Katalogi
Katalog jest plikiem, który zawiera inne pliki i katalogi, i zapewnia wskaźniki do nich.
Wykonuje podobną funkcję do folderu w szafce na dokumenty, w tym, że umożliwia grupowanie powiązanych plików w zorganizowany sposób. Jednakże, podczas gdy foldery mogą normalnie zawierać tylko pliki, katalogi mogą zawierać dodatkowe katalogi, często określane jako podkatalogi.
Dowiązania symboliczne
Dowiązanie symboliczne – lub miękkie – wskazuje na nazwę i lokalizację całkowicie oddzielnego pliku. Kiedy więc otwierasz, kopiujesz, przenosisz lub w inny sposób odwołujesz się do łącza, operacja jest w rzeczywistości wykonywana na pliku, do którego się odwołujesz. To rozróżnienie jest zazwyczaj niewidoczne dla użytkownika. Jeśli plik, do którego się odwołujemy, zostanie usunięty lub zostanie zmieniona jego nazwa, łącze zostanie przerwane i pojawi się błąd, jeśli spróbujesz go otworzyć.
Możesz również tworzyć twarde łącza. Twarde łącze wskazuje na rzeczywiste dane w pliku w dokładnie taki sam sposób, jak zwykły plik. Dlatego, poza nazwą, nie ma żadnej różnicy między oryginalnym plikiem a twardym łączem, które wskazuje na te same dane, i oba mogą być traktowane jako zwykłe pliki. Twarde łącze można odróżnić od każdego innego zwykłego pliku tylko na podstawie liczby łączy, jakie posiada każdy z nich. Liczba dowiązań jest wyświetlana w drugim polu listingu ls -l. Jeśli ta liczba jest większa od jednego, to wiadomo, że istnieją dodatkowe twarde łącza do danych.
Pliki urządzeń
Wszystkie urządzenia fizyczne używane w systemie Linux są reprezentowane przez pliki urządzeń.
Pliki urządzeń mogą być klasyfikowane jako specjalne znakowe lub specjalne blokowe. Pliki specjalne znaków reprezentują urządzenia, które współdziałają z Linuksem na zasadzie znak po znaku, lub szeregowo. Drukarki i terminale są przykładami tego typu urządzeń. Pliki specjalne blokowe reprezentują urządzenia takie jak dyski twarde lub dyskietki i CD-ROM-y, które współpracują z Linuksem przy użyciu bloków danych.
Wszystkie pliki urządzeń znajdują się w katalogu /dev – na przykład plik związany z pierwszym napędem dyskietek systemu to /dev/fd0.
Pliki urządzeń są niezwykle potężne, ponieważ umożliwiają użytkownikom dostęp do urządzeń sprzętowych, takich jak napędy dysków, modemy i drukarki, tak jakby były to pliki danych. Dlatego można łatwo przenosić, kopiować i przesyłać dane między takimi urządzeniami, często bez konieczności używania specjalnych poleceń lub składni.
Nazwy plików i nazwy ścieżek
Każdy plik ma przypisaną nazwę pliku, która może mieć długość do 256 znaków. Nazwa ta może składać się z mieszaniny wielkich i małych liter, cyfr i niektórych znaków interpunkcyjnych, takich jak kropka, myślnik lub podkreślenie.
Niektórych znaków nie można używać w nazwach plików. Na przykład, nie można używać znaków reprezentujących separator pól – takich jak przecinek – ani innych znaków specjalnych, które mają szczególne znaczenie dla powłoki. Znaki specjalne, których nie można używać to
! @ # $ % ^ & * ( ) { } ’ ” \ / | ; < > ’
Nazwy ścieżek
Można nawigować między katalogami w wierszu poleceń przy użyciu nazw ścieżek. Aby używać nazw ścieżek, musisz zrozumieć strukturę katalogów w systemie plików Linuksa. Najwyższym poziomem katalogu w systemie plików Linux jest katalog główny, który jest reprezentowany przez ukośnik (/). Pod katalogiem głównym znajdują się katalogi najwyższego poziomu, po których następuje jeden lub więcej poziomów podkatalogów.
Struktura plików w systemie plików Linuksa
Możesz poruszać się między katalogami, używając względnych lub bezwzględnych nazw ścieżek.
Względna nazwa ścieżki zaczyna się od bieżącego katalogu. Na przykład, jeśli chcesz przejść do katalogu wydatki z katalogu domowego, wpiszesz
cd wydatki
Nazwy względne mogą zaczynać się od nazwy pliku lub katalogu, lub od symbolicznego odwołania do bieżącego katalogu (.) lub jego katalogu nadrzędnego (..), ale nigdy z ukośnikiem w przód.
Prosty przykład systemu plików w systemie Linux
Bezwzględna nazwa ścieżki pokazuje pełną nazwę ścieżki od katalogu głównego (/). Na przykład następujące polecenie pozwala przejść z bieżącego katalogu bezpośrednio do podkatalogu applic w katalogu usr, który znajduje się pod katalogiem głównym:
cd /usr/applic
Inody, bloki i pliki specjalne
Inody
Każdy plik ma przypisany unikalny numer inode. Kod inode jest strukturą, która określa lokalizację pliku i jego atrybuty. Numer inode pliku można sprawdzić za pomocą opcji -i w poleceniu ls. Możesz zobaczyć informacje, które zawiera inode pliku używając składni stat filename. To wyjście polecenia (stat results) wyświetla informacje związane z inode pliku „results”.
$ stat results
Plik: „results”
Rozmiar: 8
Typ pliku: Regular file
Mode: (0644/-rw-r–r–)
Uid: ( 0/ root)
Gid: ( 0/ root)
Device: 3,7 Inode: 123256 Links: 1
Access: Tue Jul 25 16:45:00 2000 (00072.18:31:07)
Modify: Thu Jul 20 12:35:20 2000 (00077.22:40:47)
Change: Thu Jul 20 12:35:20 2000 (00077.22:40:47)
W tym przykładzie niektóre z wyświetlanych atrybutów obejmują typ pliku, rozmiar pliku, identyfikator użytkownika (UID) właściciela, liczbę powiązanych z nim twardych łączy oraz czasy utworzenia, dostępu i modyfikacji pliku.
Węzeł inode nie przechowuje nazwy pliku. Nazwy plików są przechowywane w katalogach z przypisanymi im numerami inode. W przykładzie polecenia stat nazwa pliku jest uzyskiwana z wprowadzonego parametru filename.
Bloki
W systemie plików systemu Linux pliki są przechowywane w blokach, które są segmentami przestrzeni dyskowej o identycznym rozmiarze. Ogólnie rzecz biorąc, rozmiar bloku waha się od 512 bajtów do 32 KB, w zależności od instalacji systemu Linux. Maksymalny rozmiar pliku zależy od rozmiaru bloku używanego w systemie plików. Na przykład maksymalny rozmiar pliku dla systemu plików ext2 wynosi 2 GB, jeśli używa on bloków 512-bajtowych.
Systemy dyskowe pobierają dane w kawałkach wielkości bloków, więc im większy rozmiar bloku, tym wydajniejszy dostęp. Problem z tworzeniem dużych bloków polega na tym, że mogą one marnować miejsce na dysku. Na przykład, jeśli rozmiar bloku wynosi 4 KB, a większość plików zawiera tylko kilka bajtów danych, większość z 4096 bajtów przestrzeni dyskowej jest marnowana dla każdego pliku. Jeśli jednak rozmiary bloków będą małe, dostęp do dysku będzie stosunkowo mniej wydajny.
Niektóre polecenia, takie jak df, wyświetlają informacje o dysku w blokach o rozmiarze 1 KB, nawet jeśli instalacja przechowuje pliki w blokach o innym rozmiarze. Prostym sposobem na sprawdzenie rozmiaru bloków w systemie jest użycie polecenia du do wyświetlenia wykorzystania dysku. W tym przykładzie wyświetlane jest użycie dysku dla wszystkich plików zaczynających się od „m”.
$ du -h m*
36k mail
4.0k mail.rc
12k mailcap
12k mailcap.vga
4.0k man.config
4.0k mc.global
148k midi
40k mime-magic
104k mime-magic.dat
8.0k mime.types
4.0k minicom.users
0 motd
4.0k mtab
W tym przykładzie wyjście polecenia du wyświetla rozmiary plików na dysku w przyrostach rozmiaru bloku, który w tym przypadku wynosi 4,0 KB. Jednym z wyjątków od tej reguły jest sytuacja, gdy wyświetlane jest zero, co oznacza, że plik jest całkowicie pusty.
Pliki specjalne
Oprócz innych typów plików system Linux korzysta z plików specjalnych, które są plikami zdefiniowanymi przez system i wykonują unikalne funkcje, gdy uzyskuje się do nich dostęp.
Pliki specjalne i ich funkcje
Na przykład, jeśli musisz pozbyć się niechcianych danych wyjściowych z polecenia, możesz przekierować je do pliku /dev/null. W tym przykładzie wszelkie błędy wygenerowane przez polecenie find są przekierowywane ze stderr do pliku /dev/null.
$ find / -n myfile 2> /dev/null