Linux pwd ๋ช ๋ น์ด๋ ํ์ฌ ์์ ์ค์ธ ๋๋ ํฐ๋ฆฌ์ ์ ๋๊ฒฝ๋ก๋ฅผ ํ์ธํ๋ ๊ธฐ๋ณธ ๋๊ตฌ๋ค. OpenWrt·์๋ฒ·์๋ฒ ๋๋ ํ๊ฒฝ์์๋ ํ์๋ก ์ฌ์ฉ๋๋ pwd ํ์ฉ๋ฒ์ ์ ๋ฆฌํ๋ค.
1. ์ Linux pwd ๋ช ๋ น์ด๊ฐ ์ค์ํ๊ฐ?
Linux ์์ ์ฒ์ ๋ฐฐ์ฐ๋ ์ฌ๋๋, ๋๊ท๋ชจ OpenWrt ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฐ๋ฐ์๋, ์๋ฒ๋ฅผ ์ด์ํ๋ ์์คํ ๊ด๋ฆฌ์๋ ๊ณตํต์ผ๋ก ๋ฐ๋์ ์ฌ์ฉํ๋ ๋ช ๋ น์ด๊ฐ ํ๋ ์๋ค. ๋ฐ๋ก pwd(print working directory)์ด๋ค.
pwd๋ “์ง๊ธ ๋ด๊ฐ ์ ํํ ์ด๋์ ์์ ํ๊ณ ์๋์ง” ๋ฅผ ์๋ ค์ฃผ๋ ๊ธฐ๋ณธ ๋ช ๋ น์ด์ง๋ง, ์ค๋ฌด์์๋ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ฒฝ๋ก ๋ฌธ์ , ์คํฌ๋ฆฝํธ ์ค๋ฅ, ํ์ผ ์ ๊ทผ ์คํจ ๋ฑ์ด ํ๋ฃจ์๋ ์์ญ ๋ฒ ๋ฐ์ํ๋ค.
ํนํ ๋ค์ ํ๊ฒฝ์์๋ pwd ์ดํด๋๊ฐ ๋งค์ฐ ์ค์ํ๋ค.
- OpenWrt ๋น๋ ์์คํ ์์ ๋๋ ํฐ๋ฆฌ๊ฐ ์ฌ๋ฌ ๋ฒ ๋ณ๊ฒฝ๋ ๋
- CMake·Makefile์์ ์๋๊ฒฝ๋ก/์ ๋๊ฒฝ๋ก๋ก ํค๋๋ฅผ includeํ ๋
- CI/CD ์คํฌ๋ฆฝํธ๊ฐ ์์๊ณผ ๋ค๋ฅธ ๊ฒฝ๋ก์์ ์ค์๋ก ์คํ๋ ๋
- rm -rf ๊ฐ์ ์ํ ๋ช ๋ น์ด๋ฅผ ์คํํ๊ธฐ ์ ์ ์์น ํ์ธ์ด ํ์ํ ๋
- ์๋ฒ ๋๋ Linux ์ฅ๋น์์ ์ต์ํ์ ๋๊ตฌ๋ก ํ์ฌ ์์น๋ฅผ ํ์ ํด์ผ ํ ๋
์ด์ฒ๋ผ pwd๋ ๋จ์ ๋ช ๋ น์ด ๊ฐ์๋ ๋ฌธ์ ์๋ฐฉ·๋๋ฒ๊น ·์๋ํ·๋ณด์์ ํต์ฌ ์์๋ค.
2. pwd ๋ช ๋ น์ด ๊ธฐ๋ณธ ๊ฐ๋

