/var/log/apt/history.log*
содержит журналы всех действий apt
, включая имя пользователя, запрашивающего изменение (, что полезно, только если вы используете sudo
, а не root
напрямую ).
Уже есть некоторая интеграция между rkhunter
и apt
; см. /etc/apt/apt.conf.d/90rkhunter
в вашей системе. Если вы хотите, чтобы это было включено, вам нужно изменить APT_AUTOGEN
в /etc/default/rkhunter
на true
.
Вы также можете добавить свои собственные задания до -или после -установки, например. для запуска сканирования непосредственно перед установкой...
Часть вашего вопроса о «передовой практике» слишком широка для этого места. В конечном счете, некоторые утверждают, что вы должны вносить изменения в свои системы только с помощью такого инструмента, как Ansible, который предоставляет свои собственные журналы всех изменений.
Ведущий 0 заставляет Bash интерпретировать значение как восьмеричное значение ; Восьмеричное число 012 равно десятичному числу 10, поэтому вы получите 11.
Чтобы принудительно использовать десятичную дробь, добавьте 10#
(, если число не имеет ведущего знака):
BN=10#$(cat Build.number)
echo $((++BN)) > Build.number
Чтобы напечатать число, используя не менее трех цифр, используйте printf
:
printf "%.3d\n" $((++BN)) > Build.number
bash
обрабатывает константы, начинающиеся с 0
, как восьмеричные числа в своих арифметических выражениях, поэтому 011
на самом деле 9
.
На самом деле это требование POSIX.
Некоторые другие оболочки, такие как mksh
или zsh
, игнорируют его (, если только он не находится в режиме, совместимом с POSIX ), поскольку он гораздо чаще мешает, чем полезен.
С ksh93
, BN=011; echo "$(($BN))"
выводит 9
, но echo "$((BN))"
выводит 11.
В bash
вы можете использовать BN=$((10#$(<Build.number)))
, что должно работать, если число не начинается с -
или +
.
В любой оболочке POSIX вы можете запретить считать число восьмеричным, удалив его начальные нули с помощью комбинации форм раскрытия ${var#prefix}
и ${var%%suffix}
:
BN=001002; BN=$(( ${BN#${BN%%[!0]*}} + 1 )); echo "$BN"
1003
В оболочках, поддерживающих синтаксис ${var//pat/repl}
, вы также можете сделать это, добавив перед ним 1
и вычтя его из10^{number_of_digits}
:
BN=000012; BN=$(( 1$BN - 1${BN//?/0} )); echo "$BN"; BN=$((BN+1)); echo "$BN"
12
13
Это работает в bash
, zsh
, ksh93
, mksh
и yash
.
В bash
, ksh93
и zsh
(, но не в yash
и mksh
), вы также можете использовать фортранский **
оператор (возведения в степень):
BN=000012; BN=$(( 1$BN - 10**${#BN} ))
Вот функция для увеличения числовой строки. Он наблюдает ведущие нули и пытается сохранить количество цифр. Он не использует никаких переменных, поэтому не требует каких-либо расширений оболочки для объявления локальных переменных и не загрязняет пространство имен переменных :
.# $1 -- decimal string, possibly with leading zeros or sign
# $2 -- integer increment, no leading zeros.
incnumstr()
{
if [ $1 -lt 0 ] ; then
set -- $(incnumstr ${1#-} $((- $2)))
[ $1 -le 0 ] && printf "%s" ${1#-} \
|| printf "%s" -$1
return
fi
set -- ${1#-} $2 # strip leading minus from zero
[ $1 -eq 0 ] && printf "%s%0.*d" "$3" ${#1} $2 \
|| printf "%s%0.*d" "$3" ${#1} $(( ${1#${1%%[1-9]*}} + $2 ))
}
Интерактивные тесты:
$ echo $(incnumstr 0 0)
0
$ echo $(incnumstr -0 0)
0
$ echo $(incnumstr 0 1)
1
$ echo $(incnumstr 0 -1)
-1
$ echo $(incnumstr 00 1)
01
$ echo $(incnumstr 00 -1)
-01
$ echo $(incnumstr -10 10)
00
$ echo $(incnumstr -10 11)
01
$ echo $(incnumstr -10 20)
10
$ echo $(incnumstr -10 99)
89
$ echo $(incnumstr -10 110)
100
$ echo $(incnumstr 100 -90)
010
$ echo $(incnumstr 100 -99)
001
$ echo $(incnumstr 100 -100)
000
$ echo $(incnumstr 100 -101)
-001
$ echo $(incnumstr 100 -1234)
-1134
$ echo $(incnumstr -0000 0)
0000
$ echo $(incnumstr -0000 1)
0001
$ echo $(incnumstr -0000 -2)
-0002