
리눅스에 익숙해진 손가락, 윈도우에서 당황한 적 있나요?
개발을 하다 보면 터미널은 거의 리눅스(혹은 macOS) 기준으로 배우게 되는데요. ls, grep, cat, chmod 같은 명령어가 손에 착 붙어 있다가, 어느 날 윈도우 환경에서 작업해야 할 때 갑자기 멘붕이 오는 경우가 꽤 있어요. "아, ls가 안 되네..." 하면서 구글링을 시작하는 거죠. 특히 회사에서 윈도우 서버를 관리해야 하거나, CI/CD 파이프라인에서 윈도우 환경이 섞여 있을 때 이런 상황이 자주 발생하거든요.
최근에 리눅스의 주요 명령어들과 그에 대응하는 윈도우 명령어(cmd와 PowerShell 모두 포함)를 깔끔하게 정리한 글이 올라왔어요. 단순한 1:1 매핑 테이블이 아니라, 각 명령어가 실제로 어떻게 다르게 동작하는지까지 짚어주고 있어서 한번 정리해볼게요.
파일 시스템 다루기: 가장 기본이지만 가장 헷갈리는 부분
리눅스에서 가장 많이 쓰는 명령어 하나를 꼽으라면 아마 ls일 거예요. 현재 디렉토리의 파일 목록을 보는 명령어인데, 윈도우 cmd에서는 dir이 이 역할을 해요. 재미있는 건 PowerShell에서는 Get-ChildItem이라는 긴 이름의 cmdlet(커맨들릿, PowerShell의 명령어 단위)을 쓰는데, 사실 ls라는 별칭(alias)도 기본으로 등록되어 있어서 PowerShell에서는 ls를 그냥 쳐도 동작한다는 점이에요. 다만 출력 형식이 리눅스와 좀 다르니까 스크립트에서 파싱할 때는 주의가 필요해요.
파일 복사의 cp는 cmd에서 copy, PowerShell에서 Copy-Item이고, 이동의 mv는 cmd에서 move, PowerShell에서 Move-Item이에요. 삭제는 좀 더 신경 써야 하는데, 리눅스의 rm은 cmd에서 del(파일)과 rmdir(디렉토리)로 나뉘어요. 리눅스에서 습관적으로 rm -rf를 쓰듯이, PowerShell에서는 Remove-Item -Recurse -Force를 쓸 수 있어요.
디렉토리를 만드는 mkdir은 사실 윈도우에서도 mkdir이 그대로 동작해요. cmd에서든 PowerShell에서든 같은 이름이라 이건 외울 필요가 없죠. 현재 디렉토리를 확인하는 pwd도 PowerShell에서는 그대로 쓸 수 있어요(cmd에서는 cd만 단독으로 치면 현재 경로를 보여줘요).
텍스트 처리와 파일 내용 확인
리눅스의 강력함이 빛나는 영역이 바로 텍스트 처리인데요. cat으로 파일 내용을 출력하는 건 cmd에서 type, PowerShell에서 Get-Content으로 할 수 있어요. head와 tail처럼 파일의 앞부분이나 뒷부분만 보는 건 cmd에는 직접 대응하는 명령어가 없고, PowerShell에서 Get-Content -Head 10이나 Get-Content -Tail 10 같은 식으로 파라미터를 붙여서 처리해요.
grep은 개발자가 정말 많이 쓰는 명령어죠. 파일 안에서 특정 텍스트를 검색하는 건데, cmd에서는 findstr, PowerShell에서는 Select-String이 대응돼요. 예를 들어 리눅스에서 grep -r "TODO" .으로 현재 디렉토리 아래 모든 파일에서 TODO를 찾듯이, PowerShell에서는 Get-ChildItem -Recurse | Select-String "TODO"로 비슷하게 할 수 있어요. 다만 정규식 문법이 살짝 다를 수 있으니까 복잡한 패턴을 쓸 때는 확인이 필요해요.
파이프(|)는 리눅스의 핵심 철학 중 하나인데, 이게 뭐냐면 한 명령어의 출력을 다음 명령어의 입력으로 넘기는 거예요. 좋은 소식은 PowerShell에서도 파이프를 지원한다는 점이에요. 다만 리눅스는 텍스트 스트림을 넘기는 반면, PowerShell은 객체를 넘긴다는 근본적인 차이가 있어요. 이 차이 때문에 리눅스에서 awk나 sed로 텍스트를 자르고 붙이는 패턴이 PowerShell에서는 객체의 속성(property)을 직접 참조하는 방식으로 바뀌거든요.
시스템 관리와 네트워크 명령어
프로세스를 확인하는 ps는 cmd에서 tasklist, PowerShell에서 Get-Process예요. 프로세스를 종료하는 kill은 cmd에서 taskkill /PID [번호], PowerShell에서 Stop-Process로 할 수 있어요.
네트워크 쪽에서는 ifconfig(요즘 리눅스에서는 ip addr을 더 많이 쓰지만)가 윈도우에서는 ipconfig인데, 이름이 거의 같아서 오히려 오타를 내기 쉬워요. ping은 양쪽 다 ping이고요. netstat도 양쪽 다 같은 이름으로 쓸 수 있어요. 다만 ssh의 경우, 예전에는 윈도우에 기본 탑재되어 있지 않아서 PuTTY 같은 별도 프로그램을 써야 했는데, Windows 10 이후부터는 OpenSSH 클라이언트가 기본으로 들어가 있어서 ssh를 바로 쓸 수 있어요.
권한 관리도 차이가 큰 영역인데요. 리눅스의 chmod나 chown은 윈도우의 NTFS 권한 체계와 근본적으로 다르게 동작해요. 윈도우에서는 icacls 명령어로 파일 권한을 다루는데, 리눅스처럼 숫자(755, 644 같은) 하나로 깔끔하게 설정하는 게 아니라 ACL(Access Control List) 기반이라 좀 더 복잡해요.
WSL이라는 게임 체인저
사실 2026년 현재, 윈도우에서 리눅스 명령어를 쓰는 가장 현실적인 방법은 WSL(Windows Subsystem for Linux)이에요. 이게 뭐냐면, 윈도우 안에서 진짜 리눅스 커널을 돌려주는 기능이거든요. WSL2를 설치하면 Ubuntu 같은 리눅스 배포판을 윈도우 안에서 그대로 쓸 수 있어서, 위에서 말한 명령어 변환을 아예 할 필요가 없어져요. VS Code의 Remote WSL 확장까지 쓰면 윈도우에서 개발하면서도 리눅스 환경을 완전히 누릴 수 있죠.
그래도 cmd나 PowerShell 명령어를 알아두면 좋은 이유가 있어요. CI/CD 파이프라인에서 윈도우 네이티브 환경을 써야 할 때, .NET 프로젝트처럼 윈도우 종속적인 빌드를 해야 할 때, 혹은 서버 관리자로서 윈도우 서버에 직접 접속해서 작업해야 할 때는 PowerShell을 직접 다룰 줄 알아야 하거든요.
한국 개발자에게 주는 시사점
한국 IT 환경에서는 아직도 윈도우 서버를 쓰는 곳이 꽤 많아요. 특히 공공기관이나 금융권에서는 윈도우 서버 + IIS 조합이 흔하고, 사내 인프라가 Active Directory 기반으로 묶여 있는 경우도 많죠. 이런 환경에서 일하는 개발자라면 PowerShell 기본기는 거의 필수예요.
또 요즘 DevOps 엔지니어라면 GitHub Actions나 Azure DevOps 같은 CI/CD 도구에서 윈도우 러너를 다뤄야 하는 상황이 생기는데, 이때 리눅스 명령어와 윈도우 명령어 양쪽을 알아두면 크로스 플랫폼 스크립트를 짤 때 훨씬 수월해요. PowerShell Core(현재는 그냥 PowerShell 7이라고 불러요)는 리눅스와 macOS에서도 돌아가니까, 하나의 스크립트로 모든 플랫폼을 커버하고 싶다면 PowerShell을 깊게 파보는 것도 좋은 선택이에요.
정리
리눅스 명령어에 익숙한 개발자가 윈도우 환경에서 당황하지 않으려면, 핵심 명령어 20~30개 정도의 대응표를 한번 훑어두는 것만으로도 충분해요. 특히 PowerShell은 리눅스의 ls, cat, curl 같은 별칭을 기본 지원하니까 생각보다 진입 장벽이 낮거든요.
여러분은 윈도우와 리눅스 환경을 오갈 때 어떤 방법을 쓰고 계세요? WSL로 해결하시나요, 아니면 PowerShell을 직접 쓰시나요?
🔗 출처: Hacker News
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공