rm 명령의 별명을 지정하고 더 안전하게 만드는 모범 사례


21

얼마 전에 잘못된 rm -rf *디렉토리에서 실행했기 때문에 홈 폴더를 잘못 삭제 했습니다. 작업 디렉토리는 홈 폴더였습니다!

rm명령 의 별칭이 있었으면 좋았지 만 그렇지 않았습니다.

이제에 대한 별칭으로 스크립트를 만들 계획입니다 rm.

제안 할 모범 사례가 있습니까?

감사.


7
나는 동정심이 없지만 rm안전을 위해 별칭을 요구하는 위험한 명령 이라고 생각하지 않습니다 . rf옵션 을 사용하면 쉘 에 위험하다는 것을 알았으며 신중하게 생각했으며 _really_ 내가하고 싶은 일 입니다. 해당 옵션을 사용하지 않으면 전체 홈 폴더를 삭제할 수 없습니다.
user26512

이 질문에 stackoverflow.com/questions/373156/… 과 동일한 정보가 포함 됩니까?
David Harris

1
@grossvogel 아무 공격도 취하지 않았다 :)! 그러나이 명령의 별명 지정은 일반적입니다. 많은 사람들이 -f 옵션을 사용하여 각 삭제를 확인하지 않습니다.

23
별칭을 rm사용하면 해당 별칭에 익숙해집니다. 그러면 언젠가는 별칭이 존재하지 않는 시스템을 사용하게되며 예상치 못한 일이 발생할 경우 잘못된 작업을 수행하게됩니다. 그리고 아마도 당신의 시스템이 아닐 것입니다.
Stefan Lasiewski

2
@puller RHEL과 같은 시스템에서 어리석게 별칭 rm이있는 시스템에만 해당 됩니다 rm -i.
Daniel Beck

답변:


30

사용자 정의를 원하면 rm전화하지 말고 rm이름을 myrm, delete또는 다른 이름으로 부르십시오 .

rm='rm -i'별명은 공포입니다 그것을 사용하는 동안, 당신은 기대 후에 때문에 rm파일을 제거하기 전에 기본적으로 메시지를 표시 할 수 있습니다. 물론 언젠가는 해당 별칭이 설정되지 않은 계정으로 계정을 실행하게되며 진행 상황을 이해하기 전에 너무 늦습니다.

어쨌든 파일 손실 또는 손상에 대비하는 좋은 방법은 백업을 수행하는 것입니다.

실수로 파일을 삭제하거나 덮어 쓰는 것을 방지하는 빠른 대안은 ZFS와 같은 무제한 스냅 샷을 지원하는 파일 시스템을 사용하는 것입니다. 빈번한 스냅 샷이 자동으로 수행되면 사건 이전의 마지막 스냅 샷 중 상태에서 파일을 복구 할 수 있습니다.  


3
나는 그 고통 이야기를 겪은 사람들 중 한 사람으로부터 그 공포 이야기를 들었습니다.
Dan D.

동의하지만 대부분의 사람들은 완전히 다른 파일 시스템으로 전환 할 자유가 없습니다.
Peon

사실, 이것이 파일 시스템이 금지하는 기능인 백업을 먼저 제안하는 이유입니다.
jlliagre

12

별명을 저장하고 싶지만 시스템에서 다른 명령과 다르게 작동하는 명령에 익숙해지지 않으려면 다음 rm과 같이 비활성화 하십시오.

alias rm='echo "rm is disabled, use remove or trash or /bin/rm instead."'

그런 다음 자신의 안전한 별칭을 만들 수 있습니다. 예 :

alias remove='/bin/rm -irv'

또는 trash대신 사용하십시오.


2
(적어도 일부 버전에서는) 다른 순서로 별칭을 정의해야합니다. 제시된 순서대로 수행하면 다음과 같이 정의 remove됩니다 echo "rm is disabled, use trash or /bin/rm instead." -irv. 그리고 상식적으로 메시지가 rm안전한 remove명령 을 참조하기 를 원하지 않습니까?
Scott

당신이 옳습니다, 그에 따라 답변을 업데이트하겠습니다.
Dario Seidl

5

trash대신 사용할 수 있습니다. 한 번만 비우는 것을 잊지 마십시오.


3

모든 사람의 프로필을 변경하지 않고도 디렉토리에 -i라는 파일을 배치 할 수 있습니다.

