Java/SE2011. 3. 4. 21:56
< Java Beginning >

1. 자바의 역사
    (1) 1991년 : sun사 Green Project에서
                    James Gosling외 기술자들이
                    Oak라는 언어로 제작(가전기기에서
                    사용할 목적)
    (2) 1997년 : jdk 1.1 발표
    (3) 1998년 : jdk 1.2 발표
    (4) 2000년 : jdk 1.3 발표
    (5) 2002년 : jdk 1.4 발표
    (6) 2004년 : jdk 1.5(5.0) 발표
    (7) 2007년 : jdk 6 발표

2. 자바의 특징
    (1) 플랫폼(OS)에 독립적 : 자바가상머신(Java
        Virtual Machine)이 해당 플랫폼마다 따로
        제공되어서, 동일한 실행결과를 보장한다.
    (2) 객체 지향 언어 : 재사용성, 프로그램의
        생산성이 향상
    (3) 멀티 쓰레드를 지원 : Thread는 Process 보다
        작은 단위, 동시 다발적인 작업을 수행할 수 있다.
    (4) 자동 메모리 관리 :
        가비지 컬렉터(JVM에 포함되어 있는 소프트웨어)
        에 의해서 자동관리된다.

3. 용어정리
    (1) 객체(Object) : 모든것이다. Class 를 통해서
                            만들어지는 구현물 (아반떼)
    (2) 클래스(Class) : 객체(Object)를 만들어 내는 틀
                            (설계도, blueprint)
    (3) 속성(Field) : 객체의 속성, 성질, 클래스에 정의
                        되어 있다.
    (4) 메소드(Method) : 객체가 할 수 있는 기능(행위)
    (5) 생성자(Constructor) : 객체가 만들어질때(초기화)
                        호출되는 것
        - 클래스 이름과 동일한 단어 (대문자로 시작한다)
        - 메소드와 비슷한 형태
        - 반환타입이 없다.
        - 하위클래스의 객체가 생성되기 위해서는 먼저
            내부적으로 상위클래스의 생성자가 호출되어서
            부모 객체가 먼저 생성되어야 한다.
            (부모 없는 자식은 없다)
        - 생성자가 하나도 없는 경우 컴파일러가
            기본 생성자를 만들어준다.

4. OOP(Object Oriented Programming)의 특징
    (1) 상속성(inheritance) - Human, Superman, Xman
    (2) 다형성(polymorphism)
    (3) 은닉성(Information Hiding)
    (4) 캡슐화(Encapsulation)

5. 자바의 구조
    (1) package 선언
    (2) import 구문
    (3) class 선언
    {
        (4) 속성(Field)이자 멤버변수(Member Variable)
            선언 및 초기화
        (5) 생성자(초기화)
        (6) 메소드 선언
        public static void main(String[] args)
        {
            실행시 제일 먼저 JVM이 호출하는 메소드
        }
        public void otherMethod(int a)
        {
            this.a = a;
        }
    }

6. 자바의 주석
    (1) // 한줄짜리 주석
    (2) /*
            라인1
            라인2
        */
    (3) /**
            javadoc (API문서를 제작할때 쓰인다)
        */

7. 자바의 변수
    (1) 변수 type에 따라
        <1> 기본형 (primitive type) 변수(8개)
            - 존재 이유 : 실행의 효율성 때문이다.
            - 형변환 방향(오른쪽으로)
byte(1) -> short(2) -> int(4) -> long(8) -> float(4) -> double(8)
                    |
                char(2)
boolean
        <2> 참조형 (Reference type, 객체형) 변수
            - 형변환 방향(위로)
                Object
                    |
                Human
                    |
                Superman
    (2) 유효범위에 따라
        <1> 멤버변수 (member variable = Field)
            - 굳이 초기화를 하지 않아도 된다.
            ex) int i; (선언만 해도 된다)
        <2> 메소드 지역변수(local variable)
            - 반드시 초기화를 해야한다.
            ex) int i = 0;

8. 제한자
    (1) 정의
        클래스, 인터페이스, 변수, 상수, 메소드, 생성자
        앞에 붙어서 기능을 제한하는 keyword
    (2) 종류
        <1> 접근제한자
            public(제한이 없음) > protected(상속관계)
            > default(같은 패키지 안) > private(클래스)
        <2> 소유제한자
            static
            : static 붙으면 class 의 소유
              안 붙으면 객체의 소유
        <3> 수정제한자
            final
            : 붙으면 수정할 수 없게 만드는 제한자
            1) field : 상수가 된다
            2) method : 재정의(overriding) 안됨
            3) class : 상속 안됨
        <4> 추상제한자
            abstract
            1) class : 추상클래스
            2) method : 추상메소드({}가 없는 것)
            - 추상메소드가 1개라도 있으면 추상클래스가
               되어야 한다.
        <5> 기타
            synchronized, transient, volatile, native...

9. 오버로딩과 오버라이딩
    (1) 오버로딩 (overloading)
        <1> 정의
            메소드의 이름은 같은데, 인수의 개수나 type,
            순서가 다른 형태의 메소드로써 이름만 같지
            별개의 메소드인 것을 말한다.
        <2> 조건
            인수(parameter)의 개수나 type, 순서가
            달라야한다.
        <3> 종류
            - 생성자 오버로딩
            - 메소드 오버로딩
    (2) 오버라이딩(overriding)
        <1> 정의
            상속관계가 있는 클래스에서 부모 클래스의
            메소드 내용을 자식클래스에서 재정의하는 것
        <2> 조건
            - 반환타입이 같아야 한다.
            - 인수(parameter)의 개수나 type, 순서가
                모두 같아야 한다.
            - 부모클래스의 오버라이딩될 메소드의
                접근제한자보다 자식클래스에서 재정의하는
                메소드의 접근제한자의 범위가
                같거나 더 커야한다.

10. this, super
    (1) this -  자기 자신(class)의 객체
    (2) super - 부모클래스의 객체

11. 식별자(identifier)
    (1) 정의
        개발자가 임의로 만드는 패키지, 클래스, 메소드,
        변수명 등을 의미
    (2) 규칙 (어기면 컴파일 에러 발생)
        <1> 식별자의 첫문자는 특수문자, 숫자여서는
            안된다. (_, $는 예외)
        <2> 문자와 숫자, 특수문자(_, $)로
            조합할 수 있다.
        <3> 예약어를 사용하면 안된다.
        <4> 길이의 제한은 없다.
    (3) 관례
        <1> 의미있는 단어를 사용한다.
        <2> 클래스와 인터페이스의 첫문자는 대문자
        <3> 단어의 결합으로 되어있을 경우 다음 단어의
            첫번째 글자를 대문자로 하거나 _로 연결한다
            ex) TestClass, getName, set_name
        <4> $문자는 사용하지 않는다.

12. 연산자
    (1) 산술연산자
        +, -, *, /, %
    (2) 증감연산자
        ++, --
    (3) 대입연산자
        =
    (4) 산술 할당(대입) 연산자
        +=, -=, *=, /=, %= ...
    (5) 비트연산자
        &, |, ^, ~(not은 무조건 반대로 0->1 1->0)
    (6) 쉬프트 연산자
        <<, >>, >>>(부호보장X)
    (7) 논리 연산자
        &&, ||, &, |, !
    (8) 삼항(조건) 연산자
        조건식 ? 참일때 : 거짓일때
    (9) instanceof 연산자
        - 형식 :
            Reference Type 변수 instanceof Class 명
        - 앞의 변수가 뒤의 클래스와 상속관계인지를
            알아보는 연산자
13. 조건문(Condition)
    (1) if(boolean 형) {}문
        (body내용에 명령이 한문장이면 {} 생략가능 )
    (2) if(boolean) {} else {} 문
    (3) if(boolean) {} else if {} else {} 문
    (4) switch(값) { case : ... default : } 문

14. 반복문
    (1) for(초기식; 조건식; 증감식) {}
    (2) while(boolean) {}
    (3) do {} while(boolean);

15. 제어의 이동
    (1) break : 블럭({})을 나간다.
    (2) continue : continue 문 이후의 명령을
                실행하지 않고 건너뛴다.
    (3) return : 메소드를 호출한 곳으로 제어권을
                    넘긴다.
   
16. interface(인터페이스)
    (1) 정의 : 명세서이다(골격이다)
                모든 메소드가 추상메소드, 모든 field가
                상수로 구성된 것.
                클래스에 다중 상속이 가능하다.
    (2) 특징
        <1> 인터페이스끼리 다중 상속이 가능하다.
            ex) Inter1 extends Inter2, Inter3
        <2> 클래스에서 인터페이스를 다중상속 가능하다
            ex) InterClass implements Inter1, Inter2
        <3> 형태
            - field에는 public static final 생략 가능
            - method에는 public abstract 생략 가능
        <4> 인터페이스를 구현(상속)하는 클래스에서는
            반드시 메소드를 재정의(overriding)해야 한다.

17. abstract class (추상 클래스)
    (1) 정의
        추상 메소드를 가질 수 있는 클래스
    (2) 특징
        <1> 추상 클래스는 객체를 생성할 수 없다
            (완벽한 설계도가 아니다)
        <2> 하위 클래스가 추상클래스가 아니면
            반드시 추상메소드를 구현(재정의)해야만 한다.
    (3) 추상메소드 : 메소드의 body({})가 없는,
        선언만 되어있는 메소드

18. 배열 (Array)
    (1) 정의 : 같은 타입(type)의 객체 또는 기본형
                자료를 저장하는 저장소로써, 생성될때
                그 크기가 고정되는 저장소
    (2) 생성
        <1> Type[] 변수명 = new Type[저장소크기];
            ex) int[] i = new int[30]
                 int []i = new int[30]
                 int i[] = new int[30]
        <2> Type[] 변수명 = {value, value, value};
            ex) String[] str = {"1", "2", "3"}
                 int[] i = {1, 2, 3}

19. 예외처리
    (1) 예외(Exception)의 정의
        프로그램이 정상적으로 진행되지 못하게 하는
        돌발 상황
    (2) 계층도
        Object
            |
        Throwable
        |            |
    Error        Exception
                |            |
CheckedException    RuntimeException
    (3) 예외처리의 목적
        프로그램 진행시에 발생할 수 있는 상황들을
        정해놓고, 해당 상황 발생시 적절한 조치를
        취해서 프로그램이 정상적으로 작동하도록
        하는 것이다
    (4) 예외처리의 특징
        <1> Exception 은 메소드, 생성자에서 발생한다.
        <2> 발생시킬때에는(던질때에는) throw 라는
            예약어를 사용한다.
            ex) throw new MKException();
        <3> 메소드를 호출한 곳으로 throws 라는
            예약어를 사용해서 Exception 객체를
            넘긴다(또 던진다)
    ex) void main() throws IOException, Exception
        <4> 잡는 방법
            try {
                예외가 던져지는 구문
            } catch(예외클래스 변수명) {
                예외처리 구문
            }
        <5> catch 절(clause)에서 두개 이상의
            Exception 을 잡을 경우 반드시 하위 Exception
            부터 잡아야한다.
            ex) try {
                 }catch(IOException ie) {
                 }catch(Exception e) {}
        <6> finally 절
            try 절과 함께 쓰이며, catch 절의 실행유무와
            상관없이 무조건 실행된다.
            (return 문이 나와도 실행한다.)
        <7> 자동으로 throws 되고, 잡지 않아도 되는 예외
            RuntimeException, Error
            - throws 안해도 되고, 해도 된다.
            - try catch 안해도 되고, 해도 된다.

20. 중첩클래스(Nested class)
    (1) 정의 : 클래스 안에 있는 클래스
    (2) 종류 (static 제한자 유무에 따라)
        <1> static nested class
            ex) Outer.InnerStatic in
                    = new Outer.InnerStatic()
        <2> inner class
            ex)Outer out = new Outer();
                Outer.Inner in
                    = out.new Inner();
        <3> anonymous inner class
            이름이 없는 클래스, 기존의
            클래스(인터페이스)를 클래스 내부에서
            상속받아서 새롭게 정의하는 클래스

21. 주요 클래스
    (1) Object (가장 상위 root class)
        - equals(), hashCode(), toString()
    (2) String (불변 클래스 immutable)
        <1> 한번 생성된 객체의 내용을 연산이나
            메소드의 사용에 의해 변화시킬 수 없다
        <2> 문자열 비교시 반드시 equals 메소드를
            써야한다.
    (3) StringBuffer (가변 클래스 mutable)
        한번 생성된 객체의 내용이 연산이나 메소드를
        통해서 변화한다.
    (4) Math
        상수와 static 메소드만으로 구성

