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

Моя путаница

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

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

  • mv *. {jpg, png} папка / работает только при наличии обоих типов файлов
  • Возможно ли иметь привязки клавиш vim в терминале?
  • использование нескольких терминальных x-окон с одним сеансом tmux
  • Удалить все строки, содержащие повторяющиеся буквы
  • Экран полезен?
  • неправильные / перезаписанные поля при использовании vim на экране GNU
  • Отправлять обновление ping в службы ping в Terminal?
  • Завершить ввод текста в GPG
  • 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 по умолчанию.

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