나는 C++로 프로그램을 컴파일하고 링크하고 생성했으며 이제
foobar.out
나는 그것을 bin 디렉토리에 넣고 시스템 전체 명령처럼 사용할 수 있기를 원합니다.
ssh, echo, bash, cd...
어떻게 해야 하나요?
답변1
경로를 지정하지 않고 바이너리를 실행할 수 있는 두 가지 방법이 있습니다(절대 경로를 사용하여 실행하기 위한 별칭이나 셸 함수 생성은 포함되지 않음).
- 에 복사하세요
$PATH
. - 해당 디렉토리를
$PATH
.
예를 들어, 경로의 디렉터리에 파일을 복사하려면 /usr/local/bin
(로컬로 관리되는 소프트웨어는 어디에 배치해야 합니까?), 슈퍼유저 권한이 있어야 하며 이는 일반적으로 다음을 사용함을 의미합니다 sudo
.
$ sudo cp -i mybinary /usr/local/bin
대상 디렉터리의 기존 파일을 덮어쓰지 않도록 주의해야 합니다(그래서 -i
여기에 추가했습니다).
에 디렉토리를 추가하려면 $PATH
파일에 다음 줄을 추가하세요 ~/.bashrc
(해당 파일을 사용하는 경우 bash
).
PATH="$HOME/bin:$PATH"
...바이너리가 $HOME/bin
.
이것의 장점은 슈퍼유저 권한이 필요하지 않으며 컴퓨터의 기본 시스템에서 아무것도 변경/추가할 필요가 없다는 것입니다. 바이너리를 bin
홈 디렉터리 내의 디렉터리로 이동하기만 하면 됩니다.
변경 사항은 .bashrc
다음에 파일을 얻을 때 적용되며, source ~/.bashrc
새 터미널을 열거나 로그아웃했다가 다시 로그인하거나 수동으로 실행하면 적용됩니다.
답변2
당신은에 대해 더 읽어야합니다길바꾸다. 나는 당신이 그것을 적절하게 사용(또는 변경)해야 한다고 강력히 생각합니다.
bin 디렉토리에 넣을 수 있기를 원합니다.
아마도 당신은 /bin/
또는 /usr/bin/
. 거기에 자신의 프로그램을 추가하는 것이 현명한 것인지 잘 모르겠습니다. ln -sv $(realpath foobar.out) /usr/bin/
프로그램이 거기에 표시되기를 절대적으로 원한다면(IMHO 이것은 아마도 배포판을 엉망으로 만들었기 때문에 버그일 것입니다) 아마도 그 안에 심볼릭 링크를 넣는 것이 더 나을 것입니다(예: 이와 같은 것을 사용)패키지 관리자).
프로그램을 다음 위치에 설치하는 것이 /usr/local/bin/
더 현명 할 것입니다( 귀하가 제공하고 관리하는 것을 그대로 유지) /bin/
./usr/bin/
리눅스 배포판). 바라보다최하위 비트자세히 알아보기파일 계층 표준.
...다음과 같은 시스템 전체 명령과 같습니다...
cd
이것은 귀하의 부분에 대한 심각한 오해입니다 ( cd
나중에 질문의 원래 변형에서 올바르게 제거했습니다). cd
그렇지도 않고 그럴 수도 없다.실행 가능 파일, 이는 쉘의 내장 명령입니다(반드시 그래야 합니다).
무료로 다운로드할 수 있는 내용을 읽어보고 싶을 수도 있습니다.고급 Linux 프로그래밍cd
파일을 실행할 수 없는 이유 이해 (현재작업 목록모든 프로세스 상태의 일부이며 모든 프로세스에는 자체 상태가 있으며 다음 명령을 사용하여 변경할 수 있습니다목차(2)...)
답변3
install /path/to/oobar.out /usr/local/bin/
답변4
@Kusalananda가 허용하는 답변을 추가하고 싶습니다. $HOME/bin에 홈브루 스크립트와 프로그램을 배치하는 또 다른 이점은 시스템을 업그레이드할 때 해당 내용을 잃지 않는다는 것입니다. 개인 도구 상자를 관리하고 휴대성을 높이는 더 좋은 방법입니다.