22. Collections Framework
    (1) hierachy (계층 구조도)
        Collection                        Map
        |    |    |                          |
      Set  List  Queue                SortedMap
        |
    SortedSet

    (2) interface
        <1> Collection : 컬렉션 계층구조의 root
        <2> Set : 중복된 요소(element)를 허용하지
                    않는다. ex) 트럼프 카드
        <3> List : 순서가 있는 컬렉션(sequence
                    라고도 한다) 중복허용, 인덱스로
                    각 요소에 접근 가능
        <4> Queue : 우선순위를 가지는 여러개의
                    요소를 가지고 있는 컬렉션
                    FIFO (First In First Out)
        <5> Map : key와 value로 이루어진 것, 중복된
                    key 불가능
       
        // 순서가 있는 계열
        <6> SortedSet : ascending(오름차순)의
                        순서로 요소를 가진다.
        <7> SortedMap : key값을 오름차순으로
                        가진다.
            ex) 사전, 전화번호부
       
        // ETC
        <8> Enumeration : 각각의 요소를 나열된
                        형태로 가지고 있다.
        <9> Iterator : remove가 가능하다.
   
    (3) implementations (구현체들 class)
        <1> Set
            1) HashSet : TreeSet 보다 빠르다
            2) TreeSet : SortedSet 에서 구현, 정렬
        <2> List
            1) ArrayList : LinkedList 보다 빠르다
            2) LinkedList : List 의 부분적으로 요소를
                    추가하거나 삭제하거나 하는 일이
                    많을때 빠르다.
        <3> Map
            1) HashMap : 빠르다.
                            null 키와 null value값을 허용
            2) TreeMap : SortedMap 에서 구현 정렬된다.
            3) LinkedHashMap : 집어넣는 순서로 정렬,
                            거의 HashMap 만큼 빠르다.

        <4> synchronized (동기화) 계열
            1) Vector (List 계열)
            2) Hashtable (Map 계열)
                : null 키, null value 허용 안함.
   
    (4) Collections : 각종 Collection 관련 유틸 클래스

23. Thread
    (1) Process : 컴퓨터 내에서 실행중인 프로그램
    (2) Thread 란?
        한 프로그램내에서 동시에 두가지 일을 수행하는
        것으로 프로세스보다 작은 업무단위이며,
        프로세스의 resource(자원)를 공유하기 때문에
        가볍다는 장점이 있다.
    (3) 생성
        <1> java.lang.Thread 를 상속받는 방법
        <2> java.lang.Runnable 을 구현하는 방법(권장)

        - 실행 : start() 호출하면 JVM이 자동으로
            run() 메소드 실행
    (4) 소멸
        run() 메소드의 실행이 끝나면 terminated된다
    (5) 멀티 쓰레드 (Multi Thread)
        여러개의 쓰레드를 동시에 수행하는 것
    (6) 쓰레드 Life Cycle : ppt 참조
    (7) 동기화 (synchronized)
        synchronized 로 되어있는 곳은 실행중인
        쓰레드가 lock(monitor)를 소유하고 실행이
        끝난 뒤 unlock (monitor를 반환)해 주는 것
        한마디로 한번에 하나의 쓰레드만 실행된다
    (8) 우선순위 (priority) :
        MIN(1), MAX(10), NORM(5)
    (9) wait(), notify(), notifyAll() : wait 폴더 참조

//////////////////// 5.0 변경사항 /////////////////
24. Generics
    (1) 특성
        <1> Type 안정성을 갖춘 컬렉션을
            만들 수 있다.
        <2> 컴파일 시점에 Type에 대한 검증을 한다
    (2) 선언방법
        <1> E : 컬렉션에 저장하고 컬렉션에서
                    리턴할 원소의 타입
            E : element, K : key, V : value, O : Object
            T : Type
        <2> class 나 interface 선언
            ex) public class ArrayList<E> extends
                                    AbstractList<E> {
                    public boolean add(E element)
                    public E get(int index)
                 }
        <3> 메소드 선언(호출)시
            1) 선언 : void list(ArrayList<E> list)
            2) 호출 : x.list(list);
        <4> 인스턴스 생성시
            ex) ArrayList<E> list = new ArrayList<E>();
    (3) Generics의 유형매개변수(Type parameter)
        <1> 사용방법
            1) 일반적인 선언
        public void setHuman(ArrayList<Human> list)
        public <T extends Human> void
                                setHuman(ArrayList<T> list)
            2) wildcard를 사용
                public void setHuman(ArrayList<?> list)
                public void setHuman
                    (ArrayList<? extends Human> list)
        <2> 특징
            1) interface 도 extends로 표현한다.
            2) 일반적으로 wildcard를 쓰는 방법을
                선호하지 않습니다.
                (인자값이 늘어날수록 쓰기 힘들어진다)
        public <T extends Human> void
                        setHuman(ArrayList<T> list,
                        ArrayList<T> list2)
        public void setHuman(
                    ArrayList <? extends Human> list,
                    ArrayList <? extends Human> list2)

25. 확장 for 문 (Enhanced for loop)
    (1) 형식
        for(데이터형 변수명 : 배열이나 컬렉션 객체)
    (2) 특징
        Generics 와 같이 쓰여서 효율적인 Collection
        계열의 루핑이 가능하다.
        ex) ArrayList<Integer> list =
                                new ArrayList<Integer>();
            for(Integer i : list)

26. Autoboxing / Unboxing
    (1) 정의
        <1> Autoboxing : primitive type 변수를
                            Wrapper class 로 자동 변환
        <2> Unboxing : 반대의 경우
    (2) 특징
        오토박싱은 -128~127의 범위에 있는 정수값의
        경우에만 같은 오브젝트로의 리턴을 보장한다.

27. Typesafe enums (타입에 안전한 enum)
    (1) 기존의 열거형 타입은 상수 값만 같으면, 사실상
        열거형 타입의 구분이 없어진다.
        ex)
        interface Num {
            public static final int ZERO = 0;
        }

        interface Language {
            public static final int JAVA = 0;
        }
    (2) if나 switch 를 사용해서 분기작업을 할 수 있다.
    (3) == 나 equals() 모두 쓸 수 있다.
    (4) 열거 타입 그 자체가 타입이다.

28. Varargs (가변인수)
    (1) 여러개의 인수(parameter)를 배열이 아닌
        "..." 으로 처리할 수 있다.
        ex) void getString(String ... names)
    (2) 메소드(생성자) 오버로딩시는 사용하지
        않는 것이 좋다.
        ex) Human(Integer ... i)
            Human(int i, int j)
        new Human(3, 4)
            = new Human(new Integer(3),
                                new Integer(4))

29. static import
    (1) static class, static variable, enum 등의
        값을 사용할때 타이핑을 더 적게 해보자는 의도
        ex) import static java.lang.Math.*;
            import static java.lang.System.out;

30. Annotation (metadata)
    (1) @("at") 표시와 어노테이션 이름으로 표현한다
    (2) BuiltIn(내장) annotation
        <1> Override Annotation
            오버라이드가 되지 않으면 컴파일러에서
            문제를 표시한다.
        <2> Deprecated Annotation
        <3> SuppressWarning Annotation
            컴파일러가 warning(예를 들어서 generics
            를 안쓰면 발생)을 나지 않게 해준다.

31. StringBuilder
    (1) StringBuffer의 unsynchronized version이다
    (2) 멀티쓰레드 환경에서 안전하지 않지만 StringBuffer
        에 비해서 속도면에서 월등하다
    (3) StringBuffer 와 동일한 메소드를 제공한다.
Posted by 햇 님
Java/SE2008. 7. 9. 20:14
OOP(Object Oriented Programming)의 특징
    (1) 상속성(inheritance) - Human, Superman, Xman
    (2) 다형성(polymorphism)
    (3) 은닉성(Information Hiding)
    (4) 캡슐화(Encapsulation)


정리 하면 위와 같다.

일단 상속성은 하나의 큰 개체에서 여러개의 개체들이 파생되는것과 같다
좀 어렵게 들린다면 이렇게 생각해보자

인간 클래스가 있다. 그리고 익히 알다시피 미국 헐리우드의 영웅들인
슈퍼맨 클래스 와 액스맨 클래스가 있다.
슈퍼맨과 액스맨은 (물론 슈퍼맨은 클립톤행성에서 온 외계인, 액스맨은 돌연변이 이지만)
인간 클래스부터 상속을 받아서 만들어졌다.
왜? 대부분의 평범한 (여기서 평범한 이란 머리는 하나요 코도 하나요 콧구멍도 하나요.. 등등.. 외형을 말한다)
인간들과 슈퍼맨과 액스맨은 겉으로는 비슷해 보인다.
여기서 많은 공통점을 찾을수 있을것이다.

이렇듯 세가지의 공통적인 부분은 인간클래스에 있고.. 슈퍼맨과 액스맨은
인간 클래스와 동일한부분에(공통점)  대해서 변수를 만든다거나 행위를 만들어 내는것이 아니라
단지 인간클래스를 상속 받음으로서 인간클래스에서 쓰이는 것들을 다 쓸수 있게되는것이다.

두번째로 일단 생각해보면 슈퍼맨과 엑스맨은 기본적으로 사람의 외형을 가지고 있지만
그들은 사람이 할 수 없는 일들을 해낼수가 있다. 그렇게 하기 위해서 일부 행위들이 변경되고
수치들도 변화하게 되고 추가가 될 수도 있다.
이것이 바로 다형성이다.
상속을 받은 슈퍼맨은 날아다닐수 있게되고, 눈은 보는것 뿐만 아니라 레이져를 쏠수도 있을것이다.
인간이 1초에 1걸음을 걷는다면 슈퍼맨은 100걸음을 걸을수도 있을것이다.
이렇듯 인간과 슈퍼맨은 다른 능력을 가지는데 같은 행위에서 다른 모습을 보일수도 있는것..
말그대로 다형성이 되겠다.

다음으로는 은닉성, 캡슐화 가 되겠다.
이건 더더욱 설명이 쉽겠다.
슈퍼맨은 알다시피 자기자신을 숨겨왔다.. 왜???   자기자신이 인간과 다르다는걸 숨겨야 했다.

그냥 보여주면 안돼????  라고 묻는다면 이렇게 물어보고 싶다..
슈퍼맨과 신문기자인 클락캔트가 같다 라는것을 사람들이 전부 안다면?
1. 일단 영화가 재미가 없다.
2. 그럼 대체 왜 슈퍼맨이 필요해? 그냥 클락캔트로 하지..

여기서 은닉성은 슈퍼맨이 인간인 척 할수 있다는것이다. 반대로 인간은 슈퍼맨인척 할수 없을것이고..
캡슐화는 슈퍼맨에서 비유하자면 슈퍼맨의 능력에 관해서는
슈퍼맨 스스로가 조절이 가능하다는것이다. 캡슐화하지 않는다는것은 슈퍼맨의 능력치를
다른 사람들이 마구 조절이 가능할수도 있다는것이다(상상이 되는가??)

쩝.. 쓰다보니 좀 논란이 될 비유들이 넣어졌지만.. 이해를 쉽게 하고자 쓴것이니..
오해하지말고 비난하지 말아 주시길...  아니.. 욕만 안하고 비평해주시면 감사하겠습니다~ ^^

Posted by 햇 님
OS & TIP/Linux2008. 5. 28. 16:28
 출처 : 모름


1.파일관리


1. cd


- 디렉토리를 변경할 때, 디렉토리를 따로 입력하지 않으면 login한 디렉토리($HOME 또는 '~'로 표시됨)로 이동합니다.


cd . 은 현재 디렉토리이며, cd .. 은 상위 디렉토리입니다.


예) 최상위 디렉토리 / 에서 상위디렉토리 root/ 으로 이동할 때 :


cd /root ( /를 생략해도 무방 )


현 디렉토리root/에서 상위디렉토리에 있는 bin/이라는 디렉토리로 바꿀 때- cd ../bin, 또는 ..없이 그냥 cd /bin으로 해도 무방합니다.


2. ls

- DOS의 dir과 비슷한 명령어인데, 디렉토리명 등을 출력시키며 옵션에 따라 다양한 정보와 함께 출력된다.

옵션

-a: 디렉토리 내의 모든 파일 출력

-i : 파일의 inode와 함께 출력한다.

-l : 파일 허용 여부, 소유자, 그룹, 크기, 날짜 등을 출력한다.

