Linux에서 실행 파일을 실행하기 전에 항상“./”를 입력해야하는 이유는 무엇입니까?


8

내가 egxc를 컴파일 할 때 :

GCC x.c -o x

결과를 실행하려면 다음을 작성해야합니다.

./x

그리고 그냥 입력 :

x

이 메시지와 함께 실패합니다 :

x : 명령을 찾을 수 없습니다

이것은 Linux가 현재 디렉토리를 검색하지 않음을 의미합니다! 이 행동 뒤에 합리적인 문제가 있습니까?


규칙이기 때문입니다.
Daniel R은

@ DanH : 그런 다음 "규칙"을 설명하십시오.
Torben Gundtofte-Bruun

답변:


13

기본적으로 현재 작업 디렉토리는 PATH변수에 없습니다 .

이것은 보안 / 편의 조치입니다. 현재 작업 디렉토리에 eg cd, ls등의 바이너리 / 스크립트 가있는 경우 기본적으로 실행되면 매우 성 가실 것입니다.


4
답은 부분적으로 만 맞습니다. 현재 디렉토리가 마지막 옵션으로 만 사용 된 경우 문제점이 발생할 수 있습니다. 그러면 여전히 표준 도구가 먼저 발견됩니다.
사용자가 알 수 없음

1
또한, 쉘 내장 명령이 precendence을 (당신이 입력 할 때 예 cd에서 bash, 그것은 떠들썩한 파티에 루틴 내부를 실행하고 있지 /bin/cd당신이 .``로 앞에 추가하지 않는 한)
LawrenceC

3
원래 * nix 보안 조치 중 하나 인 시스템 할당 경로 명령에있는 시스템 또는 관리자 컴파일 된 바이너리가 강제로 실행됩니다. 헬프 데스크 질문에 루트로 로그인하고 사용자 디렉토리로 이동하여 ls를 입력 하고 그들이 남긴 폭탄을로드 한 사람만큼 나쁜 것은 없습니다 .
Fiasco Labs

7
@userunknown : 처음 입력 할 때도 sl같은 문제가 있습니다. 신뢰할 수있는 디렉토리 만 있어야하며 $PATH상대 경로 는 대화식 쉘의 신뢰할 수있는 디렉토리 .아닙니다 .

2
@Basic : rm -r target내가 의미 할 때 타이핑 하면 rm -f target보통 차이가 없다. rm -f target내가 의미 할 때 입력 하면 rm -r target차이가 없거나 완전히 제거되지 않습니다. 또한, 나는 입력하기 전에 매번 생각 합니다 rm. 특히 내가 추가 -f하거나 글을 -r쓰는 경우-본질적으로 위험한 명령입니다. 노래하기 전에 아무도 생각하지 않습니다 ls.

1

현재 디렉토리가 $ PATH 변수에 없음을 의미합니다.


1

현재 디렉토리 (단일 점으로 표시)를 PATH환경 변수 에 추가하여이 문제를 해결할 수 있습니다 .
이를 수행하는 방법은 사용중인 쉘에 따라 다릅니다.
bash를 사용하는 경우 홈 디렉토리 export PATH=$PATH:..bashrc파일에 행 을 추가 할 수 있습니다 .
csh 또는 tcsh를 사용중인 경우 set PATH = ($PATH .)홈 디렉토리의 .cshrc 파일에 행 을 추가하십시오 .
IMHO, 가정용 데스크탑 컴퓨터의 경우 보안 현명한 방법입니다.


추가 할 수있는 줄 몰랐어요. 그러나 PATH로 전환하면 보안이 저하됩니다.
Yasser Zamani
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.