<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title>Thirdside. Trzecia strona Księżyca</title><link>http://thirdside.jogger.pl/</link><description>Wpisy z dziennika internetowego Jogger, wspomaganego przez Jabbera</description><lastBuildDate>Thu, 17 May 2012 15:35:36 +0200</lastBuildDate><generator>JoggerPL</generator><item><title>Owly</title><link>http://thirdside.jogger.pl/2011/10/12/owly-premiera/</link><description>Oto moja pierwsza relatywnie udana próba stworzenia prostej grafiki. Przedstawiam Owly - sówkę kodówkę. Created with Inkscape. Wyklikanie sobie własnej kreatury poprawia nastrój i podnosi jakość życia. Polecam!

</description><pubDate>Wed, 12 Oct 2011 19:55:11 +0200</pubDate><guid>http://thirdside.jogger.pl/2011/10/12/owly-premiera/</guid><category>kwadratowe</category><category>trójkątne</category></item><item><title>Power in Lisp by me</title><link>http://thirdside.jogger.pl/2011/06/18/power-in-lisp-by-me/</link><description>{geshi lang=&quot;lisp&quot;}(defun power (base exponent) (if (eql exponent 0) 1 (* base (power base (- exponent 1))))) ; ha! umiem :D{/geshi}</description><pubDate>Sat, 18 Jun 2011 09:32:37 +0200</pubDate><guid>http://thirdside.jogger.pl/2011/06/18/power-in-lisp-by-me/</guid><category>kwadratowe</category></item><item><title>Tablica elementów typu ból</title><link>http://thirdside.jogger.pl/2011/01/20/tablica-elementow-typu-bol/</link><description>
Zainspirowane przez kronikę-paranoika

</description><pubDate>Thu, 20 Jan 2011 23:26:22 +0100</pubDate><guid>http://thirdside.jogger.pl/2011/01/20/tablica-elementow-typu-bol/</guid><category>kwadratowe</category><category>bool humor ibuprofen</category></item><item><title>Linux. Powłoka, konsola, terminal i pseudoterminal</title><link>http://thirdside.jogger.pl/2011/01/04/linux-powloka-konsola-terminal-ipseudoterminal/</link><description>Powłoka systemowa
Zarówno programy napisane przez użytkownika, jak i programy systemowe są zwykle wykonywane przez interpreter poleceń. Jak każdy proces, interpreter poleceń w systemie UNIX jest procesem użytkownika. Nazywa się go powłoką (ang. shell), ponieważ otacza jądro systemu operacyjnego.[1]
Podstawową częścią systemu operacyjnego jest jądro. W systemach uniksowych pośredniczy ono pomiędzy aplikacjami a sprzętem. Użytkownik wykorzystuje aplikacje, które za pośrednictwem jądra oddziaływują na zasoby sprzętowe systemu komputerowego takie jak procesor, pamięć operacyjna czy nośniki danych.
Powłoka systemowa stanowi rodzaj interfejsu umożliwiającego użytkownikowi interakcję z programami działającymi w środowisku uruchomieniowym systemu operacyjnego. Podstawowa rola powłoki to interpretacja działań użytkownika systemu i zlecanie systemowi operacyjnemu wykonania określonych zadań w odpowiedzi na te działania. Powłoka może także stanowić swego rodzaju środowisko programistyczne, jeśli posiada wbudowany interpreter skryptów.
Powłoka systemowa może być traktowana jako pośrednik pomiędzy użytkownikiem a jądrem systemu operacyjnego.[2] Zazwyczaj jednak użytkownik komunikuje się poprzez powłokę z programami użytkowymi, a dopiero za ich pośrednictwem może wpływać na działania jądra systemu operacyjnego.

Rysunek 1. Schemat relacji
pomiędzy użytkownikiem,
systemem operacyjnym i sprzętem
Źródło: Opracowanie własne

W systemach uniksowych powłoka jest także programem. Pośredniczy pomiędzy użytkownikiem systemu operacyjnego a programami użytkowymi, programy użytkowe wykonują zaś określone zlecenia na rządanie użytkownika. Obsługa niektórych zleceń jest wbudowana w powłokę, dzięki czemu powłoka może wykonywać określone zadania samodzielnie, bez odwoływania się do programów zewnętrznych.
Terminem powłoki systemowej zwykło się nazywać programy działające w trybie tekstowym. Dla systemów uniksowych protoplastą używanych obecnie powłok systemowych jest sh - Bourne Shell, czyli Powłoka Bourne'a. Inne powłoki tekstowe, takie jak bash - Bourne Again Shell czy tcsh - TENEX C Shell, używane we współczesnych systemach, poszerzają zakres funkcjonalności powłoka Bourne'a, dzięki czemu praca w nich jest wygodniejsza.

Klasyczne powłoki systemowe

sh - Bourne Shell - dla systemów UNIX i Linux
ash - Almquist Shell - dla systemów UNIX i Linux
bash - Bourne Again Shell - dla systemów UNIX i Linux
ksh - Korn Shell - dla systemów UNIX i Linux
pdksh - Public Domain Korn Shell - dla systemów UNIX i Linux
csh - C Shell - dla systemów UNIX i Linux
tcsh - TENEX C Shell - dla systemów UNIX i Linux
zsh - Z Shell - dla systemów UNIX i Linux
command.com - dla systemu DOS
cmd.exe - dla systemu Windows
Windows PowerShell - dla systemu Windows

Rozwój środowisk graficznych, takich GNOME czy KDE sprawił, że użytkownik systemu operacyjnego wyposażonego w takie środowisko nie jest już skazany na pracę z powłoką tekstową. Środowiska graficzne lub niektóre programy działające w trybie graficznym mogą wykonywać zadania klasycznej powłoki systemowej, zatem zdarza się, że są one określane mianem graficznych powłok systemowych ale podejście takie budzi kontrowersje.

