리눅스 명령어 Top 10

이eun·2025년 1월 7일

1. Server 접속을 위한 SSH

SSH : Secure Shell Protocol의 약자로 네트워크 프로토콜(22) 중 하나이다. 클라이언트와 서버가 인터넷과 같은 네트워크를 통해 통신할 때, 보안을 위해서 사용하는 프로토콜이다. 보통 password 인증과 RSA 공개키 암호화 방식으로 연결한다.

접속을 위한 조건

  • port(22)와 public ip 인지를 확인. 단, 같은 네트워크 제외
  • 접속을 시도하는(내 컴퓨터) 포트와 ip가 허용되어 있는 지 시큐리티 그룹을 확인
  • ec2 인스턴스가 public subnet에 위치해 있는지 확인. 라우팅 테이블에 0.0.0.0/0 igw-xxxx인지 확인.

AWS EC2 기준

  1. 다운 받은 RSA 키를 현재 경로로 이동한다.

    mv ~/Downloads/test-EC2-key.pem .

  2. 키를 지정하여 접속 명령어를 친다.

    ssh -i test-EC2-key.pem ec2-user@13.250.109.223 -p22

만약 경고창에서 unprotected라는 게 나온다면 pem 키를 chmod 600으로 변경해주면 된다.

새로운 ssh key를 만들고 싶을 때

ssh-keygen

를 통해 public key와 private key를 받는다.
public key는 .ssh 디렉토리에 있는 authorized_keys에 있는 파일에 새로운 행에 붙여넣기를 하고 private key 경로에 똑같이 사용자명@ip주소를 입력하면 접속이 가능하게 된다.

현재 세션에 키를 붙어있게 만들기 위한 명령어

ssh-add test-EC2-key.pem

이후에

ssh ec2-user@13.250.109.223 -p22

해도 접속이 가능해진다.

2. 자신의 퍼블릭 IP 조회 명령어

curl ifconfig.co
curl ifconfig.me

3. 웹사이트가 잘동작하는 지 체크할 때 사용하는 명령어

간단하게 http 테스트가 가능한 curl
curl google.com과 curl https://google.com의 결과값은 다르다.

curl -v https://google.com

v옵션을 쓰게 되면 certificate에 대한 start date와 expire date, CNAME 등 자세한 정보를 알 수 있다.

4. 도메인의 IP를 조회하는 명령어

도메인 질의 프로세스

  • 도메인의 호스트 값을 찾는다. ex) vim /etc/host
  • host에 값이 없을 경우에 내 DNS 서버에 리졸빙하여 /etc/reslove.conf에서 DNS 서버 확인한다.
  • 거기에 도메인의 캐시가 있으면 그걸 받고 없으면 다시 라우트를 통해서 계속 나가면서 도메인 질의을 하게 된다. 단, cache는 TTL 만큼 저장한다.

nslookup google.com

5. 웹서버 혹은 DB 같은 서버 확인하는 명령어

telnet과 ping의 차이를 명확하게 알아야 한다.

ping의 경우, 서버가 살아있는지 단순 체크이며 웹서버가 살아있는지 판단하는 것은 아니다.
즉, telnet과 ping이 체크하는 프로토콜이 무엇인지를 알아야 한다.
ping은 osi 3계층안에서 동작한다.

telnet, ping

  • Telnet은 TCP 기반 서비스가 정상적으로 작동하고 있는지 확인하는 데 사용됩니다. (예: 웹 서버가 80번 포트에서 작동하는지 테스트).
  • Ping은 호스트가 네트워크에 연결되어 있는지 확인하고 지연 시간을 측정합니다.

6. 서버와 커넥션을 확인하는 명령어

특정 포트가 잘 떠있는지에 대한 명령어

tcp udp 리스닝하는게 무엇인지 확인

netstat -lntpu

어떤 포트가 커넥션이 얼만큼 established(연결) 되는지 아니면 TIME_WAT 상태인건지 조회
ex) DB 커넥션 확인

netstat -an | grep "port"

7. 특정 프로세스를 확인하는 명령어

java process id, option 등을 확인하고 싶을 때

ps -ef | grep ""
ps aux | grep ""

ps -efps aux는 둘 다 현재 실행 중인 프로세스를 표시하는 명령어입니다. 하지만 이 둘은 옵션의 형식과 출력 형식에서 차이가 있습니다.


1. 차이점 요약

