320x100

서버엔지니어(주로 리눅스.bash, python ⇒ 세팅,운영,문제해결,관리) vs 서버 개발자(주로 Java, Python 코딩)

리눅스에서 익혀야할 기초

  1. 기본 명령어 → 파일, 폴더, 편집, 다운로드, 설치 …
    1. 제어 명령어 → nginx, tomcat, mysql, postgresql, docker, …
    2. 조회 명령어 → 모니터링, 추적, 상태 확인
  2. 리눅스 구조 → cpu, ram, disk, net 관리 매커니즘
    1. 장기적으로 공부해야함 → 문제해결능력 기르는게 핵심
    2. Depth 단계별 학습해야함. 내 레벨은 1인데 레벨 10 지식은 혼란만 줌
  3. 리눅스 역할 → App 관리 / HW 관리(CPU, RAM, DISK, NET)
  4. 리눅스 란 ? → 시스템 이벤트 핸들러 이다!!
  5. mysql (유저) → 디스크 쓸거야!! → 어덯게 리눅스에게 요청 ?
    1. 시스템 콜(open, read, write)
  6. Core:
    1. PM : 프로세스 관리
    2. MM : 메모리 관리 → 가상메모리 매커니즘을 사용
    3. 시스템이벤트(인터럽트 예외) → 핸들링 !!
      1. Entry 진입점 : 커널함수가 호출되는 지점
  7. I/O :
    1. 네트워크 : L4 : TCP / L3 : IP / L2 : MAC
      1. nmap : 특정 서버를 조회하여 포트 등을 확인할 수 있음
    2. 디스크 : VFS(virtual file sys) / FS ⇒ submit_bio ⇒ Block
    3. 디바이스 드라이버
  8. 파일시스템 이란 ?
    1. 물리 디스크 블록을 어떻게 read/write할지 전략, 규칙
    2. ext4, xfs, btrfs, f2fs, …
    3. 디바이스 드라이버: 네트워크, PCI-e, 블루투스
  9. 기타 :
    1. 보안, 도구, 사운드 …
  10. 리눅스의 실체
    1. C코드 → 10만개 함수
    2. 300~400개 함수 → 유저호출가능 → 시스템콜함수(open, read, write)
    3. 컴파일결과 → 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)

  1. 내 계정확인 whoami
  2. 파일의 권한 → owner 인 경우 / group / other 중 내가 어디에 속해 있는지 찾는다.

getfacl /var/log/messages

messages의 권한 설정을 확인하고 내 계정과 비교

sudo chmod o+r /var/log/messages

getfacl /var/log/messages

cat /var/log/messages

300x250

+ Recent posts