Terminal wirtualny i pseudoterminal
Terminal sprzętowy
Terminal komputerowy to urządzenie, które pozwala użytkownikowi na zdalne wykorzystanie mocy obliczeniowej komputera lub systemu komputerowego, z którym połączony jest terminal.
We wczesnych fazach rozwoju komputerów funkcje terminali pełniły dalekopisy. Umożliwiały one komunikację użytkownika z komputerami zbudowanymi na lampach elektronowych. Składały się z klawiatury i drukarki. Klawiatura służyła do wydawania komputerowi poleceń, natomiast drukarka drukowała odpowiedzi maszyny. W późniejszych generacjach komputerów rolę drukarki zaczęły pełnić monitory. Komputery były wtedy zbyt drogie i duże, a ich utrzymanie zbyt pracochłonne i kosztowne aby każdy użytkownik mógł pracować na własnym egzemplarzu. Aby umożliwić wielu użytkownikom korzystanie z mocy obliczeniowej jednego komputera wykorzystywano coraz bardziej zaawansowane terminale, które komunikowały się z komputerem w imieniu pracujących na nich użytkowników.[2]
Terminal wirtualny
We współczesnych systemach uniksowych słowem terminal (używanym zamiennie ze słowem konsola) zwykło się określać emulator terminala, nazywany też terminalem wirtualnym lub konsolą wirtualną. Podłączanie terminali sprzętowych jest nadal możliwe, Linux bowiem obsługuje takie urządzenia. W systemie Linux terminal oznaczany jest skrótem tty pochodzącym od słowa teletypewriter, oznaczającego dalekopis.
Terminal wirtualny jest emulacją terminala udostępnianą przez system operacyjny, służącą użytkownikowi do porozumiewania się z systemem w trybie tekstowym.
Terminale wirtualne często są nazywane konsolami wirtualnymi. Spotkać jendak można konwencję, która terminem konsoli pozwala nazywać tylko ten terminal, na którym zalogowany jest użytkownik root.[3]
Terminale wirtualne działają we współpracy z powłoką systemową, która pobiera wpisane przez użytkownika w terminalu dane, przetwarza je i wypisuje w terminalu wyniki działania programów lub wbudowanych poleceń. W systemach Linux wystarczy wpisać w terminalu wirtualnym (po zalogowaniu się) nazwę zainstalowanej powłoki aby rozpocząć w niej pracę. Zmiany powłoki można dokonać niemal w każdym momencie pracy w terminalu wirtualnym.
Pliki urządzeń terminali
W systemach uniksowych terminal wirtualny traktowany jest jak fizyczne urządzenie wejściowo-wyjściowe. Posiada bowiem swój plik specjalny w katalogu /dev i można się z nim komunikować używając standardowych uniksowych mechanizmów komunikaci z urządzeniami zewnętrznymi.
Katalog /dev zawiera pliki urządzeń. Są to pliki specjalne za pośrednictwem których system komunikuje się z urządzeniami takimi jak nośniki danych, urządzenia peryferyjne czy terminale wirtualne.
System Linux udostępnia użytkownikowi kilka terminali wirtualnych. W katalogu /dev znajdują się pliki tty1, tty2, tty3, itd. Odpowiadają one kolejnym terminalom wirtualnym. Plik tty odpowiada bieżącemu terminalowi, na którym w danej chwili pracuje użytkownik.
Jeśli w systemie nie skonfigurowano automatycznego uruchamiania środowiska graficznego X Window System, to po uruchomieniu systemu zgłasza się pierwsza konsola wirtualna, a użytkownik proszony jest o podanie loginu i hasła, które zostają sprawdzone przez program login. Jeśli zaś w systemie zainsalowany został X Window System, to po uruchomieniu systemu zostaje on uruchomiony na jednaj z konsol wirtualnych (zwykle na siódmej), gdzie przełączane jest sterowanie. Wówczas proces logowania odbywa się zazwyczaj za pośrednictwem graficznego okna logowania, które prosi użytkownika o podanie loginu oraz hasła i uruchamia program login w celu weryfikacji odebranych od użytkownika danych.[4]
Przełączenie między terminalami wirtualnymi
Użytkownik pracujący na systemie Linux ma do swojej dyspozycji kilka terminali wirtualnych, pomiędzy którymi może się przełączać używając odpowiednich kombinacji klawiszy. Jeśli użytkownik aktualnie pracuje w środowisku graficznym, to na terminal wirtualny o danym numerze przełączy go kombinacja klawiszy [Ctrl]+[Alt]+[F], na przykład kombinacja [Ctrl]+[Alt]+[F1] przełącza na pierwszy terminal wirtualny. Jeśli użytkownik pracuje aktualnie w środowisku tekstowym, to na terminal wirtualny o danym numerze przełączy go kombinacja klawiszy [Alt]+[F]. Aby rozpocząć pracę na danej konsoli wirtualnej należy się na niej zalogować. Na każdym terminalu wirtualnym może zalogować się inny użytkownik, ten sam użytkownik może być zalogowany na kilku terminalach równocześnie. Wszystkie utworzone w ten sposób sesje są równocześnie obsługiwane przez system operacyjny.
Mechanizm przekierowań standardowych strumieni a terminale wirtualne
Mechanizm przekierowań standardowych strumieni można wykorzystać do wysyłania informacji na wybrane terminale wirtualne. Zwykle aby to zrobić, trzeba działać z uprawnieniami superużytkownika. W systemie Debian użytkownik może w opisywany tutaj sposób wysłać tekst na te terminale, na których sam jest zalogowany. Aby przekierować strumień na terminal, na którym jest zalogowany inny użytkownik należy być zalogowanym jako root.
# echo 'Hello tty2!' &gt; /dev/tty2
Podane powyżej polecenie wyśle tekst Hello tty2! na drugi terminal wirtualny, po przełączeniu się na niego będzie odczytać wysłany tekst.
Pseudoterminal
Korzystanie z terminali wirtualnych było popularne w czasach, gdy jeszcze nie stworzono środowisk graficznych. Dzisiaj, częściej niż z terminali wirtualnych korzysta się z emulatorów wirtualnych terminali uruchamianych w oknach programów środowiska graficznego, nazywanych pseudoterminalami. Pseudoterminale stanowią jakby drugi poziom emulacji termianala sprzętowego.
Pseudoterminal jest programową emulacją terminala wirtualnego w środowisku graficznym.
Pliki urządzeń pseudoterminali
W katalogu /dev istnieją następujące pliki związane z pseudoterminalami:

ptmx - pseudoterminal multiplekser - korzystają z niego procesy, na standardowym wejściu/wyjściu których powinien znajdować się pseudoterminal, proces taki otwiera plik /dev/ptmx, co skutkuje przydzieleniem mu pierwszego wolnego pseudotermianala
pliki znajdujęce się podkatalogu pts - pseudoterminal slave, ich nazwy to odpowiadające im numery (numeracja zaczyna się od zera) - reprezentują pseudoterminale uruchamiane w środowisku graficznym, każde okno terminala, każda zakładka w oknie terminala ma przydzielony plik z katalogu /dev/pts

Podane wyżej pliki odpowiadają uniksowej konwencji komunikowania się procesu z użytkownikiem za pośrednictwem terminala, gdzie jeden plik pełni rolę urządzenia, do którego podłącza się proces, czyli urządzenia master, zaś drugi plik odpowiada terminalowi kontrolującemu procesu, czyli urządzeniu slave.[5]
Jeśli w systemie nie zainstalowano środowiska graficznego, jest zainstalowane ale nie uruchomione lub zostało uruchomione środowisko graficzne ale żaden z uruchomionych pod nim procesów nie korzysta z pseudoterminala, to katalog /dev/pts jest pusty.
Graficzne emulatory terminali
Istnieje kilka programów udostępniających emulację terminali wirtualnych w środowisku graficznym, oto niektóre z nic:

xterm - standardowy emulator terminala dla X Window
gnome-terminal - emulator terminala dla środowiska graficznego GNOME
konsole - emulator terminala środowiska graficznego KDE

