[Linux] 리눅스 기본 명령어

아현·2022년 2월 22일
0

Linux

목록 보기
1/1

1. 기본 명령어


ls


  • 현재 위치의 파일 목록을 조회하는 명령어 입니다.

  • 주요 옵션

    • ls -l : 파일들의 상세정보를 나타냅니다.

    • ls -a: 숨어있는 파일들도 표시합니다.

    • ls -t : 파일들을 생성된 시간별로(최신것 부터) 표시합니다.

    • ls -rt : 파일들을 오래된 시간부터 표시합니다.

    • ls -F : 파일을 표시할 때 마지막에 유형을 나타내는 파일명을 끝에 표시합니다. ( '/' - 디렉토리 , '*' - 실행파일 , '@' - 링크 )
      각 옵션들은 자유자재로 합성해서 사용가능합니다.

  • ex) ls -lrt : 파일들의 상세정보를 나타내며, 오래된 것부터 포시합니다.



cd


  • 경로를 이동할 때 사용하는 명령어 입니다.

  • 주요 옵션

    • cd ~: 어느 곳에든지 홈디렉토리로 바로 이동합니다.

    • cd .. : 상위 디렉토리로 이동합니다.

    • cd /dir : 절대경로 dir 로 이동할 경우 사용합니다.

    • cd - : 이동하기 바로 전의 디렉토리로 이동합니다.



touch


  • 파일의 용량이 0인 파일을 생성, 날짜 변경하는 명령어 입니다.

  • 주요 옵션

    • touch filename : filename 의 파일을 생성합니다.

    • touch -c filename : filename 의 시간을 현재시간으로 변경합니다.

    • touch -t 200001011200 filename : filename 의 시간을 날짜정보(YYYYMMDDhhmm) 로 변경합니다.

    • touch -r filename1 filename2 : filename2의 날짜정보를 filename1 의 날짜정보와 같게 변경합니다.



mkdir


  • 새로운 디렉토리를 만들 때 사용하는 명령어입니다.

  • 주요 옵션

    • mkdir dirname : dirname 의 디렉토리를 생성합니다.

    • mkdir -p dirname/subdname : 존재하지 않는 디렉토리의 하위디렉토리까지 생성합니다.

    • mk -m 644 dirname : 특정 퍼미션을 갖는 디렉토리를 생성합니다.



cp


  • 파일을 복사하는 명령어 입니다.

  • 주요 옵션

    • cp file cfile : file 을 cfile 이라는 이름으로 복사합니다.

    • cp -f file cfile : 복사할 때 복사대상이 있으면 지우고 강제로 복사합니다.

    • cp -R dir cdir : 디렉토리 복사할 때 사용하며, 폴더안의 모든 하위경로와 파일들을 모두 복사합니다.



mv


  • 파일을 이동하는 명령어 입니다.
  • cp 와 차이점
    • cp는 파일을 복사하여 원본 파일이 남아있지만 mv 는 원본 파일이 남지 않는다
    • 이름 변경시에도 사용가능합니다.
  • 주요 옵션

    • mv fname mfname : fname 의 파일을 mfname 의 이름으로 이동/변경 합니다.

    • mv -b fname mfname : mfname 의 파일이 존재하면 mfname 을 백업한 뒤에 이동합니다.

    • mv -f fname mfname : mfname 의 파일이 존재하면 백업 없이 덮어씁니다.



rm


  • 파일이나 디렉토리를 삭제할 때 사용하는 명령어 입니다.

  • 주요 옵션

    • rm fname : fname 을 삭제합니다.

    • rm -f fname : fname 을 묻지 않고 삭제합니다.

    • rm -r dir : dir 을 삭제합니다.

      • 디렉토리는 -r 옵션 없이는 삭제할 수 없습니다.



cat (catenate)


  • 파일이름을 인자로 받아서 그 내용을 출력할 때 사용합니다.

  • 주요 옵션

    • cat fname : fname 의 내용을 출력합니다.

    • cat fname1 fname2 : fname1 과 fname2 의 내용을 이어서 출력합니다.

    • cat fname1 fname2 | more : fname1, fname2 를 출력하는데 페이지별로 출력합니다.

    • cat fname1 fname2 | head : fname1, fname2 를 출력하는데 처음부터 10번째까지만 출력합니다.

    • cat fname1 fname2 | tail : fname1, fname2 를 출력하는데 끝에서부터 10번째까지만 출력합니다.



