Zero to Hero
Published 2021. 2. 20. 13:37
Linux 02 Programming

리눅스 프로세스 상태 전이 & 코드

 

리눅스 프로세스2

이번 글에서는 이전에 리눅스 프로세스에 관한 설명에 추가 내용을 알아보도록 하겠습니다. 이전 리눅스 프로세스 관련 내용은 아래에 링크를 참고 합니다. 2017/08/29 - [서버운영/Linux] - 리눅스

gsk121.tistory.com

 

 

프로세스 상태 전이 > 도리의 디지털라이프

I. 프로세스 상태 전이도 가. 프로세스 상태 전이도 멀티 프로세스 시스템 사용 시 프로세스 생성 ~ 종료까지 성능 최적화를 위한 프로세스 제어 기법 나. 프로세스 상태 상태 설명 생성 (Created)

blog.skby.net

cd proc/sys/kernel
# 이 시스템에서 동시에 존재할 수 있는 프로세스의 최대 갯수
# 좀비 프로세스가 많아져서 pid_max에 가까워지면 위험함
# 유일한 해결법은 셧다운 후 리부트인데, 서버 기준에서 상당히 위험한 행동임
# 좀비 프로세스는 그 자체로는 아무런 문제가 없는데 프로세스 갯수는 차지하니깐...
# 그래서 좀비 프로세스가 보이면 무조건 빠르게 해결해야한다
# 그래서 좀비 프로세스를 만든 부모 프로세스를 체크해서 문제를 해결해야한다.
cat pid_max

# process 보기 옵션
ps
ps -f
ps -l
# PPID 부모 프로세스 아이디
# TTY 실행되고 있는 터미널 주소
# SZ 사용하고 있는 페이지 갯수(1 페이지 당 4KB)

ps -ef | wc -l
pstree
pstree -p | more
tree -a | more

pgrep

kill 프로세스ID
pkill 프로세스이름

# 터미널 2개 띄우고
ps -e | grep sleep
# ? 는 커널이 만든 프로세스여서 제어 불가
# 터미널 창 하나 sleep 해놓은 상태에서
kill PID
# 이렇게 하면 작동함

pstree -p | grep PID번호
# 이렇게 하면 부모 프로세스 즉, 해당 명령을 실행한 프로세스인 shell이 보임

kill shellPID번호
# 이렇게 하면 죽인 쉘에서 만든 자식은 안죽음(?)

kill -9 shellPID번호
# 이렇게 하면 확실히 죽임
# 이렇게 하면 데몬 프로세스까지 죽임
kill -2 shellPID번호
# 이건 인터럽트
^C 를 다른 터미널에선 terminate, interrupt 로 쓰기도 함

# 안전하게 프로세스 죽이기
pgrep sleep
kill $(pgrep sleep)

# 주기적으로 프로세스 상태를 업데이트해서 자세한 요약정보를 상단에 출력함
# 디폴트는 CPU를 많이 사용하는 순위로 보여줌, 3초 간격 업데이트
top

포그라운드, 백그라운드

# 사용자가 입력하는 일반적인 명령어.
# 터미널 앞쪽에서 도는 명령어.
# & 명령어가 없는 명렁어를 의미함

# 백그라운드 작업
# 이렇게 쓰면 바로 다음 터미널 명령어를 입력해서 결과를 볼 수 있다
sleep 100 & 

# 현재 터미널에서 실행되는 백그라운드 작업 보기
jobs

# ctrl + z 하면 현재 프로세스가 백그라운드로 떨어지고
# 동일한 명령어를 실행하면 충돌 에러 메시지가 뜨곤 함
fg
# 포그라운드로 옮겨서 정상종료 할 것
# 혹은 swp 파일 등 job 파일을 삭제 후 재실행할것

at, crontab 명령

 

리눅스 크론탭(Linux Crontab) 사용법 :: JDM's Blog

