bash 쉘에서 명령을 되돌릴 수 있습니까?


12

bash 쉘에서 실행 된 명령을 다시 실행하거나 되돌릴 수있는 (간단한) 가능성이 있는지 궁금합니다. (취소시키기 위해)

작업을 다시 실행 하기 위해 ctrl+ z조합 과 비슷한 것이 있습니까 (예 : 단어 또는 LibreOffice)?


8
짧은 대답은 아니요입니다. 일부 명령은 되돌릴 수 있지만 일반적인 실행 취소는 없습니다.
Archemar

3
다른 사람들이 말했듯이 undo명령이 없으므로 전체 운영 체제의 최신 백업이 실제로 유용합니다. 문제가 발생하면 이전 상태로 복원하면됩니다. 한 번 봐 가지고 rsnapshot도 예를 들어
ARKADIUSZ Drabczyk에게

1
halt -p 명령을 취소하는 방법을 찾고 싶습니다
Skaperen

3
@Joshua 사용자의 데이터를 손상시킬 수있는 명령으로 설명을 게시해도 아무런 설명도 허용되지 않습니다. 재밌지 않고 사이트를 복잡하게 만들고 가장 중요하게 위험합니다. 그것을 다시하지 마라.
terdon

2
shutdownlol 명령 을 실행 취소하고 싶습니다 . 그런 질문도 하루에 8 개의 투표를받을 수 있다고 믿을 수 없습니다 !!
MagExt

답변:


33

그것은 bash단지 실행 환경 이라는 것을 이해해야 합니다. 그것은 당신이 호출하는 명령을 실행합니다-명령이 무엇을하는지 아는 것은 쉘의 사업이 아니며, 원하는 실행 파일을 호출 할 수 있습니다. 대부분의 경우 실행 취소 작업이 무엇인지 명확하지 않습니다. 예를 들어 영화를 "재생"할 수 있습니까? 이메일을 "발송"할 수 있습니까? 예를 들어 "실행 취소 파이어 폭스"는 무엇을 의미합니까? 닫을 수 있지만 책갈피, 다운로드 및 기록은 동일하지 않습니다.

명령을 실행하면 명령에 관계없이 실행됩니다. 무엇을하고 있는지 아는 것은 당신에게 달려 있습니다. 이것은 개별 명령에 "실행 취소"가 없다는 것을 의미하지는 않습니다. 어리석은 실수로부터 당신을 보호 할 수있는 래퍼 함수를 ​​작성할 수도 있습니다.

예를 들어, mv덮어 쓰지 않는 한 파일을 원래 위치로 되돌려 놓으면 쉽게 되돌릴 수 있습니다. 그래서 -i덮어 쓰기 전에 물어볼 스위치가 존재합니다. 기술적으로 cpis는 반대로 rm덮어 쓰지 않는 한 is입니다 (다시 -i묻습니다). rm파일을 다시 가져 오려면 더 영구적입니다. 실제로 일부 하위 수준 해킹을 수행해야합니다 (도구가 있습니다). 파일 시스템을 블랙 박스로 간주했다면 기술적으로 전혀 불가능할 것입니다 (데이터의 논리적 및 물리적 레이아웃에 대한 세부 정보만으로도 일부 손상 제어를 수행 할 수 있습니다). rm수단은 rm당신이 "쓰레기"기능을 원한다면, 그건 그냥 사실입니다mv미리 정렬 된 디렉토리 (및 유지 관리 또는 비우기 위해 예정된 서비스)로-특별한 것은 없습니다. 그러나 -i삭제하기 전에 메시지를 표시 하는 데 사용할 수 있습니다 . 함수 또는 별명을 사용하여이 -i명령 에 항상 포함시킬 수 있습니다 .

대부분의 응용 프로그램은 다양한 방식으로 데이터 손실을 방지합니다. 대부분의 (~ all) 텍스트 편집기 ~는 이전 버전을 다시 가져 오려는 경우 마지막에 백업 파일을 만듭니다 . 일부 배포판에서는 ls기본적으로 별칭이 지정되어 숨겨 -B지지만 ( ) 있습니다. 권한을 올바르게 관리하면 많은 보호를받을 수 있습니다. 필요한 경우가 아니면 루트 권한을 가지지 말고 파일을 변경하지 않으려면 파일을 읽기 전용으로 만드십시오. 때로는 "샌드 박스"환경을 사용하는 것이 유용합니다. 복사본에서 작업을 실행하고 문제가 없는지 확인한 다음 변경 사항을 병합하거나 변경 내용을 버립니다. chroot또는 lxc스크립트가 디렉토리에서 빠져 나와 손상을 방지 할 수 있습니다.