redirection ( '>' , '>>' )


  • 리눅스 스트림의 방향을 조정하는 명령어 입니다.

  • 명령 > 파일 : 명령의 결과를 파일로 저장합니다.

    • cat fname1 fname2 > fname3 : fname1,fname2 를 출력하고 fname3 이라는 파일에 저장합니다.
  • 명령 >> 파일 : 명령의 결과를 파일에 추가합니다.

    • cat fname4 >> fname3 : fname3 에 fname4 의 내용을 추가합니다.
  • 명령 < 파일 : 파일의 데이터를 명령에 입력합니다.

    • cat < fname1 : fname1 의 내용을 출력합니다.
  • ex) cat < fname1 > fname2 : fname1 의 내용을 출력하는 결과물을 fname2 에 저장합니다.



alias


  • 자주 사용하는 명령어를 간단한 명령어로 설정하는 명령어 입니다.

    • 해제하고자 하는 경우에는 unalias 를 사용합니다.
  • alias new = 'command' : command 를 실행하는 새 명령어 new 를 만듭니다.

  • ex) alias ls='ls -l' : ls 를 실행하면 -l 옵션을 갖는 ls를 실행합니다.

  • alias : 현재 alias 목록을 출력합니다.

  • unalias new : new 라는 alias 를 해제 합니다.



2. 필수 명령어


history


  • 쌍느낌표(Double exclamation) !!

    • 바로 직전 명령어를 실행한다.
  • 주요 옵션

    • !! | grep Linux

      • 이 기능을 다음과 같이 쉽게 응용 할 수 있다. 이전 명령어에 쉽게 추가하기
    • sudo !!

      • 다음과 같이 root 권한 명령어인데 'sudo' 없이 사용한 명령어를 쉽게 불러와 사용할수 있다.

      • 이는 방향키를 올려서 이전 명령어를 불러 오고 다시 앞쪽으로 이동하여 에디트하는 번거로움을 피할수 있다.

    • echo !! > script.sh

      • 가끔 출력 결과를 파일이나 스크립트로 저장할 필요가 있을때가 있다. 이런 경우 '!!'를 사용하여 반복을 피할 수 있다.

'!'의 기능은 조금 다른데, 이는 명령어 이력번호를 호출하는데 사용된다.

  • ! 이력번호

    • 이전 명령어들이 각각 고유 식별번호가 존재하는데, 그 식별번호를 사용하여 재 사용이 가능하다.

    • !1093

      • 이 명령어는 1093번 명령어를 재실행한다.
  • !-이력상대순번 : 마지막 명령어로 부터 뒤로 두번째 명령어를 재호출할때 !-2 이렇게 사용하면 된다.

  • 주요 옵션

    • !^: 이전 명령어의 첫번째 argument이다.

    • !$: 이전 명령어의 마지막 argument이다.

    • !*: 이전 명령어의 전체 argument가 있다.

  • 응용 - 특정 명령어의 인수를 사용할 수 있다.

    • $ ls !ls:2



chmod, chown, chgrp


chmod : 파일과 디렉터리의 권한을 변경할 때 사용합니다.

  • testfile2 파일의 소유자는 root이고 권한은 소유자 (읽기/쓰기), 그룹 (읽기), 다른 사용자 (읽기)의 권한이 부여된 파일

  • 권한 부분은 직관적으로 표기하기 쉽게 숫자로도 설정이 가능합니다.


  • 형식
chmod [권한] [변경할 파일 또는 디렉터리]  
  • 변경 방법

    • 개별 단위 부여

      • chmod g+rw/go+rwx testfile2

      • 문자를 활용하여 파일의 g(그룹), u(사용자), o(다른 사용자), a(모두)에 권한을 지정하는 방법입니다.

      • (+), (-)를 사용하여 권한을 부여하거나 제외시킬 수 있습니다.

    • 숫자 단위 변경

      • chmod 777/766/744 testfile2

      • 숫자를 활용하여 똑같이 g(그룹), u(사용자), o(다른 사용자), a(모두)에 권한을 지정하는 방법입니다.

      • 숫자가 의미하는 권한이 무엇인지만 확실하게 알고 있으면 이렇게 사용자, 그룹, 다른 사용자에게 권한을 편하게 부여할 수 있습니다.

      r=4, w=2, x=1 따라서 더하면 7!!! 확실하게 기억합시다.



