Почему. и .. выводятся как скрытые файлы, когда мы выполняем ls -a? [дубликат]

На этот вопрос уже есть ответ:

Это что-то вроде того, что они по умолчанию добавляются в каждый каталог, созданный для облегчения перемещения за пределы?

1
задан 5 March 2017 в 07:05

3 ответа

Продвижение точечных имен файлов

Простой ответ - то, потому что эти имена файлов запускаются с точки. Любое имя файла, которое запускается с точки, считают скрытым файлом на Linux (даже если в этом случае само имя файла является всего одним символом долго), и в основном "традиция", которая возвращается к первому Unix ОС. Можно просмотреть их с ls -a.

Если Вы хотите знать, почему на уровне кода, это установлено по умолчанию в ls.c файл src/ls.c в coreutils пакете:

638 static enum
639 {
640   /* Ignore files whose names start with '.', and files specified by
641      --hide and --ignore.  */
642   IGNORE_DEFAULT,
643 
644   /* Ignore '.', '..', and files specified by --ignore.  */
645   IGNORE_DOT_AND_DOTDOT,
646 
647   /* Ignore only files specified by --ignore.  */
648   IGNORE_MINIMAL
649 } ignore_mode;

Простые приложения

Вы спросили:

Это - что-то как, они по умолчанию добавляются к каждому каталогу, созданному для упрощения перемещения снаружи?

Да, с тех пор . обращается к самому каталогу и .. обращается к родительскому каталогу. Исключение / каталог, который является корнем дерева файловой системы. В этом случае, .. относится к / самостоятельно с тех пор нет никакого каталога выше выше его. Вместо того, чтобы запомнить каждый путь, удобство состоит в том, что можно подняться одно использование уровня cd ... Простой, правильно? Теперь предположите, что у Вас есть очень длинный путь. Это неудобно для ввода полного пути к родительскому каталогу, тогда как .. намного более просто. Это также допускает простые сценарии, такие как эта функция, которой я удерживаю .bashrc:

goup() {
    num=$1 
    while [ $num -ne 0 ] 
    do
        cd .. 
        num=$(expr $num - 1 ) 
    done 
} 

Путем определения goup 5 я могу подняться 5 каталогов, где каждый .. относится к родителю родителя родителя.

В случае . это может использоваться сценариями для определения их текущего местоположения, если это когда-либо необходимо.

На других языках, утилитах

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

$ echo *
LICENSE README.md ayatana-indicator ayatana-indicator.desktop debian
star:

Мы можем подражать ls -a с шариком оболочки, если мы добавляем .* включать скрытые файлы.

$ echo * .*
LICENSE README.md debian indicator-bulletin indicator-bulletin.desktop .git .gitignore

В отличие от этого, некоторые другие программы/утилиты и языки программирования не скрывают эти объекты (или по крайней мере они не скрываются .). Их цель, однако, намного более обширна, что просто список каталогов, и они намного более подходят для парсинга файлов (Читает, Почему Вы не должны анализировать вывод ls (1)).

$ find -maxdepth 1 
.
./.git
./README.md
./LICENSE
./debian
./indicator-bulletin.desktop
./.gitignore
./indicator-bulletin

$ perl -le 'opendir(dh,$ARGV[0]);while( $file = readdir(dh) ){ print $file; }; closedir(dh);' "."                 
.git
..
README.md
LICENSE
debian
.
indicator-bulletin.desktop
.gitignore
indicator-bulletin

Python os.listdir() существенное исключение - оно не показывает . ни ... glob модуль может использоваться для проявления того же поведения как в оболочках.

$ python -c 'import os;print(os.listdir("."))'                                                                    
['.git', 'README.md', 'LICENSE', 'debian', 'indicator-bulletin.desktop', '.gitignore', 'indicator-bulletin']

$ python -c 'import glob;print(glob.glob(".*"),glob.glob("*"))'                                                   
(['.git', '.gitignore'], ['README.md', 'LICENSE', 'debian', 'indicator-bulletin.desktop', 'indicator-bulletin'])
2
ответ дан 3 December 2019 в 06:38

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

При нормальных обстоятельствах, пользователь ищет вывод файлов, он будет работать с, такие как файлы текстового процессора, изображения и другие данные по системе.

-a опция является аргументом для показа ВЕСЬ файлы. Это включает скрытые файлы.

скрытые файлы являются обычно специальными файлами, такими как конфигурация и вспомогательные файлы. Вы видите их включением Весь файлы, или скрытый файлы в Вашем выводе. Файловый браузер GUI имеет Шоу, Скрытое опция файлов.

В этом случае файлов, которые являются . и ... Они - спецификация Вашего каталога. Единственная точка является Вашим текущим каталогом. Двойная точка является родительским каталогом. Можно скопировать к родительскому каталогу от того, где Вы путем ввода:

$  cd ..

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

1
ответ дан 3 December 2019 в 06:38

В MS-DOS и Windows там также . и ... Вполне просто . представляет текущий каталог и .. представляет родительский каталог.

MS-DOS родился от операционной системы CPM, когда Bill Gates купил права за 80 000$ и лицензировал для IBM как ПК-DOS, который превратился в MS-DOS, который превратился в Windows, который предсказан для приземления его Триллион долларов в конце.

Linux также использует . и .. поскольку первая версия файловой системы была основана на аппаратных средствах IBM PC AT.

Как Serg, которому отвечают в Linux . и .. не появляйтесь в ls управляйте потому что любое начало файла . скрытый файл. Можно использовать ll псевдоним для наблюдения этих файлов все же.

И в MS-DOS и в Linux можно использовать cd .. управляйте для изменения на родительский каталог. В Linux, когда Вы хотите назвать команду в текущем каталоге (не в пути) необходимо снабдить префиксом команду ./. В MS-DOS однако это автоматически посмотрит в текущем каталоге для команды прежде, чем искать ПУТЬ.

Mac Apple и Google Android основаны на операционной системе Linux, но я не знаю, используют ли их файловые системы также . и ...

2
ответ дан 3 December 2019 в 06:38

Другие вопросы по тегам:

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