Bir işlemin açılan dosyalarını gerçek zamanlı olarak nasıl izlerim?


41

Linux makinemde lsof o anda kullanarak bir sürecin açık dosyalarını görebildiğimi biliyorum . Bununla birlikte, bir işlem bir dosyayı çok hızlı açabilir, değiştirebilir ve kapatabilir watch; "linux'taki açık işlem dosyalarını izleme (gerçek zamanlı)" bölümünde açıklandığı gibi standart kabuk komut dosyası (örn. ) Kullanarak izleyerken göremeyeceğim .

Bu yüzden, bir süreci denetlemenin basit bir yolunu aradığımı ve zaman içinde ne yaptığını göreceğimi düşünüyorum. Hangi ağ bağlantılarının yapılmaya çalışıldığını görmek ve işlemin denetim başlamadan başlamadan önce vaktinden önce denetimin başlaması da mümkündür.

İdeal olarak, bunu yapmak istiyorum:

sh $ audit-lsof /path/to/executable
4530.848254 OPEN  read  /etc/myconfig
4530.848260 OPEN  write /var/log/mylog.log
4540.345986 OPEN  read  /home/gert/.ssh/id_rsa          <-- suspicious
4540.650345 OPEN  socket TCP ::1:34895 -> 1.2.3.4:80    |
[...]
4541.023485 CLOSE       /home/gert/.ssh/id_rsa          <-- would have missed
4541.023485 CLOSE socket TCP ::1:34895 -> 1.2.3.4:80    |   this when polling

straceHer sistem çağrısını görememek ve bazı bayraklar kullanmak mümkün mü?


Yanıtlar:


50

İle çalışan

strace -e trace=open,close,read,write,connect,accept your-command-here

Muhtemelen yeterli olacaktır.

-oİşlem stderr'e yazdırabiliyorsa, strace çıktısını konsoldan başka bir yere koymak için bu seçeneği kullanmanız gerekir . İşleminiz çatal ise, -fya da ihtiyacınız olacak -ff.

Oh, siz de isteyebilirsiniz -t, böylece aramaların ne zaman yapıldığını görebilirsiniz .


Not Eğer süreç ne bağlı işlev çağrısı listesini düzenlemek gerekebilir - Ben eklemek için gerekli getdentskullanarak daha iyi örneği almak için, örneğin ls:

$ strace -t -e trace=open,close,read,getdents,write,connect,accept ls >/dev/null
...
09:34:48 open("/etc/ld.so.cache", O_RDONLY) = 3
09:34:48 close(3)                       = 0
09:34:48 open("/lib64/libselinux.so.1", O_RDONLY) = 3
09:34:48 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@V\0\0\0\0\0\0"..., 832) = 832
09:34:48 close(3)                       = 0
...
09:34:48 open("/proc/filesystems", O_RDONLY) = 3
09:34:48 read(3, "nodev\tsysfs\nnodev\trootfs\nnodev\tb"..., 1024) = 366
09:34:48 read(3, "", 1024)              = 0
09:34:48 close(3)                       = 0
09:34:48 open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
09:34:48 close(3)                       = 0
09:34:48 open(".", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
09:34:48 getdents(3, /* 5 entries */, 32768) = 144
09:34:48 getdents(3, /* 0 entries */, 32768) = 0
09:34:48 close(3)                       = 0
09:34:48 write(1, "file-A\nfile-B\nfile-C\n", 21) = 21
09:34:48 close(1)                       = 0
09:34:48 close(2)                       = 0

1
Bu doğru yöne gidiyor, teşekkürler! Daha kullanıcı dostu bir çıktı ister misiniz, ancak işi yapar. Bunun için daha çok benzeyen bir arayüze sahip bir araç yazmak için zaman alabilir. İkilinin hareketlerini gerçek zamanlı olarak incelemek için bir hemşire temelli veya 'üst' benzeri araç bulunabileceğini umuyordum.
gertvdijk

Nasıl görünmesini istersin? Strace çıktısını dostça birşeye sokmak muhtemelen mümkün.
İşe yaramaz

-oçıktıyı dosya (lar) a zorlamak için kesinlikle kullanmak istiyorsunuz . Ardından tail -F strace.output"canlı" bir güncelleme almak için başka bir terminalde koşabilirsiniz .
peterph

4
Seçeneği straceile çalışan bir işlem de ekleyebilirsiniz -p PID.
Frank Breitling

-y"[P] dosya tanımlayıcı argümanları ile ilişkilendirilmiş
ray
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.