chown: 파일과 디렉터리의 소유주를 변경할 때 사용합니다.


  • chown -R: 디렉터리 안의 파일들의 소유권도 동일하게 변경됩니다.

  • 형식

 chown [소유주] [변경할 파일]
 
 chown [소유주] [변경할 디렉터리]
 
 chown [소유주]:[그룹] [변경할 디렉터리]



chgrp : 파일의 그룹만 변경할 때 사용합니다.


  • 형식
chgrp [그룹] [변경할 파일]



who


  • 현재 시스템에 login 하고 있는 사용자의 리스트를 보여줍니다.



whereis


  • 소스, 실행파일, 메뉴얼 등의 위치를 알려줍니다

  • ex) whereis perl: perl의 위치를 알려준다



vi


  • vi 편집기 상태로 들어감

  • ex) vi newfile: vi 편집기 상태로 들어감



tar, compress, gzip


tar


  • .tar, _tar로 된 파일을 묶거나 풀때 사용하는 명령어

    • 압축파일이 아님
  • 형식

    • tar cvf [파일명(.tar, _tar)] 압축할 파일(또는 디렉토리): 묶을 때

    • tar xvf [파일명(.tar, _tar)] : 풀 때



compress


  • 확장자 .Z 형태의 압축파일 생성

  • 형식

    • compress [파일명] : 압축시

    • uncompress [파일명]: 해제시



gzip


  • 확장자 .gz, .z 형태의 압축파일 생성

  • 형식

    • gzip [파일명] : 압축시

    • gzip -d [파일명]: 해제시



  • .tar.Z
    • 이것은 tar로 묶은 후에 compress를 사용하여 압축한 것으로 uncompress를 사용해서 압축을 푼 다음,
      다시 tar를 사용해서 원래의 파일들을 만들어내면 됩니다.

    • 아니면 다음과 같이 한 번에 풀 수도 있다.
      • zcat [파일명].tar.Z : 해제 시

  • .tar.gz또는 .tar.z
    • gzip -cd [파일명] : 해제시

  • .tar.gz 또는 .tar.z .tgz
    • gzip을 사용해서 푼 다음 다시 tar를 사용해서 원래 파일을 만들어 낼 수 있으나, 다음과 같이 하면 한 번에 처리를 할 수 있다.
    gzip -cd 파일.tar.gz | tar xvf -  또는
     tar xvzf 파일.tar.gz
     tar xvzf 파일.tgz



grep


  • 특정 파일에서 지정한 문자열이나 정규표현식을 포함한 행을 출력해주는 명령어입니다.

  • tail이나 ls 등 다양한 명령어와 조합하여 응용되는 경우가 많다.

  • 형식

grep [옵션][패턴][파일명]
  • 문자열로 찾기

# 특정 파일에서 'error' 문자열 찾기
grep 'error' 파일명

# 여러개의 파일에서 'error' 문자열 찾기
grep 'error' 파일명1 파일명2

# 현재 디렉토리내에 있는 모든 파일에서 'error' 문자열 찾기
grep 'error' *

# 특정 확장자를 가진 모든 파일에서 'error' 문자열 찾기
grep 'error' *.log

  • 주요 옵션

    • c : 일치하는 행의 수를 출력한다.

    • i : 대소문자를 구별하지 않는다.

    • v : 일치하지 않는 행만 출력한다.

    • n : 포함된 행의 번호를 함께 출력한다.

    • l : 패턴이 포함된 파일의 이름을 출력한다.

    • w : 단어와 일치하는 행만 출력한다.

    • x : 라인과 일치하는 행만 출력한다.

    • r : 하위 디렉토리를 포함한 모든 파일에서 검색한다.

    • m 숫자 : 최대로 표시될 수 있는 결과를 제한한다.

    • E : 찾을 패턴을 정규 표현식으로 찾는다.

    • F : 찾을 패턴을 문자열로 찾는다.



  • grep은 다른 명령어와 조합해서 사용하는 경우도 많습니다.

    • 실시간 로그 보기 (tail + grep)

      • tail -f mylog.log | grep 192.168.15.86

      • mylog파일을 실시간으로 액세스하고 IP주소가 192.168.49.16인 행만 추출

    • 특정 파일에서 여러개 문자열 찾기

      • cat mylog.txt | grep 'Apple' | grep 'Banana'

      • | 파이프를 사용하면 grep명령어를 여러 개 사용하여 특정 파일에서 여러 개의 문자열을 찾을 수 있을 수도 있습니다.

      • 위의 명령어대로 입력한다면 mylog.txt 파일에서 Apple과 Banana이 있는 문자열들을 찾을 수 있겠습니다.