Linux pwd ๋ช ๋ น์ด๋ “Print Working Directory”์ ์ฝ์๋ก, ํ์ฌ ์ ธ์ด ์์นํ ๋๋ ํฐ๋ฆฌ(์์ ๊ฒฝ๋ก)๋ฅผ ์ ๋๊ฒฝ๋ก๋ก ์ถ๋ ฅํ๋ค.
๐ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
pwd
์ถ๋ ฅ ์:
/home/ubuntu/workspace
pwd์ ํต์ฌ ๊ฐ๋
- ์ ๋๊ฒฝ๋ก๋ฅผ ์ถ๋ ฅํ๋ค
- ํ์ฌ ์ ธ ํ๊ฒฝ ๋ณ์(PWD) ์ ์ ์ฅ๋ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค
- bash ๋ด๋ถ ๋ช ๋ น์ด(builtin)์ด๋ฉฐ, coreutils ๋ฒ์ ๋ ์กด์ฌํ๋ค
3. pwd ๋ช ๋ น์ด์ ๋ ๊ฐ์ง ๋ฐฉ์
pwd๋ ๋ ๊ฐ์ง ๋์ ๋ฐฉ์์ด ์๋ค.
1) ๋ ผ๋ฆฌ ๊ฒฝ๋ก(Logical Path)
pwd ๊ธฐ๋ณธ๋์
์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋ณด์กดํ๋ค.
pwd
์:
/home/ubuntu/project -> /mnt/data/project
๋ก๊ทธical pwd๋ /home/ubuntu/project ๋ฅผ ์ถ๋ ฅํ๋ค.
2) ๋ฌผ๋ฆฌ ๊ฒฝ๋ก(Physical Path)
-P ์ต์
์ค์ ๋์คํฌ ์์ ๊ฒฝ๋ก๋ฅผ ์ถ๋ ฅํ๋ค.
pwd -P
์ถ๋ ฅ ์:
/mnt/data/project
์ธ์ ์ ์ฉํ๊ฐ?
- Docker, chroot, OverlayFS ๊ธฐ๋ฐ OpenWrt ๋น๋
- ์ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ ๋ง์ ๊ฒฝ๋ก ๊ตฌ์กฐ
- ์ค์ ‘๋ฆฌ์ผ’ ๊ฒฝ๋ก๋ฅผ ํ์ธํด์ผ ํ๋ ๋๋ฒ๊น ์ํฉ
4. pwd ๋ช ๋ น์ด์ ์ต์ ์์ธ ์ ๋ฆฌ

