Дифференцирование пользовательских исполняемых файлов из ранее существующих исполняемых файлов

Похоже, все, что нужно сделать, это извлечь архив и запустить скрипт setup.py, как показано ниже. Если все зависимости выполнены, он должен работать.

python ./setup.py
0
задан 25 May 2018 в 11:46

2 ответа

ТЛ;др: оболочка прекращает поиск, как только он находит что-то для запуска.

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

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

одна из причин, и, казалось бы, тот, о котором ты спрашиваешь, почему там может быть двух команд с одинаковыми названиями, является то, что два файла могут иметь одинаковое базовое имя, например:

/usr/bin/foo /bin/foo

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

если вы устанавливаете или написать свои собственные исполняемые файлы, Вы можете выбрать, чтобы положить их в ~/bin или /usr/local/bin. Эти места находятся в вашем пути по умолчанию в Ubuntu. /usr/local/bin находится в начале пути по умолчанию:

$ grep PATH /etc/environment PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

и [F9] и присоединяется к пути, если он существует:

$ grep -A3 bin ~/.profile # set PATH so it includes user's private bin if it exists if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" fi

так что я в конечном итоге с этого пути...

$ echo $PATH /home/zanna/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

с /home/zanna/bin перед /bin на моем пути, если я поставил команду под названием chmod в [от f13], и побежал chmod, что исполняемый ~/bin/chmod будет работать вместо /bin/chmod, потому что оболочка прекращает поиск, как только он находит что-то, и если я хочу, чтобы запустить [f17 в], мне придется сделать именно это: введите полный путь к программе, я хочу бежать.

это действительно конец истории, которую мы не упомянули в начале, потому что путь поиска-это последнее, что панцирь при попытке выполнить команду, и имея два файла с одинаковым именем не только не может быть двух команд с одинаковыми именами.

я здесь буду говорить о bash, потому что это только оболочка, я достаточно знакомы. Насколько я знаю, другие снаряды будут следовать аналогичные процедуры. Важно отметить, однако, что многие программы в Ubuntu звонок /bin/sh, а не bash, и в то время как [зг19] может ссылка на [20 фунтов], по умолчанию в Ubuntu это [клавиши f21], и может быть в любой оболочке программы.

первое слово команды является то, что консоль пытается выполнить последующие слова его аргументы (которые могут быть параметры, а могут и не потребоваться).

заметим, что cmak.fr сделал замечание, указывающее на это на этапе разбить команду на слова, несколько этапов перед выполнением команды. Это означает, что ТЛ;др: оболочка прекращает поиск, как только он находит что-то для запуска., которые могут иметь одинаковое имя.

после разбора и все расширения будут завершены, редиректы были настроены, и переменной задание уже сделано, начинается выполнение команды.

если первое слово содержит /, оболочка предполагает, что слово-это путь, и пытается выполнить (насколько мне известно, попадает в ядро, чтобы получить ЦП для выполнения или позвонить переводчику, или если все остальное не работает как скрипт), файл по этому пути. Если файл по этому пути не существует, вы получите no such file or directory.

если первое слово не содержит /, оболочка приступит искать команду в таком порядке, и произведу первое, что он находит и потом налюбоваться:

есть функция Shell с этим именем? Есть встроенная раковина с таким названием? Есть ли команда в хэш-таблице с таким именем? Есть ли команда в любом директория с этим именем?

да, поиск пути в последней инстанции. Обратите внимание, что путь искали по порядку, слева направо. Первый каталог в пути, искали до последнего, поэтому команды в первую директорию с таким же именем, как во второй каталог будет выполнен, а не второй.

отметим также, что при использовании [f25 привод датчика], он задает путь к одной, определенной в /etc/sudoers как secure_path.

если вы установить/создать исполняемый файл с тем же именем, существующий исполняемый файл, вы должны знать, что это может повлиять на другие программы, не только вещи, которые вы делаете в интерактивную оболочку. Типичный пример это Анаконда, которая устанавливает версию Python и приставляет его директорию bin к пути. Системные программы, которые называют python и чего-то ожидать в /usr/bin может сломаться, потому что они неправильно python. В целом, создание исполняемых файлов с разными именами.

определение функции оболочки и псевдонимы, как правило, позволяет избежать этой проблемы, поскольку эти известны только к оболочкам, которые читают [f32 из] (или любом другом файле, их определяет), интерактивной (Баш) снарядов.

Вы можете увидеть все программы, которые могут работать при выполнении команды с помощью type строение (если вы еще не определились псевдоним или функции оболочки называется type!). Запустите с -a, чтобы увидеть все возможные команды с таким именем в заказе будет найти их.

