about_Locations — PowerShell의 현재 작업 위치 다루기
about_Locations — PowerShell의 현재 작업 위치 다루기
'현재 작업 위치(current working location)'는 PowerShell에서 명령이 가리키는 기본 위치예요. 파일 경로를 명시적으로 적지 않으면 PowerShell이 어디를 기준으로 작업할지 결정하는 그 기준점이죠. 이 문서를 보면 지금 내가 어느 위치에 있는지 확인하고, 그 위치를 바꾸는 방법을 자연스럽게 익힐 수 있어요.
출처: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_locations
본문
현재 작업 위치란 뭘까요?
현재 작업 위치는 명령이 별도 경로를 지정하지 않을 때 기본적으로 가리키는 위치예요. 쉽게 말해, 명령이 영향을 줄 대상 위치를 따로 적어 주지 않았다면 PowerShell이 사용하는 바로 그 장소랍니다.
예를 들어 현재 작업 위치를 다음과 같이 설정했다고 해볼게요.
Set-Location C:\Program Files\PowerShell
이렇게 하면 다른 경로를 명시하지 않는 한, 모든 명령이 이 위치를 기준으로 처리돼요.
한 가지 알아둘 점이 있어요.
[!NOTE] PowerShell은 프로세스 하나에 여러 개의 runspace를 지원해요. 각 runspace는 자기만의 현재 디렉터리를 갖고 있죠. 이 디렉터리는 PowerShell 프로세스의 현재 디렉터리, 즉
[System.Environment]::CurrentDirectory와는 다르다는 점을 기억해 두세요.
드라이브마다 위치를 따로 기억해요
PowerShell은 각 드라이브의 현재 작업 위치를 해당 드라이브가 지금 작업 중인 드라이브가 아니더라도 계속 유지해요. 덕분에 다른 위치의 드라이브 이름만으로도 그 드라이브의 현재 작업 위치에 있는 항목에 접근할 수 있죠.
예를 들어 지금 작업 위치가 C:\Windows라고 해볼게요. 그리고 다음 명령으로 작업 위치를 HKLM: 드라이브로 옮긴다고 해보죠.
Set-Location HKLM:
지금 작업 위치는 레지스트리 드라이브이지만, 아래처럼 C: 드라이브를 사용하면 여전히 C:\Windows 디렉터리의 항목에 접근할 수 있어요.
Get-ChildItem C:
PowerShell이 해당 드라이브의 작업 위치가 Windows 디렉터리라는 것을 기억하고 있기 때문에, 그 디렉터리의 항목을 가져와 주는 거예요. 아래 명령을 실행한 결과와 같죠.
Get-ChildItem C:\Windows
작업 위치 확인하고 바꾸기
PowerShell에서는 Get-Location 명령으로 현재 작업 위치를 확인하고, Set-Location 명령으로 작업 위치를 설정해요. 예를 들어 다음 명령은 현재 작업 위치를 C: 드라이브의 Windows 디렉터리로 설정하죠.
Set-Location C:\Windows
작업 위치를 바꾼 뒤에도, 명령에 드라이브 이름(뒤에 콜론을 붙인 형태)을 포함하면 다른 드라이브의 항목에 접근할 수 있어요.
Get-ChildItem HKLM:\software
이 명령은 레지스트리의 HKEY_LOCAL_MACHINE 하이브에 있는 Software 컨테이너의 항목 목록을 가져와 줘요.
점 하나와 점 둘의 의미
PowerShell은 현재 작업 위치와 그 상위 위치를 나타내는 특수 문자를 지원해요. 현재 작업 위치는 점 하나(.), 그 상위 위치는 점 두 개(..)로 표현하죠. 예를 들어 다음은 현재 작업 위치의 System 하위 디렉터리를 가리켜요.
Get-ChildItem .\System
현재 작업 위치가 C:\Windows라면 이 명령은 C:\Windows\System 안의 모든 항목 목록을 돌려줘요. 그런데 점 두 개를 쓰면 현재 작업 디렉터리의 상위 디렉터리를 기준으로 하죠.
Get-ChildItem ..\"Program Files"
이 경우 PowerShell은 점 두 개를 C: 드라이브로 취급해서, C:\Program Files 디렉터리의 모든 항목을 가져와 줘요.
드라이브의 루트에서 시작하는 경로
백슬래시(\)로 시작하는 경로는 현재 드라이브의 루트에서 출발하는 경로예요. 예를 들어 현재 작업 위치가 C:\Program Files\PowerShell이라면 드라이브의 루트는 C:\가 되죠. 따라서 다음 명령은 C:\Windows 디렉터리의 모든 항목을 나열해 줘요.
Get-ChildItem \Windows
경로를 생략하면 현재 작업 위치 기준?
컨테이너나 항목의 이름을 줄 때 드라이브 이름, 백슬래시(\), 마침표(.)로 시작하는 경로를 지정하지 않으면, 그 컨테이너나 항목은 현재 작업 위치에 있다고 간주해요. 예를 들어 현재 작업 위치가 C:\Windows라면, 다음 명령은 C:\Windows\System 디렉터리의 모든 항목을 돌려줘요.
Get-ChildItem System
만약 디렉터리 이름 대신 파일 이름을 지정하면, PowerShell은 그 파일(현재 작업 위치에 있다고 가정)에 대한 정보를 반환해 줘요.