Introduction to Operating Systems

운영체제란?

  • 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층
  • 협의의 운영체제(커널): OS의 핵심 부분으로 메모리에 상주하는 부분
  • 광의의 운영체제: 커널 뿐 아니라 메모리에 상주하지 않는 각종 주변 시스템 유틸리티를 포함하는 개념

운영체제의 목적

  • 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공
    • 운영체제는 동시 사용자 / 프로그램들이 각각 독자적 컴퓨터에서 수행되는 것처럼 보이게 함
    • 하드웨어를 직접 다루는 복잡한 부분을 운영체제가 대행
  • 컴퓨터 시스템의 자원을 효율적으로 관리
    • 프로세서, 기억장치, I/O 장치 등의 효율적 관리
      • 사용자 간 형평성 있는 자원 분배
      • 주어진 자원으로 최대한의 성능을 내도록 함
        • 실행 중 프로그램들에게 짧은 시간 씩 CPU를 번갈아 할당
        • 실행 중 프로그램들에게 메모리 공간을 적절히 분배
    • 사용자 및 운영체제 자신의 보호
    • 프로세스, 파일, 메시지 등을 관리(소프트웨어 자원)

운영체제의 분류

  1. 동시 작업 가능 여부
    • 단일 작업(single tasking): 한 번에 하나의 작업만 처리
      • ex) MS-DOS 프롬프트 상에서는 한 명령의 수행을 끝내기 전에 다른 명령을 수행시킬 수 없음
    • 다중 작업(multi tasking): 동시에 두 개 이상의 작업 처리
      • ex) UNIX, MS Windows 등에서는 한 명령의 수행이 끝나기 전에 다른 명령이나 프로그램을 수행할 수 있음
  2. 사용자의 수
    • 단일 사용자(single user)
      • ex) MS-DOS, MS Windows
    • 다중 사용자(multi user)
      • ex) UNIX, NT Server
  3. 처리 방식
    • 일괄 처리(Batch processing)

      • 작업 요청의 일정량을 모아 한꺼번에 처리
      • 작업이 완전히 종료될 때까지 기다려야 함
        • ex) 초기 Punch card 시스템
    • 시분할(Time sharing)

      • 여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용
      • 일괄 처리 시스템에 비해 짧은 응답 시간을 가짐
      • 사용자 입장에서는 interactive한 방식
    • 실시간(Realtime OS)

      • 정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야 하는(dead-line) 실시간 시스템을 위한 OS
      • 실시간 시스템의 개념 확장
        • Hard Realtime System
          • ex) 미사일 제어, 원자로/공장 제어
        • Soft Realtime System
          • ex) 영화 스트리밍
      • 실시간성을 필요로 하는 어플리케이션이 늘어남에 따라 범용 운영체제 역시 어떻게 '실시간성'을 지켜줄 것인가에 대한 연구를 진행(ex. 블랙박스, 네비게이션)

혼동하기 쉬운 용어

  • Multitasking
  • Multiprogramming
  • Time sharing
  • Multiprocess
  • 위 용어들은 컴퓨터에서 여러 작업을 동시에 수행하는 것을 뜻함
  • Multiprogramming은 여러 프로그램이 메모리에 올라가 있음을 강조
  • Time sharing은 CPU의 시간을 분할하여 나누어 쓴다는 의미를 강조

- Multiprocessor: 하나의 컴퓨터에 CPU가 여러 개 붙어 있음을 의미 


'Software Convergence > OS, Linux ' 카테고리의 다른 글

3. Process  (0) 2018.09.16
2. System Structure & Program Execution  (0) 2018.09.16
Linux Command Line Guide(2)  (0) 2018.09.10
vimtutor 내용 정리  (0) 2018.09.09
Linux Command Line Guide (1)  (0) 2018.09.06

쉘 학습(2)

리다이렉션

표준 입출력과 표준 오류

  • 출력은 두 가지 형식을 포함
    1. 프로그램의 결과. 즉, 프로그램이 출력하도록 설계한 데이터
    2. 프로그램이 어떻게 돌아가고 있는지를 말해주는 상태 및 오류 메시지 형식
  • I/O 리다이렉션 기능으로 출력과 입력의 방향 변경 가능

표준 출력 재지정
  • 화면에 출력하는 대신 다른 파일에 출력하도록 할 수 있음
  • 명령어 출력결과를 파일에 저장하는 것이 종종 유용하기 때문
ls -l /usr/bin > ls-output.txt
  • > 리다이렉션 연산자로 출력 방향을 지정할 때, 목적 파일은 항상 처음부터 다시 작성됨

  • 이러한 트릭을 이용하여 빈 파일을 만드는 방법
> ls-output.txt
  • >> 리다이렉션 연산자를 사용하여 파일에 이어 쓰기가 가능해짐


표준 오류 재지정
  • 표준 오류 재지정할 때는 리다이렉션 연산자가 필요 없음
  • 파일 디스크립터를 참조
    • 0, 1, 2번 파일 디스크립터
    • 순서대로 표준 입력, 표준 출력 , 표준 오류
ls -l /bin/usr 2> le-error.txt

표준 출력과 표준 오류를 한 파일로 재지정
ls -l /bin/usr &> ls-output.txt
  • &> 표기가 표준 출력과 표준 오류를 함께 재지정해주는 역할

원치 않는 출력 제거
  • /dev/null 이라는 특수한 파일로 출력 방향을 지정함으로써 출력 결과 버릴 수 있음
  • 비트 버킷이라고 불리는 시스템 장치로 입력을 받고 아무것도 수행하지 않음

표준 입력 재지정
파일 붙이기
  • cat 명령어는 하나 이상의 파일을 읽어 들여서 표준 출력으로 그 내용을 복사
  • 주로 짧은 텍스트 파일을 표시하거나, 파일을 하나로 합치는 데에도 사용 가능
[me@linuxbox~] cat
The quick fox jumped.
The quick fox jumped. // CTRL + D 눌러 EOF 문자 입력

[me@linuxbox~] cat > lazy_dog.txt
The quick fox jumped.
// CTRL + D 눌러 EOF 문자 입력

[me@linuxbox~]cat lazy_dog.txt
[me@linuxbox~]cat < lazy_dog.txt
는 똑같은 기능 수행

파이프라인

  • command1 | command2를 활용하여 표준 출력을 표준 입력으로 활용 가능
ls -l /usr/bin | less

필터
  • 파이프라인은 데이터의 복잡한 연산을 수행할 때 종종 사용
  • 하나의 파이프라인에 여러 명령어의 입력이 가능
