Ist es sicher, Symlinks im Verzeichnis / bin zu platzieren?

8

Ich habe viele Befehlszeilentools, die ich häufig verwende. Ich habe die normale Methode verwendet, um den vollständigen Pfad dieses Befehls durch das Terminal zu durchlaufen, und dann ./command-name ABER dies ist eine umständliche und zeitaufwändige Aufgabe.

Als ich mich mit dem Thema "Ausführen eines Befehls von überall über das Terminal" befasste, fand ich eine Lösung, um den Pfad in die Umgebungsvariable aufzunehmen (durch Bearbeiten von ./bashrc).

Das funktioniert gut.

Ich habe sogar herausgefunden, dass alle global funktionierenden Befehle (wie mkdir, ifconfig, cp usw.) im Verzeichnis "/ bin" abgelegt sind.

Wenn ich die "Symlinks" meiner Befehle in das Verzeichnis "/ bin" einbinde, funktioniert alles einwandfrei und ich kann die Befehle von überall im Terminal ausführen.

Meine Frage

  1. Ist es sicher, Symlinks direkt im Verzeichnis / bin abzulegen? Ich frage dies, weil ich beim Platzieren der Symlinks nach dem Administratorkennwort gefragt wurde.

  2. Wird es einen Unterschied machen, wenn ich die Symlinks der Befehle in / bin im Vergleich zum Verzeichnis / usr / bin platziere?

Umwelt (wenn es darauf ankommt):

Ubuntu 13.10, 32-Bit.

v1h5
quelle
1
Verweisen Sie auf diese Antwort.
Grün

Antworten:

13

Es ist nicht mit zu verwirren empfohlen /binund mit /usr/binobwohl dies funktionieren wird es etwas unsicher ist. Auch Sie nicht brauchen , um Ihre Symlinks dort zu platzieren.

Ich hatte das gleiche Problem wie Sie erwähnt. Es ist umständlich, zu Ihren Skripten zu navigieren und sie wie ./myscriptjedes Mal aufzurufen . Hier ist was ich getan habe.

Definieren Sie Ihr eigenes Bin-Verzeichnis

Sie können Ihr eigenes bin-Verzeichnis erstellen und Ihre Skripte dort ablegen. Erstellen Sie es mit

mkdir ~/bin

Jetzt müssen Sie die Umgebungsvariable PATH manipulieren. Dies ist ein sensibler Bereich. Wenn Sie die Variable PATH durcheinander bringen, können Sie keine Befehle mit relativen Pfaden mehr ausführen. Wenn das passiert, lsfunktioniert es möglicherweise nicht mehr /bin/ls.

Was ich jetzt zeigen werde, wirkt sich nur auf die aktuell laufende Terminalsitzung aus. Wenn also etwas schief geht, melden Sie sich einfach mit Ctrl+ ab Dund alles ist wie vorher.

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
export PATH=$PATH:~/bin
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/home/madmike/bin

Der echoBefehl-zeigt, was vorher und nachher in $ PATH steht. exportMit dieser Option können Sie die Umgebungsvariable ändern. Ihr zusätzliches bin-Verzeichnis wird an das Ende der Variablen angehängt. Dies bedeutet, dass Ihre Befehle die niedrigste Priorität haben, wenn mehr als ein Befehl mit demselben Namen vorhanden ist. Dies ist gut, da Sie wichtige Systembefehle nicht überschreiben möchten.

Bearbeiten Sie Ihre ~ / .bashrc-Datei, um die Änderungen dauerhaft zu machen.

nano ~/.bashrc

export PATH=$PATH:~/binam Ende dieser Datei hinzufügen .

Jetzt wird bei jeder neuen Terminalsitzung die Variable $ PATH um Ihr Verzeichnis erweitert.