$ type type type is a shell builtin $ type -a echo echo is a shell builtin echo is /bin/echo $ type -a ls ls is aliased to `ls --color=auto' ls is /bin/ls [и D40], а затем перестать смотреть знать и контролировать то, что команда будет работать, когда есть больше чем одна возможность, вы должны понимать, как снаряд назвав его работ.[!и D40] [d43 см.][!d43 см.]

огромное спасибо Илии Кагала для объяснения этого добра ко мне в чат.

3
ответ дан 17 July 2018 в 13:29

ТЛ;др: оболочка прекращает поиск, как только он находит что-то для запуска.

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

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

одна из причин, и, казалось бы, тот, о котором ты спрашиваешь, почему там может быть двух команд с одинаковыми названиями, является то, что два файла могут иметь одинаковое базовое имя, например:

/usr/bin/foo /bin/foo

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

если вы устанавливаете или написать свои собственные исполняемые файлы, Вы можете выбрать, чтобы положить их в ~/bin или /usr/local/bin. Эти места находятся в вашем пути по умолчанию в Ubuntu. /usr/local/bin находится в начале пути по умолчанию:

$ grep PATH /etc/environment PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

и [F9] и присоединяется к пути, если он существует:

$ grep -A3 bin ~/.profile # set PATH so it includes user's private bin if it exists if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" fi

так что я в конечном итоге с этого пути...

$ echo $PATH /home/zanna/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

с /home/zanna/bin перед /bin на моем пути, если я поставил команду под названием chmod в [от f13], и побежал chmod, что исполняемый ~/bin/chmod будет работать вместо /bin/chmod, потому что оболочка прекращает поиск, как только он находит что-то, и если я хочу, чтобы запустить [f17 в], мне придется сделать именно это: введите полный путь к программе, я хочу бежать.

это действительно конец истории, которую мы не упомянули в начале, потому что путь поиска-это последнее, что панцирь при попытке выполнить команду, и имея два файла с одинаковым именем не только не может быть двух команд с одинаковыми именами.

я здесь буду говорить о bash, потому что это только оболочка, я достаточно знакомы. Насколько я знаю, другие снаряды будут следовать аналогичные процедуры. Важно отметить, однако, что многие программы в Ubuntu звонок /bin/sh, а не bash, и в то время как [зг19] может ссылка на [20 фунтов], по умолчанию в Ubuntu это [клавиши f21], и может быть в любой оболочке программы.

первое слово команды является то, что консоль пытается выполнить последующие слова его аргументы (которые могут быть параметры, а могут и не потребоваться).

заметим, что cmak.fr сделал замечание, указывающее на это на этапе разбить команду на слова, несколько этапов перед выполнением команды. Это означает, что ТЛ;др: оболочка прекращает поиск, как только он находит что-то для запуска., которые могут иметь одинаковое имя.

после разбора и все расширения будут завершены, редиректы были настроены, и переменной задание уже сделано, начинается выполнение команды.

если первое слово содержит /, оболочка предполагает, что слово-это путь, и пытается выполнить (насколько мне известно, попадает в ядро, чтобы получить ЦП для выполнения или позвонить переводчику, или если все остальное не работает как скрипт), файл по этому пути. Если файл по этому пути не существует, вы получите no such file or directory.

если первое слово не содержит /, оболочка приступит искать команду в таком порядке, и произведу первое, что он находит и потом налюбоваться:

есть функция Shell с этим именем? Есть встроенная раковина с таким названием? Есть ли команда в хэш-таблице с таким именем? Есть ли команда в любом директория с этим именем?

да, поиск пути в последней инстанции. Обратите внимание, что путь искали по порядку, слева направо. Первый каталог в пути, искали до последнего, поэтому команды в первую директорию с таким же именем, как во второй каталог будет выполнен, а не второй.

отметим также, что при использовании [f25 привод датчика], он задает путь к одной, определенной в /etc/sudoers как secure_path.

если вы установить/создать исполняемый файл с тем же именем, существующий исполняемый файл, вы должны знать, что это может повлиять на другие программы, не только вещи, которые вы делаете в интерактивную оболочку. Типичный пример это Анаконда, которая устанавливает версию Python и приставляет его директорию bin к пути. Системные программы, которые называют python и чего-то ожидать в /usr/bin может сломаться, потому что они неправильно python. В целом, создание исполняемых файлов с разными именами.

определение функции оболочки и псевдонимы, как правило, позволяет избежать этой проблемы, поскольку эти известны только к оболочкам, которые читают [f32 из] (или любом другом файле, их определяет), интерактивной (Баш) снарядов.

Вы можете увидеть все программы, которые могут работать при выполнении команды с помощью type строение (если вы еще не определились псевдоним или функции оболочки называется type!). Запустите с -a, чтобы увидеть все возможные команды с таким именем в заказе будет найти их.

$ type type type is a shell builtin $ type -a echo echo is a shell builtin echo is /bin/echo $ type -a ls ls is aliased to `ls --color=auto' ls is /bin/ls [и D40], а затем перестать смотреть знать и контролировать то, что команда будет работать, когда есть больше чем одна возможность, вы должны понимать, как снаряд назвав его работ.[!и D40] [d43 см.][!d43 см.]

огромное спасибо Илии Кагала для объяснения этого добра ко мне в чат.

3
ответ дан 20 July 2018 в 13:35
  • 1
    Я думаю, что с некоторыми оболочками (например, тире и zsh), если они не смогут выполнить ~/bin/chmod, продолжит поиск в PATH для соответствующей команды, которая будет выполнена, в конечном итоге выполнив /bin/chmod. – muru 25 May 2018 в 12:57
  • 2
    Другие оболочки действуют одинаково во время исполнения, потому что они либо используют execvpe(3) из любого доступного libc или имитируют его поведение (например, кэшируют полный путь обнаруженных исполняемых файлов). – David Foerster 27 May 2018 в 12:01

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

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