ls /bin /usr/bin | sort | less
// 두 디렉토리에 있는 실행 프로그램들을 하나의 목록으로 만들어 정렬한 뒤 보여줌

중복줄 제거 및 표시
  • uniq 명령어는 종종 sort와 함께 사용
# 중복된 내용을 제거해서 보고자 할 때
ls /bin /usr/bin | sort | uniq | less
# 중복된 내용만 보고자 할 때 
ls /bin /usr/bin | sort | uniq -d | less

라인, 단어 개수 및 파일 크기 출력
  • wc 명령어는 파일에 들어있는 라인 - 단어 - 파일 크기의 순으로 출력
wc file.txt
  • -l 옵션은 라인 수만 보고 싶을 때 사용 가능
# 정렬된 목록의 항목 개수를 알고 싶을 때 사용
ls /bin /usr/bin | sort | uniq | wc -l

패턴과 일치하는 라인 출력
  • grep 명령어는 파일 내에서 "패턴"을 만났을 때, 그 패턴을 가지고 있는 라인을 출력
    • grep pattern [file...]
ls /bin /usr/bin | sort | uniq | grep zip
  • -i 옵션은 검색 수행할 때 대소문자 구분하지 않도록 함
  • -v 옵션은 패턴과 일치하지 않는 라인만 출력

파일의 처음/끝 부분 출력
  • head, tail 명령어로 첫 / 마지막 10줄 표시 가능
  • head(tail) -n #로 그 수 조정 가능
  • tail에 -f 옵션 지정하면, 실시간으로 파일 확인 가능
tail -f /var/log/messages

표준 입력에서 데이터 읽고, 표준 출력과 파일에 출력
  • tee 프로그램은 표준 입력으로부터 데이터를 읽어서 표준 출력과 하나 이상의 다른 파일에 동시에 출력
  • 작업이 진행되고 있을 때, 중간 지점의 파이프라인에 있는 내용을 알고 싶을 때 유용
ls /usr/bin | tee ls.txt | grep zip



확장과 인용

확장

  • 쉘은 명령어가 실행되기 직전에 모든 한정 문자들을 한정

  • 위 그림에서 쉘은 * 기호를 확장시킨 후, 디렉토리의 이름으로 확장하여 보여주었음

