Saya mencoba menjalankan ADB di server linux dengan banyak pengguna di mana saya tidak melakukan root (untuk bermain dengan emulator Android saya). Daemon adb menulis lognya ke file /tmp/adb.log yang sayangnya tampaknya telah dikodekan ke dalam ADB dan situasi ini tidak akan berubah.
Jadi, adb gagal dijalankan, memberikan kesalahan yang jelas:cannot open '/tmp/adb.log': Permission denied . File ini dibuat oleh pengguna lain dan /tmp memiliki sedikit lengket. Jika saya memulai adb dengan adb nodaemon server membuatnya menulis ke stdout, tidak ada kesalahan yang terjadi (saya juga mengatur portnya ke nilai unik untuk menghindari konflik).
Pertanyaan saya adalah:apakah ada cara untuk membuat ADB menulis ke file lain selain /tmp/adb.log ? Lebih umum, apakah ada cara untuk membuat semacam symlink khusus proses? Saya ingin mengarahkan semua akses file ke /tmp/adb.log untuk, dengan mengatakan, file ~/tmp/adb.log .
Sekali lagi, saya bukan root di server, jadi chroot , mount -o rbind dan chmod bukan opsi yang valid. Jika memungkinkan, saya tidak ingin mengubah sumber ADB, tetapi tentu saja jika tidak ada solusi lain, saya akan melakukannya.
P.S. Untuk kasus ADB tertentu saya dapat menggunakan adb nodaemon server dengan nohup dan pengalihan output, tetapi pertanyaan umum masih relevan.
Jawaban yang Diterima:
Berikut adalah contoh yang sangat sederhana menggunakan util-linux unshare untuk menempatkan proses dalam namespace mount pribadi dan memberikannya tampilan berbeda dari sistem file yang sama yang dimiliki induknya saat ini:
{ 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
Anda dapat memberikan proses tampilan pribadi dari sistem filenya dengan unshare utilitas pada sistem linux terkini, meskipun fasilitas mount namespace itu sendiri telah cukup matang untuk keseluruhan seri kernel 3.x. Anda dapat memasukkan semua jenis ruang nama yang sudah ada sebelumnya dengan nsenter utilitas dari paket yang sama, dan Anda dapat mengetahui lebih lanjut dengan man .