-m: 파일을 쉼표로 구분하여 가로로 출력한다.

-r : 정렬 옵션이 선택되었을 때, 그 역순으로 출력한다.

-s : KB 단위의 파일 크기를 출력한다.

-t : 최근에 만들어진 파일 순서대로 출력한다.

-x : 파일 순서를 세로로 출력한다.

-F : 파일의 형태와 함께 출력한다.

출력되는 파일의 형태는 '*', '@', '|', '=' 등이며, 이것은 각각 실행 파일, 심볼릭 링크, FIFO 소켓을 나타낸다.

-R : 서브 디렉토리의 내용을 포함하여 출력한다.

-S : 파일 크기가 큰 순서로 출력한다.

-U : 정렬하여 출력한다.

-1 : 라인당 한 파일씩 출력한다.

--help : 도움말을 화면상에 나타낸다.

--version : 'ls'의 파일 버전과 함께 출력한다.


예) /home/babo

디렉토리 내용을 최근에 만들어진 파일 순서대로 출력- ls -t /home/babo



3. cp


- 파일을 다른 파일 이름으로 또는 다른 디렉토리로 복사하는 명령어로 도스의 copy와 같은 명령어.


옵션

-a : 가능한 한 원래 파일의 구조, 속성을 그대로 복사한다.

-b : 덮어쓰거나 지울 때 백업 파일을 만든다.

-d : 심볼릭 링크 파일 그대로 복사한다.

(디폴트는 연결된 원래 파일을 복사함).

-f : 같은 파일명을 갖는 파일이 있을 경우, 지운 후 복사한다.

-i : 같은 파일명을 갖는 파일이 있을 경우, 사용자 확인후 복사한다.

-l : 하드 링크를 만든다.

-p : 원시 파일의 소유자, 그룹, 허용 여부, 시간 등을 그대로 복사한다.

-r : 서브 디렉토리를 포함한 모든 파일 복사한다.

-s : 심볼릭 링크를 만든다.

-u : 복사할 파일이 구 버전일 경우만 복사한다.

-v : 복사하기 전에 각각의 파일명을 출력한다.

-x : 파일 시스템이 같을 경우만 복사한다.

-P : 원시 파일이 존재하는 디렉토리까지 포함하여 복사한다.

-R : 디렉토리를 포함하여 복사한다.

-S : 환경 변수 SIMPLE_BACKUP_SUFFIX에 의해 지정된 백업 꼬리말로 백업 파일 생성한다.


예)

/root 디렉토리에서 trial이라는 파일을 /maria라는 디렉토리로 복사하려고 할 때는 #cp trial maria를, maria에 복사되었는지 확인해 보려면, # cd maria # ls를 쳐보면 나온다.



4. mv

(move) - 파일을 다른 파일 또는 디렉토리로 옮길 때 사용. 이 명령은 복사와 같으나 원본이 지워진다.

파일의 이름을 바꿀 때도 사용할 수 있다.


옵션

-b : 지워지기 전에 백업본을 만든다.

-f : 옮겨질 디렉토리에 존재하는 파일이 있으면 덮어쓴다.

-i : 옮겨질 디렉토리에 존재하는 파일이 있으면 확인한다.

-u : 옮겨질 디렉토리에 구 버전의 파일이 있을 경우만 옮긴다.

-v : 옮기기 전에 파일명을 출력한다.

예)

파일을 /maria라는 디렉토리에 옮길려면



5. rm

(remove) - 파일을 지우는 명령으로 주의할 점은 유닉스하에서는 파일들이 지워지면 복구가 불가능하다는 것이다. rm 파일명으로 사용한다.

옵션

-f : 강제로 파일을 지울 수 있다.

-i : 지우기 전에 확인한다.

-r : 서브 디렉토리의 파일까지 지운다.

-v : 파일을 지우기 전에 지울 파일의 이름을 나타낸다.

-R : -r과 같다.

예)

command1.txt란 파일을 지우려면, rm command1.txt

확인해 보려면, ls를 쳐 보면 삭제 되었는지 알 수 있다.



6. mkdir


- 디렉토리를 새로 만들 때 사용.

만약 love라는 디렉토리를 만들려면 mkdir love를 입력하면 된다.


옵션

-p : 지정된 모든 서브 디렉토리까지 함께 생성

-m : mode mode에 해당하는 사용 허가로 디렉토리를 생성한다.

예)

/rootd에서 love라는 디렉토리를 만들려면, mkdir love



7. rmdir

- 디렉토리를 지울 때. rmdir 다음에 디렉토리 이름을 입력하면 디렉토리가 지워진다.

이 부분에서 가장 중요한 것은, 디렉토리 내부에 파일이 남아있으면 지워지지 않으므로 디렉토리를 지우기 전에 반드시 rm을 이용하여 내부 파일을 모두 지우는 것을 명심해야 한다.


옵션

-p : 지우고자 하는 디렉토리의 상위 디렉토리까지 포함하여 지운다.

예)

위에 만든 /love라는 디렉토리를 지우려면, rmdir love

지워졌는지 확인해 보려면 ls를 넣으면 알 수 있다.



8. man ( manual )

- 주어진 명령이나 유틸리티의 매뉴얼을 출력한다.

옵션

-a : 모든 manual page를 출력

-d : 디버깅 정보 출력

-f : whatis와 같음

-h : 도움말 출력

-k : apropos와 같음

-t : groff(troff)를 사용하여 프린트를 위한 형식으로 출력

예)

ls 명령어의 도움말을 보고자 할 때- man ls



9.more


- 주어진 파일의 내용을 한 화면씩 출력시킨다.


옵션

-h : 도움말(help)

- SPACE 또는 - z : 다음 페이지

-RETURN 또는 - 1 : 라인 스크롤

-d 또는 -^D : 반 페이지 스크롤

- q 또는 -Q : 종료 (quit)

- f : 다음 페이지 (forward)

- b 또는 - ^B : 이전 페이지 (back)

- /pattern : 검색

- = : 현재 라인 출력

- ! : 명령어 실행

- ^L : 화면 다시 출력

- f : 현재 파일명과 라인 출력

예)

root/command.txt 파일을 페이지 단위로 출력시키려면 more /root/command.txt



10. less

- more와 비슷한 명령어로 한 페이지씩 문서를 보여준다. 문서의 앞으로도 이동이 가능하다.


옵션

- ? : less에서 사용할 수 있는 명령들에 대한 도움말을 제공한다.

- a : 마지막 라인이 화면에 출력되고 나면 검색을 시작한다.

- c : 필요할 때 전체 화면은 다시 갱신한다.

- C : -c 옵션과 같지만 화면 전체를 지우고 시작한다.

- e : 두번째로 파일의 끝에 도달하면 자동적으로 종료한다.

- E : 파일의 끝에 도달하기만 하면 자동적으로 종료한다.

- i : 대소문자를 구분하여 검색한다.

- n : 행 번호를 추가한다.

- q : 특정 에러가 발생하지 않으면 소리없이 동작한다.

- Q : 결코 아무 소리도 내지 않는다.

- s : 연속되는 공백 라인은 하나의 행으로 처리한다.

- x : 숫자: 수치를 지정해서 탭 간격을 조정한다. 기본값은 8 이다.

예)

man의 내용을 한 페이지 단위로 행번호를 추가하여 출력하려면, man less -n



11. cat


- 파일의 모든 내용을 한번에 화면에 나타나게 한다.

예)

practice라는 파일의 모든 내용을 화면에 출력할 때- cat practice



12. pwd

- 현재의 디렉토리가 어디인지 알려준다.



13. echo

- 주어진 인자를 단순히 화면에 나타나게 한다.

예)

"i love you"를 출력시키려면, echo i love you



14. grep

주어진 패턴을 포함하는 파일의 라인을 출력시킨다.

옵션

-C : 일치하는 문장의 상하 두 라인까지 포함하여 출력한다.

-V : 버전과 함께 출력한다.

-b : Byte 오프셋과 함께 출력한다.

-c : 일치하는 라인의 갯수를 출력한다.

-h : 파일명은 출력하지 않는다.

-i : 대소문자 구분하지 않는다.

-l : 일치하는 내용을 가지는 파일명만 출력한다.

-n : 일치하는 내용을 가지는 라인 번호를 출력한다.

-s : 에러 메시지만을 출력한다.

-v : 일치하지 않는 내용을 출력한다.

-w : 한 단어로 일치해야 출력한다.

-x : 전체 라인이 일치해야 출력한다.

예)

rm이라는이름이 들어간 파일을 ls중에서 찾을 때 - ls | grep rm



15. find

-원하는 파일을 디렉토리를 탐색하면서 지정된 조건에 만족하는 파일을 찾는다. 이름이나, 크기, 날짜, 사용자등의 조건을 지정하여 찾을 수 있다.


-name : 찾고자 하는 파일의 이름을 정하면 된다.

-perm : 파일의 권한 (permission)이 일치하는 것을 찾는다.

-user : 사용자의 ID에 따라서 검색한다.

-atime : 최근 며칠내에 접속한 파일을 검색한다

-newer : 최근에 갱신된 모든 파일을 검색한다.

예)

maria라는 이름을 가진 파일을 찾으려면, find -name maria



16. ls

-lR-현재 디렉토리와 서브 디렉토리의 이름 및 포함되어 있는 파일을 출력시킨다.



17. mount

- cdrom이나 floppy disk를 사용하게 만들어 준다.

floppy mount : -t msdos /dev/fd0 /mnt/floppy

cdrom mount : mount -t iso9660 /dev/cdrom /mnt/cdrom



18. umount (언마운트; unmount)

- 디렉토리와 연결되었던 시디롬이나 플로피 디스크를 분리시켜 주는것을 말한다. 플로피나 시디롬을 다 쓰고 나면 항상 언마운트를 시켜주어야 한다.



19. Mtools

- Mtools는 리눅 스에서 DOS로 통하는 유틸리티의 모음이다.

모든 명령어들은 앞에 m자를 붙인뒤 DOS의 명령어와 같이쓰면 된다.

예를 들면 mattrib, mcd, mcopy, mdel, mdir, mformat, mlabel, mmd, mrd, mren, mtype, mread, mwrite 등이 있으며, 디렉토리를 나타낼 때에는 '\'가 아닌 리눅스의 명령어인; '/'로 지정해 주어야 한다.



20. mcd

- 도스 시스템으로 현재 사용하고 디렉토리를 이동한다.

mcd dos 디렉토리



21. mcopy

- 도스 파일 시스템으로 가거나 도스상의 파일을 복사한다.

옵션

- n : 파일을 덮어 쓸 경우에도 경고하지 않는다.

- v : 안내문을 자세하게 보여준다.

- m : 파일 갱신 시간을 보존한다.



22. 리디렉션 ( redirection )

- 리디렉션이란 어떤 명령을 실행한 후에 생기는 내용물을 사용자가 원하는 곳으로 출력하기 위해 만들어졌는데 표준 입력, 표준 출력, 에러 출력 등의 방향을을 다른 곳으로 바꾸는 것이다.

리디렉션의 기호는 ">"이다. 보통, ">" 을 이용하여 명령의 결과를 파일로 리디렉트시켰을 때 그 파일이 존재해 있었다면 그것을 덮어 쓴다. ">>"를 쓰면 파일을 덧붙여 쓰게 된다.


예)

만약 원하는 내용을 life.txt란 파일로 보내려면, 파일 생성 명령어인 cat을 친 다음, 다음 행에서 부터는 내용을 life.txt라는 곳으로 보내라는 리디렉션 기호 '>'를 친다.

그 다음에 원하는 내용을 쳐 넣으면 된다. 그리고 엔터키를 친 다음,Ctrl+Z>를 친다.

입력한 내용을 확인해 보려면, $ cat life.txt를 친 다음, 엔터키를 치면 볼 수 있다.



23. 파이프라인

- 파이프라는 것은 여러 명령을 함께 사용할 때, 한 명령의 결과가 다른 명령으로 전송되는 통로이다. 명령어를 하나 하나씩 일일이 치지 않고도 한꺼번에 여러가지를 실행할 수 있어 편리하다.

예)

ls화면을 한 페이지씩 출력하려면 ls | more , 중단 하려면 q를 치면 된다.

프로세서 관리


Process 관리

다음은 사용하고 있는 시스템 정보에 관련된 명령어에 대하여 살펴보도록 하겠습니다.


1. ps ( process )

- 현재 진행중인 프로세스에 대한 정보를 출력한다.


2. pstree ( process tree)

