如何打印出二进制文件中包含的所有可打印 ASCII 字符串(例如,长度超过四个字符)?
我用了strings -a -w file.bin >>output
。
如何打印出二进制文件中包含的所有可打印 ASCII 字符串(例如,长度超过四个字符)?
我用了strings -a -w file.bin >>output
。
我有一个命令行实用程序,可以通过在目录中运行命令来生成文本字符串:
./Utility -P
它在终端上打印输出。如何制作一个 shell 脚本,在信息对话框中显示生成的字符串,其中可以用鼠标选择并复制输出。所以我需要将信息从 shell 脚本发送到 GUI 桌面环境。我的意思是通过双击它来启动 shell 脚本,这样就不再需要每次都打开终端并输入命令了。
编辑:工作示例
#!/bin/bash
output="$( ./Utility -P )"
zenity --info --text "${output}" --icon-name=info --title "Daily test" --width=300 --height=80
Debian 上的 Imagemagick 6.9.11-60。如何在图像上打印照片的拍摄日期和时间?(在现有图像上)。我已在相机设置中设置了此选项,但它仅适用于新照片。日期位于图像元数据上。它应该是照片拍摄的实际日期,而不是保存在 PC 硬盘上的日期。
删除 linux-image-5.10.0-21-amd64、linux-image-5.10.0-23-amd64 软件包是否安全?删除一些不必要的带有依赖项的 Firefox 语言包后,系统提示我自动删除一些不再需要的包:hunspell-gl-es, hunspell-sv-se, linux-image-5.10.0-21-amd64, linux-image-5.10.0-23-amd64
。
$ sudo apt autoremove
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages will be REMOVED:
hunspell-gl-es hunspell-sv-se linux-image-5.10.0-21-amd64 linux-image-5.10.0-23-amd64
0 upgraded, 0 newly installed, 4 to remove and 0 not upgraded.
After this operation, 636 MB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 253674 files and directories currently installed.)
Removing hunspell-gl-es (1:7.1.0~rc3-3) ...
Removing hunspell-sv-se (1:7.1.0~rc3-3) ...
Removing linux-image-5.10.0-21-amd64 (5.10.162-1) ...
/etc/kernel/postrm.d/initramfs-tools:
update-initramfs: Deleting /boot/initrd.img-5.10.0-21-amd64
/etc/kernel/postrm.d/zz-update-grub:
Generating grub configuration file ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-5.10.0-25-amd64
Found initrd image: /boot/initrd.img-5.10.0-25-amd64
Found linux image: /boot/vmlinuz-5.10.0-24-amd64
Found initrd image: /boot/initrd.img-5.10.0-24-amd64
Found linux image: /boot/vmlinuz-5.10.0-23-amd64
Found initrd image: /boot/initrd.img-5.10.0-23-amd64
Found linux image: /boot/vmlinuz-5.10.0-9-amd64
Found initrd image: /boot/initrd.img-5.10.0-9-amd64
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
done
Removing linux-image-5.10.0-23-amd64 (5.10.179-3) ...
/etc/kernel/postrm.d/initramfs-tools:
update-initramfs: Deleting /boot/initrd.img-5.10.0-23-amd64
/etc/kernel/postrm.d/zz-update-grub:
Generating grub configuration file ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-5.10.0-25-amd64
Found initrd image: /boot/initrd.img-5.10.0-25-amd64
Found linux image: /boot/vmlinuz-5.10.0-24-amd64
Found initrd image: /boot/initrd.img-5.10.0-24-amd64
Found linux image: /boot/vmlinuz-5.10.0-9-amd64
Found initrd image: /boot/initrd.img-5.10.0-9-amd64
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
done
编辑:
当前包:
$ apt list -i 'linux-image*'
Listing... Done
linux-image-5.10.0-24-amd64/now 5.10.179-5 amd64 [installed,local]
linux-image-5.10.0-25-amd64/oldstable-security,now 5.10.191-1 amd64 [installed,automatic]
linux-image-5.10.0-26-amd64/oldstable,now 5.10.197-1 amd64 [installed,automatic]
linux-image-5.10.0-9-amd64/now 5.10.70-1 amd64 [installed,local]
linux-image-amd64/oldstable,now 5.10.197-1 amd64 [installed]
我想使用模式和“魔术”标头在分区转储(二进制文件)中找到配置部分的重复副本。配置部分始终以 202'0xff'
字节开始,后跟 4 字节'\x00\x00\x23\x27'
。该脚本应识别分区内配置的不同副本,并打印模式开始出现的地址(以字节为单位)。我为我的模式调整了现有的 python 脚本,但它不起作用,只是抛出错误,因为字节与字符串混合。如何修复这个脚本?
#!/usr/bin/env python3
import re
import mmap
import sys
magic = '\xff' * 202
pattern = magic + '\x00\x00\x23\x27'
fh = open(sys.argv[1], "r+b")
mf = mmap.mmap(fh.fileno(), 0)
mf.seek(0)
fh.seek(0)
for occurence in re.finditer(pattern, mf):
print(occurence.start())
mf.close()
fh.close()
错误:
$ ./matcher.py dump.bin
Traceback (most recent call last):
File "/home/eviecomp/BC2UTILS/dump_previous_profile/./matcher.py", line 13, in <module>
for occurence in re.finditer(pattern, mf):
File "/usr/lib/python3.9/re.py", line 248, in finditer
return _compile(pattern, flags).finditer(string)
TypeError: cannot use a string pattern on a bytes-like object
图案和魔法:
我需要在 Debian 11.7 上安装 Boost CRC 库。我在 Synaptic 包管理器中搜索过但没有找到。
另外,如果可能的话,我更愿意仅安装特定的库(以最小的配置),而不需要大量额外的 Boost 包和库。
我已经尝试使用 xmlstarlet 来处理单个 .xhtml 文件。
xmlstarlet fo --omit-decl --recover --html file.xhtml
此命令处理单个文件并仅在终端上打印输出。如何批量处理多个文件并将结果保存stdout
为文件?(具有相同的名称,通过为文件添加前缀或后缀)
我需要替换目录中多个 xhtml 文件中图像的路径。文件头部分如下:
<?xml version="1.0" encoding="UTF-8"?>
<html xml:lang="en-us" lang="en-us" xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:ns="http://www.w3.org/2001/10/synthesis">
<head>
试图用sed
命令来做,但它不起作用。可能由于特定的 sed 版本,但不确定。我有GNU sed 4.4
original path:
<img src="/api/v2/epubs/urn:orm:book:381260143574/files/line.jpg"
I need replace to:
<img src="graphics/line.jpg"
我试过了
sed -i '.bak' 's/\/api\/v2\/epubs\/urn:orm:book:381260143574\/files/graphics/g' '*.xhtml'
它返回
sed: -e expression #1, char 1: unknown command: `.'
也试过
sed -i ' ' 's/\/api\/v2\/epubs\/urn:orm:book:381260143574\/files/graphics/g' '*.xhtml'
it return
sed: can't read s/\/api\/v2\/epubs\/urn:orm:book:381260143574\/files/graphics/g: No such file or directory
sed: can't read *.xhtml: No such file or directory
sed
适合这个吗?
我想检查工具链用于为目标系统(ARM)构建代码的 glibc 版本。在工具链目录中我试过
strings /sysroot/lib/libc.so.6 | grep GLIBC
输出是
GLIBC_2.4
GLIBC_2.5
GLIBC_PRIVATE
__moddi3@GLIBC_2.4
__divdi3@GLIBC_2.4
__umoddi3@GLIBC_2.4
__udivdi3@GLIBC_2.4
_IO_file_xsputn@@GLIBC_2.4
getaliasent_r@@GLIBC_2.4
fgetpos64@@GLIBC_2.4
sys_siglist@@GLIBC_2.4
_IO_file_underflow@@GLIBC_2.4
gethostent_r@@GLIBC_2.4
_IO_file_init@@GLIBC_2.4
readdir64_r@@GLIBC_2.4
fclose@@GLIBC_2.4
sys_nerr@@GLIBC_2.4
_IO_file_attach@@GLIBC_2.4
getrpcbyname_r@@GLIBC_2.4
setrlimit@@GLIBC_2.4
msgctl@@GLIBC_2.4
pclose@@GLIBC_2.4
scandir64@@GLIBC_2.4
getgrgid_r@@GLIBC_2.4
pthread_cond_wait@@GLIBC_2.4
_IO_fsetpos@@GLIBC_2.4
fopen@@GLIBC_2.4
getservent_r@@GLIBC_2.4
pthread_cond_timedwait@@GLIBC_2.4
getnetbyname_r@@GLIBC_2.4
getservbyport_r@@GLIBC_2.4
pthread_cond_broadcast@@GLIBC_2.4
getspent_r@@GLIBC_2.4
getaliasbyname_r@@GLIBC_2.4
getrpcent_r@@GLIBC_2.4
versionsort64@@GLIBC_2.4
getrlimit64@@GLIBC_2.4
gethostbyname_r@@GLIBC_2.4
GLIBC_2.5
_dl_tls_get_addr_soft@@GLIBC_PRIVATE
getprotobynumber_r@@GLIBC_2.4
_rtld_global_ro@@GLIBC_PRIVATE
glob64@@GLIBC_2.4
gethostbyaddr_r@@GLIBC_2.4
_IO_file_close_it@@GLIBC_2.4
pthread_cond_signal@@GLIBC_2.4
localeconv@@GLIBC_2.4
__libc_enable_secure@@GLIBC_PRIVATE
pthread_cond_destroy@@GLIBC_2.4
_sys_errlist@@GLIBC_2.4
__libc_stack_end@@GLIBC_2.4
sched_getaffinity@@GLIBC_2.4
tmpfile@@GLIBC_2.4
fdopen@@GLIBC_2.4
_dl_argv@@GLIBC_PRIVATE
getnetbyaddr_r@@GLIBC_2.4
realpath@@GLIBC_2.4
getrpcbynumber_r@@GLIBC_2.4
fopencookie@@GLIBC_2.4
_IO_do_write@@GLIBC_2.4
fgetpos@@GLIBC_2.4
semctl@@GLIBC_2.4
fsetpos64@@GLIBC_2.4
gethostbyname2_r@@GLIBC_2.4
getprotoent_r@@GLIBC_2.4
alphasort64@@GLIBC_2.4
_IO_fdopen@@GLIBC_2.4
getgrent_r@@GLIBC_2.4
GLIBC_2.4
_IO_file_setbuf@@GLIBC_2.4
__tls_get_addr@@GLIBC_2.4
_IO_fgetpos@@GLIBC_2.4
getspnam_r@@GLIBC_2.4
pthread_attr_init@@GLIBC_2.4
sys_sigabbrev@@GLIBC_2.4
nftw64@@GLIBC_2.4
sys_errlist@@GLIBC_2.4
getpwnam_r@@GLIBC_2.4
regexec@@GLIBC_2.4
_IO_proc_close@@GLIBC_2.4
_IO_file_fopen@@GLIBC_2.4
getnetent_r@@GLIBC_2.4
fnmatch@@GLIBC_2.4
popen@@GLIBC_2.4
_IO_fclose@@GLIBC_2.4
_IO_popen@@GLIBC_2.4
_IO_fsetpos64@@GLIBC_2.4
getpwent_r@@GLIBC_2.4
_IO_file_sync@@GLIBC_2.4
_sys_siglist@@GLIBC_2.4
shmctl@@GLIBC_2.4
fsetpos@@GLIBC_2.4
_sys_nerr@@GLIBC_2.4
_IO_file_overflow@@GLIBC_2.4
sched_setaffinity@@GLIBC_2.4
readdir64@@GLIBC_2.4
_IO_fgetpos64@@GLIBC_2.4
_IO_fopen@@GLIBC_2.4
_rtld_global@@GLIBC_PRIVATE
_res@GLIBC_2.4
pthread_cond_init@@GLIBC_2.4
nftw@@GLIBC_2.4
getrlimit@@GLIBC_2.4
_IO_proc_open@@GLIBC_2.4
getprotobyname_r@@GLIBC_2.4
_IO_file_finish@@GLIBC_2.4
getgrnam_r@@GLIBC_2.4
getpwuid_r@@GLIBC_2.4
getservbyname_r@@GLIBC_2.4
GLIBC_PRIVATE
_IO_file_write@@GLIBC_2.4
_IO_file_seekoff@@GLIBC_2.4
实际使用的 glibc 版本是 2.4 还是 2.5?
我在嵌入式设备中使用busybox。内置的busybox相当有限。所以我想尝试用新的、更完整的版本替换busybox。我找到了一些关于在设备上使用串行通信和命令行替换 Busybox 的信息,这也需要 LAN 上的 http 服务器。命令部分
route add -net 192.168.15.0/24 eth0
mount -t tmpfs -o size=2M,mode=0755 tmpfs /mnt
cd /mnt
wget http://192.168.15.10/busybox-armv5l
chmod +x busybox-armv5l
这里有两点不清楚:新的busybox不会替换现有版本,而是作为附加busybox添加到另一个位置?其次,新的busybox被放入RAM中的tmpfs中:所以它没有永久保存在分区中,并且在重新启动后被删除?我对么?
哪个命令更适合删除十六进制转储文件中的空白行,将零件粘合在一起?
sed -i '/^$/d' file.log
sed -i '/^\s*$/d' file.log
或者也许awk
?
801c3fb0: 0000 2821 0c18 9741 2406 0020 afb0 0010 | ..(!...A$.. ....
801c3fc0: 2402 0014 afa2 0038 8e22 00e4 2404 0064 | $......8."..$..d
801c3fd0: 0000 2821 03a0 3021 0040 f809 27a7 0038 | ..(!..0!.@..'..8
801c3fe0: 1040 001d 0040 9021 2630 0008 0200 2021 | .@...@.!&0.... !
801c3ff0: 0c0a 8935 2405 0002 5040 0064 0000 1021 | [email protected]...!
801c4000: 0200 2021 0c0a 8935 2405 0002 0200 2021 | .. !...5$..... !
801c4010: 0040 2821 2406 0002 3c07 8074 0c0a 86a5 | .@(!$...<..t....
801c4020: 24e7 10fc 0040 2021 3c05 8074 0c1b 634c | $....@ !<..t..cL
我有一个包含字符串列表的文本文件。字符串由换行符分隔,长度相同,均为 8 位。我需要将较大的文件拆分为较小的块,其中每个块包含 4 个字符串,所有字符串的顺序与它们在大文件中的顺序相同。
所以我需要创建 16 个文件,每个文件 15 个文件 x 4 个字符串 + 1 个文件 x 2 个字符串。文件应命名为list1.txt
,list2.txt
等。
awk
使用,等工具解决此问题的最简单方法是什么sed
?
带有 ARM926EJ CPU 的板,运行嵌入式 Linux v2.6.26.5,在 NAND 闪存设备上,NAND 32MiB。Linux 位于 NAND 设备上的 MTD 分区上。
如何从串行接口备份 Linux 内核映像 (SP2Xcybertan_rom_bin)?由于没有通过 tftp 将文件从电路板传输到主机 PC 的 TFTP 选项。我可以将 nand 读取到某个内存地址,将输出转储到终端并保存,然后将十六进制转换为二进制:
nand read 0x20000000 0x80000 0x0017FF80
md.b 0x20000000 0x0017FF80
从启动过程日志:
U-Boot 2009.03 (Oct 06 2011 - 20:04:03)
Stack:->21F1EC74 U-Boot code: 21FC4D00->21FF9454 BSS:->21FFFF3B
CPU: PNX8181-2B OM6xxx-ARM926EJ-S(ARMv5TEJ) @ 221MHz(armclk), 110MHz(hclk)
Board: Vega_PNX8181_BaseStation Platform IV (LC)
I2C: ready
RAM Configuration:
Bank #0: 20000000 32 MB
NAND: 32 MiB
In: serial
Out: serial
Err: serial
Use Full Image's Kernel
Net: VLAN Mode
L2 switch present
ETN1
Hit any key to stop autoboot: 0
Loading from NAND 32MiB 3,3V 8-bit, offset 0x80000
Image Name: SP2Xcybertan_rom_bin
Created: 1970-01-01 0:00:-1 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1572736 Bytes = 1.5 MB
Load Address: 20008000
Entry Point: 20008000
## Booting kernel from Legacy Image at 20200000 ...
Image Name: SP2Xcybertan_rom_bin
Created: 1970-01-01 0:00:-1 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1572736 Bytes = 1.5 MB
Load Address: 20008000
Entry Point: 20008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK
Starting kernel ...
Uncompressing Linux.........
环境变量
firetux # printenv
baudrate=115200
ethaddr=FF:FF:FF:FF:FF:FF
netmask=255.255.255.0
ipaddr=192.168.1.1
serverip=192.168.1.100
bootfile=firetux.kernel
bootcmd1=setenv bootargs ${bootargs} && nboot 0x20200000 0 ${image_addr} && bootm 0x20200000
bootcmd2=setenv bootargs ${bootargs} && tftpboot 20200000 firetux.kernel && bootm 20200000
phymode=auto
mtdids=nand0=gen_nand
unlock=yes
verify=y
update.uboot=echo Update u-boot && tftpboot 0x20000000 nandboot.flash && nand erase 0x0 0x03ffff && nand write.jffs2 0x20000000 0x0 ${filesize}
update.kernel=echo Update kernel && tftpboot 0x20000000 uImage && nand erase 0x80000 0x180000 && nand write.jffs2 20000000 0x80000 0x180000
update.romimg=echo Update RomImage && tftpboot 0x20000000 romimage.img && nand erase 0x80000 0x13e0000&& nand write.jffs2 20000000 0x80000 ${filesize}
update.halfimg=echo Update HalfImage && tftpboot 0x20000000 recovery.img && nand erase 0x1460000 0x700000&& nand write.jffs2 20000000 0x1460000 ${filesize}
eraseenv=echo Erase Environment && nand erase 0x60000 0x20000
HwModel=Hw_Model=SPA122
bootcmd=run bootcmd1
halfImage=half_image=0
cy_boot_code_ver=1.0.1 (Oct 6 2011 - 20:04:00)
RouterMode=Router_Mode=0
stdin=serial
stdout=serial
stderr=serial
bootcmd=run bootcmd1
image_addr=0x80000
bootargs=console=ttyS1,115200n8 rootfstype=squashfs noalign half_image=0 verify=y Hw_Model=SPA122 Router_Mode=0
ethact=ETN1
bootdelay=3
内核(uImage)和romimage(romimg.img)在启动过程方面有什么区别?