Если ls -l
показывает вопросительный знак(?
)в качестве первого символа в строке, это означает, что тип файла не является нормальным, распознаваемым системой. Файл не обычный файл, не каталог, не символическая ссылка и т.д.
Это может произойти при монтировании не -собственной файловой системы (, например, файловой системы Solaris с дверями ). В этом случае вы можете или не можете взаимодействовать с файлом, открыв его.
Чаще всего это происходит при повреждении файловой системы. В этом случае размонтируйте файловую систему и запустите fsck
. Возможно, вы потеряли некоторые данные.
Для ls
нет возможности отображать числовое значение, которое кодирует тип файла. Если вы хотите показать числовой тип файла, вы можете использовать такие команды, как
strace -e lstat ls -ld the_file
strace -e lstat stat the_file
perl -e 'printf "0%o\n", (stat($ARGV[0]))[2]' the_file
Знание этого числового значения обычно мало полезно.
Дополнительный символ — это новая строка. Вы можете увидеть это, если сделаете, например:
echo $var | hd | tail
Как вы можете видеть в этом примере, используя команду od
, показывающую байты, она печатает новую строку:
$ echo foo | od -c -b 0000000 f o o \n 146 157 157 012 0000004
Таким образом, в этом случае wc -c
, а также wc -m
считают новую строку.
Без новой строки:
$ echo -n foo | od -c -b
0000000 f o o
146 157 157
0000003
Поэтому, если вы используете echo
, добавьте параметр -n
, чтобы он не печатал новую строку, илиprintf
:
$ printf "%s" foo | od -c -b
0000000 f o o
146 157 157
0000003