Answers:
PowerISO刚刚发布了他们的ISO编辑软件的Linux版本。与ISO Master一样,它保留ISO是否可启动的状态。但是,它允许您直接保存到原始文件(首先将其删除),因此无需为两个文件都拥有足够的磁盘空间。我还发现它的界面比ISO Master更加易于使用和直观。
常见的解决方法是解压缩iso文件,对其进行修改,然后再次打包。就像dv3500ea的答案中提到的那样,“ ISO Master”看起来是一个很好的前端。
如果:
那么,这个答案适合您!
总之,我们将用所需的文件替换isofs文件系统中的现有文件。我们所需的文件必须小于现有(目标)文件,并且尾随空格(或垃圾)必须可接受。这实际上只需要两个命令,但是要小心:一个错字可能会完全破坏目标文件系统,甚至覆盖源文件。备份是您的朋友!
就我而言,我想将脚本存储在实时启动中,因此不必每次都重新键入它。脚本位于script.py
,我的目标(USB记忆棒)位于/dev/sdc
。脚本的大小为202字节,因此我们的第一步是查找大于202字节的文件,以便将其覆盖。将其安装在后/mnt
,我在找到了一个合适的文件/mnt/info.txt
。
我们不能只是覆盖info.txt
挂载点,它会抱怨说这是一个只读文件系统。但是,我们是根,所以让我们向他们展示这意味着什么!我们需要找出info.txt
文件系统上的位置。找到一些(可能是)唯一的字符串(info.txt
例如)This is the official distribution CD of X.
,然后在磁盘上搜索它:
$ sudo strings -a -t d /dev/sdc | grep 'CD of X.'
2573588480 This is the official distribution CD of X. See INSTALL for how to [...]
另外,也可以使用grep来完成,这要快得多,但是您需要从头开始指定它:$ sudo grep -oba 'This is ...' /dev/sdc
。
现在我们知道它的位置了,我们只需要用文件替换这些字节即可:
$ sudo dd if=script.py of=/dev/sdc conv=notrunc bs=1 seek=2573588480 count=202
这行:
if
)复制到输出文件(of
),并且并不关心输出文件实际上是设备,因为“一切都是文件”。conv=notrunc
告诉它不要截断输出文件,因为我们只想覆盖几个字节,而不要从某个位置开始覆盖文件。bs=1
将块大小设置为1。通常需要4k或更大的块大小,但这既避免了必须做(内联)数学运算,又让我们指定了与字节精确的位置。seek=N
力求在输出文件中的某一点(注意,seek=N
是从不同的skip=N
,因为skip
跳过输入文件字节!)。当然,我们将其设置为目标文本所在的位置。count=N
仅复制这么多字节。我认为可以将其省略,因为它将注意到输入文件的末尾,但是为了确定起见,我将其保留了下来。瞧,文件被覆盖了!
但是,等等,目标文件比我们的脚本大,因此在USB记忆棒上,文件现在类似于:“如果run()blah; blah(); yright 2007 X Inc.,则可以。” 有尾随的垃圾。解决此问题的两种方法:使输入文件更长(添加空格),或在末尾添加注释符号。请注意,许多编辑器都在末尾添加换行符,因此您可能希望将其设置count=
为N-1
字节(如果文件现在为203字节,并且您注意到最后一个字节是换行符,则将count设置为202)。您可以使用xxd script.py | tail
并检查最后一个字节是否为0a
(或,在奇怪的情况下为0d
)来检查文件中是否有换行符。
对于.iso
文件来说,该过程是相同的,只是在精神上替换/dev/sdc
为your.iso
。
请注意,当您检查装载点中的目标以查看其是否工作时,strings
由于文件可能仍在读取缓存中,因此可能需要再次使用(这次是搜索脚本)。