프로그래밍/devops

linux 명령어 정리

브래드 킴 2022. 11. 30. 17:30
728x90

평소 자주 까먹거나, 뭔가 개념적으로 헤깔렸던 리눅스 주요 명령어를 정리해보고자 한다. 헤깔렸거나 이해가 부족했던 명령어와 옵션에 대해서 주로 다뤄보고자 한다. (계속해서 업데이트할 예정)

 

 

sudo

현재 계정에서 root 권한을 이용하여 명령어를 실행

 

예를들어)

sudo apt-get update

입력 후 현재 사용자의 비밀번호를 입력

 

 

su

로그아웃을 하지 않고 다른 계정으로 전환하는 명령어 (전환하고자 하는 계정의 비밀번호 입력)

 

root 사용자로 변경할때 사용. (root 비밀번호 입력해야 함에 유의)

su
su -

 

 

 

su와 su-의 차이

su 명령어는 현재 계정의 환경변수들을 유지한 채, 대상 계정으로 전환한다. 반면에 su - 명령어는 다른 사용자의 계정으로 전환하고 환경변수까지 그 계정의 상태로 완전히 전환.(사용자의 홈디렉터리도 변경된다.)

 

sudo su -

현재 사용자의 비밀번호 입력하여 root권한을 빌려 root사용자로 완전히 전환

 

ssh

원격서버와의 보안연결시 사용되는 프로그램이자, 명령어

 

일반적인 원격서버 연결방법

ssh -p 포트번호 사용자명@호스트ip

 

엔터 후 비밀번호

 

aws ec2 연결

ssh -i pemkey파일명 ec2-user@awsEC2퍼블릭IPv4주소

 

mysql 원격접속(AWS RDS)

mysql -h RDS엔드포인트 -u 계정명 -p

 엔터 후 비밀번호 입력

 

scp

SSH 프로토콜 기반의 원격지로의 파일전송(복사) 수단

scp /로컬경로/전송파일 계정명@전송대상서버IP:/전송대상서버폴더경로/

aws의 경우 -i 옵션으로 pemkey를 가지고 전송하면 원격지로 전송이 가능

 

grep

특정한 문자열을 찾을때 사용한다. 일반적으로  다른 명령어와 혼합하여 사용하는데, 파이프라인(|)을 통해 입력으로 전달된 결과 내에서 특정한 문자열을 찾곤한다.

 

예를들어,

ps -ef | grep -i "문자열"

모든 프로세스 목록(ps -ef)을 파이프라인(|)을 통해 입력값으로 넘겨받은뒤, 그 중에서 원하는 문자열을 대소문자 구분없이(-i옵션) 찾는다.

 

 

 

find . -name "*" 2> /dev/null | xargs grep -n “nginx.conf” 2> /dev/null

위의 경우는 find 명령어를 통해 파일을 찾아, 해당 파일에서 grep을 통해 원하는 문자열을 출력하는 것

 

1)find 뒤에 . 을 통해 현재 디렉토리부터 그 하위폴더까지 찾는다.

2)-name옵션을 통해 확장자나 파일명에 제한을 둘 수 있다.

3)해당 검색 결과 중에 권한이 없는 것은 2>/dev/null을 통해 제외.

4)|을 통해 그 다음 명령어로 전달

5)xargs는 입력받은 파일을 한줄씩 읽는것을 의미하고 한줄씩 읽어 grep을 통해 원하는 문자열을 찾아 줄번호(-n)까지 출력을 한다.

 

 

로그파일내에서 원하는 문자열을 찾는명령어

grep -i "원하는문자열" 로그파일명

 

 

find

특정 Directory에서 원하는 파일을 찾을 수 있는 명령어

 

find -name 옵션

위 grep명령 예시 참고

*.txt *.java 등 확장자 명시 가능

 

find -type 옵션

-type f, -type d 을 통해 파일, 디렉토리 등을 명시

 

find -maxdepth

디렉토리 깊이 설정

예를들어

find . -maxdepth 1

디렉토리 깊이 1은 현재 디렉토리를 의미하고 현재 디렉토리에서만 검색한다는 뜻이다.

 

