PYCDLIB-EXPLORER(1)

πŸ“¦
version 1.16.0 Β· 3 versions
, in epel 10, fedora 43, fedora 44, nixos 26.05, nixpkgs unstable

✨ PYCDLIB-EXPLORER πŸ’–

okay bestie, so this is pycdlib-explorer(1) from the General Commands Manual β€” it's the little interactive bestie that lets you poke around inside ISO files and ✨remix✨ them. No cap.


🌸 NAME 🌸

pycdlib-explorer β€” a tool to examine and modify ISOs using pycdlib πŸ’…


πŸŽ€ SYNOPSIS πŸŽ€

pycdlib-explorer <iso-file>

πŸ¦‹ DESCRIPTION πŸ¦‹

So here's the vibe: this is a tool to examine and modify existing ISO files on disk. Using this tool, the files, directories, and metadata on an ISO can be examined, new files can be added, and old files can be deleted. Iconic, honestly. 🫢

But listen β€” due to the nature of the ISO standard, files or directories on the ISO cannot be modified in place in a general way. It's not a personality flaw, it's just how ISOs are. To accomplish that, you remove the file and then re-add it with new contents. That's the move. πŸŽ€

⚠️ Heads up: the commands that change the contents of the ISO only modify the in-memory copy. Your changes are written out to a new ISO file when the write command is issued. So if you rage-quit without writing, nothing happened. Periodt.

And here's the twist: pycdlib-explorer has no command-line options at all. Zero. Instead, it is controlled entirely at runtime through commands. The following section describes the available commands in pycdlib-explorer. πŸ‘‘


πŸ’– COMMANDS πŸ’–

Each of these is a whole main character. Here's the full roster, no skips, no skimming. 🧚


⭐ add_file

add_file <iso_path> <src_filename> [rr_name=<rr_name>] [joliet_path=<joliet_path>]

Add the contents of src_filename to the ISO at the location specified in iso_path. 🌈

Now the rules, and bestie these are non-negotiable:

  • If the ISO is a Rock Ridge ISO, rr_name must be specified; otherwise, it must not be.
  • If the ISO is not a Joliet ISO, joliet_path must not be specified.
  • If the ISO is a Joliet ISO, joliet_path is optional, but highly recommended to supply. fr fr, just give it.

⭐ cd

cd <iso_dir>

Change the current working directory to relative or absolute ISO path iso_dir. Just like cd but make it ISO. πŸ¦‹


⭐ cwd

cwd

Show the current working directory. That's it, that's the whole job. πŸ’…


⭐ exit

exit

Exit out of pycdlib-explorer. Bye bestie! πŸ‘‹


⭐ get

get <iso_file> <out_file>

Copy the contents of the relative or absolute ISO path iso_file into out_file. Extract that file, queen. πŸ“


⭐ help

help

Print the available commands. Use "help <cmd>" for a more detailed description of the commands, including the command-line arguments they require. It's giving built-in bestie who always knows. 😭


⭐ ls

ls

Show the contents of the current working directory. The format of the output is: TYPE(F=file, D=directory) NAME. So like, F means file, D means directory, then the name. Simple, cute, done. ✨


⭐ modify_file_in_place

modify_file_in_place <iso_path> <src_filename>

Replace the contents of the file referred to in iso_path with the contents from src_filename.

🚨 WARNING: This command modifies the opened ISO file in-place. That is not a drill. Also, the src_filename must occupy the same number of extents (2048-byte blocks) as the original file. If it doesn't, we're in trouble. πŸ’€

⭐ mkdir

mkdir <iso_path> [rr_name=<rr_name>] [joliet_path=<joliet_path>]

Make a new directory called iso_path. πŸŽ€

Same rules as before, so let's run it back:

  • If the ISO is a Rock Ridge ISO, rr_name must be specified; otherwise, it must not be.
  • If the ISO is not a Joliet ISO, joliet_path must not be specified.
  • If the ISO is a Joliet ISO, joliet_path is optional, but highly recommended to supply.

print_mode [iso9660|rr|joliet|udf]

Change which 'mode' of filenames are printed out. There are four main modes: ISO9660 (iso9660, the default), Rock Ridge (rr), Joliet (joliet), and UDF (udf). Let's break it down because this is the lore. πŸ“š

  • The original iso9660 mode only allows filenames of 8 characters, plus 3 for the extension. Vintage. Retro. Constrained.
  • The Rock Ridge extensions allow much longer filenames and much deeper directory structures. Glow up. ✨
  • The Joliet extensions also allow longer filenames and deeper directory structures, but in an entirely different context (though in most circumstances, the Joliet context will mirror the ISO9660/Rock Ridge context).
  • The UDF Bridge extensions add an entirely parallel UDF context to the ISO as well.

Any given ISO will always have ISO9660 mode, but may have any combination of Rock Ridge, Joliet, and UDF (including none of them). Mix and match, it's your world. 🌍

How to use it:

  • Running this command with no arguments prints out the current mode.
  • Passing 'iso9660' as an argument sets it to the original ISO9660 mode.
  • Passing 'rr' as an argument sets it to Rock Ridge mode.
  • Passing 'joliet' as an argument sets it to Joliet mode.
  • Passing 'udf' as an argument sets it to UDF mode.

⭐ quit

quit

Exit out of pycdlib-explorer. Same energy as exit, different spelling. Both slay. πŸ’œ


⭐ rm_file

rm_file <iso_path>

Remove the file named iso_path from the ISO. Note that this must be a file; to remove a directory, use rmdir. Don't mix them up bestie, the tool will simply not be having it. πŸ™ˆ


⭐ rmdir

rmdir <iso_path>

Remove the directory named iso_path from the ISO. Note that this must be a directory; to remove a file, use rm_file. Yes, it's the mirror image of the one above. Balance. πŸ¦‹


⭐ tree

tree

List the contents of the ISO in a tree-like format, similar to the bash tree command. Aesthetic AND functional. 🌸


⭐ write

write <out_file>

Write a valid ISO9660 file out to out_file, taking into account any changes made while running the program. This is also sometimes referred to as "mastering" the ISO. πŸ‘‘

🚨 WARNING: Note that the out_file must NOT be the same file as the input file, or the resulting ISO will not work properly. Do not do this. I am begging. 😭

🌈 SEE ALSO 🌈


πŸ‘‘ AUTHOR πŸ‘‘

Chris Lalancette <clalancette@gmail.com> β€” the legend who made all of this happen. 🫢


and that's the whole page, bestie!! πŸ’– this was pycdlib-explorer, part of the General Commands Manual, dated Jan 2018 ✨ go forth and master some ISOs, you've got this πŸ’…πŸŽ€πŸ¦‹