GNU/Linux >> Tutoriels Linux >  >> Linux

Linux - Est-il possible de simuler un chemin spécifique pour un processus ?

J'essaie d'exécuter ADB sur un serveur Linux avec plusieurs utilisateurs où je ne suis pas root (pour jouer avec mon émulateur Android). Le démon adb écrit ses journaux dans le fichier /tmp/adb.log qui semble malheureusement être codé en dur dans ADB et cette situation ne va pas changer.

Ainsi, adb ne parvient pas à s'exécuter, donnant l'erreur évidente :cannot open '/tmp/adb.log': Permission denied . Ce fichier est créé par un autre utilisateur et /tmp a peu collant sur. Si je démarre adb avec adb nodaemon server en le faisant écrire sur stdout, aucune erreur ne se produit (j'ai également configuré son port sur une valeur unique pour éviter les conflits).

Ma question est:existe-t-il un moyen de faire écrire ADB dans un autre fichier que /tmp/adb.log ? Plus généralement, existe-t-il un moyen de créer une sorte de lien symbolique spécifique à un processus ? Je souhaite rediriger tous les accès aux fichiers vers /tmp/adb.log à, en disant, un fichier ~/tmp/adb.log .

Encore une fois, je ne suis pas root sur le serveur, donc chroot , mount -o rbind et chmod ne sont pas des options valides. Si possible, j'aimerais ne pas modifier les sources ADB, mais s'il n'y a pas d'autres solutions, je le ferai.

PS Pour le cas ADB spécifique, je peux recourir à l'exécution de adb nodaemon server avec nohup et la redirection de sortie, mais la question générale est toujours d'actualité.

Réponse acceptée :

Voici un exemple très simple d'utilisation de util-linux est unshare pour placer un processus dans un espace de noms de montage privé et lui donner une vue différente du même système de fichiers que son parent possède actuellement :

{   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

Vous pouvez donner à un processus une vue privée de son système de fichiers avec le unshare utilitaire sur les systèmes Linux à jour, bien que la fonction d'espace de noms de montage elle-même ait été assez mature pour toute la série de noyaux 3.x. Vous pouvez entrer des espaces de noms préexistants de toutes sortes avec nsenter utilitaire du même package, et vous pouvez en savoir plus avec man .


Linux
  1. Comment puis-je spécifier une icône avec un chemin RELATIVE pour un fichier d'entrée de bureau Linux ?

  2. Redémarrer le processus lors du changement de fichier sous Linux

  3. grep récursivement pour un type de fichier spécifique sous Linux

  4. Est-il possible que le descripteur de fichier Linux 0 1 2 ne soit pas pour stdin, stdout et stderr ?

  5. Comment forcer des autorisations spécifiques pour les nouveaux fichiers/dossiers sur le serveur de fichiers Linux ?

10 exemples de commandes Linux Cat pour les débutants

Tutoriel de commande Linux df pour les débutants (8 exemples)

Commande ls sous Linux pour lister les fichiers

8 commandes de navigation de fichiers Linux essentielles pour les nouveaux utilisateurs

Commandes pour la gestion des processus sous Linux

Vider la mémoire d'un processus Linux dans un fichier