Post

Unix Terminal 기초 - 터미널 명령어 가이드

Unix Terminal 기초 - 터미널 명령어 가이드

Terminal Terminology

터미널에서 작업할 때 기본 용어를 알아두면 문제를 설명하거나 도움을 요청할 때 유용합니다.

terminal_intro.jpg

  • Prompt: 명령어를 입력하는 위치 옆의 텍스트. 호스트명이나 현재 폴더 위치 등의 정보를 포함할 수 있습니다.
  • Command: 실행하려는 함수 또는 스크립트
  • Argument: 출력을 변경하기 위해 명령어에 추가하는 인자. 명령어와 인자 사이에는 항상 공백이 있습니다.
  • Standard Out: 명령어의 결과 출력
  • Standard Error: 실패한 명령어의 에러 출력

Getting Started

터미널을 열고 기본적인 파일/디렉토리 탐색을 시작해봅시다.

CommandFunctionSyntax/example usage
mkdirmake directorymkdir DIRECTORY
pwdprint working directorypwd
cdchange directorycd ~ 또는 cd (홈 디렉토리)
  cd .. (상위 디렉토리)
lslist contentsls [OPTIONS] DIRECTORY

mkdir - Make Directory Command

새로운 디렉토리(폴더)를 만들어 봅시다. mkdir(make directory) 명령어를 사용합니다.

1
mkdir unixTutorial

Unix에서는 디렉토리 이름에 공백을 넣지 않는 것이 좋습니다. 대신 언더스코어(_)를 사용하세요.

이미 존재하는 디렉토리를 다시 만들려고 하면 에러가 발생합니다:

1
2
$ mkdir unixTutorial
mkdir: cannot create directory 'unixTutorial': File exists

pwd - Path of Working Directory

현재 위치를 확인하는 명령어입니다.

1
2
$ pwd
/Users/daeho

User 디렉토리 안의 daeho라는 디렉토리에 있다는 뜻입니다.

cd - Change Directory

위에서 만든 unixTutorial 디렉토리로 이동해봅시다.

1
2
3
$ cd unixTutorial
$ pwd
/Users/daeho/unixTutorial

상위 디렉토리로 돌아가려면:

1
$ cd ..

현재 디렉토리는 .(dot), 상위 디렉토리는 ..(dot dot)으로 표현됩니다.

디렉토리 이름의 처음 몇 글자를 입력한 후 Tab 키를 누르면 자동 완성됩니다!


File Creation and Editing

ls (list) command

디렉토리의 내용을 확인하는 명령어입니다.

1
2
3
$ ls
$ ls .
$ ls DIRECTORY

nano - GUI와 유사한 텍스트 에디터

CommandFunction
ctrl+o파일 저장
ctrl+x파일 닫기
ctrl+/파일 끝으로 이동
ctrl+a줄의 시작으로 이동
ctrl+e줄의 끝으로 이동
ctrl+c줄 번호 표시
ctrl+_특정 줄 번호로 이동
ctrl+w단어 검색
alt+w다음 검색 결과
ctrl+\찾기 및 바꾸기

nano로 파일을 만들어봅시다:

1
$ nano myFirstfile.txt

텍스트를 붙여넣은 후 Ctrl+XYEnter로 저장합니다.

VIM

vim은 더 강력한 텍스트 에디터이지만, 처음에는 다소 어려울 수 있습니다.

VimVery Basic Usage
esc원래 상태로 돌아가기
iinsert 모드: 텍스트 추가/편집 가능
esc:wqescape 후 :wq 입력하면 저장 후 종료

Viewing File Contents

파일 내용을 확인하는 명령어는 이렇게 외우세요: A cat has a head and a tail, more or less

CommandFunctionUsage
cat파일 내용 전체 출력cat FILE
head파일의 처음 몇 줄 출력head FILE
tail파일의 마지막 몇 줄 출력tail FILE
more파일 보기 (제한된 옵션)more FILE
less파일 보기 (더 많은 옵션)less FILE

head & tail 사용 예시

1
2
3
4
$ head numSeq.txt        # 처음 10줄
$ head -n 5 numSeq.txt   # 처음 5줄
$ tail numSeq.txt        # 마지막 10줄
$ tail -n 5 numSeq.txt   # 마지막 5줄

less 네비게이션

CommandFunction
q종료
u한 화면 위로
d or space bar한 화면 아래로
gNUMNUM번 줄로 이동

Renaming, Copying and Deleting

CommandFunctionSyntax
touch빈 파일 생성touch FILE
mkdir디렉토리 생성mkdir DIRECTORY
rmdir빈 디렉토리 삭제rmdir DIRECTORY
rm파일 삭제rm FILE
cp파일/디렉토리 복사cp SOURCE DESTINATION
mv파일/디렉토리 이동/이름변경mv SOURCE DESTINATION

Unix에는 되돌리기(undo) 기능이 없습니다. 파일을 삭제하면 복구할 수 없으니 주의하세요!

touch - 빈 파일 생성