- ps 에 의해서 출력되는 프로세스 정보를 트리 형태로 나타낸다.


3. top

- cpu와 메모리를 사용하는 작업들에 대한 시스템 정보를 출력한다.

원래 화면으로 되돌아 가려면 q를 입력한다.


4. arch (architecture)

- 현재 사용하고 있는 cpu의 모델을 출력(i686- 인텔 펜티엄)


5. cal (calendar)

- 현재의 달을 출력해 주는데, cal과 함께 원하는 월과 연도를 숫자를 입력하면 원하는 달 의 달력을 볼수 있다.

-j를 입력하면 율리우스달력을 볼 수 있다.


6. clock

- CMOS 설정 시간을 출력하거나 변경할 수 있다.


7. date

- 현재의 시간과 날짜를 출력한다.


8. df (disk free)

- 하드의 전체 용량 및 남은 용량 볼 때 사용한다.

옵션

-h(human) 사람이 쉽게 알 수 있는 형태인 바이트 단위로 출력한다.


9. du (disk usage)

-각각의 디렉토리와 파일들이 차지하고 있는 디스크 용량을 출력한다.

예) temp2 디렉토리가 차지하는 용량을 보려고 할 때, du temp2


10. free (free memory)

- 현재 사용중인 시스템의 메모리 상태를 출력한다.


옵션

-m(Megabyte) 메모리의 양을 메가 바이트 단위로 출력한다.

-k (Kilobyte) 메모리의 양을 킬로 바이트 단위로 출력한다.


11. hostname

- 자신의 컴퓨터에 부여되어 있는 이름을 출력한다.


12. lsdev (list devices)

- 현재 시스템에 연결되어 있는 하드웨어에 관한 입출력 정보와 IRQ 값 등을 출력한다.


13. quota

- 각각의 사용자들이 사용할 수 있는 디스크의 용량을 나타낸다.


14. rdev (root device)

- 내부에 ramsize, swapdev, vidmode, rootflag의 프로그램으로 구성되어 있다.


15. uname (unix name)

- 사용중인 운영체제에 대한 정보를 출력한다.

옵션

- a(all) 현재 사용중인 운영체제와 커널의 컴파일 정보 등을 출력한다.


16. su

- 현 상태에서 다른 사용자로 다시 login한다. 만약 사용자 id를 입력하지 않으면, root로 login 된다.


17. shutdown

- 시스템을 종료할 때일반적으로 사용되는 명령어이다.

옵션

- t n 옵션 t 뒤에 n 초만큼 후에 경고 메시지 후에 kill 신호를 보낸다.

- h (halt) 완전히 닫는다.

- r (reboot) 종료후 재부팅을 한다.

- f (fast) 빠른 리부팅을 한다 .(파일 시스템 검사 생략 )

- c (cancel) 예약 되어 있는 종료 취소

- k (kidding) 모든 것이 정상이지만, 종료 시간이 되면모든 프로그램이 멈춘다.


18. reboot

- 재 부팅 시키는 것을 말한다.

옵션

- q 현재의 실행프로그램을 종료하지 않고 부팅만 다시 시킨다.


19. kill

- 프로세스 종료하기. 현재 실행중인 프로세스를 강제로 종료시키는데 사용

kill signal ID PID

kill -l

옵션

-2 : 실행 중인 프로세스에게 인터럽트 키 신호를 보냄

-9 : 가장 확실하게 실행 중인 프로세스를 종료시킴


20. tty

- 현재 사용하고 있는 단말기 장치의 경로명과 파일명을 보여줌


21. whereis

- 실제 프로그램이 어떤 디렉토리에 존재하는지 관련된 모든 경로명을 보여줌

예) whereis vi


22. fsck (file system check)

- 파일 시스템의 상태가 올바른지 검사하고, 잘못된 것이 있으면 바로 잡는다.

옵션

- a : 검사도중 발견된 에러를 자동적으로복구한다.

- r : 검사도중 에러가 발견되면 복구 여부를 물어본다.(사실 사용되지 않는다.)

- s : 순차적인 방법으로 검색한다.

- V : 검색중 각종 정보를 자세 하게 보여준다.

- N : 실제로 검사 작업을 하지는 않도록한다.



사용자 관리

1. chgrp

- 파일의 그룹 소유권을 바꾼다.

옵션

-c : 실제로 소유자가 바뀐 파일에 대해서 자세하게 설명

-f : 소유권을 바꿀 수 없어도 에러 메시지를 나타내지 않는다.

-v : 소유권의 이전에 대해서 자세히 기술한다.

-R : 디렉토리와 그 내용 파일들의 소유권을 재귀적으로 모두 바꾼다.

* 파일의 소유자나 슈퍼 유저만이 파일의 그룹 소유권을 바꿀 권한이 있는데,

chgrp + 옵션 바꾸고자 하는 그룹의 이름+ 디렉토리+ 파일 이름

예) /root그룹에 있는 ak이라는 파일을 white라는 그룹으로 소유권을 이전하려면,

chgrp white /root/ak


2. chmod

- 파일의 모드를 바꿀 때 사용하는데 파일의 모드는 권한(permission)을 제어한다.

옵션

-c : 실제로 파일의 권한이 바뀐 파일만 자세히 기술한다.

-f : 파일의 권한이 바뀔 수 없어도 에러 메시지를 출력하지 않는다.

-v : 변경된 권한에 대해서 자세히 기술한다.

-R : 디렉토리와 파일들의 권한을 재귀적으로 모두 바꾼다.

* r(read 읽기), w(write 쓰기), x(execute 실행)의 3가지 권한이 있는데, 각 단위당 2진법으로 표현된다. 따라서 읽기, 쓰기, 실행 등의 모든 권한을 주려면, 4+2+1, 따라서 합계 7이된다.

만약 모든 그룹의 권한을 다 허용해 줄 경우, 777이 된다.


예)

우선 권한을 보기위해, ls -al을 쳐보면 wow 라는 파일이 rw-r--r--로 되어있다는 것을 알 수 있다.

여기서, 첫 번째 3자리는 소유자, 두 번째 3자리는 그룹, 마지막 3자리는 타인에게 허용할 것인지 여부를 보여주는 것이다.

여기서의 소유자는 읽고 쓰기가, 그룹과 타인은 읽기만 허용이 되어있다.

모두가 사용할 수 있게 하려면 777이 된다.


chmod 777 wow

현재의 권한 변환


3. chown

- 파일의 소유권을 다른 사람에게 변경할 때 사용한다.

옵션

-c : 실제로 파일의 소유권이 바뀐 파일만 자세히 기술한다.

-f : 파일의 소유권이 바뀔 수 없어도 에러 메시지를 출력하지 않는다.

-v : 변경된 소유권에 대해서 자세히 기술한다.

-R : 디렉토리와 파일들의 소유권을 재귀적으로 모두 바꾼다.

파일의 소유권을 다른 사람에게로 바꾸는 것은 슈퍼 유저만이 할 수 있다.

예)

root/에 있는 wow라는 파일을 test라는 그룹으로 소유권을 바꿀 때

chown test /root/wow

ll을 쳐서 소유권이 바뀌었는지 확인해 보면 된다.


5. 시스템의 사용자 정보에 대한 명령어

* finger

- 시스템을 사용하고 있는 사용자들의 이름과 주소등 신상 명세를 출력한다.

변경할 때는 chfn(change finger name)을 사용하면 된다.


* id (identification)

- 사용자의 개인 id 와 그룹의 id 번호를 출력한다.


* logname

- 로그인해 있는 사용자의 이름을 출력한다.


* uptime

- 현재의 시간과 로그인 시간의 총합, 평균적인 시스템 사용 현황을 출력한다.


* w (who is logged on and what they are doing)

- 로그인 되어있는 사람과 현재 실행중인 작업의 종류를 출력한다.


* who

- 시스템을 사용하고 있는 사용자들의 이름과 터미널 번호, 로그인 시간 출력한다.


* whoami

- 가상 콘솔 기능을 사용하거나 여러명의 사용자로 동시에 로그인해 있을 때, 현재 시스템을 사용하고 있는 자신이 누구인가를 출력한다.


* adduser

- 사용자를 추가하기 위한 명령어인데 명령어 뒤에 원하는 사용자 명을 써 넣는다.



네트워크

Network


NCI에 IP주소를 설정하는 작업은 보통 X윈도우에서 합니다. 하지만 X윈도우를 사용하지 않는 경우에 네트워크을 설정하려면 명령어로 실행시키는 방법이 있습니다. 그렇게 하려면 X윈도우 상에서 설정했던 네트워크 상태가 저장되어 있는 곳으로 가서 편집하면 됩니다. 리눅스 설치 후 네트워크에 문제가 생기는 경우가 있는데 이는 대부분 네트워크 인터페이스 즉 랜카드의 문제로 인한 경우가 많습니다.


우선 자신의 랜카드가 리눅스에서 지원하는지 확인해야 합니다. 리눅스에서는 /proc 이라는 디렉토리의 내용을 확인해야 합니다. 이 디렉토리는 커널이 사용하는 디렉토리로 시스템 정보, 하드웨어에 대한 정보, 프로세서의 정보가 저장되어 있습니다. PCI를 갖고 있으면 다음과 같은 명령으로 그 내용을 확인하시면 됩니다.


#cat /proc/pci [Enter]

...

Bus 0, device 13, function 0:

Ethernet controller : Hewlet Packard J2585A (rev 0).

Medium devsel. Fast back-to-back capable. IRQ 11.

I/0 at 0xfd00.

Non-prefetchable 32 bit memory at 0xfffdc000.

...


만약 PCI랜카드를 사용하고 있는데도 Ethernet controller:이 나오지 않는다면 랜카드에 문제가 있는 경우입니다. 랜카드의 이름 즉 위에서는 Hewlett Packard J2585A가 없는 경우에는 커널에서 랜카드를 지원하지 않으므로 커널을 업그레이드 하거나 랜카드를 다른 것으로 바꾸어 주면 됩니다.


[1] ping

Ping은 현재 사용하고 있는 시스템이 네트워크로 연결된 원격지 호스트를 인식하고 있는지를 테스트하여 네트워크로 연결되어 있는지의 여부와 접근할 원격지 호스트가 정상적으로 작동되고 있는지 알아봅니다. 따라서 ping의 중요한 기능은 상대편 네트웍을 테스트 할 수 있다는 것입니다.

현재 보낸 패킷과 받은 패킷사이의 통계치를 보여주면 제대로 실행 된것입니다.


[2]ifconfig

Interface 란 NIC(Network Interface Card)를 세팅하는 것입니다.여기서는 ifconfig유틸러티를 사용하여 어떻게 IP address, netmask, gateway등을 설치하는지를 알보도록 하겠습니다.

우선 한텀에서 다음처럼 입력을 합니다.


ifconfig [interface]

ifconfig interface [atype] options | address...


옵션

up : interface를 활성화 시킵니다

down: interface를 비활성화 시킵니다.

address : [aaa.bbb.ccc.ddd]의 모양을 가집니다.


[3]PPP연결하기

리눅스에서 ppp 를 연결하려면 minicom이나 seyon에서 ppp를 구동합니다. ppp를 작동 시킨 다음 minicom이나 seyon을 서스펜드 합니다. 우선 가우나 세연을 설치하여 몇가지 설정을 해야 합니다. 종료시에는 ps명령어로 ppdd의 PID를 확인한 다음 다시 kill 명령으로 프로세스를 중단하면 됩니다. 아래의 명령어를 입력하면 설치할 수 있습니다.


[root@honey /root]#cd /mnt/cdrom/RedHat/RPMS

[root@honey /root]# rpm -Uvh gau* : 가우를 사용할때

[root@honey /root]# rpm -Uvh seyon : 세연을 사용시


이렇게 하여 설치가 끝났으면 control-panel을 이용하여 모뎀을 설정합니다.

[4]LAN 카드 설정하기


*리눅스에서 기본 정보 파일은 /etc/sysconfig 디렉토리에 있습니다. 다음의 과정을 하나하나 실행하면서 명령어를 이용하여 네트워크를 설정해 보도록 하겠습니다.

NETWORKING=yes

FORWARD_IPV4=no

HOSTNAME="honey.linux.co.kr"

DOMAINNAME=linux.co.kr

GATEWAY=210.127.236.254

GATEWAYDEV=eth0


