文字列の一部の比較

文字列の一部の比較

Linux初心者を助けてください!

2つの異なる画像のlsinitrd出力を比較したいと思います。たとえば、一部の行は次のようになります。

-rw-r--r--   1 root     root         2146 Aug  1 01:00 usr/lib/modules/5.18.12-1-default/kernel/lib/crypto/libchacha.ko.zst

-rw-r--r--   1 root     root         2165 Oct 14 16:58 usr/lib/modules/6.0.7-1-default/kernel/lib/crypto/libchacha.ko.zst

どちらも同じファイルの別のバージョンを参照しているので、そのバージョンを無視して一方の出力にはありますが、他の出力には欠落しているファイルだけを考慮したいと思います。

どうすればいいですか?

ベストアンサー1

次のように見えます。

v1="5.18.12-1-default"
v2="6.0.7-1-default"
diff \
  <(lsinitrd -k "$v1" | grep ' usr/lib/modules/' | sed -e 's#usr/lib/modules/[^/]*#usr/lib/modules/version#' -e 's/^.* //') \
  <(lsinitrd -k "$v2" | grep ' usr/lib/modules/' | sed -e 's#usr/lib/modules/[^/]*#usr/lib/modules/version#' -e 's/^.* //') \
| grep '^[<>]'

user で始まるrootか、lsinitrd各コマンドの前にsudocommand を付けます。

私のバージョンでは、次のような結果が得られます。

> usr/lib/modules/version/kernel/drivers/net/mii.ko.xz
> usr/lib/modules/version/kernel/drivers/net/usb
> usr/lib/modules/version/kernel/drivers/net/usb/r8152.ko.xz
> usr/lib/modules/version/kernel/drivers/net/usb/usbnet.ko.xz
> usr/lib/modules/version/kernel/drivers/net/veth.ko.xz
> usr/lib/modules/version/kernel/net/802
> usr/lib/modules/version/kernel/net/802/stp.ko.xz
> usr/lib/modules/version/kernel/net/bridge
> usr/lib/modules/version/kernel/net/bridge/bridge.ko.xz
> usr/lib/modules/version/kernel/net/llc
> usr/lib/modules/version/kernel/net/llc/llc.ko.xz

修正する

バージョンIDを出力に含めるには、grepコマンドとその引数を次のように置き換えますawk

awk -v v1="$v1" -v v2="$v2" '$0 !~ /^[<>]/ {next} /^>/ {sub("/version/", "/" v1 "/"); print} /^</ {sub("/version/", "/" v2 "/"); print}'

私の結果:

> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/drivers/net/mii.ko.xz
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/drivers/net/usb
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/drivers/net/usb/r8152.ko.xz
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/drivers/net/usb/usbnet.ko.xz
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/drivers/net/veth.ko.xz
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/net/802
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/net/802/stp.ko.xz
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/net/bridge
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/net/bridge/bridge.ko.xz
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/net/llc
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/net/llc/llc.ko.xz

おすすめ記事