MadMike
quelle
nette Idee @MadMike :) Aber denkst du nicht, dass / usr / local / bin für die Ausstellung derselben Idee gedacht ist? Ich frage dies, weil ich neu in Linux bin und nicht genau weiß, was Sie von "~ / bin" und "/ usr / loca / bin" halten.
v1h5
1
Der Unterschied liegt im Mehrbenutzeraspekt. "/ usr / local / bin" ist für alle. "~ / bin" ist nur für den aktuellen Benutzer gedacht. "/ usr / local / bin" benötigt Root-Rechte. "~ / bin" wird nicht.
MadMike
8
Nur eine Beobachtung: Standardmäßig wird in Ubuntu ~/binbereits $ PATH hinzugefügt, auch wenn ~/bines noch nicht erstellt wurde. Sie können die ~/.profileDatei überprüfen , um dies zu sehen.
Radu Rădeanu
Ich werde dies zu meiner Antwort hinzufügen, sobald ich auf einem Ubuntu-Computer bin.
MadMike
3

Bevor ich Ihre Frage beantworte, möchte ich kurz erläutern, wie es funktioniert.

In Ihrem System haben Sie Environment Variables. Eine davon ist eine PATHVariable, die eine Reihe von Verzeichnissen speichert, in denen sich ausführbare Programme und Skripte befinden. PATHSpeichern Sie unter Linux standardmäßig einige Verzeichnisse. Einer von ihnen /bin. Deshalb können Sie jedes Programm ausführen, das sich in befindet /bin. Sie können Ihre PATHVariable überprüfen , indem Sie Folgendes ausführen:

echo $PATH

In PATHvariabler Reihenfolge der Verzeichnisse ist wichtig . Die Pfadnamen mit der höchsten Priorität werden zuerst angegeben.

Beantworten Sie nun Ihre Fragen:

  1. Ja, es ist sicher, Symlink in zu erstellen /bin. Natürlich, wenn Sie andere ausführbare Dateien nicht neu schreiben . Aber Sie sollten es vorziehen, zu verwenden /usr/local/bin. Es muss auch in deinem sein PATH.

  2. Ja, so ist es. Je nach Bestellung in PATH. Wenn Sie zum Beispiel setzen Symlinks von verschiedenen Dateien , aber mit dem gleichen Namen sowohl auf /binund /usr/bin, und /usr/binin enthielten PATHfrüher als /bin, dann wird es Symlink von verwenden /usr/bin.

Informationen zur Dateisystemhierarchie finden Sie hier

Informationen zu Ubuntu-Umgebungsvariablen finden Sie hier

c0rp
quelle
2
  1. Ist es sicher, Symlinks direkt im Verzeichnis / bin abzulegen? Ich frage dies, weil ich beim Platzieren der Symlinks nach dem Administratorkennwort gefragt wurde.

    Es besteht ein Sicherheitsrisiko. Ich halte es wirklich nicht für sinnvoll, eigene Symlinks in das Verzeichnis / bin zu stellen, da nicht nur Ihre Befehle global werden, sondern auch symbolische Links leicht unterbrochen werden können. Die Umgebungsvariable bash PATH ist eine robustere Lösung.

  2. Wird es einen Unterschied machen, wenn ich die Symlinks der Befehle in / bin im Vergleich zum Verzeichnis / usr / bin platziere?

    Nein. Obwohl gemäß dem Filesystem Hierarchy Standard (FHS) ein Unterschied zwischen / bin und / usr / bin besteht.

    /binWichtige Befehlsbinärdateien, die im Einzelbenutzermodus verfügbar sein müssen; für alle Benutzer, z. B. cat, ls, cp.
    /usr/bin Nicht wesentliche Befehlsbinärdateien (im Einzelbenutzermodus nicht erforderlich); für alle Benutzer.

    Aber der Unterschied ist heute nicht so wichtig. Tatsächlich besteht bei einigen Distributionen (insbesondere Fedora) die Tendenz, das Verzeichnis / bin auszublenden.

sgx1
quelle
1

NEIN!!! Berühren Sie keine Systemverzeichnisse. Jedes Skript oder Programm, das Sie geschrieben haben, sollte normalerweise in /usr/local/binund /usr/local/sbinVerzeichnissen abgelegt werden. Das Hinzufügen von Verzeichnissen zu PATH ist keine gute Idee, da es Sicherheitsrisiken birgt.

Auch der Unterschied zwischen den Verzeichnissen, die für Superuser- Programme gelten.

Danatela
quelle