Разница между a.out и ./a.out

Моя путаница

a.out – это вывод программ, которые я выполняю в своем Ubuntu 12.10. В системе Red Hat, когда я выполняю a.out в терминале, он выполняется. Хотя в Ubuntu я должен выполнить ./a.out чтобы получить выход. «a.out» не работает.

Может ли кто-нибудь объяснить, в чем разница между командами?

  • Почему страница U / Down, Home / End не работает на Solaris поверх ssh от Ubuntu?
  • Удерживайте вывод пейджера (человек, больше и т. Д.) В Linux
  • Потерянный каталог справочника ls после сбоя
  • Две команды для одновременного запуска в двух терминалах
  • xargs и vi - «Вход не от терминала»
  • Что такое «Многоэкранный режим» экрана?
  • Есть ли легенда в каком-то месте, которое описывает все эти цветовые кодировки в нижней части byobu?
  • Удалить форматирование терминала из файла
  • One Solution collect form web for “Разница между a.out и ./a.out”

    Поведение, которое вы испытываете, зависит, скорее всего, от различий в переменной среды $PATH . $PATH – это, по сути, список каталогов, разделенных двоеточиями, которые выполняются для определенного исполняемого файла, когда программа вызывается с использованием вызова операционной системы exec . $PATH может содержать относительные компоненты пути, как правило . или пустую строку, которые относятся к текущему рабочему каталогу. Если текущий каталог является частью $PATH , файлы в текущем рабочем каталоге могут быть выполнены только по их имени, например a.out . Если текущий каталог не находится в $PATH , необходимо указать относительный или абсолютный путь к исполняемому файлу, например ./a.out .

    Наличие относительных компонентов пути в $PATH имеет потенциальные последствия для безопасности, поскольку исполняемые файлы в каталогах ранее в $PATH затмевают исполняемые файлы в каталогах позже в списке. Рассмотрим, например, атаку на систему, где находится текущий рабочий каталог . preceeds /bin в $PATH . Если злоумышленнику удается разместить вредоносный сценарий, совместно использующий имя с общедоступной системной утилитой, например ls , в текущем каталоге (который, как правило, намного проще заменяет исполняемые файлы в корневом каталоге /bin ), пользователь будет непреднамеренно ссылаться на вредоносный сценарий, когда намерение заключается в вызове системы ls . Даже если . добавляется только в конце $PATH , пользователь может быть обманут, чтобы непреднамеренно вызвать исполняемый файл в текущем каталоге, который разделяет имя с общей полезностью, не найденной в этой конкретной системе. Вот почему обычно не иметь относительных компонентов пути как часть $PATH по умолчанию.

    Interesting Posts
    Linux и Unix - лучшая ОС в мире.