명령 행 안전 수칙 [닫기]


34

명령 줄과 스크립팅은 위험합니다. rm -rf로 약간 오타를하면 상처를 입을 수 있습니다. 가져 오기 스크립트를 실행하는 동안 데이터베이스 이름에서 stage와 혼동을 일으키면 뼈가납니다 (동일한 서버에 있지만 좋지 않은 경우). 쉐딩 한 서버 이름이 일부 명령을 수행 한 후 생각했던 것과 다르다는 것을 너무 늦게 알아 차린 것과 동일합니다. 당신은 구멍 Hawg 를 존중해야합니다 .

위험한 명령을 실행하기 전에 몇 가지 작은 의식이 있습니다. 예를 들어 서버를 세 번 점검하는 것과 같습니다. 다음 은 rm safety에 대한 흥미로운 기사입니다 .

커맨드 라인에서 안전을 유지하는 작은 의식, 도구 및 요령은 무엇입니까? 그리고 "첫 실행 ls foo *와 같은 객관적인 것들을 의미합니다. 그 결과를보고, ls를 rm -rf로 대체하여 rm -rf foo * 또는 이와 유사한 것을 실행하지 않도록하십시오." 명령이 수행됩니다. "


3
"처음에는 명령 줄이 시작되었습니다"를 참조하여 +1 cryptonomicon.com/command.zip
Avery Payne

이것은 커뮤니티 위키 질문이 아니십니까? 정식이거나 완전한 답변은 하나도 없습니다.
Bill Weiss

답변:


45

잘 작동하는 것 중 하나는 제품 / 스테이징 / 테스트 서버를 위해 쉘에서 다른 배경색을 사용하는 것입니다.


6
예. 루트 권한이있을 때마다 밝고 비명을 지르는 빨강 또는 주황을 사용하십시오.
Adam D' Amico

1
로그인 할 때 원격 컴퓨터 터미널의 색상을 자동으로 다르게 설정하는 방법이 있습니까? 그놈 사용하기-아마도 이것은 별도의 질문 일 것입니다.
Jona

2
머신의 호스트 이름에 따라 PS1 변수를 변경하는 switch 문만 있으면됩니다.
Neil

2
모든 Windows 사용자에게 Sysinternals의이 보석은 바탕 화면에 호스트 정보를 눈에 띄게 표시합니다. technet.microsoft.com/ko-kr/sysinternals/…
squillman

pwrdwnsys 옵션 (*이 IMMED)를 다시 시작 (*은 YES) : - 예 예 예 내 생산하는 iSeries 세션에서 저를 방지하기 위해 빨간색 이제 흰색입니다
피터 T. 라콤 주니어

14

시작하기 전에 취소 계획을 염두에 두십시오.

  • 파일 / 디렉토리를 즉시 삭제하지 말고 압축하십시오.
  • (xisco) 라우터가 'x'분 후에 재부팅되도록 설정하고 즉시 'wr'하지 마십시오.
  • 변경중인 인터페이스가 시스템에 입력 된 인터페이스가 아닌지 확인하십시오. 이것은 텔넷에 연결 한 라우터 인터페이스이거나 VNC에 연결된 이더넷 포트 일 수 있습니다.
  • 절대 'root'로 로그인하지 마십시오
  • 백업을합니다. 그것이 좋은지 확인하십시오. 다른 것을 만드십시오.
  • 신뢰하는 사람에게 '여기서 바보 같은 짓을하려고합니까?'

3
+1 시스코 iOS는 작동 할 때까지 저장하지 않습니다. 모든 OS 대화 상자에 "사용", "저장"및 "취소"가있는 Amiga 시절을 기억하십시오. "사용"은 설정 만 적용하지만 다음에 다시 부팅 할 때는 저장하지 않습니다. 매우 유용했습니다!
Oskar Duveborn

오늘날의 더 나은 솔루션은 모든 시스템 변경에 대해 무제한 실행 취소를 수행하는 것입니다. 물론 변경 한 설정으로 인해 시스템 실행 취소 기능을 사용할 수 없게 된 경우 어쨌든 망할 수 있습니다. 흠 ^^
Oskar Duveborn

1
"5에서 다시로드"에 +1 ACL 변경으로 인해 원격 라우터 / 스위치가 잠겼을 때 엉덩이를 몇 번 이상 저장했습니다.
Greg Work

