param은 내 입력이고 cat 명령에 추가되므로 기본적으로
eval "cat /a/really/long/path/idk/how/long/$param1"
param1을 다른 것으로 변경한 후 무차별 대입을 하지 않고도 home/root에 액세스할 수 있습니다. ../
루트로 직접 이동할 수 있는 구문이 있습니까? 아니면 이것이 집이
cat '/a/really/long/path/idk/how/long' + $param1
되는 방식이다
cat '/a/really/long/path/idk/how/long/SYNTAX-To-HOME/.bashrc
.
답변1
파일 이름의 접미사만 선택할 수 있고 루트 디렉터리에서 시작하는 경로를 표시하려면 충분한 수의 접미사를 사용하는 것이 ../
유일한 방법입니다. 루트 중간에서 경로를 "다시 시작"할 수 있는 방법은 없습니다. 또한 파일에서 홈 디렉터리를 참조할 수 있는 방법이 없으므로 사용자의 홈 디렉터리가 이라고 가정하고 이와 유사한 것을 사용해야 합니다 ../../../../../home/username
(다시 말하지만, even 사용 ) .../
/home/username
일부 응용 프로그램은 파일 이름에 대한 추가 확장을 수행하지만 이는 일반적이지 않습니다. 비교적 일반적인 확장인터렉티브~/
응용프로그램은 경로 시작 부분에서 확장됩니다. 명령줄 응용 프로그램은 이 작업도 수행하지 않습니다. 왜냐하면 이 확장은 셸의 작업이기 때문입니다.
필요한 수는 ../
심볼릭 링크가 유효 깊이를 변경하므로 제어할 수 없는 접두사의 경로 구성 요소 수일 수도 있고 아닐 수도 있습니다. 예를 들어 /dir
, /foo
및 가 /foo/bar
디렉토리이고 가 심볼릭 /foo/sym
링크인 경우 이는 루트 디렉토리입니다. 하지만 심볼릭 링크라면 yes 이고 루트 디렉터리로 돌아가야 합니다 ./dir
/foo/bar/..
/sym
/foo/bar
/sym/..
/foo
/sym/../..
../
경로 길이 제한이 발생하지 않는 한 너무 많아도 해가 되지 않습니다.
또 다른 가능한 접근 방식은 상위 디렉터리에 대한 기호 링크를 사용하는 것입니다. 하지만 그러기 위해서는 그러한 상징이 존재해야 하고, 그것을 이해해야 합니다. 마운트 지점(예 mount --bind / /a/really/long/path/root
: )을 사용하면 디렉터리 트리를 벗어날 수도 있습니다.
지금까지 내 답변에서는 파일 이름에 대해 논의했습니다. 주사할 수 있다면쉘 명령, 에서 볼 수 있듯이 eval "cat /a/really/long/path/idk/how/long/$param1"
경로가 구문 분석되는 방식은 관련이 없습니다. 예를 들어 로 설정된 셸 특수 문자를 삽입하면 param1
됩니다 nonexistent || true; cat /the/file/I/want
.