예를 들어, 복잡한 find 명령, while 루프, 긴 파이프 라인 또는 이와 유사한 항목이있는 경우 대량으로 작업을 수행하려고 할 때 먼저 echo실행될 명령 만 실행 하는 것이 좋습니다 . 그런 다음 명령이 합리적으로 보이면 제거 echo하고 실행하십시오. 물론 현재하고있는 일이 확실하지 않다면 먼저 사본을 만드십시오. 때로는 현재 디렉토리의 tarball을 만듭니다.

tarball에 대해 이야기-tarbombs와 zipbombs는 불행히도 매우 일반적입니다 (사람들이 적절한 하위 디렉토리없이 아카이브를 만들고 압축을 풀면 파일이 주변에 흩어져서 큰 혼란을 초래할 수 있습니다). 포장을 풀기 전에 하위 디렉토리를 직접 만드는 데 익숙했습니다 ( 내용을 나열 할 수 는 있지만 게으 릅니다). 내용이 하위 디렉토리없이 아카이브 된 경우에만 하위 디렉토리를 작성하는 스크립트를 작성하려고합니다. 그러나 이런 일이 발생 ls -lrt하면 가장 최근에 파일을 찾도록 도와줍니다. 방금 이것을 예제로 들었습니다. 프로그램은 쉘이 알 수없는 많은 부작용을 가질 수 있습니다 (어떻게 할 수 있습니까? 다른 프로그램이라고합니다!) 실수를 피하는 유일한 확실한 방법은 조심해야합니다 (생각하십시오) 두 번, 한 번 실행).

아마도 가장 위험한 명령은 파일 시스템을 처리하는 명령 일 것입니다 : mkfs, fdisk / gdisk 등. 파일 시스템을 완전히 파괴 할 수 있습니다 (적절한 법의학 소프트웨어를 사용하더라도 적어도 부분 리버스 엔지니어링이 가능합니다). 명령을 실행하기 전에 항상 포맷하고 파티셔닝중인 장치가 올바른지 다시 확인하십시오.


14

Bash에는 "실행 취소"와 같은 것은 없습니다. 죄송합니다. 그렇기 때문에 명령을 다시 확인하거나 중요하지 않은 파일에서 먼저 테스트해야합니다 (가능한 경우). 그리고 루트로 일을하고 있는지 세 번 확인하십시오.)


1
Ctr + /는 bash 터미널의 특정 제어 명령에 대해 실행 취소를 수행하지만 모든 명령을 실행 취소 할 수있는 것은 아닙니다.
Eric

@EricLeschinski 당신은 어떤 참조를 제공 할 수 있습니까?
Erathiel

skorks.com/2009/09/bash-shortcuts-for-maximum-productivity 이 페이지의 답글 주석에 포함 되어 있습니다. 작동하는 것을 보려면 터미널에 단어를 입력하십시오. 커서를 문자 위로 왼쪽으로 이동하고 문자 아래에서 삭제하려면 Ctrl-d를 누른 다음 Ctrl + /를 눌러 삭제를 취소하십시오.
Eric Leschinski 2016 년

1
아, 그러나 그것은 명령을 취소하는 것과 근본적으로 다른 것입니다. 을 사용하여 파일을 제거 rm하면 파일이 사라지고 사라지고 사망하고 더 이상 존재하지 않으며 ex-file입니다 (Monty Python 경고). 이제 그 친척들은 슬픔에 울며 행동을 취소 할 수 없습니다. 당신이 말하는 것은 문자 입력 또는 삭제를 취소하는 것이며 터미널 에뮬레이터의 기능이라고 생각합니다. 방금 터미네이터에서 시도했지만 작동합니다. 다른 콘솔 (필자의 경우 Ctrl + Alt + F1)로 전환하면 작동하지 않습니다.
Erathiel

실행 취소 후 터미널 명령 항목 실행 취소 및 터미널 명령이 있습니다. 나는 전자를 찾아 여기에 왔습니다.
Eric Leschinski

11

