Linux에서 실행 취소가 있습니까? 개의 파일 이름을 바꿨습니다. 이름을

하나의 배치 스크립트에서 몇 개의 파일 이름을 바꿨습니다. 이름을 바꾸지 않고 변경 사항을 취소 할 수있는 방법이 있습니까?

리눅스는 어떤 기본 방식을 undo제공합니까?



답변

다른 유니 세와 마찬가지로 Linux는 기본적으로 실행 취소 기능을 제공하지 않습니다. 철학은 사라지면 사라진다는 것입니다. 중요한 경우 백업되어야합니다.

이전 버전의 사본을 자동으로 유지하는 퓨즈 파일 시스템이 있습니다 : copyfs , 모든 배포판에서 사용 가능합니다. 물론 많은 리소스를 사용할 수 있습니다.

이러한 사고를 방지하는 가장 좋은 방법은 버전 제어 시스템 (cvs, bazaar, darcs, git, mercurial, subversion 등)을 사용하는 것입니다. 배우는 데 약간의 시간이 걸리지 만, 중장기 적으로는 대가를 치릅니다.


답변

불행하게도.


답변

어떤 유닉스에서도 마법의 실행 취소가 없습니다. 유닉스는 당신이하고있는 것을 알고 있다고 가정합니다. 실행 취소 지원을 위해 VCS를 사용하십시오 (텍스트 편집기에도 내장되어있을 수 있습니다).

대부분의 파일 시스템에는 투명하게 수행 할 수있는 기능이 없습니다.

Mac과 Windows에서 타임머신과 시스템 복원은 각각 백업 / 변경 제어 시스템입니다.


답변

명령 행에는 실행 취소가 없습니다. 그러나 rm -i및로 명령을 실행할 수 있습니다 mv -i. “확실합니까?”라는 메시지가 표시됩니다. 그들이 명령을 실행하기 전에 질문하십시오.

시작 스크립트에 별칭을 추가 할 수도 있습니다 (예 : ~/.bashrc또는 /etc/bash.bashrc).

alias remove='rm -i'
alias move='mv -i'

편집 : 아래 제안에 따라 기본 명령의 별칭을 지정하라는 조언을 제거했습니다. 대신, 지금 새로운 명령을 소개합니다).


답변

Linux / Unix 시스템에 삭제 취소 기능이없는 이유는 대부분의 파일 시스템이 정보를 저장하는 방식에서 비롯됩니다. 파일 메타 정보는 디스크의 나머지 부분에있는 inode에 대한 참조와 함께 디스크의 전면에 저장됩니다. 일반적으로 대부분의 파일 시스템은이 메타 영역의 파일에 10 개의 블록을 할당합니다. 처음 7은 처음 7 개의 inode를 나타냅니다. 8 번째와 9 번째는 inode 목록 (확실히 연결된 블록)으로 이동하고 10 번째는 목록 (목록으로 3 배 연결된 블록) 목록으로 이동합니다. 이것은 파일 시스템마다 다르지만 (ext4, jfs, xfs 등) 이러한 블록 목록은 일반적으로 2GB에서 몇 TB에 이르는 파일 크기를 지정할 수 있습니다.

그러나이 모든 정보는 디스크의 전면에 저장되므로 파일을 지울 때 디스크의 inode를 어떤 메타 데이터에 속하는지 참조 할 방법이 없습니다. 반면 FAT32와 NTFS는 실제로 일부 헤더 정보를 파일 자체와 함께 저장하여 블록 세트에 속하는 파일이 무엇인지 쉽게 식별 할 수 있습니다 (새로운 파일이 공간을 확보하지 않는 한). 리눅스 작업에서 무언가를 삭제할 때 효율성을 위해 새로운 데이터로 즉시 덮어 쓰는 것이 항상 가장 먼저입니다.


답변

실행 취소 기능을 원한다면 소스 컨트롤을 사용하십시오. Subversion은 실제로 단일 사용자 컴퓨터에서 매우 잘 작동합니다. 홈 시스템의 모든 개인 파일을 제어하는 ​​데 사용합니다. 재난이 발생하기 전까지는 잔인한 것처럼 보이거나 불량한 스크립트 나 명령 줄 오타가 발생합니다.


답변

.bashrc에 추가하고 싶은 한 가지는 복사 및 제거 기능입니다. 다음과 같은 것 :

cprm(){
    cp -p $1 ~/deleted/$1
    rm $1
}

그러나 rm이 아닌 cprm을 입력하는 습관을 들여야합니다.

디스크 공간이 제한되어 있으면 삭제 된 영역을 유지해야합니다.