
Angenommen, ich möchte ein neues Paket erstellen, das einen Befehl installiert, d. h. eine neue Datei zu /bin oder /usr/bin hinzufügt.
Aber ich habe den Befehl noch nicht benannt. Wenn ich also auf Konflikte stoße, möchte ich das so schnell wie möglich herausfinden.
Ich habe einige Repos (Fedora, RPM Fusion usw.). Gibt es eine Abfrage, mit der ich überprüfen kann, ob eine bestimmte Datei/ein bestimmter Befehl von einem anderen derzeit verfügbaren Paket installiert wird?
Antwort1
Überprüfen Sie nicht nur Fedora, denn dann stoßen Sie auf ein Problem, wenn Sie es woanders verpacken möchten, oder Fedora fügt eine vorhandene App ein, deren Name mit Ihrem kollidiert.
Ich wurde von einem Distributionspaketierer gezwungen, den (kurzen, knackigen) Namen eines Befehls in einer App zu ändern, die ich geschrieben hatte, als sie in die offiziellen Repos aufgenommen wurde, weil er mit altem, aber immer noch verfügbarem Müll kollidierte. Sie können ihn auch gleich gleich bekommen.
Beginnen Sie mit einem einigermaßen eindeutigen Namen undSuche im Netzmithilfe einer Suchmaschine (oder zwei). Suchen Sie auchmindestens QuelleschmiedeUndgithubdirekt. Auch wenn etwas auf ein völlig anderes Betriebssystem (Windows, iOS usw.) abzuzielen scheint, vermeiden Sie die Kollision.
Wenn Sie das Internet nicht nur mit dem Befehlsnamen durchsuchen können (suchen Sie also nicht nach „linux mycommandname“), weil zu viele unzusammenhängende Ergebnisse zurückgegeben werden, ist das Wort nicht eindeutig genug (dazu gehören Wörter, die sich in einer Fremdsprache herausstellen, Markennamen von Pop aus Australien usw.). Dies bedeutet wahrscheinlich mindestens 5 Zeichen; weniger als das ist an dieser Stelle nur Zufall, und mehr ist wahrscheinlich besser. Es ist besser, einen langen, beschreibenden Namen für einen Befehl zu verwenden () und die superFooBar
Leute ihren eigenen kurzen Alias ( foo
) erstellen zu lassen, wenn sie möchten, als einen kurzen, fast bedeutungslosen Namen zu erstellen (Akronyme, Wörter ohne Vokale usw.). Dies wird in naher Zukunft nicht in POSIX aufgenommen, es ist eine obskure, optionale Anwendung und sollte der Klarheit und nicht der Bequemlichkeit halber gekennzeichnet werden.
Wenn Sie nur die auf einem bestimmten System verfügbaren Repos durchsuchen möchten, können Sie Folgendes verwenden yum provides
:
yum provides "*/superFooBar"
Beachten Sie die Anführungszeichen mit einem Glob-Stern darin; dies verhindert die Shell-Erweiterung, sodass es wörtlich an übergeben wird yum
, das es auf die gleiche Weise als Platzhalter behandelt. Dadurch wird der vollständige Pfad aller von allen Paketen in allen Repos installierten Dateien durchsucht, sodass Übereinstimmungen Folgendes umfassen /usr/bin/superFooBar
können /etc/default/superFooBar
usw.
Auch hier rate ich davon ab, wenn Sie dies öffentlich oder privat innerhalb einer Organisation verteilen möchten. Wenn es nur für Sie und Maschinen ist, für die Sie persönlich verantwortlich sind, ist das in Ordnung – ansonsten ist es nicht gründlich genug.