find 특정조건 -exec 특정명령어 {} \;

\;는 exec와 한 쌍으로 exec 옵션의 끝을 의미하고 그 사이에 명령어를 삽입한다. exec는 그 명령어를 실행한다는것을 의미.

{}에는 보통 find에서 특정조건을 가지고 찾아온 결과 대상이 담기고, 해당 대상을 가지고 특정명령어를 수행한다.

 

예를 들어,

find . -maxdepth 1 -name "*.txt" -exec echo {} \;

위의 명령어는 현재 폴더에 txt파일을 찾아 {}에 담고, 해당 목록을 echo로 출력한다는 의미

 

 

find . -maxdepth 1 -name "*.txt" -exec cp {} ./testFolder/  \;

위의 명령어는 현재 폴더의 txt파일을 모두 찾아 testFolder로 복사한다는 의미

 

ps

운영체제상에 존재하는 프로세스의 상태를 확인할 수 있는 명령어

 

ps -ef와 ps aux

ps -ef

ps -ef는 프로세스의 식별 정보 위주 조회하는 명령어로서 아래와 조회 결과가 출력

UID 프로세스 실행유저
PID 프로세스 ID
PPID 부모 PID
C CPU사용량
STIME Start Time
TTY 프로세스제어수단(tty : 콘솔, pts : 원격)
TIME 프로세스에 사용된 CPU 시간
CMD 실행명령어

 

 

프로세스의 상태 정보 위주 조회

ps aux

위의 명령어는 주로,  USER, PID, CPU, MEM, VSZ(가상메모리), RSS(non-swapped memory) 등의 정보가 조회된다.

 

 

tail + 파일명

옵션없이 사용할 경우 파일의 마지막줄부터 마지막에서 10번째 줄까지 출력

 

tail 주요 옵션

-f : 파일의 업데이트 내용을 실시간으로 출력

-n : 지정한 라인수까지 출력 명시 ( 마지막줄부터 n까지)

 

 

실시간 프로세스 로그를 출력

tail -f /proc/<pid>/fd/1

위의 명령어는 (보통의 경우, proc 디렉토리의 경우 권한 문제로 인해 일반user로는 access denied 날 것임에 유의)

 

 

df와 du

서버 디스크 자원 현황파악을 하기 위해 사용 

 

df

리눅스의 논리적 공간의 디스크 사용량 확인

df -hT

 

-h 옵션의 의미는 메가(M), 기가(G) 단위로 보기 좋게 출력, T옵션의 의미는 각 볼륨의 타입까지 출력하는 것을 의미

 

du

특정 디렉토리를 기준으로 디스크 사용량을 확인

du -sh *

 

-h의 경우는 보기 좋게, -s옵션은 용량 합을 출력하는 것이고,  * 은 현재 경로의 하위디렉토리들의 디스크 사용량을 표시한다.

 

용량순으로 오름차순 정렬

du -sh * | sort -h

 

 

 

netstat

네트워크 연결상태 확인 명령어 

 

 

모든 소켓 상태 확인

netstat -a

 

 

모든 소켓 상태를 확인 하되, host명 대신 ip주소로(-n 옵션)

netstat -an

 

 

모든 소켓 상태를 확인하되, 포트상태까지 출력

netstat -anp

 

 

조회된 소켓상태 정보중에서 특정포트 문자열을 가진 내용 출력

netstat -anp | grep 특정포트

 

 

특정상태값을 가진 정보를 추리는 명령어

netstat -an | grep 상태값

 

 

 

netstat의 주요 상태값

CLOSED 연결이 종료
ESTABLISHED 세션 연결이 성립되어 통신이 이루어지고 있는 상태
LISTEN 서버의 데몬이 클라이언트의 접속 요청을 기다리고 있는 상태
SYN_SENT 클라이언트가 서버에게 연결을 요청한 상태 (클라이언트의 상태)
SYN_RECEIVED 서버가 응답하였지만, 아직 클라이언트로부터 ACK를 받지 못한 상태(서버의 상태)

 

728x90