맨위로가기

작업 디렉토리

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

작업 디렉토리는 컴퓨터 파일 시스템에서 현재 위치를 나타내는 디렉토리로, 운영 체제, 명령줄 인터페이스, 프로그래밍 언어 등 다양한 환경에서 사용된다. 운영 체제에서는 `cd` 또는 `chdir` 명령어를 사용하여 작업 디렉토리를 변경할 수 있으며, 유닉스 셸에서는 `pwd` 명령어를 통해 현재 디렉토리의 전체 경로를 확인할 수 있다. 프로그래밍 언어는 파일 시스템 API를 통해 작업 디렉토리를 설정하고 변경하는 기능을 제공하며, C 언어의 `chdir()` 함수, Visual Basic의 `CHDIR()` 함수, Java의 `java.nio.file.Path` 인터페이스 등이 그 예시이다. 윈도우 파일 바로 가기에는 작업 디렉토리를 저장하는 기능이 있으며, 윈도우 환경에서는 작업 디렉토리와 관련된 보안 문제가 발생할 수 있다.

더 읽어볼만한 페이지

  • 파일 시스템 디렉토리 - 홈 디렉토리
    홈 디렉토리는 다중 사용자 환경에서 각 사용자가 개인 파일과 설정을 저장 및 관리하는 공간으로, 유닉스에서 처음 도입되어 다양한 운영체제에서 구현 방식과 위치가 다르지만 파일 시스템 권한으로 보호되어 개인 정보와 시스템 안정성을 유지하는 데 중요한 역할을 한다.
  • 파일 시스템 디렉토리 - 서류 가방 (마이크로소프트 윈도우)
    서류 가방은 윈도우 운영체제에서 이동식 미디어나 네트워크 폴더 간 파일 동기화를 지원하는 특수 폴더로, 파일 변경 사항 추적 및 동기화를 통해 최신 상태를 유지하며, 마이크로소프트 액세스와 연동하여 데이터베이스 복제 기능을 제공하고 개발자는 사용자 정의 조정기로 문서 버전 관리 기능을 구현할 수 있다.
작업 디렉토리
설명
작업 디렉터리현재 작업 중인 디렉터리
별칭현재 디렉터리, 작업 등록부
영어 명칭Working directory, Current directory, Current working directory
일본어 명칭カレントディレクトリ (karento direkutori)
정의파일 시스템에서 현재 실행 중인 프로세스가 파일을 찾거나 저장할 때 기본 위치로 사용하는 디렉터리
용도파일 이름만으로 파일을 참조할 수 있게 함
상대 경로의 기준점으로 사용
예시사용자가 `/home/user/documents` 디렉터리에서 작업 중일 때, 이 디렉터리가 작업 디렉터리가 됨
사용자가 `file.txt` 파일을 열면, `/home/user/documents/file.txt` 파일을 여는 것과 같음
동작 방식
변경`cd` 명령어를 통해 변경 가능 (cd 명령어)
프로그래밍 언어에서는 `chdir()` 함수를 사용 (예: C 언어, 파이썬)
상속새로운 프로세스는 부모 프로세스의 작업 디렉터리를 상속받음
프로그램이 실행될 때 초기 작업 디렉터리가 설정됨
중요성
파일 접근파일 입출력 작업의 편의성을 제공
스크립트 실행스크립트가 특정 디렉터리에서 실행되어야 할 때 작업 디렉터리 설정이 중요
참고 사항
혼동 주의프로그램 설치 디렉터리와 작업 디렉터리는 다를 수 있음
올바른 디렉터리 설정을 통해 오류 방지 필요

2. 운영 체제에서

대부분의 컴퓨터 파일 시스템에서 모든 디렉터리는 자기 자신을 가리키는 항목("."으로 표시)을 가진다.[1] 운영 체제는 사용자가 현재 작업 중인 디렉토리를 추적하고, 사용자는 명령어를 통해 이 디렉토리를 변경할 수 있다.