# touch -- -i
# ll
total 0
-rw-r--r-- 1 root users  0 Jan 26 19:24 files
drwxr-xr-x 2 root users 40 Jan 26 19:24 folder_of_power
-rw-r--r-- 1 root root   0 Jan 26 19:25 -i
-rw-r--r-- 1 root users  0 Jan 26 19:24 important
-rw-r--r-- 1 root users  0 Jan 26 19:24 very
# rm -rf *
rm: remove regular empty file `files'? 

사용자가 *를 사용하기로 결정하면 작동하지 않습니다. * 대신 *. 그러나 여전히 깔끔한 트릭입니다.
Peon

1
afaik rm -rf. 현재 디렉토리에 있으므로 rm -rf ..도 성공하지 못합니다.
Peon

@Peon : 나는 당신 .* ** .*(더 일반적이라고 생각하는) 또는 * . *(당신이 말한) 보다는 을 의미 한다고 생각합니다 . ……………………………………… . 그러나 나는 그것이 깔끔한 트릭이라는 것에 동의합니다.
Scott

1

다음 스크립트를 사용합니다.

#!/bin/sh

trash=$HOME/tmp
mv "$@" $trash
nohup find "$trash" -type f -atime +7 -exec /bin/rm '{}' \; 2>&1 &

실수로 파일을 삭제 한 경우 파일을 복구하십시오 $HOME/tmp.

스크립트는 삭제 된 파일을 tmp디렉토리로 이동 하고 다음에 액세스 시간이 7 일이 지난 경우 삭제 스크립트가 실행될 때 삭제합니다 ( $HOME/tmp디렉토리 의 반자동 정리 ).


-2

프로필에서

alias rm="rm -i"

3
내 의견으로는 Aliasing rm은 상당히 좋지 않은 조언이며 풀러의 경우 어쨌든 도움이되지 않습니다.
jlliagre

rm -I@jlliagre, 두 세계의 최고를 제공합니다.
Tamara Wijsman

@Tom Wijsman, 부분적으로 실제로. 중요한 표준 Unix 명령의 동작을 변경하는 것은 여전히 ​​잠재적 위험입니다. 대화식으로하려면 별명에 다른 이름을 지정하십시오.
jlliagre

@jlliagre : 흠, 스크립트가이 변화를 포착한다는 의미입니까?
타마라 Wijsman

내 포인트를 얻으려면 내 superuser.com/a/382498/19279 답장을 읽으십시오 .
jlliagre

-2

d내용과 함께 라는 스크립트 mv $* /tmp입니다.

편집 : 이것은 나쁜 생각입니다. 아래를 참조하십시오. 내가 현재 가지고 alias d='mv -t /tmp'내에서 .profile대신.


2
이 제안은 위험과) 재정은 이미 같은 이름 또는 b) 완전히 잘못된 파일을 삭제 (와 파일을 파괴 할 수 d "foo bar"있는 파일을 삭제 foo하고 bar). 뭔가 안전은 아마도 #!/bin/bash TRASH="$( mktemp -d -t trashed.XXX )"; echo "Moving to trash $TRASH"; mv -v -- "$@" "$TRASH"( mktempmv구문은 시스템에 따라,이 리눅스 작동).
Daniel Beck

2
설명 주셔서 감사합니다. 문제 a)는 문제가 없지만 문제 b)는 큰 문제입니다. 내 d명령을 alias d='mv -t /tmp'로 변경했습니다 .profile. 나는 그것이 내가 찾고있는 간단한 해결책이라고 생각합니다.
beefus

-2

이 bash 코드는 기능 rm~/.bash_profile구성 파일에 추가 합니다. 이것을 실행 한 후을 쓰면 rm file해당 파일을/tmp

cat << EOF >> ~/.bash_profile
rm () {
  mv $1 /tmp
}
EOF

1
이 스크립트 / 코드는 무엇을합니까? 기술이 부족한 사용자가 귀하의 답변을 이해할 수 있도록 설명하십시오.
Vylix

2
이것이 질문에 대한 답변이 될 수 있지만, 그 이유에 대한 설명을 제공 할 수 있다면 더 나은 답변이 될 것 입니다.
DavidPostill

1
이것은 질문에 대한 답변을 제공하지만 매우 열악합니다. 이 답변의 두 가지 더 나은 버전이 이미 게시되었습니다.
Scott

이 bash 코드는 기능 rm~/.bash_profile구성 파일에 추가 합니다. 이 파일을 실행 한 후을 쓰면 rm file해당 파일을로 이동합니다 /tmp.
Vicente Gonzalez

설명해 주셔서 감사합니다. 당신은 기쁘게 할 수 편집 후 자신의 것을 포함하는 답변을?
벤 N
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.