| ์ต์ | ์ค๋ช |
| (๊ธฐ๋ณธ) | logical path ์ถ๋ ฅ |
| -L | logical path ๊ฐ์ ์ถ๋ ฅ |
| -P | physical path ์ถ๋ ฅ |
์์
pwd -P
pwd -L
5. pwd ๋ช ๋ น์ด ์ด์์ฒด์ ๋ณ ์ฐจ์ด
Linux bash
- ๋ด๋ถ ๋ช ๋ น(builtin)
- help pwd ๋ก ๋ฌธ์ ํ์ธ ๊ฐ๋ฅ
BusyBox(OpenWrt)
- BusyBox ๋ด์ฅ ๊ธฐ๋ฅ
- ์ต์ ์ง์ ๋ฒ์๊ฐ ์ข์ ์ ์์
- ๋๋ฒ๊น ์ ์คํ๋ ค readlink -f . ๋ฅผ ๋ ๋ง์ด ์ฐ๊ธฐ๋ ํจ
readlink -f .
macOS
- coreutils pwd(gpwd) ๋ณ๋ ์ค์น ๊ฐ๋ฅ
- ์ฌ๋ณผ๋ฆญ ๋งํฌ ์ฒ๋ฆฌ ๋ฐฉ์์ด ๋ฆฌ๋ ์ค์ ๋ฏธ์ธํ๊ฒ ๋ค๋ฅผ ์ ์์
6. pwd ๋ช ๋ น์ด ์ค์ ํ์ฉ ์๋๋ฆฌ์ค
์๋๋ pwd๊ฐ ์ค๋ฌด์์ ์ด๋ป๊ฒ ํ์ฉ๋๋์ง ์ค์ ์์ ๊ธฐ๋ฐ์ผ๋ก ์ค๋ช ํ๋ค.
1) ๊ฒฝ๋ก ํ์ธ์ด ํ์ํ ์ํํ ๋ช ๋ น ์คํ ์
์: rm ๋ช ๋ น์ด ์คํ ์ ์ ์์ ํ์ธํ๊ธฐ
pwd
rm -rf *
ํนํ ์๋ฒ ๋๋ ์ฅ๋น์์ root ๊ถํ์ผ ๋ ๋ ์ค์ํ๋ค.
์ค์๋ก /etc ๋ /overlay ๊ฐ์ ๊ฒฝ๋ก์์ rm์ ์คํํ๋ฉด ์์คํ
์์ฒด๊ฐ ๋ถ๊ดด๋๋ค.
2) ์คํฌ๋ฆฝํธ๊ฐ ์์ ๊ฒฝ๋ก์์ ์คํ๋๋์ง ๊ฒ์ฆ
bash script ์๋จ์์ ์ฐพ๋ ํจํด:
#!/bin/sh
if [ "$(pwd)" != "/usr/local/myapp" ]; then
echo "Error: wrong directory"
exit 1
fi
CI/CD(์: GitHub Actions, Jenkins)์์๋ ๊ฐ์ ํจํด์ ํ์ฉํ๋ค.
3) OpenWrt ๋น๋ ํ๊ฒฝ์์ ๊ฒฝ๋ก ์ด๋ ์ถ์
OpenWrt๋ ๋ค์์ฒ๋ผ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฌ๋ฌ ๋ฒ ์ด๋ํ๋ฉด์ ๋น๋๊ฐ ์งํ๋๋ค.
./scripts/feeds update -a
./scripts/feeds install tcpdump
make menuconfig
make V=s
๋ฌธ์ ๋ฐ์ ์:
pwd
์ผ๋ก ํ์ฌ ๋น๋ ์คํฌ๋ฆฝํธ๊ฐ ์ด๋์ ๋๊ณ ์๋์ง ์ฝ๊ฒ ํ์ธํ ์ ์๋ค.
4) Makefile์์ ๊ฒฝ๋ก ๊ธฐ๋ฐ ์กฐ๊ฑด ์ฒ๋ฆฌ
C ๊ธฐ๋ฐ ํ๋ก์ ํธ์์ ๊ฒฝ๋ก ํ์ธ ์ฝ๋๋ฅผ ๋ฃ์ ๋ pwd๊ฐ ๊ฐ์ ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
์:
WORK_DIR := $(shell pwd)
all:
@echo "BUILD PATH = $(WORK_DIR)"
์๋ฒ ๋๋ ๋คํธ์ํฌ ์ฅ๋น๋ฅผ ๋น๋ํ ๋๋ ์์ฃผ ์ฐ์ด๋ ํจํด์ด๋ค.
5) C ํ๋ก๊ทธ๋๋ฐ ์ฐ๊ณ ์์ (getcwd)