* 이 포스팅은 네이버 블로그에서 작성(2013.04.01)한 내용을 옮겨온 것입니다. 오늘은 리눅스 크론탭에 대해 알아볼까 합니다. 음, 윈도우에서는 스케줄러와 비슷하다고 보면 되겠네요. "특정 시간

jdm.kr

# 정해진 시간에 항상 실행하는 명령어를 설정한다
at 17:50
poweroff
# ctrl + D
# 현재 등록된 작업을 볼 수 있음, 1회성임.
at -l

# 크론 테이블 실행 명령어 내용 보기
crontab -e
# vim이 열림
# 30분, 11시 월요일부터 금요일까지 home디렉토리의 bash.sh 명령어를 실행해라
# 근데 실행하는 명령어가 어떤 파일이고, 그것의 실행권한이 없으면 당연히 실행이 안될 것.
30 11 * * 1-5 ~/backup.sh
# 작업 목록 보기
crontab -l

파일 시스템

운영체제마다 나름대로 파일을 관리하는 시스템을 가지고 있다.

윈도는 NTFS라는 파일 시스템을 기본적으로 사용한다.

USB는 FAT를 사용한다.

리눅스는 ext를 사용한다.

현재 ext4와 XFS가 가장 많이 사용되는 파일 시스템이다.

리눅스는 다른 os의 파일 시스템 (ms-dos, fat, ntfs, sysv 등)도 호환을 한다.

swap, proc 등 물리적인 디스크에 구성된 것이 아닌 가상의 파일 시스템도 있다. 특수한 목적으로 사용되어서 대상이 메모리인 그런 파일 시스템.

마운트 포인트

/etc/fstab 파일의 기능

파일 시스템의 마운트 설정 정보를 가지고 있음

이 파일에 오류가 있으면 시스템 부팅이 중지가 됨

# 디스크 사용량 확인
# 단위가 좀 지저분함
df
# -h 붙이면 보기 좋게 나옴
# -T 붙이면 파일 시스템 종류도 같이 나옴

# 특정 디렉터리나 사용자별 디스크 사용량 확인하기
# -s 붙이면 합계로 보여줌
du
du -s ~user1
du -sh ~

# log 처럼 계속 늘어나는 파일 디렉토리는 home 디렉토리와 분리해서
# 관리해주는 게 일반적이다.
cd /var/log

SELinux

강력한 보안 시스템, 너무 강력해서 불편한 게 많은데 서버 같은 데서 씀, 안전해야 하니깐.

데몬은 크게 독립형과 슈퍼 데몬으로 나뉜다.

systemd가 만드는 데몬 프로세스는 독립형 데몬이다.

systemctl status

SSH와 텔넷의 차이

텔넷은 패킷을 보면 데이터가 그대로 보임

SSH는 암호화가 되어있다.

ip addr show
ip a
# putty로 inet 주소(ipv4)를 입력해서 접속하면
# 리눅스 쉘로 접속할 수 있음
# 현업에서 가장 많이 하는 패턴.
# ssh 방식으로 접속하기. 단 리눅스 서버가 ssh 서비스가 활성화되어있어야 함

systemctl stop sshd
systemctl status sshd
systemctl start sshd
# 부팅할때 활성화할건지말건지
systemctl enable sshd
systemctl disable sshd

dnf

dnf repolist
ls /etc/yum.repos.d/
dnf list
dnf list openssh
dnf list wireshark
sudo dnf install wireshark
dnf info openssh
dnf search apache

sudo dnf install httpd
rpm -ql httpd

# 실행파일들이 있는 경로들
# 데몬파일은 끝에 d가 붙곤함, httpd
/usr/sbin/httpd
/usr/sbin/rotatelogs
/usr/sbin/suexec

systemctl start httpd
systemctl stop httpd
systemctl status httpd

#localhost
cat /etc/hosts

파일 아카이브

tar
파일과 디렉터리를 묶어 하나의 아카이브 파일을 생성한다(windows의 winzip)

