Действительно ли возможно сказать, является ли мое ядро Linux пользовательским (т.е. скомпилированный) в противоположность дистрибутиву?

Можно использовать 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 должен быть много раз быстрее, но короче и таким образом будет иметь более случайные коллизии. Его также совершенно небезопасный.

9
29.04.2015, 19:25
4 ответа

Конечно, просто проверьте, знает ли об этом 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
12
27.01.2020, 20:05

То же, что и любые другие

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

, которые указывают на ту же версию

2
27.01.2020, 20:05

Я бы сказал, что самый вообще истинный ответ - «Нет, ты не можешь». Существуют различные методы, которые могут помочь в определенных случаях, и они были предложены уже, но все, похоже, упускают, как эта ситуация на самом деле должна быть. По правде говоря, если вы используете пользовательское ядро, то ядро ​​может что-то сделать, в том числе скрывая свое присутствие или появляющееся, чтобы быть другим ядром.

Я был бы обеспокоен, если вы действительно бегаете пользовательское ядро ​​и не знали этого. Единственный надежный способ познания того, что используется ядро, тщательно отслеживает, какое ядра вы компилируете и устанавливают.

Если вы искренне не уверены, в каком ядре систему работает или какие источники это ядро ​​было построено из или где она пришла от того, я бы серьезно подумал переустановить ОС из известного хорошего изображения и быть более осторожным в будущем о том, какие ядра вы попробуйте загрузить или использовать.

0
27.01.2020, 20:05

Просто добавьте команду 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 и т.д. являются именно такими: метками, указывающими, какие команды должны выполняться в это время. Эти команды могут быть любыми , например, отправить электронное письмо или что-либо еще. Нет специального синтаксиса...

-121--123200-

Вот способ загрузки массива без использования 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 .

6
27.01.2020, 20:05

Теги

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