본문 바로가기
Major/Computer Science

기본 shell 명령어들 정리

by LeeDaSom 2025. 2. 22.

*본 글은 아래 링크를 번역한 것을 정리해둔 것입니다. 

https://www.cs.princeton.edu/courses/archive/spr05/cos126/cmd-prompt.html

 

 

 

1. 명령 프롬프트

 명령 프롬프트 프로그램을 사용하면 아이콘 기반의 Windows 환경과 달리 전통적인 운영 체제와 더 유사한 환경에서 작업할 수 있다. 명령 프롬프트에서는 마우스 없이 키보드만 있어도 된다.  명령 프롬프트가 윈도우보다 더 낮은 레벨에서 작동하기 때문이다. (lower level) 이는 컴퓨터를 더 세밀하게 제어할 수 있음을 의미한다. 다만, 그만큼 사용자 친화성이 떨어진다는 단점이 있다.

 명령 프롬프트는 검은색 터미널 창으로 나타난다. 명령 프롬프트는 다음과 같은 형태로 표시된다.

 

 C: \>

 

 이곳에서 명령을 입력하게 된다. 

 * Windows에서는 대소문자를 구별하지 않으므로 cd 명령어는 CD와 동일하게 동작한다.

 

 

2. 유용한 명령어들

 1) javac: Java 프로그램을 컴파일하려면 javac 명령어를 사용한다. 

 C: \>javac HelloWorld.java

 

 2) java: 성공적으로 컴파일된 Java 프로그램을 실행하려면 java 명령어를 사용한다.

 C: \>java HelloWorld

 

 3) more: 파일의 내용을 한 화면씩 출력한다. 

 C: \>more HelloWorld.java

 

 4) exit: 명령 프롬프트를 종료하고 터미널 창을 닫는다. 

 C: \>exist

 

 

3. 파일 및 디렉터리 작업하기

 명령 프롬프트를 사용하면 파일을 디렉터리 계층으로 정리할 수 있다. 이러한 명령어들은 윈도우의 포인트 앤 클릭(point-and-click) 인터페이스에서 사용할 수 있는 기능과 동일한 역할을 한다. 두 가지 방법을 모두 익혀두면 파일을 효과적으로 관리하는 데 큰 도움이 될 것이다. 

 

1) dir: 현재 디렉터리 안의 파일 및 하위 디렉터리를 확인할 수 있다. 

 C: \> dir

 Directory of C:\

10/26/2004  01:36 PM         0 AUTOEXEC.BAT
10/26/2004  01:36 PM         0 CONFIG.SYS
02/10/2005  01:36 PM       126 HelloWorld.java
02/10/2005  08:59 PM    DIR    introcs

 

여기서 HelloWold.java는 파일이고, introcs는 디렉터리이다. 

 

2) cd: 현재 작업 중인 디렉터리를 확인한다. 

 C: \> cd

디렉터리를 변경하려면, cd 명령어 뒤에 디렉터리 이름을 입력한다.

 C: \> cd introcs

그러면 명령 프롬프트는 다음과 같이 변경된다.

 C: \introcs>

이전 디렉터리로 돌아가고 싶다면 다음과 같이 입력한다. 

 C: \introcs> cd ..

그러면 다시 C:\>로 돌아간 것을 확인할 수 있다. 

 

3) mkdir: 새 디렉터리를 생성하고 싶다면, mkdir을 사용하면 된다. 

C:\introcs> mkdir hello

생성된 디렉터리를 확인하려면, 

C:\introcs> dir
02/11/2005  02:53 PM    DIR    hello

4) move: 파일을 다른 디렉터리로 이동하려면 move 명령어를 사용한다. 

C:\introcs> move HelloWorld.java hello
C:\introcs> move readme.txt hello

이제 C:\introcs> 디렉터리에서는 파일이 보이지 않는다. 

새 디렉터리로 이동하여 확인하면,

C:\introcs> cd hello
C:\introcs\hello> dir
02/03/2005  11:53 PM    126 HelloWorld.java
01/17/2005  01:16 AM    256 readme.txt

파일의 이름을 변경할 때는 (Windows에서는 같은 이름의 파일로 변경할 수 없으므로) 두 단계로 변경해야 한다. 

C:\introcs\hello> move helloworld.java temp.java
C:\introcs\hello> move temp.java HelloWorld.java