경로명 확장
echo D*
echo *s
echo /usr/*/share

틸드 확장
# 현재 사용자의 홈 디렉토리명
echo ~

# foo 계정의 홈 디렉토리명
echo ~foo

산술 확장
  • &((expression)) 으로 산술 확장 사용 가능
echo $(((5**2) *3))

중괄호 확장
  • 중괄호 안에 표현된 패턴과 일치하는 다양한 텍스트 문자열 생성 가능

  • 위와 같이 정렬된 디렉토리 생성에 아주 유용하게 사용 가능

매개변수 확장
  • 매개변수를 확장해서 볼 수 있음
  • ex) echo $USER
  • 사용 가능한 변수 목록 보기
    • printenv | less

명령어 치환
  • 명령어 치환으로 명령어의 출력 결과를 확장해서 사용 가능
    • ex) echo $(ls)

따옴표 활용(Quoting)

따옴표 기호를 활용하여 원치 않는 확장을 선택적으로 감출 수 있음

쌍 따옴표 기호

  • 쌍 따옴표 기호를 이용하여 원치 않는 단어 분할 문제 해결 가능
  • 쌍 따옴표가 사용되면, 커맨드라인에서 하나의 명령 인자로 처리
    • 첫 번째 입력은 38개의 명령 인자를 가진 명령어로 인식
    • 두 번째 입력은 빈칸과 개행 문자 포함하여 하나의 명령 인자로 인식

따옴표 기호

  • 모든 확장을 숨겨야 한다면 따옴표 기호 사용

이스케이프 문자
  • 종종 선택적으로 확장을 막기 위해 쌍 따옴표 안에서 사용
  • 또한 파일명에 있는 어떤 문자가 가진 특별한 의미를 없애고 싶을 때 흔히 사용

고급 키보드 기법

커맨드라인 편집

커서 이동
  • CTRL + A: 줄 맨 앞으로 커서 이동
  • CTRL + E: 줄 맨 끝으로 커서 이동
  • ALT + F: 다음 한 단어로 커서 이동
  • ALT + B: 이전 한 단어로 커서 이동

텍스트 수정
  • CTRL + T: 현재 커서 위치에 있는 글자와 바로 앞글자의 위치 바꾸기
  • ALT + T: 현재 커서 위치에 있는 단어와 바로 앞 단어의 위치 바꾸기
  • ALT + L: 현재 커서 위치에 있는 글자부터 그 단어 끝 부분까지 소문자로 바꾸기
  • ALT + U: 현재 커서 위치에 있는 글자부터 그 단어 끝 부분까지 대문자로 바꾸기

  • CTRL + K: 현재 커서 위치로부터 그 줄 끝 부분까지 텍스트 지우기
  • CTRL + U: 현재 커서 위치로부터 그 줄 처음 부분까지 텍스트 지우기
  • ALT + D: 현재 커서 위치에서부터 그 단어 끝 부분까지 텍스트 지우기
  • ALT + BACKSPACE: 현재 커서 위치에서부터 그 단어 앞부분까지 텍스트 삭제하기
  • CTRL + Y: 잘라낸 데이터는 kill-ring이라고 하는 버퍼에 저장되는데, kill-ring에 있는 텍스트를 현재 커서 위치에 삽입

히스토리 활용

  • bash는 입력된 명령어에 대한 히스토리를 저장
  • 히스토리는 홈 디렉토리에 .bash_history라는 파일로 저장
히스토리 검색
  • 기본값으로 bash는 사용자가 입력한 최근 500개의 명령어 저장
  • 출력 결과 중 필요한 명령어가 포함된 줄만을 찾을 수도 있음
    • 이후 !line_number로 해당 명령어 재실행 가능
  • CTRL + R: 역순 증분 검색으로, 현재 커맨드라인에서 히스토리 목록으로 증분 검색
    • bash에 명령을 주면 각 글자가 추가될 때마다 우리가 원하는 검색 결과를 골라서 보여줌
    • 원하는 결과를 찾으면 CTRL + J를 눌러 현재 커맨드라인에 그 명령어 복사 가능

히스토리 확장
  • !!: 마지막 명령어를 반복하여 실행
  • !string: 이 문자열로 시작하는 가장 최근에 입력된 항목 실행
  • !?string: 이 문자열이 포함된 가장 최근에 입력된 항목을 실행

퍼미션

소유자, 그룹 멤버, 기타 사용자

  • id 명령어 통해 자신의 사용자 ID 정보 확인 가능
  • 사용자 ID(uid)와 주 그룹 ID(gid) 존재
  • 사용자 계정은 /etc/passwd 파일에 정의
  • 그룹은 /etc/group 파일에 저으이
  • 사용자 계정과 그룹이 생성되면, 이 파일들은 사용자 비밀번호에 관한 정보를 가진 /etc/shadow에 덧붙여 수정

파일 모드 변경
8진법 표현
  • 0: ---  1: --x  2: -w-  3: -wx  4: r--
  • 5: r-x  6: rw-  7: rwx

기호 표현
  • u: user의 약자로, 파일이나 디렉토리 소유자

  • g: 그룹 소유자

  • o: othres의 약자로, 기타 사용자

  • a: all의 약자로, u,g,o의 조합

  • chmod 기호 표기법 예제

    • u+x: 소유자에게 실행 권한 추가
    • u-x: 소유자에게 실행 권한 제거
    • +x: 모든 사용자에게 실행 권한 추가
    • go=rw: 그룹 소유자와 기타 사용자가 읽기, 쓰기 권한을 갖도록 함

기본 권한 설정

  • 파일 모드 속성에서 제거할 비트 마스크를 표현하는 umask 설정
  • 일반적인 umask의 기본 값은 0002 혹은 0022

사용자 ID 변경

다른 사용자 ID와 그룹 ID로 쉘 실행
  • su - 명령어로 슈퍼유저로 쉘 시작 가능
  • su -c 'command': 새로운 명령어로 시작하지 않고 단일 명령어 수행 가능

다른 사용자로 명령어 실행
  • 사용자는 하나 이상의 지정된 명령어로 제한되고 나머지는 불가
  • sudo -l: sudo로 허용된 특권을 확인하기 위한 옵션
  • sudo는 슈퍼유저의 비밀번호를 요구하지 않음

파일 소유자와 그룹 변경
  • chown [owner][:[group]] file...
  • chown 인자 예제
    • bob: 파일 소유자를 bob으로 변경
    • bob:users: 파일 소유자를 bob으로 변경하고, 파일 그룹 소유자를 users 그룹으로 변경
    • :admins: 파일 그룹 소유자만 admins 그룹으로 변경
    • bob::파일 소유자가 bob으로 변경되고 그룹 소유자는 bob의 로그인 그룹으로 변경

사용자 비밀번호 변경

  • passwd [user] 명령어 통해 자신의 비밀번호 변경 가능
  • 슈퍼유저 특권을 가지고 있다면 첫 번째 인자에 사용자 이름을 지정해서 해당 사용자의 비밀번호 설정 가능

프로세스

프로세스는 어떻게 동작하는가

  • 시스템이 구동될 때, 커널은 몇몇 프로세스를 초기화하고 init이라는 프로그램 실행
  • init은 차례차례 모든 시스템 서비스를 시작하기 위해 init 스크립트라고 불리는 쉘 스크립트 실행

ps 명령어로 프로세스 보기
  • 프로세스를 보는 가장 일반적인 명령어는 ps
  • tty(teletype): 프로세스용 제어 터미널

  • ps aux 명령어로 모든 프로세스를 보여줌
  • 프로세스 상태
    • R: 실행 상태
    • S: 수면 상태
    • D: 인터럽트 불가능한 수면 상태
    • T: 종료 상태
    • Z: 좀비 프로세스
    • <: 높은 우선순위 프로세스
    • N: 낮은 우선순위 프로세스
  • ps 헤더들
    • USER: 사용자 ID
    • %CPU: CPU 사용량
    • %MEM: 메모리 사용량
    • VSZ: 가상 메모리 크기
    • RSS: 사용 메모리 크기
    • START: 프로세스가 시작된 시각

top 명령어로 프로세스 변화 보기

  • top 프로그램은 프로세스가 활동순으로 나열된 시스템 프로세스들을 지속적으로 갱신하여 보여줌
  • 시스템상의 최상위 프로세스들을 보기 위해 사용
  • top 정보 필드
    • up 19days: 시스템이 마지막 부팅된 시점부터 지금까지의 시간
    • 1 users: 로그인한 사용자의 수
    • load average: 평균부하는 실행 대기중인 프로세스 수 의미
    • Tasks: 프로세스 수와 프로세스 상태별 수
    • 0.0 us: CPU의 0.0%를 사용자 프로세스들이 사용 중
    • 0.0 sy: CPU의 0.0%를 시스템(커널) 프로세스에서 사용 중
    • 0.0 ni: CPU의 0.0%를 nice 프로세스가 사용 중
    • 100.0 id: CPU의 100.0%가 유휴 상태
    • 0.0 wa: CPU의 0.0%가 I/O 대기 중
    • Mem: 물리메모리 사용현황
    • Swap: 스왑 영역(가상 메모리) 사용현황

프로세스를 백그라운드로 전환
  • & 기호를 사용하여 프로그램을 백그라운드로 이동 가능
  • jobs 명령어는 터미널에 실행 중인 작업을 나열해주는 기능
    • jobs에서 지정한 작업 번호(jobspec)을 이용하여 fg로 재전환 가능
    • ex) fg %1

프로세스 정지(일시정지)
  • 포어그라운드 프로세스를 정지하기 위해서는 CTRL+Z를 누름
  • 이후, fg 명령어로 프로그램을 포어그라운드로 복원하거나, bg 명령어로 프로그램을 백그라운드로 이동 가능
    • ex) bg %1

시그널

  • kill 명령어는 프로세스를 종료하는 것이 아니라, 프로세스에 시그널을 보내는 것
kill로 시그널 보내기
  • kill [-signal] PID ...
  • 커맨드라인에 지정된 시그널이 없다면, 기본적으로 종료 시그널을 보냄
  • 주요 시그널
    • 1(HUP): 제어 터미널과 연결이 끊어진 프로그램을 가리키는데 사용
    • 2(INT): Interrupt. 터미널에서 CTRL+C 키를 보낸 것과 동일한 기능
    • 9(KILL): 커널이 프로세스를 즉시 종료. KILL 시그널은 마지막 수단으로 사용되어야 함(진행 중 작업 저장할 기회가 없음)
    • 15(TERM): 프로그램이 시그널을 받을 수 있을 정도로 "살아있다면" 프로그램은 이 시그널을 받고 종료됨
    • 18(CONT): STO 시그널로 정지된 프로세스 복원
    • 19(STOP): 프로세스를 종료 없이 일시 정지 시킴
  • kill 명령어로 프로세스에 시그널을 보내려면 반드시 그 프로세스의 소유자이거나 슈퍼유저여야 함
  • 그 외 주요 시그널
    • 3(QUIT): Quit. 사용자가 종료 키를 입력하면 커널이 프로세스에 SIGQUIT 시그널 보냄
    • 11(SEGV): 프로그램이 잘못된 메모리 사용이 이뤄질 때 보내짐
    • 20(TSTP): CTRL+Z를 눌렀을 때 터미널에 의해 보내짐
    • 28 (WINCH): 윈도우 크기가 변경된 경우 시스템에 보내짐
  • killall로 다수의 프로세스에 시그널을 보낼 수도 있음
    • killall [-u user] [-signal] name ...

기타 프로세스 관련 명령어들

  • pstree: 프로세스 간의 부모/자식 관계를 보여주는 트리 형태로 정렬해서 프로세스 목록 출력
  • vmstat: 메모리, 스왑, 디스크 I/O를 포함한 시스템 자원 사용 현황 출력
  • xload: 시간에 따라 시스템 부하를 그래프로 보여주는 그래픽 프로그램
  • tload: xload 프로그램과 유사하지만 터미널에서 그래프 보여줌


'Software Convergence > OS, Linux ' 카테고리의 다른 글

2. System Structure & Program Execution  (0) 2018.09.16
1. Introduction to Operating Systems  (0) 2018.09.16
vimtutor 내용 정리  (0) 2018.09.09
Linux Command Line Guide (1)  (0) 2018.09.06
sudo 명령어 수행 안되는 경우  (0) 2018.07.25

Vim tutor (ver. 1.7) 정리

Lesson 1

1.1. MOVING THE CURSOR
  • h, j, k, l 키로 커서 이동 가능
  • h는 좌측으로 이동 / l은 우측으로 이동
  • j는 아래로 이동 / k는 위로 이동
  • 화살표 키도 같은 원리로 동작하지만, hjkl을 사용하는 것이 익숙해지면 더 좋은 성능을 보임

1.2. EXITING VIM

  1. 키를 통해 Normal mode로 전환
  2. Type :q!
    • q!를 이용한 종료는 수정 내역을 모두 무시하는 종료

1.3. TEXT EDITING - DELETION

  • x키를 사용하여 cursor가 표시하고 있는 문자 삭제 가능

1.4. TEXT EDITING - INSERTION

  1. Normal mode에서 Insert Mode로 전환하기 위해 [i] 누름
  2. cursor 왼쪽에 문자 추가 가능

1.5. TEXT EDITING - APPENDING

  1. Normal mode에서 Insert Mode로 [a]를 눌러 전환
  2. cursor가 표시하고 있는 오른쪽부터 문자 추가 가능

1.6. EDITING A FILE

  • :wq : 수정 사항을 반영하여 파일을 저장한 후 종료

Lesson 2

2.1. DELETION COMMANDS

  • Normal mode에서 dw 명령어 사용하여 단어 단위로 삭제 가능
  • Normal mode에서 dd 명령어 사용하여 line 단위로 삭제 가능

2.2. ON OPERATORS AND MOTIONS

  • w: 다음 단어의 첫 글자로 이동
  • e: 다음 단어의 마지막 글자로 이동
  • $: line의 맨 마지막 글자로 이동

2.3. USING A COUNT FOR A MOTION

  • 2w, 3e 등 숫자를 활용한 이동 또한 가능
  • 0 입력해서 line의 처음으로 이동 가능

2.4. USING A COUNT TO DELETE MORE

  • d2w, d3w 등으로 단어 여러 개 동시에 삭제도 가능

2.5. THE UNDO COMMAND

  • u 입력하여 마지막 명령 취소 가능
  • U 입력하여 전체 라인에 대한 수정 취소 가능

Lesson 3

3.1. THE PUT COMMAND

  • 무언가를 지우면 Vim register에 저장됨
  • 이를 이용하여 삭제한 특정 line을 p 입력으로 커서 아래에 붙여넣기 가능

3.2. THE REPLACE COMMAND

  • r + <바꿀 글자> 명령어로 커서 아래 글자의 변경 가능

3.3. THE CHANGE OPERATOR

  • ce 입력하여 커서 뒤 글자들 제거 가능
  • 제거 이후 사용자를 Insert mode에 위치시킴
  • Deletion 때와 마찬가지로 cw, c$ 등의 명령어도 적용이 가능

Lesson 4

4.1. CURSOR LOCATION AND FILE STATUS

  • CTRL-G: 현재 자신이 보고있는 파일의 위치와 상태 표시
  • gg: 파일의 맨 처음 line으로 이동
  • G: 파일의 맨 마지막 line으로 이동
  • line # + G: 해당 line 번호로 이동

4.2. THE SEARCH COMMAND

  • / 누른 후 원하는 검색어 입력하여 검색 가능(커서 다음부터 검색)
  • ? 누른 후 원하는 검색어 입력하여 검색 가능(커서 이전부터 검색)
  • n: 다음 검색 결과 확인 가능
  • N: 이전 검색 결과 확인 가능
  • CTRL-O: 검색 이전에 있던 장소로 돌아가기
  • CTRL-I: 다음 장소로 이동

4.3. MATCHING PARENTHESES SEARCH

  • 커서를 (, [, { 위에 올려놓고 % 입력
  • 닫히는 괄호를 찾아주는 기능 수행
  • 괄호가 안맞는 프로그램을 디버깅할 때 매우 유용하게 사용 가능

4.4. THE SUBSTITUTE COMMAND

  • :s/old/new: line 내 첫 번째 old를 new로 교체
  • :s/old/new/g: line 내 모든 old를 new로 교체
  • :%s/old/new/g: 파일 내 모든 old를 new로 교체
  • :%s/old/new/gc: 파일 내 모든 old를 new로 교체하되, 매 번 확인 여부 물음
  • :#,#s/old/new/g: 두 line 번호 사이에 있는 모든 old를 new로 교체

Lesson 5

5.1. HOW TO EXECUTE AN EXTERNAL COMMAND

  • :! 이후에 external command를 입력하여 외부 명령어 실행 가능

5.2. MORE ON WRITING FILES

  • :w file_name 으로 다른 이름으로 저장 가능

5.3. SELECTIONG TEXT TO WRITE

  • v 눌러서 Visual mode로 진입
  • 커서 옮겨서 처리하고 싶은 line들 highlighted 되게 설정
  • :누르면 :'<,'> 를 확인 가능
:'<,'>w TEST

5.4. RETRIEVING AND MERGING FILES

  • r 명령어 통해 파일 읽어와 현재 파일의 커서에 붙여넣기 가능
:r FILENAME

# 아래와 같은 응용도 가능
:r !ls



Lesson 6

6.1. THE OPEN COMMAND

  • o: 커서 아래에 한 공백 line을 추가하고 사용자를 Insert mode에 진입시킴
  • O: 커서 위에 한 공백 line을 추가하고 사용자를 Insert mode에 진입시킴

6.2. THE APPEND COMMAND

  • a: 커서 다음에 새로운 글자 추가하도록 함
  • A: line 마지막에 새로운 글자 추가하도록 함

6.3. ANOTHER WAY TO REPLACE

  • R: Replace mode로 진입
  • 입력한 글자가 이미 존재하는 글자들 지우는 형태의 모드

6.4. COPY AND PASTE TEXT

  • v 눌러 Visual mode 진입한 후, y 버튼으로 highlighted 된 문장 복사 가능
  • p 눌러 복사한 문장 붙여넣기 가능
  • yw: 한 단어 복사
  • V: line 단위로 Visual mode highlight

6.5. SET OPTION

  • :set ic: 대소문자 구분 없이 검색 가능하게 하는 옵션
  • :set noic: ic 옵션 비활성화
  • :set hls: 모든 검색 결과 highlight 되도록 하는 옵션
  • :nohlsearch: 검색 결과 highlight 제거
  • :set is: 부분 매칭되는 결과도 함께 보여주도록 하는 옵션
  • 옵션의 앞에 'no' 붙이면 옵션 해제 가능

Lesson 7

7.1. GETTING HELP

  • [F1] 키 or :help 입력해서 도움 시스템 실행 가능
  • CTRL + W 눌러 서로 다른 창 이동 가능

7.2 CREATE A STARTUP SCRIPT

  • vimrc 파일 수정해서 원하는 옵션 추가하여 사용 가능
    • 위치: ~/.vimrc
  • :r $VIMRUNTIME/vimrc_example.vim
    • 코드 파일 syntax highlight 기능 추가!

7.3 COMPLETION

  • : 누르고 문자 입력한 후, CTRL + D 입력하면 해당 문자로 시작하는 명령어 목록 보여줌
  • 키로 명령어 자동완성 기능 사용 가능

'Software Convergence > OS, Linux ' 카테고리의 다른 글

1. Introduction to Operating Systems  (0) 2018.09.16
Linux Command Line Guide(2)  (0) 2018.09.10
Linux Command Line Guide (1)  (0) 2018.09.06
sudo 명령어 수행 안되는 경우  (0) 2018.07.25
Daemon이란?  (0) 2018.07.19

쉘 학습

쉘 이란 무엇인가?

  • 쉘이란 키보드로 입력한 명령어를 운영체제에 전달하여 이 명령어를 실행하게 하는 프로그램
  • 대부분의 리눅스 배포판은 bash라고 하는 GNU 프로젝트의 쉘 프로그램 제공

터미널 에뮬레이터

  • GUI 환경에서는 쉘과 직접 작업할 수 있도록 도와주는 터미널 에뮬레이터라는 프로그램이 필요
  • 다양한 터미넬 에뮬레이터가 존재하지만 모두 기본적으로 쉘에 접근할 수 있게 해준다는 같은 기능을 수행

첫 번째 키 입력

  • 쉘 프롬프트: 쉘이 입력 가능한 상태일 때 나타남
    • 보통 username@machinename 과 같은 형식을 포함
    • 뒤이어 현재 작업 디렉토리와 $ 표시가 옴
  • 프롬프트의 마지막 글자가 # 이면 현재 터미널 세션이 super user 권한을 가졌다는 뜻

명령어 히스토리
  • 위쪽 방향키 눌러서 명령어 히스토리 기능 사용 가능
  • 기본적으로 가장 최근 500개의 명령어 기억 가능

간단한 명령어 실행하기

  • date: 현재 시간과 날짜 표시
  • cal: 현재 날짜의 달력을 표시
  • df: 현재 사용 중인 디스크 정보와 사용 가능한 디스크의 용량 표시
  • free: 메모리 사용 현황 정보 표시
  • exit: 터미널 세션 종료

파일시스템 탐색

파일시스템 트리 구조의 이해

  • 리눅스와 같은 유닉스형 운영체제는 계층적인 디렉토리 구조로 파일을 구성
  • 파일시스템의 최상위 디렉토리를 루트 디렉토리라고 부름
  • 윈도우즈는 저장장치마다 개별 파일시스템으로 관리하는 반면 유닉스형 시스템에서는 단일 파일시스템으로 관리
    • 유닉스형 시스템의 저장장치들은 시스템 유지보수를 담당하는 관리자의 재량에 따라 다양한 위치에 마운트

현재 작업 디렉토리

  • 현재 사용자가 위치해있는 지점을 현재 작업 디렉토리 라고 함
  • 표시를 위한 명령어는 pwd(Print Working Directory)

  • 시스템에 처음 로그인하면 홈 디렉토리가 현재 작업 디렉토리가 됨
    • 사용자 계정마다 고유의 홈 디렉토리가 있으며, 일반 사용자로 시스템을 사용할 때 파일 쓰기 권한이 부여된 유일한 공간

디렉토리 목록 표시

  • 현재 작업 디렉토리에 있는 파일과 하위 디렉토리를 표시할 때는 ls 명령어 사용

현재 작업 디렉토리 변경

  • cd 명령어로 Working Directory의 변경 가능

절대 경로명
  • 루트 디렉토리에서 원하는 디렉토리 또는 파일까지의 경로
    • ex) /usr/bin

상대 경로명
  • 현재 작업 디렉토리가 시작점이 됨
    • . 기호는 현재 작업 디렉토리를 나타냄
    • .. 기호는 작업 디렉토리의 상위 디렉토리를 의미
    • 거의 모든 경우에 ./ 기호는 생략 가능
  • 유용한 단축 표현들
    • cd: 작업 디렉토리를 홈 디렉토리로 변경
    • cd -: 작업 디렉토리를 이전 작업 디렉토리로 변경
    • cd ~ username: username의 홈 디렉토리로 작업 디렉토리를 변경

시스템 살펴보기

재미있는 ls 명령어

  • ls /usr: 다른 디렉토리의 목록 보기
  • ls ~ /usr: 한 번에 여러 디렉토리 목록 보기
  • ls -l: 파일 및 디렉토리 이름 뿐 아니라 더 자세한 속성까지 확인하기 위한 -l 옵션

명령어 옵션과 명령 인자
  • 명령어는 주로 하나 이상의 옵션명령 인자들과 함께 사용
  • 주로 많이 사용되는 ls 옵션
    • -a: 모든 파일 보기(숨김 파일까지도 표시)
    • -d: -l 옵션과 함께 사용하여 디렉토리 자체 정보를 확인
    • -F: 지시 문자를 추가로 표시(디렉토리 명이면 끝에 / 덧붙임)
    • -h: -l 옵션과 함께 사용하여 파일 크기를 인식하기 쉬운 형태로 표시
    • -l: 자세한 정보 출력
    • -r: 출력 결과를 역순으로 표시
    • -s: 파일 크기순으로 정렬
    • -t: 파일 수정 시간순으로 정렬

file 명령어로 파일 타입 확인

  • 파일명이 직관적이지 않은 리눅스에서는 file 명령어를 통해 파일에 대한 정보 확인 가능

less 명령어로 파일 정보 보기

  • less 명령어는 텍스트 파일을 볼 때 사용하는 프로그램
  • 환경설정 파일, 스크립트와 같은 것들이 텍스트 형식으로 저장됨
    • less 프로그램은 그러한 텍스트들을 확인할 때 매우 편리한 방식 제공
  • less is more: 긴 텍스트도 페이지별로 쉽게 볼 수 있도록 지원해주는 pagers의 일종인 less
  • less 명령키
    • b: 한 페이지 위로
    • space: 한 페이지 아래로
    • 위쪽 방향키: 한 줄 위로
    • 아래쪽 방향키: 한 줄 아래로
    • G: 텍스트 파일 맨 마지막으로
    • g: 텍스트 파일 맨 처음으로
    • /문자열: 아래 방향으로 진행하며 입력된 문자열 찾기
    • n: 이전 검색어의 다음 찾기
    • h: 도움말 보기
    • q: 프로그램 종료

심볼릭 링크

  • 대부분의 유닉스형 시스템에서는 하나의 파일에 여러 이름을 부여할 수 있음
  • Why Symbolic Link?
    • foo 파일의 현재 버전이 2.6이고, foo-2.6이라는 파일명으로 저장되어 있음
    • 심볼릭 링크를 하나 생성해서 이것이 foo-2.6 파일을 가리키도록 함
    • 프로그램이 foo 파일을 사용하려고 할 때 실제 foo-2.6 파일을 열 수 있도록 하는 것
    • 만약 foo 파일이 2.7 버전으로 업그레이드 되면?
      • 이전 심볼릭 링크를 삭제하고 foo-2.7 파일을 가리키도록 다시 심볼릭 링크를 지정해주면 해결되는 문제 !

파일과 디렉토리 조작

와일드카드

  • 파일명을 그룹 지정할 수 있도록 지원해주는 특수 문자
  • 와일드 카드
    • *: 모든 문자
    • ?: 모든 하나의 문자
    • [characters]: characters 문자셋에 포함된 문자
    • [!characters]: characters 문자셋에 포함되지 않은 문자
    • [[:class:]]: 지정된 문자 클래스에 포함된 문자
  • 가장 많이 사용되는 문자 클래스
    • [:alnum:]: 모든 알파벳과 숫자 문자
    • [:alpha:]: 모든 알파벳 문자
    • [:digit:]: 모든 숫자
    • [:lower:]: 모든 소문자
    • [:upper:]: 모든 대문자
  • 와일드 카드 사용 예시
    • *: 모든 파일
    • g*: g로 시작하는 모든 파일
    • b*.txt: b로 시작하되 .txt 형식 파일
    • Data???: Data로 시작하면서 뒤에 세 개의 문자만 있는 파일
    • [abc]*: a, b, c로 시작하는 모든 파일
    • BACKUP.[0-9][0-9][0-9]: BACKUP으로 시작하면서 뒤에 세 개의 숫자로 된 파일
    • [[:upper:]]*: 대문자로 시작하는 모든 파일
    • [![:digit:]]*: 숫자로 시작하는 모든 파일
    • *[[:lower:]123]: 파일명이 소문자로 끝나거나 1, 2, 3으로 끝나는 파일

디렉토리 생성

mkdir directory_name
mkdir dir1 dir2 dir3

파일 및 디렉토리 복사

cp item1 item2
# item2라는 파일이 이미 있다면 item1 내용을 그대로 덮어쓰게 되며, 없으면 새로 생성
  • cp 옵션
    • -a: 파일 및 디렉토리뿐만 아니라 소유자 및 권한 정보 등 속성까지 모두 복사
    • -i: 기존 파일을 덮어쓰기 전에 확인 메시지를 보여주는 옵션
    • -r: 디렉토리와 그 안의 내용까지 복사하는 옵션
    • -u: 디렉토리에 없거나 최신 버전인 파일만 복사하기 위한 옵션
    • -v: 복사가 완료되었는지 메시지 보여줌

파일 이동과 이름 변경

  • mv 명령어 사용하여 파일을 이동하거나 파일명 수정 가능
  • mv 옵션
    • -i: 기존 파일을 덮어쓰기 전에 확인 메시지를 보여주는 옵션
    • -u: 디렉토리에 없거나 최신 버전인 파일만 이동하기 위한 옵션
    • -v: 복사가 완료되었는지 메시지 보여줌

파일 및 디렉토리 삭제

  • 리눅스는 삭제를 취소할 수 있는 명렁어가 없음
  • 특히 와일드카드와 함께 rm 명령어를 사용할 때는 주의를 요해야 함!
  • rm 옵션
    • -i: 기존 파일을 삭제하기 전에 확인 메시지를 보여주는 옵션
    • -r: 디렉토리를 완전히 삭제하기 위한 옵션
    • -f: 존재하지 않는 파일은 확인 메시지 없이 무시하라는 옵션
    • -v: 삭제가 완료되었다는 메시지를 보여주는 옵션

링크 생성

하드 링크
  • 하드 링크는 링크를 생성하는 기존 유닉스 방식
ln item link
  • 기본적으로 하나의 파일에는 하나의 하드 링크가 있으며, 이것이 파일에 이름을 만들어주는 것
  • 하드 링크의 약점
    • 파일 시스템 외부에 있는 파일을 참조할 수 없음. 즉 같은 디스크 파티션 파일만 참조 가능
    • 디렉토리 참조 불가
  • 하드 링크를 포함한 디렉토리 목록은 해당 링크가 가리키고 있는 것이 무엇인지 보여주지 않음
  • 하드 링크가 삭제될 때, 링크도 함께 사라지지만 파일 내용은 그 파일의 모든 링크가 삭제될 때 까지 계속 남아있음
  • 하드 링크 파일은 같은 inode를 공유하며, 동일한 파일을 가리키게 됨

심볼릭 링크
  • 하드 링크의 한계를 극복하기 위해 탄생
ln -s file line
  • 참조될 파일이나 디렉토리를 가리키는 텍스트 포인터가 포함된 특수한 파일을 생성
  • 포인터와 비슷한 개념
    • 심볼릭 링크에 편집을 하게 되면 심볼릭 링크가 참조하고 있는 파일도 역시 똑같은 변경이 이루어짐
      • 하지만 심볼릭 링크를 삭제하는 경우엔 그 링크만 삭제되고 파일은 남아있음
    • 심볼릭 링크를 삭제하기 전에 파일을 지우면 링크는 살아있지만 이 링크는 아무 것도 가리키지 않음
  • 심볼릭 링크를 포함하고 있는 디렉토리가 링크를 유지하면서 파일명을 변경하거나 파일을 이동할 수 있도록 허용하기 때문에 상대 경로를 사용하는 것이 바람직함

명령어와 친해지기

명령어란?

  • 명령어는 다음 네 가지 중 하나
    1. 실행 프로그램
    2. 쉘에 내장되어 있는 명령어: shell builtins이라고 하는 다수의 명령어를 내부적으로 지원
    3. 쉘 함수
    4. 별칭: 다른 명령어로부터 우리만의 명령어를 새롭게 정의 가능

명령어 확인

명령어 타입 표시
  • type 명령어는 쉘에 내장된 형식으로 명령어 이름을 입력하면 쉘이 실행하게 될 명령어의 타입을 보여줌
type command
ex) type ls

실행 파일의 위치 표시
  • 실행할 프로그램의 정확한 위치를 파악하기 위해 which 명령어 사용
which ls
-> /bin/ls
  • which 명령어는 오직 실행 프로그램만을 대상으로 함
    • 어떤 builtin이나 별칭에는 동작하지 않음

명령어 도움말 보기

쉘 빌트인 도움말 보기

  • help를 쉘 내장 명령어 이름 앞에 입력하여 도움말 기능 사용 가능
  • 부가적 옵션과 인자 옵션이 무엇인지 알려주는 기능

사용법 표시

  • 명령어 문법과 옵션에 대한 설명을 보여주는 --help 옵션

프로그램 매뉴얼 페이지 표시
  • 커맨드 라인용 실행 프로그램 대부분은 man 페이지라고 불리는 공식적인 프로그램 설명서를 제공
man program
ex) man ls
  • 일반적으로 제목, 명령어 문법 개요, 명렁어 사용 목적, 그리고 명령어 옵션에 대한 설명 정도가 들어있음
  • man 페이지를 표시하는 동안 모든 less 명령의 사용이 가능
  • -k 옵션과 함께 사용하여 검색어에 따라 일치하는 명령어의 man 페이지 목록을 검색 가능
man -k floppy
# floppy라는 내용이 들어간 man 페이지의 이름을 찾아줌

간략한 명령어 정보 표시

  • 특정 키워드에 부합하는 man 페이지에 대하여 그 이름과 한 줄의 간략한 정보를 보여줌

별칭으로 나만의 명령어 만들기

  • 세미콜론으로 각 명령어를 구분하여 한 줄에 하나 이상의 명령어를 입력할 수 있음
  • alias name='string' 형태로 별칭 명령어 생성 가능




'Software Convergence > OS, Linux ' 카테고리의 다른 글

Linux Command Line Guide(2)  (0) 2018.09.10
vimtutor 내용 정리  (0) 2018.09.09
sudo 명령어 수행 안되는 경우  (0) 2018.07.25
Daemon이란?  (0) 2018.07.19
ssh로 서버 간 password 없이 접속하기  (0) 2018.07.17

sudo 명령어 수행 안되는 경우: 'username' is not in the sudoers files


sudo 명령어를 통해 관리자 권한으로 명령을 실행하고자 할 때 아래와 같은 오류 메시지를 만나는 경우가 있을 것이다. 


'username' is not in the sudoers file.  This incident will be reported.

이 문제는 오류 문구 그대로 해당 유저가 관리자 권한을 가지고 있지 않기 때문에 생기는 문제로, 

sudoers 파일의 수정을 통해 해당 유저에게 관리자 권한을 부여하는 것으로 문제를 해결할 수 있다.



  1. 문제 해결을 위해 관리자 권한에 접속한다.
  2. vi/etc/sudoers
  3. 문서 아래로 이동하여 root 아래에 권한 추가를 더해준다.
root 	ALL(ALL)	ALL
userid	ALL(ALL)	ALL



위와 같이, sudo 명령어가 원활하게 작동하는 것을 볼 수 있다.


What is Daemon?

Daemon(데몬)이란 멀티태스킹이 가능한 운영체제에서 사용자에 의해 제어 및 관리되지 않고, 백그라운드 프로세스로 돌며 작업을 수행하는 프로그램이다. 대개 Daemon의 프로세스들은 보통의 Foreground Process의 프로그램들과 구분되기 위해 이름의 끝에 'd' 를 포함하는 관습이 있다.



ex) syslogd, sshd, crond, ...



유닉스 체제의 시스템들은 부팅 시간 때 이같은 Daemon 프로그램들을 작동시키는 경우가 잦은데, 그 이유는 네트워크 요청, 하드웨어 동작 등에 반응하게 하기 위해서이다. 이외에도 앞서 언급한 crond와 같은 Daemon 프로그램들은 schedule된 시간 마다 정해진 일을 수행해야하므로 Background Process로 작동한다.


run Kafka Server without 'Daemon'



run Kafka Server with 'Daemon'


사진을 통해 확인 가능하듯이 Daemon 설정 없이 Server를 구동하면, 서버가 Foreground Process로 돌기 때문에 사용자가 직접 제어해야 하는 프로세스가 된다. 따라서 사용자는 Server를 구동하는 동안 다른 작업을 수행하지 못하게 된다. Server의 구동과 같이 사용자의 제어가 특별히 필요하지 않은 프로세스를 Foreground로 돌리는 것은 불필요한 낭비이다. 


그러나, Daemon 설정을 통해 Server를 구동한다면 Server를 Background에서 돌리며, 사용자는 다른 작업을 수행할 수 있게 되는 편리함을 얻을 수 있다 !


ssh로 서버 간 password 없이 접속하기

ssh란 무엇인가?

SSH란 Secure Shell의 준말로, 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜을 지칭. SSH의 등장 이전에는 telnet을 이용한 원격 접속이 주를 이루었지만, telnet의 보안 문제로 이를 대체하기 위해 SSH가 등장하게 됨


ssh 설정을 통해 서버 간 password-less 한 접속 환경 구성하기

  1. Host Server에서 ssh key를 생성
$ ssh-keygen -t rsa

cf. rsa: 공개키 암호시스템의 하나로, 암호화뿐만 아니라 전자서명이 가능한 최초의 알고리즘. rsa는 두 개의 키를 사용하며, 키란 메시지를 열고 잠그는 상수를 의미

  • 공개키: 모두에게 알려져 있으며 메시지를 암호화하는데 사용
  • 개인키: 암호화된 메시지를 개인이 가진 개인키로 복호화하여 열어볼 수 있음. but, 개인키로 암호화하여 공개키로 복호화하는 역도 성립 가능

  1. Host Server의 Public key를 복사
$ cp id_rsa.pub authorized_keys

  1. .ssh 폴더authorized_keys의 Access permission 변경
$ chmod 755 .ssh
$ chmod 644 authorized_keys 

  1. 만들어진 authorized_keys를 remote server의 .ssh 폴더 아래 복사
$ ssh 서버명 --> 비밀번호 입력한 접속
$ mkdir .ssh
$ exit
$ scp authorized_keys '서버명:/home/user명/.ssh'

  1. Host Server에서 Remote Server로 접속할 때, password 입력 없이 접속 가능해짐


리눅스 시스템의 DNS Server 변경은 /etc/resolv.conf 파일의 수정을 통해 가능하다.


그러나, resolv.conf 파일을 이용한 DNS Server 변경의 경우 시스템이 재시작할 경우, 매 번 초기화되기 때문에 사용할 때 마다 새로이 설정을 해주어야 한다는 단점이 있다.


따라서 resolv.conf의 변경 없이 DNS Server를 바꿀 수 있는 방법을 알아보도록 하자.


먼저, 시스템의 root 권한으로 접속을 한다.

이후, vi /etc/sysconfig/network-scripts/ifcfg-ens32 명령어를 통해 ifconfig 파일에 들어가준다.



ifconfig 파일에 들어오게 되면, DNS Server 설정이 시스템의 IP 주소(혹은 다른 IP 주소)로 되어있는 것을 볼 수 있을 것이다.



이제, 아래와 같이 사용하고자 하는 DNS Server를 추가해준다. 원활한 사용을 위해서는 KT, google의 DNS Server를 사용하는 것이 좋고, 최대 3개의 DNS Server를 등록가능하다. DNS1에서 원하는 도메인을 찾지 못하는 경우, DNS2에서 찾으며 2에도 없을 경우 DNS3에서 찾는 하향식으로 도메인의 서칭이 이루어진다. 아래 그림에서 8.8.8.8이 구글의 DNS Server이며 168.126.63.1이 KT의 DNS 서버이다.



수정을 마친 후, 시스템을 재시작해보자.



재시작 이후, cat을 통해 ifconfig 파일과 resolv.conf 파일을 확인해보니 새로운 수정 없이도 이전 설정이 저장되어 있는 것을 확인할 수 있다.


* resolv.conf가 재시작 이후, 수정되는 문제는 네트워크 매니저 때문으로 시스템이 재시작될 때 마다 network-sciripts 파일을 새로 읽기 때문이다. 이는 네티워크 매니저의 설정 변경을 통해 해결이 가능하지만 위와 같이 ifconfig 파일의 설정 변경으로도 가능하다.


* 실습을 진행한 시스템의 네트워크가 ethernet 형식이기 때문에 다른 사용자와 ifconfig 파일명이 다를 수 있다. 만약 위 파일이 존재하지 않는 경우, ifcfg-'네트워크 타입명'의 파일을 수정하면 된다 !

[root@Server02 hadoop]# yum install gccLoaded plugins: fastestmirror, langpacks
Determining fastest mirrors
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 알 수 없는 오류"


 One of the configured repositories failed (Unknown),
 and yum doesn't have enough cached data to continue. At this point the only
 safe thing yum can do is fail. There are a few ways to work "fix" this:

     1. Contact the upstream for the repository and get them to fix the problem.

     2. Reconfigure the baseurl/etc. for the repository, to point to a working
        upstream. This is most often useful if you are using a newer
        distribution release than is supported by the repository (and the
        packages for the previous distribution release still work).

     3. Run the command with the repository temporarily disabled
            yum --disablerepo= ...

     4. Disable the repository permanently, so yum won't use it by default. Yum
        will then just ignore the repository until you permanently enable it
        again or use --enablerepo for temporary usage:

            yum-config-manager --disable 
        or
            subscription-manager repos --disable=

     5. Configure the failing repository to be skipped, if it is unavailable.
        Note that yum will try to contact the repo. when it runs most commands,
        so will have to try and fail each time (and thus. yum will be be much
        slower). If it is a very temporary problem though, this is often a nice
        compromise:

            yum-config-manager --save --setopt=.skip_if_unavailable=true

Cannot find a valid baseurl for repo: base/7/x86_64


처음 리눅스를 설치한 후, 추가적 프로그램을 yum을 통해 리눅스 내에 설치하고자 할 때, 위와 같은 오류가 뜨는 경우를 볼 수 있다. 이는 자신의 리눅스의 yum repository 문제로 네임서버를 변경해주는 것을 통해 해결해줄 수 있다.



먼저, vi /etc/resolv.conf을 통해 resolv 파일을 vi editor로 수정해주어야 한다.



파일을 열면 위와 같은 모습을 볼 수 있다. 해당 파일에 입력된 nameserver를 KT, google 등의 nameserver로 바꾸어주어 DNS 서버가 원활하게 작동하도록 한다. 최대 세 개까지 네임서버의 지정이 가능하며, 위로부터 연결이 안될 시 아래의 것을 확인하는 방식으로 동작한다. 기본적으로 구글과 KT의 네임 서버를 사용하는 것이 좋다.



* Public DNS server list



 KT olleh DNS 서버 주소 - 168.126.63.1


SK Broadband 기본 DNS 서버 주소 - 210.220.163.82


LG U+ DNS 서버 주소: 164.124.101.2


Google Public DNS 서버 주소 - 8.8.8.8







P.S. 현재 자신의 DNS 서버 확인하는 법


1. yum update 커맨드 통해 최신 목록들의 업데이트


2. yum install dnsutils 커맨드로 DNS 관련 패키지 설치


3. nslookup server 로 현재 자신의 DNS server 확인


* dnsutils가 이미 설치되어 있는 경우, 1, 2번은 건너뛰어도 됨



+ 추가

repository 관련 문제가 생겼을 경우, yum repolist를 통해 yum 이 사용 가능한 repository를 확인하는 습관을 들이자!

local repository가 존재할 경우, 다른 소스 서버로부터 파일을 가져오지 못할 수 있음. 따라서 /etc/yum.repos.d 에 local repository가 있는지 확인하고 삭제해주자!

+ Recent posts