Как действительно касается работы-t внутренне?

ntop может дать Вам точно, что Вы просите. Это собирает данные обо всем трафике, текущем через Вашу сеть (и может собрать данные из других сетей, если им настроили устройство для отправки netfow данных в систему).

Это покажет Вам каждый хост в сети, с тем, сколько пропускной способности они использовали. Это позволит Вам выполнить развертку в каждый хост и видеть, какой трафик они генерируют и кого. Это позволит Вам видеть в настоящее время устанавливаемые соединения TCP. Можно в значительной степени заблудиться в течение многих дней, пройдя данные, которые это может дать Вам.

Программа может быть пожирателем ресурсов памяти, тем не менее, в зависимости от того, как у Вас есть установка опций.

20
08.06.2013, 02:33
3 ответа

touch вызовы utimes системный вызов для установки времени изменения файла и его времени доступа. В некоторых системах, вместо utimes, это открывает файл и затем устанавливает времена файла через дескриптор, например, с utimensat в соответствии с Linux.

Вы видите как touch работы над Вашей системой путем рассмотрения системных вызовов это делает. В соответствии с Linux, используйте strace, например. strace touch -d '1 hour ago' foo.

Где найти, что исходный код зависит от Вашей операционной системы. Версия GNU находится в coreutils, существует версия в основном исходном дереве любого BSD, существует версия в BusyBox, в Minix, и т.д.

23
27.01.2020, 19:43

Иногда Вам даже не нужен исходный код. Использовать strace.

$ strace touch -t 201212121212 foobar
execve("/usr/bin/touch", ["touch", "-t", "201212121212", "foobar"], [/* 61 vars */]) = 0
[...] lots of noise [...]
open("foobar", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
dup2(3, 0)                              = 0
close(3)                                = 0
utimensat(0, NULL, {{1355310720, 0}, {1355310720, 0}}, 0) = 0
close(0)                                = 0
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

Почему привет там, utimensat().Кем Вы работаете?

$ man utimensat

NAME
   utimensat, futimens - change file timestamps with nanosecond precision

Таким образом, существует функция, которая изменяет метки времени файла, и touch использование это для обновления метки времени файла. И это - то, как это работает внутренне.

28
27.01.2020, 19:43

Вот то, как это работает над Солярисом. truss используется вместо strace который является совершенно другой командой здесь.

Как под Гну/Linux, utimensat используемый системный вызов.

$ truss -vall -u a.out -f touch -t 1306080000 z
4160:   execve("/usr/bin/touch", 0xF0770FC0, 0xF0770FD4)  argc = 4
...
4160/1@1:       -> main(0x4, 0xf0770fc0, 0xf0770fd4, 0xf0770f7c)
...
4160/1@1:           -> atoi_for2(0xf0771131, 0x0, 0x24, 0xebc95be0)
4160/1@1:           <- atoi_for2() = 13
4160/1@1:           -> atoi_for2(0xf0771133, 0x0, 0x24, 0xebc95be0)
4160/1@1:           <- atoi_for2() = 6
4160/1@1:           -> atoi_for2(0xf0771135, 0x0, 0x24, 0xebc95be0)
4160/1@1:           <- atoi_for2() = 8
4160/1@1:           -> atoi_for2(0xf0771137, 0x0, 0x24, 0xebc95be0)
4160/1@1:           <- atoi_for2() = 0
4160/1@1:           -> atoi_for2(0xf0771139, 0x0, 0x24, 0xebc95be0)
4160/1@1:           <- atoi_for2() = 0
4160/1@1:         <- parse_time() = 0x51b257e0
4160/1:         stat64("z", 0xF0770ED0)                         = 0
4160/1:             d=0x08A00002 i=75783706 m=0100644 l=1  u=100   g=10    sz=0
4160/1:                 at = Jun  8 01:48:08 CEST 2013  [ 1370648888.022270973 ]
4160/1:                 mt = Jun  8 01:48:08 CEST 2013  [ 1370648888.022270973 ]
4160/1:                 ct = Jun  8 01:48:08 CEST 2013  [ 1370648888.022273810 ]
4160/1:             bsz=4096  blks=0     fs=tmpfs
4160/1:         utimensat(AT_FDCWD, "z", 0xF0770F60, 0)         = 0
4160/1:                 at = Jun  8 00:00:00 CEST 2013  [ 1370642400.000000000 ]
4160/1:                 mt = Jun  8 00:00:00 CEST 2013  [ 1370642400.000000000 ]
4160/1@1:       <- main() = 0
4160/1@1:       -> _fini()
4160/1@1:       <- _fini() = 0xebcc0140
4160/1:         _exit(0)
10
27.01.2020, 19:43

Теги

Похожие вопросы