NETWORKING부분에서는 네트워크를 활성화 할 것인지를 입력하는 부분으로 작동시키려면 YES를, 그렇지 않으면 NO 를 입력합니다. HOSTNAME 부분에는 호스트 이름을 Primary hostname + domain을 연결하여 따옴표로 묶어줍니다. DOMAINNAME에는 도메인 이름을 적고, GATEWAY부분에는 게이트 웨이의 IP주소를 써 넣으면 됩니다. GATEWAYDEV에는 게이트웨이로 나갈때 사용하는 네트워크 장치명을 적으면 됩니다.


*리눅스에서 네트워크 인터페이스 설정은 다음의 디렉토리 안에 있습니다.


cat/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"

BOOTPROTO=none

BROADCAST=210.127.236.255

NETWORK= .0

NETMASK="255.255.255.0"

IPADDR="210.127.236.93"

USERCTL=no

ONBOOT =no


DEVICE란에는 장치를 적어주고,NETWORK에는 네트워크 주소를 적어주고, Broadcast에는 브로드캐스트 주소를 넣어주는데, 브로드케스트 주소는 255를 사용합니다. ONBOOT는 부팅도중 자동으로 네트워크 인터페이스가 작동할 것인지의 여부를 결정하는 것이고,BOOTPROTO는 네트워크 인터페이스가 작동할 때 IP주소를 받아오는 방식을 결정하는 것입니다.


*다음은 도메인 네임을 서버에 등록하는 절차입니다. DNS를 사용하려면 DNS의 서버 IP주소를 등록시켜 주어야 하는데, 3개까지 가능합니다. 다음은 일반적인 resolve.conf파일입니다.


search honey

nameserver 210.127.236.93


search는 검색할 도메인 주소를 입력하면 되는데 사용자가 속한 Domain의 ID를 써 넣으면 됩니다. nameserver는 제가 속해있는 도메인인 linix.co.kr를 관장하는 DNS서버의 IP주소를 적어 넣은 것입니다.


   


패키지 관리

RPM으로 패키지 관리하기


레드헷 리눅스의 사용자가 크게 증가하게 된 한가지 이유는 아마도 RPM이 아닌가 싶습니다.


RPM(RedHat Package Manager)은 기존의 리눅스 배포판들보다 훨씬 편리해진 설치환경을 가지고 있었습니다. 기존의 리눅스 배포판들은 단순히 tar 포맷으로 묶여 있는 실행 파일을 복사하거나 소스 코드를 컴파일하는 방법을 사용해서 필요한 프로그램을 설치하거나 삭제하는 방법을 사용했습니다.


그래서 시스템에는 설치된 프로그램의 수가 많아지고, 특정한 버전의 라이브러리에 프로그램이 의존할 경우, 사용자 자신이 프로그램들을 유지하고 관리하는데 많은 문제가 있었습니다. 그리고 이미 설치되어 있던 프로그램이더라도 실수로 다시 설치하면 기존의 프로그램이 생성한 파일들이 모두 삭제되는 일이 발생할 수도 있었습니다.

또한 하나의 프로그램을 삭제하기 위해서는 그 프로그램에 관계된 프로그램과 관련 파일들을 사용자가 모두 알고 있어야만 완전히 삭제할 수 있다는 맹점을 가지고 있었습니다.


이처럼 설치하고자 하는 프로그램을 찾는 것부터 설치하는 것 까지 어려움 투성이었습니다. 하지만 레드햇리눅스에서는 RPM패키지와 X윈도의 제어판을 이용해 쉽게 프로그램을 설치할 수 있습니다. RPM은 레드햇 사에서 만든 패키지 관리 도구로 리눅스 시스템을 패키지 형식으로 관리할 수 있게 해주는 관리 도구입니다.


RPM은 누구나 사용할 수 있는 개방된 패키징시스템으로 만들어져 있으며, 디스트리뷰션을 인스톨할 때는 물론, 소프트웨어를 인스톨할 때나 버전업, uninstall 할때에도 많은 도움이 됩니다.

RPM의 특징은 특정한 기능을 가진 일련의 파일과 프로그램들을 묶어 쉽게 설치할 수 있게 해 줍니다.


뿐만 아니라, RPM에서는 각 패키지가 어떤 이름의 파일을 어느 디렉토리에 인스톨하였는지, 그 패키지를 이용하기 위해서는 어떤 파일이 필요한지에 대한 정보를 관리하고 있습니다. 예를 들면 다른 패키지가 이용하는 라이브러리를 가진 패키지를 언인스톨할 수 없습니다.


1. RPM 파일명 분석하기

RPM 패키지 파일에는 파일이름이 '.src.rpm '으로 끝나는 소스패키지와 '.i386.rpm'이나 '.noarch.rpm' 등으로 끝나는 바이너리 패키지로 구별할 수 있습니다. 소스 패키지는 프로그램 소스파일 등이 포함된 패키지로, 바이너리 패키지를 작성하기 위해 사용합니다. 한편, 바이너리 패키지에는 컴파일, 링크 완료 실행파일이 포함되어 있어, 이것을 인스톨하면 일일이 소스파일을 컴파일하지 않고, 소프트웨어를 실행할 수 있습니다.


RPM 파일은 크게 4개의 부분으로 이루어져 있습니다. 먼저 (패키지이름), (패키지버전), (배포판에서 가지는 자체 버전), (설치될 시스템)이 RPM 앞에 붙여지게 되어 있습니다.

다음의 RPM파일명을 분석해 보도록 하겠습니다.


myth-1.2.3-4.i386.rpm


RPM 패키지 이름에서 - 는 각 필드를 구분하는 것입니다.

우선, 맨 앞부분의 myth 는 패키지의 명칭으로 가장 기본적인 것입니다.

패키지이름은 인스톨 후 조회나 언인스톨할 때 사용되는 이름입니다. 패키지 명칭에서 - 는 각 필드를 구분하려는 것으로, 이를 없애면 안됩니다.

두번째 1.2.3 은 패키지의 버전입니다. 이것은 프로그램 버전과 일치하는 것입니다.

세번째 의 4 는 패키지의 릴리즈 번호입니다.

즉 배포판에서 가지는 자체 버전으로, 이 패키지가 몇번째로 만들어진 것인지를 나타냅니다. 똑같은 프로그램으로 버전이 같다고 해도 이전에 만든 패키지를 다시 재 패키징을 하였다면, 뭔가 변화가 있고 릴리즈 번호를 올리게 됩니다.

네번째의 i386 은 어떤 시스템에서 쓰이는것인지를 나타내는 것입니다.

i386 이라면 당연히 PC 계열을 나타내는 것이고 sparc 이라면 스팍 리눅스용, alpha 라면 알파 리눅스용일것입니다. (현재 레드햇은 이 세개의 시스템용으로 나옵니다.) 이 네번째 필드가 src 라고 적힌것이 있는데 그것은 소스 RPM 입니다. 바이너리 패키지를 만들기 위해 필요한것입니다.

마지막의 rpm은 소위 말하는 확장자입니다. RPM 패키지라는것을 나타내 줍니다.

버전번호와 릴리즈번호가 독립되어 있으므로, 새로운 패키지가 나왔을 때도 소프트웨어 자체가 버전업된 것인지 아니면 패키지 구성만 변한 것인지 파일명으로 알 수 있습니다.

또 버전번호나 릴리즈번호에는 숫자 이외에 문자를 포함해도 됩니다.


2. RPM 명령으로 설치하기


1. 파일 설치하기

RPM 패키지의 설치와 제거는 아주 간단합니다. 보통 다음과 같은 식을 입력하면 설치가 됩니다.


rpm -i (rpm패키지파일이름)


위와 같은 방식을 응용하여, 설치되는 모습을 확인하고자 할 때는 다음과 같은 명령어를 이용하면 됩니다.


rpm -ivh (rpm패키지파일이름)


이와 같이 입력하면, 설치 되는 모습이 화면상에 # 마크로 표시 될것입니다.

하지만, RPM 으로 패키지를 설치할 때는 사실 위의 명령보다는 -Uvh 옵션을 사용하는 습관을 익히는것이 좋습니다.


rpm -Uvh (rpm패키지파일이름)


이 명령을 사용한다면, rpm은 이 패키지의 이전 버전이 설치 되었는지를 보고, 이미 설치가 되어 있다면 업그레이드를 할 것입니다.

그냥 -i 또는 -ivh로 설치한다면 이전 버전의 같은 패키지에 대한 정보는 사라지지 않을 것이고, 또한 이전의 설정파일도 백업되지 않습니다. 따라서, 되도록 rpm - Uvh를 사용할 것을 권장합니다.


2. 설치 위치 알아보기

설치를 한 후, 파일들이 어느 디렉토리에 있는지 알아야 한다거나, 혹은 자신의 컴퓨터에 현재 어떠한 프로그램이 설치되어 있는지 알고 싶다면 다음과 같은 명령을 사용하면 됩니다.


rpm -qa | more


'-q' 옵션은 그 파일에 대한 정보를 알아내기위한 옵션이고, 'a' 옵션은 모든 파일에 대해 적용하라는 의미입니다. 이 명령을 수행하면 자신의 컴퓨터에 설치되어 있는 모든 프로그램의 목록이 페이지 단위로 나열되어 나옵니다.


3. 간략한 정보 보기


하나의 패키지에 대한 간략한 정보를 알아보려면 다음과 같이 입력하면 됩니다. 이렇게 하면, 패키지에 대한 설명이 나타납니다.


rpm -qi (rpm패키지파일이름)



4. 파일 정보 보기

텍스트가 길게 표시되는데 파일명과 버전번호, 패키징한 사람, 프로그램에 대한 설명 등이 나옵니다. 이번에는 이 프로그램의 파일에 대한 상세한 정보를 알아보기 위해 다음과 같이 입력해 봅시다.


rpm -ql (rpm패키지파일이름)


그러면 이 패키지에 포함된 파일들이 어떠한 것이 있는지 내용을 자세하게 보여줄 것입니다.


5. 프로그램 제거하기

파일에 대한 권한과 어느 디렉토리에 있는지에 대한 정보가 포함됩니다. 마지막으로 설치한 프로그램을 제거해 보겠습니다.


rpm -e (rpm패키지 이름)


위와 같이 입력하면 쉽게 제거됩니다. 물론 프로그램을 제거할 때는 패키지의 의존성에 주의해서 신중히 생각한 후 행동에 옮겨야 할 것입니다.

위에서 사용된 명령어 외의 명령어를 설명하자면 다음과 같습니다.


rpm -qf (rpm파일이름) 특정한 파일이 포함되어 있는 패키지를 확인해 볼 때

rpm -V (rpm패키지 이름) 시스템에 설치된 패키지를 검증할 때

rpm -Va 시스템에 설치된 패키지들을 모두 검증할 때

(실수로 몇 가지 파일들을 지웠는데, 어느 것을 지웠는지 확신할 수 없다. 전체 시스템을 점검해 보고 어떠한 파일이 빠져 있는지 살필수가 있다.)

rpm -Vp (rpm패키지파일이름) 시스템에 설치할 때 사용한 RPM 파일을 이용해서 해당 패키지를 검증할 때


* * 위의 과정 외에 rpm 실행모드에 관한 명령어는 다음과 같습니다


rpm --help 도움말을 출력하고자 할 때

rpm--showrc 설정사항을 출력하고자 할 때

rpm--version 버전을 출력하고자 할 때


* * 그외 몇가지 부수적인 옵션이 있는데 여기서 설명하도록 하겠습니다.

이 부수적인 옵션들은 설치 또는 업그레이드 또는 제거 옵션뒤에 붙이게 됩니다.

(제거 옵션에서는 --nodeps , --noscripts , --test 만을 사용합니다.)


예) rpm -e --nodeps (삭제할패키지이름)


--nodeps : 의존성을 무시하고 설치한다.

가장 많이 겪게 되는 문제로 RPM 에서는 어떠한 패키지가 깔려 있지 않으면, 그것에 영향을 받는 패키지는 설치하지 못하는 경우가 있다.

이 때 사용하는것이 --nodeps 이다.


--force : 강제로 설치 하는 것이다.

패키지 설치시 현재 패키지에 포함된 파일이 이미 다른 패키지에 의해 설치 되어 있을때, 이들이 충돌을 할 경우 에러가 발생한다. 하지만, 이 옵션으로 설치가 가능하다. 이 옵션은 이미 있는 파일은 덮어 쓰지 않는다. 이미 있는 파일마저 덮어 쓰려면 --replcaefiles를 사용하면 된다.


--oldpackage : 만약 업그레이 할 패키지가 이미 설치되어 있는 패키지보다 오래된 버전일 경우에는 업그레이드를 진행시킬 수 없다. 그래도 불가피하게 설치를 진행시켜야 할 경우, 이옵션을 이용하여 강제로 설치할 수 있다.