Mechanizm przekierowań standardowych strumieni a pseudoterminale
Podobnie jak w przypadku terminali wirtualnych, mechanizm przekierowań standardowych strumieni można wykorzystać do wysyłania informacji na wybrane pseudoterminale.
# echo 'Hello pts0!' &gt; /dev/pts/0
Podane powyżej polecenie wyśle tekst Hello pts1! na pierwszy pseudoterminal. Oczywiście najpierw trzeba otworzyć okno graficznego emulatora terminala wirtualnego. Jeśli jest ich otwartych kilka to wiadomość pojawi się na tym, które zostało otwarte w pierszej kolejności.



A. Silberschatz, P. B. Galvin: Podstawy systemów operacyjnych, Wydawnictwa Naukowo-Techniczne, Warszawa 2001, s. 788
Wikipedia: http://pl.wikipedia.org/wiki/Terminal_komputerowy
LinuxPL.org: http://apcoln.linuxpl.org/doku.php?id=pojecie_terminala
M. Stutz: Linux. Najlepsze przepisy, Wydawnictwo Helion, Gliwice 2005, s. 61
The Linux Programmer's Guide: http://www.linuxpl.org/LPG/node102.html


</description><pubDate>Tue, 04 Jan 2011 18:59:03 +0100</pubDate><guid>http://thirdside.jogger.pl/2011/01/04/linux-powloka-konsola-terminal-ipseudoterminal/</guid><category>kwadratowe</category><category>Linux</category><category>powłoka</category><category>terminal wirtualny</category><category>pseudoterminal</category></item><item><title>Linux. Zamykanie systemu</title><link>http://thirdside.jogger.pl/2010/12/24/linux-zamykanie-systemu/</link><description>Proces zamykania systemu Linux
Zamykanie systemu jest kontrolowane przez proces init[1]. Przykładowy przebieg procesu zamykania systemu Linux może być następujący:

Wysłanie do wszystkich procesów, poza procesem init, sygnału nakazującego im zakończenie działania.
Zapisanie wszystkich buforowanych danych do systemów plików poleceniem sync.
Odmontowanie wszystkich systemów plików.
Zatrzymanie jądra systemu


Niektóre źródła podają, że po wydaniu polecenia odmontowania partycji wydane zostaje polecenie sync, na wypadek gdyby wcześniejsze operacje odmontowania systemów plików nie powiodły się. Może ono również zostać wydane przed odmontowaniem systemów plików. Odmontowanie systemów plików powinno spowodować zapisanie zawartości buforów dyskowych na fizyczne nośniki danych, jednak operacja odmontowania systemu plików może się nie powieść. Wywołanie wówczas polecenia sync umożliwia synchronizację faktycznego stanu nośników danych z informacją, jaką przechowuje o nich system.
Nieprawidłowe zamykanie systemu może spowodować uszkodzenie systemu plików. System Linux posługuje się buforowaniem danych w celu przyśpieszenia wykonywania operacji związanych z obsługą pamięci masowej. Jeśli system zostanie zatrzymany w nieodpowiedni sposób, na przykład przez odcięcie zasilania, wówczas buforowane dane nie zostaną zapisane na dysk lub na inne urządzenia pamięci masowej. W prawidłowym procesie zamykania systemu zostaje wywołanie polecenie sync powodujące zapisanie buforowanych danych do pamięci masowej.
Polecenie shutdown
shutdown - polecenie zamykające system, pozwala na jego wyłączenie lub ponowne uruchomienie
shutdown [-t sec] [-arkhncfF] czas [wiadomość]

-a użycie /etc/shutdown.allow
-t sek nakazanie procesowi init odczekania sek sekund pomiędzy wysłaniem procesom ostrzeżenia i sygnału KILL a przełączeniem systemu na inny poziom pracy
-k wysłanie komunikatów ostrzegawczych do wszystkich zalogowanych użytkowników bez wyłączania systemu ani podejmowania innych akcji
-r ponowne uruchomienie systemu
-h wyłączenie systemu
-n proces init nie jest wywoływany do wyłączenia systemu, zaś shutdown samodzielnie zabija wszystkie działające procesy, stosowanie tej opcji jest odradzane, może przynieść nieprzewidywane skutki
-f pominięcie wywołania programu fsck sprawdzającego system plików podczas przeładowania systemu
-F wymuszenie wywołania programu fsck sprawdzającego system plików podczas przeładowania systemu
-c anulowanie rozpoczętego wyłączania systemu


czas - czas po którym system zacznie być zamykany
wiadomość - wiadomość, jaka zostanie wysłana na konsole wszystkich zalogowanych użytkowników

