Можно использовать zcmp
или zdiff
как mreithub предполагает в его комментарии (или команда Kevin, которая подобна). Они будут относительно неэффективны, поскольку они на самом деле распаковывают оба файла и затем выдают их к cmp
или diff
. Если Вы просто хотите ответить, "они то же", Вы хотите cmp
, это будет намного быстрее.
Ваш подход с md5sum
совершенно хорошо, но необходимо взять MD5 перед выполнением gzip
. Затем сохраните его в файле вместе с получающимся .gz
файл. Можно затем сравнить файл легко, прежде, чем сжать его. Если имя является тем же, md5sum -c
сделает это для Вас.
$ mkdir "backup1"
$ cd backup1
$ echo "test" > backup-file
$ md5sum backup-file > backup-file.md5
$ gzip -9 backup-file
И следующее резервное копирование:
$ mkdir "backup2"
$ cd backup2
$ echo "test" > backup-file
$ md5sum -c ../backup1/backup-file.md5
backup-file: OK
Таким образом, это не изменилось. OTOH, изменили его:
$ echo "different" > backup-file
$ md5sum -c ../backup1/backup-file.md5
backup-file: FAILED
md5sum: WARNING: 1 computed checksum did NOT match
Если Вы передаете --quiet
к нему он просто даст Вам код выхода. 0 для подобранного, не0 для отличавшегося.
MD5 довольно быстр, но не ослепительно так. MD4 (openssl md4
является лучшим, Вы входите в командную строку, я верю), приблизительно вдвое более быстро (ни это, ни MD5 не безопасны, но оба о, чем коллизия, стойкая, когда никто не пытается ниспровергать их). SHA-1 (sha1sum
) более безопасно, но медленнее; SHA-256 (sha256sum
) безопасно, но еще медленнее все еще. CRC32 должен быть много раз быстрее, но короче и таким образом будет иметь более случайные коллизии. Его также совершенно небезопасный.
Конечно, просто проверьте, знает ли об этом dpkg
.
Сначала проверьте версию ядра, которую вы запускаете.
uname -a
Linux orwell 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux
Затем скажите dpkg
для поиска файла образа ядра в базе данных dpkg
.
dpkg -S /boot/vmlinuz-3.2.0-4-amd64
linux-image-3.2.0-4-amd64: /boot/vmlinuz-3.2.0-4-amd64
Или, лучше, используйте dlocate
из пакета dlocate
. dlocate
сначала строит кэш из базы данных dpkg
и использует его. Так что это быстро.
dlocate /boot/vmlinuz-3.2.0-4-amd64
linux-image-3.2.0-4-amd64: /boot/vmlinuz-3.2.0-4-amd64
Наконец, проверьте, что архивы Debian содержат этот пакет.
apt-cache policy linux-image-3.2.0-4-amd64
linux-image-3.2.0-4-amd64:
Installed: 3.2.68-1+deb7u1
Candidate: 3.2.68-1+deb7u1
Version table:
*** 3.2.68-1+deb7u1 0
500 http://security.debian.org/ wheezy/updates/main amd64 Packages
100 /var/lib/dpkg/status
3.2.65-1 0
500 http://httpredir.debian.org/debian/ wheezy/main amd64 Packages
Если нет, то это пользовательский пакет. Конечно, если dpkg не знает о файле образа, то ваше ядро вообще не является частью пакета, а было скомпилировано локально.
Обратите внимание, что apt
может отличить пакет, находящийся в архиве Debian от локально скомпилированного пакета с таким же именем. Я думаю, что он проверяет md5sum пакета, но я забываю подробности того, как он это делает. Двоичные пакеты содержат информацию о хэшах, см. внизу apt-cache show linux-image-3.2.0-4-amd64
, например,
Package: linux-image-3.2.0-4-amd64
Source: linux
Version: 3.2.68-1+deb7u1
Installed-Size: 105729
[...]
Size: 23483788
MD5sum: f9736f30f8b68ae79b2747d8a710ce28
SHA1: 64bfde903892801dccd04b52b12316901a02cd96
SHA256: 775814b3eff4a964b593c0bdeaac20587a4e3ddb1257a9d2bfcf1e9d3b9bfd15
То же, что и любые другие
sudo apt-cache policy linux-generic
, это версия, установленная, хотя управляющая пакета и
uname -r
сравнивают версии
для меня его
linux-generic:
Installed: 3.19.0.15.14
Candidate: 3.19.0.15.14
и
3.19.0-15-generic
, которые указывают на ту же версию
Я бы сказал, что самый вообще истинный ответ - «Нет, ты не можешь». Существуют различные методы, которые могут помочь в определенных случаях, и они были предложены уже, но все, похоже, упускают, как эта ситуация на самом деле должна быть. По правде говоря, если вы используете пользовательское ядро, то ядро может что-то сделать, в том числе скрывая свое присутствие или появляющееся, чтобы быть другим ядром.
Я был бы обеспокоен, если вы действительно бегаете пользовательское ядро и не знали этого. Единственный надежный способ познания того, что используется ядро, тщательно отслеживает, какое ядра вы компилируете и устанавливают.
Если вы искренне не уверены, в каком ядре систему работает или какие источники это ядро было построено из или где она пришла от того, я бы серьезно подумал переустановить ОС из известного хорошего изображения и быть более осторожным в будущем о том, какие ядра вы попробуйте загрузить или использовать.
Просто добавьте команду ip
в качестве команды up
в /etc/network/interfaces
(нет необходимости преобразовывать в route
, post-up
является псевдонимом для up
):
allow-hotplug eth0
iface eth0 inet static
address 10.1.10.100
netmask 255.255.255.0
gateway 10.1.10.1
up ip route add 192.168.50.0/24 via 10.1.10.100 dev eth0
Нет необходимости в down
, так как при отключении интерфейса любой
Кроме того: вы добавляете маршрут к другой сети через локальный IP-адрес, который только что был поднят? Используется ли эта система в качестве шлюза?
EDIT:
Метки up
, down
, pre-up
и т.д. являются именно такими: метками, указывающими, какие команды должны выполняться в это время. Эти команды могут быть любыми , например, отправить электронное письмо или что-либо еще. Нет специального синтаксиса...
Вот способ загрузки массива без использования eval
. Он не использует конструкцию (data)
- вместо этого он использует входной последовательностью с выбором разделителя - в примере используется |
i=aaa
IFS='|' read -a "$i" <<<"1|2 with spaces"
printf '%s\n' "${aaa[@]}"
Output:
1
2 with spaces
-121--123177- Минимально, uname -r
даст керальную версию, такую как 3,18,6
. Однако при компиляции ядра может быть сконфигурирован и присоединен к нему дополнительный ряд, и distros обычно делают это, чтобы указать свой собственный уровень патча (после тире) и вкус, такой как 3,18 .6-32-generic
.
Это одна подсказка; очевидно, что использование собственной последовательности при создании пользовательского ядра может быть другим.
uname -v
дает последовательность, которая по умолчанию является чем-то подобным
#4 SMP PREEMPT Mon Mar 9 13:55:25 EDT 2015
Число является произвольным в том смысле, что это число раз, когда это ядро было построено с использованием определенного исходного дерева без сброса дерева - это может быть полезно, когда вы создаете свой собственный. SMP
указывает многозадачное (т.е. не в реальном времени) ядро, и PREEMPT является еще одним вариантом конфигурации, связанным с «моделью прерывания» планировщика. Но большая подсказка здесь, вероятно, в то время, когда она была построена. Это может быть использовано для сопоставления с временной меткой изменения/изменения в самом ядре с учетом того, что может быть изменено, например, с помощью touch
. Например, stat
на этом ядре выглядит так:
File: ‘3.19-goldilocksSpecial’
Size: 6858880 Blocks: 13400 IO Block: 4096 regular file
Device: 801h/2049d Inode: 3156605 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-02-15 15:32:29.000000000 -0500
Modify: 2015-03-03 13:55:21.000000000 -0500
Change: 2015-03-03 14:02:26.767045553 -0500
Birth: -
Что в значительной степени соответствует Mon Mar 9 13:55:25 EDT 2015
.