Filozofia rozwoju Uniksa

Jeff Foster
Jeff Foster

Obserwuj

Jul 31, 2019 · 5 min czytać

Unix to fascynujący system operacyjny. Pierwotnie pomyślany w Bell Labs w późnych latach 1960-tych, został zrodzony z frustracji z OS znanym jako „Multics” (multipleksowane information and computing service). Unix ma już ponad 50 lat (!), a implementacja Linuksa zasila ogromne połacie Internetu.

więc — dlaczego Unix jest tak popularny?

moim zdaniem sukces Uniksa wynika z filozoficznego podejścia do rozwoju. Filozofia Uniksa została udokumentowana przez Douga Mcilroya w Bell System Technical Journal w 1978:

1. Spraw, aby każdy program robił jedną rzecz dobrze. Aby wykonać nową pracę, zamiast komplikować stare programy, dodając nowe „funkcje”.

2. Spodziewaj się, że wyjście każdego programu stanie się wejściem do innego, jeszcze nieznanego, programu. Nie zaśmiecaj danych wyjściowych obcymi informacjami. Unikaj rygorystycznie kolumnowych lub binarnych formatów wejściowych. Nie nalegaj na interakcję.

3. Projektuj i buduj oprogramowanie, nawet systemy operacyjne, aby wypróbować je wcześnie, najlepiej w ciągu kilku tygodni. Nie wahaj się wyrzucić niezdarnych części i odbudować je.

4. Użyj narzędzi zamiast niewykwalifikowanej pomocy, aby złagodzić zadanie programistyczne, nawet jeśli musisz objechać, aby zbudować narzędzia i spodziewać się wyrzucenia niektórych z nich po zakończeniu ich używania.

to było ponad 40 lat temu i oddaje solidne (zasada pojedynczej odpowiedzialności, Otwarte/Zamknięte), mikroserwisy, funkcjonalne potoki, zwinność i ducha DevOps!

aby uzyskać więcej szczegółów na temat filozofii Uniksa, przeczytaj tę książkę (bezpłatnie dostępną tutaj, ale kup kopię, aby wesprzeć autora!).

spójrzmy na kilka przykładów filozofii Uniksa w działaniu.

spraw, aby każdy program robił jedną rzecz dobrze. Aby wykonać nową pracę, zamiast komplikować stare programy, dodając nowe „funkcje”.

cat robi dokładnie jedną rzecz. Łączy pliki i wyświetla je na standardowym wyjściu. To wszystko. Nie robi paginacji. Nie oferuje funkcji wyszukiwania. Robi dokładnie to, co jest napisane na puszce i nic więcej.

tr jest podobny. Robi „texttual replacement” poprzez czytanie od wejścia, dokonywanie wszelkich tłumaczeń i pisanie do wyjścia.

tr -d aeiouAEIOU < file # Display file without vowels
tr eao 340 < file # Partially leet speak file

true i false to chyba najlepsze przykłady na zrobienie jednej rzeczy dobrze. true nic nie robi, z powodzeniem! false nic nie robi.

false && echo Hi # does nothing
true && echi Hi # Prints Hi

skład

„oczekuj, że wyjście każdego programu stanie się wejściem do innego”

w Uniksie większość operacji ma możliwość odczytu i zapisu na standardowe wyjście w dobrze zrozumiałym formacie tekstowym. Za pomocą kilku poleceń, takich jak |, > i < możemy przekazać wyjście jednego programu do drugiego. Spójrzmy na kilka przykładów:

w tym przykładzie używamy cat, aby wypisać zawartość pliku i przekazać dane wyjściowe do wc, który może policzyć liczbę linii w pliku.

cat foo.txt | wc -l

w tym przykładzie używamy history, aby znaleźć nasze najczęściej używane polecenia, łącząc je z cut, sort, uniq i head.

history | cut -f5 -d" " | sort -rn | uniq -c | sort -rn | head

xargs jest najlepszym swiss – army knife pozwalającym na tworzenie poleceń ze standardowego wyjścia. Użyjmy go do usunięcia wszystkich”.pliki tmp ” w bieżącym katalogu po użyciu find, aby je zlokalizować.

find -type f *.tmp | xargs rm

wszystko jest plikiem

w Uniksie wszystko jest plikiem (a dokładniej wszystko jest strumieniem bajtów). Oznacza to, że te same API/polecenia mogą być używane do odczytu napędu CD-ROM, zapisu gniazda sieciowego lub wyszukiwania informacji o procesorze.

na przykład, cały system plików /proc w Linuksie nie jest tak naprawdę plikami — jest to dynamiczny widok informacji, które są ujawniane jako kilka deskryptorów plików.

kilka przykładów:

cat /proc/cpuinfo # Displays your CPU info exposed as a filefoo > /dev/null # Redirect output into a file called
# null (which discards everything)od -vAn -N1 -td1 < /dev/urandom # Display a random 1 byte number
# (via https://unix.stackexchange.com/a/268960

Automatyzacja

na długo przed „automate-all-the-things” był Unix, errr, automatyzacja wszystkich rzeczy

obowiązkowe zautomatyzować wszystkie rzeczy obraz

cron (więcej tutaj) automatyzuje wszystkie rzeczy przez ostatnie 40 + lat. Zadania Cron to zaplanowane skrypty, które mogą być uruchamiane w ustalonych godzinach lub stałych odstępach czasu.

każdy użytkownik systemu Unix ma zestaw zaplanowanych zadań, widocznych za pomocą polecenia crontab. Plik jest w bardzo prostym formacie, który podaje datę i godzinę uruchomienia skryptu.

polecenie at jest bardziej przyjazną alternatywą, oto przykład odpalenia polecenia na 1145 31 stycznia (stąd).

echo "cc -o foo foo.c" | at 1145 jan 31

Puppet, Chef, CFEngine, Ansible — wszystkie te narzędzia DevOps i stworzone na systemach opartych na Uniksie.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

Previous post jak uprawiać różne odmiany begonii
Next post Witamina B-100 Complex oral