Различие между a.out и./a.out

Clonezilla был бы подходящим продуктом для целого образа диска. Это работает способом, подобным Фантому.

8
04.08.2013, 20:02
1 ответ

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

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

16
27.01.2020, 20:09
  • 1
    Эй thomas.. Я пытаюсь выполнить a.out в Unbuntu 12.10 из того же файла, он хранится. Но тем не менее это не работает. Я должен использовать./a.out, в отличие от этого, в Redhat. –  Munai Das Udasin 04.08.2013, 20:15
  • 2
    Если Вы делаете echo $PATH в каждой из систем необходимо видеть . как часть PATH на Red Hat, но не в системе Ubuntu. Если Вы хотите то же поведение на Ubuntu, Вы могли бы добавить . к PATH на Ubuntu с командой export PATH=$PATH:. (добавьте PATH=$PATH:. кому: ~/.profile делать изменение постоянным), но знать, что это имеет определенные последствия безопасности, которые я пытаюсь объяснить в отредактированном ответе. –  Thomas Nyman 04.08.2013, 20:27
  • 3
    +1 для предупреждения системы безопасности наличия ./ в $PATH. Это - плохая идея с точки зрения безопасности, и это поощряет неаккуратное поведение, в котором Вы действительно не нуждаетесь. –  Shadur 05.08.2013, 10:03
  • 4
    привет thomas.... echo $PATH в красной шляпе имеет нет . в конце пути, поскольку Вы сказали echo $PATH дал мне это на самом деле /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin::/opt/oracle/product/11.2.0/clien t_1/bin:/home/H11/u756938/bin и a.out все еще работает... –  Munai Das Udasin 05.08.2013, 12:32
  • 5
    Оба . и пустая строка в $PATH обратитесь к текущему каталогу. Отметьте :: после /usr/bin в выводе echo $PATH. –  Thomas Nyman 06.08.2013, 07:33

Теги

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