Выполнить исполняемый файл на системах Unix

  Эта статья моя статья призвала общественность, чтобы увидеть количество данных добычи Шарлотты, первоначально упомянутые Перепечатан из «Чжа рабы блог,» когда я бег на сцену после реализации Самости скомпилированных исполняемых файлов думать сегодня статья, направить успех. Спасибо этой статьи. Теперь запись, только чтобы узнать.

В Linux, когда мы выполняем встроенную команду, вы можете непосредственно ввести имя команды, такие как:

$ mv a b #将a重命名为b

И в реализации своих собственных письменных процедур, они должны принести ./, такие как:

$ hello
hello: command not found
$ ./hello
hello world

Почему это? У них есть какая разница?

Как обстреливать программа работает

В описании осведомлены о проблемах прежде, мы должны понять, как оболочка запуска программы. Во-первых, мы должны быть ясно, что реализация команды Linux, по существу, запуск программы, такие как команда Ls, это программа, исполняемая Ls. Затем введите команду в оболочке, в конце концов, что случилось? Он будет пройти, чтобы выяснить, какие, конечно?

Alias ​​Найти

Команда псевдоним используется для задания команды псевдоним, можно ввести отдельно просмотреть псевдоним псевдоним был установлен:

$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'

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

Найти встроенные команды

Различные оболочки содержит ряд различных встроенных команд, как правило, не нужно раскошеливаться на диск для поиска. По команде помощи, чтобы увидеть, какие имеют встроенные команды:

$ help

Вы можете просмотреть тип команды по введите следующую команду:

type echo
echo is a shell builtin

Если встроенная команда будет выполняться непосредственно, в противном случае я продолжаю смотреть.

поиск PATH

С Ls, например, сначала он смотрит на входе оболочки LS из переменной PATH среды, PATH, что содержание, давайте посмотрим:

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

Так он будет продолжать искать программы LS в этих путях, первый путь через Ls программу в соответствии с найденным будет выполнено. Используйте WhereIs Ls можно определить местоположение:

$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.g

Так как он находится в директории бен, то я кладу Ls удалены из каталога бен не не могу найти его? Да.

$ mv /bin/ls /temp/ls_bak  #测试完后记得改回来奥

Давайте теперь посмотрим на команду LS:

$ ls 
The program 'ls' is currently not installed. You can install it by typing:
apt install coreutils

Да, он предложит вам не нужно устанавливать программу или команду не найдено.

Итак, теперь вы понимаете, почему при первой установке JDK или питона установить переменные окружения, не так ли? Если линия не установлена?

Линия. На этот раз вам нужно указать путь. Как указать путь? Ничего больше , чем так мало, относительный путь, абсолютный путь, и так далее.
Например:

$ cd /temp
$ ./ls_bak

Или:

$ /temp/ls_bak

Не найти и запустить свой собственный путь обычная процедура не имеет никакого значения?

При этом, если вы не можете найти команду, которую вы хотите выполнить, вы получите сообщение об ошибке.

Определить переводчик

После нахождения программы необходимо определить интерпретатор. Что это значит?
оболочка обычно может выполнять две программы, одна является двоичным, один сценарий.

После того, как обнаружил, что программа будет выполняться файл представляет собой текстовый файл, и текст не объясняет, указаны процедуры, по умолчанию, как скрипт для выполнения. Например, предположим, test.txt следующим образом:

echo -e "hello world"

С учетом разрешения на выполнение и выполнение:

$ chmod +x test.txt
$ ./test.txt
hello world

Конечно, мы, как правило, принимаем следующую фразу в сценарии поддержки оболочки:

#!/bin/bash

Это говорит оболочки, можно использовать программу Баша объяснить test.txt реализации. Как непослушный разработчиков, если изменилось после начала это произошло?

#!/usr/bin/python

После повторного выполнения следующих результатов:

$ ./test.txt
  File "./test.txt", line 2
    echo -e "hello world"
                        ^
SyntaxError: invalid syntax

Да, это как питон скрипт для выполнения, вы, естественно, неправильно отчет.

Так что, если это бинарная программа? Execl семейство функций будет использоваться, чтобы создать новый процесс для запуска новой программы.

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

пробег

Ранее мы также видели, режим работы, установить переменную окружения или использовать относительный путь, абсолютный путь. Но для сценариев оболочки, можно выполнить такие как следующие:

$ sh test.txt
$ . test.txt  

Даже test.txt не имеют права на исполнение, она может быть выполнена правильно.

Что? Почему вы говорите, TXT может быть выполнена? Обратите внимание, что файл суффикс под Linux, но для того, чтобы облегчить заливку типа документа, удостоверяющего личность, заканчивая .txt, не обязательно означает текст. Конечно, здесь действительно есть, но и ASCII текст исполняемого файла:

$ file test.txt
test.txt: Bourne-Again shell script, ASCII text executable
$ file hello
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.32, BuildID[sha1]=8ae48f0f84912dec98511581c876aa042824efdb, not stripped

Разверните его

Так что, если мы можем ввести свои собственные программы, такие как Linux, встроенные в команде, как он может быть идентифицированы?

Путь PATH в программу

Первый способ поставить нашу собственную программу по пути PATH, чтобы идти, так что, когда входной оболочки привет, можно найти, например, положить его под / bin директории:

$ hello
hello world
$ whereis hello
hello: /bin/hello

То есть, если указанный путь к PATH программе установлен, и вам необходимо настроить переменную PATH среды, в командной строке можно непосредственно найти.

Установить переменную PATH среды

Так что если вы хотите, чтобы иметь возможность работать непосредственно в указанном каталоге это? Очень просто, что добавлять переменные окружения, такие как текущий путь добавляется в PATH:

$ PATH=$PATH:./   #这种方式只在当前shell有效,所有shell生效可修改/etc/profile文件
$ hello
hello world

Установить псевдоним

Например:

$ alias hello="/temp/hello"
$ hello
hello world

Вышеуказанные три метода можно достичь цели.

порядок выполнения

Поэтому предположим , что я написал собственную программу PRINTF, когда выполнение Printf, который выполняется в конце концов?
На самом деле это может поиск порядка можно рассматривать по типу -a:

$ type -a printf
printf is aliased to `printf "hello\n"'
printf is a shell builtin
printf is /usr/bin/printf
printf is ./printf

Здесь вы можете ясно видеть, порядок поиска. То есть, если вы вводите Printf, он выполняет следующие:

$ printf
hello

И если вы удалите псевдоним:

unalias printf

Это будет реализация встроенных команд Printf.
И так далее.

резюме

Здесь, по-видимому следующие вопросы и проблемы у вас есть четкое название:

  • Почему установить Python или JDK программу, чтобы установить переменную PATH среды? Если не установлено, как запустить?

  • Помимо выполнения своей собственной программы ./ путь, каким образом?

  • Если да ваша программа может быть определена как встроенные команды, как?

  • Как просмотреть типы файлов?

  • Выполните команду, как определить, где выполняется команда

Эта статья относится к команде:

    • мв перемещение / переименование

    • файл просмотреть информацию о файле

    • Просмотр WhereIs команды или ручной режим работы

    • Просмотреть тип команды категории

рекомендация

отwww.cnblogs.com/chester-cs/p/11863686.html