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
.