find


  • 리눅스 파일 시스템에서 파일을 검색하는 데 사용되는 명령어입니다.

    • 다양한 표현식을 사용하여 원하는 파일의 목록을 추출할 수 있습니다.
  • 형식

find [옵션] [경로] [표현식]
  • ex) find . -name "*log*": 현재 위치에서 log가 들어가는 파일 모두 찾기

  • 주요 옵션

    • P : 심볼릭 링크를 따라가지 않고, 심볼릭 링크 자체 정보 사용.

    • L : 심볼릭 링크에 연결된 파일 정보 사용.

    • H : 심볼릭 링크를 따라가지 않으나, Command Line Argument를 처리할 땐 예외.

    • D : 디버그 메시지 출력.


  • 경로

    • find의 인자값으로는 경로를 받습니다.

    • 상대 경로, 절대 경로 모두 가능하며 대부분의 리눅스의 경우 이 경로 인자 값을 생략한다면 현재 위치(.)를 입력받은 것으로 간주

    • 유닉스의 경우 이 경로를 입력받지 않으면 명령어 실행이 안되니 유의하셔야 합니다.


  • 표현식

    • name : 해당 이름의 파일을 찾음. 해당 이름에는 정규 표현식을 활용할 수 있음

    • type : 지정된 파일 타입에 해당하는 파일 검색

    • user : 해당 유저에게 속한 파일 검색

    • empty : 빈 디렉토리 혹은 크기가 0인 파일 검색

    • delete : 검색된 파일 혹은 디렉토리 삭제

    • exec : 검색된 파일에 대해 지정된 명령 실행

    • path : 지정된 문자열 패턴에 해당하는 경로에서 검색.

    • print : 검색 결과를 출력. 검색 항목은 newline으로 구분. (기본 값)

    • print0 : 검색 결과를 출력. 검색 항목은 null로 구분.

    • size : 파일 크기를 사용하여 파일 검색.

    • mindepth : 검색을 시작할 하위 디렉토리 최소 깊이 지정.

    • maxdepth : 검색할 하위 디렉토리의 최대 깊이 지정.

    • atime : n일 이내에 액세스된 파일을 찾음.

    • ctime : n일 이내에 만들어진 파일을 찾음.

    • mtime : n일 이내에 수정된 파일을 찾음.

    • cnewer file : 해당 파일보다 최근에 수정된 파일을 찾음.



  • 파일명으로 찾기 (-name)

# 현재 디렉토리에서 test가 포함되는 파일 찾기
find . -name "*test*"

# 현재 디렉토리에서 .txt 확장자 모두 찾기
find . -name "*.txt"

# 현재 디렉토리에서 .txt 확장자 파일 검색 후 모두 삭제
find . -name "*.txt" -delete

# 현재 디렉토리에서 test로 시작되는 파일 찾기
find . -name "test*"

# 현재 디렉토리에서 test로 끝나는 파일 찾기
find . -name "*test"
  • 타입으로 찾기 (-type)

# 현재 디렉토리에서 모든 디렉토리 찾기
find . -type d

# 현재 디렉토리에서 test가 들어가는 디렉토리 찾기
find . -name "*test*" -type d

# 현재 디렉토리에서 모든 파일 찾기
find . -type f

d : 디렉토리
f : 일반적인 파일
l : 심볼릭 링크

  • 파일 크기로 찾기 (-empty, -size)
# 현재 디렉토리에서 빈 디렉토리이거나 크기가 0인 파일 검색
find . -empty

# 현재 디렉토리에서 test가 들어가는 빈 디렉토리이거나 크기가 0인 파일 검색하여 삭제
find . -name "*test*" -empty -delete

# 현재 디렉토리에서 1024byte인 파일 검색
find . -size 1024c

