def parse_list_line_unix(self, b):
s = b.decode(encoding=self.encoding).rstrip()<EOL>info = {}<EOL>if s[<NUM_LIT:0>] == "<STR_LIT:->":<EOL><INDENT>info["<STR_LIT:type>"] = "<STR_LIT:file>"<EOL><DEDENT>elif s[<NUM_LIT:0>] == "<STR_LIT:d>":<EOL><INDENT>info["<STR_LIT:type>"] = "<STR_LIT>"<EOL><DEDENT>elif s[<NUM_LIT:0>] == "<STR_LIT:l>":<EOL><INDENT>info["<STR_LIT:type>"] = "<STR_LIT>"<EOL><DEDENT>else:<EOL><INDENT>info["<STR_LIT:type>"] = "<STR_LIT>"<EOL><DEDENT>info["<STR_LIT>"] = self.parse_unix_mode(s[<NUM_LIT:1>:<NUM_LIT:10>])<EOL>s = s[<NUM_LIT:10>:].lstrip()<EOL>i = s.index("<STR_LIT:U+0020>")<EOL>info["<STR_LIT>"] = s[:i]<EOL>if not info["<STR_LIT>"].isdigit():<EOL><INDENT>raise ValueError<EOL><DEDENT>s = s[i:].lstrip()<EOL>i = s.index("<STR_LIT:U+0020>")<EOL>info["<STR_LIT>"] = s[:i]<EOL>s = s[i:].lstrip()<EOL>i = s.index("<STR_LIT:U+0020>")<EOL>info["<STR_LIT>"] = s[:i]<EOL>s = s[i:].lstrip()<EOL>i = s.index("<STR_LIT:U+0020>")<EOL>info["<STR_LIT:size>"] = s[:i]<EOL>if not info["<STR_LIT:size>"].isdigit():<EOL><INDENT>raise ValueError<EOL><DEDENT>s = s[i:].lstrip()<EOL>info["<STR_LIT>"] = self.parse_ls_date(s[:<NUM_LIT:12>])<EOL>s = s[<NUM_LIT:12>:].strip()<EOL>if info["<STR_LIT:type>"] == "<STR_LIT>":<EOL><INDENT>i = s.rindex("<STR_LIT>")<EOL>link_dst = s[i + <NUM_LIT:4>:]<EOL>link_src = s[:i]<EOL>i = -<NUM_LIT:2> if link_dst[-<NUM_LIT:1>] == "<STR_LIT>" or link_dst[-<NUM_LIT:1>] == "<STR_LIT>" else -<NUM_LIT:1><EOL>info["<STR_LIT:type>"] = "<STR_LIT>" if link_dst[i] == "<STR_LIT:/>" else "<STR_LIT:file>"<EOL>s = link_src<EOL><DEDENT>return pathlib.PurePosixPath(s), info<EOL>
Attempt to parse a LIST line (similar to unix ls utility).

:param b: response line
:type b: :py:class:`bytes` or :py:class:`str`

:return: (path, info)
:rtype: (:py:class:`pathlib.PurePosixPath`, :py:class:`dict`)