5) copy: 파일을 복사

C:\introcs\hello> copy HelloWorld.java HelloWorld.bak

6) del: 파일 삭제

C:\introcs\hello> del HelloWorld.bak

7) * (와일드카드): 여러 파일을 한 번에 처리할 때 *를 사용한다. 

새 디렉터리를 만들고 모든 파일을 복사한다. 

C:\introcs> mkdir loops
C:\introcs> copy C:\introcs\hello\* loops

이제 hello 디렉터리의 모든 파일이 loops 디렉터리로 복사된 것을 확인할 수 있다. 

 

4. 리디렉션(Redirection)

 명령 프롬프트의 중요한 개념 중 두 가지느 표준 입력(Standard Input)과 표준 출력(Standard Output)이다. 기본적으로 표준 입력은 키보드이며, 표준 출력은 컴퓨터 화면이다. 이러한 개념을 활용하면 입력 및 출력을 파일과 연결할 수 있으며, 이를 리디렉션(Redirection)이라고 부른다. 

1) 표준 입력 리디렉션 <

 기본적으로 프로그램을 실행하면 사용자는 키보드에서 값을 입력해야 한다. 가령, CenterofMass.java 프로그램을 실행하면 사용자는 값을 직접 입력해야만 한다. 

C:\introcs\loops> java CenterofMass
0 0 10
1 1 10
0.5  0.5  20

하지만 입력값이 많을 경우, 이를 매번 입력하는 것은 힘들다. 따라서 우리는 입력을 파일에서 읽어오도록 설정할 것이다. 

텍스트 편집기를 사용하여 input.txt 파일을 생성하고, 아래와 같이 입력값을 저장한다. 

0 0 10
1 1 10

이제 input.txt 파일을 more 명령어로 확인할 수 있다. 

C:\introcs\loops> more input.txt
0 0 10
1 1 10

아래 명령어를 실행하면, 키보드 입력 없이 파일에 저장된 값이 프로그램의 입력값으로 사용된다. 

C:\introcs\loops> java CenterofMass < input.txt

2) 표준 출력 리디렉션 >

출력을 파일에 저장하려면 >연산자를 사용하면 된다. 

C:\introcs\loops> java CenterofMass > output.txt

이제 출력값이 화면이 아니라 output.txt 파일에 저장된다. 

이제 출력 파일을 확인해보자.

C:\introcs\loops> more output.txt

*output.txt 파일이 이미 존재하면, 기존 파일이 덮어쓰기될 수 있으니 주의하자.

 만약, 기존 파일에 내용을 추가하고 싶다면 >>연산자를 사용한다. 

C:\introcs\loops> java CenterofMass >> output.txt

3) 입력과 출력을 동시에 리디렉션

입력과 충력을 동시에 리디렉션하면, 파일에서 입력을 읽고 파일에 출력을 저장한다. 

C:\introcs\loops> java CenterofMass < input.txt > output2.txt

위 명령어를 실행하면 화면에는 아무것도 출력되지 않지만, output2.txt 파일에 결과가 저장된다. 

 

5. 파이핑(Piping)

 파이핑은 한 프로그램의 출력을 다른 프로그램의 입력으로 사용하는 방법이다. 이 방법은 명령 프롬프트에서 | (파이프 기호)를 사용하여 실행할 수 있다. 

1) 기존 방식: 파일을 사용하여 출력 확인

 만약 RandInts.java 프로그램이 너무 많은 출력을 생성하여 화면에서 빠르게 지나간다면, 출력을 파일로 저장한 후 확인할 수 있다. 

C:\introcs> java RandInts > temp.txt
C:\introcs> more < temp.txt

이 경우 두 개의 명령어를 입력해야 한다는 단점이 존재한다.

2) 해결 방안: 파이프(|) 사용

 위의 두 개의 명령어를 하나로 합쳐서 실행할 수 있다면 어떨까?

C:\introcs> java RandInts | more

3) 파이핑이 유용한 경우: 출력이 너무 많아서 한 번에 볼 수 없을 때, 프로그램이 무한 루프에 빠졌을 때 | more를 사용하면 초기 출력을 확인하여 오류를 찾기 쉽다. 

 즉, 디버깅 및 데이터 필터링에 매우 유용하다.