# 현재 디렉토리에서 1024byte보다 큰 파일 검색
find . -size +1024c

# 현재 디렉토리에서 1024byte보다 작은 파일 검색
find . -size -1024c

# 현재 디렉토리에서 1kb보다 크고 10kb보다 작은 파일 검색
find . -size +1k -size -10k

b : 블록단위
c : byte
k : kbyte
w : 2byte 워드

  • exec를 사용하여 검색한 대상에 추가 명령어를 수행

# 현재 디렉토리에 "test"가 들어가는 파일을 찾아서 상세정보 출력
find . -name "*test*" -exec ls -l {} \;

# 현재 디렉토리에 있는 파일에서 "test"가 들어가는 내용 찾기 
find . -type f -exec grep "test" {} \;

# 현재 디렉토리에 ".txt" 확장자를 찾아서 모두 삭제
find . -name "*.txt" -exec rm {} \;



locate


  • 리눅스(Linux)에서 파일을 검색하기 위해 주로 find 명령어를 사용합니다.

    • find 명령어는 다양한 옵션이 있어서 원하는 파일을 거의 완벽하게 찾아낼 수 있지만 처음부터 하나하나 검색을 수행하기 때문에 속도가 느린것이 단점입니다.
  • 단순하게 파일명으로 빠른 검색이 필요할 때는 locate 명령어를 사용하는 것이 좋습니다.


  • 설치
sudo apt-get -y install mlocate
  • 형식
sudo updatedb
locate 파일이름
  • locate 명령어가 파일 검색에서 빠른 속도를 보이는 이유는 검색DB(파일 목록 데이터베이스, mlocate.db 파일)를 미리 생성하기 때문입니다.

    • locate 명령어를 처음 사용하는 경우라면 사용하기 전에 sudo updatedb 명령어로 DB파일을 만들어야 합니다. 그 다음 locate 명령 다음에 검색하고 싶은 파일이름을 입력하면 됩니다.
  • locate 명령은 미리 만들어 놓은 DB파일에서 파일을 검색하기 때문에 최근에 삭제된 파일도 검색이 되는 문제가 발생하게 됩니다.

    • 이런 문제를 피하고 싶다면 locate 명령어를 사용하기 전에 updatedb를 실행해야 합니다.

    • 참고로 updatedb 작업은 크론(cron)에 등록되어 있어서 매일 새벽에 자동으로 실행됩니다.

크론(cron)

  • 윈도우에서는 스케줄러와 비슷하다
  • "특정 시간에 특정 작업을 해야한다."


    참고

  • 주요 옵션

    • -n: 검색할 파일의 수를 지정



kill

  • 프로세스 종료하기

  • 각 프로레스는 고유한 번호를 가지고 있고 이를 PID(process identification number)라 부른다.
  • PID는 1번부터 시작하고 프로세스가 실행되면서 하나씩 증가하여 부여되는데, 우분투에서 PID 1번은 init 프로세스가 실행되며, 2번은 kthreadd 프로세스가 실행된다.

    • init 프로세스는 나머지 모든 시스템 프로세스의 부모 프로세스
    • kthreadd 프로세스는 모든 스레드의 부모 프로세스
  • 형식

    • 15번 시그널을 프로세스에 보내 프로세스를 종료한다. (15번 시그널은 프로세스를 종료하라는 신호)
kill PID 

  • 주요 옵션

    • kill -9 PID : 9번 시그널을 프로세스에 보내 프로세스를 강제 종료한다. (9번 시그널은 강제 종료 신호)

    • pkill -x CMD : kill과 달리 PID가 아니라 프로세스의 명령 이름(CMD)로 프로세스를 찾아 종료.

      • kill과 달리 명령 이름을 찾아 종료하므로 같은 명령이 여러 개 검색될 경우 한 번에 모두 종료된다.



mount


  • 사용법

    1. 추가된 디스트 Volume 확인

      • sudo fdisk -l
    2. 파일시스템 생성

      • sudo mkfs.ext4 /dev/vdb
    3. mount 받을 디렉토리 생성

      • sudo mkdir /bluexmas_db
    4. mount 하기

      • sudo mount /dev/vdb /bluexmas_db
    5. mount 확인

      • df -h
    6. unmount 하기

      • sudo umount /bluexmas_db
    7. unmount 확인

      • df -h