tar cvzf mybackup.tar.gz src web_project/ sample mylist letter
tar tvzf mybackup.tar.gz
tar xvzf mybackup.tar.gz

su -
cd /var/log/httpd
ls
# access_log error_log

tar cvzf /tmp/weblog_${filename}.tar.gz /var/log/httpd

 

사용자 추가

useradd hkd
id hkd
grep ^hkd /etc/passwd
grep ^hkd /etc/shadow

디렉토리 권한에 쓰기 줘야 다른 사용자가 파일 쓰기 가능
디렉토리 생성자, 파일 생성자를 보는 법은 ls -l 쓰면 볼 수 있다.
sudo chmod 777 디렉토리이름/

이젠 원격이나 혹은 다른 사용자(이 디렉토리를 만들지 않은 사용자)가 
이 안에서 파일을 쓸 수가 있음

디렉토리의 쓰기 권한이 필요한 경우엔 sticky 권한을 주어서
본인이 만든 파일 이외에 다른 파일은 삭제를 못 하게 막아야 한다.
sudo chmod 1777 디렉토리이름/

리눅스 시스템 관리자 계정은 root, UID는 0번, /root 가 홈 디렉토리다
일반 사용자 계정은 1000번 이상이고, 홈 디렉토리는 /home/사용자이름 이 기본이다.

UID, GID, 홈 디렉토리, 로그인 쉘 등 사용자의 정보가 저장되는 파일은
etc/passwd 에 있다

비밀번호는
etc/shadow 에 있다.

사용자 그룹 정보는
etc/group 에 있다.

etc/sudoers

특정 사용자에게 특정 명령어를 sudo로 실행할 수 있는 권한을 설정하는 방법이 있다.
이렇게 하면 일반 사용자가 관리자 암호를 알려주지 않아도 sudo가 가능하다

root ALL(=ALL) ALL

user2를 콘솔 안에서 sbin/useradd, usermod 명령어를 허용하겠습니다.
user2 localhost=/sbin/useradd, /sbin/usermod

#sudoer를 위한 특별한 편집기
visudo

일반적으로 관리자 암호는 관리자 본인만 알고 있고, 권한을 위임해서 sudo 작업을 일부 허용하는 식으로 운영한다.

네트워크 설정

ip addr show
ip route show
ip a

# 관리자 모드에서 네트워크 모드를 변경할 때 GUI를 이용할 수 있는 방법
nmtui
# dns 서버 잘 설정되었는지 체크하기
nsloopup

# hostname 관련 명령어
hostname
hostnamectl

# ip ping, 연결이 되어있는지를 체크하는 방법
# ping을 공격으로도 사용하는 경우가 있어서 웬만한 웹 서버는 ping에 대한 요청을 응답하지 않는다.

ping 자신의 아이피
ping -c 3 자신의 아이피

# 현재 시스템에서 어떤 네트워크 서비스가 활성화되어있는지 확인하기
# 안 쓰는 서비슨데 포트를 잡고 쓰고있으면 바로 죽여줘야함
netstat
netstat -at
netstat -au
netstat -aup

웹 서버 올려보기

systemctl status httpd
systemctl start httpd
systemctl enable httpd

firewall-cmd --list-all
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
sudo firewall-cmd --list-all

cd conf
ls
vi httpd.conf
cd /var/www/html
cp /home/web_project/index.html .

이렇게 해놓고 리눅스 머신의 ip주소로 접속해보면... index.html이 뜬다

'Programming' 카테고리의 다른 글

M1 맥북에서 Pandas 사용하기 with Anaconda3  (0) 2021.03.29
pandas csv 읽기/쓰기 인코딩 정리(read_csv, to_csv)  (0) 2021.03.29
Linux 01  (0) 2021.02.20
Vue.js 01  (0) 2021.02.14
Spring 05  (0) 2021.02.14
profile

Zero to Hero

@Doljae

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!