Intereting Posts
Emerge on Gentoo терпит неудачу: «Несколько экземпляров пакетов в одном слоте пакета были вытащены … в». Как я могу это решить? Можно ли исключить каталог из команды find? sed, получив ошибку: sed -e выражение # 1, команда char 28: unterminated `s ' Автозапуск OpenVPN с systemd Установите KDE Plasma 5.9 на Debian 8 Повреждая систему, полностью заполняя `/` Какая особенность имеет индекс inode корневого каталога над другими каталогами? Установите GRUB `лифт = крайний срок 'планирование на одно устройство Несмотря на то, что правильное разрешение не позволяет катать файл Ubuntu 14.04 LTS не сохраняет мои настройки Как сделать снимок сайта через скрипт оболочки? Выделите три последних обновленных файла в выводе ls Обновлен менеджер обновлений без запроса пароля Не удалось открыть файл конфигурации netctl @ .service. Есть ли способ найти, какое правило iptables отвечает за удаление пакета?

Когда следует использовать конечную косую черту в каталоге?

Возможный дубликат:
Как linux обрабатывает несколько разделителей путей (/ home //// имя пользователя /// file)

Большинство команд, которые я использую в linux, ведут себя одинаково, независимо от того, включаю ли я конечный слэш / символ в конце имени каталога или нет.

Например:

 ls /home/cklein ls /home/cklein/ cp foo bar cp foo/ bar/ 

Когда это завершающее косая черта? Что такое семантический смысл конечной косой черты?

Он полностью зависит от инструмента. rm не позволит вам удалить символическую ссылку в каталог, если в конце есть косая черта, а rsync выполняет разные вещи, если спецификация исходного файла имеет косую черту в конце.

Одним хорошим примером является перемещение файла в каталог:

 mv some_file foo 

против

 mv some_file foo/ 

Если foo не существует, первый переименует some_file в foo , а не в предполагаемый foo/some_file ; второй будет жаловаться, а это то, что вы хотите.

Если foo существует, но не является каталогом, первый может скрыть файл foo ; снова, второй будет жаловаться.

cp представляет аналогичные проблемы.

Работая над некоторыми старыми версиями SunOS, я разработал привычку добавлять /. , потому что система фактически игнорировала конечное / имя файла; например, /etc/motd/ будет ссылаться на файл, а не на ошибку. Более поздние версии SunOS / Solaris, похоже, не имеют этой проблемы.

foo/ как foo/. , так что если foo является символической ссылкой на каталог, foo/ является каталогом (а не символической ссылкой), и если foo не является каталогом или символической ссылкой на каталог, то вы получаете ошибку ENOTDIR для чего-либо, пытающегося получить доступ к foo/ . Это поведение в Linux.

Поведение может отличаться в других системах.

Смотрите здесь и здесь и здесь, чтобы узнать, что POSIX / SUS может сказать об этом.

В rsync страница руководства выглядит следующим образом:

  A trailing slash on the source changes this behavior to avoid creating an additional directory level at the destination. You can think of a trailing / on a source as meaning "copy the contents of this directory" as opposed to "copy the directory by name", but in both cases the attributes of the containing directory are transferred to the contain- ing directory on the destination. In other words, each of the follow- ing commands copies the files in the same way, including their setting of the attributes of /dest/foo: rsync -av /src/foo /dest rsync -av /src/foo/ /dest/foo 

Конечная косая черта в пункте назначения не имеет значения. Только по источнику. (И тогда, конечно, это имеет значение только в том случае, если источником является каталог, а не один файл или глобус.)

Чтобы проиллюстрировать каталог в случае использования каталога:

 $ mkdir foo bar baz $ chmod 700 foo $ chmod 750 bar $ chmod 705 baz $ echo hello > foo/file1 $ chmod 606 foo/file1 $ ls -n total 0 drwxr-x--- 2 501 20 68 Aug 8 15:29 bar/ drwx---rx 2 501 20 68 Aug 8 15:29 baz/ drwx------ 3 501 20 102 Aug 8 15:30 foo/ $ ls -n foo total 8 -rw----rw- 1 501 20 6 Aug 8 15:30 file1 $ rsync -a foo bar $ rsync -a foo baz/ $ rsync -a foo bif $ rsync -a foo bonk/ $ ls -n total 0 drwxr-x--- 3 501 20 102 Aug 8 15:30 bar/ drwx---rx 3 501 20 102 Aug 8 15:30 baz/ drwxr-xr-x 3 501 20 102 Aug 8 15:30 bif/ drwxr-xr-x 3 501 20 102 Aug 8 15:30 bonk/ drwx------ 3 501 20 102 Aug 8 15:30 foo/ $ ls -n * bar: total 0 drwx------ 3 501 20 102 Aug 8 15:30 foo/ baz: total 0 drwx------ 3 501 20 102 Aug 8 15:30 foo/ bif: total 0 drwx------ 3 501 20 102 Aug 8 15:30 foo/ bonk: total 0 drwx------ 3 501 20 102 Aug 8 15:30 foo/ foo: total 8 -rw----rw- 1 501 20 6 Aug 8 15:30 file1 $ rm -rf b* $ mkdir bar baz $ chmod 750 bar $ chmod 705 baz $ rsync -a foo/ bar $ rsync -a foo/ baz/ $ rsync -a foo/ bif $ rsync -a foo/ bonk/ $ ls -n total 0 drwx------ 3 501 20 102 Aug 8 15:30 bar/ drwx------ 3 501 20 102 Aug 8 15:30 baz/ drwx------ 3 501 20 102 Aug 8 15:30 bif/ drwx------ 3 501 20 102 Aug 8 15:30 bonk/ drwx------ 3 501 20 102 Aug 8 15:30 foo/ $ ls -n * bar: total 8 -rw----rw- 1 501 20 6 Aug 8 15:30 file1 baz: total 8 -rw----rw- 1 501 20 6 Aug 8 15:30 file1 bif: total 8 -rw----rw- 1 501 20 6 Aug 8 15:30 file1 bonk: total 8 -rw----rw- 1 501 20 6 Aug 8 15:30 file1 foo: total 8 -rw----rw- 1 501 20 6 Aug 8 15:30 file1 $