2010-04-07 3 views
6

누군가가 전체 rootdir을 원격 시스템의 하위 디렉토리로 옮겼을 때 cp, mv 등의 모든 시스템 도구가 ' 더 이상 일하지 마라. 우리는 활성 세션을 가졌지 만 bash 내장 기능 만 사용하여 파일을 복사/이동하는 방법을 찾지 못했습니다.linux/solaris에서 파일/폴더 복사/복사 bash 내장 기능 만 사용

누군가이 방법을 알고 있습니까? 나는 심지어 생각

while read -r; do echo $LINE; done 

으로 currentdir의 CP 또는 MV 바이너리를 복사 한 다음 파일이 리디렉션,하지만 작동하지 않았다. 에코를 사용하여 복사/표시 할 수없는 바이너리 파일의 모든 특수 인쇄 할 수없는 문자 때문입니다.

감사합니다.

+2

그게 효과가 있다고해도 어떻게 chmod + x를하겠습니까? :-( – ephemient

답변

0
/subdir/bin/mv /subdir/

또는 귀하의 설명에 뭔가가 빠졌습니까?

+3

'/ bin/mv'가 동적으로 링크되어있는 경우 (요즘과 같이)'/ lib'도 함께 옮겨지면로드되지 않습니다 – ephemient

+0

예, 동적으로 링크됩니다 – KullDox

5

사전 설치된 sash으로 준비했다면 정적이며 사본이 내장되어 있습니다 (-cp).

그렇지 않으면 LD_LIBRARY_PATH=/copied/to/path/lib /copied/to/path/bin/cp이 효과가 있습니까?

예상되는 곳에 ld-so가 없으면 문제가있을 수 있습니다.

+0

맞음, ld - 장소가 문제입니다. – KullDox

0

다른 컴퓨터에 액세스 할 수있는 한 가지 방법은 Busybox 바이너리를 다운로드하고 컴파일하는 것입니다. 시스템을 복원하는 데 필요한 대부분의 공통 도구가 하나의 2 진 파일로 포함됩니다. 시스템이 원격 인 경우에는 작동하지 않을 수 있습니다.

+0

예, 우리는 비슷한 것을 찾으려고 노력했습니다. SUNWsutl 패키지를 다운로드했지만 찾지 못했습니다. 그러나 그럼에도 불구하고 어떻게 시스템에 업로드 할 수 있습니까? – KullDox

+0

바이너리를 얻기 위해 사용할 수있는 원격 머신 (nmap)에서 열려있는 서비스는 무엇입니까? Douglas의 LD_LIBRARY_PATH sugestion이 기본 명령에 도움이되지 않습니까? –

+0

더 나은 아직, 어떤 명령을 가지고 있습니까? –

10
/newroot/lib/ld-linux.so.2 --library-path /newroot/lib \ 
    /newroot/bin/mv /newroot/*/

(Solaris 용 유사하지만, 나는 동적 링커가 그 라인을 따라 ld.so.1 또는 뭔가라는 생각한다.)

또는 쉘은 쉬처럼 (CSH 같은하지 않음) 인 경우,

LD_LIBRARY_PATH=/newroot/lib /newroot/bin/mv /newroot/*/
+0

실제로 crle 명령은 http://chrismiles.info/systemsadmin/solaris/articles/ld-path-customisation-on-solaris/에서보다 나은 해결책이 될 것입니다. 사용 가능한지 확인해야합니다. – KullDox

3

다음은 cp에 대한 합리적인 게토 대체품입니다. 파일이 새 행 (대부분의 텍스트 파일과 같이)으로 끝나면 echo -E, 그렇지 않으면 echo -nE (대부분의 바이너리와 유사)이 필요합니다.

echo -nE "`< in.file`" > out.file 
+1

0x00 값을 가진 (적어도) 바이트를 건너 뜁니다. 당신이해야 할 속임수의 예를 보려면, [내 대답은 여기를 참조하십시오] (http://stackoverflow.com/questions/2003803/show-hexadecimal-numbers-of-a-file/2004276#2004276) 전적으로 Bash 내장 명령을 사용하여 작성된'hexdump '버전. 그리고 나서 ** ephemient **가 말했습니다 : "당신은 어떻게 chmod + x를 복사하겠습니까?" –

+0

놀라운 것들. 나는 당신의 bash 마법사를 공부할 것입니다! –

0

낡은 스레드이지만, 정확히 같은 어리석은 실수가 있습니다./lib64가 원격으로 /lib64.bak로 옮겨졌고 모든 것이 작동을 멈췄습니다.

이는 x86_64에 설치, 그래서 ephemient의 솔루션이 작동하지 않는 :

# /lib64.bak/ld-linux-x86-64.so.2 --library-path /lib64.bak/ /bin/mv /lib64.bak/ /lib64 

지금 시스템이 회수된다

# /lib64.bak/ld-linux.so.2 --library-path /lib64.bak/ /bin/mv /lib64.bak/ /lib64 
/bin/mv: error while loading shared libraries: /bin/mv: wrong ELF class: ELFCLASS64 

를하는 경우, 다른 LD-리눅스는 사용했다 . 감사합니다.