--percent : 패키지 파일을 설치하는것을 퍼센트로 표시해준다.


--replacepkgs : 이미 같은 패키지가 설치되 있더라도 다시 설치한다.


--replacefiles : 이미 설치된 다른 패키지의 파일을 덮어 쓰면서라도 설치한다.


--root : 디렉토리 와 디렉토리를 마치 / 처럼 생각하고 설치를 한다.

즉 "--root /tmp" 라고 한다면 /tmp 가 / 인 것으로 생각하고 그 이하로 설치하게 될것이다. 한가지 문제가 있다면 이 명령을 사용하면 RPM 정보를 기록하는 파일을 지정한 디렉토리 및 에서 찾게 된다.


--test : 패키지를 실제로 설치하지는 않고 충돌이나 의존성 문제가 있는지만을 검사한다.


--noscripts : 스크립트를 실행하지 않는다.

(레드햇 패키지에는 4개의 스크립트가 들어간다. 설치 전후, 제거 전후 이렇게 4개이다.)


--excludedocs : 문서 파일은 설치 하지 않는다.


rpm


1. 파일 설치하기

설치 : rpm -i (rpm패키지파일이름)


설치되는 모습을 확인하고자 할 때

rpm -Uvh (rpm패키지파일이름)


설치를 한 후, 파일들이 어느 디렉토리에 있는지 알아야 한다거나, 혹은 자신의 컴퓨터에 현재 어떠한 프로그램이 설치되어 있는지 알고 싶을 때

rpm -qa | more


하나의 패키지에 대한 간략한 정보를 볼때

rpm -qi (rpm패키지파일이름)


파일에 대한 상세한 정보를 알아볼 때

rpm -ql (rpm패키지파일이름)


특정한 파일이 포함되어 있는 패키지를 확인해 볼 때

rpm -qf (rpm파일이름) 


시스템에 설치된 패키지를 검증할 때

rpm -V (rpm패키지 이름)


시스템에 설치된 패키지들을 모두 검증할 때

rpm -Va


시스템에 설치할 때 사용한 RPM 파일을 이용해서 해당 패키지를 검증할 때 

rpm -Vp (rpm패키지파일이름)





sort

sort 는 한 파일의 라인을 배열하거나 재배열한다. 가장 간단한 형식에서, 필요한 것은 sort에 파일명을 주는 것이다.

sort names


파일 몇 개를 하나의 정렬된 파일로 결합 할 수 있다.

세 파일에 든 모든 명단을 알파벳순으로 names.all 이란 파일에 넣는다.

sort names.1 names.2 names.3 > names.all




tar fiees

마그네틱테이프에 파일을 복사하고 마그네틱테이프에 서 files이라는 이름의 파일을 추출

-c 복사할 새 파일의 새 테이프 생성

-x 마운트된 테이프에서 파일을 추출

device 아카이브로 /dev/mt0 (테이프)가 아닌 디바이스 지정

block 2에서 20사이의 블록킹 팩터 지정






 


 


편집기

[1] 시작


vi의 실행은 한글 환경에서 vi를 입력하면 되고, 콘솔모드에서 한글을 다루려면, han을 먼저 입력한 뒤, vi를 입력하면 됩니다. vi를 실행시키는 방법은 간단합니다. 셸상에서 'vi'라고 입력하고 Enter 키만 누르면 된다. 그러면 새로운 문서를 편집할 수 있는 환경이 만들어 집니다.


예) >vi

기존의 문서를 편집하고자 할 때에는 파일의 이름을 구체적으로 명시합니다.

예) >vi file1

지정한 파일의 내용을 읽기 전용으로 열어서 볼 때는 다음과 같이 명시합니다.


예) >vi -R file

>view file


[2] vi의 세가지 모드


이렇게 vi를 실행시키면, 검은색 화면 첫행에 커서만 깜박거리고 있을 것입니다.

"어? 왜 메뉴가 없지?"

처음 vi를 사용하는 분이라면 아마 이런 질문을 하게 될 것입니다. 결론부터 말하자면 vi에는 메뉴가 없다. 필요한 명령어는 전부 외워서 적용해야 합니다.

도스나 윈도에서 사용하던 편집기에서는 일단 편집하고자 하는 파일에 내용을 입력하다가 편집 명령을 이용할 때에는 화면의 메뉴를 클릭, Ctrl이나 Alt와 같은 특수키를 사용했을 것입니다. 하지만 vi에서는 메뉴라는 것이 없이 상태를 전환할 수 있는 다른 방법을 제공한다는 차이점을 가지고 있습니다. 처음에는 이러한 방법이 어렵게 느껴질지 모르지만, 익숙해지다 보면, 오히려 이러한 방법이 더 편리하다는 것을 알게 될 것입니다.


그렇다면 vi명령어는 어떻게 구성되어 있을까요?

vi명령어는 다음과 같이 입력 모드, 명령 모드, 콜론 모드(ex 모드) 크게 세가지로 분리됩니다.


① 입력 모드 - i, a, o, I, A, O를 누른 후 텍스트를 입력할 수 있는 상태

② 명령 모드(Esc모드) - ESC키를 누른 상태

③ 콜론 모드(Ex모드) - ESC키를 누르고, :(콜론)을 입력한 상태


그리고, 이러한 기본적인 모드들을 다른 편집기의 활용과 비교해보자면, 다음과 같습니다.


① 입력 모드 - 다른 편집기에서 타이핑을 하여 파일의 내용을 입력하는 과정

② 명령 모드 - 다른 편집기의 편집(Edit) 메뉴에서 제공하는 복사(Copy), 붙이기(Paste),삭제(Delete) 등의 편집 기능의 활용

③ 콜론 모드(ex 모드) - 다른 편집기의 파일(File) 메뉴에서 수행하는 열기(Open), 저장 (Save), 다른 이름으로 저장(Save as) 등의 명령 수행


vi는 실행될 때 명령 모드에서 시작하고, 실행을 종료할 때에는 콜론 모드에서 종료 명령을 수행합니다. 또한 vi는 대문자와 소문자 구분을 확실히 해두어야 한다는 것을 유념합시다.

자. 이제 그림을 통해 이러한 세가지 모드를 구체적으로 살펴보도록 합시다.


(1) 입력 모드


글자를 입력하기 위해서는 입력모드로 가야하는데, 'i'를 입력하면, 하단에 --INSERT--가 나오면서, 글자를 입력할 수 있는 입력모드로 바뀝니다.

입력 모드로 들어가는 대표적인 방법은 i 키를 누르는 것이지만, 이외에도 몇 가지 방법이 더 있습니다. 이렇듯 다양한 종류의 글 삽입 방법을 만들어놓음으로써 키보드 타이핑 횟수를 최대한 줄일 수 있는 이점을 지닙니다. 이것은 모드 방식 편집기의 특성일 수도 있고, 유닉스 프로그래머들의 독특한 문화일 수도 있겠지요.


- i : Insert, 현재 커서의 위치에 글자를 삽입

- I : Insert, 커서가 있는 줄(line)의 맨 앞에 글자를 삽입

- a : Append, 현재 커서 위치의 다음 칸에 글자를 추가

- A : Append, 커서가 있는 줄(line)의 맨 뒤에 글자를 추가

- o : Open line, 현재의 줄 다음에 새로운 줄을 삽입

- O: Open line, 현재의 줄 앞에 새로운 줄을 삽입


위의 경우 중 i의 예를 들면 아래 그림과 같습니다.

vi 파일명 으로 문서작성 형식으로 들어가 i를 누른 후, 아래 쪽에 INSERT표시가 생긴 후 글을 입력시킨 형태입니다.

일단, 입력 모드로 전환되면, 커서의 현재 위치에서 입력 명령에 따라 여러 가지 내용을 입력할 수 있습니다. 영/한 변환은 Shift+Spacebar를 입력하면 됩니다.

아직까지는 단순히 글을 치고 Enter 키를 이용해 줄을 바꾸는 일밖에 할 수 없습니다. 화살표 키를 이용해 커서의 위치를 바꾸어 입력하는 것은 가능합니다.

편집은 대부분 명령모드 상태에서 이루어 집니다.



(2) 명령 모드


입력 모드에서 명령 모드로 다시 전환하려면 Esc 키를 누르기만 하면 됩니다. ESC 키를 누르고 문자를 입력하려고 하면 비프음만 날 뿐 입력은 되지 않을 것입니다.

리눅스에서는 명령모드가 따로 있습니다. 명령모드는 편집모드라고도 하는데, 글을 입력시키는 방법이 아닌 수정과 편집을 할 수 있는 상태임을 기억해 두어야 합니다. 즉, 명령모드에서는 복사,삭제, 붙이기. . .등의 작업이 이루어 집니다. 또한, 입력모드를 통해 삽입 등 잘못된 명령을 내렸을 때 'u'라는 명령어를 통해서 Undo, 즉 복구가 가능하게 할 수 있습니다.


(3) 콜론 모드


명령모드에서 콜론 모드로 전환하려면 ':'명령을 실행시키면 됩니다. 콜론 모드는 vi에서 사용할 수 있는 명령어들을 이용하는 곳입니다. 윈도우 환경에서라면 메뉴 바와 같은 역할을 한다고 볼 수 있습니다. 파일을 저장하거나 vi를 종료하는 등의 일을 수행할 수 있습니다. 콜론 모드로 들어가려면 Esc를 누른 후 ":"를 누르면 됩니다. 콜론 모드에 들어가게 되면 화면 아래쪽에 ':' 표시가 나타나게 되며, 여기서 원하는 작업에 해당하는 명령을 입력하고 Enter 키를 치면 됩니다. 아래 그림에서 아래쪽에 ":wq"라는 표시가 눈에 뜨일 것입니다. ":" 이 상태가 바로 앞에서 말한 콜론모드의 형태입니다.


[3] 종료


종료 명령은 앞에서 잠깐 콜론 모드에서 이루어 집니다.

편집한 데이터를 저장하고 종료하려면, wq(Write and Quit)를 입력합니다.


예) :wq

저장하지 않고, 강제로 종료하려면, q!(Quit!)를 입력합니다.


예) :q!

vi를 끝내지 않고, 현재 작업 중인 내용을 저장만 하려면, w를 입력합니다.


예) :w


:wq에 대한 예


[4] vi명령어의 간단한 문법


(반복횟수)(편집명령)(반복횟수)(커서이동명령)

현재의 위치에서, 커서이동명령의 내용순서대로, 문서의 임의위치로 이동하는 순간, 편집명령어의 내용이 수행됩니다.


[5] 정규표현식의 특수 기호들


- . : 한글자를 대표하는 기호 (dos 의 ? 와 동일)

- * : 여러개의 문자를 동시에 대표하는 기호

- ^ : 줄의 처음시작

- $ : 줄의 맨끝

- % : 처음줄부터 끝줄까지

- \ : 특수한 기호들이 가지는 뜻을 없앨때 사용

- \< : 단어의 시작과 대응합니다

- \> : 단어의 끝과 대응합니다

- [^] : 묶여진 문자를 제외한 아무것이나 대응합니다

- \ : 이어지는 기호를 문자 그대로 해석합니다

- [ ] : 일정한 제한을 두어 글자를 대표하고자 하는 기호

- [a-z] : a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z 를 대표

- [A-Z] : A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z 를 대표

- [AB] : A 또는 B

- p[aeiou]t : pat, pet, pit, pot, put 를 대표

- [0-9] : 0,1,2,3,4,5,6,7,8,9 를 대표



[6] 명령 모드(ESC 모드)에서 사용되는 몇가지 기호

- 다음과 같은 기호는 기본적인 것으로 필수적으로 알아두시기 바랍니다.

- G : 화일의 맨끝으로

- ^ : 현재줄의 맨앞 (빈칸무시)으로

- 0 : 현재줄의 맨앞으로

- $ : 현재줄의 맨 뒤로

- % : 짝을 이루는 기호 확인

- w : 다음 단어로

- b : 이전 단어로

- e : 현재 단어의 끝 글자


[7] 커서 움직이기

- 명령모드 상태에서 커서를 마음대로 움직일 수 있습니다.


① 글자 단위 이동

- h : 커서를 한칸 왼쪽으로 이동하는 명령

- j : 커서를 한줄 아래로 이동하는 명령

- k : 커서를 한줄 위로 이동하는 명령

- l : 커서를 한칸 오른쪽으로 이동하는 명령

