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 .