파일 및 디렉토리의 경로는 "절대 경로"와 "상대 경로" 두 가지 방식으로 지정할 수 있다.


  • 절대 경로: 루트 디렉토리(유닉스 계열의 경우 `/`, DOS/Windows의 경우 `C:\` 등)에서 시작하여 파일이나 디렉토리의 위치를 완전히 지정하는 방식이다.
  • 상대 경로: 현재 작업 디렉토리를 기준으로 파일이나 디렉토리의 위치를 지정하는 방식이다.


소프트웨어가 특정 파일을 참조할 때, 상대 경로를 사용하면 현재 디렉토리를 기준으로 해당 파일의 위치를 해석한다.[1] 일반적으로 현재 디렉토리는 프로세스별로 설정되며, 프로세스 내의 모든 스레드에서 공유된다.[2][3][4] 어떤 프로세스가 다른 프로세스로부터 시작될 때, 자식 프로세스는 기본적으로 부모 프로세스의 현재 디렉토리를 상속한다.[5]

MS-DOS나 Microsoft Windows의 경우, 현재 디렉토리 외에 '''현재 드라이브'''라는 개념도 있다.[6]

2. 1. 명령어

대부분의 컴퓨터 파일 시스템에서 모든 디렉터리는 자기 자신을 가리키는 항목(일반적으로 "."으로 이름 붙여짐)을 가진다.

도스, 유닉스 계열 명령 셸, 마이크로소프트 윈도우의 명령 줄 인터프리터인 cmd.exe 및 윈도우 파워셸에서 작업 디렉터리는 cd 또는 chdir 명령어를 사용하여 변경할 수 있다. 유닉스 셸에서는 pwd 명령으로 현재 작업 디렉터리의 전체 경로를 알 수 있으며, 도스와 윈도우에서는 인수 없이 cd를 입력하면 같은 결과를 얻는다. 유닉스/리눅스 셸의 환경 변수 PWD나 도스/윈도우 셸의 CD는 스크립트 내에서 사용하기 위해 설정되며, 외부 프로그램 실행은 필요하지 않다. 마이크로소프트 윈도우의 파일 바로 가기는 작업 디렉터리를 저장할 수 있다.

DR-DOS 7.02 이상 버전의 COMMAND.COM은 줄 바꿈을 생략하는 ECHO 명령어의 변형인 ECHOS를 제공한다. 이를 사용하여 작업 디렉토리를 환경 변수에 저장하는 임시 배치 작업을 만들 수 있다. Multiuser DOS 및 DR-DOS 7.02 이상에서는 `/B` 매개변수를 통해 명령어 출력을 수정할 수 있다.

작업 디렉토리는 `PROMPT` 명령의 `$P` 토큰으로 표시된다. DR-DOS 7.07 COMMAND.COM은 `$W` 토큰을 지원하여 가장 깊은 하위 디렉토리 레벨만 표시할 수 있다. 4DOS에도 유사한 기능이 추가되었다.

DOS에서 모든 논리 볼륨의 작업 디렉토리의 절대 경로는 현재 디렉토리 구조(CDS)라는 배열과 유사한 데이터 구조에 내부적으로 저장된다. 이 구조는 각 작업 디렉토리의 전체 경로에 66자 제한을 부과한다. DOS Plus 및 이전 버전의 DR-DOS는 Concurrent DOS에서 파생된 커널 상에서 DOS 에뮬레이션을 사용하여 이러한 제한이 없었다. 이들은 내부적으로 하위 디렉토리를 ''절대'' 경로가 아닌 상위 디렉토리에 대한 ''상대'' 링크로 구성했다. PalmDOS 및 DR-DOS 6.0 이후에는 CDS를 사용하도록 전환했기 때문에 다른 DOS와 동일한 제한에 직면했다.

2. 1. 1. POSIX (유닉스, 리눅스)

대부분의 유닉스 명령 셸에서 작업 디렉터리는 cd 명령어를 사용하여 변경할 수 있다. 유닉스 셸에서는 pwd 명령을 입력하면 현재 작업 중인 디렉터리의 전체 경로 이름을 출력한다.[10]

  • 현재 디렉토리 변경

: `cd` - 인수로 상대 경로 또는 절대 경로를 지정하여 변경할 수 있다.

  • 현재 디렉토리의 전체 경로 표시

: `pwd`

초기 UNIX 셸에서는 현재 디렉토리를 변경하는 명령어는 chdir이었지만, 이후 cd로 변화해 갔다.

  • 1971년의 Thompson Shell에서는 `chdir`라는 명령어였다.[10]
  • PWB shell영어에서는 `cd`와 `chdir` 둘 다 사용 가능하게 되어 있다.[11]
  • 1979년의 Bourne Shell에서는, 매뉴얼에는 `cd`만 기재되어 있었지만,[12] `chdir`도 사용 가능했다고 한다.[13]


2024년 현재에도, 예를 들어 tcsh에서는 `cd`와 `chdir` 모두 이용 가능하다.[14]

2. 1. 2. DOS/Windows

cd 또는 chdir 명령어를 사용하여 현재 디렉토리를 변경할 수 있다. (예: `cd C:\path\to\directory`)[15][16][17]

인수 없이 `cd` 또는 `chdir` 명령어를 사용하면 현재 디렉토리의 전체 경로를 표시한다.[15]

`PROMPT` 명령어의 `$P` 토큰을 사용하여 현재 디렉토리를 프롬프트에 표시할 수 있다. DR-DOS 7.07 COMMAND.COM은 `$W` 토큰을 지원하여 가장 깊은 하위 디렉토리 레벨만 표시할 수 있다. (4DOS에도 유사한 기능이 추가되었다.)

COMMAND.COM은 `ECHOS` 명령어를 통해 작업 디렉토리를 환경 변수에 저장하는 임시 배치 작업을 만들 수 있다. Multiuser DOS 및 DR-DOS 7.02 이상에서는 `/B` 매개변수를 통해 명령어 출력을 수정할 수 있다.

MS-DOS/COMMAND.COM/cmd.exe 에서의 명령어 사용법은 다음과 같다.

기능명령어
현재 디렉토리 변경`cd ` 또는 `chdir ` (경로 지정)
현재 디렉토리의 전체 경로 표시`cd` 또는 `chdir` (인수 없음)



Windows에서는 `chdir`가 아직 남아 있지만, `cd`로 대체되었다.[15]

일반적인 `cd` 명령으로는 드라이브를 넘나드는 현재 디렉토리 변경은 불가능하다. 현재 디렉토리를 C 드라이브에서 D 드라이브로 변경하려면, 먼저 `D:`와 같이 드라이브 이름과 콜론만 입력하여 현재 드라이브를 변경해야 한다. 그 다음 `cd` 명령으로 원하는 디렉토리로 변경한다. 또는, `cd /d D:\Photos`와 같이 `/d` 옵션을 붙여 드라이브를 넘나드는 변경을 할 수 있다.[16][17]

2. 1. 3. Windows PowerShell/PowerShell

`Set-Location -Path ` 또는 `cd ` 명령을 사용하여 현재 디렉터리를 변경할 수 있다. `Get-Location` 또는 `pwd` 명령을 사용하면 현재 디렉터리의 전체 경로를 표시할 수 있다.[1]

윈도우 파워셸에서 `pwd` 명령을 입력하면 현재 작업 중인 디렉터리의 전체 경로 이름을 출력하며, 인수 없이 `cd`를 입력하는 것도 동일한 결과를 얻을 수 있다. 유닉스 셸에서의 환경 변수 `PWD`나 도스/윈도우 셸에서의 `CD` 또한 스크립트 안에서 사용하기 위해 설정되며 외부 프로그램의 실행이 불필요하다.[1]

2. 2. 환경 변수

유닉스 셸에서는 `PWD` 환경 변수를 통해 현재 작업 디렉토리를 확인할 수 있다. COMMAND.COM 및 cmd.exe와 같은 윈도우 환경에서는 `CD` 의사 환경 변수를 통해 확인할 수 있다. 4DOS, 4OS2, 4NT 등에서는 `_CWD`, `_CWDS`, `_CWP`, `_CWPS` 환경 변수를 사용한다. 이러한 환경 변수들은 스크립트 내에서 사용되어 외부 프로그램 실행 없이 현재 디렉토리 정보를 얻을 수 있게 해준다.

2. 3. 파일 바로 가기 (Windows)

마이크로소프트 윈도우의 파일 바로 가기는 작업 디렉터리를 저장하는 기능을 포함하고 있다.[1]

2. 4. 현재 디렉토리 구조 (CDS)

DOS에서 모든 논리 볼륨의 작업 디렉터리의 절대 경로는 현재 디렉터리 구조(CDS)라는 데이터 구조에 저장된다. CDS는 부팅 시 동적으로 할당되며, 각 논리 드라이브 또는 LASTDRIVE에 의해 정의된 슬롯 수를 보유한다. 이 구조는 각 작업 디렉터리의 전체 경로에 66자 제한을 두어 하위 디렉터리의 최대 깊이를 제한한다.

DOS Plus 및 초기 DR-DOS(1991년 BDOS 6.7 버전까지의 DR-DOS 6.0)는 Concurrent DOS에서 파생된 커널을 사용하여 DOS 에뮬레이션을 구현했기 때문에 이러한 제한이 없었다. 이들은 하위 디렉터리를 절대 경로가 아닌 상위 디렉터리에 대한 상대 링크로 구성했다.

그러나 PalmDOS(BDOS 7.0 포함) 및 1992년 BDOS 7.1 업데이트 버전의 DR-DOS 6.0 이후에는 DOS 프로그램과의 최대 호환성을 위해 CDS를 사용하도록 변경되어 다른 DOS와 동일한 제한을 받게 되었다.

3. 프로그래밍 언어에서

대부분의 프로그래밍 언어는 운영 체제의 파일 시스템 함수에 대한 인터페이스를 제공하며, 여기에는 프로그램의 작업 디렉터리를 설정/변경하는 기능이 포함되어 있다.

C 언어에서는 POSIX 함수 `chdir()`를 사용하여 작업 디렉터리를 변경할 수 있다.[19] 비주얼 베이직에서는 `CHDIR()` 함수를 사용한다.[19] 자바에서는 작업 디렉터리를 변경하는 함수를 직접 지원하지 않지만, `java.nio.file.Path` 인터페이스나 `java.io.File` 클래스를 통해 작업 디렉터리를 얻을 수 있다.

3. 1. C 언어

C 언어에서 POSIX 함수 `chdir()`는 작업 디렉터리를 변경하는 시스템 호출을 수행한다.[19] 이 함수의 인수는 새 디렉터리의 경로를 포함하는 텍스트 문자열로, 절대 경로 또는 기존 경로에 대한 상대 경로일 수 있다. 이 함수는 프로세스에서 작업 디렉터리를 설정하기 위해 호출될 수 있다.

다른 언어들에도 유사한 기능이 있다. 예를 들어, 비주얼 베이직에서는 일반적으로 `CHDIR()`로 표기한다.

윈도우 APIPOSIX C 함수와 달리 자바 프로그래밍 언어나 자바 가상 머신은 `chdir()`를 직접적으로 지원하지 않는다. 한동안 변경 요청이 있었지만 2008년까지 이 요청은 거절되었고 제한된 지원만이 도입되었다.[20]

3. 2. Visual Basic

비주얼 베이직에서는 `CHDIR()` 함수를 사용하여 작업 디렉터리를 변경한다.[19]

3. 3. Java

자바에서 작업 디렉터리는 `java.nio.file.Path` 인터페이스 또는 `java.io.File` 클래스를 통해 얻을 수 있다. 윈도우 APIPOSIX C 함수와 달리 자바 프로그래밍 언어나 자바 가상 머신은 `chdir()`를 직접적으로 지원하지 않았다.[20] 2008년까지 이 요청은 거절되었고 제한된 지원만이 도입되었다.(처음에는 `java.lang.Runtime`에, 나중에는 `java.lang.ProcessBuilder`에 영향을 줌)[20]

4. 보안 문제 (Windows)

동적 링크 라이브러리 (DLL) 검색 시 현재 디렉토리의 우선 순위가 높으면 악의적인 DLL 인젝션에 의한 보안 허점(취약점)이 발생하기 쉽다[7].Microsoft Windows XP SP2 이후에는 현재 디렉토리의 우선 순위를 낮추는 안전한 DLL 검색 모드가 기본적으로 활성화되어 있다[8][9].

참조

[1] 웹사이트 カレントディレクトリ(カレントフォルダ / ワーキングディレクトリ)とは - 意味をわかりやすく - IT用語辞典 e-Words https://e-words.jp/w[...]
[2] 웹사이트 SetCurrentDirectory function (winbase.h) - Win32 apps | Microsoft Learn https://learn.micros[...]
[3] 웹사이트 Home directory - IBM Documentation https://www.ibm.com/[...]
[4] 웹사이트 chdir() - C Library Reference | BlackBerry QNX https://www.qnx.com/[...]
[5] 웹사이트 Inheritance (Processes and Threads) - Win32 apps | Microsoft Learn https://learn.micros[...]
[6] 웹사이트 カレントドライブとは - 意味をわかりやすく - IT用語辞典 e-Words https://e-words.jp/w[...]
[7] 뉴스 WindowsのDLL呼び出し順序に由来するセキュリティ・ホール | 日経クロステック(xTECH) https://xtech.nikkei[...]
[8] 웹사이트 Dynamic-Link Library Security - Win32 apps | Microsoft Learn https://learn.micros[...]
[9] 웹사이트 Dynamic-link library search order - Win32 apps | Microsoft Learn https://learn.micros[...]
[10] 웹사이트 Thompson Shell Manual https://www.in-ulm.d[...] 1974-05-15
[11] 웹사이트 PWB Shell Manual https://www.in-ulm.d[...] 1977-05-31
[12] 웹사이트 Bourne Shell Manual, Version 7 https://www.in-ulm.d[...]
[13] 웹사이트 traditional Bourne shell family / history and development https://www.in-ulm.d[...]
[14] 웹사이트 tcsh(1) — tcsh — Debian bookworm — Debian Manpages https://manpages.deb[...]
[15] 웹사이트 chdir | Microsoft Learn https://learn.micros[...]
[16] 웹사이트 Windowsコマンド集:(cd) https://xtech.nikkei[...]
[17] 웹사이트 cd | Microsoft Learn https://learn.micros[...]
[18] 웹사이트 現在の場所の管理 - PowerShell | Microsoft Learn https://learn.micros[...]
[19] 웹사이트 The Open Group Base Specifications Issue 6 and IEEE Std 1003.1, 2004 Edition http://www.opengroup[...]
[20] 웹인용 Java - Bug : 4045688 http://bugs.sun.com/[...] Sun Microsystems 1997-04-17



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com