Есть ли причина, по которой "." и ".." появляются после выполнения ls -a?

Esc(i. е.^[)не является клавишей типа Shift -, такой как Shift , Ctrl , Alt или Meta . Эти последние клавиши изменяют код символа, отправленный другой клавишей , отправленной при нажатии в комбинации с . Например, символ, отправленный с помощью ] (]), отличается от символа, отправленного с помощью Ctrl + ] (^]), который, в свою очередь, отличается от символа, отправленного с помощью . Сдвиг + ](}). Escсам является символом и не может комбинироваться с другим символом; просто отправил в последовательности (, т.е. до или после )с ними.

14
20.02.2020, 19:57
8 ответов

Как показано в https://ss64.com/bash/ls.html, при добавлении параметра -aкls
вы получаете все записи, даже те, которые начинаются с .; они считаются скрытыми записями и не отображаются простым ls.

8
28.04.2021, 23:23

Like is there a point to them showing up there?

Они показывают право собственности и разрешения. Часто это самое важное, что нужно проверить, когда у вас есть два пользователя, и один говорит, что не может увидеть файл другого человека, который они ожидали увидеть.

43
28.04.2021, 23:23

Потому что -aозначает показать все файлы. Это полезно в сочетании с -l. Что касается того, зачем показывать эти бесполезные файлы, когда не используется -l, из-за согласованности и потому, что Unix не пытается дважды угадать, что хорошо для вас.

Существует вариант-A(по крайней мере для GNU ls), который исключает эти два(..и.).

Интересно, что идея скрытых файлов в Unix возникла из-за ошибки в ls, где пытались скрыть эти два файла. Чтобы упростить код, исходная реализация проверяла только первый символ. Люди использовали это, чтобы скрыть файлы, затем это стало функцией, и была добавлена ​​​​опция -aдля отображения скрытых файлов. Позже кто-то, как и вы, задавался вопросом, почему показаны .и .., мы знаем, что они там есть. Опция -Aродилась.

Примечание. :Unix имеет гораздо более расплывчатое значение слова файл, чем может быть у вас.
ФАЙЛ ⊇ {обычный -файл, каталог, именованный -канал, сокет unix -, символическая -ссылка, устройства}.

66
28.04.2021, 23:23

Эта опция lsтребует, чтобы отображались все файлы с ls -a...

Но физическое существование .и ..в большинстве файловых систем является артефактом 1970-х годов, когда компьютеры были очень маленькими и люди пытались найти реализации, которым нужен лишь небольшой размер кода. Это привело к созданию жестких ссылок на текущий каталог и на родительский каталог.

Уже более 30 лет это считается ошибкой.

На самом деле UNOS (первый клон UNIX 1980 года )не имел .и .., моя WOFS (первая копия на файловой системе записи )и ZFS их не имеют также.

Что требуется POSIX, так это обрабатывать dir/.и dir/..ожидаемым образом при передаче системным вызовам, обрабатывающим имена файлов.

К сожалению, большая часть программного обеспечения сегодня все еще написана плохо и вызывает проблемы, когда эти записи отсутствуют, поэтому ZFS эмулирует существование....

В результате не указано, печатает ли ls -aстроки для .и ... Это зависит от файловой системы. Если вы находитесь в файловой системе, которая не содержит физических записей для .и ..и не претендует на их наличие (, как ZFS ), вам нужно вызвать:ls -ld...

Кстати, :POSIX недавно решил, что echo.*больше не требуется включать .и .., даже если они физически существуют. Когда все оболочки будут вести себя таким образом, это будет большая победа.

5
28.04.2021, 23:23

В Unix (фольклор гласит, что по ошибке )имена файлов/каталогов, начинающиеся с ., не отображались ls(, потому что имена .и ..были зарезервированы для «этого каталога». " и "родительский элемент этого каталога", и их показ считался бесполезным беспорядком ). Таким образом, используя эту причуду, люди начали использовать такие имена, как .profileили.something-or-other-rc(RC от Run Command, имя файла запуска для еще одной давно несуществующей системы )для файлов (и каталогов ), которые были «неинтересными».. Таким образом,ls -a(показывает a ll ), и, конечно же, он покажет .и..

4
28.04.2021, 23:23

as the design of the Unix file system was being worked out, the entries. and.. appeared, to make navigation easier

Ни один ответ, кажется, не видит никакой пользы в этих записях. Они каким-то образом происходят из иерархического связанного списка. «Простая навигация» :не с ls, а с программой на C, использующей readdir (3 )или около того.

I believe.. went in during the Version 2 rewrite, when the file system became hierarchical


Is there a reason why they show up after ls -a, Do they do anything interesting?

A )Да (исторические/технические причины )B )Да, если вы не находите cd..неинтересным. (Или щелкнув (псевдо-)файл ..в графическом файловом браузере)

