평소 자주 까먹거나, 뭔가 개념적으로 헤깔렸던 리눅스 주요 명령어를 정리해보고자 한다. 헤깔렸거나 이해가 부족했던 명령어와 옵션에 대해서 주로 다뤄보고자 한다. (계속해서 업데이트할 예정)
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를 받지 못한 상태(서버의 상태) |
'프로그래밍 > devops' 카테고리의 다른 글
리눅스 - 데몬(서비스), 프로세스 차이 (feat.systemd) (1) | 2022.12.22 |
---|---|
리눅스 chown, chmod (0) | 2022.12.19 |
2022 현재 리눅스 배포판 점유율 현황 (0) | 2022.12.19 |
DB,서버 타임존 일괄 UTC 세팅 후 client에서 KST 출력 (0) | 2022.12.09 |
개발팀 slack봇 알림 활용 총정리 (0) | 2022.07.01 |