Frikadelle schrieb:
Wieviel alias'e kann Ubuntu verwalten?
Die Frage ist IMHO falsch gestellt, denn das ist Aufgabe jeder genutzten Shell-Instanz sich die alias-Einträge zu merken. Bei der Bash scheinen die Einträge in einer Hash-Table gespeichert zu werden (bminor/bash/blob/master/alias.c, die den Maximalwert von int
Einträgen zählen kann: bminor/bash/blob/master/hashlib.h.
Der maximale Wert von int
ist von der genutzten Systemarchitektur und dem Compiler abhängig - das kann man mit einem kleinen C-Programm für das jeweilige System herausfinden:
| // int_limits.c
#include <stdio.h>
#include <limits.h>
int main() {
printf("The minimum value of INT = %d\n", INT_MIN);
printf("The maximum value of INT = %d\n", INT_MAX);
}
|
$ gcc int_limits.c -o int_limits
$ ./int_limits
The minimum value of INT = -2147483648
The maximum value of INT = 2147483647
Da ist also mehr Platz für alias-Einträge, als man sich merken kann...
Je mehr Aliase man definiert, desto mehr Speicher wird dafür benötigt (das passiert nicht kontinuierlich sondern stufenweise, weil die Hashtable dann neue Buckets anlegt, die wieder eine bestimmte Anzahl von Einträgen halten können). Wenn man sich überlegt, wie klein der Eintrag für ein Alias ist und wie groß der verfügbare Arbeitsspeicher ist, dann kann man sich überlegen, dass das bei heutigen Systemen bei normaler Nutzung keine Probleme machen wird.
Falls du dir Gedanken über die Strukturen von Hash-Tables machen willst, bietet Modern Dictionaries by Raymond Hettinger eine recht sanfte Einführung, für die Abgründe der Implementation der Hashtable für die Bash musst du dir ggf. die Zeit nehmen den Code durchzuackern.
Und wenn du dann immer noch zu viel Zeit hast, kannst du ja mal in einer Schleife so lange Aliase definieren, bis dir die Shell um die Ohren fliegt (man muss das Skript sourcen bzw. die Zeilen direkt in die Shell kopieren, damit man die Unmengen der erstellen Aliase sehen kann):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | MAX_INT=0
while :
do
eval alias "alias_$(( x++ ))"="\"echo foo\""
if ((x>0))
then
MAX_INT=$x
continue
fi
if (((x=~x)>0))
then
MAX_INT=$x
fi
break
done
echo $MAX_INT
|
Solange das System nicht zu swappen anfängt bzw. aufgrund von Speichermangel der OOM-Killer des Kernels zuschlägt, sollte die Tatsache, dass man aliase definiert hat (das Definieren eines Alias kostet natürlich etwas Rechenzeit) keine nennenswerten Auswirkungen auf die Geschwindigkeit haben.