아니요, 일반적인 실행 취소는 없지만 일부 결과는 다른 결과보다 가역적입니다. 예를 들어, rm본질적으로 두 가지 목적으로 사용됩니다-혼란을 피하고 새 파일을위한 공간을 확보하십시오. 운이 좋으면 다음과 같은 도구를 사용하여 파일의 내용을 검색 할 수 있습니다 . 실행시 파일의 시작 부분에 대한 포인터extundelete 만 덮어 쓰기 때문입니다 . 내용은 운영 체제가 (나중에 밀리 초 또는 몇 년이 일어날 수있다) 그 공간을 재사용 할 때 덮어 씁니다. 이 기능으로 인해 어느 정도 규모 의 시스템 중간에 빠지게됩니다 . 한편으로는 쓰레기가 있습니다rmrm시스템은 데이터를 즉시 잃을 위험없이 혼란을 피할 수있는 방법을 제공합니다 (실행 취소는 사소하기 때문에). 더 보수적 인 것은 한 번만 쓰고, 많은 ( "WORM") 시스템을 읽습니다.이 시스템에서는 시스템이 데이터를 때 데이터 를 삭제하거나 덮어 쓸 수 없습니다 . 스케일의 다른 쪽 끝에는 포인터 외에도 파일 내용 을 덮어 쓰는 파쇄 시스템이 있습니다 (보통 여러 번). 이 시점에서 데이터 복구 기술은 아직 존재하지 않을 수도 있습니다 (아마도 존재하지 않을 수도 있음).

따라서 가장 많이 사용되는 특정 도구 ( rm)가 유일한 대안은 아니지만 대부분의 사람들이 편하게 사용할 수있는 절충안을 제공합니다.

  • 파일 포인터를 삭제하는 것은 매우 빠르며 디스크 성능 저하에 거의 기여하지 않습니다.
  • 고도로 자동화 된 시스템의 공간이 부족할 가능성이 적습니다.
  • 매우 겸손하지만 0이 아닌 개인 정보 보호를 제공하고 반대로 복구 보장
  • 복잡성이 낮으므로 버그 또는 예상치 못한 동작 가능성이 낮습니다.

도구로 인한 절충이 허용되지 않는 경우 살펴보십시오. 적절한 결정을 내리는 도구가있을 가능성이 있습니다 .


3
이 답변의 유일한 부분은 첫 번째 행입니다
Alvaro

sysadmin 관점에서 왜 그런 방식인지 설명하려고합니다.
l0b0

9

'실행 취소'기능을 제공하는 애플리케이션은 수행 된 조치 히스토리와 조치를 취소하는 방법 또는 오브젝트 상태의 스냅 샷을 통해 이전 상태를 복원하여 수행합니다. 셸에서 실행되는 명령은 직접 작업을 수행하거나 명령을 실행하여 작업을 수행합니다.

셸 자체는 실행 된 명령 또는 프로그램으로 인한 작업을 취소 할 수 없습니다. 명령이나 프로그램이 히스토리를 유지하고 실행 취소 기능을 가지고 있다면 아마도 그 기능을 사용할 수는 있지만 쉘 자체는 사용할 수 없습니다.

예를 들어,를 실행 rm important_file.txt하면 파일 시스템 드라이버가 파일 시스템에서 파일을 "링크 해제"하도록 지시합니다. 셸은 작업을 수행하지 않으며 수행하는 작업 만 호출합니다 rm.

손실 된 파일을 삭제 취소하려는 경우 일반적으로 파일을 삭제해도 실제로는 제거되지 않고 참조 만 제거되므로 삭제가 가능할 수 있습니다. 일정 시간이 지나면 다른 데이터가 디스크에 저장 될 때 파일의 내용을 덮어 쓰지만 잠시 동안 원본 파일을 찾아 "다시 연결할 수있는"유틸리티를 사용하여 원본 파일을 복원 할 수 있습니다.


1

아니요. 그러나 루트 권한이있는 디렉토리로 엉망이되어 무언가를 망쳤다 고 말하면 최선의 방법은 모든 파일을 USB 드라이브 또는 SD 카드에 저장하고 운영 체제를 재설정하는 것입니다 ISO 파일 (아직 가지고 있다면, 다른 파일을 오프라인으로 가져올 수 있습니다 ...) wraeth가 말한 것처럼 파일 데이터를 파일 이름에 다시 연결하고 파일 내용을 저장하려면 응용 프로그램을 다운로드하십시오 (이 질문 참조 ). 더 심층적 인 답변을 원하시면, 당신이 뭘 잘못했는지 말씀해 주시겠습니까?


1

나는 다른 사람들의 말을 되풀이하지 않을 것이지만, 당신이 어디에서 왔는지 볼 수 있습니다. "위험한"명령을 실행하는 표준 접근 방식은 항상 모든 변수가 올바르게 확장되는지 여부를 확인하기 위해 반향하는 것입니다. 특정 인스턴스를 인용 할 수 있으면 더 도움이 될 수 있습니다.

예를 들어, 다음과 같은 상황에서 :

for i in $(cat /my/file); 
do 
   echo "Now removing file $i using rm -f $i"
done

1

다른 좋은 대답과 마찬가지로 셸에는 "실행 취소"가 없습니다. 그러나 특정 사용 사례에서를 취소 shutdown하려면 종료 프로세스를 종료 할 수 있습니다 : https : //.com/a/526330

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.