det er et fascinerende operativsystem. Oprindeligt udtænkt af på Bell Labs i slutningen af 1960 ‘ erne, blev det båret ud af frustration med OS kendt som “Multics” (multiplekset information og computing service). Jens er nu over 50 år gammel (!) og implementeringen af Linuks styrker enorme dele af internettet.
Hvorfor er det så populært?
i mit sind kommer units succes fra den filosofiske tilgang til udvikling. Den unikke filosofi er dokumenteret af Doug McIlroy i Bell System Technical Journal i 1978:
1. Få hvert program til at gøre en ting godt. For at udføre et nyt job skal du bygge på ny i stedet for at komplicere gamle programmer ved at tilføje nye “funktioner”.
2. Forvent, at output fra hvert program bliver input til et andet, endnu ukendt, program. Rør ikke output med fremmede oplysninger. Undgå stringent columnar eller binære input formater. Insister ikke på interaktiv input.
3. Design og byg programmel, selv operativsystemer, der skal afprøves tidligt, ideelt inden for uger. Tøv ikke med at smide de klodsede dele og genopbygge dem.
4. Brug værktøjer frem for ufaglært hjælp til at lette en programmeringsopgave, selvom du skal omveje for at opbygge værktøjerne og forvente at smide nogle af dem ud, når du er færdig med at bruge dem.
dette var over 40 år siden, og indfanger SOLID (enkelt ansvar princip, åben/lukket), microservices, funktionelle rørledninger, agile og ånden i DevOps!
Læs denne bog (frit tilgængelig her, men køb en kopi til støtte for forfatteren!).
lad os se på nogle eksempler på den unikke filosofi i aktion.
få hvert program til at gøre en ting godt. For at udføre et nyt job skal du bygge på ny i stedet for at komplicere gamle programmer ved at tilføje nye “funktioner”.
cat
gør præcis en ting. Det sammenkæder filer og viser dem på standard output. Det er alt det gør. Det gør ikke pagination. Det tilbyder ikke søgefunktionalitet. Det gør bare præcis, hvad der står på tin og ikke mere.
tr
er ens. Det gør “tekstudskiftning” ved at læse fra input, foretage oversættelser og skrive til output.
tr -d aeiouAEIOU < file # Display file without vowels
tr eao 340 < file # Partially leet speak file
true
og false
er måske de bedste eksempler på at gøre en ting godt. true
gør intet, med succes! false
gør intet.
false && echo Hi # does nothing
true && echi Hi # Prints Hi
sammensætning
“forvent, at output fra hvert program bliver input til et andet”
de fleste operationer har evnen til at læse og skrive til standard output i et godt forstået tekstformat. Med et par kommandoer, såsom |
, >
og <
kan vi fodre output fra et program til et andet. Lad os se på nogle eksempler:
i dette eksempel bruger vi cat
til at udsende indholdet af en fil og føje output til wc
hvem kan tælle antallet af linjer i en fil.
cat foo.txt | wc -l
i dette eksempel bruger vi history
til at finde vores mest anvendte kommandoer ved at kombinere den med cut
, sort
, uniq
og head
.
history | cut -f5 -d" " | sort -rn | uniq -c | sort -rn | head
xargs
giver dig mulighed for at opbygge kommandoer fra standard output. Lad os bruge det til at slette alle “.TMP ” filer i den aktuelle mappe efter brug find
for at finde dem.
find -type f *.tmp | xargs rm
alt er en fil
i unik er alt en fil (eller mere præcist er alt en strøm af bytes). Dette betyder, at de samme API ‘ er/kommandoer kan bruges til at læse et CD-ROM-drev, skrive et netværksstik eller finde ud af CPU-info.
for eksempel er hele /proc
filsystemet ikke rigtig filer — det er en dynamisk visning af oplysninger, der er eksponeret som en flok filbeskrivere.
nogle eksempler:
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
automatisering
længe før “Automatiser-alle-ting”, var der, fejle, Automatiser alle ting
cron
(mere her) har automatiseret alle tingene i de sidste 40+ år. Cron job er planlagte scripts, der kan køre på faste tidspunkter eller faste intervaller.
hver bruger på et enkelt system har et sæt planlagte opgaver, der er synlige ved hjælp af kommandoen crontab
. Filen er i et meget simpelt format, der giver dato og klokkeslæt for det script, der kører.
kommandoen at
er et venligere alternativ, her er et eksempel på at skyde en kommando på 1145 den 31.Januar (herfra).
echo "cc -o foo foo.c" | at 1145 jan 31
marionet, kok, CFEngine, Ansible — alle disse DevOps værktøjer og født og opdrættet på unikke baserede systemer.