본문 바로가기

OS/Linux Server30

[Shell Programming] 오래된 로그 삭제 명령행 인자 2개 전달 1) Log 경로 2) 1,0 //1:삭제, 0:삭제 안함 출력 출력 ( Command : {스크립트 파일명}.sh {경로} {0 or 1} ) hostname df -h // 파일시스템 용량. 오래된 파일 순으로 해당 디렉토리 파일들. 삭제 대상 리스트 출력 (1일 지난 파일들). #!/bin/bash count=$(find $1 -type f -mtime +1 | wc -l) hostname -f echo -e "\nExecute the command 'df -h' \n" df -h echo -e "\nSort oldest files first\n" ls $1 --time-style="+%Y-%m-%d %H:%M:%S" -altr | grep ^- echo -e "\nNeed .. 2022. 11. 13.
[리눅스커널이야기] free 명령 free 명령 메모리는 커널이 제공하는 중요한 리소스 중 하나. CPU 가 프로세스의 연산 과정에 필요한 리소스라면, 메모리는 프로세스가 연산할 수 있는 공간을 제공해 주는 리소스이다. 프로세스는 메모리라는 공간에 자신이 필요한 함수를 넣어 두거나 변수에 값을 저장하거나 하는 방식으로 연산을 위한 공간을 확보하고 작업을 진행한다. 메모리가 부족하다면 프로세스는 더 이상 연산을 위한 공간을 확보할 수 없고, 이는 시스템 응답 불가 현상 또는 큰 성능 저하를 일으킬 수 있다. 1. 메모리 사용량 확인하기 free : 리눅스 시스템에서 메모리의 전체적인 현황을 가장 빠르게 살펴볼 수 있는 명령어 free 명령은 현재 시스템의 메모리 사용량에 관한 종합적인 정보를 보여준다. 전체 메모리 용량과, 사용 중인 용량.. 2022. 7. 29.
[리눅스커널이야기] Load Average 와 시스템 부하 Load Average 와 시스템 부하 1. Load Average 의 정의 Load Average 란? 앞에서 확인한 프로세스의 상태 중 R(running)과 D(uninterruptible sleep) 상태에 있는 프로세스 개수의 1분, 5분, 15분 마다의 평균 값. 즉, 얼마나 많은 프로세스가 실행 중 혹은 실행 대기 중인가를 의미하는 수치. Load Average 가 높다면 많은 수의 프로세스가 실행 중이거나 I/O 등을 처리하기 위한 대기 상태에 있다는 것이다. CPU Core 수가 많을 수록, Load Average 가 낮다. (하나의 Run Queue 에 두 개의 프로세스가 있고 하나만 실행되고 나머지 하나는 대기하는 것보다 서로 다른 CPU 에서 동시에 실행 될 수 있기 때문에) upti.. 2022. 7. 26.
[리눅스커널이야기] top 을 통해 살펴보는 프로세스 정보들(2) 프로세스의 상태 보기 1. Process Status D = uninterruptible sleep R = running S = sleeping T = traced or stopped Z = zombie - D(uninterruptible sleep) : 디스크 혹은 네트워크 I/O 를 대기하고 있는 프로세스를 의미. - R(running) : 실행 중인 프로세스. 실제로 CPU 자원을 소모. - S(sleeping) : sleeping 상태의 프로세스로, D 상태와의 가장 큰 차이점은 요청한 리소스를 즉시 사용할 수 있는지 여부. - T(traced or stopped) : 프로세스의 시스템 콜을 추적하고 있는 상태. (자주 볼 수 없는 상태) - Z(zombie) : 부모 프로세스가 죽은 자식 프로세.. 2022. 7. 26.
[Linux] 01. 운영체제의 구조와 특징 운영체제 또는 오퍼레이팅 시스템(OS)은 시스템 하드웨어를 관리할 뿐 아니라 응용 소프트웨어를 실행하기 위하여 하드웨어 추상화 플랫폼과 공통 시슽메 서비스를 제공하는 시스템 소프트웨어. - 프로세스 관리. - 사용자에게 멀티테스킹 환경 제공. 1. 운영체제의 부팅 과정 (1) BIOS - Health Check - 시스템에 전원이 공급되면 가장 먼저 메인보드의 ROM-BIOS에서 BIOS 프로그램을 자동 실행하여 시스템 제어권을 가지고 장착된 H/W에 대한 기본적인 점검과 인식을 한다. 이 과정이 모두 끝나고 나면 ROB-BIOS는 하드디스크의 첫 번째 부트섹트인 MBR에 있는 부트로더에게 그 제어권을 넘겨준다. - POST(Power On Self Test) > CPU, Memory, Graphic C.. 2022. 5. 23.
[리눅스커널이야기] top 을 통해 살펴보는 프로세스 정보들 top 을 통해 살펴보는 프로세스 정보들 - 옵션 없이 입력하면 주어진 Interval 간격(기본 3초)으로 화면을 갱신하면서 정보를 보여준다. (1) 현재 서버의 시간, 서버가 얼마나 구동되었는지 (2) 몇 명의 사용자가 로그인해 있는지, 시스템의 Load Average는 어느정도인지 Load Average는 현재 시스템이 얼마나 많은 일을 하고 있는지를 보여주는 데이터 (3) 현재 시스템에서 구동 중인 프로세스의 개수. (4) 각각의 CPU, Mem, swap 메모리의 사용량. swap 메모리가 상단에 있다는 것은 swap 메모리의 사용 여부가 시스템의 상태에 중요한 영향을 끼친다는 뜻으로 해석 가능. (5) PR, NI, VIRT, RES, SHR, S PR : 프로세스의 실행 우선 순위, 즉 다른.. 2022. 4. 7.
[Shell Programming] 10. Backup 리눅스 시스템에서 주기적으로 파일과 데이터베이스 백업을 하는 방법. 정책 세우기 1. 백업 주기 정책 언제마다 백업을 할 것인가? ex) 매일 새벽 2시, 매일 오전/오후 4시, 매주 토요일 새벽1시 2. 백업 방식 정책 (데이터를 복사할 목적 디스크 혹은 저장소의 여유 공간을 먼저 파악해야 함.) 백업 방식은 어떤 것인가? (백업은 파일을 읽어서 새로운 곳에 기록하는 것. 즉, CPU의 연산이 이루어진다.) 압축 백업 - $ tar -czpf : 일반적으로 많이 사용되는 백업. CPU가 많이 사용됨. 압축 해제 - $ tar -zxvf -c : 파일을 tar로 묶음. -p : 파일 권한을 저장. -v : 묶거나 파일을 풀 떄 과정을 화면에 출력. -f : 파일 이름을 지정. -C : 경로를 지정 -x .. 2022. 3. 17.
[Shell Programming] 9. Looping Looping 1. 산술연산 expr, let (1) expr 정수형 산술연산( +, -, *, /, % ), 논리연산( | , & ), 관계연산( =, !=, >, >=, echo Number: $num > ((num++)) > done Number: 1 Number: 2 Number: 3 Number: 4 Number: 5 (2) until until 다음의 command가 성공할 때 까지 do~done 사이의 명령어를 반복 실행. until 조건명령어 do 반복명령어 done [centos@linux-mypc bin]$ num=1 [centos@linux-mypc bin]$ until test $num -gt 5 > do > echo Number: $num > ((num+=1)) > done Num.. 2022. 3. 11.
[Shell Programming] 8. Branching Branching 1. exit 실행된 프로그램이 종료된 상태를 전달 // 모든 명령어는 종료될 떄 종료 코드를 발생. exit 0 : 프로그램 또는 명령이 성공으로 종료했음을 의미 1-255 : 프로그램 또는 명령이 실패로 종료했음을 의미 1 : 일반 에러 2 : Syntax error 126 : 명령을 실행할 수 없음 127 : 명령 (파일)이 존재하지 않음. 128+N : 종료 시그널 + N (Kill -9 PID 로 종료 시 128+9=137) $? : 종료 값 출력. Example [centos@linux-mypc ~]$ date > /dev/null [centos@linux-mypc ~]$ echo $? 0 # 정상 종료 => 0 [centos@linux-mypc ~]$ cp file1 cp:.. 2022. 3. 8.
[Shell Programming] 7. Input & Output Input & Output 1. echo prints text to standard output echo -n : 메시지 출력 후 newline 문자를 추가하지 않는다. (자동 줄바꿈 취소) -e : backslach escapes 문자를 해석하여 특별한 의미를 지정한다. \t TAB키 \n 줄바꿈 \a alert(bell) Example [centos@linux-mypc ~]$ echo "Your time is up" Your time is up [centos@linux-mypc ~]$ echo "Your time is up" > time.txt [centos@linux-mypc ~]$ cat time.txt Your time is up [centos@linux-mypc ~]$ echo "Name:" .. 2022. 3. 7.
[Shell Programming] 6. Positional Parameters Positional Parameters 위치 매개변수(Positional Parameters) 입력하는 argument들은 $0, $1, $2 와 같은 변수에 저장되어 script에 전달. name of shell script : $0 first argument : $1 second argument : $2 Numeber of argument in $# List of all parameters in $@, $* $ cpfile1file2\ $0 $1 $2 ... ${10} Special shell variables 로그인 shell의 PID : $$ 현재 작업 디렉토리 : $PWD 부모 프로세스 ID : $PPID 실습 1 [centos@linux-mypc bin]$ cat > parm.sh #!/bin.. 2022. 3. 7.
[Shell Programming] 5. Bash shell Script Bash shell Script 란? : 하나의 파일에 기존에 존재하는 명령어들을 집어넣어 순차적으로 해석(Interprete)해서 실행하는 것. - 리눅스 Command 들을 모아 놓은 ASCII Text 파일. - 파일에 실행 퍼미션을 할당해야 실행 가능. - Bash Shell Script 에서 특별히 의미가 정해진 기능 ##comment #!/bin/bash#셔뱅.해시뱅.스크립트를 실행할 sub shell 이름 - Shell 구문을 기본 top-down 방식으로 해석해서 실행됨. ※ Sub shell $ ls /bin/bash $ pwd $ /bin/bash# Sub Shell $ cd / $ pwd $ exit $ pwd (1) Shell Script 예시 (2) Shell Script 예시(2.. 2022. 3. 2.
[Shell Programming] 4. Bash shell의 Rules(2) Bash shell의 Rules(2) 1. Redirection (1) Communication Channels 프로그램이 키보드를 통해 입력을 받고 터미널을 통해 출력하여 사용자에게 보여줌. - 표준 입력 : Keyboard - 0번은 키보드로 연결 - 표준 출력 : Terminal - 1번이 키보드로 연결 - 표준 에러 : Terminal - 2번이 키보드로 연결 배쉬 셸은 번호를 붙여서 관리 함. 이것의 방향을 바꿔버린 다는 것이 Redirection 의 개념. (2) Redirection 보통 입력은 키보드를 통해서 이루어진다. 하지만, 파일을 이용해서 입력을 받을 때, 이것을 "파일 리다이렉션" 이라 한다. $ echo "This is TEST" > test.txt $ mailx -s "Test.. 2022. 2. 21.
[Linux] Disk 추가 파티션 생성 # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 100G 0 disk └─vda1 253:1 0 100G 0 part vdb 253:2 0 50G 0 disk vdc 253:16 0 200G 0 disk 디스크 장치의 이름은 vda, vdb, vdc...와 같이 인스턴스에 블록 스토리지를 연결한 순서대로 알파벳 문자가 하나씩 올라가게 됩니다. (1) $ fdisk [장치] - 추가한 dev/sdb 와 /dev/sdc 에 대하여 진행. ( /dev/sdc 에 대해서만 작성함. ) # sudo fdisk /dev/vdc Welcome to fdisk (util-linux 2.23.2). Changes will remain in memor.. 2022. 2. 17.
[Linux] CentOS 7 부팅 시 자동 시작 명령어 혹은 스크립트 적용 일반적으로 서버 부팅 시 마다 매번 자동으로 실행되길 원하는 명령어는 /etc/rc.d/rc.local에 넣어준다. 리눅스에서는 실행 레벨(run level)에 따라서 다르게 부팅할 수 있는데 실행 레벨에 따라서 설정되어 있는 모든 프로세스들을 실행하게 된다. /etc/inittab 파일에는 init이 현재의 실행레벨에서 실행되어야 할 내용들에 대한 설정이 있다. - Linux의 Run Level : Link 1. 리눅스 CentOS 7 부팅 시 명령어 자동 실행 방법 (1) /etc/rc.d/rc.local에 원하는 명령어를 넣어준다. - 예제에서는 간단히 부팅 시 Apache가 실행되도록 해주었다. -> /etc/rc.d/rc.local 파일에 /usr/sbin/apachectl start 추가) (.. 2022. 2. 16.
[Shell Programming] 3. Bash shell의 Rules 1. Quoting Rule (1) Metacharacters - Shell 에서 특별히 의미를 정해 놓은 문자들 - \ ? ( ) $ ... * {} [] 등 $echo *// 전체를 보여줘 $echo a*// a를 포함한 전체를 보여줘 $echo ????// ?는 Any Single Character : 어떤 문자든 지 가능 $touch myfile{1..3}// {1..3} 집합, myfile1, myfile2, myfile3 생성. (2) Quoting Rule : 메타 문자의 의미를 제거하고 단순 문자로 변경 - Backslach(\) - \ 바로 뒤의 메타 문자는 특별한 의미를 제거 - Double Quotes(" ") - " " 내의 모든 메타문자의 의미를 제거. 단 $, ' ' 은 제외 -.. 2022. 2. 15.
[Shell Programming] 2. Bash shell과 변수 1. Bash shell과 변수 (1) Shell의 변수란? - 데이터를 넣는 그릇 - 선언할 필요없이 사용 가능 - 변수명 : 문자, 숫자, _ 로 구성(시작은 반드시 문자나 _로 시작) (2) 변수 선언 : [varname]=[value] (띄어쓰기 주의) $ fname=jaewon $ scroe=90 (3) 변수 확인 : echo $[varname] / 변수 목록 : set $ echo $fname $ set (4) 변수 제거 : unset [varname] $ unset fname 2. Shell의 환경변수 (1) Shell 환경 변수란? - 동작되는 프로그램에게 영향을 주는 변수 (2) 환경 변수 선언 : export [varname]=[value] $ export NAME=jaewon $ ec.. 2022. 2. 11.
[Shell Programming] 1. Linux shell? 1. Linux Shell? - 사용자 명령어 해석기 - 사용자가 프롬프트에 입력한 명령을 해석해서 운영체제(커널)에 전달 2. Shell의 종류 종류 의미 Bourne Shell(sh) -AT&T 벨 연구소의 스티븐 본(Stephen Bourne)이 개발한 Original Shell -UNIX가 처음만들어질 때 탑재된 Shell C Shell(csh,tcsh) -Bill Joy 가 C언어의 기술을 넣어서 만든 Shell -C언어의 문법을 적용 -History, Aliases, Job Control, vi command editing and completion 기능을 포함 Korn shell(ksh) David Korn 이 AT&T에서 기존 bourne shell에 C shell 기능을 포함시켜 생성 B.. 2022. 2. 10.
Mac(os)에서 Cloud Instance에 파일 전송 Public IP 가 할당되어 있지 않은 Private Subnet 내에 있는 Instance 에 접속하기 위하여 Public Subnet에 있는 인스턴스를 경유하여 접속해야 했다. 먼저 Private Subnet 내의 Instance의 Key 파일을 Publiec Subnet 내의 인스턴스에 전송해야 했다. scp -i [pem파일경로] [업로드할 파일 이름] [ec2-user계정명]@[ec2 instance의 public DNS]:~/[경로] scp -i jw2_key.pem /Users/사용자명/.ssh/jw2_key.pem centos@공인IP:~/jw2_key.pem ssh -i jw2_key.pem centos@공인IP ls 전송한 Key 값을 이용하여 Private Subnet 내의 Inst.. 2022. 2. 10.
[Linux] 1. 시스템 구성 정보 확인 (2) 메모리 정보 확인 1. Command: dmidecode -t memory $ dmidecode -t memory 각 메모리 슬롯에 있는 메모리의 정보 및 제조사까지 확인 가능하다. 5개의 CPU 소켓이 있는 서버이기 때문에 Physical Memory Array는 총 5개가 있다. 각각의 Physical Memory Array는 총 24개의 메모리를 꽂을 수 있으며 최대로 꽂을 수 있는 용량은 7680GB 이다. 각 Physical Memory Arry의 Memory Device에는 32 GB의 메모리가 꽂혀 있다. 총 몇 개의 메모리가 꽂혀 있는지, 각각의 용량을 얼마인지 확인할 수 있다. 1개의 CPU 소켓이 있는 서버이기 때문에 Physical Memory Array는 총 1개가 있다. 각각의 P.. 2021. 12. 20.
[Linux] 1. 시스템 구성 정보 확인 (1) 시스템의 문제점을 분석하고 확인하기 위해서는 현재 시스템의 구성 정보를 확인할 수 있어야 한다. 현재 사용 중인 커널 버전과 부팅 시 사용한 커널 파라미터 그리고 하드웨어인 CPU와 메모리는 어떤 것을 사용하는 지 등의 정보를 알아야 알려진 커널 버그가 없는지, 하드웨어에 문제가 없는 지 확인할 수 있다. Kernel 정보 확인 커널 버전을 확인 할 수 있는 방법은 여러 가지다. 1. Command : uname -a $ uname -a 위 서버의 커널 버전은 3.10.0-957.el7.x86_64 로, x86 계열의 64 비트 운영체제를 사용하고 있음을 알 수 있다. 위 서버의 커널 버전은 4.14.252-195.483.amzn2.x86_64 로, 역시 x86 계열의 64 비트 운영체제를 사용하고 있음.. 2021. 12. 15.
[Linux] Run Level Run Level 리눅스에는 런레벨(Run Level)이라는 개념이 있다. CentOS 리눅스의 Run Level은 0부터 6까지 총 7단계로 구성되어 있으며, 시스템 관리를 위해 서비스 실행에 관련된 명령을 단계 별로 구분하여 적용하는 것을 의미한다. 시스템 관리를 용이하기 위해 만들어졌으며 시스템을 실행할 때 네트워크를 사용할 지, 여러 명의 사용자가 로그인을 할 수 있도록 허용할 지, 그래픽 인터페이스를 사용할 지 구분해서 시스템을 구동 시키는 것이다. 일반적으로 리눅스 터미널에서 시스템을 종료하기 위해서 init 0을 입력하거나 재부팅을 위해 init 6을 입력한다. 이와 같이 init 뒤에 단계를 나타내는 숫자를 붙이는 형식으로 사용한다. /etc/inittab 파일의 id:3:initdefau.. 2021. 12. 13.
[Linux] 디스크 용량 확인 df -h df [옵션] [경로] disk free의 줄임말. 리눅스 계열 서버의 디스크 공간을 확인한다. du du [옵션] [경로] du 는 disk usage의 줄임말. 각 디렉토리 별 disk 사용량을 확인하기 용이하다. 실습 실제로 서버를 운영하다 보면 종종 서버 용량이 임계치를 넘어 알림을 받았을 때, 서버의 어느 공간에서 가장 많은 용량을 사용 중인 파악해야할 때가 있다. (1) 먼저 df 명령어를 통해서 디스크 상황을 확인 어느 경로에서 디스크 사용률이 높은 지 파악한다. (2) du -h [특정 경로] | sort -n 파악한 경로를 기준으로 가장 많은 용량을 사용 중인 디렉토리를 구분한다. (sort 로 정렬) 2021. 12. 13.
[Linux] Root 비밀번호 분실 시 찾기 리눅스는 CentOS7을 사용한다. 1. 리눅스 부팅 시, [END] 키를 누른다. 2. GRUB 메뉴화면에서 'e' 를 눌러 편집 모드로 진입 3. 편집 모드 (1) linuxefi ~ 줄 수정 ro -> rw rhgb quiet -> init=/bin/bash - [Ctrl] + [x] 로 탈출. [Ctrl] + [x] 를 누르면, 재부팅이 시작되며 아래와 bash-4.2# 라는 bash 프롬프트가 나올 것이다. (2) passwd 를 이용하여 root 비밀번호를 변경 ※ Authentication token manipulation error 발생 시, $ mount -o remount,rw / $ chmod 640 /etc/shadow $ passwd 변경이 성공적으로 완료되면 아래 진행 (3) t.. 2021. 12. 13.
[Linux] Linux에서 Docker를 운영하는 이유 왜 리눅스에서 Docker를 운영해야 하는가? - 리눅스 커널의 기능을 기반으로 컨테이너가 만들어졌다. (1) chroot : 독립된 공간을 형성 (2) namespace : 독립된 공간에 6가지 isolate를 제공 (각 컨테이너가 마치 하나의 가상 시스템인 것처럼) (3) cgroup : 필요한만큼의 H/W를 지원. ★ chroot 로 root directory를 바꾸며, namespace로 프로세스를 격리하고, cgroups 으로 컴퓨팅 자원들을 제한하고 격리한다. 1. chroot 사용자가 신뢰할 수 없는 프로그램을 테스트하고 나머지 컴퓨터에는 영향을 미치지 않는 다른 작업을 수행 할 수 있는 컴퓨터 시스템의 격리된 영역이다. 사용자가 chroot 환경을 작성할 떄 해당 환경에서 실행되는 프로그램.. 2021. 11. 29.
[Linux] Linux Command - Mornitoring 1. uptime uptime 현재 대기 중인 프로세스가 얼마나 있는 지. 3개의 숫자는 각각 1분, 5분, 15분의 Load Average 값. 리눅스 시스템에서 이 값은 대기 중인 프로세스 뿐만 아니라 Disk I/O와 같은 I/O 작업으로 Block된 프로세스까지 포함된다. 1분 동안 부하율이 급등했다면 오류를 의심해봐야 한다. 2. dmesg dmesg | tail dmesg | tail -n 20 시스템 메시지. 가장 많이 그리고 먼저 확인해봐야 하는 것. 경로 : /var/log/dmesg 부팅 시부터 시작해서 모든 커널 메시지가 출력되기 때문에 tail을 이용해서 보는 것이 좋다. dmesg | grep sda : 하드디스크 정보 확인 dmesg | grep LINUX : 커널 정보 확인 d.. 2021. 11. 24.
[Linux] File System Linux Category에 들어갈 내용은 아니지만, Linux에 대해 정리하다가 생각나서 File System 에 대해 정리. 파일 시스템 파일 시스템(File System)은 컴퓨터에서 파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관 또는 조직하는 체계를 가리키는 말이다. 통상적으로 하드디스크나 CD-ROM 같은 물리적인 저장장치를 이용하여 관리하는 것을 가리킨다. 파일 시스템은 일반적으로 크기가 일정한 블록들의 배열(섹터라고도 불림)에 접근할 수 있는 자료 보관 장치 위에 생성되어 이러한 배열들을 조직함으로 파일이나 디렉토리를 만들며 어느 부분이 파일이고 어느 부분이 공백인지를 구분하기 위하여 각 배열에 표시를 해 둔다. 또한, 자료를 '클러스터' 또는 '블록'이라고 불리는 일정한 단위(통상 .. 2021. 11. 23.
[Linux] Linux Directory 구조 Linux를 오래 사용해왔고 각 디렉토리의 용도와 어떤 파일이 있는가는 대강은 알고 있지만, 한 번 쯤 다시 정리해보고 싶어서 작성. Linux Directory 구조 모든 것은 파일이다. (Everything is a file) 리눅스 시스템의 디렉토리 구조는 전체적으로 역 트리(tree) 구조이다. 리눅스 배포판들은 '리눅스 파일시스템 표준' 인 FSSTND(LINUX FILE System Standard) 라는 표준을 준수하므로 대부분의 리눅스 배포판들은 그 기본 골격이 같다. 리눅스의 디렉토리 혹은 파일 시스템 구조는 윈도우와는 조금 다른 구조를 가지고 있다. 기본적으로 디렉토리를 구분하는 '/'(슬래시)는 리눅스에서 사용하고 윈도우는 반대인 '\'(역슬래시)를 사용한다. /(루트) 최상의 디렉토.. 2021. 11. 23.
Linux 실질 메모리 사용률 계산 2021. 11. 4.
Port 사용 여부 확인 / Process Kill [Port 사용 여부 확인] $ sudo yum install -y lsof $ sudo lsof -i : $ sudo lsof -i :8080 port 번호는 docker run 할 때 할당했던 port 번호를 입력해주세요. 예제는 8080 docker-pr 두 개가 8080 port 를 점유하고 있다. [Process kill] $ sudo kill -15 2021. 9. 10.