Polecenie shutdown może wydać tylko użytkownik posiadający uprawnienia użytkownika root. Parametr czas jest obowiązkowy. Przy wydaniu polecenia shutdown bez dodatkowych parametrów, takich jak -r lub -h, system jest przełączany na poziom uruchomienia 1, czyli do trybu pojedynczego użytkownika. W tym trybie można zamknąć system wywołując polecenie halt lub zrestartować wywołując polecenie reboot. Jako czas można podać wartość now, która odpowiada zeru i powoduje natychmiastowe rozpoczęcie procesu zamykania systemu.
# shutdown now
W systemie Debian po wydaniu powyższego polecenia następuje przełączenie na poziom uruchomienia 1, a następnie użytkownik proszony jest o podanie hasła roota lub naciśnięcie kombinacji [Ctrl]+[D]. Jeśli poda hasło roota, zostaje zalogowany w trybie pojedynczego użytkownika, jeśli zaś wciśnie [Ctrl]+[D], wówczas system zostanie przełączony na poziom uruchomienia 2, czyli tryb normalnej pracy, a użytkownik będzie mógł się zalogować na wybrane przez siebie konto.
Gdy polecenie shutdown zostanie wydane, wówczas blokowane jest logowanie się użytkowników do systemu, a zalogowani użytkownicy zostają poinformowani o rozpoczęciu wyłączania systemu. Informacja ta ukazuje się na każdym terinalu wirtualnym, na którym jest zalogowany jakiś użytkownik.
Najpowszechniejszym sposobem wyłączenia systemu w trybie tekstowym jest wydanie polecenia shutdown z opcją -h, powodujące natychmiastowe rozpoczęcie procesu zamykania systemu.
# shutdown -h now
Aby zrestartować system należy posłużyć się opcją -r.
# shutdown -r now
Ustawiając wartość parametru czas inną niż now lub 0, można odroczyć w czasie rozpoczęcie procesu zamykania systemu. Jako czas można podać dodatnią liczbę całkowitą - oznaczającą liczbę minut opóźnienia lub godzinę w formacie HH:MM. Dodatkowo można także skorzytać z możliwości podania paramertu wiadomość aby wysłać informację do wszystkich zalogowanych użytkowników.
# shutdown 10 'Za dziesięć minut zamknięcie systemu w celu konserwacji sprzętu. Przerwa potrwa około dwóch godzin'
Powyższe polecenie spowoduje, że do wszystkich zalogowanych użytkowników zostanie wysłana wiadomość Za dziesięć minut zamknięcie systemu w celu konserwacji sprzętu. Przerwa potrwa około dwóch godzin, a system zostanie zamknięty za 10 minut od chwili wydania polecenia.
# shutdown 00:00 'O północy impreza. Odejdź od kompa i zatańcz z adminem!'
Powyżej zaprezentowano możliwość ustawienia czasu wyłączenia systemu na konkretną godzinę.
Nie zawsze blokowane jest logowanie się użytkowników do systemu, który oczekuje na wyłączenie. W przypadku gdy planowane wyłączenie systemu znacząco odbiega w czasie, użytkownicy mogą się logować do systemu. Także komunikaty ostrzegawcze pojawiają się na krótki czas przez zamknięciem systemu, nie zaś zaraz po wydaniu polecenia shutdown.
Opcja -k pozwala wysłać wiadomość do zalogowanych użytkowników bez faktycznego wyłączania systemu.
# shutdown -k 17:30 'Spokojnie - to tylko symulacja'
Powyższe wywołanie spowoduje, że do wszystkich zalogowanych użytkowników zostanie wysłana informacja Spokojnie - to tylko symulacja, a o godzinie 17:30 użytkownicy zostaną powiadomieni o anulowaniu planowanego wyłączenia systemu.
W przypadku oddalonego w czasie wyłączania systemu informacje ostrzegawcze o czasie jaki pozostał do zamknięcia systemu oraz określona w poleceniu wiadomość zostają wysyłane do zalogowanych użytkowników kilkukrotnie - w odpowiednich odstępach czasu aż do zamknięcia systemu.
Polecenie czasowego wyłączenia systemu można anulować przy wykorzystniu opcji -c.
# shutdown -c 'Anulowano wyłączanie systemu'
Także tutaj można skorzystać z możliwości wysłania wiadomości zalogowanym użytkownikom.
Opcja -a nakazuje poleceniu shutdown uwzględnienie wpisów w pliku /etc/shutdown.allow. Plik /ets/shutdown.allow zawiera listę użytkowników, którzy mogą wywołać polecenie shutdown. Pozwala na kotrolę dostępu użytkowników do wywołania tego polecenia przez naciśnięcie kombinacji klawiszy [Ctrl]+[Alt]+[Del]. Administrator systemu może wprowadzić ograniczenie tego dostępu poprzez edycję pliku /etc/shutdown.allow. W dystrybucji Debian, która służy mi do celów testowych, plik ten nie istnieje w konfiguracji domyślnej, należy go więc utworzyć. Aby ograniczyć dostęp użytkowników do polecenia shutdown należy wyedytować plik /etc/inittab i odnaleźć linijkę wyglądającą jak poniższa:
ca::ctrlaltdel:/sbin/shutdown -t5 -rf now
Należy sprawdzić czy do opcji wywołania polecenia shutdown dodana została opcja -a. Jeśli nie, dodanie tej opcji spowoduje, że tylko ci użytkownicy którzy występują w pliku /etc/shutdown.allow będą mogli zrestartować system naciskając kombinację [Ctrl]+[Alt]+[Del].[2]
ca::ctrlaltdel:/sbin/shutdown -t5 -a -rf now
W dystrybucji Ubuntu zrezygnowano z pliku /etc/inittab. Akcję którą wywołuje naciśnięcie [Ctrl]+[Alt]+[Del] można skonfigurować edytując plik /etc/events.d/control-alt-delete
Oczywiście zabezpiecznie to będzie nieskuteczne dla użytkowników mogących uzyskać uprawnienia roota poprzez użycie polecenia sudo. Tacy użytkownicy mogą bowiem wyedytować zarówno plik /etc/shutdown.allow jak i plik /etc/init.d (lub /etc/events.d/control-alt-delete).
Blokowanie dostępu do wywołania polecenia shutdown z linii poleceń nie ma sensu, bowiem może go wywołać tylko użytkownik z uprawnieniami roota, a taki może edytować również pliki konfiguracyjne. Jeśli użytkownik nie może uzyskać uprawnień roota, to nie może też wywołać polecenia shutdown chyba, że administrator zmieni tryb uprawnień pliku wykonywalnego tego polecenia.
Opcja -t pozwala na ustalenie czasu jaki ma upłynąć od wysłania procesom ostrzeżenia i sygnału KILL, nakazującego zakończenie działania procesów, do przełączenia systemu na inny poziom pracy.
# shutdown -h -t 2 5
Przedstawione polecenie nakazuje odczekanie dwóch sekund od wysłania procesom sygnału KILL, a przełączenia na inny poziom uruchomieniowy, przy czym wyłączanie systemu ma się rozpocząć za pięć minut od chwili wywołania polecenia.
Opcja -f nakazuje pominięcie przy następnym starcie systemu wywoływania programu fsck, który sprawdza system plików przy ponownym uruchomieniu systemu. W przypadku podania tej opcji, program shutdown tworzy plik sygnalizacyjny /fastboot. Istnienie tego pliku przy ponownym uruchomieniu systemu powoduje, że program fsck nie jest wywoływany. Plik ten powinien zostać automatycznie usunięty przy ponownym rozruchu systemu aby blokada wywołania fsck była jednorazowa.
Opcja -F wymusza wywołanie fsck przy przeładowaniu systemu. W przypadku tej opcji polecenie shutdown tworzy plik sygnalizacyjny /forcefsck. Powoduje on wywołanie programu fsck przynastępnym uruchomieniu systemu. Powinien zostać automatycznie usunięty po spełnieniu swojego zadania.
Polecenia halt, reboot i poweroff
halt - polecenie zamykające system
halt [-n] [-w] [-d] [-f] [-i] [-p]
reboot - polecenie restartujące system
reboot [-n] [-w] [-d] [-f] [-i]
poweroff - polecenie zamykające system i wyłączające komputer
poweroff [-n] [-w] [-d] [-f] [-i]

-n bez wywołania sync przed restartem lub zatrzymaniem (opcja -n implikuje -d)
-w zapisanie rekord wtmp w pliku /var/log/wtmp bez fakycznego zatrzymania lub restartu
-d bez zapisania rekordu wtmp
-f wymuszenie zatrzymania lub restartu bez wywołania shutdown (siłowe zatrzymanie lub restart)
-i wyłączenie wszystkich interfejsów sieciowych bezpośrednio przed zatrzymaniem lub restartem systemu
-p wyłączenie komputera po zatrzymaniu systemu

Polecenia halt, reboot i poweroff zapisują w pliku /var/log/wtmp, że system jest zamykany po czym nakazaują kernelowi odpowiednio zatrzymanie systemu, jego restart lub zatrzymanie systemu i wyłączenie komputera.
Nowsze wersje poleceń halt i reboot wywołują polecenie shutdown odpowiednio z flagą -h lub -r jeśli system nie znajduje się na poziomie uruchomienia 0 (wyłączenie systemu) ani 6 (restart systemu). W przeciwnym wypadku nakazuje kernelowi zatrzymanie lub restart systemu.
Polecenia poweroff i halt -p we współczesnych systemach na współczesnych komputerach działają tak samo jak polecenie halt. W każdym z tych przypadków komputer wyłączany jest automatycznie.
Trzykrotne wywołanie sync
sync - polecenie zapisujące na dysk buforowane w operacjach dyskowych dane
sync [--help] [--version]

