유닉스 시스템에서 실행 파일을 실행

  내가 자기 컴파일 된 실행 파일의 실행 후 단계를 실행할 때이 문서 데이터의 수를 처음부터 재판 언급 샬롯 광업 확인하기 위해 공공 촉구 나의 기사는 "블로그의 주홍 종을,"오늘 생각 기사는 성공을 지시. 이 기사 감사합니다. 이제 기록 만 배울 수 있습니다.

리눅스에서 할 때 우리는 같은 내장 명령을 직접 입력 할 수있는 명령 이름을 실행합니다

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

그리고 자신의 작성 절차의 구현에, 그들은 같은 ./ 가지고 있습니다 :

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

이유는 무엇입니까? 그들은 그것이 만들어 무엇 차이가 있나요?

어떻게 프로그램을 쉘에 실행

전에 문제의 인식에 대한 설명에서, 우리는 쉘 프로그램을 실행하는 방법을 이해해야합니다. 첫째, 우리는 리눅스 명령의 구현은, 본질적으로 프로그램이 실행되고 있는지 명확해야, 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 명령에 의해 내장되어있는 명령을 확인합니다 :

$ help

명령을 입력하여 명령 유형을 볼 수 있습니다 :

type echo
echo is a shell builtin

가 내장되어있는 경우 명령, 그렇지 않으면 내가 계속 찾고, 직접 실행됩니다.

찾기 PATH

LS으로, 예를 들어, 첫 번째는 PATH 환경 변수에서 쉘 LS 입력에서 보이는 내용이 무엇인지 PATH는 살펴 보겠습니다 :

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

이 이러한 경로에있는 LS 프로그램을 찾고에 갈 것입니다 그래서 첫 번째 경로는 LS가 실행됩니다 발견에 따라 프로그램. LS 산전의 위치를 ​​확인할 수 있습니다 whereis 사용

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

이 bin 디렉토리에 있기 때문에, 나는 그것을 찾을 수 없습니다되어있는 bin 디렉토리에서 제거 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을 설명하기 위해 bash는 프로그램을 사용하여 알려줍니다. 개발자의 장난으로하는 경우는이 일의 시작 다음 변경?

#!/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 실행할 수 말하는가? 리눅스에서하지만이 .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

그것을 확장

우리는 리눅스처럼 자신의 프로그램이 내장 명령이 식별 할 수있는 입력을 할 수있는 경우에 그래서?

프로그램에 PATH 경로

쉘 입력 인사가도 찾을 수 있습니다 때 첫 번째 방법은 이동하려면 PATH 경로에 우리 자신의 프로그램을 넣어, 그래서, 예를 들어, 우리는 / 빈 디렉토리에 넣어 :

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

당신의 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와 내장-의 구현 될 것입니다.
등등.

개요

여기에, 아마도 다음과 같은 문제와 문제는 분명 제목이 :

  • 왜 PATH 환경 변수를 설정하는 파이썬 또는 JDK 프로그램을 설치? 설정하지 않으면 어떻게 실행?

  • 자신의 프로그램 ./ 방식으로, 어떤 방법을 실행하는 것 외에도?

  • 당신은 당신의 프로그램이 내장 명령 등 식별 할 수 허락한다면?

  • 어떻게 파일 형식을 볼 수?

  • 명령을 실행하는 방법 명령이 실행되는 위치를 결정하는

이 문서는 명령을 관련 :

    • MV 이동 / 이름 변경

    • 파일은 파일 정보를 볼

    • 보기 whereis 명령 또는 수동 위치

    • 보기 명령 범주 유형

추천

출처www.cnblogs.com/chester-cs/p/11863686.html