방금 다음과 같은 프로그램의 소스 코드를 컴파일했습니다.존더리퍼. 현재 실행하려면 디렉터리 에 john
들어가서 . 그러나 시스템 전체에 설치된 것처럼 모든 디렉터리에서 명령을 실행할 수 있는 것이 훨씬 더 좋습니다 . 매개변수를 바이너리에 전달할 수 있어야 하기 때문에 이에 대한 별칭을 만들 수 없습니다. 그래서 작은 쉘 스크립트를 만들어 보았습니다.cd
run/
./john
john
#!/bin/bash
/home/username/tools/JohnTheRipper/run/john $@
나는 이 스크립트를 /usr/local/bin
내 경로에 배치했습니다. 이 스크립트는 작동하지만오직경로를 지정하여 실행하면.
$ ls john -la
-rwxr-xr-x 1 root root 56 Mar 20 03:54 john
$ ./john --test
Will run 4 OpenMP threads
Benchmarking: descrypt, traditional crypt(3) [DES 256/256 AVX2-16]... (4xOMP)
...
$PATH
환경변수를 이용하여 실행해봐도 작동하지 않습니다.
$ which john
/usr/local/bin/john
$ john --test
bash: syntax error near unexpected token `--test'
왜 이런가요? 명령줄 인수가 내 쉘 스크립트에 전달되지 않는 이유는 무엇입니까? 그리고 john
임의의 디렉터리에서 명령을 실행하고 인수를 전달할 수 있도록 어떻게 설정해야 합니까 ?
메모솔루션은 매개변수를 John에게 전달할 때 상대 경로를 허용할 수 있어야 합니다. 예를 들어, 내가 d/
파일이 있는 디렉토리에 있다면 wordlist.txt
다음과 같이 john을 실행할 수 있기를 원합니다.
john --wordlist=./wordlist.txt
답변1
그만큼Kamil Maciorowski의 댓글이 문제를 해결하는 데 도움이되었습니다. 사용자 오류였습니다.
$ type -a john
john is aliased to `(cd ~/tools/JohnTheRipper/run/ && ./john )'
john is /usr/local/bin/john
위에서는 의 출력을 볼 수 있습니다 type -a
. 원래는 아래 첨자를 사용하는 별칭을 만들었고 그것이 작동하지 않을 때 실행 파일을 심볼릭 링크하려고 시도하고 다른 별칭을 시도한 다음 앞서 언급한 스크립트를 만들어 보았습니다. 그러나 변경할 때마다 .bashrc
실행 했기 때문에 이들 중 어느 것도 작동하지 않았습니다.
$ source .bashrc
source
원래 별칭을 덮어쓰지 않을 것이라는 사실을 몰랐습니다 john
... 별칭이 변수보다 우선하기 때문에 $PATH
전체 시간 동안 john
인수를 사용하지 않는 동일한 원래 하위 쉘을 실행하고 있었습니다. 을 실행하면 unalias john
이제 모든 것이 작동합니다.
메모에서 심볼릭 링크를 만드는 경우 /usr/local/bin
이것이 더 나은 대안이라는 데 동의하지만 불행히도 다음 출력에서 볼 수 있듯이 이 상황에서는 작동하지 않습니다.
$ ls -la john
lrwxrwxrwx 1 root root 39 Mar 20 12:31 john -> /home/username/tools/JohnTheRipper/run/john
$ john --test
fopen: $JOHN/john.conf: No such file or directory