--help wyświetlenie pomocy
--version wyświetlanie wersji programu

Istnieje stanowczo odradzana metoda wyłączania systemu przez trzykrotne wywołanie polecenia sync i wyłączenie zasilania komputera. Trzykrotne wywołanie sync ma zagwarantować zapisanie buforowanych danych na dyskach. Trzykrotne wpisanie polecenia jest metodą pochodzącą z czasów wczesnych wersji systemu Unix, wydanie polecenia sync trzy razy dawało wystarczająco dużo czasu na zapisanie buforowanych danych na dysk. Metoda ta jednak nie zakańcza prawidłowo ewentualnych procesów działających w systemie, nie następuje też odmontowanie systemu plików. Nie jest to właściwa metoda wyłączania systemu.[3]
Wywołanie init lub telinit
Do odradzanych metod wyłączania lub restartu systemu należy także wywołanie poleceń init lub telinit z podaniem poziomu rozruchowego 0 (zamknięcie systemu) lub 6 (restart systemu), telinit jest dowiązaniem symbolicznym do init.
# init 0
# telinit 0
Powyższe polecenia nakazują kernelowi przełączenie się na poziom uruchomienia 0, odpowiadający wyłączeniu systemu.
# init 6
# telinit 6
Powyższe polecenia nakazują kernelowi przełączenie się na poziom uruchomienia 6, odpowiadający restartowi systemu.
Nie są to zalecane sposoby wyłączania i restartowania systemu.


B. Ward: Jak działa Linux, Wydawnictwo Helion, Gliwice 2005, s. 77
http://www.spencerstirling.com/computergeek/shutdown.html
System Administrators' Guide http://www.linuxpl.org/SAG/x1633.html


