Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
티스토리 뷰
커스텀 명령어
리눅스 쉘에 커스텀 명령어를 만들어보자.
리눅스 명령어에는 타입이 존재한다.
위와 같이 type 명령어를 통해서 명령어의 타입을 확인할 수 있다.
cd와 같이 기본적인 셀 자체 내장의 명령어는 shell builtin으로으로 출력되지만
외부 명령어인 mv, cp는 명령어 파일이 저장된 위치가 출력된다.
명령어 파일의 디렉터리
모든 것이 파일인 리눅스에서는 명령어도 결국 파일로 이루어진다.
파일을 실행하기 위해서는 경로와 이름을 사용해서 실행한다.
Ex) ./myfile
하지만 환경 변수인 PATH에 경로 정보를 등록하면 파일을 실행하기 위한 경로를 생략할 수 있다.
따라서 경로 지정이 명령어 실행 시 현재 폴더에 해당 파일이 없다면, PATH에 등록된 정보를 통해 실행 가능한 명령어인지 확인하게 된다.
아래가 환경 변수 PATH로 저장된 경로이다.
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
해당 폴더에 들어가면 실제로 우리가 사용하는 명령어 파일들이 보인다.
따라서 위 경로에 있는 파일은 경로 정보 없이도 명령어로 실행할 수 있다.
이때 명령어를 등록하기 위한 3가지 방법 존재한다.
1. 실행 파일을 PATH 경로 중 하나의 폴더에 삽입
2. 실행 파일의 폴더를 PATH 환경 변수에 등록
3. 실행 파일의 심볼릭 파일 링크를 1 또는 2번을 사용해 위치시킴.
3번 방식이 PATH 환경 변수가 많아지거나 수정이 거의 없기 때문에 주로 사용된다.
이번에는 확실한 확인을 위해 1번을 통해 확인해 보자.
텍스트를 출력하는 실행파일을 환경 변수 폴더에 직접 만들어 보자.
# its my command을 출력하는 파일을 폴더에 생성.
echo 'echo "its my command"' > /usr/local/bin/mycommand
#실행 권한 부여
chmod +x /usr/local/bin/mycommand
정상적으로 mycommand 명령어 호출을 해보면 세팅한 텍스트가 출력이 된다.
만약 다른 폴더에 유지하고 싶다면 아래와 같이 심볼릭 링크를 생성해서 환경 변수 폴더에 넣어주자.
ln -s ./mycommand /usr/bin/mycommand
이렇게 설정한 커스텀 명령어는 다른 폴더에서도 경로 없이 명령어 실행이 된다.
명령어 이름 바꾸기
명령어가 실행되는 방법을 모두 이해했다면 이름을 바꾸는 법은 매우 간단하다.
바로 PATH 경로에 있는 실제 명령어 파일의 이름을 바꾸어 버리면 된다.
아래처럼 간단히 명령어 이름을 바꿀 수 있다.
mv /usr/local/bin/mycommand /usr/local/bin/myecho
이런 직접적인 방식은 해당 명령어를 이미 사용하던 스크립트 등에 영향이 있을 수 있으므로, alias 명령어를 통해 별칭을 만들어 사용하는 것이 적절할 수 있다.
실제 명령어 파일 확인해 보기
실제로 명령어 파일의 데이터를 까보자.
mv 파일을 까보니 텍스트가 다 깨진다.
이 이유는 해당 파일이 ELF 64-bit LSB pie executable 포맷 바이너리로 이미 컴파일된 파일이기 때문이다.
참조
https://apro-developer.tistory.com/85
'개발 > 기타' 카테고리의 다른 글
(알림 시스템으로 알아보는) 분산 시스템의 trade-off (두 장군 문제) (2) | 2024.12.08 |
---|---|
URL 링크 단축 사용 이유와 링크 단축기 구현 방식 (0) | 2024.09.10 |
리눅스에서의 APT, YUM, DNF의 차이 (0) | 2024.08.19 |
Hypervisor의 overcommit (0) | 2024.07.20 |
왜 Web server와 WAS의 분리가 필요할까? (1) | 2024.07.14 |