1
2
3
4
$ touch AA.txt BB.txt CC.txt
$ touch 1.txt 2.txt 3.txt
$ ls
1.txt 2.txt 3.txt AA.txt BB.txt CC.txt

mv - 파일 이동 및 이름 변경

1
2
3
4
5
# 파일 이동
$ mv 1.txt 2.txt 3.txt Numbers

# 파일 이름 변경
$ mv GG.txt FF.txt

cp - 파일 복사

1
2
3
4
$ cp myFirstFile.txt mySecondfile.txt

# 폴더 복사 (-r 옵션 필요)
$ cp -r Letters Letters_copy

rm - 파일/디렉토리 삭제

1
2
$ rm file.txt           # 파일 삭제
$ rm -r Deleteme        # 디렉토리와 내용물 전체 삭제

Counting, Sorting and Redirecting Output

이 부분부터 Unix의 진정한 강력함이 발휘됩니다. 명령어들을 조합하여 복잡한 작업을 수행할 수 있습니다.

Pipes & Redirects

CommandFunction
cmd < file파일을 입력으로 사용
cmd > file출력을 파일에 쓰기 (덮어쓰기)
cmd >> file출력을 파일에 추가
cmd1 \| cmd2cmd1의 출력을 cmd2로 전달

wc - word count

1
2
3
4
$ wc numSeq.txt       # 줄 수, 단어 수, 문자 수
$ wc -l numSeq.txt    # 줄 수만
$ wc -w numSeq.txt    # 단어 수만
$ wc -c numSeq.txt    # 문자 수만

tr - translate

문자를 다른 문자로 변환합니다.

1
2
$ tr '\n' ',' < numSeq.txt
1,2,3,4,5,6,7,...,100,

sort & uniq

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 일반 정렬
$ sort numSeqRandom.txt | head

# 숫자 정렬 (-n)
$ sort -n numSeqRandom.txt | head

# 과학적 표기법 포함 정렬 (-g)
$ sort -g numSeqRandom.txt | head

# 정렬 후 중복 제거
$ sort -g numSeqRandom.txt | uniq | wc -l

# 중복 횟수 세기
$ sort -g numSeqRandom.txt | uniq -c | head

실전 예제: 가장 많이 사용된 단어 찾기

명령어를 하나씩 추가하며 파이프라인을 구성하는 방법입니다:

1
2
3
4
5
$ cat myFirstfile.txt | tr ' ' '\n' | sort | uniq -c | sort -n | tail -n 4
  4 is
  4 space
  5 the
  5 to

Unix의 긴 한 줄 명령(one-liner)은 이렇게 하나씩 쌓아가며 만듭니다. 각 단계의 출력을 확인하면서 원하는 결과가 나올 때까지 조정하세요.


Find and Replace

grep - global regular expression print

파일에서 패턴을 검색합니다.

1
2
3
4
5
6
$ grep "space" myFirstFile.txt         # 해당 단어가 포함된 줄 출력
$ grep -o "space" myFirstFile.txt      # 매칭된 단어만 출력
$ grep -c "space" myFirstFile.txt      # 매칭된 줄 수 출력
$ grep -i "space" myFirstFile.txt      # 대소문자 무시
$ grep -v "space" myFirstFile.txt      # 매칭되지 않는 줄 출력
$ grep -n "space" myFirstFile.txt      # 줄 번호와 함께 출력

history - 명령어 히스토리

이전에 사용한 명령어를 검색할 수 있습니다:

1
2
$ history | grep myFirstFile | tail -n 5
$ history | grep -i myfirst | grep -v space | grep uniq

/ 화살표 키로도 이전 명령어를 불러올 수 있습니다.

Wildcards: ?*

  • * : 여러 문자를 대체
  • ? : 한 문자를 대체
1
2
3
4
$ ls ?.txt     # 한 글자 이름의 txt 파일 (1.txt, 2.txt ...)
$ ls ??.txt    # 두 글자 이름의 txt 파일 (AA.txt, BB.txt ...)
$ mv ??.txt Letters
$ mv ?.txt Numbers

sed - stream editor

패턴을 찾아 치환할 때 사용합니다:

1
2
3
4
5
6
7
8
# 기본 사용법
$ sed 's/galaxies/universes/g' myFirstfile.txt

# 새 파일로 저장
$ sed 's/galaxies/universes/g' myFirstfile.txt > myFirstfile2.txt

# 파일 직접 수정 (-i)
$ sed -i 's/galaxies/universes/g' myFirstfile.txt

man - manual

명령어의 설명과 사용 가능한 매개변수를 확인할 수 있습니다. q를 눌러 종료합니다.

1
2
$ man ls
$ man cat

심볼릭 링크는 파일을 복사하지 않고도 여러 위치에서 같은 파일에 접근할 수 있게 해줍니다.

1
2
$ ln -s ../myFirstFile.txt
$ ls -l

rm으로 심볼릭 링크를 삭제해도 원본 파일에는 영향을 주지 않습니다.


Further Reading

This post is licensed under CC BY 4.0 by the author.