Как добавить время к переменной даты в Linux?

Ответ на ваш второй вопрос :UUID позволяет однозначно идентифицировать устройство.

Устройства назначаются как /dev/sda, /dev/sdbи т. д. в зависимости от порядка их обнаружения системой. В то время как диск, с которого загружается система, всегда является первым, для остальных их имя зависит от порядка обнаружения и может измениться после перезагрузки.

Кроме того, представьте, что у вас есть диски /dev/sdcи /dev/sdd, и вы физически удаляете первый диск; после перезагрузки то, что было известно как /dev/sdd, теперь называется /dev/sdc.

Это делает идентификацию устройств неоднозначной. UUID позволяют избежать двусмысленности; поскольку UUID хранится в суперблоке (для блочного устройства ), он относится к самому устройству.

-1
20.01.2020, 11:38
3 ответа

Похоже, что GNU date не может анализировать метки времени в этом формате. Начальная часть занимает год:

% date +%Y%m%d%H%M%S -d 20200120175610 --debug
date: parsed number part: (Y-M-D) 2020012017-56-10
date: input timezone: system default
date: warning: using midnight as starting time: 00:00:00
date: error: invalid date/time value:
date:     user provided time: '(Y-M-D) 2020012017-56-10 00:00:00'
date:        normalized time: '(Y-M-D) 2020012021-08-10 00:00:00'
date:                                  ---- --
date:      possible reasons:
date:        numeric values overflow;
date:        missing timezone
date: invalid date ‘20200120175610’

Если ошибки нет, то, вероятно, не произошло переполнения, но все равно не то, что вы ожидаете:

% date +%Y%m%d%H%M%S -d "20200120181002 -5minutes" --debug
date: parsed hybrid part: -5 minutes
date: input timezone: system default
date: warning: using midnight as starting time: 00:00:00
date: starting date/time: '(Y-M-D) 2020012018-10-02 00:00:00'
date: '(Y-M-D) 2020012018-10-02 00:00:00' = 63745360147926000 epoch-seconds
date: after time adjustment (+0 hours, -5 minutes, +0 seconds, +0 ns),
date:     new time = 63745360147925700 epoch-seconds
date: timezone: system default
date: final: 63745360147925700.000000000 (epoch-seconds)
date: final: (Y-M-D) 2020012018-10-01 14:55:00 (UTC)
date: final: (Y-M-D) 2020012018-10-01 23:55:00 (UTC+09)
20200120181001235500

Использовать другой формат метки времени. Я предлагаю использовать ISO -8601 и при необходимости переформатировать при выводе:

% now=$(date --iso-8601=seconds)
% past=$(date -d "$now - 5 minutes" --iso-8601=seconds)
% printf "%s\n" "$now" "$past"
2020-01-20T18:29:50+09:00
2020-01-20T18:24:50+09:00
% date -d "$past" +%Y%m%d%H%M%S
20200120182450
1
28.01.2020, 05:07

Это работает для меня, используя date (GNU coreutils) 8.26.

$ date -d "5 minutes ago" +%Y%m%d%H%M%S
20200120101533
1
28.01.2020, 05:07

Это может работать следующим образом.

past=$(date +%Y%m%d%H%M%S -d ${now} -d "-5minutes")
-1
28.01.2020, 05:07

Теги

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