이번 시간에는 리눅스 which 명령어를 알아보겠습니다.
which는 command의 위치를 알려줍니다. 예를 들어 java라던지, ls와 같은 것들의 명령어 위치를 알려줍니다.
제 서버에는 java가 설치되어 있지 않습니다. 그렇기 때문에 처음에 which java를 입력하면 아무 것도 나오지 않습니다. java를 설치하고 나서, 다시 which java를 입력해 보겠습니다.
그러면, /usr/bin/java에 설치되었다고 나옵니다.
ls로 상세 정보를 보면, 링크 파일임을 알 수 있습니다. 이들을 통해서 따라 들어가 봅시다. 먼저, java가 /etc/alternatives/java의 링크임을 알 수 있어요. /etc/alternatives로 들어가 봅시다.
그러면 java가 있을 텐데요. java가 /usr/lib/jvm/java-17-openjdk-amd64/bin/java를 가리키고 있음을 볼 수 있어요. bin 경로로 들어가 보겠습니다.
그러면 이제서야 java 실행파일이 나옵니다. 여기서, 중간에 끼어 있는 부분이 /etc/alternatives인데요.
update-alternatives --config java를 입력하면 어떤 대체 버전을 선택할 것인지를 물어봅니다. 1번을 선택해 볼까요?
그러고 나서 다시 /etc/alternatives에 가 보면, java가 가리키는 것이 java-11-openjdk-amd64/bin/java임을 알 수 있습니다. 결국, /etc/alternatives는 어떤 버전을 선택했느냐에 따라서 실행하는 파일을 다르게 하는 중개자 역할을 한 셈입니다.
ls나 cmp 같은 명령어의 위치도 쉽게 찾을 수 있습니다. ls는 /usr/bin/ls에, cmp는 /usr/bin/cmp에 있다고 하네요.
실제로 /usr/bin에 들어가 보면, ls가 있음을 볼 수 있어요. 그러면 ls 명령어를 쳤을 때 실제로 어떤 실행 파일을 실행시킬까요? 이건, strace로 어렵지 않게 볼 수 있는데요.
첫 줄에 execve가 보입니다. 그리고 1번째 인자로 "/usr/bin/ls"가 보이는데요. 이는 /usr/bin/ls를 실행시켰다는 것을 의미합니다.
'OS > 리눅스' 카테고리의 다른 글
리눅스 proc의 cwd에 대해 알아봅시다. (2) | 2022.09.19 |
---|---|
리눅스 crontab 명령어를 알아보고 간단하게 사용해 봅시다. (0) | 2022.09.16 |
shell script 정수 연산을 해 봅시다. (0) | 2022.09.01 |
shell read 명령어에 대해서 알아봅시다. (0) | 2022.08.10 |
리눅스 /usr/share/zoneinfo와 tzdata.zi파일에 대해서 간단하게 알아봅시다. (0) | 2022.07.05 |
최근댓글