C ๊ฐ๋ฐ์๋ผ๋ฉด pwd์ ๋์ผํ ๊ธฐ๋ฅ์ ์ํํ๋ ํจ์๋ getcwd()์ด๋ค.
/**
* getcwd_example - Demonstrate how to get current working directory
*
* Brief:
* Print the current working directory similar to Linux pwd command.
*
* Return:
* 0 on success, -1 on failure.
*/
#include <stdio.h>
#include <unistd.h>
#include <limits.h>
int main(void)
{
char path[PATH_MAX];
if (getcwd(path, sizeof(path)) == NULL) {
perror("getcwd error");
return -1;
}
printf("Current Directory: %s\n", path);
return 0;
}
pwd์ ๋ด๋ถ ๋์๊ณผ ๋์ผํ ๊ธฐ๋ฅ์ ์ง์ ๊ตฌํํ๋ ํํ๋ค.
6) pwd ๋ช ๋ น์ด์ ํ๊ฒฝ ๋ณ์์ ๊ด๊ณ
ํต์ฌ ํ๊ฒฝ ๋ณ์
- $PWD : ํ์ฌ ๋ ผ๋ฆฌ ๊ฒฝ๋ก
- $OLDPWD : ์ด์ ๋๋ ํฐ๋ฆฌ
echo $PWD
echo $OLDPWD
์ฐจ์ด์
pwd ์ถ๋ ฅ = $PWD ๋ณ์
๋จ, ์ผ๋ถ ์ํฉ์์๋ ์๋ก ๋ฌ๋ผ์ง๋ค(์: chroot, overlay ์ฒ๋ฆฌ, manual cd -P).
7. pwd ๋ช ๋ น์ด๋ก ๋ฐ์ํ๋ ๋ํ ๋ฌธ์ ๋ค
pwd๋ ๋จ์ํ์ง๋ง, ์๋์ฒ๋ผ ์ค์ ๋ฌธ์ ๋ฅผ ๋ง์ด ์ผ์ผํจ๋ค.
1) ์ฌ๋ณผ๋ฆญ ๋งํฌ ๋๋ฌธ์ ๊ฒฝ๋ก๊ฐ ํผ๋๋ ๋
์:
cd /data/logs
pwd
pwd -P
์ถ๋ ฅ ๊ฒฝ๋ก๊ฐ ์๋ก ๋ค๋ฅด๋ฉด:
- ๋ก๊ทธํ์ผ ๊ฒฝ๋ก ์ฐฉ์ค
- “ํ์ผ์ด ์๋ค”๋ ์ค๋ฅ ๋ฐ์
- ์คํฌ๋ฆฝํธ์์ ์๋๊ฒฝ๋ก๊ฐ ๊ผฌ์
ํนํ OpenWrt overlay ํ์ผ์์คํ ์์ ํํ ๋ฐ์ํ๋ค.
2) chroot ํ๊ฒฝ์์๋ pwd๊ฐ ‘์ง์ง’๊ฐ ์๋
์:
chroot /tmp/rootfs /bin/sh
pwd
๊ฒ๋ณด๊ธฐ์ / ์ด์ง๋ง ์ค์ ๋ /tmp/rootfs ๋ด๋ถ๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๋ฌผ๋ฆฌ ๊ฒฝ๋ก(real path) ์ถ์ ์ด ํ์ํ ๋๋ฒ๊น
์์๋ ๋ฐ๋์ pwd -P ๋๋ readlink -f . ๋ฅผ ์ฌ์ฉํ๋ค.
3) ์คํฌ๋ฆฝํธ ์๋ํ์์ PWD ์บ์ ๋ฌธ์
์:
export PWD="/fake/path"
pwd
bash builtin pwd๋ $PWD์ ์ํธ์์ฉํ๋ฉฐ, ๋๋ก๋ ์คํฌ๋ฆฝํธ์ฒ๋ผ ์ง์ ์กฐ์๋๋ฉด ์๋ชป๋ ๊ฒฝ๋ก๋ฅผ ์ถ๋ ฅํ ์ ์๋ค.
8. pwd ๋ช ๋ น์ด์ ์์ฃผ ํจ๊ป ์ฌ์ฉ๋๋ ๋ช ๋ น๋ค
1) ls
ํ์ฌ ์์น์์ ํ์ผ ํ์ธ
pwd
ls -al
2) cd
ํด๋ ์ด๋ ํ pwd๋ก ํ์ฌ ์์น ํ์ธ
cd /etc
pwd
3) readlink
์ฌ๋ณผ๋ฆญ ๋งํฌ ์ค์ ๊ฒฝ๋ก ๋ถ์
readlink -f .
4) dirname / basename
๊ฒฝ๋ก ๋ถ๋ฆฌ
dirname $(pwd)
basename $(pwd)
9. Linux pwd ๋ช ๋ น์ด๋ฅผ ๋ ์ ์ฐ๊ธฐ ์ํ ํ
โ ์๋๊ฒฝ๋ก๋ณด๋ค ์ ๋๊ฒฝ๋ก๋ฅผ ์ตํ๋ผ
pwd ์ถ๋ ฅ์ ํญ์ ์ ๋๊ฒฝ๋ก๋ค → ์๋ํ ์คํฌ๋ฆฝํธ์์ ๋ ์์ ํ๋ค.
โ rm -rf ์คํ ์ ๋ฐ๋์ pwd ํ์ธ
์ค์ ์๋ฐฉ์ ํต์ฌ ์ต๊ด.
โ pwd -P ๋ก ์ค์ ๊ฒฝ๋ก๋ ํ์ธ
ํนํ ์ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ ๋ง์ ํ๋ก์ ํธ์์ ๋งค์ฐ ์ค์ํ๋ค.
โ log ํ์ผ์ ํ์ฌ ๊ฒฝ๋ก๋ฅผ ๊ธฐ๋กํ๋ ์ต๊ด
๋ฌธ์ ๋ฐ์ ์ ๊ฒฝ๋ก ๊ธฐ๋ฐ ๋๋ฒ๊น ์ด ์ฌ์์ง๋ค.
11. Linux pwd ๋ช ๋ น์ด ์์ฃผ ๋ฌป๋ ์ง๋ฌธ(FAQ)
Q1. pwd๋ ์ด๋ค ๊ฒฝ์ฐ์ ์ถ๋ ฅ์ด ๋ฌ๋ผ์ง๋์?
์ฌ๋ณผ๋ฆญ ๋งํฌ ์ ๋ฌด, -L/-P ์ต์ , $PWD ์กฐ์ ๋ฑ์์ ์ถ๋ ฅ์ด ๋ฌ๋ผ์ง ์ ์๋ค.
Q2. BusyBox(OpenWrt) pwd๋ ์ต์ ์ด ์ ํ๋๋์?
๋ค, BusyBox๋ -P์ ์์ง๋ง -L ์ต์ ์ด ์๊ฑฐ๋ ์ผ๋ถ ํ๊ฒฝ์ ๋ฐ๋ผ ์ ์ฉ๋์ง ์์ ์ ์๋ค.
Q3. pwd ์์ด๋ ํ์ฌ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ ์ ์๋์?
ํ๊ฒฝ๋ณ์ $PWD๋ก ํ์ธ ๊ฐ๋ฅํ๋ค.
echo $PWD
Q4. pwd ๋ด๋ถ ๊ตฌํ์ ์ด๋ค ํจ์๋ก ๋์ํ๋์?
๋๋ถ๋ถ getcwd() ๊ธฐ๋ฐ์ด๋ฉฐ, ๋ ผ๋ฆฌ๊ฒฝ๋ก ๋ชจ๋์์๋ ํ๊ฒฝ๋ณ์ $PWD๋ฅผ ์ฐ์ ํ๋ค.
Q5. pwd๊ฐ ํ๋ฆฐ ๊ฐ์ ์ถ๋ ฅํ๋ ์ํฉ์ด ์๋์?
์คํฌ๋ฆฝํธ๊ฐ $PWD๋ฅผ ๋ฎ์ด์ด ๊ฒฝ์ฐ, chroot ํ๊ฒฝ, overlayfs ๊ธฐ๋ฐ ์์คํ ์์ ๋ฐ์ํ ์ ์๋ค.
Linux pwd ๋ช ๋ น์ด๋ ์ด๋ค ํจ๊ณผ๋ฅผ ์ฃผ๋๊ฐ?
Linux pwd ๋ช ๋ น์ด๋ ๋จ์ํ ๋๊ตฌ ๊ฐ์ง๋ง, ๊ฒฝ๋ก ๊ธฐ๋ฐ ์ฌ๊ณ ๋ฅผ ์ ํํ๊ฒ ์ก์์ฃผ๋ฉฐ ์ํํ ์ค์๋ฅผ ์๋ฐฉํ๊ณ ์คํฌ๋ฆฝํธ ์๋ํ·CI/CD·์๋ฒ ๋๋ ๋๋ฒ๊น ๊น์ง ๋ชจ๋ ์์ญ์์ ์ค์ํ ์ญํ ์ ํ๋ค.
“๊ฒฝ๋ก๋ฅผ ์ดํดํ๋ ์๊ฐ ์์คํ ์ ์ง๋ฐฐํ๋ค.”
pwd๋ ๊ทธ ์ถ๋ฐ์ ์ด๋ค.