- Backspace : 커서를 한칸 왼쪽으로 이동하는 명령

- Space : 커서를 한칸 오른쪽으로 이동하는 명령


② 줄 단위 이동 - ^ : 빈칸을 무시하고, 커서를 현재 줄의 첫글자로 이동하는 명령

- 0 : 커서를 현재줄의 처음으로 이동하는 명령

- $ : 커서를 현재줄의 맨끝으로 이동하는 명령

- % : 짝을 이루는 기호 확인하기

- + : 커서를 다음줄의 처음으로 이동하는 명령

- - : 커서를 이전 줄의 처음으로 이동하는 명령

- Return : 커서를 다음줄의 처음으로 이동하는 명령

- n| : 현재줄의 n 번째 열로 (n은 임의의 숫자)

- H(Home) : 커서를 화면상에 처음줄로 이동하는 명령

- M(Middle) : 커서를 화면상에 중간줄로 이동하는 명령

- L(Last) : 커서를 화면상의 마지막줄로 이동하는 명령

- nH : 화면상의 처음줄로부터 n 줄 밑으로 이동(n은 임의의 숫자)

- nL : 화면상의 마지막줄로부터 n 줄 위로(n은 임의의 숫자)

- g(Go) : 파일의 마지막 줄로 이동하는 명령

- nG : n번째 줄로 건너뛰는 명령

- gg : 맨 마지막줄로

- ngg : n 번째줄로

- n : n 번째줄로


③ 단어 단위 이동 - w(word) : 커서를 다음단어의 첫글자로 이동하는 명령

- b(back) : 커서를 이전단어의 첫글자로 이동하는 명령

- e(end) : 커서를 다음단어의 끝 글자로 이동하는 명령

- E : ?, ! 등 구두점을 무시하고, 현재 단어의 끝으로 이동

- ) : 다음 문장의 시작으로 이동하는 명령

- ( : 이전 문장의 시작으로 이동하는 명령

- } : 다음 문단의 시작으로 이동하는 명령

- { : 이전 문단의 시작으로 이동하는 명령

- ]] : 다음 섹션의 시작으로 이동하는 명령

