!["sudo rm \\" 명령이 중단됨 - 시스템에 손상이 없는지 확인하고 싶습니다.](https://linux55.com/image/117674/%22sudo%20rm%20%5C%5C%22%20%EB%AA%85%EB%A0%B9%EC%9D%B4%20%EC%A4%91%EB%8B%A8%EB%90%A8%20-%20%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%97%90%20%EC%86%90%EC%83%81%EC%9D%B4%20%EC%97%86%EB%8A%94%EC%A7%80%20%ED%99%95%EC%9D%B8%ED%95%98%EA%B3%A0%20%EC%8B%B6%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
나는 무슨 일이 일어나고 있는지 알아 내려고 노력하고 있습니다. 약 한 시간 전에 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
하면 지정한 각 파일 이름 피연산자에 대해 여러 파일을 삭제하려고 시도하지 않습니다. 파일 이름 피연산자로 전달된 셸에서 실행합니다 .--recursive
rm
rm \\
\
때로는 단일 피연산자처럼 보이지만 여러 피연산자로 확장되는 것을 전달할 수도 있습니다. 예를 들어, 또는 같은 와일드카드 문자를 사용하는 경우 *
이런 일이 발생할 수 있습니다 ?
. 이것은 걱정할 필요가 없습니다 \\
.
때로는 파일 이름이 및 로 시작하는데 -
, 이는 옵션으로 해석될 수 있습니다. 이것이 바로 일부 명령( 포함 rm
)이 --
옵션의 끝을 나타내는 옵션을 지원하는 이유입니다. 하지만 이 경우에도 문제가 되지 않습니다. , no \
로 시작합니다 .\
-
가능성은 있지만 가능성은 낮습니다.아주 나쁜 생각-- 재귀 작업 을 단순히 실행하는 것이 아니라 rm
옵션을 재귀 작업에 전달하는 별칭 또는 셸 함수일 수 있습니다 . 해보셨다면 아마 아실 겁니다. 아직 이 작업을 수행하지 않았을 수도 있습니다. 하지만 확인해 볼 수 있습니다. RHEL에서 사용할 수 있는 Bash를 포함한 대부분의 Bourne 스타일 셸에서(또한 태그를 지정함)/bin/rm
/bin/rm
세게 때리다), 다음을 실행할 수 있습니다.
type rm
다음 중 하나가 표시될 가능성이 높습니다.
rm is /bin/rm
rm is hashed (/bin/rm)
또는 와 같은 옵션을 전달하는 rm
별칭으로 나타날 수도 있습니다 . 그러나 , 또는 을 거치지 않는 한 , 삭제하라고 지정한 파일 이외의 여러 파일을 삭제하려고 시도하지 않습니다.-i
-I
rm
-r
-R
--recursive
rm
Red Hat Enterprise Linux(태그한 버전)를 포함하여 GNU/Linux 시스템에서 사용 가능한 버전라엘)는 GNU Coreutils 중 하나입니다.여기에서 Coreutils 설명서를 읽을 수 있습니다 rm
.일부 배포판은 다운스트림 패치를 적용하지만 이러한 패치는 기본 작업을 변경 rm
하거나 실수로 파일을 반복적으로 삭제하는 새로운 방법을 추가해서는 안 됩니다. 동작은 기본적으로 다양한 Unix 계열 운영 체제에서 동일하며 rm
, 실행 중인 운영 체제를 지정하지 않은 경우에도 위의 내용이 적용되어야 합니다.
답변3
"까다로운" 파일 이름을 제거하려면 파일 이름 앞에 다음 접두사를 붙입니다 ./
.
sudo rm ./\\
/
예고편이 루트 디렉터리에 흥미로운 파일(예:-rf*:
cd /
sudo rm ./-rf\ \*
그렇지 않으면 ./
모든 파일이 사라질 것입니다.