W tym krótkim felietonie chciałbym opisać kilka sztuczek, jakich możemy dokonać używając linuksowego terminala. Zapraszam do czytania i komentowania.
Spis treści:
- Potoki FIFO
- Montowanie obrazów ISO
- Nagrywanie płyt CD
- Tworzenie Ramdysku
- Odczyt temperatury dysku twardego firmy Hitachi
- Zakończenie
1. Potoki FIFO
Czym jest potok FIFO? Przede wszystkim FIFO oznacza First In First Out, tzn. dane, które wejdą do potoku (czy też bufora etc.) pierwsze – wyjdą z niego pierwsze. Jest to całkiem odmienne podejście w stosunku do LIFO – Last In First Out, gdzie dane wchodzące jako pierwsze, wydostają się jako ostatnie. LIFO to tzw. stos (stack) i ten typ schedulera jest stosowany przy kolejkowaniu procesów przez jądro Linuksa. FIFO to tzw. kolejka (queue). Czym jednak jest potok? Potok to jeden z możliwych sposobów komunikacji międzyprocesowej w systemach UNIX-owych.
Potok nie jest czymś zarezerwowanym dla procesów tworzonych przez jądro. Z potoków możemy korzystać my sami dla uruchamianych przez siebie procesów. Jak utworzyć nowy potok FIFO? Możemy to zrobić na dwa sposoby. Pierwszy to użycie programu do tworzenia FIFO:
mkfifo [nazwa potoku]
Drugi sposób to użycie programu do tworzenia potoków różnych typów:
mknode [nazwa potoku] p
gdzie p oznacza potok FIFO. To oznaczenie jest stosowane nie tylko w tym programie, ale w większości programów, które operują na potokach FIFO. Przykładem niech będą dwa programy – find oraz ls:
find / -type p
/dev/initctl
/dev/.static/dev/xconsole
/dev/.initramfs/usplash_outfifo
/dev/.initramfs/usplash_fifo
ls -l /dev/initctl
prw——- 1 root root 0 2008-08-31 15:59 /dev/initctl
Potokami możemy przesyłać przeróżne dane. Najczęściej stosuje się je do przesyłania danych tekstowych. Chcąc wykorzystać potok FIFO w ten sposób powinniśmy otworzyć dwa terminale, w pierwszym wprowadzić komendę
cat > [nazwa utworzonego potoku]
a w drugim
cat [nazwa tego samego potoku]
Spowoduje to wyświetlanie na drugim terminalu tekstu, który wpiszemy na pierwszym. Jeśli chcemy zakończyć wprowadzanie danych tekstowych – należy wcisnąć jednocześnie klawisze Control oraz D.
Potoki można wykorzystać jednak w mniej banalny sposób. Założmy, że korzystamy z wieloużytkownikowego komputera, którego nie jesteśmy administratorem. Z racji tego, iż użytkownicy trzymają na nim swoje prywatne dane – ustawione są restrykcyjne atrybuty dla plików, np. 700 (rwx — —). Może jednak zaistnieć sytuacja, iż będziemy chcieli podzielić się z jakąś osobą pewnym plikiem. Z racji, że jest to plik prywatny – nie będziemy ustawiać uprawnień takich, by udostępniać ten plik wszystkim użytkownikom. Nie możemy przydzielić pliku do grupy, gdyż osoba, której chcemy wysłać ten plik należy do innej grupy. Nie możemy również dodać tej osoby do swej grupy, gdyż nie jesteśmy administratorem. Co zrobić w tym przypadku? Wystarczy utworzyć potok, ustawić mu atrybuty umożliwiające dostęp do niego innym użytkownikom, poprosić znajomego, by włączył sobie nasłuchawnie na ten potok i po prostu przesłać plik przez ten potok, po czym skasować potok. Nikt nic nie widział, nikt nic nie wie. Bo nikt nie zdążył. Przykład takiego użycia prezentuje poniższy screenshot:
2. Montowanie obrazów ISO
Montowanie obrazów ISO jest bardzo ważną funkcją. Nie tylko dla tych, którzy chcą sprawdzić, czy pobrany obraz ISO nowej dystrybucji GNU/Linuksa jest poprawny. Niektórzy traktują po prostu obrazy ISO jak archiwa tar. Większość z tych ludzi korzysta z programów takich jak np. IsoMaster czy G-Mount:
To jednak nie prawda, iż obrazy można montować jedynie przy pomocy programów z GUI. Ba! Nie trzeba nawet instalować żadnych aplikacji, bo posiadamy narzędzie do montowania obrazów ISO domyślnie w systemie.
Jeśli chcemy zamontować obraz ISO, wystarczy, że z uprawnieniami administratora użyjemy komendy
losetup /dev/loop0 [ścieżka do obrazu]
mkdir [nazwa folderu, w którym zamontujemy obraz]
mount /dev/loop0 [folder do zamontowania obrazu]
jak na zdjęciu
3. Nagrywanie płyt CD
Mylą się ci, którzy sądzą, że płyty CD można nagrywać jedynie z wykorzystaniem GUI. Istnieją dwa wspaniałe narzędzia, które pozwalają zastąpić zasobożerne K3B czy inne GnomeBakery. Te narzędzia to mkisofs oraz wodim. Wodim to aplikacja, która nagrywa obrazy płyt na nośniki CD. Mkisofs (MaKe ISO FileSystem) to aplikacja, która takie obrazy tworzy. Jak więc zatem się domyślacie – w pierwszej kolejności będziemy musieli utworzyć obraz płyty.
W dowolnym miejscu dysku twardego należy utworzyć sobie katalog o dowolnej nazwie. Do tego katalogu trzeba wrzucić wszystkie dane, które chcemy nagrać na płytę. Następnie, jeśli przenosiliśmy pliki przy użyciu GUI, uruchamiamy terminal i wpisujemy komendę:
mkisofs -R -l [nazwa folderu] > [nazwa obrazu].iso
Nie musimy wchodzić do folderu i wskazywać wszystkie pliki – wskazany przez nas katalog będzie katalogiem głównym (root) obrazu płyty. Po utworzeniu obrazu możemy przejść do kolejnego kroku. Dla wielu nie będzie to jednak nagrywanie płyty. Część Czytelników zna urządzenia odpowiadające ich napędom optycznym, jednak nie wszyscy. Nie jest to jednak problem, gdyż Wodim umożliwia przeskanowanie napędów. Wystarczy wpisać w terminalu komendę
wodim --scanbus
by ujrzeć urządzenia odpowiadające naszym napędom w komputerze.
Interesuje nas pierwsza kolumna. W moim przypadku w miejsce urządzenia mogę wpisać 4,1,0. Można podać także lokalizację urządzenia, np. /dev/cdrw – wodim poradzi sobie z takimi danymi wejściowymi. Możemy przejść do kolejnego etapu – nagrywania.
wodim -v dev="[urządzenie]" speed=[prędkość] [obraz iso]
Prędkość to argument opcjonalny. Chodzi oczywiście o prędkość nagrywania płyty, np. dla 32x wpisujemy wartość 32. Jeśli musimy użyć opcji overburningu (nagrania więcej danych niż teoretycznie mieści płyta), podajemy w komendzie argument
--overburn
Po wydaniu polecenia oczekujemy na zakończenie nagrywania.
4. Tworzenie Ramdysku.
Czym jest ramdysk? Wikipedia podaje:
Ramdysk to obszar komputerowej pamięci RAM, który jest wykorzystywany w roli pamięci dyskowej. (…) Jednakże dane przechowywane w ramdyskach w przypadku odłączenia lub awarii zasilania są bezpowrotnie tracone, ponieważ umieszczone są w zwyczajnej, ulotnej pamięci RAM. (…) Jednak są one doskonałym miejscem do przechowywania tymczasowych danych lub zdekompresowanych programów w krótkich okresach czasu.
Jak więc możemy przeczytać – ramdysk jest idealnym miejscem do przechowywania tymczasowych danych. W przypadku potrzeby ich odczytania – docenimy ramdysk za szybkość odczytu. Ramdysk tworzymy wpisując poniższą komendę do terminala, z poziomu administratora:
mkdir /mnt/[nazwa folderu ramdysku]
mount -t ramfs /dev/ram0 /mnt/[nazwa folderu ramdysku]
Po wydaniu tej komendy ramdysk jest gotowy do pracy. Ten typ ramdysku nie ma zdefiniowanej wielkości, zatem będzie rozszerzał się do dowolnej wielkości (niczym plik wymiany w jedynym słusznym systemie), ograniczonej wielkością pamięci RAM.
Żeby udowodnić słuszność tworzenia ramdysków pokażę test szybkości, który wykonałem podczas normalnej pracy systemu, tzn. podczas przeglądania Sieci, korzystania z komunikatora, słuchania muzyki etc. :
Jak doskonale widzimy – ramdysk ma znaczną przewagę w szybkości odczytu, w stosunku do dysku twardego. Oczywiście w zależności od obciążenia te wartości się zmieniają. Jednak u mnie (RAM DDRII 800MHz NoName vs. Hitachi SATAII) różnica jest zawsze trzy, czterokrotna. Wartości odczytu danych są znacznie większe tuż po uruchomieniu systemu, gdy mało procesów odwołuje się do dysku i pamięci RAM.
Warto jednak dodać, że jeśli chodzi o cache, to zarówno pamięć RAM, jak i dysk twardy, osiągają podobną wydajność. Wikipedia podaje tą informację:
Wydajna pamięć podręczna dysków zapewniana przez system operacyjny najczęściej niweluje korzyści z posiadania ramdysku; pamięć podręczna dysku spełnia podobną rolę (szybki dostęp do danych normalnie przechowywanych na dysku) bez pewnych wad ramdysków (utrata danych przy awarii zasialania, statyczny rozmiar, itp.).
Nie zapominajmy jednak, że cache dysku to obecnie najczęściej 16 MB, co jest niczym w porównaniu do wielkości pamięci RAM, którą możemy wykorzystać. Bo kto, z nowym komputerem, wykorzystuje w całości te 2, 4 GB pamięci? Graficy, gracze. Ale do zwykłych domowych zastosowań to bardzo dużo, dlatego warto tę pamięć wykorzystywać. Druga sprawa dotyczy tego, że nasz ramdysk nie ma statycznego rozmiaru, co jest jego zaletą.
Natomiast test cache pamięci RAM i dysku prezentuje się u mnie następująco:

