Тестируется на этой Linux-системе. Обычный способ проверить время файла — оболочка :
.[ file1 -nt file2 ] && echo "yes"
Кажется, работает с секундами. Это, которое будет касаться файлов с разницей во времени менее секунды, не обнаружит эту разницу :
.$ touch file2; sleep 0.1; touch file1; [ file1 -nt file2 ] && echo "yes"
Чтобы подтвердить проблему (время после точки равно наносекундам):
$ ls --time-style=full-iso -l file?
-rw-r--r-- 1 user user 0 2017-06-23 01:37:01.707387495 -0400 file1
-rw-r--r-- 1 user user 0 2017-06-23 01:37:01.599392538 -0400 file2
file1
(немного )новее, чем file2
.
Теперь проблема заключается в правильной обработке значения времени.
Одним из решений является использование форматированного вывода ls:
$ ls --time-style=+%s.%N -l file?
-rw-r--r-- 1 user user 0 1498196221.707387495 file1
-rw-r--r-- 1 user user 0 1498196221.599392538 file2
Извлечение времени в две переменные (без точки):
$ file1time=$(ls --time-style=+%s%N -l file1 | awk "{print(\$6)}")
$ file2time=$(ls --time-style=+%s%N -l file2 | awk "{print(\$6)}")
И сравните время (раз с наносекундами, едва умещающимися в 64-битном значении. Если ваша система не использует 64-разрядную версию, это сравнение не будет выполнено ):
.$ [ $file1time -gt $file2time ] && echo "yes"
yes
Это показывает, что file1
новее, чем file2
Если ls
не имеет нужного формата, вы можете попробовать stat.
$ stat file1
File: file1
Size: 0 Blocks: 0 IO Block: 4096 regular file
Device: 805h/2053d Inode: 9180838 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2017-06-23 01:37:01.707387495 -0400
Modify: 2017-06-23 01:37:01.707387495 -0400
Change: 2017-06-23 01:37:01.707387495 -0400
Birth: -
Если выходные данные показывают наносекунды, нам потребуется дата для анализа (и форматирования )времени.
$ stat --printf='%y\n' file1
2017-06-23 01:37:01.707387495 -0400
$ date +'%s%N' -d "$(stat --printf='%y\n' file1)"
1498196221707387495
Остальное то же самое, присвоить результаты файлов файл1 и файл2 двум переменным и численно сравнить их.
Вы можете использовать man <section_number> <package_name>
, т.е.man 2 socket
Или man <package_name>.<section_number>
, т.е. man socket.2
.
Изman man
:
man man.7
Display the manual page for macro package man from section 7.
А также изman man
:
man [[section] page[.section]...]
Раздел 2 относится к системным вызовам. Чтобы прочитать справочную страницу в этом разделе, вы добавляете.2 к системному вызову. Итак, руководство по сокету (2 )можно найти, введя:
man socket.2
См. также:
$ man man