GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Ist es möglich, einen bestimmten Pfad für einen Prozess vorzutäuschen?

Ich versuche, ADB auf einem Linux-Server mit mehreren Benutzern auszuführen, auf denen ich nicht root bin (um mit meinem Android-Emulator zu spielen). Der adb-Daemon schreibt seine Protokolle in die Datei /tmp/adb.log was leider in ADB fest codiert zu sein scheint und diese Situation wird sich nicht ändern.

ADB kann also nicht ausgeführt werden und gibt den offensichtlichen Fehler aus:cannot open '/tmp/adb.log': Permission denied . Diese Datei wurde von einem anderen Benutzer und /tmp erstellt hat klebriges bisschen auf. Wenn ich adb mit adb nodaemon server starte Wenn es auf stdout schreibt, treten keine Fehler auf (ich habe auch seinen Port auf einen eindeutigen Wert gesetzt, um Konflikte zu vermeiden).

Meine Frage ist:Gibt es eine Möglichkeit, ADB dazu zu bringen, in eine andere Datei als /tmp/adb.log zu schreiben ? Ganz allgemein gesagt, gibt es eine Möglichkeit, eine Art prozessspezifischen Symlink zu erstellen? Ich möchte alle Dateizugriffe auf /tmp/adb.log umleiten in eine Datei ~/tmp/adb.log .

Auch hier bin ich nicht root auf dem Server, also chroot , mount -o rbind und chmod sind keine gültigen Optionen. Wenn möglich, möchte ich keine ADB-Quellen ändern, aber wenn es keine anderen Lösungen gibt, werde ich das tun.

P.S. Für den speziellen ADB-Fall kann ich darauf zurückgreifen, adb nodaemon server auszuführen mit nohup und Ausgabeumleitung, aber die allgemeine Frage ist immer noch relevant.

Akzeptierte Antwort:

Hier ist ein sehr einfaches Beispiel für die Verwendung von util-linux ist unshare um einen Prozess in einen privaten Mount-Namensraum zu stellen und ihm eine andere Ansicht desselben Dateisystems zu geben, das sein Elternteil derzeit hat:

{   cd /tmp                      #usually a safe place for this stuff
    echo hey   >file             #some
    echo there >file2            #evidence
    sudo unshare -m sh -c '      #unshare requires root by default
         mount -B file2 file     #bind mount there over hey
         cat file                #show it
         kill -TSTP "$$"         #suspend root shell and switch back to parent
         umount file             #unbind there
         cat file'               #show it
    cat file                     #root shell just suspended
    fg                           #bring it back
    cat file2                    #round it off
}
there                            #root shell
hey                              #root shell suspended
hey                              #root shell restored
there                            #rounded

Mit unshare können Sie einem Prozess eine private Ansicht seines Dateisystems geben Dienstprogramm auf aktuellen Linux-Systemen, obwohl die Mount-Namespace-Einrichtung selbst für die gesamte 3.x-Kernel-Serie ziemlich ausgereift ist. Mit nsenter können Sie bereits vorhandene Namespaces aller Art eingeben Dienstprogramm aus demselben Paket, und Sie können mehr mit man herausfinden .


Linux
  1. 10 praktische Bash-Aliase für Linux

  2. 8 Linux-Befehle für effektives Prozessmanagement

  3. Prozess bei Dateiänderung in Linux neu starten

  4. grep rekursiv für einen bestimmten Dateityp unter Linux

  5. Ist es möglich, dass der Linux-Dateideskriptor 0 1 2 nicht für stdin, stdout und stderr gilt?

10 Beispiele für Linux-Cat-Befehle für Anfänger

Linux-df-Befehls-Tutorial für Anfänger (8 Beispiele)

ls-Befehl in Linux zum Auflisten von Dateien

8 grundlegende Linux-Dateinavigationsbefehle für neue Benutzer

Linux – Bestimmung einer bestimmten Datei, die für hohe E/A verantwortlich ist?

Befehle für das Prozessmanagement in Linux