마지막 지점에 +1-상태 점검. 쉬운 일, 그리고 적어도 당신은 발생하는 모든 문제를 해결하기 위해 관심이있는 두 사람이 있습니다;)
Ashley

10

나는 이들 중 일부에 대한 최첨단 솔루션을 가지고 있습니다.

나는 루트로 일할 계획을 가질 때 다음과 같은 습관을 들이지 않았다.

  • 먼저 일반 사용자로 로그인 한 다음을 사용 sudo su - root하여 루트로 전환하십시오. 나는 이것을 정신적으로 준비하는 것, 정신적으로 매우 위험한 지역으로 걸어 왔으며 항상 경계하고 경계해야한다는 것을 상기시켜줍니다. 웃기는 것처럼,이 작은 의식만으로도 내가 부주의 할 수 없다는 것을 강화함으로써 슬픔을 크게 줄일 있었습니다.
  • 각 명령은 입력되지만 [Return] 키는 누르지 않습니다 . 절대로 .
  • 정확히 무엇을하는지 이해하지 못하면 어떤 명령 실행되지 않습니다. 당신이 무엇을하는지 모르고 이것을하고 있다면, 당신은 당신의 시스템으로 러시아어 룰렛을 하고 있습니다.
  • [Return] 키를 누르기 전에 CLI에서 실행 된 명령을주의 깊게 검사합니다. 망설임, 잠재적 문제에 대한 힌트가 있으면 다시 검토하십시오. 망설임이 지속되면 명령이 줄에 남아 있고 맨 페이지 등을 참조하기 위해 다른 콘솔에 alt-F2를 누릅니다. 그래픽 세션 인 경우 브라우저를 시작하고 검색을 수행합니다.
  • 공통 사용자는 이제까지 넘겨하지 sudo, 내 시스템에 없는 때문에 나는 BOFH 해요 ,하지만 때문에 준비와 교육을받지 않은 상태에서,이 원숭이에 장전 된 총을주는 것과 같다. 원숭이가 배럴을 내려다보고 압착 할 때까지 처음에는 재미 있고 재미 있습니다 ...

rm을 사용할 때는 항상 cd디렉토리를 먼저 찾은 다음 접두어를 사용 ./하여 디렉토리가 올바른지 확인하십시오.

cd /usr/some/directory ; rm ./targetfile

또는 파일의 전체 경로를 지정합니다

rm /usr/some/directory/targetfile

그것은 PITA이지만 ... 미안보다 안전합니다.


1
apache2 reload와 같이 미리 선택된 명령 목록에 대해서만 sudo를 제공합니다. 그렇지 않으면 사용자가 나를 통과해야합니다. 엉덩이가 아프지 만 15 명 동안 devbox를 실행하는 데 가장 좋은 방어책입니다.
Artem Russakovskii

2
인용 : "하지만 준비와 훈련 없이는 원숭이에게 총을 싣는 것과 같습니다. 원숭이가 배럴을 내려다보고 쥐어 짜기 전까지는 재미 있고 재밌습니다 ..."사실, 그 시점 이후에도 여전히 재미 있습니다. .. 그냥 지저분하다
Mikeage

sudo su 대신 sudo -i를 사용해야하며 일반적으로 sudo를 사용하여 특정 명령을 실행하는 것이 더 안전합니다.
LapTop006

리턴 키를 누르지 않으면 어떻게 명령을 실행합니까?
g.

1
&& 당신의 친구입니다! cd / usr / some / directory를 수행하는 대신; rm ./targetfile cd / usr / some / directory && rm ./targetfile 이렇게하면 CD가 실패한 경우 원래 디렉토리에서 rm'ing targetfile을 종료하지 않습니다. 그러나 전체 경로 rm을 수행하는 것이 좋습니다.
Mike G.

10

이것은 Windows Powershell에만 해당됩니다.

정책으로 각 서버에 다음과 같은 시스템 프로파일을 추가합니다. 이를 통해 다음이 충족됩니다.

  1. 관리자 powershell 콘솔 창은 어두운 빨간색 배경색을 갖습니다.
  2. 제목에 관리자가 추가되었습니다.
  3. "경고 : Powershell이 ​​관리자로 실행 중입니다."메시지 시작할 때 작성
  4. 제목 표시 줄 앞에 "관리자 :"
  5. 표준 유틸리티 (예 : 회사 셸 스크립트, vim 및 infozip)가 경로에 있습니다.
