유닉스에 bash/zsh가 있다면 윈도우에는 PowerShell이 있는 거죠. 시스템 관리, 자동화, 개발 등 다양한 작업을 PowerShell에서 할 수 있습니다. 그리고 기본 유닉스 커맨드도 지원하기 때문에 아주 유용하게 쓰입니다.
하지만 PowerShell에 비해 기능이 적고 cmd에서 할 수 있는 모든 건 PowerShell에서도 할 수 있습니다. 간단한 작업을 할 때는 cmd를 써도 되지만, PowerShell이 더 복잡한 것도 아니니까 그냥 PowerShell을 쓰는게 무방합니다.
Update-Help
다음과 같은 에러는 무시해도 된다. ( 뉴비는 꼭 한번은 해주길 바란다 )
Action-Object
우선 윈도우에서는 경로를 표시할 때 / 대신 (한국 키보드는 ₩)를 사용하는데요. PowerShell에서 /를 입력해도 되지만 프롬프트에 경로를 표시할 때나 자동완성을 활용할 경우 \가 사용됩니다.
cmdlet 옵션은 한 글자가 아닌 전체 단어입니다 (예: -Recurse). 유닉스 커맨드처럼 한 글자(예: -r)로 줄여 쓸 수 있는 옵션들도 있지만 그럴 수 없는 옵션들도 많고, 일일이 외워야 하기 때문에 PowerShell 옵션을 그대로 사용하는 것을 추천드립니다. 자주 필요한 옵션들은 각 커맨드를 살펴보면서 설명해 드릴게요.
지금부터 유닉스 환경과 PowerShell 환경에서 실행했을 때 차이가 있는 커맨드들을 정리해 드릴 겁니다.
man ls
ls는 Get-ChildItem을 aliasing 하고 있기 때문에 Get-ChildItem에 대한 도움말이 나옵니다. 여기서 커맨드에 사용할 수 있는 옵션들을 확인할 수 있겠죠?
더 자세한 정보를 보고 싶다면 -Full 옵션을 사용하면 됩니다.
man -Full ls
PowerShell에서 ls를 하면 파일/폴더 이름뿐만이 아닌 다양한 정보가 나옵니다. .으로 시작하는 파일들도 보이고요.
ls -al
과 비슷하죠?PowerShell에 touch라는 alias는 없습니다. 그래서 파일을 생성할 때는 다른 방법을 사용해야 하는데요. 예를 들어 아래와 같은 방법을 사용할 수 있습니다.
$null > filename
filename 이름을 가진 빈 파일이 생성됩니다.
PowerShell의 cat은 아규먼트를 하나만 받습니다. 여러 파일을 아규먼트로 주면 오류가 나니까 주의해 주세요.
cat testfile.txt testfile2.txt # 오류
bash/zsh에서 mv를 했을 때 목적지에 똑같은 이름의 파일/폴더가 있으면 그걸 덮어써버립니다. 하지만 PowerShell에서는 파일이 이미 존재한다는 오류가 납니다.
mv testfile.txt testfile2.txt # 오류
만약 파일을 덮어쓰고 싶다면 -Force 옵션을 사용하면 됩니다.
mv -Force testfile.txt testfile2.txt
mv와 마찬가지로 PowerShell에서는 파일/폴더를 덮어쓰지 않고 오류가 나는데요. -Force 옵션을 사용하면 파일/폴더를 덮어쓸 수 있습니다.
그리고 폴더를 복사할 때는 -Recurse 옵션을 사용해야 합니다.
cp -Recurse foo bar
foo 폴더를 bar라는 이름으로 복사했습니다.
참고로 -Recurse 옵션을 안 줘도 오류 없이 실행되는데, 이런 경우 폴더 자체만 복사되고 안의 내용물은 복사되지 않습니다.
폴더를 삭제할 때는 -Recurse 옵션을 사용해야 합니다.
사실 -Recurse 안 줘도 되는데, 그러면 안에 있는 파일을 지울 것인지 물어봅니다.
개발을 하다 보면 커맨드라인이 필요한 경우가 많은데요. 따로 터미널을 열지 않고 작업할 수 있도록 대부분의 IDE에서는 IDE 내부에서 터미널을 열 수 있습니다. Visual Studio Code(VScode)나 PyCharm 같은 경우 PowerShell을 기본 터미널로 사용하기 때문에(윈도우의 경우) PowerShell에 익숙하면 좋겠죠?