(Хорошо,их не нужно показывать, чтобы их использовали... вот почему это вариант, а также есть-A)


Даже find делает это в пустом каталоге:

]# find
.

Вроде того, что я знаю :найти действительно нашел что-то :ничего.


]# stat ... |grep Device
Device: 36h/54d         Inode: 154051      Links: 6
Device: 803h/2051d      Inode: 393219      Links: 26
]# cd /
]# stat ... |grep Device
Device: 803h/2051d      Inode: 2           Links: 18
Device: 803h/2051d      Inode: 2           Links: 18

Это определяет вершину иерархии. Дирэнтри. и.. идентичны в верхнем каталоге /. И если вы этого не понимаете, cd..точно так же, как cd.. Я не получаю сообщения, он просто молча работает/не работает.


Only the fields d_name and (as an XSI extension) d_ino are specified in POSIX.1. Other than Linux, the d_type field is available mainly only on BSD systems.

struct dirent {
           ino_t          d_ino;       /* Inode number */
           off_t          d_off;       /* Not an offset; see below */
           unsigned short d_reclen;    /* Length of this record */
           unsigned char  d_type;      /* Type of file; not supported
                                          by all filesystem types */
           char           d_name[256]; /* Null-terminated filename */
       };

The readdir() function returns [a pointer to] a dirent structure representing the next directory entry in the directory stream pointed to by dirp.

Без поля типа вам (ls )пришлось бы просматривать содержимое индексного дескриптора, прежде чем он сможет указать файл, каталог или канал. А без .и ..вам пришлось бы хранить эти иноды в переменной.


Таким образом, эти записи могут упростить навигацию для сценария и пользователя. Выбор «1» делает это с текущим каталогом, делая вид, что .содержится в нем как в каталоге.

]# select ans in $(ls -af); do ls -l $ans; done
1).
2)..
3) child3
4) child2
5) child1
#? 1
total 0
drwxr-xr-x 2 root root 40 Feb 21 07:36 child1
drwxr-xr-x 2 root root 60 Feb 21 07:40 child2
drwxr-xr-x 2 root root 60 Feb 21 07:40 child3
#? 2   
total 0
drwxr-xr-x 5 root root 100 Feb 21 07:36 myself
drwxr-xr-x 2 root root  40 Feb 21 07:37 sibling1
drwxr-xr-x 2 root root  40 Feb 21 07:37 sibling2
#? 3
total 0
-rw-r--r-- 1 root root 0 Feb 21 07:40 f.b
#? 4
total 0
-rw-r--r-- 1 root root 0 Feb 21 07:40 f.a
#? 5
total 0

(Было бы более интересно, если бы он cds и затем снова перечислял новый каталог как выбор, и так далее...)

1
28.04.2021, 23:23

Is there a reason why they show up after ls -a, do they do anything interesting?

Ну, они появляются после ls -a , потому что это функция переключателя-a на ls . Вы попросили ls показать вам файлы, начинающиеся с точки, и это произошло. Боюсь, лучшего ответа не найти; вот для чего-a .

Интересно, что они позволяют указывать относительный путь . Вы можете указать расположение файла относительно текущего значения по умолчанию, а не как абсолютный путь от корня. Это очень полезно, а также интересно.

0
28.04.2021, 23:23

Кажется, никто не упомянул в явном виде основную предпосылку Unix -подобных систем 1:

Все есть файл .

Сюда входят каталоги.

Поскольку ls -aперечисляет все файлы и каталоги, это означает, что .и ..будут включены.

"Do they do anything interesting?"

Да, есть. Они дают вам удобные ссылки; .представляет текущий каталог, а ..представляет родительский каталог. Это позволяет вам делать такие вещи, как mv /file/elsewhere.и cd... Конечно, это педантизм и вы, наверное, это уже знали.:)


1 Хотя @ctrl -alt -ответ Делора подразумевает это.

0
28.04.2021, 23:23

Теги

Похожие вопросы