$ currentPrincipal = 새 개체 Security.Principal.WindowsPrincipal ([Security.Principal.WindowsIdentity] :: GetCurrent ())
& {
    if ($ currentPrincipal.IsInRole ([Security.Principal.WindowsBuiltInRole] :: Administrator))
    {
        (get-host) .UI.RawUI.Backgroundcolor = "DarkRed"
        클리어 호스트
        write-host "경고 : PowerShell이 ​​관리자로 실행 중입니다 .`n"
    }

    $ utilities = $ null
    if ([IntPtr] :: size * 8 -eq 64)
    {
        $ host.UI.RawUI.WindowTitle = "Windows PowerShell (x64)" 
        $ utilities = "$ {env : programfiles (x86)} \ 유틸리티"
    }
    그밖에
    {
        $ host.UI.RawUI.WindowTitle = "Windows PowerShell (x86)"
        $ utilities = "$ {env : programfiles} \ 유틸리티"
    }
    if ((Test-Path $ utilities)-및! ($ env : path -match $ utilities.Replace ( "\", "\\")))
    {
        $ env : path = "$ utilities; $ {env : path}"
    }
}

기능 프롬프트
{
    if ($ currentPrincipal.IsInRole ([Security.Principal.WindowsBuiltInRole] :: 관리자))
    {
        if (! $ host.UI.RawUI.WindowTitle.StartsWith ( "관리자 :"))
        {$ Host.UI.RawUI.WindowTitle = "관리자 :"+ $ host.UI.RawUI.WindowTitle}
    }
    'PS'+ $ (if ($ nestedpromptlevel -ge 1) { '>>'}) + '>'
}

멋지다-모든 서버의 리눅스에서 쉽게 할 수 있기를 바랍니다.
Jason Tan

1
powershell에서 이것은 $ pshome / profile.ps1 (컴퓨터 프로파일)을 편집하여 수행됩니다. /etc/.bash_profile의 Linux에서 동등한 기능을 수행 할 수없는 이유는 무엇입니까?
Brian Reiter

2
$ ConfirmPreference를 "medium"(기본값은 high)으로 변경하는 데 유용하며 더 많은 확인 메시지가 표시됩니다.
Richard

6

위의 모든 답변에 동의 할 수는 있지만 매우 중요한 팁을 강조해야합니다.

멀티 태스킹을 피할시기를 알고 있어야합니다.


5

현재 사용중인 시스템의 호스트 이름이 bash (또는 다른 쉘) 프롬프트에 있는지 확인하십시오. 내가 뿌리를 내렸다면, 어떻게 든 거기에 있는지 확인하십시오.

나는 한 번 다른 라이브 리눅스 배포판에서 젠투 시스템을 설치하고 실수로 rm잘못된 쉘에서 다소 파괴적인 명령 (ATM이 무엇인지 기억하지 못함 )을 실행하여 라이브 시스템의 많은 것들을 일으켰습니다. chroot 내에서 물건이 아닌 삭제되었습니다. 그때부터 나는 항상

export PS1="(chroot) $PS1"

내가 chroot 내에서 일할 때마다.


1
+1-또한 프롬프트에 현재 작업 디렉토리 (또는 깊게 중첩 된 파일 시스템에서 작업하는 경우 마지막 n 레이어)를 갖는 것이 도움이됩니다.
Murali Suriar

공식 젠투 핸드북은 라이브 CD에서 새로 생성 된 젠투로 루트 할 때이를 정확하게 제안합니다!
cd1 2016 년

CD1 : 그렇습니다. 그러나 x86 빠른 설치 안내서 ( gentoo.org/doc/en/gentoo-x86-quickinstall.xml )는 그렇지 않으며 그 당시 제가 사용했던 것입니다. 그러나 지금 나는 그것을 재귀 적으로한다 :)
Tim

5

서버를 변경하기 전에 알아야 할 중요한 사항 이 몇 가지 있습니다.

  • 내가 올바른 서버에 있는지 확인하십시오

  • **이 행동으로 얼마나 많은 사람들이 영향을 받을지 *에 유의하십시오 (실수 여부)

  • 'enter'키를 입력하기 전에 실행 취소 가능성에 유의하십시오

  • 이 명령으로 세션 연결끊어 질 가능성이 있는지 자문 하십시오 (fw 규칙, 잘못된 종료 등). 다시 시작할 장애 조치가 있는지 확인하십시오 (특히 외부에있는 경우).


4

아직 수행하지 않은 경우에는 rm-rm -i로 별명을 지정하십시오.


7
아니 아니 아니 아니. 이것은 당신이 할 수있는 최악의 일 중 하나입니다. 언젠가 당신은 별명을 가지지 않거나 우리의 환경을 휴지통에 버린 상자에 자신을 찾을 것입니다. 대신 rm -i 사용법을 배우십시오.
olle 2016 년

아니 아니 아니 아니. 이렇게하세요. 언젠가 실수로 잘못된 일을하고 스스로를 구할 것입니다. -i를 줄에 넣고 실수로 실수를 지우고 삭제하는 것보다 더 자주.
Jerub

여러 대의 컴퓨터에서 작업하는 경우에는 안됩니다 ... 새 컴퓨터를 설정할 때까지 작업하는 것은 큰 도전입니다.
slovon

끔찍한 것은 @olle과 @Jerub가 모두 옳다는 것입니다. 어쩌면 PS1에 '안전 기능 해제'/ '안전 기능 설정'을 나타내는 채색 된 일부 플래그를 표시하는 것이 현명 할 수도 있습니다.
ikso

4

규칙 1-백업 만들기

규칙 2- 절대로 "molly guard"래퍼를 표준 명령에 추가하지 말고, 자신의 버전을 만드십시오. 그러나 이름을 인계하지 마십시오. 설정하지 않은 시스템에있을 때 그냥 물릴 것입니다.

루트 및 (부분) 디렉토리 트리에 대해 서로 다른 색상과 같은 프롬프트 트릭은 훌륭한 도우미이지만 다시 말하지 않아도 작업 할 수 있습니다.


"몰리 가드"란 무엇입니까?
Jason Tan


4

이것은 직관적이지 않은 것처럼 보이지만, 내가 가진 최고의 명령 줄 안전 팁은 다음과 같습니다 . GUI 모드 대안이 사용 가능하고 실용적이라면 USE IT를 사용하십시오 .

왜? 아주 간단합니다. GUI 모드에는 일반적으로 "경고-프리 블 롭프를 막으려 고합니까?" 그렇지 않더라도 속도가 느려져 생각할 시간이 더 많아집니다. 커밋하기 전에 옵션을 더 쉽게 다시 확인할 수 있으며 상태 전후의 스크린 샷을 통해 오타로부터 보호합니다. 유용하고 유용한 모든 것들.

두려운 "rm -rf"의 전형적인 경우, 실수로 GUI 나 CLI에서 쉽게 발행 할 수 있다고 생각하십니까?

결국 GUI에 의지하는 것은 부끄러운 일이 아닙니다. 중대한 재난을 막을 수는 없습니다. CLI에서와 마찬가지로 GUI에서도 트리거 행복 할 수 있습니다. 그러나 일단 당신을 저장하면 그 자체로 가치가 입증되었습니다.


3

상식을 사용하고 이해하지 못하는 명령을 실행하지 마십시오. 이것이 좋은 조언입니다. 당신이 rm에 전달하는 모든 것의 절대 경로를 쓰거나 sudo를 통해 무엇이든 달리면서 고통을 느끼고 있다면 자유롭게 느끼십시오. 그런 다음 su -c를 선호합니다. 최소한 암호를 캐시하지 않습니다. 암호를 확인하지 않고 루트 권한으로 작업을 수행 할 수있는 일반 사용자에게는 불편하지 않습니다.

~ / .bashrc에 넣을 수있는 몇 가지가 있습니다 :

alias srm='rm -i'

당신이 rm의 안전한 대안을 가질 수 있도록 ...

그러나 결국, 당신은 항상 망칠 수 있습니다. 다른 날에는 쓸모없는 구성 스크립트가 전체 / usr / bin 폴더를 숨기고 여러 가지를 깨뜨 렸습니다. 예. 버그가있는 모든 유형의 소프트웨어를 간단히 '설치'하면 시스템이 손상 될 수 있습니다. 당신은 당신이 무엇을하든 안전하지 않습니다. 내가 얻는 것은 가장 중요한 것입니다.

정기적 인 백업을 유지하십시오.


2
다시 한번 "rm"을 별칭으로 사용하지 마십시오. 별칭이없는 시스템에서 작업 할 때 결국 문제가 발생합니다.
SilentW

아주 나쁜 생각. 만약 당신이 맥 OS X (아마도 다른 플랫폼?)에 자신을 찾을 경우 srm입니다 보안 제거 !
morgant

3

rm-rm -i에 앨리어스를 지정하는 대신 remove 또는 saferemove를 알리는 별칭을 사용하는 것이 좋습니다 (및 선호하는 삭제 도구로 사용). 그런 다음이 설정이없는 상자를 사용하면 손상이 발생하지 않습니다.


2

그들이하는 일을 완전히 이해하지 않으면 온라인에서 찾은 명령을 절대 실행하지 마십시오.

시스템이 포스터와 다를 수 있으며 이로 인해 세상이 다칠 수 있습니다.


2

유닉스 / 리눅스 관점에서 명령 행 안전을위한 확실한 방법은 루트 계정을 올바르게 사용하는 것입니다.
루트로서의 rm -rf는 일반적으로 사용자보다 더 위험하며 루트로 로그인하기보다는 sudo와 같은 내장 된 것을 사용하는 것이 중요합니다. 좋은 간단한 whoami는 일반적으로 정신 분열증 또는 여러 성격에 도움이 될 것입니다.

특히 파일 변경 명령에 에코를 추가하면, 특히 glob 또는 regex 일치가 있는지 확인하려는 경우.


2

작업중인 컴퓨터에 보조 연결을 사용하면 기본 세션을 종료하거나 대량 처리 등을 잠그는 어리석은 행동을 할 때 편리 할 수 ​​있습니다.

이렇게하면 여전히 머신에 액세스 할 수 있으며 기본 세션을 종료 할 수 있습니다.

위의 의견 대부분은 rm을 언급하지만 다른 명령으로 바보 같은 짓을했습니다 ...

ifconfig는 네트워크를 중단 시키려고합니다.

스크립팅에 관해서는 일반적으로 두 개의 창에서 작업합니다. 첫 번째는 스크립트 작성에 사용하고 두 번째는 각 줄을 작성하면서 테스트합니다. 천천히 조심스럽게 가면서 코드를 작성할 때 예상대로 모든 줄이 작동하는지 확인하고 동일한 변수 등을 유지 관리합니다.

개인적으로, 나는 rm -i 정말 도움이되는 것들에 대한 여분의 프롬프트를 찾지 못했습니다. 피곤하고 스트레스를 받았을 때 실수를 저지 릅니다. 어쨌든 y를 때리고 프롬프트를 무시할 때입니다. 아마도 나쁜 습관 일 것입니다.


2

bash를 사용하는 경우 다음을 시도하십시오.

TMOUT=600

당신의 /root/.bashrc또는 유사한. 10 분 후에 자동으로 로그 아웃되므로 실수로 열어 둔 루트 터미널로 넘어 가서 어리석은 것을 입력 할 가능성이 줄어 듭니다.

예, 루트 명령을 실행하기 위해 sudo를 사용해야한다는 것을 알고 있습니다. 언젠가 위험한 게임을하기로 결정한 경우 추가 안전망입니다.


2
# Allow only UPDATE and DELETE statements that specify key values
alias mysql="mysql --safe-updates"`

mysql CLI를 사용하는 경우 권장되는 별칭입니다.


1

ls 대신 echo를 사용하므로 쉘이 모든 것을 확장 한 후 전체 명령을 볼 수 있습니다. 또한 파일을 나타내는 변수를 항상 큰 따옴표로 묶어 탭이나 공백이있는 파일 이름으로 작업하십시오.


1

나는 *가능할 때마다 글로브를 자신의 논쟁으로 피 합니다. 내가 "이 디렉토리의 모든 것을 제거한다"는 것을 의미한다고해도 나는 더 구체적으로 노력한다. rm *.php. 실수로 다른 디렉토리의 히스토리에서 동일한 명령을 실행하는 경우 선제 적 손상 제어입니다.


나는 "cd dir; rm -rf *"를 배우지 말고 가능한 한 항상 "rm -rf dir"을 배웠다.
slovon

1

당신이하고있는 일을 생각할 수있는 좋은 방법은 루트의 bashrc (cshrc, 무엇이든)에 다음과 같은 것을 추가하는 것입니다.

unset PATH

그렇게하면 "rm"대신 / bin / rm을 수행해야합니다. 그 여분의 캐릭터가 당신을 생각하게 할 것입니다.


좋아,이 명령은 어디에서 실행하고 싶습니까? which $COMMAND더 이상 작동하지 않습니다.
Kevin M

/ usr / bin / locate $ COMMAND?
Bill Weiss

/ usr / bin / locate -r / $ COMMAND $
Bill Weiss

1

복잡한 정규 표현식, 특히 'find'명령의 경우 echo를 앞에 놓고 파일로 캡처하십시오. 그런 다음 'source'를 사용하여 파일을 실행하기 전에 생각한 것을 정확히 삭제 / 이동 / 등고 있는지 확인할 수 있습니다.

정규 표현식이 얻지 못한 가장자리 케이스를 수동으로 추가하는 것도 편리합니다.


1

다른 게시물 중 일부에 대한 약간의 메타 : 먼저 제안 된 일반적인 echo / ls 단계를 사용하여 명령이 원하는 파일 세트를 선택하는지 또는 의도 된대로 쉘에서 해석 해야하는지 확인하십시오.

그러나 이전 명령을 검색하고 변경 해야 할 부분 만 수정 하기 위해 쉘의 명령 기록 편집 기능을 사용합니다 .

각 명령을 독립적으로 입력하는 것은 전혀 도움이되지 않습니다 ...

$ ls *.bak
$ echo rm *.bak
$ rm * .bak

... 마지막 줄에 공백을 입력하고 모든 파일을 삭제했기 때문에 ... 나는 항상 이전 줄을 검색하고 단순히 '에코'를 제거합니다.


1

루트 사용자 :
반드시 필요한 경우가 아니면 루트가되지 마십시오.
공급 업체가 루트로 실행해야한다고 말하면 고객이고 루트가 아닌 것으로 실행하고 싶다고 말합니다.
선반에서 몇 개의 소프트웨어 패키지가 '더 쉬워서'루트를 원합니까?

습관 :
세 번 보지 않고 제거와 함께 절대로 '*'를 사용하지 마십시오 . ls -l TargetPattern 을 사용하는 습관을 기르고 'rm! $'를 사용 하는 것이 가장 좋습니다 . 가장 큰 위협은 당신이 생각하는 곳에 있지 않습니다. 나는 거의 자주 'LS'등으로 '호스트 이름'을 입력합니다!

목발 :
"alias rm = 'rm -i'"와 같은 별칭과 마찬가지로 표준 프롬프트가 많이 도움이되지만 종종 내가 사용하는 컴퓨터를 완전히 제어 할 수 없기 때문에 예상 래퍼 스크립트를 사용하여 경로를 설정합니다. '-i'를 사용한, 프롬프트 및 별명

문제 찾기 :
전체 경로를 사용하면 도움이되지만 불가능한 경우 더 안전한 위치에 CD를 넣고 '&&'를 사용하여 찾기, 제거, tar, untar, etc :
예 : cd /filesystema && tar cf - | ( cd /filesystemb && tar vxf -)
'&&'를 사용하면이 경우 tar 파일이 자체에서 추출되는 것을 막을 수 있습니다 (이 경우에는 'rsync'가 더 좋습니다).

제거 :
특히 스크립트에서 도움이된다면 재귀 적으로 제거하지 마십시오. -type f 및 -name 'pattern'으로 찾기 및 제거 여전히 xargs에 '아무것도'를 먹이지 않을까 걱정하고 있습니다.


1

당신은 운영 체제의 여러 변종을 사용하는 경우, 수 아주 구문의 차이를 인식; 한 유닉스 변종에서 합리적으로 안전한 것은 다른 유닉스 변종에서 매우 위험합니다.

예 : killall

Linux / FreeBSD / OSX-전달 된 매개 변수와 일치하는 모든 프로세스를 종료합니다. 예 : "killall apache"는 모든 아파치를 죽이고 다른 모든 프로세스는 그대로 둡니다.

Solaris- 모든 프로세스를 종료합니다. 아뇨 로부터 man 페이지 : killall는 직접 종료 절차와 관련이없는 모든 활성 프로세스를 종료 종료 (1M)에 의해 사용된다.


나는 이전 고용주의 백업 서버에서 그것을 배웠습니다. 밤 테이프를 돌리는 동안. 아야
Bill Weiss

1
대신 solaris와 linux에서 작동하는 pkill을 사용할 수 있습니다.
Jason Tan

0

대신에

rm foo*

사용하다

rm -i foo*

이것은 소수의 파일에는 실용적이지만 전체 타르볼에는 적용되지 않습니다. 이것이 바로 앨리어싱 rm이 발생하는 이유 입니다.


이것이 -f 스위치의 목적입니다 : 이전의 모든 -i 스위치를 무시합니다. 이것을 .bash_profile 또는 유사한 쉘 초기화 스크립트에 넣으면 걱정할 필요가 없습니다. 그렇게하고 싶은지 확인하십시오. 그러나 이전에 그리고 더 설득력있게 언급되었습니다.
Kevin M

0

echo를 사용하여 명령을 실행하는 것이 좋지만 여전히 오타가 발생하기 쉽습니다.

! $와 같은 확장으로 사용하십시오.

echo foo*
rm -rf !$

! $는 마지막 명령의 마지막 단어로 확장되므로 다음과 같습니다.

echo foo*
rm -rf foo*

마지막 명령에 대한 모든 인수로 확장되는! *도 있습니다.

실제로 원하는 경우이 방법으로 할 수 있습니다

echo rm -rf foo*
!*

bash가 아닌 ksh를 사용하는 경우 Esc + 마침표를 입력하여 마지막 단어를 대신 삽입 할 수 있습니다.


Esc +. bash에서도 작동합니다.
olle 2016 년

0

다음과 같은 경우 :

ls * .php
echo rm * .php
rm * .php

다음과 같이 대체 연산자를 사용할 수 있습니다 :
$ ls * .php
<dir listing>

$ ^ ls ^ echo rm (이전 명령의 ls를 echo rm으로 대체하여 나머지 명령 줄을 동일하게 유지)

$ ^ echo rm ^ rm (echo rm을 rm으로 바꾸면 * .php를 다시 입력하지 않고 잘못된 시간에 공백을 넣을 필요가 없습니다)

^ = shift-6. 익숙하지 않은 사람들을 위해.


Ick. 화살표 키를 사용하고 이전 줄을 편집하고 싶습니다. 그런 식으로 Enter 키를 누르면 대체 패턴을 올바르게 얻기 위해 맹목적으로 신뢰하는 대신 Enter 키를 누르면 어떤 명령이 실행되는지 알 수 있습니다.
Marius Gedminas

예를 들어 "echo rm * .php"뒤에 <Up> <Home> <Alt-D>를 입력 한 다음 <Enter>를 수행하십시오.
Marius Gedminas

0

bash를 사용하고 PS1 = '\ u @ \ h : \ w>'를 설정하십시오. 이것은 username @ hostname : / full / working / directory / path>로 확장됩니다. 다른 답변에서 언급했듯이 .profile 또는 .bash_profile 파일을 업데이트 할 수없는 경우 로그인 할 때마다 환경을 설정할 수 있습니다. 그래도 배경색을 변경하는 것이 가장 좋은 대답입니다 :-)


-1

아. 넵. "-rf"라는 IRC를 통해 누군가에게 파일을 보내는 그 오래된 속임수는 ~ 디렉토리에있게됩니다. IRC를 루트로 실행하지 않는 것에 대한 가혹한 교훈을 배우면서 "rm -rf"대신에 작은 "rm -rf"가 나중에 발생하고 많은 웃음이 일어났습니다.


rofl factor +1
David Z

"rm -rf"가 어떻게 해를 입히는 거지?
kubanczyk 2016 년

파일 이름이 "-rf *"입니까?
Marius Gedminas

-1

사용하는 대신 rm -rf <dir>를 붙이 -rf과 같이 말 : rm <dir> -rf. 목표로 정한 후 그리고 발사하기 전에 안전을 제거하는 것으로 생각하십시오. 이렇게하면 디렉토리 이름을 입력하는 동안 (또는 탭 완성을 사용하여) Enter 키가 미끄러 져 있고 비슷한 이름의 디렉토리가있는 경우 보호됩니다.

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