Ubuntu Command - PowerShell

김재환·2023년 10월 23일
0

UNIX

목록 보기
9/9

PowerShell이란?

윈도우에도 윈도우 전용 커맨드라인 툴들이 있습니다. 그 중 하나가 PowerShell이라는 툴인데요. 시스템 관리, 자동화, 개발 등 다양한 작업을 할 수 있고 기본 유닉스 커맨드도 지원합니다.

이번 레슨에서는 PowerShell에 대해 간단히 설명드릴게요.

PowerShell vs cmd(명령 프롬프트)

윈도우 유저라면 cmd(명령 프롬프트/Command Prompt)를 들어보셨을 수도 있는데요. cmd도 윈도우 전용 커맨드라인 툴입니다.

하지만 PowerShell에 비해 기능이 적고 cmd에서 할 수 있는 모든 건 PowerShell에서도 할 수 있습니다. 간단한 작업을 할 때는 cmd를 써도 되지만, PowerShell이 더 복잡한 것도 아니니까 그냥 PowerShell을 쓰는게 무방합니다.

PowerShell 도움말 업데이트하기

PowerShell을 처음 사용한다면 도움말을 업데이트하는 것을 추천드립니다. 그래야 나중에 커맨드의 도움말을 제대로 확인할 수 있습니다. 도움말 업데이트도 PowerShell에서 할 수 있습니다.

윈도우 메뉴에 'powershell'을 검색하고 관리자로 실행해 주세요.


이게 PowerShell인데요. 여기 Update-Help라고 입력한 다음 엔터를 누르세요.

Update-Help

위와 같은 오류가 발생할 수도 있는데요. 무시하시고 넘어가셔도 괜찮습니다.

PowerShell 사용해보기

관리자 권한이 필요할 때는 관리자로 실행하지만, 보통은 일반 사용자로 실행합니다.

기존의 PowerShell 창을 닫고 일반 사용자로 PowerShell을 실행해 주세요.


PowerShell의 배경색이나 글자색, 글자 크기 등을 바꾸고 싶다면 환경 설정으로 들어가면 됩니다.


PowerShell은 기본 유닉스 커맨드를 지원한다고 했는데요. 어떤 커맨드를 지원하는지 알아보겠습니다.

PowerShell과 유닉스 커맨드

PowerShell에서는 아래 유닉스 커맨드를 사용할 수 있습니다:

man
pwd
cd
ls
mkdir
cat
mv
rm
cp
date
clear
이 외에 다른 것들도 사용할 수 있는데, 이 링크를 참고하시면 됩니다.

PowerShell에서는 기본적으로 cmdlet이라고 하는 커맨드들을 사용하는데요. cmdlet은 보통 아래와 같이 생겼습니다.

Action-Object  

하고 싶은 동작과 대상 사이에 - 를 넣는 거죠.

PowerShell에 ls같은 걸 입력하면 ls는 Get-ChildItem이라는 cmdlet을 가리키고 있기 때문에 ls를 사용할 수 있는 겁니다 (이럴 때 ls를 Get-ChildItem의 alias(에일리어스)라고 합니다). 하지만 결국 유닉스의 ls가 아닌 Get-ChildItem이 호출되는 것이기 때문에 옵션을 주는 방법과 커맨드의 동작은 조금 다를 수 있습니다.

실제 유닉스 커맨드와 차이점

경로

우선 윈도우에서는 경로를 표시할 때 / 대신 (한국 키보드는 ₩)를 사용하는데요. PowerShell에서 /를 입력해도 되지만 프롬프트에 경로를 표시할 때나 자동완성을 활용할 경우 \가 사용됩니다.

옵션

cmdlet 옵션은 한 글자가 아닌 전체 단어입니다 (예: -Recurse). 유닉스 커맨드처럼 한 글자(예: -r)로 줄여 쓸 수 있는 옵션들도 있지만 그럴 수 없는 옵션들도 많고, 일일이 외워야 하기 때문에 PowerShell 옵션을 그대로 사용하는 것을 추천드립니다. 자주 필요한 옵션들은 각 커맨드를 살펴보면서 설명해 드릴게요.