항목ps -efps aux
옵션 형식UNIX 표준 옵션 (- 사용).BSD 표준 옵션 (- 없이 사용).
출력 필드프로세스 ID, PPID, UID, CMD 등 기본 필드.메모리 및 CPU 사용률, TTY 등 추가 정보 포함.
사용자 필터링모든 프로세스(시스템 프로세스 포함).사용자가 실행한 프로세스 중심으로 출력.
호환성UNIX 시스템에서 더 일반적.BSD 계열 시스템에서 더 일반적.

2. 각 명령어 설명

ps -ef

  1. UNIX 스타일 옵션:

    • -e: 모든 프로세스를 출력.
    • -f: "Full-format"으로 자세한 정보를 출력.
  2. 출력 형식:

    • 주로 UNIX 시스템에서 사용되는 필드:
      • UID: 프로세스를 실행한 사용자.
      • PID: 프로세스 ID.
      • PPID: 부모 프로세스 ID.
      • C: CPU 사용률.
      • STIME: 프로세스 시작 시간.
      • CMD: 실행된 명령어.
  3. 예시 출력:

    UID        PID  PPID  C STIME TTY          TIME CMD
    root         1     0  0 Mar15 ?        00:00:06 /sbin/init
    user      1500     1  0 10:00 ?        00:00:01 /usr/bin/python script.py

ps aux

  1. BSD 스타일 옵션:

    • a: 터미널에 연결된 모든 사용자 프로세스를 출력.
    • u: 프로세스를 실행한 사용자와 CPU/메모리 사용률 정보를 표시.
    • x: 터미널과 연결되지 않은 프로세스도 포함.
  2. 출력 형식:

    • BSD 스타일 필드:
      • USER: 프로세스를 실행한 사용자.
      • PID: 프로세스 ID.
      • %CPU: CPU 사용률.
      • %MEM: 메모리 사용률.
      • VSZ: 가상 메모리 크기.
      • RSS: 실제 메모리 크기.
      • TTY: 터미널 ID.
      • STAT: 프로세스 상태.
      • START: 프로세스 시작 시간.
      • TIME: CPU 사용 시간.
      • COMMAND: 실행된 명령어.
  3. 예시 출력:

    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.1  16380  1300 ?        Ss   Mar15   0:06 /sbin/init
    user      1500  1.2  2.3  80000 30000 ?        Sl   10:00   0:01 /usr/bin/python script.py

3. 주요 차이점

(1) 옵션 형식

  • ps -ef: UNIX 스타일로, 옵션 앞에 -를 붙입니다.
  • ps aux: BSD 스타일로, 옵션 앞에 -를 붙이지 않습니다.

(2) 출력 필드

  • ps -ef:
    • 시스템 프로세스 정보를 더 자세히 볼 수 있음.
    • CPU와 메모리 사용률 대신 프로세스 간의 관계(PPID 등)를 더 명확히 표시.
  • ps aux:
    • 메모리(RSS)와 CPU 사용률(%CPU)를 포함해 시스템 리소스 사용 상태를 더 잘 보여줌.

(3) 사용자 필터링

  • ps -ef: 기본적으로 모든 프로세스 출력(시스템 프로세스 포함).
  • ps aux: 터미널과 관계없는 백그라운드 프로세스도 포함하여, 사용자와 관련된 작업 중심으로 출력.

4. 언제 사용해야 하나?

목적추천 명령어
시스템 프로세스 상태 확인ps -ef
CPU/메모리 사용률 확인ps aux
프로세스 간 관계(PPID) 분석ps -ef
사용자별 자원 사용량 확인ps aux

5. 결론

  • ps -efps aux는 서로 다른 표준에 기반한 명령어이며, 사용자는 상황에 따라 적합한 명령어를 선택할 수 있습니다.
  • 시스템 관리를 위해서는 CPU/메모리 리소스 사용률이 중요한 경우 ps aux가 더 적합하고, 프로세스 관계를 파악해야 하는 경우 ps -ef를 사용하는 것이 더 유용합니다.

8. cpu, memory, disk 등 시스템 정보를 확인하는 명령어

