Post

[개발 환경] 리눅스 CLI (Command Line Interface) 명령어

[개발 환경] 리눅스 CLI (Command Line Interface) 명령어

우리는 일반적으로 터미널에서 Bash shell을 이용해 리눅스 OS와 소통한다.
보통은 리눅스 환경에서 터미널에서 치는 모든 명령어를 묶어서 리눅스 명령어라고 부르기는 하지만, 엄밀히 말하면 Bash 명령어와 리눅스 명령어는 다르다.

Bash 명령어는 shell이라는 프로그램 자체가 원래부터 할 줄 아는 내장 명령어이다. 반면, 리눅스 명령어는 shell이 처리할 수 없는 복잡한 일들을 처리하기 위해 리눅스 OS 내부에 따로 설치해 둔 별도의 외부 프로그램들이다.

내가 지금 입력하는 명령어가 Bash 명령어인지, 리눅스 명령어인지 궁금하다면 터미널에 type {명령어}를 입력해서 확인할 수 있다.

1
2
3
4
5
user@server:~$ type cd
> cd is a shell builtin

user@server:~$ type cat
> cat is /usr/bin/cat

아래는 우리가 주로 리눅스 환경에서 사용하는 CLI 명령어들을 정리한 것이다.

디렉토리

명령어설명형식사용 예시
ls현재 위치에 있는 파일과 폴더 목록 출력 (List)lsls
cd다른 폴더로 이동 (Change Directory)cd <이동할 폴더>cd project
pwd현재 내가 있는 위치의 절대 경로 출력
(Print Working Directory)
pwdpwd

ls 명령어

ls -al을 사용하면 숨김 파일까지 확인할 수 있다.

fig1

cd 명령어

cd ..는 상위 폴더, cd ~는 홈 디렉토리로 이동한다.

파일 및 폴더 관리

명령어설명형식사용 예시
mkdir새로운 폴더 생성 (Make Directory)mkdir <새로 만들 폴더>mkdir data
rm파일이나 폴더 삭제 (Remove)rm <삭제할 파일>
rm -r <삭제할 폴더>
rm memo.txt
rm -r data
cp파일이나 폴더 복사 (Copy)cp <복사할 파일> <새 파일>
cp <복사할 파일> <도착 폴더>
cp -r <복사할 폴더> <새 폴더>
cp report.txt report_backup.txt
cp report.txt backup/
cp -r data data_backup
mv파일이나 폴더 이동 또는 이름 변경 (Move)mv <이동할 파일> <도착 폴더>
mv <기존 이름> <새 이름>
mv report.txt backup/
mv old.txt new.txt

cp 명령어

cp -r data data_backup을 실행했을 때 data_backup 디렉토리가 없다면, data 디렉토리의 복사본이 data_backup이라는 이름으로 새로 생성된다.
반대로cp -r data data_backup을 실행했을 때 data_backup 디렉토리가 이미 존재한다면, data 디렉토리가 그 안으로 복사되어 data_backup/data 형태가 된다.

mv 명령어

파일의 이름을 바꾸기 위해 mv <기존 이름> <새 이름>처럼 제자리에서 위치만 옮기는 방식으로도 사용할 수 있다.

파일 검색

리눅스의 파일 검색 명령어에서 grep은 파일 내용 안에서 특정 문자열을 찾을 때 사용하고, find는 특정 이름이나 조건을 가진 파일 또는 디렉토리를 찾을 때 사용한다.

명령어설명형식사용 예시
grep텍스트 파일 안에서 특정 문자열이 포함된 줄을 검색grep <찾을 문자열> <파일명>grep "ERROR" server.log
find특정 경로 아래에서 파일이나 디렉토리를 검색find <검색할 경로> <조건>find . -name "server.log"

grep 명령어

grep은 텍스트 파일 안에서 특정 문자열이 포함된 줄을 찾아 출력하는 명령어이다.

1
grep "ERROR" server.log

위 명령어는 server.log 파일에서 ERROR라는 문자열이 포함된 줄만 출력한다.