- [[ : 이전 섹션의 시작으로 이동하는 명령


④ 화면단위 이동

- vi에는 스크롤 기능이 없는 대신 화면 단위로 이동하는 명령어들이 있습니다.

- Control + F (Forward) : 한화면 밑으로 이동

- Control + B (Backward) : 한화면 위로 이동

- Control + D (Down) : 반쪽화면 밑으로 이동

- Control + U (Upon) : 반쪽화면 위로 이동

- Control + E : 커서는 현재위치 그대로 화면만 한줄씩 위로 이동

- Control + Y : 커서는 현재위치 그대로 화면만 한줄씩 아래로 이동

- z : 커서의 위치와 함께, 화면상의 맨위로

- nz : n번 라인을 화면상의 맨위로

- z : 커서의 위치와 함께, 화면상의 중간으로

- z- : 커서의 위치와 함께, 화면상의 맨아래로


※ - Control + G : 현재 편집하고 있는 문서의 상태를 알 수있다

- Control + L : 화면 재표시 (글자가 깨졌을 경우; 윈도의 F5와 비슷)

- Control + R(edraw) : 화면 재표시 (글자가 깨졌을경우)


[8] 편집하기

① 복사, 붙이기, 합치기

- y (Yank) : 복사하기

- yy : 한 줄 전체의 내용을 복사한다

- 2yy : 두줄복사

- nyy : 현재 줄 이하로 n개의 줄을 복사한다 (n은 임의의 숫자, 2yy는 2줄 복사)

- ynw : n개의 단어를 복사한다(y2w는 두 개의 단어를 복사)

- yw : 한단어 복사

- y2w : 두단어 복사

- y$ : 현재 위치에서 그 줄의 끝까지 복사한다

- y0(y^) : 현재 위치에서 그 줄의 처음까지 복사한다

- yG : 현재 위치에서 파일의 끝까지 복사한다(G는 파일의 마지막 줄)

- Y : 한 줄 전체의 내용을 복사한다 (yy 와 동일)

※ 마지막 명령어의 반복 - . : 마지막에 수행한 명령어를 반복한다.

-2. : 명령어를 2번 반복한다.

- p (Put or Paste) : 붙이기

- p : 버퍼에 저장된 내용을 커서의 오른쪽으로 붙여 넣는다.

- 2p : 아래로(오른쪽으로) 두번 붙이기

- np : n번만큼 p 명령을 반복. 2p라면 버퍼의 내용을 두 번 붙여넣는다

- P : 위로(왼쪽으로) 붙이기

- 2P : 위로(왼쪽으로) 두번 붙이기

- nP : 버퍼에 저장된 내용을 커서의 왼쪽으로 붙여넣는다. 사용법은 p와 같다


아래 화면은 복사하기와 붙이기의 간단한 예시입니다. 우선 명령모드로 바꾼 뒤, 커서를 두번째 줄에 놓고, yy를 칩니다.

다음으로 마지막줄 마지막칸에 커서를 놓고, p를 누릅니다. 이런 과정을 거치면 두번째 줄이 복사되어 네번째줄에 붙게 됩니다.


- xp : 두 문자를 바꾸는 명령

- deep : 두 단어를 바꾸는 명령

- ddp : 두 줄을 바꾸는 명령

- J(Join) : 여러 줄의 내용을 한 줄로 합친다

- J : 현재줄을 윗줄에 붙인다. (두줄 합치기)

- nJ : n개의 줄을 합쳐 한 줄로 만든다. 커서는 원본 문서의 마지막 줄의 첫번째 위치(합쳐진 줄에서는 중간)에 놓인다. 5J는 5줄로 이루어진 내용을 한 줄로 만든다


우선 xp를 실행했을 경우부터 살펴봅시다. 기존의 "어때요?" 중 "어"에 커서를 놓고, 명령모드로 전환 후, xp를 누릅니다. 그럼 "때어요"로 문귀가 바뀝니다. 다음은 J를 실행해 봅시다. J가 대문자임을 명심해야 합니다. 리눅스에서 주의할 사항은 대문자와 소문자를 구별하는 것. j를 누르면서 안된다고 투덜되면 곤란합니다. 셋째줄 끝에 커서를 놓고, 명령모드에서 J를 누르면, 넷째줄에 있던 내용이 셋째줄에 붙습니다. 그럼 아래 그림과 같은 결과가 나오는 것입니다.


② 지우기, 복구하기, 바꾸기 - dnw : n개의 단어를 지운다

- d$ : 커서가 있는 위치에서 그 줄의 끝까지 지우기

- D : 커서부터 줄의 끝까지 삭제합니다. (d$ 와 동일)

- d (Delete) : 지우기

- dd : 현재커서가 위치한 줄의 전체를 삭제합니다.

- 2dd : 두줄지우기

- ndd : n줄지우기 (n 은 임의의숫자)

- dw : 한단어 지우기

- d2w : 두단어 지우기

- d0(d^) : 그줄 처음까지 지우기

- dG : 커서가위치한 곳으로 부터 문서 끝까지 지우기

- d move : 커서가 위치한 곳부터 move까지 삭제

- dlG : 커서가 위치한 곳으로부터 편집버퍼의 맨앞까지 삭제.

- :lined : 지정한 줄을 삭제

- :line, lined : 지정한 범위를 삭제

- u (Undo) : 되살리기 명령으로 버퍼에 저장되어 있는 원래의 내용을 복구

- u : 한번복구하기

- 'nu' : (n은 임의의 숫자) 형식으로 사용하며, n 단계까지의 명령을 복구할 수 있다

- 2u : 두번복구하기

- c (Change) : 바꾸기

- cc : 한줄 바꾸기

- 2cc : 두줄 바꾸기

- ncc : n개의 줄 바꾸기(n은 임의의 숫자)

- cw : 한단어 바꾸기

- ce : 공백을 제외하고 한단어를 바꾸기

- c2w : 두단어 바꾸기

- c$ : 그 줄 끝까지 바꾸기

- c0(c^) : 현재 위치에서 파일의 끝까지 바꾼다

- c : 그 줄 끝까지 바꾸기 (c$)와 동일

- cmove : 커서부터 move까지 변경

- r (Replace) : 한글자 바꾸기

- 2r : 두글자 바꾸기

※ r 명령어는 insert 모드로 바뀌지 않는다.

- R : 바꾸면서 삽입이 아닌 수정(modify) 모드로 들어간다. 윈도에서 Insert 키를 누르고 수정 상태로 들어가는 것과 같다

- s : 한글자 지우고 insert 모드로 - cl 와 동일

- S : 한줄지우고 insert 모드로 - cc 와 동일

- ~ : 대문자 < - > 소문자 바꾸기 - 영문자에만 해당

※ 지우기와 바꾸기의 차이점은 바꾸기는 명령어 후에 vi 편집모드로 바뀐다.


[9] 찾기

- /요 : 현재 위치에서 아래쪽 방향으로 '요'라는 단어를 찾는다

- ?요 : 현재 위치에서 위쪽 방향으로 '요'라는 단어를 찾는다

- / : 단어 찾기를 반복한다(웨에서 아래쪽 방향으로)

- n : 단어 찾기를 반복한다(아래쪽 방향으로)

- ? : 단어 찾기를 반복한다 (아래족에서 위쪽 방향으로)

- N : 단어 찾기를 반복한다 (위쪽 방향으로)

- fx : 현재줄에서 x문자 찾기 - x 는 한개의 글자

- Fx : 현재줄에서 반대방향으로 x문자 찾기 - x 는 한개의 글자

- tx : 현재줄에서 x문자를 찾아서 바로전에 커서놓기

- Tx : 현재줄에서 반대방향으로 x문자를 찾아서 바로후에 커서놓기

- ; : 현재 줄에서 글자 찾기를 반복한다(뒤로)

- ' : 현재 줄에서 글자 찾기를 반복한다(앞으로)

※ 찾기와 편집명령의 응용

- d/simple : simple 이라는 단어가 나올때까지 지우기

- d/^scully : 줄의 맨앞에 scully 라는 단어가 나올때까지 지우기

- y/yahoo : yahoo 라는 단어가 나올때까지 복사하기


[10] 편집모드 지정하기

- i : insert 현재커서위치

- I : 현재커서가 위치한 줄의 맨처음에

- a : append 현재커서위치 바로 다음에

- A : 현재커서가 위치한 줄의 맨끝에

- o : open 현재커서위치 바로 아래줄에

- O : Open 현재커서위치 바로 윗줄에


[11] 표시하기(Marking)

mx : mark 현재의 커서위치를 x 라는 문자로 기억 보이지 않는 북마크

- `x : 기억된 x 위치로 이동

- `` : 이동하기 전의 위치로 (제자리)

- ' ^_ x : 기억된 x 위치의 맨 앞으로 이동

- '' : 이동하기 전 위치의 맨앞으로 이동

[12] 버퍼 이용하기

- "xyy : x 라는 이름의 버퍼에 한줄 복사 하기

- "xp : x 라는 이름의 버퍼에 저장된 내용을 붙이기

- := : 현재 줄번호 보여주기

- :/pattern/ = pattern 이 위치한 줄번호 보여주기


[13] ex 명령어 익히기

vi서 사용하는 ex 명령어는 이전 ex 편집기에서 지원하던 기능들입니다. ex 모드(콜론 모드)에서 사용하는 명령어는 열기(Open), 저장(Save), 다른 이름으로 저장(Save as) 등의 명령을 수행합니다. ex 모드는 Esc 키를 누르고 ':' 키를 입력하여 들어갈 수 있다는 것과 종료시의 명령어에 대해서는 앞에서 설명하였기에 생략하기로 하겠습니다.


① ex 명령어의 기본형식

(범위지정) (명령어) (명령이 수행될 위치)

:k,l command m


예)

- :1,10 co 50 : 1 줄 부터 10 줄 까지를 50 줄 이후로 복사

- :34,50 d : 34 줄 부터 50 줄 까지 삭제

- :100,150 m 10 : 100 줄 부터 150 줄까지를 10 줄 이후로 옮김

- :.,$ d : 현재줄부터 끝까지 지우기

- :.,+20 co -4 : 현재줄부터 20줄을, 4줄 위에 복사하기

- :-,+ t 0 : 위, 아래로 한줄(총 3줄)씩을, 문서 맨위에 복사하기

- :/pattern/ d : pattern 이 들어있는 줄 지우기

- :/pattern/ -nd : pattern 이 들어있는 줄로부터 n 번째 윗줄 지우기

- :/pattern/ +nd : pattern 이 들어있는 줄로부터 n 번째 아랫줄 지우기

- :/pattern1/,/pattern2/d : pattern1 이 들어있는 줄부터, pattern2 가 들어있 는 줄까지 지우기


- :.,/pattern/ m 23 : 현재줄부터 pattern 이 들어있는 줄까지, 23번줄 이 후로 옮기기



② g 옵션 붙여 문서전체에 적용하기

- :g/리눅스 : 파일 전체에서 '리눅스'가 있는 마지막 줄로 이동한다

- :g/리눅스/ p : 파일 전체에서 '리눅스'가 있는 줄을 보여준다

- :g/리눅스/ nu : 파일 전체에서 '리눅스'가 있는 줄을 번호와 함께 보여준다

- :60,100 g/리눅스/ p : 60~100줄 사이에서 '리눅스'가 있는 줄을 보여준다

- :g/리눅스/d : 문서 전체에서 '리눅스'가 있는 줄을 제거한다


③ 저장 및 종료하기

- :w : 저장하기 (write)

- :q : 종료하기 (quit)

- :wq : 저장하고 종료하기

- :xv저장하고 종료하기 (:wq 와 동일)

- :w! : 강제로 저장하기 (read-only 로 열었을경우)

- :q! : 편집한 내용을 저장하지 않고 종료하기

- :w new_file_name : 새로운 파일이름으로 저장하기

- :w %.new : 현재화일 이름에 .new 를 붙여서 새로운 화일로 저장

- :230,$ w file_name : 230 줄부터 끝줄까지 file_name 으로 저장하기

- :.,600 w file_name : 현재줄부터 600줄까지 file_name 으로 저장하기

- :1,10 w new_file : 1줄부터 10줄까지 new_file 로 저장하기

- :340,$ w >> new_file : 340줄부터 끝줄까지 new_file 에 추가하기


④ 읽기

- :r[ead] filename : 현재위치에 filename 읽어들이기

- :r /usr/local/data : 현재위치에 /usr/local/data 읽어들이기

- :185 r /usr/local/data : 185줄 이후에 /usr/local/data 읽어들이기

- :$r /usr/local/data : 맨끝줄 이후에 /usr/local/data 읽어들이기

- :0 r /usr/local/data : 맨윗줄에 /usr/local/data 읽어들이기

- :/pattern/ r /usr/local/data : pattern 이 존재하는 줄에 /usr/local/data 읽어들이기


⑤ 다중편집하기

vi file1 file2 :file1과 file2라는 두 개의 문서를 읽어들인다. 먼저 읽는 문서는 file1이다

- :args :현재 편집중인 화일목록을 보여준다

v - :n :두 번째 문서(file2)를 편집할 수 있다

- :e # :이후부터는 ':e #' 명령을 사용하여 문서를 번갈아 열며 편집할 수 있다

- :prev[ious] :이전화일로 돌아간다

주의 - 편집중인 화일이 저장되지 않으면 다음 화일로 넘어갈수 없다

* * 새로운 파일 편집하기

- :e file1:새로운 파일(file1)을 읽어들여 편집한다

- e[dit] file_name :새로운 file_name 편집하기

- :e! :현재의 편집중인 내용을 무시하고 가장 최근에 편집한 내용을 다시편집하기


⑥ g 옵션과 바꾸기

- :m,n s/old/new/g - :g/pattern/ s/old/new/g

예 )

: 1,5 s/리눅스/linuk/gc :1줄부터 5 줄까지 리눅스를 linuk 로 확인해가면서 바꾼다.

:g/문자 /s/파일/file/g : '문자'가 있는줄만을 찾아서 '파일'을 'file'로 바꾼다.

:% s/버퍼/buffer/g :처음줄부터 마지막줄까지, 버퍼 를 buffer 로 바꾼다.

콜론모드 상태에서 위와 같은 명령어를 수행한 예가 바로 다음 화면입니다.


* * 프로그램 소스 코드에서 괄호 짝 찾기

프로그램이나 HTML 소스에는 수많은 괄호(< >, ,…)가 사용되게 마련입니다. 때문에 편집을 하다 보면 괄호의 짝을 잃어버려 프로그램 오류가 나는 경우도 빈번합니다. 이럴 때 vi는 편리한 기능을 제공합니다. 해당 괄호 위에 커서를 놓은 후 키를 누르면 짝이 되는 괄호의 위치로 이동합니다.


[14] 예기치 않은 시스템 다운후 되살리기

- vi -r :되살릴수 있는 모든 파일의 이름을 보여준다.

- vi -r file :vi에디터를 실행하여 지정한 파일을 되살리는 옵션이다


[15] 디스플레이 제어

^L : 현재의 화면을 다시 불러온다

:set number : 내부의 줄번호로 내용을 불러온다

:set nonumber : 내부의 줄번호로 내용을 되 불러 오지 않게 하는 옵션이다

예) set number 실행시 다음과 같이 줄번호가 나타납니다

- /rexp : 지정된 정규표현식에 대해 앞으로 이동한다.

- / : 이전의 패턴에 대해 앞으로 검색을 반복하는 명령

- ?rexp : 지정된 정규 표현식에 대해 뒤로 이동하는 명령

- ? : 이전의 패턴에 대해 뒤로 검색을 반복하는 명령

- n : : /나 ? 명령에 대해 같은 방향으로 반복하는 명령

- N : : /나 ? 명령에 대해 반대방향으로 반복하는 명령


[16] 줄의 길이조정

- r :Return : 문자를 새로운 라인으로 변경하는 명령

- J :줄을 결합하는 명령

- :set wm=n : 오른쪽으로 n문자 위치에서 자동적으로 줄을 나누는 명령


[17] 편집버퍼를 통한 이동

- ^F : 한 화면 아래로 이동

- ^B : 한화면 위로 이동

- n^F : n 화면 아래로 이동

- n^B : n화면 위로 이동

- ^D : 반화면 아래로 이동

- ^U : 반화면 위로 이동

- n^D : n 줄만큼 아래로 이동

- n^U : n 줄만큼 위로 이동


[18] 쉘 명령실행

중단하고 지정한 셸 명령을 실행

- :!! : vi를 중단하고 이전의 셸 명령을 실행

- :sh : vi를 중단하고 셸을 실행

- :!csh : vi를 중단하고 새로운 C쉘을 실행


[19] 패턴에 의한 치환

- :s/pattern/replace/ : 현재 줄을 치환한다

- :lines/pattern/replace/ : 지정한 줄을 치환한다

- :line,lines/pattern/replace/ : 지정한 범위를 모두 치환한다

- :%s/pattern/replace/ : 모든 줄을 치환한다


[20]데이터 읽기

- :liner file : 파일의 내용을 지정한 줄 다음에 삽입한다

- :r file : 파일의 내용을 현재줄 다음에 삽입한다

- :liner !command : 명령의 결과를 지정한 줄 다음에 삽입한다

- :r !command : 명령의 결과를 현재줄 다음에 삽입한다

- :r !look pattern : 지정한 패턴으로 시작되는 단어를 삽입한다


[21] 편집 중 파일 바꾸기

- :e file : 지정한 파일을 편집한다

- :e! file : 지정한 파일을 편집하며 자동점검을 생략한다


[22] 수정의 취소, 반복

- u : 수정했던 마지막 명령을 취소한다

- U : 현재 줄을 저장한다

- . : 수정했던 마지막 명령을 반복한다


[23] 문자 삭제

- xv : 커서가 있는 문자를 삭제한다

- X : 커서의 왼쪽 문자를 삭제한다


[24]여러줄의 복사및 이동

- : linecotarget : 지정한 줄을 복사하여 대상줄 밑에 삽입한다

- :line,linecotarget : 지정한 범위를 복사하여 대상줄 밑에 삽입한다

- :linemtarget : 지정한 줄로 이동하여 대상줄 밑에 삽입한다

- :line,linemtarget : 지정한 범위로 이동하여 대상줄 밑에 삽입한다


[25] 데이터 처리를 위한 셸 명령

- n!!command : n번 줄에서 명령을 실행한다

- !move command : 커서의 위치로 부터 이동한 곳까지 명령을 실행한다

- !move fmt : 커서의 위치로 부터 이동한곳까지 줄들을 형식에 맞춘다


-----------------------------------------------------------------------------------------

원문을 출처를 알수없더군요.
아니 가져온곳에도 처음부터 출처를 모른다고 되어있으니;;
리눅스 명령어가 잘 정리된듯합니다. ^^

Posted by 햇 님
WebDevelop/Jsp & Servlet2008. 5. 21. 23:50

웹서버(Tomcat) 의 컨테이너가 서블릿(Servlet)을 로딩한다.
그 뒤에 사용자의 요청을 받아서 Request, Response 객체를 만들어낸다.
그러한 것들을 service() 메서드에 인자값으로 넘겨주고 실행한다.

즉 Servlet 에서는 request 와 response 객체를 사용해서
웹페이지를 만들어주는것이다.

그렇다면 JSP 라는 것은 무엇인가?

이것이 기존의 asp 라던가 php 와 같이 html태그 사이에 스크립트릿 (<%%> ) 을
끼워서 코딩 할수 있는 형식으로 이루어져있다.

그렇다면 왜 servlet 이 필요한건가?
servlet 과 jsp 의 관계를 보자면 간단하게 한마디로..

jsp 파일로 만든것은 servlet으로 (.java) 파일로 다시 만들어지고 컴파일되어져 class 파일로
구동하게 되는것이다.

그래서 jsp 파일 안에는 되도록이면 스크립트릿을 자제하고.. servlet 에 자바코딩을 전부 하여서
디자인(HTML, JS) 과 로직(JAVA)을 분리하여 코딩을 하는것이 좋다.

jsp의 장점을 정리해본다.

 (1) 서블릿보다 쉽고, 빠르다.
 (2) 디자인(HTML, JS) 과 로직(JAVA)을 분리 시킬 수 있다. 즉, 디자이너와
  프로그래머의 일을 분업시킬수 있다.
 (3) 프로그래머가 직접 코딩한 servlet 보다 최적화된 servlet을 생성시켜
  효율적익 코드를 생성한다.
 (4) JAVA Beans 사용이 쉽다.
 (5) 웹 어플리케이션 상에서 변수의 유효범위 (scope) 설정이 간편하다.

무엇보다.. 중요한점은
위에서 말했다시피.. jsp 가 결국 servlet 이 된다는것이다.
Posted by 햇 님
MyPlace/FavorutesSite2008. 5. 14. 14:54
사용자 삽입 이미지


http://www.gotapi.com/html

이곳은 각종 언어들 및 스크립트 언어 등등 다양한 언어들의 인스턴스 및 함수 등의
내용을 잘 정리하여서 보여주고 있으며,
주로 보는 곳은 HTML/DOM Object 쪽이나.. ORACLE 함수 관련된 부분을
자주 본다. 설명도 있거니와, 그에따른 실제 예제도 적혀있어서
따라하거나 보고 사용하기가 쉽다!

eng)
Quick reference search for HTML (including HTML, CSS, JavaScript, AJAX,  Web2.0)
and other software/technologies

이곳은 영문 사이트다~
Posted by 햇 님
Java/Based2008. 5. 14. 12:03

1. 자바의 역사
 (1) 1991년 : sun사 Green Project 에서 James Gosling 외 기술자들이
    Oak라는 언어로 제작(가전기기에서사용할 목적)
 (2) 1997년 : jdk 1.1 발표
 (3) 1998년 : jdk 1.2 발표
 (4) 2000년 : jdk 1.3 발표
 (5) 2002년 : jdk 1.4 발표 (엄청난 각광!!!)
 (6) 2004년 : jdk 1.5(5.0) 발표
 (7) 2007년 : jdk 6 발표


2. 자바의 특징
 (1) 플랫폼(OS)에 독립적 : 자바 가상머신(Java  Virtual Machine)이 해당 플랫폼마다 따로
  제공되어서, 동일하 실행결과를 보장한다.
 (2) 객체 지향 언어 : 재사용성, 프로그램의 생산성이 향상
 (3) 멀티 쓰레드를 지원 : Thread 는 Process 보다 작은 단위, 동시 다발적인 작업을 수행할 수 있다.
 (4) 자동 메모리 관리 :  가비지 컬렉터(JVM에 포함되어 있는 소프트웨어)에 의해서 자동관리된다.


-- 학원 다니면서 배운내용을 다시보며.. 정리를 해보자!
Posted by 햇 님