시스템정보(systeminfo)를 확인

  • top : 현재 프로세스에 대한 cpu / memory 사용량 안내
  • sar : sar 1 하면 cpu가 1초마다 조회 어떻게 동작하는 지 확인
  • free : free -m 하면 meminfo(메모리)의 정보를 가져옴, 현재 사용량과 사용 가능한 buffer cache가 어느 정도인지 알려줌
  • df : 현재 디스크의 크기 상태나 사용 가능한 크기를 확인. df -h 하면 사용자 친화적으로 보기 좋게 볼 수 있음
  • iostat : input/output 상태를 알 수 있는 모니터링 도구. cpu와 디스크의 I/O 성능을 확인함
  • /proc/meminfo : 시스템 메모리 상태를 확인할 수 있는 가상 파일. 현재 시스템의 RAM 및 swap 사용량과 같은 메모리 관련 정보를 제공함.

사용법

cat /proc/meminfo

출력 내용

  • /proc/meminfo는 메모리 사용 상태를 키-값 쌍으로 나열하며, 주요 항목은 다음과 같습니다.
  1. 기본 메모리 정보

    • MemTotal: 총 물리적 메모리 크기.
    • MemFree: 현재 사용 가능한 물리적 메모리.
    • Buffers: 디스크 I/O를 위해 버퍼링된 메모리 양.
    • Cached: 파일 시스템 캐시에 사용된 메모리 양.
  2. 사용 가능한 메모리

    • SwapTotal: 총 스왑 메모리 크기.
    • SwapFree: 사용 가능한 스왑 메모리.
    • Available: 현재 프로세스에서 사용할 수 있는 메모리.
  3. 기타 항목

    • Active: 자주 사용되는 메모리 페이지.
    • Inactive: 자주 사용되지 않는 메모리 페이지.
    • Dirty: 쓰기 작업이 필요한 메모리.

예시

cat /proc/meminfo | grep Mem
  • 메모리 관련 필드만 출력.

주요 사용 사례

  • 시스템 메모리 부족 여부 확인.
  • 스왑 사용량 분석 및 최적화.
  • 버퍼와 캐시의 메모리 사용 상태 확인.

주요 차이점

기능iostat/proc/meminfo
목적CPU 및 디스크 I/O 성능 분석.시스템 메모리 상태 확인.
주요 대상CPU 사용률, 디스크 입출력 부하.물리적 메모리(RAM) 및 스왑(Swap) 사용량.
데이터 범위디스크 및 CPU 작업에 집중.메모리와 관련된 세부 정보 제공.
포맷CLI 명령어를 통해 가공된 출력 제공.텍스트 기반의 키-값 쌍 형태로 제공.
사용 사례입출력 병목 문제, CPU 부하 분석.메모리 부족, 캐시 및 버퍼 확인.
  • iostat:
    • 디스크 성능 문제를 조사하거나 CPU가 과도하게 대기 상태에 있는 경우 사용.
  • /proc/meminfo:
    • 메모리 누수를 확인하거나, 시스템 메모리 부족 현상을 분석할 때 사용.

이 두 도구를 함께 활용하면 시스템 자원의 전반적인 상태를 보다 명확히 이해할 수 있습니다.

9. 리눅스의 서비스를 관리하는 systemd

systemd는 리눅스 시스템 및 서비스 관리자로 시스템 부팅 및 관리 작업을 효율적으로 처리하기 위해 설계된 도구이다. 기존의 sysVinit 및 upstart 시스템을 대체하며, 병렬화와 모듈성을 중심으로 설계되었다.

  • service : ex) service tomcat start 서비스를 키고 끄거나 상태를 확인.
  • systemctl : systemd를 제어하기 위한 명령어 예) 서비스 시작/중지, 상태 확인
  • init.d : UNIX 시스템의 초기화(init) 시스템으로부터 유래.
    리눅스에서 시스템 부팅 시 실행되는 스크립트(/etc/init.d/)를 기반으로 작동.
  • upstart : Canonical이 개발한 이벤트 기반 init 시스템.
    주로 Ubuntu 배포판에서 사용되었으며, SysV init의 단점을 개선하기 위해 설계.

비교: SysVinit vs Upstart vs Systemd

기능SysVinitUpstartSystemd
병렬 실행불가능부분 가능완전 가능
의존성 관리제한적제한적세부적 의존성 관리 가능
로깅 통합없음없음journald 제공
타이머 지원없음없음지원
복잡도낮음중간높음

10. 리눅스 파일 권한을 관리하는 chmod, chown

참고 : https://youtu.be/u9RukvKZJZM?si=CLZToqOx-oC0brgG

0개의 댓글