기본적으로 grep은 대문자와 소문자를 구분한다.
대소문자를 구분하지 않고 검색하고 싶다면 -i 옵션을 사용하면 된다.

fig3

또한 | 기호를 사용하면 앞 명령어의 실행 결과를 다음 명령어의 입력으로 넘길 수 있는데, 이를 파이프(pipe)라고 한다.

예를 들어 다음 명령어는 ls -al의 출력 결과 중에서 exp가 포함된 줄만 보여준다.

1
ls -al | grep "exp"

fig4

즉, grep은 파일 내용뿐만 아니라 다른 명령어의 출력 결과를 필터링할 때도 자주 사용된다.

find 명령어

find는 특정 경로 아래에서 파일이나 디렉토리를 찾는 명령어이다.

예를 들어 현재 디렉토리와 그 하위 디렉토리에서 server.log 파일을 찾으려면 다음과 같이 입력한다.

1
find . -name "server.log"

현재 디렉토리 아래에서 .txt 확장자를 가진 모든 파일을 찾으려면 다음과 같이 입력한다.

1
find . -name "*.txt"

대소문자를 구분하지 않고 검색하고 싶다면 -iname 옵션을 사용하면 된다.

find {검색할 경로} -size {검색 조건}으로 특정 용량을 기준으로 필터링할 수 있다.

1
2
3
4
5
# 용량이 100MB 이상인 파일들만 찾기
find . -size +100M

# 용량이 10KB 이하인 파일들만 찾기
find . -size -10k

파일 내용 보기 및 편집

명령어설명사용 예시
cat파일의 전체 내용을 화면에 출력 (Concatenate)cat {파일명}
nano터미널 내에서 사용할 수 있는 텍스트 편집기nano {파일명}

아래와 같은 .txt 파일이 있다고 가정한다.

[2023-10-26 09:00:01] INFO: System started successfully.
[2023-10-26 09:05:23] WARNING: High memory usage detected on CPU 1.
[2023-10-26 09:15:42] ERROR: Failed to connect to the database.
[2023-10-26 09:20:05] INFO: User 'admin' logged in from 192.168.0.1.
[2023-10-26 09:45:12] ERROR: Python script crashed unexpectedly.
[2023-10-26 10:00:00] INFO: Scheduled backup completed.
[2023-10-26 10:12:33] WARNING: Disk space is running low (85% used).
  • nano를 이용하면 아래의 창으로 진입하게 된다.

    fig2

    텍스트를 수정한 뒤 Ctrl + O를 누르면 변경 사항을 저장할 수 있고, 저장하지 않고 그대로 빠져나오려면 Ctrl + X를 누르면 된다.

용량 확인

명령어설명형식사용 예시
dfHDD나 SSD의 전체 용량과 남은 여유 공간 출력
(Disk Free)
df {옵션} {디렉토리} 
du특정 폴더나 파일이 디스크 용량을 얼마나 차지하는지 출력
(Disk Usage)
du {옵션} {디렉토리} 
  • dfdu를 그냥 사용하면 용량이 Byte 단위로 표기된다.
    이때 -h (human-readable) 옵션을 사용하면, K(킬로), M(메가), G(기가) 단위로 바꿔서 보여준다.
  • dfdu를 그냥 사용하면 모든 파일 목록이 다 출력된다.
    이때 -s (summary) 옵션을 사용하면, 총합만 요약해서 보여준다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
      # 현재 위치에 있는 모든 내용물의 총 용량 확인
      user@server:~$ du -sh .
      > 100G  .
    
      # 특정 폴더가 차지하는 용량 확인
      user@server:~$ du -sh /var/log
      > 50G   /var/log
    
      # 현재 위치에 있는 모든 폴더/파일의 용량을 각각 요약해서 출력
      user@server:~$ du -sh *
      > 80G   Train_Folder
        4.0K  test.py
        19G   Exp_Folder
    
  • 결과를 용량 순으로 정렬하고 싶다면 |sort 명령어를 결합하여 du -sh * | sort -h 형태로 사용하기도 한다.

    1
    2
    3
    4
    
      user@server:~$ du -sh * | sort -h
      > 80G   Train_Folder
        19G   Exp_Folder
        4.0K  test.py
    

