The meaning of the numbers in index0, index1, etc do not necessarily correspond to levels; they're just numbered. If you want to know what level cache it is, look at the level file. 1 means L1, 2 means L2, 3 means L3. They tend to be numbered lowest level to highest, but I don't know if there's any requirement of this.
To know whether L2 is shared, first determine which cache is L2. Then look at the shared_cpu_list for that cache. It will be startnumber-endnumber of the sharing. (I don't know what it looks like when it isn't shared because my computer only has shared caches, but I'd guess either just a single number or something like "0-0".) For example, on my quad-core, hyperthreaded Sandy Bridge, if I look at the L2's shared_cpu_list, I see "2-3", which tells me that it is shared with cpu2 (which is actually the same physical CPU because of hyperthreading, so it's not really a shared cache).
For my L3 cache, of which there is only one for all caches, I see "0-7", so I assume that means it's shared for all CPU's 0 through 7. I've never seen an underscore in one of those files though.
A few other meanings:
- type-"Instruction" means it is only used to cache instructions (code), "Data" means it is only used to store data (variables, etc), and "Unified" means there is no such separation and it may store either.
- coherency_line_size-how many bytes are in a cache line, which is the unit in which memory is read and written to/from main memory.
- ways_of_associativity-how many different cache slots a given line can be mapped to. Higher is better (it means you're less likely to have a working set that is smaller than cache but can't simultaneously be in cache because lots of data wants to be in the same cache lines), but is hard to implement, especially in the lower-level caches that have to be faster. 8 is pretty common for L1.