서버엔지니어(주로 리눅스.bash, python ⇒ 세팅,운영,문제해결,관리) vs 서버 개발자(주로 Java, Python 코딩)
리눅스에서 익혀야할 기초
- 기본 명령어 → 파일, 폴더, 편집, 다운로드, 설치 …
- 제어 명령어 → nginx, tomcat, mysql, postgresql, docker, …
- 조회 명령어 → 모니터링, 추적, 상태 확인
- 리눅스 구조 → cpu, ram, disk, net 관리 매커니즘
- 장기적으로 공부해야함 → 문제해결능력 기르는게 핵심
- Depth 단계별 학습해야함. 내 레벨은 1인데 레벨 10 지식은 혼란만 줌
- 리눅스 역할 → App 관리 / HW 관리(CPU, RAM, DISK, NET)
- 리눅스 란 ? → 시스템 이벤트 핸들러 이다!!
- mysql (유저) → 디스크 쓸거야!! → 어덯게 리눅스에게 요청 ?
- 시스템 콜(open, read, write)
- Core:
- PM : 프로세스 관리
- MM : 메모리 관리 → 가상메모리 매커니즘을 사용
- 시스템이벤트(인터럽트 예외) → 핸들링 !!
- Entry 진입점 : 커널함수가 호출되는 지점
- I/O :
- 네트워크 : L4 : TCP / L3 : IP / L2 : MAC
- nmap : 특정 서버를 조회하여 포트 등을 확인할 수 있음
- 디스크 : VFS(virtual file sys) / FS ⇒ submit_bio ⇒ Block
- 디바이스 드라이버
- 네트워크 : L4 : TCP / L3 : IP / L2 : MAC
- 파일시스템 이란 ?
- 물리 디스크 블록을 어떻게 read/write할지 전략, 규칙
- ext4, xfs, btrfs, f2fs, …
- 디바이스 드라이버: 네트워크, PCI-e, 블루투스
- 기타 :
- 보안, 도구, 사운드 …
- 리눅스의 실체
- C코드 → 10만개 함수
- 300~400개 함수 → 유저호출가능 → 시스템콜함수(open, read, write)
- 컴파일결과 → vmlinux (virtual memory) → vmlinuz
GUI (Graphic User Interface)
- 장점: 초보 유저가 사용하기 쉽다.
- 단점: 느리다, 자원소모가 크다, 자동화가 불편하다(작업능률)
CLI (Command Line Interface)
- 장점: 빠르다, 자원소모가 적다,자동화가 좋다(세부적이고 다양한 기능활용가능)
- 단점: 명령어 숙지가 필요, 사용초기 진입장벽
리눅스 실습 기초 명령어
whatis cp 한줄로 명령이 뭔지 알래
man cp cp에 대해 알아보고 싶어
/r 내가 찾고 싶은 단어를 검색
n 스크롤 아래로
shift + n 스크롤 위로
파일의 메타정보 → inode 아이노드
물리 디스크 블록 → 슈퍼블록, 아이노드블록, 데이터블록
Access: 2024-08-22 04:26:35.685876192 +0000 (read 했을때) Modify: 2024-08-22 04:26:13.831633909 +0000 (내용이 변경되었을때) Change: 2024-08-22 04:26:46.810999529 +0000 (권한만 변경됌)
어떤 특정 실행파일이 어떤 라이브러리를 사용하는지 알아내는 명령어
ldd /bin/ls
stmbolic 링크를 사용하면 원본파일만 교체를 하면 편하다.
프로세스가 오픈 할 수 있는 파일의 개수
task_struct
→ fd [0] = stdin → tty →터미널,콘소리 입출력환경
[1] = stdout → tty
[2] = stderr → tty
read(0,….) → scanf
write(1, …) → printf
write(2, …) → 에러메시지 출력시
2>/dev/null
find / -name "aaa” 입력
에러가 송출됌
find / -name "aaa" 2>/dev/null 입력
[2] = stderr → tty /dev/null (갈아끼워져서 에러가 생략)
그냥 묶기만 함 tar
압축함 - gz
/ 폴더가 최상위 폴더이고 run 폴더는 / 폴더의 자식폴더인데
자식폴더인 var 폴더나 usr 폴더는 /dev/vda1 디스크에 귀속되는데 왜 자식 폴더인 run은 ramdisk 에만 적용되는가?
캐시 : 미리 읽어 놓은 데이터 - 지워도 문제가없다
/usr → apt,dnf,yum 패키지 관리자 → 설치 기본경로
/etc → 설정파일
/run → 램디스크에 위치 → runtime 임시적으로 저장하는 파일 (mysql.sock, docker.sock)
No such file or directory : mysqld.sock → 껏다 키면 재생성됌
/mnt
/media → 새로운 디스크 장착(mount) 전용 폴더
/proc
/sys
/dev → 특수폴더이다 → 물리적으로 커널 메모리(변수,함수)에 장착된다.
VFS
/usr/bin 패키지관리자가 직접 관리 (배포판에 따라 달라질 수 있는 곳)
/usr/sbin
/usr/local → 소스코드 받아서 컴파일 해서 설치할때 쓰는 경로
/usr/local/sbin
/bin → 기초 명령어 ls, mv
/sbin
df -h / → disk 용량 확
ps -ef | wc -l 명령은 리눅스 또는 유닉스 시스템에서 현재 실행 중인 프로세스의 수를 계산
/usr/bin 폴더랑 /bin 폴더안에있는 모든 바이너리파일을 찾아서 ldd 명령어를 입력하면 설치된 모든 실행파일들이 사용하는 라이브러리 목록이 나온다. 중복되는걸 카운트해서 랭킹을 세우고 가장많이 쓰는 라이브러리 top 10을 찾을 수 있다.
root 계정에서 빠져나오기
sudo yum install -y vim
vim hello.txt
I —— insert
ESC —— 삽입 모드에서 나감
:q! —- 밖으로 나감
ctrl + z ——- stop
jobs —- 내가 한짓 확인
fg —— 다시 복구
내가 사용하고 있는 쉘
ps -ef | grep $$
“>” 덮어쓰기
“>>” 엎어 올리기
반복문으로 ls 불러오기
touch new.txt 임의의 텍스트파일 생성
locate new.txt (new.txt가 어디있는지 확인)
→ updatedb 를 해야 위치를 찾을 수 있다.
find ./ -name test.txt → find 명령어로는 바로 찾는다.
type d와 type f는 리눅스 또는 유닉스 시스템에서 파일 또는 디렉토리의 유형을 확인하는 명령어
대문자와 소문자 구분을 하기 때문에 구분안하고 모든 것을 뽑고 싶으면 -i 추가
-r = recursive
그냥 error 적는 것 보다 err 적으면 범위가 더 넓게 다 나옴
err = Errror + error
sudo yum install the_silver_searcher
cd /var/log
sudo ag err
ag err는 "The Silver Searcher"라는 텍스트 검색 도구를 사용하여 "err"라는 문자열을 포함하는 파일을 검색하는 명령입니다.
현재 리눅스에서 몇개의 프로세스가 구동중인지
ps -ef | wc -l
ps -ef: 현재 시스템에서 실행 중인 모든 프로세스를 나열합니다. -e: 모든 프로세스를 표시합니다. -f: 프로세스의 전체 형식을 보여줍니다.
ps -ef | head -5 —— 출력결과의 최상단부터 5라인을 필터링해 본다.
ps -ef | tail -5 —— 마지막 5라인 확인
터미널1 : sudo tail -f /var/log/yum.log
터미널2: sudo yum install -y httpd
이렇게 돌릴 경우 터미널1에서 이벤트가 나오는가 ?
터미널1 업데이트가 되는 것을 확인할 수 있음
ls -l / | awk -F " " '{print $2}’
세로줄 두번쨰칸을 뽑겠다.
root 가 구분자 역할을 해서 기준으로 3
sort — 문자열로 구분
sort -n (number) 숫자로 구분
sort -r (reverse) 거꾸로
du 를 통해서
human readable 하게
권한
읽기 (r: read)
쓰기(w: write)
실행(x: execute)
- 내 계정확인 whoami
- 파일의 권한 → owner 인 경우 / group / other 중 내가 어디에 속해 있는지 찾는다.
getfacl /var/log/messages
messages의 권한 설정을 확인하고 내 계정과 비교
sudo chmod o+r /var/log/messages
getfacl /var/log/messages
cat /var/log/messages