dotnet tools를 sudo로 실행하는 경우 command not found
dotnet-dump를 설치하면,
$ dotnet tool install -g dotnet-dump
You can invoke the tool using the following command: dotnet-dump
Tool 'dotnet-dump' (version '8.0.547301') was successfully installed.
$ dotnet-dump ps
No supported .NET processes were found
(
PATH에 등록이 되므로) ps 명령어까지는 잘 수행되지만, collect 명령어에서는 오류가 발생합니다.
// 30417 닷넷 프로세스가 있는 경우
$ dotnet-dump collect -p 30417
Writing full to /home/testusr/logs/core_20241002_153505
Unhandled exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.Net.Sockets.SocketException (13): Permission denied
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.CreateException(SocketError error, Boolean forAsyncThrow)
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ConnectAsync(Socket socket)
at System.Net.Sockets.Socket.ConnectAsync(EndPoint remoteEP, CancellationToken cancellationToken)
at System.Net.Sockets.Socket.ConnectAsync(EndPoint remoteEP)
...[생략]...
"Permission denied" 오류에 나오듯이 권한이 없기 때문인데요, 따라서 대개의 경우 sudo를 붙여야만 합니다.
$ sudo dotnet-dump ps
sudo: dotnet-dump: command not found
그런데, 보다시피 정작 sudo로 실행하면 저렇게 명령어를 찾을 수 없다고 나옵니다. 분명히 tools 디렉터리가 PATH에 등록돼 있지만,
$ sudo echo $PATH
/home/testusr/.local/bin:...[생략]...:/home/testusr/.dotnet/tools:/home/testusr/.local/bin:/home/testusr/istio/bin
dotnet-dump를 찾을 수 없는 것입니다. 왜냐하면, sudo 실행했을 때 적용되는 환경변수는
/etc/sudoers에 있는 secure_path를 따르기 때문입니다.
암튼, 저렇기 때문에 어쩔 수 없습니다, sudo로 할 때는 그냥 전체 경로를 적어주거나,
$ which dotnet-dump
/home/testusr/.dotnet/tools/dotnet-dump
secure_path 중에 적당한 경로를 골라, 가령 /usr/local/bin에 링크를 걸어주면 됩니다.
$ sudo ln -s /home/testusr/.dotnet/tools/dotnet-dump /usr/local/bin/dotnet-dump
$ ll /usr/local/bin
total 8
drwxr-xr-x 2 root root 4096 Oct 8 00:14 ./
drwxr-xr-x 10 root root 4096 Aug 20 2021 ../
lrwxrwxrwx 1 root root 37 Oct 8 00:14 dotnet-dump -> /home/testusr/.dotnet/tools/dotnet-dump*
$ which dotnet-dump
/usr/local/bin/dotnet-dump
$ sudo dotnet-dump ps
No supported .NET processes were found
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]