지금부터 유닉스 환경과 PowerShell 환경에서 실행했을 때 차이가 있는 커맨드들을 정리해 드릴 겁니다.

man

man 커맨드를 실행하면 aliasing 하고 있는 cmdlet에 대한 도움말을 보여줍니다.

man ls

ls는 Get-ChildItem을 aliasing 하고 있기 때문에 Get-ChildItem에 대한 도움말이 나옵니다. 여기서 커맨드에 사용할 수 있는 옵션들을 확인할 수 있겠죠?

더 자세한 정보를 보고 싶다면 -Full 옵션을 사용하면 됩니다.

man -Full ls

ls

PowerShell에서 ls를 하면 파일/폴더 이름뿐만이 아닌 다양한 정보가 나옵니다. .으로 시작하는 파일들도 보이고요.

유닉스의 ls -al과 비슷하죠?

touch

PowerShell에 touch라는 alias는 없습니다. 그래서 파일을 생성할 때는 다른 방법을 사용해야 하는데요. 예를 들어 아래와 같은 방법을 사용할 수 있습니다.

$null > filename

filename 이름을 가진 빈 파일이 생성됩니다.

cat

PowerShell의 cat은 아규먼트를 하나만 받습니다. 여러 파일을 아규먼트로 주면 오류가 나니까 주의해 주세요.

cat testfile.txt testfile2.txt # 오류

mv

bash/zsh에서 mv를 했을 때 목적지에 똑같은 이름의 파일/폴더가 있으면 그걸 덮어써버립니다. 하지만 PowerShell에서는 파일이 이미 존재한다는 오류가 납니다.

mv testfile.txt testfile2.txt # 오류

만약 파일을 덮어쓰고 싶다면 -Force 옵션을 사용하면 됩니다.

mv -Force testfile.txt testfile2.txt

cp

mv와 마찬가지로 PowerShell에서는 파일/폴더를 덮어쓰지 않고 오류가 나는데요. -Force 옵션을 사용하면 파일/폴더를 덮어쓸 수 있습니다.

그리고 폴더를 복사할 때는 -Recurse 옵션을 사용해야 합니다.

cp -Recurse foo bar

foo 폴더를 bar라는 이름으로 복사했습니다.

참고로 -Recurse 옵션을 안 줘도 오류 없이 실행되는데, 이런 경우 폴더 자체만 복사되고 안의 내용물은 복사되지 않습니다.


이번에는 foo 폴더를 baz라는 이름으로 복사했는데 baz 안에는 아무것도 없죠?

rm

폴더를 삭제할 때는 -Recurse 옵션을 사용해야 합니다.

사실 -Recurse 안 줘도 되는데, 그러면 안에 있는 파일을 지울 것인지 물어봅니다.

유닉스와 다르죠? 유닉스에서 -r 옵션 없이 폴더를 지우려고 하면 오류가 납니다.

IDE(통합 개발 환경)와 PowerShell

개발을 하다 보면 커맨드라인이 필요한 경우가 많은데요. 따로 터미널을 열지 않고 작업할 수 있도록 대부분의 IDE에서는 IDE 내부에서 터미널을 열 수 있습니다. Visual Studio Code(VScode)나 PyCharm 같은 경우 PowerShell을 기본 터미널로 사용하기 때문에(윈도우의 경우) PowerShell에 익숙하면 좋겠죠?

VSCode의 터미널

PyCharm의 터미널

IDE 안에서 코드 작성과 커맨드 실행을 동시에 할 수 있는 거죠. PowerShell에서 기본 유닉스 커맨드를 실행할 수 있기 때문에 아주 편리할 겁니다.

profile
안녕하세요

0개의 댓글