cp
와일드카드 를 여러 번 사용했지만 mv
대상 디렉터리를 지정하는 것을 잊어버렸습니다. 다음은 로그 수집 시 발생한 오류의 예입니다.
~# mkdir problem_logs
~# cd problem_logs
~/problem_logs# cp -pv /var/log/messages*
'/var/log/messages' -> '/var/log/messages.1'
.
대상 디렉터리 에 쓰는 것을 잊어버렸고 /var/log/messages*
두 개의 파일 이름으로 완전히 확장되었기 때문에 첫 번째 파일 이름이 두 번째 파일 이름을 덮어썼다는 것을 알 수 있습니다 .
~# echo cp -pv /var/log/messages*
cp -pv /var/log/messages /var/log/messages.1
그러한 재난을 예방하기 위해서는 어떤 좋은 대책이 있습니까?
- 틀림없이
root
이 계정을 사용하지 마세요좋은 조치입니다(그러나 일부 오류만 예방할 뿐입니다). 불행하게도 많은 기본 작업root
에 권한이 필요하고 사용자의 UID가 기본적으로 0인 여러 (상용) Linux 기반 플랫폼이 있습니다 . 이러한 플랫폼은 루트가 아닌 사용자와 작업하려면 비표준 수정이 필요한 경우가 많습니다sudo
. - 이 옵션 사용 방법 알아보기
-i
(--interactive
) 재정의할 때마다 확인이 필요합니다. - GNU 사용법 배우기
-n
(--no-clobber
) 옵션은 모든 덮어쓰기를 방지합니다. - GNU 구문을 사용하고 옵션을 사용하여 대상 디렉터리를 지정하는 방법을 배웁니다.
-t
(--target-directory
). 예:cp -pvt. /var/log/messages*
나는 아직도 글쓰기를 잊어버렸다..
마지막 두 옵션은 POSIX에서 표준화되지 않았다는 단점이 있습니다. 그것들은 GNU 확장입니다.
- 고려해야 할 다른 가능성은 무엇입니까?(예: 대체 쉘 포함)
- 그들의 장점과 단점은 무엇입니까?(이미 나열된 가능성 포함)
이 질문은 확실히 개인적인 의견을 묻는 것이 아닙니다. 그것이 요구하는 것은 가능성과 그에 관련된 객관적인 속성이다.
답변1
유일한 간단한 [1] 대답(IMHO)은 쉘 함수를 만드는 것입니다.
그것은 다음과 같습니다:
cy() { cp -i "$@"; }
새 이름 사용(cy
[2] ) 솔루션이 일부 시스템에 아직 설치되지 않은 경우 아무 작업도 수행되지 않도록 합니다. 또한 이 솔루션은 모든 시스템에서 실행될 수 있습니다. 사용하기 전에 특정 버전의 유틸리티가 시스템에 존재하는지 여부를 테스트하거나 단순히 오류/경고를 발생시킬 수도 있습니다.
그러면 나열된 모든 솔루션을 사용할 수 있습니다.
[1] 가능한 솔루션이나 소스(GNU)에 대해 어떠한 편견(또는 단순한 의견)도 제시되지 않습니다.
[2] 이름을 선택하세요 cy
. co
(FWIW,co
RCS 확인 명령어 입니다) 또는 사용자로서 이해가 되고 사용될 시스템에서 충돌할 가능성이 가장 적은 다른 것입니다.