>

인터넷에 접속할 수 없거나 컴퓨터를 재부팅 할 수 없다면 어떻게 복구 할 수 있습니까

chmod -x chmod

?

  • 답변 # 1

    1- chmod 를 구현하는 프로그래밍 언어를 사용하십시오.

    루비 :

    ruby -e 'require "fileutils"; FileUtils.chmod 0755, “chmod"'
    
    

    파이썬 :

    python -c "import os;os.chmod('/bin/chmod', 0755)”
    
    

    펄 :

    perl -e 'chmod 0755, “chmod”'
    
    

    Node.js :

    require("fs").chmod("/bin/chmod", 0755);
    
    

    C :

    $ cat - > restore_chmod.c 
    #include <sys/types.h>
    #include <sys/stat.h>
    int main () {
        chmod( "/bin/chmod", 0000755 );
    }
    ^D
    $ cc restore_chmod.c
    $ ./a.out
    
    

    2-chmod를 사용하여 다른 실행 파일 만들기

    실행 파일을 생성하여 :

    $ cat - > chmod.c 
    int main () { }
    ^D
    $ cc chmod.c
    $ cat /bin/chmod > a.out
    
    

    실행 파일을 복사하여 :

    $ cp cat new_chmod
    $ cat chmod > new_chmod
    
    

    3-BusyBox 시작 (Chmod가 내부에 있음)

    4-Gnu Tar 사용

    특정 권한으로 아카이브를 생성하고이를 사용하여 chmod를 복원하십시오 :

    $ tar --mode 0755 -cf chmod.tar /bin/chmod
    $ tar xvf chmod.tar
    
    

    같은 일을하지만 즉석에서 파일을 만들려고 귀찮게하지 마십시오 :

    tar --mode 755 -cvf - chmod | tar xvf -
    
    

    다른 머신에 대한 소켓을 열고, 아카이브를 생성하고 로컬로 복원하십시오 :

    $ tar --preserve-permissions -cf chmod.tar chmod
    $ tar xvf chmod.tar
    
    

    또 다른 가능성은 정기적으로 아카이브를 생성 한 다음 편집하여 권한을 변경하는 것입니다.

    5- cpio

    cpio  아카이브를 조작 할 수 있습니다. cpio file 를 실행할 때 처음 21 바이트 이후에는 파일 권한을 나타내는 3 바이트가 있습니다. 편집하면 좋습니다 :

    echo chmod |
      cpio -o |
      perl -pe 's/^(.{21}).../${1}755/' |
      cpio -i -u
    
    

    6-동적 로더

    /bin/ld.so chmod +x chmod
    
    

    (실제 경로는 다를 수 있음)

    7- /proc  마법사 (비평가)

    단계별 :

    아이 노드를 캐시로 강제하는 무언가를하라 ( attrib ls -@ 등)

    VFS 구조에 대한 kcore 확인

    sed 사용  또는 커널이 인식하지 않고 실행 비트를 변경하는 것과 유사한 것

    chmod +x chmod 실행  한 번

    8-시간 여행 (git;아직 테스트되지 않음)

    먼저, 다른 모든 것들도 방해받지 않도록하자 :

    $ mkdir sandbox
    $ mv chmod sandbox/
    $ cd sandbox
    
    

    이제 리포지토리를 만들어 다시 돌아갈 수있는 태그를 붙입니다 :

    $ git init
    $ git add chmod
    $ git commit -m '1985'
    
    

    현재 시간 여행 :

    $ rm chmod
    $ git-update-index --chmod=+x chmod
    $ git checkout '1985'
    
    

    git 기반 솔루션이 많이 있어야하지만 실제로 시스템의 chmod 를 사용하려고하는 git 스크립트를 칠 수 있음을 경고해야합니다

    9-불과 싸우다

    다른 운영 체제와 운영 체제를 싸울 수 있다면 좋을 것입니다. 즉, 머신 내부에서 운영 체제를 시작하고 외부 파일 시스템에 액세스 할 수있는 경우입니다. 불행히도, 실행하는 거의 모든 운영 체제는 Docker, Container, Jail 등의 종류가 될 것입니다. 슬프게도 불가능합니다.

    아니요?

    EMAC 솔루션은 다음과 같습니다.

    Ctrl+x b > *scratch* 
    (set-file-modes "/bin/chmod" (string-to-number "0755" 8))
    Ctrl+j
    
    

    10-Vim

    EMAC 솔루션의 유일한 문제점은 제가 실제로 Vim 종류의 사람이라는 것입니다. 내가이 주제를 처음으로 살펴 보았을 때 Vim은 이것을 할 수있는 방법이 없었지만 최근 몇 년간 누군가가 우주를 수정했습니다. 이제 우리는 이것을 할 수 있습니다 :

    vim -c "call setfperm('chmod', 'rwxrwxrwx') | quit"
    
    

  • 이전 networkmanager - 오픈 수세 - 네트워크 문제
  • 다음 BSD/Gnu Specific Man을 호출하는 방법