Unix je fascinující operační systém. Původně koncipován v Bell Labs v pozdní 1960, to bylo mít z frustrace s OS známý jako „Multics“ (multiplexed information and computing service). Unix je nyní starší 50 let (!) a implementace Linuxu pohání obrovské množství internetu.
takže-proč je Unix tak populární?
podle mého názoru úspěch Unixu vychází z filozofického přístupu k vývoji. Filosofii Unixu dokumentuje Doug McIlroy v odborném časopise Bell System V 1978:
1. Aby každý program udělal jednu věc dobře. Chcete-li udělat novou práci, stavět znovu, spíše než komplikovat staré programy přidáním nových „funkcí“.
2. Očekávejte, že výstup každého programu se stane vstupem do jiného, dosud neznámého programu. Nenechte nepořádek výstup s cizími informacemi. Vyhněte se striktně sloupcovým nebo binárním vstupním formátům. Netrvejte na interaktivním vstupu.
3. Navrhujte a vytvářejte software, dokonce i operační systémy, které mají být vyzkoušeny brzy, ideálně během několika týdnů. Neváhejte zahodit nemotorné části a znovu je postavit.
4. Použijte nástroje přednostně nekvalifikované pomoci odlehčit programovací úkol, i když budete muset Objížďka stavět nástroje a očekávat, že vyhodit některé z nich po dokončení jejich použití.
To bylo před více než 40 lety, a zachycuje PEVNÉ (dělená odpovědnost principu otevřeno/zavřeno), microservices, funkční potrubí, agilní a ducha DevOps!
pro více podrobností o filozofii Unixu si přečtěte tuto knihu (volně k dispozici zde, ale kupte si kopii na podporu autora!).
podívejme se na některé příklady filozofie Unixu v akci.
aby každý program udělal jednu věc dobře. Chcete-li udělat novou práci, stavět znovu, spíše než komplikovat staré programy přidáním nových „funkcí“.
cat
dělá přesně jednu věc. Spojuje soubory a zobrazuje je na standardním výstupu. To je vše, co dělá. Nedělá to stránkování. Nenabízí funkce vyhledávání. Prostě dělá přesně to, co říká na plechovce a nic víc.
tr
je podobný. Dělá „textovou náhradu“ čtením ze vstupu, provedením jakýchkoli překladů a zápisem na výstup.
tr -d aeiouAEIOU < file # Display file without vowels
tr eao 340 < file # Partially leet speak file
true
a false
jsou možná nejlepší příklady toho, jak dělat jednu věc dobře. true
nedělá nic, úspěšně! false
nedělá nic.
false && echo Hi # does nothing
true && echi Hi # Prints Hi
Složení
„Očekávat, že výstup každý program, aby se stal vstup do jiného“
V Unix, většina operací mají schopnost číst a psát na standardní výstup v dobře pochopil, textové podobě. Pomocí několika příkazů, například |
, >
a <
, můžeme přenášet výstup jednoho programu do druhého. Pojďme se podívat na některé příklady:
V tomto příkladu budeme používat cat
na výstup obsah souboru a krmit výstup do wc
kdo může spočítat počet řádků v souboru.
cat foo.txt | wc -l
v tomto příkladu používáme history
k nalezení našich nejčastěji používaných příkazů kombinací s cut
, sort
, uniq
a head
.
history | cut -f5 -d" " | sort -rn | uniq -c | sort -rn | head
xargs
je konečný švýcarský armádní nůž, který vám umožní vytvářet příkazy ze standardního výstupu. Použijme to k odstranění všech „.tmp “ soubory v aktuálním adresáři po použití find
k jejich vyhledání.
find -type f *.tmp | xargs rm
vše je soubor
v Unixu je vše soubor (nebo přesněji, vše je proud bajtů). To znamená, že stejné API / příkazy lze použít pro čtení jednotky CD-ROM, zápis síťové zásuvky nebo zjištění informací o CPU.
například celý souborový systém /proc
v systému Linux není ve skutečnosti soubory-Je to dynamické zobrazení informací, které jsou vystaveny jako banda deskriptorů souborů.
některé příklady:
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
Automatizace
Dlouho předtím, než „automatizaci-všechny-věci“, Unix tam byl, errr, že automatizuje všechny věci
cron
(více tady) byl automatizaci všech věcí, které za posledních 40+ let. Cron úlohy jsou naplánované skripty, které lze spustit v pevně stanovených časech nebo pevných intervalech.
každý uživatel v systému Unix má sadu naplánovaných úloh, viditelné pomocí příkazu crontab
. Soubor je ve velmi jednoduchém formátu, který udává datum a čas spuštěného skriptu.
příkaz at
je přátelštější alternativou, zde je příklad vypálení příkazu na 1145 31. Ledna (odtud).
echo "cc -o foo foo.c" | at 1145 jan 31
loutka, kuchař, CFEngine, Ansible-všechny tyto nástroje DevOps a narozené a chované na systémech založených na Unixu.