[자동 mount]
1. sudo blkid - UUID 확인
2. sudo vi /etc/fstab - fstab 파일에 파티션 추가
3.

# 파티션 추가 UUID=6e0b7ac6-d17d-4829-839f-80662339cf6b /bluesanta ext4 defaults 0 0



<br/><br/>

### man


<br/>


- 로컬 시스템에서 여러 참고 문서들을 이용하여 특정 명령이나 자원들의 메뉴얼을 출력하는 영역으로 유닉스에서는 총 8개의 영역으로 되어 있으나 리눅스 커널 부분이 추가되어 총 9개의 영역으로 구성되어 있다.

- 형식

$ man [options][section] command



- 사용법

  - `[SPACE]` : 한 페이지 밑으로 내려간다

  - `[ENTER]` : 한 줄 밑으로 내려간다.

  - `[b]` : 전 페이지로 올라간다.

  - `[q]` : man 명령을 종료한다.
 
  
  
<br/>

- 메뉴얼 섹션

  ![](https://velog.velcdn.com/images%2Fcorone_hi%2Fpost%2F407d6fe1-b039-4599-841e-1335363e09a2%2Fimage.png)


<br/>

- 주요 옵션

  - `k` : 해당 키워드로 발견되는 모든 매뉴얼의 내용을 검색하여 보여준다.

  - `-f` : 해당 키워드에 대한 완벽히 일치되는 매뉴얼 페이지에 대한 정보를 보여준다.

  - `-w`  : man 명령 실행 시에 호출되는 '메뉴얼 페이지' 파일의 위치를 보여준다.(--path)

  - `-s, -S` : 특정 section을 지정할 때 사용한다. (--sections=섹션번호)

<br/><br/>


### ps


<br/>


- 프로세스 목록 보기

- 형식

ps

- 현재 셸이나 터미널에서 실행한 사용자 프로세스의 정보를 출력

  - 출력정보 PID : 프로세스 번호

  - 출력정보 TTY : 현재 터미널 번호

  - 출력정보 TIME : 해당 프로세스가 사용한 CPU 시간의 양

  - 출력정보 CMD : 프로세스가 실행 중인 명령

<br/>

- 주요 옵션

  - `ps au`   : 터미널에서 실행한 프로세스의 상세 정보 출력

    - 출력정보 USER : 사용자 계정 이름

    - 출력정보 PID : 프로세스 번호

    - 출력정보 %CPU : CPU 사용량을 퍼센트로 표시

    - 출력정보 %MEM : 물리적 메모리 사용량을 퍼센트로 표시

    - 출력정보 VSZ : 사용하고 있는 가상 메모리 크기(KB)

    - 출력정보 RSS : 사용하고 있는 물리적 메모리의 크기(KB)

    - 출력정보 TTY : 터미널 번호

    - 출력정보 STAT : 프로세스의 상태(필요하면 상태 나타내는 주요 문자의 의미 정리)

    - 출력정보 START : 프로세스 시작 시간

    - 출력정보 TIME : 해당 프로세스의 CPU 사용 시간

    - 출력정보 COMMAND : 프로세스가 실행 중인 명령

  - `ps ax | more`   : 시스템에서 실행 중인 모든 프로세스 출력(너무 많아 프로세스 목록을 제대로 확인하기 힘드므로, more 명령 함께 사용)

  - `ps aux | more`   : 시스템에서 실행 중인 모든 프로세스의 자세한 정보 출력

  - `ps -fu user`   : 특정 사용자(여기선 user)가 실행한 프로세스의 목록 확인

    - 출력정보 PPID : 부모 프로세스의 PID 번호

    - 출력정보 C : CPU 사용량(% 값) 

    - 출력정보 STIME : 프로세스의 시작 날짜나 시간

 


>[특정 프로세스 정보 검색하기]
- `ps -ef | grep 명령`  : ps명령을 통한 특정 프로세스 정보 검색. 사용 예) ps -ef | grep bash (배시 셸에 대한 정보 검색) 
- `ps -fp $(pgrep -x 명령)` : pgrep 명령을 이용해 특정 프로세스 정보 검색 (pgrep로 검색하려는 프로세스의 PID를 찾아 ps 명령으로 자세한 정보를 확인)

 

 





<br/><br/>
profile
For the sake of someone who studies computer science

0개의 댓글