프로세스 관리

명령어설명사용 예시
ps현재 실행 중인 프로세스들의 목록 출력
(Process Status)
-
kill프로그램이나 프로세스를 강제 종료kill -9 {PID}

네트워크 통신

명령어설명사용 예시
ping특정 서버나 웹사이트가 살아있는지 신호를 보내 확인
(인터넷 연결이 잘 되는지)
ping {도메인 이름/IP 주소}
wget웹 상에 있는 파일을 내 컴퓨터로 다운로드 (Web Get)wget {웹 URL}
curl웹 주소로 데이터를 보내거나 가져옴 (Client URL)curl {웹 URL}
ifconfig / ip내 컴퓨터의 IP 주소와 네트워크 인터페이스 정보 확인-
  • wget은 인터넷의 파일을 내 컴퓨터로 다운로드하기 위해 사용한다.

    주로 무거운 설치 파일이나 압축 파일을 받을 때 사용한다.

    1
    2
    
      # 아나콘다 설치 파일을 내 컴퓨터로 다운로드 
      wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh
    
  • curl은 파일 다운로드도 가능하지만, 그보다는 웹 서버에 데이터를 보내고, 요청하고, 결과값을 받아오는 통신에 특화된 명령어다.

    따라서 명령어를 입력하면 파일로 저장하지 않고 결과물을 터미널 창에 출력하기 때문에, 주로 API 결과값을 화면에서 바로 확인할 때 사용한다.

    1
    2
    3
    4
    5
    6
    7
    8
    
      # ChatGPT API를 이용해 질문에 대한 답변 출력
      curl https://api.openai.com/v1/chat/completions \
          -H "Content-Type: application/json" \
          -H "Authorization: Bearer My_OPENAI_API_KEY" \
          -d '{
              "model": "gpt-3.5-turbo",
              "messages": [{"role": "user", "content": "지금 서울의 시간은?"}]
          }'
    

압축 및 해제

명령어설명사용 예시
tar여러 파일을 하나의 파일로 묶거나, 묶은 파일을 해제tar {옵션} {파일/폴더명} {도착 폴더}
zip / unzip.zip 형식으로 압축하거나 압축을 해제-
  • 보통 리눅스나 서버 환경끼리는 tar.gz 형식을 표준처럼 사용하고, 윈도우 사용자와 파일을 주고받을 때는 zip 형식을 주로 사용한다.
  • 일반적으로 압축할 때는 tar -cvzf를, 압축 해제할 때는 tar -xvzf를 사용한다.

기타 명령어

명령어설명사용 예시
history내가 지금까지 터미널에 입력했던 명령어 기록-
alias긴 명령어를 짧은 단축어로 만듦alias {단축어}={'원래명령어'}
clear터미널 화면을 깨끗하게 지움-
echo내가 입력한 글자를 터미널 화면에 그대로 출력
(프로그래밍 언어의 print() 함수와 같은 역할)
echo {텍스트}
  • alias 사용법은 다음과 같다.

    1
    2
    3
    4
    5
    6
    7
    8
    
      # 'ls -al'을 매번 치기 귀찮을 때 'll'이라는 단축어 생성
      alias ll='ls -al'
    
      # 현재 설정된 모든 alias 목록 보기
      alias
    
      # 설정한 단축어 'll' 삭제
      unalias ll
    
  • echo와 redirection 기호 >, >>를 함께 사용하면, nano 같은 편집기를 열지 않고도 밖에서 파일에 바로 글자를 밀어 넣을 수 있다.

    1
    2
    3
    4
    5
    
      # 덮어쓰기 (>): hello.txt 파일에 "Hello World"를 적는다. (기존 내용이 있으면 지우고 덮어씀)
      echo "Hello World" > hello.txt
    
      # 이어쓰기 (>>): hello.txt 파일의 맨 아랫줄에 "Nice to meet you"를 추가한다.
      echo "Nice to meet you" >> hello.txt
    
This post is licensed under CC BY 4.0 by the author.