5. Odczyt temperatury dysku twardego firmy Hitachi.
Użyty przeze mnie – do testowania szybkości odczytu pamięci RAM i dysku – program hdparm ma znacznie większą funkcjonalność. Jedną z nich jest możliwość odczytania temperatury dysków twardych firmy Hitachi. Dokonujemy tego poprzez wpisanie do terminala komendy
hdparm -H [nazwa urządzenia dysku]
z poziomu administratora, np.
hdparm -H /dev/sda

6. Zakończenie
Mam nadzieję, że skorzystacie z wymienionych powyżej sztuczek.
Chciałbym pozdrowić Nulciębonzo, barteksa, Hazardiusa, Kamila i wszystkich moich znajomych. Zapraszam na moją stronę domową, gdzie za niedługo ten artykuł pojawi się w wersji PDF do pobrania, tak jak wszystkie moje artykuły opublikowane na JakimLinuksie i nie tylko.

JakiLinux









Chyba na odwrót.
Ad 1. Zamiast kombinować z potokami, do przesylania plików (co i tak nie zadziała, bo jak już wcześniej wspomniałeś główny katalog ma uprawnienia 700) nie lepiej poprostu skopiować plik do /tmp?
Ad 3. IMHO znacznie łatwiejszy i dający więcej możliwości jest BashBurn.
Ad. Ad. 1 [ ;) ]
Potok jest dostępny w trakcie przesyłania. A plik może chwilę "poleżeć". Może się załapać na migawkę do archiwizacji, albo na jakiegoś "szybkiego" użytkownika monitorującego stan /tmp (naprawdę, są tacy…).
Paranoia is your friend. ;)
gpg and openssl are your friends too.
Potok tez mozna zlapac. Co bedzie jak ktos go zauwazy i tez zrobi cat na niego?
a nie lepiej po prostu wykorzystac mozliwosci dawane przez ACL?
Nie wszedzie sie da/nie kazdy o tym wie.
A k3b i gnomebaker to tylko nakladki GUI na wodima i mkisofs…
"LIFO – Last In First Out, gdzie dane wchodzące jako pierwsze, wydostają się jako ostatnie."
"Chyba na odwrót."
LIFO: kładę 1, kładę 2, kładę 3
wygląda to tak:
3
2
1
Gdy pobieram – pobieram 3, bo to stos. Gdy chcę pobrać 1 – muszę pobrać najpierw 3, a potem 2. Czyli 1 wydostaje się jako ostatnie, pomimo, że było położone jako pierwsze.
Prawda?
Prawda. Jakoś nie przyszło mi wtedy do głowy, że "pierwsze na wejściu, ostatnie na wyjściu" to inaczej "ostatnie na wejściu, pierwsze na wyjściu" :)
Montowanie obrazu ISO można zrobić bez konieczności wywoływania losetup:
<code>mount -o loop obraz.iso punkt_montowania</code>
Ale po co kombinować z montowaniem. Można wywołać
<code>mount plik.iso /folder_do_wrzucenia -o loop</code>
i już masz to (jak wyższy powiedział ;)). Potwierdzam!
Z temperaturą dysku nie lepiej trochę ogólniej np:
smartctl -A [nazwa urządzenia dysku] | awk '{if($1==194) print $10}'
To powinno zadziałać dla wszystkich dysków ATA.
jest jeszcze hddtemp /dev/dysk
Dzięki za artykuł!
Może to troszkę naiwne pytanie, ale jak to jest z tym ramdiskiem – trzeba chyba skonfigurować jakoś system, żeby zapisywał pliki tymczasowe właśnie tam, prawda? Da się to zrobić w jednym miejscu, czy aplikacja musi wspierać taką możliwość w konfiguracji? Przydało by się uzupełnić artykuł o jakiś przyklad jak skłonić system by z niego korzystał do plików tymczasowych, albo, jeśli to się "dzieje samo" (chociaż nie sądzę), dodać taki komentarz.
Dodaj sobie wpis do /etc/fstab, żeby w /tmp montowało ramdysk. Żadna filozofia.
Tia, zupełnie żadna… Wiesz, to, że TY potrafisz to zrobić to wcale nie znaczy, że każdy potrafi i dla każdego to jest tak oczywiste.
Oczywiście to nie jest wcale specjalnie trudne, ale weź pod uwagę, że być może przeczyta to osoba dla której Internet to ten lisek na pulpicie ;)
dane składowane w ramfs nigdy nie są swapowane, nie da się też ograniczyć jego rozmiaru, więc dowolny użytkownik mógłby sparaliżować system, lepiej użyć tmpfs, wystarczy dodać do fstab linijkę:
none /tmp tmpfs defaults 0 0
domyślnie będzie użyte nie więcej niż połowa dostępnej pamięci
Co do temperatury dysków, polecam hddtemp. Czyta wszystkie.
co do ramfs, problem jest taki że może zawiesić system gdy się za dużo do niego wrzuci (brak kontroli rozmiaru obrazu).
lepiej użyć
mount tmp /_katalog_ -t tmpfs -o size=_wielkość_w_kb
oraz odnośnie bloków (?) /dev/ram?
można je normalnie formatować na ext2, a potem robić z nich dumpy, czy ponownie wgrywać do ramu. ich rozmiar i ilość określa się przy kompilacji kernela
wyrabiasz się b.YISk z pisaniem artykułów. Patrząc na ten i poprzednie ten jest najlepszy. Dzieki za pozdrowienia.
Co do konsoli mogłes dodac cos o konfiguracji samego terminala,jego upiekszania itp (ludziom sie to podoba :))
b.YISk: zaleta ramdisk to glownie czas dostepu, a nie predkosc zapisu i odczytu.
Cos wolny masz zapis do tego ramdisk.
# hdparm -Tt /dev/mapper/dumps
/dev/mapper/dumps:
Timing cached reads: 4002 MB in 2.00 seconds = 2004.91 MB/sec
Timing buffered disk reads: 1284 MB in 3.00 seconds = 427.57 MB/sec
oczywiscie odczyt a nie zapis.
"Cos wolny masz zapis do tego ramdisk."
Gdy mam małe obciążenie komputera to jest oczywiście szybszy. A nie dość, że był zamontowany to jeszcze obciążony – wyniki są inne.
"LIFO to tzw. stos (stack) i ten typ schedulera jest stosowany przy kolejkowaniu procesów przez jądro Linuksa. "
To zdanie chyba troche nie ma sensu.
scheduler == (pl) planista.
"A w tym wypadku, to jak juz to ten sposob kolejkowania wykorzystywany jest przez planiste jdra podczas przydzialu czasu procesora dla procesow". Chociaz czy jest to LIFO to nie bylbym taki pewien… Moze jakas referencja do zrodla?
Mala errata. Ostatnie zdanie powinno wygladac:
A w tym wypadku, to jak juz to: "ten sposob kolejkowania wykorzystywany jest przez planiste jadra podczas przydzialu czasu procesora dla procesow”. Chociaz czy jest to LIFO to nie bylbym taki pewien… Moze jakas referencja do zrodla?
Witam
jako że nie mam zbytnio czasu i jestem w pracy, to chciał bym podzielić się swoim rozwiązaniem do przesyłania plików.Nie jest to nic odkrywczego,ale może się komuś przyda:
tar -czvf – katalog/ | ssh user@server 'cat > plik.tar.gz';
ssh user@server 'cat plik.tzr.gz' | tar -xzv
myślę że można podobnie zrobić z poleceniem dd do robienia kopii dysku.
Pozdrawiam
Kamil
Chyba łatwiej użyć scp:
scp -Cr katalog user@serwer:/katalog_docelowy
Parametry oznaczają kompresję i rekurencję – tak żeby był to odpowiednik tego powyżej. W sieci lokalnej raczej kompresja nie ma sensu :)
To nie to samo, tar jak dasz odpowiednie przełączniki zachowa ci linki i prawa dostępu. Z tego co wiem scp tego nie potrafi
Z mana:
[code]-p Chroni czasy modyfikacji, dostępu i prawa oryginalnego pliku.[/code]
mkisofs opcje | wodim opcje
jaka jest różnica między tmpfs i ramfs?
ZTPC ramfs jest tylko przykładem, jak można zrobić system wirtualny system plików trzymany w pamięci. Odpowiednim, dorosłym systemem RAM-owym jest tmpfs używany np. w Ubuntu do /var/run itp. Żeby mieć na stałe swój kawałek "dysku" w pamięci można do fstab dodać wpis:
tmpfs /media/Blyskawica tmpfs rw,uid=TWOJ_UID 0 0
Oczywiście zawartość takiego ramdysku znika po zamknięciu systemu.
"W tym krótkim felietonie" Oh wybacz. Tak, zaraz będzie, że się czepiam, że koleś odwalił kawał dobrej roboty, a tu tylko krytyka. Och nie, to naprawdę bardzo dobry artykuł, świetny tekst. Tylko, że to nie jest felieton tylko poradnik :) Naprawdę, Państwa wpisy czytają też nauczyciele, profesorowie, pisarze ;)
Przepraszam. Przyznaję się bez bicia, że całkowicie nie rozróżniam tego czym jest felieton, poradnik etc.
Oby wiecej takich poradnikow. Sam czesto przekopuje siec za takimi kruczkami w terminalu dla wlasnej satysfakcji, wprawdzie czesto takie sztuczki sluza mi do jednorazowej zabawy i je wkrotce zapominam ale zawsze to jakas odmiana niz klikanie w okienkach.
Zaraz, zaraz. Nie, dobrze napisałem.
LIFO: kładę proces 1, kładę proces 2, kładę proces 3. Wygląda to tak:
3
2
1
Pierwszy położyłem 1, a pobiorę jako pierwszą wartość 3, gdyż jest to stos.
W FIFO pobiera się wartości z dołu, gdyż jest to kolejka, czyli nie masz racji. Jednak zakręciłeś mnie :)