</description><pubDate>Fri, 24 Dec 2010 13:41:04 +0100</pubDate><guid>http://thirdside.jogger.pl/2010/12/24/linux-zamykanie-systemu/</guid><category>kwadratowe</category><category>Linux</category><category>shutdown</category></item><item><title>Chwila zabawy</title><link>http://thirdside.jogger.pl/2010/12/20/chwila-zabawy/</link><description>Bawie sie Lynksem na moim nowym wirtualnym Debianie postawionym dla celow edukacyjnych. Nie moglam sobie odmowic dodania notki w trybie tekstowym. Sama radosc :D Wystapil problem z kodowaniem znakow i [delete] nie dziala tak jak bym tego chciala. Ale i tak jest fajnie.
</description><pubDate>Mon, 20 Dec 2010 22:08:40 +0100</pubDate><guid>http://thirdside.jogger.pl/2010/12/20/chwila-zabawy/</guid><category>kwadratowe</category></item><item><title>Kolorki z konsolki.
Manipulatory w C++ ustawiające właściwości tekstu wyświetlanego w pseudoterminalu</title><link>http://thirdside.jogger.pl/2009/09/16/kolorki-z-konsolki-manipulatory-w-c-ustawiajace-wlasciwosci/</link><description>Kody na kolorowość
Linuksowe pseudoterminale można zmusić do wyświetlania tekstu w określonym kolorze i formacie (podkreślony, przekreślony, etc.) za pomocą odpowiednich kodów przesyłanych na ich standardowe wejście. Zagadnienie to zostało opisane w tym oto artykule.
Przykładowy kod ustawiający właściwości wyświetlanego w pseudoterminalu tekstu może wyglądać następująco:
^[[0;35;47m
Po wysłaniu na standardowe wejście pseudoterminala spowoduje on wyświetlanie fioletowego tekstu na białym tle.
Aby przywrócić domyślne ustawienia wyświetlania tekstu można posłużyć się kodem:
^[[0;0;0m
Wyjaśnienia wymaga tu wyróżniony na fioletowo fragment kodu. Tak naprawdę jest to jeden znak, a uzyskuje się go przez wciśnięcie kombinacji klawiszy [Ctrl]+[V]+[Esc].
Sprawdzenia działania danego kodu w pseudoteminalu można dokonać przy pomocy polecenia echo:
$ echo &quot;^[[0;35;47mhello colors^[[0;0;0m&quot;
Format kodu jest najstępujący:
^[[;;m
Każdemu polu odpowiadają opisane poniżej kody.
Pole 

0 - skasowanie wszystkich ustawień wyświetlania tekstu (powrót do ustawień domyślnych),
1 - rozjaśnienie tekstu - ustawienie dla tekstu koloru jaśniejszego niż bieżący,
2 - przyciemnienie tekstu - ustawienie dla tekstu koloru ciemniejszego niż bieżący,
4 - podkreślenie tekstu,
7 - zamiana kolorów tekstu i tła,
8 - ukrycie tekstu - staje się on niewidoczny,
9 - przereślenie tekstu.

Pole 

30 - czarny,
31 - czerwony,
32 - zielony,
33 - żółty,
34 - niebieski,
35 - fioletowy,
36 - cyjan,
37 - biały

Pole 

40 - czarny,
41 - czerwony,
42 - zielony,
43 - żółty,
44 - niebieski,
45 - fioletowy,
46 - cyjan,
47 - biały


Manipulatory ustawiające właściwości tekstu
Poniżej przedstawiam własną implementację manipulatorów ustawiających opisywane właściwości tekstu wyświetlanego w pseudoterminalu. Zebrałam je w bibliotekę face_manip. Kod powstał według wskazówek zamieszczonych w Symfonii C++ Antoniego Grębosza (wydanie drugie) w rozdziale Operacje Wejścia/Wyjścia.
Podstawowymi manipulatorami są manipulatory argumentowe, ustawiające wybrane parametry. Każdemu manipulatorowi argumentowemu odpowiada manipulator bezargumentowy kasujący wszystkie parametry, jakie można ustawić za pomocą danego manipulatora argumentowego. Parametry przekazywane manipulatorom argumentowym określone są przez dwa typy wyliczeniowe attrce i cce. Pierwszy odpowiada za ustawienie dekoracji tekstu (np. podkreślenie, rozjaśnienie, etc.), drugi natomiast, za ustawienia kolorów (czcionki lub tła). Poniżej zamieszczam opis manipulatorów.
face
Manipulator ten umożliwia ustawienie wszystkich możliwych właściwości wyświetlanego tekstu.
Może być wywoływany w następujących formach:
face(attrce dekoracja, cce kolor_czcionki, cce kolor_tła)
face(attrce dekoracja, cce kolor_czcionki)
face(attrce dekoracja)
face()
Ostatnia forma wywołania kasuje ustawienia dekoracji, koloru tekstu oraz koloru tła, przywracając ustawienia domyślne. Ten sam efekt można uzyskać przy użyciu bezargumentowego manipulatora rface.
attr
Manipulator ten umożliwia ustawienie dekoracji wyświetlanego tekstu.
Może być wywoływany w następujących formach:
attr(attrce dekoracja)
attr()
Ostatnia forma wywołania kasuje ustawienia koloru tekstu oraz koloru tła, przywracając ustawienia domyślne. Ten sam efekt można uzyskać przy użyciu bezargumentowego manipulatora rattr.
color
Manipulator ten umożliwia ustawienie koloru czcionki oraz koloru tła wyświetlanego tekstu.
Może być wywoływany w następujących formach:
color(cce kolor_czcionki, cce kolor_tła)
color(cce kolor_czcionki)
color()
Ostatnia forma wywołania kasuje ustawienia koloru tekstu oraz koloru tła, przywracając ustawienia domyślne. Ten sam efekt można uzyskać przy użyciu bezargumentowego manipulatora rcolor.
fg
Manipulator ten umożliwia ustawienie koloru czcionki wyświetlanego tekstu.
Może być wywoływany w następujących formach:
fg(cce kolor_czcionki)
fg()
Ostatnia forma wywołania kasuje ustawienia koloru tekstu oraz koloru tła, przywracając ustawienia domyślne. Ten sam efekt można uzyskać przy użyciu bezargumentowego manipulatora rfg.
bg
Manipulator ten umożliwia ustawienie koloru tła wyświetlanego tekstu.
Może być wywoływany w następujących formach:
bg(cce kolor_tła)
bg()
Ostatnia forma wywołania kasuje ustawienia koloru tekstu oraz koloru tła, przywracając ustawienia domyślne. Ten sam efekt można uzyskać przy użyciu bezargumentowego manipulatora rbg.
def
Jest to bezargumentowy manipulator przywracający domyślne ustawienia wyglądu tekstu. Działa dokładnie tak samo jak manipulator rface.

Parametry przekazywane jako argumenty do manipulatorów mogą być następujące:
Parametr dekoracja

reset - skasowanie wszystkich ustawień wyświetlania tekstu (powrót do ustawień domyślnych),
bright - rozjaśnienie tekstu - ustawienie dla tekstu koloru jaśniejszego niż bieżący,
dim - przyciemnienie tekstu - ustawienie dla tekstu koloru ciemniejszego niż bieżący,
underline - podkreślenie tekstu,
reverse - zamiana kolorów tekstu i tła,
hidden - ukrycie tekstu - staje się on niewidoczny,
strike - przereślenie tekstu.

Parametry kolor_czcionki oraz kolor_tła

black - czarny,
red - czerwony,
green - zielony,
yellow - żółty,
blue - niebieski,
magenta - fioletowy,
cyan - cyjan,
white - biały,


Kod źródłowy jest następujący.
Plik nagłówkowy
{geshi lang=c++}
#ifndef FACE_H
#define FACE_H

#include 
using std::ostream;

enum attrce // attribute code
{
	reset = 0,
	bright = 1,
	dim = 2,
	underline = 4,
	blink = 5, // doesn't work on my term
	reverse = 7,
	hidden = 8,
	strike = 9
};

enum cce // color code
{
	black,
	red,
	green,
	yellow,
	blue,
	magenta,
	cyan,
	white,
	none
};

enum cte // color type
{
	foreg,
	backg
};

class face // font apperance
{
public:
	face(attrce arg1 = reset, cce arg2 = none, cce arg3 = none);
	void run(ostream 

protected:
	attrce attrc; // attribute code
	cce fgc; // foregroud code
	cce bgc; // background code
	
	inline char dcce(cte type) const;
	inline char dcce(cce code) const;
};

class attr : public face // apperance attribute
{
public:
	attr(attrce arg = reset);
	void run(ostream 
};

class color : public face // foreground and background colors
{
public:
	color(cce arg1 = none, cce arg2 = none);
	void run(ostream 
};

class fg : public face // foreground color
{
public:
	fg(cce arg = none);
	void run(ostream 
};

class bg : public face // background color
{
public:
	bg(cce arg = none);
	void run(ostream 
};

ostream  // default settings (reset all settings)
ostream  // reset all settings (just like def)
ostream  // reset apperance attribute
ostream  // reset colors
ostream  // reset foreground color
ostream  // reset background color

ostream 

#endif
{/geshi}Plik z funkcjami
{geshi lang=c++}
#include &quot;face_manip.h&quot;

face::face(attrce arg1, cce arg2, cce arg3) : // font apperance
	attrc(arg1),
	fgc(arg2),
	bgc(arg3)
{}

attr::attr(attrce arg) // apperance attribute
{
	attrc = arg;
}

color::color(cce arg1, cce arg2) // foreground and background colors
{
	fgc = arg1;
	bgc = arg2;
}

fg::fg(cce arg) // foreground color
{
	fgc = arg;
}

bg::bg(cce arg) // background color
{
	bgc = arg;
}

void face::run(ostream ' </description><pubDate>Wed, 16 Sep 2009 20:27:31 +0200</pubDate><guid>http://thirdside.jogger.pl/2009/09/16/kolorki-z-konsolki-manipulatory-w-c-ustawiajace-wlasciwosci/</guid><category>kwadratowe</category><category>c++</category></item><item><title>Złote myśli</title><link>http://thirdside.jogger.pl/2009/08/20/zlote-mysli/</link><description>Posiadanie trzech sześciostrunowych gitar pozwala na strunową reprezentację szatana w systemie dziesiętnym.
</description><pubDate>Thu, 20 Aug 2009 16:15:21 +0200</pubDate><guid>http://thirdside.jogger.pl/2009/08/20/zlote-mysli/</guid><category>trójkątne</category></item><item><title>Żarciki w Perlu</title><link>http://thirdside.jogger.pl/2009/07/11/zarciki-w-perlu/</link><description>Przerabiam ostatnimi czasy kurs Perla. Znalazłam w nim dowcipny kod. Postanowiłam odnotować sobie, choć Javy i Pythona nie znam wcale. Ale może przyjdzie taki dzień, że zrozumiem żart w całości...
{geshi lang=&quot;perl&quot;}
#!/usr/bin/perl
use strict;
use warnings;

my @questions = qw(Javy Python'a Perl'a C);
my @punchlines = 
(
	&quot;Żadnego. Coś raz zmienione pozostaje zawsze takie samo.&quot;,
	&quot;Jednego. Stoi pod oprawką z żarówką i świat się pod nim kręci.&quot;,
	&quot;Miliona. Jeden zmieni, a reszta próbuje zrobić to samo mniejszą ilością kodu.&quot;,
	'&quot;A można coś zmieniać?&quot;'
);

print &quot;Wpisz cyfrę od 1 do 4: &quot;;
my $selection = ;
$selection -= 1;
print &quot;Ilu programistów $questions[$selection] potrzeba, aby zmienić żarówkę?\n\n&quot;;
sleep 2;
print $punchlines[$selection], &quot;\n&quot;;
{/geshi}Źródło: Simon Cozens Perl. Od podstaw
Wydawnictwo Helion, Gliwice 2003
</description><pubDate>Sat, 11 Jul 2009 17:02:45 +0200</pubDate><guid>http://thirdside.jogger.pl/2009/07/11/zarciki-w-perlu/</guid><category>kwadratowe</category></item><item><title>Facelifting</title><link>http://thirdside.jogger.pl/2009/07/05/facelifting/</link><description>Otowóż i mamy nowy szablon. Bugi poprawię w nadchodzącym tygodniu, a teraz robię sobie przerwę od tematyki HTML/CSS.
</description><pubDate>Sun, 05 Jul 2009 09:29:35 +0200</pubDate><guid>http://thirdside.jogger.pl/2009/07/05/facelifting/</guid><category>kwadratowe</category></item><item><title>Dyplom bez wyróźnienia. Wakacje bez poprawek. Orbitowanie bez cukru.</title><link>http://thirdside.jogger.pl/2009/07/03/dyplom-bez-wyroznienia-wakacje-bez-poprawek-orbitowanie-bez/</link><description>Pamiętam taki film, a właściwie sam jego początek, o zabawnym (w polskim tłumaczniu) tytule &quot;Orbitowanie bez cukru&quot;. Oglądałam go dawno, dawno temu i nawet nie pamiętam tematu fabuły. W mojej pamięci utkwiła jednak scena, w której grupa młodych ludzi w studenckich togach i czapkach, z dyplomami w rękach wchodzi na dach budynku by oblewać ukończenie studiów.
Gdy poszukałam informacji o tym filmie okazało się, że opowiada on o pierwszych krokach stawianych przez głównych bohaterów w świecie dorosłych, zetknięciu z brutalną rzeczywistością i wyzbywaniu się złudzeń. Skończyłam studia. Obroniłam się pod koniec maja. Wreszcie. Tylko, że ja już od dawna nie czuję się młoda. Choć nigdy na poważnie nie pracowałam, nie wydaje mi się, żebym jeszcze miała jakieś złudzenia. Ale o oblewaniu dyplomu na dachu budynku muszę poważnie pomyśleć, albowiem to dobry pomysł jest.
</description><pubDate>Fri, 03 Jul 2009 20:16:31 +0200</pubDate><guid>http://thirdside.jogger.pl/2009/07/03/dyplom-bez-wyroznienia-wakacje-bez-poprawek-orbitowanie-bez/</guid><category>trójkątne</category></item><item><title>Dziennik magiczny adeptki sztuk binarnych.
Niekochany stdout</title><link>http://thirdside.jogger.pl/2008/10/15/dziennik-magiczny-adeptki-sztuk-binarnych-niekochany-stdout/</link><description>Już sobie przypomniałam dlaczego buforem uczyniłam tablicę znaków miast bezpretensjonalnego stringa. Otóż chciałam by program działał jak konsolka linuksowa &gt; buffer;};
        void search ();
        void run ();
        //void read_buffer () {cout </description><pubDate>Wed, 15 Oct 2008 22:31:52 +0200</pubDate><guid>http://thirdside.jogger.pl/2008/10/15/dziennik-magiczny-adeptki-sztuk-binarnych-niekochany-stdout/</guid><category>kwadratowe</category></item><item><title>Dziennik magiczny adeptki sztuk binarnych.
Interfejs tekstowy</title><link>http://thirdside.jogger.pl/2008/10/14/dziennik-magiczny-adeptki-sztuk-binarnych/</link><description>Pozwoliłam sobie dziś na chwilkę relaksu przed konsolką. Tworzę swój własny tekstowy interface. Mała zajawka wywołująca programy poniżej.
{geshi lang=c++}#include 
#include 
#include 

using namespace std;

class interface
{
public:
        interface ();
        ~interface ();
        void read_stdin () {cin &gt;&gt; buffer;};
        void run ();
        //void read_buffer () {cout </description><pubDate>Tue, 14 Oct 2008 16:35:15 +0200</pubDate><guid>http://thirdside.jogger.pl/2008/10/14/dziennik-magiczny-adeptki-sztuk-binarnych/</guid><category>kwadratowe</category></item><item><title>Wahadło Foucaulta</title><link>http://thirdside.jogger.pl/2008/07/27/wahadlo-foucaulta-2/</link><description>Bina to pałac, który Chochma buduje sobie rozprzestrzeniając się od punktu początkowego. Jeśli Chochma jest źródłem, Bina to rzeka, która z niego wypływa, dzieląc się później na liczne odnogi, aż wszystkie wpadną do wielkiego morza ostatniej Sefiry - a w Bina wszystkie formy są z góry ukształtowane.
Umberto Eco Wahadło Foucaulta

</description><pubDate>Sun, 27 Jul 2008 16:54:11 +0200</pubDate><guid>http://thirdside.jogger.pl/2008/07/27/wahadlo-foucaulta-2/</guid><category>koliste</category></item><item><title>bez-tytulu</title><link>http://thirdside.jogger.pl/2008/07/26/bez-tytulu/</link><description>Ale owego dnia byłem tam, gdzie byłem, więc dzisiaj jestem tu, gdzie jestem.
Umberto Eco Wahadło Foucaulta
</description><pubDate>Sat, 26 Jul 2008 13:36:32 +0200</pubDate><guid>http://thirdside.jogger.pl/2008/07/26/bez-tytulu/</guid><category>koliste</category></item><item><title>Wahadło Foucaulta</title><link>http://thirdside.jogger.pl/2008/07/21/wahadlo-foucaulta-1/</link><description>W drugiej sefirze Alef mroczny przeobraża się w Alef świetlisty. Z Mrocznego Punktu tryskają litery Tory, ciałem są spółgłoski, tchnieniem samogłoski, a wspólnie akompaniują kantylenie człowieka pobożnego. Kiedy porusza się melodia znaków, poruszają się wraz z nią spółgłoski i samogłoski. Wyłania się z tego Chochma, Mądrość, Wiedza, pierwotna myśl, w której zawarte jest wszystko niby w szkatułce, gotowa rozwinąć się w dzieło stworzenia. W Chochmie mieści się esencja wszystkiego, co nastąpi...
Umberto Eco Wahadło Foucaulta

</description><pubDate>Mon, 21 Jul 2008 14:43:10 +0200</pubDate><guid>http://thirdside.jogger.pl/2008/07/21/wahadlo-foucaulta-1/</guid><category>koliste</category></item><item><title>Dziennik magiczny adeptki sztuk binarnych.
Eliksir porządkujący</title><link>http://thirdside.jogger.pl/2008/07/19/dziennik-magiczny-adeptki-sztuk-binarnych-eliksir-porzadkuja/</link><description>Wielki plan magiczny
Zapragnęłam niegdyś napisać skrypt w bash'u układający pliki w katalogach zgodnie z zawartą w nazwie pliku ścieżką. Abstrahując od zasadności tworzenia ewentualnej implementacji wyżej przedstawionego pomysłu, zabrałam się ochoczo do pracy i tak powstała skromna beta o nazwie FAM (File Administration Menager, czy jakoś tak). Jako, że funkcjonalność wyczarowanej bety pozostawiała wiele do życzenia, postanowiłam rozwinąć swój magiczny projekt.
Wersja beta eliksiru
Na dzień dzisiejszy implementacja składa się z dwóch plików wykonywalnych i działa na zasadzie rekurencji. Pierwszy plik .fam zawiera opis odpowiednich opcji skryptu. Skrypt bowiem można wywoływać z odpowienimi flagami podawanymi za nazwą skryptu po (a jakże) myślniku. W wersji beta nie przewidziano opcji długich.
{geshi lang=bash}
#!/bin/bash

path=`pwd`
				
name=&quot;fam: &quot;
				
case &quot;$1&quot; in
	&quot;-m&quot;) 
		mkdir --mode=700 $path/$2-$3;
		echo &quot;mv $path/*.$2* $path/$2* &gt; /dev/null 2&gt; $path/$2*/.move &gt; /dev/null 2&gt;&quot; &gt;&gt; $path/.move;
		cp $path/.fam $path/$2-$3;
		touch $path/$2-$3/.move;
		echo &quot;#!/bin/bash&quot; &gt;&gt; $path/$2-$3/.move;
	&quot;-d&quot;) 
		echo &quot;Remove $2? (y/n)&quot;;
		read answer;
		if [ answer=&quot;y&quot; ]
			then rm -rf $path/$2
		fi;;
	&quot;-x&quot;)
		$path/.move;;
	*) 
		echo &quot;$name Unknown option.&quot;
esac
{/geshi}W drugim pliku .move zawarte są polecenia przenoszenia plików do określonego katalogu.
{geshi lang=bash}
#!/bin/bash

mv /media/hdb1/*.doc* /media/hdb1/doc*/ &gt; /dev/null 2&gt; /media/hdb1/doc*/.move &gt; /dev/null 2&gt;
mv /media/hdb1/*.img* /media/hdb1/img*/ &gt; /dev/null 2&gt; /media/hdb1/img*/.move &gt; /dev/null 2&gt;
mv /media/hdb1/*.mus* /media/hdb1/mus*/ &gt; /dev/null 2&gt; /media/hdb1/mus*/.move &gt; /dev/null 2&gt;
{/geshi}Skrypt prosty i krótki. Opcja -m pozwala na utworzenie odpowiednio przygotowanego katalogu. Przyjęłam konwencję dwuczęściowych nazw katalogów. Pierwsza część - kilkuliterowy skrót nazwy - służy jako jednoznaczny identyfikator katalogu. Druga część to opisowa nazwa katalogu. Może być jednowyrazowa bardzo długa. Gdy chcę by jakiś plik znalazł się w danym katalogu, przy nadawaniu mu nazwy podaję po kropce identyfikator katalogu. Mogę też podać kila identyfikatorów rozdzielonych kropką.
Skrypt .fam wywołany z opcją -m pyta nas kolejno o obie części. Skrypt tworzy katalog z nazwą o formacie identyfikator-nazwa_katalogu. Po utworzeniu odpowiednio nazwanego katalogu następuje skopiowanie do niego skryptu .fam oraz utworzenie pliku .move z odpowiednimi prawami dostępu. Plik .move w nowo utworzonym katalogu jest początkowo pusty. Następnie do pliku .move znajdującym się katalogu bieżącym zostaje dodana linijka zaczynająca się od polecenia mv i zawierająca dopowiedni format ścieżki. Całość po wykonaniu przeniesie wszystkie pliki, znajdujące się w katalogu bieżącym, do podkatalogów o odpowiednich identyfikatorach.
Wywołanie skryptu z opcją -d po prostu usuwa katalog o danej nazwie. Ta opcja właśnie wymaga największego dopracowania. Usuwając plik, skrypt pozostawia bowiem wpis w pliku .move. Pliki .move w poszczególnych katalogach mogą zatem rozrastać się do dużych rozmiarów, magazynując niepotrzebne już wpisy usuniętych katalogów.
Opcja -x wywołuje skrypt do porządkowania plików. I tu swą rolę odgrywa plik .move. Jego uruchomienie powoduje przeniesienie plików z odpowiednimi rozszerzeniami do katalogów o dopowiadających identyfikatorach. Ponadto wewnątrz każdego podkatalogu katalogu bieżącego wykonywane są pliki .move i tak aż do najgłębszych patii drzewa katalogów.

Skrypt nie ma znaczącego zastosowania użytkowego, ale napisałam go bardziej dla zabawy niż dla działania. Coprawda sama z niego korzystam ale wątpię, że tworzenie długich nazw plików może stanowić dobrą alternatywę dla wybierania ścieżki w okienku, lub segregowania ręcznego. Pisanie skryptów w bashu uważam za ciekawe zajęcie, jednak obecnie brakuje mi problematyki dla której mogłabym próbować tworzyć rozwiązania. Tak więc zamierzam poprawić istniejącą betę.
P.S. Cieszę się, że piszę tego bloga anonimowo ;)
</description><pubDate>Sat, 19 Jul 2008 11:55:55 +0200</pubDate><guid>http://thirdside.jogger.pl/2008/07/19/dziennik-magiczny-adeptki-sztuk-binarnych-eliksir-porzadkuja/</guid><category>kwadratowe</category><category>bash</category></item><item><title>Wahadło Foucaulta</title><link>http://thirdside.jogger.pl/2008/07/17/wahadlo-foucaulta/</link><description>Diotallevi powiedział mi, że pierwszą sefirą jest Keter, Korona, początek, pierwotna pustka. Stworzył najpierw punkt, który stał się Myślą, i tam nakreślił wszystkie figury... Był i nie był, zamknięty w imieniu i wymykający się imieniu, a jedynym jego nazwaniem było jeszcze „Kto?&quot;, czyste pragnienie, by zostać nazwanym imieniem... Na początek nakreślił znaki w aurze, mroczny żar dobył się z jego najtajniejszej głębi jako bezbarwna chmura, która daje kształt temu, co bezkształtne, a ledwie zaczęła się rozszerzać, w jej środku uformowało się źródło płomieni, które wylały się, by oświetlić niższe sefirot, coraz niższe, aż po Królestwo. Ale być może w tym simsum, w tym cofnięciu, w tej samotności - mówił Diotallevi - tkwiła już obietnica tikkun, obietnica powrotu.
Umberto Eco Wahadło Foucaulta

</description><pubDate>Thu, 17 Jul 2008 20:03:47 +0200</pubDate><guid>http://thirdside.jogger.pl/2008/07/17/wahadlo-foucaulta/</guid><category>koliste</category></item><item><title>Bezsenność w Silesii</title><link>http://thirdside.jogger.pl/2008/07/17/bezsennosc-w-silesii/</link><description>To już n-ta z kolei noc, gdy nie wiem jak nakłonić swój organizm do zaśnięcia. Od kiedy zaczęły się wakacje cierpię na bezsenność. Powoli zaczynam zapominać jak to jest gdy człowiek czuje się śpiący. Czyżbym aż tak bardzo przyzwyczaiła się do trybu zasypiania nad książką tudzież klawiaturą? Nawet samozwańcze pisanie kodów nie pomaga. Nie potrafię się zmęczyć tym tak, by poczuć senność. Ach te problemy... no powiedzmy, że świnek morskich.
</description><pubDate>Thu, 17 Jul 2008 00:14:36 +0200</pubDate><guid>http://thirdside.jogger.pl/2008/07/17/bezsennosc-w-silesii/</guid><category>trójkątne</category></item></channel></rss>
