"sudo rm \\" 명령이 중단됨 - 시스템에 손상이 없는지 확인하고 싶습니다.

"sudo rm \\" 명령이 중단됨 - 시스템에 손상이 없는지 확인하고 싶습니다.

나는 무슨 일이 일어나고 있는지 알아 내려고 노력하고 있습니다. 약 한 시간 전에 sudo를 사용하여 /root에 있는 파일을 편집하고 있었는데, 저장하고 종료할 때 실수로 백슬래시 키를 눌렀고 루트가 소유한 " \" 파일이라는 파일이 내 홈 디렉토리에 생겼습니다. 권한은 640개입니다. 주어진 이름의 파일을 삭제할 수 없다는 것을 알고 다른 백슬래시를 사용하여 백슬래시를 이스케이프 처리하여 삭제하려고 시도했지만 sudo rm \\이로 인해 시스템이 중단되는 것처럼 보였고 그 시점에서 당황하여 먼저 시도했습니다 Control-C(물론 그렇지 않았습니다). 작업 기능) 및 Control-Z(키 조합을 몇 번 누른 후) 프롬프트가 반환되었습니다.

원래 명령을 실행했을 때 홈 디렉토리에 있었던 것을 확인한 후 프로세스를 찾기로 결정했고, 확실히 목록에 아직 남아 있었기 때문에 잠시 멈췄습니다. 마침내 이를 제거하기 위해 a를 실행해야 했지만 kill -9시스템의 다른 곳에서 파일이 삭제되지 않았는지 확인하고 싶었습니다. 이 명령이 중단되는 다른 이유는 생각할 수 없습니다.

답변1

나는 사용자가 sudo rm \.


아무 명령이나 입력해도 아무 작업도 수행 \되지 않습니다.Enter

개행 문자를 방금 이스케이프 처리했기 때문에 아무 작업도 수행되지 않습니다. 이와 유사한 새로운 프롬프트가 표시될 수도 있습니다 >. 그렇죠? 이는 $PS2현재 명령을 완료하기 위해 더 많은 데이터가 필요할 때 쉘이 사용하는 보조 프롬프트( )입니다 .

실수로(또는 의도적으로) 제안을 마감하지 못한 경우 다음과 같은 결과를 얻게 됩니다.

$ echo 'hello
>

거기서부터 계속하세요:

$ echo 'hello
> world'
hello
world

줄 끝에 다음을 입력 하여 \연속 줄을 도입할 수 있습니다 .

$ ls -l \
>

여기에서 이전 줄을 계속할 수 있습니다.

$ ls -l \
> /usr \
> /bin

나중에 줄 바꿈을 누르면 Enter줄 바꿈이 공백으로 변환되고 명령이 실행됩니다( ls -l /usr /bin이 예에서 입력한 것처럼).

그래서 결론은 : 당신이 입력했습니다

$ sudo rm \

그런 다음 Enter 키를 누르십시오. 이는 쉘이 아직 명령을 종료하기를 기다리고 있기 때문에 명령을 실행하지 않았음을 의미합니다. 이 시점에서 Ctrl+C취소 명령을 누르십시오.

다음 질문은: 이라는 파일을 삭제하는 방법은 무엇입니까 \? (루트 소유)

이와 같이:

$ sudo rm \\

또는 다음과 같습니다:

$ sudo rm '\'

답변2

이 답변은 제목과 질문의 사전 렌더링된 텍스트에서 실행하는 것에 대한 질문을 다룹니다 sudo rm \\. Unix.SE에 실제로 입력한 내용에 따르면 이것이 실행 중인 것 같습니다. 그러나 관찰한 동작에 따라 실제로 명령을 실행하지 않을 수도 있습니다.어느주문하다,쿠사라난다가 설명하듯이. 따라서 해당 답변도 읽어 보시기 바랍니다. 그럼에도 불구하고 두 답변 모두 다른 파일을 삭제했을 수 있다는 귀하(그리고 아마도 다른 독자)의 우려를 완화하는 데 도움이 될 것이라고 생각합니다. 결국 걱정의 일부는 실제로 무엇이 실행되고 있는지 알지 못하는 것입니다.

시스템의 다른 곳에서는 파일이 삭제되지 않는지 확인하고 싶습니다.

당신이 통과하지 않는 한-r또는 옵션을 사용 -R하면 지정한 각 파일 이름 피연산자에 대해 여러 파일을 삭제하려고 시도하지 않습니다. 파일 이름 피연산자로 전달된 셸에서 실행합니다 .--recursivermrm \\\

때로는 단일 피연산자처럼 보이지만 여러 피연산자로 확장되는 것을 전달할 수도 있습니다. 예를 들어, 또는 같은 와일드카드 문자를 사용하는 경우 *이런 일이 발생할 수 있습니다 ?. 이것은 걱정할 필요가 없습니다 \\.

때로는 파일 이름이 및 로 시작하는데 -, 이는 옵션으로 해석될 수 있습니다. 이것이 바로 일부 명령( 포함 rm)이 --옵션의 끝을 나타내는 옵션을 지원하는 이유입니다. 하지만 이 경우에도 문제가 되지 않습니다. , no \로 시작합니다 .\-

가능성은 있지만 가능성은 낮습니다.아주 나쁜 생각-- 재귀 작업 을 단순히 실행하는 것이 아니라 rm옵션을 재귀 작업에 전달하는 별칭 또는 셸 함수일 수 있습니다 . 해보셨다면 아마 아실 겁니다. 아직 이 작업을 수행하지 않았을 수도 있습니다. 하지만 확인해 볼 수 있습니다. RHEL에서 사용할 수 있는 Bash를 포함한 대부분의 Bourne 스타일 셸에서(또한 태그를 지정함)/bin/rm/bin/rm), 다음을 실행할 수 있습니다.

type rm

다음 중 하나가 표시될 가능성이 높습니다.

rm is /bin/rm
rm is hashed (/bin/rm)

또는 와 같은 옵션을 전달하는 rm별칭으로 나타날 수도 있습니다 . 그러나 , 또는 을 거치지 않는 한 , 삭제하라고 지정한 파일 이외의 여러 파일을 삭제하려고 시도하지 않습니다.-i-Irm-r-R--recursive

rmRed Hat Enterprise Linux(태그한 버전)를 포함하여 GNU/Linux 시스템에서 사용 가능한 버전)는 GNU Coreutils 중 하나입니다.여기에서 Coreutils 설명서를 읽을 수 있습니다 rm.일부 배포판은 다운스트림 패치를 적용하지만 이러한 패치는 기본 작업을 변경 rm하거나 실수로 파일을 반복적으로 삭제하는 새로운 방법을 추가해서는 안 됩니다. 동작은 기본적으로 다양한 Unix 계열 운영 체제에서 동일하며 rm, 실행 중인 운영 체제를 지정하지 않은 경우에도 위의 내용이 적용되어야 합니다.

답변3

"까다로운" 파일 이름을 제거하려면 파일 이름 앞에 다음 접두사를 붙입니다 ./.

sudo rm ./\\

/예고편이 루트 디렉터리에 흥미로운 파일(예:-rf*:

cd /
sudo rm ./-rf\ \*

그렇지 않으면 ./모든 파일이 사라질 것입니다.

관련 정보