GNU/Linux >> Znalost Linux >  >> Linux

Linux – Je možné předstírat konkrétní cestu pro proces?

Snažím se spustit ADB na linuxovém serveru s více uživateli, kde nejsem root (abych si mohl hrát s emulátorem Androidu). Démon adb zapisuje své protokoly do souboru /tmp/adb.log který se bohužel zdá být pevně zakódován do ADB a tato situace se nezmění.

Adb se tedy nespouští, což dává zjevnou chybu:cannot open '/tmp/adb.log': Permission denied . Tento soubor je vytvořen jiným uživatelem a /tmp má na sobě lepivý kousek. Pokud spustím adb pomocí adb nodaemon server při zápisu do stdout nedochází k žádným chybám (také jsem nastavil jeho port na jedinečnou hodnotu, abych se vyhnul konfliktům).

Moje otázka zní:existuje nějaký způsob, jak přimět ADB zapisovat do jiného souboru než /tmp/adb.log ? Obecněji, existuje způsob, jak vytvořit určitý druh symbolického odkazu specifického pro proces? Chci přesměrovat všechny přístupy k souborům na /tmp/adb.log do souboru ~/tmp/adb.log .

Opět nejsem root na serveru, takže chroot , mount -o rbind a chmod nejsou platné možnosti. Pokud je to možné, nerad bych upravoval zdroje ADB, ale pokud neexistují žádná jiná řešení, udělám to.

P.S. Pro konkrétní případ ADB se mohu uchýlit ke spuštění adb nodaemon server pomocí nohup a přesměrování výstupu, ale obecná otázka je stále relevantní.

Přijatá odpověď:

Zde je velmi jednoduchý příklad použití util-linux unshare umístit proces do jmenného prostoru soukromého připojení a dát mu jiný pohled na stejný souborový systém, jaký má v současnosti jeho rodič:

{   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

Procesu můžete poskytnout soukromý pohled na jeho souborový systém pomocí unshare nástroj na aktuálních linuxových systémech, i když samotné zařízení jmenného prostoru mount je pro celou sérii jádra 3.x poměrně vyspělé. Pomocí nsenter můžete zadat již existující jmenné prostory všeho druhu utility ze stejného balíku a více můžete zjistit pomocí man .


Linux
  1. Jak mohu zadat ikonu s RELATIVNÍ cestou pro soubor se záznamem plochy Linux?

  2. Jak vytvořit soubor v Linuxu z okna terminálu?

  3. Restartujte proces při změně souboru v Linuxu

  1. Jak nastavit ID procesu v Linuxu pro konkrétní program

  2. grep rekurzivně pro konkrétní typ souboru v systému Linux

  3. Je možné, že linuxový deskriptor souboru 0 1 2 není pro stdin, stdout a stderr?

  1. K čemu je Linux test – příkazový test?

  2. Ekvivalent Process Monitor pro Linux?

  3. Je možné předstírat konkrétní cestu pro proces?