0. 필요사항

  가. ubuntu 기준

  나. /var/log


1. syslog(messages)

  가. 일반 로그


. auth.log

  가. 사용자 로그인 및 인증 로그


. apport.log

  가. 애플리케이션 크래시 로그


. bootstrap.log

  가. 관련정보 부족으로 정확한 정보인지 모호함

  나. 데비안 시스템 설치관련 로그

  다. cdebootstrap가 생성


. btmp

  가. 로그인 실패 정보 로그

  나. $ last -f /var/log/btmp 사용


. dpkg.log

  가. dpkg 패키지 관련 로그


. faillog

  가. 로그인 실패 관련 로그

  나. ssh 실패는 확인 안됨

  다. 정확인 로그정보를 모르겠음

  라. $ faillog 명령어 사용


. kern.log

  가. 커널 관련 로그


. lastlog

  가. 마지막 로그인 관련 로그

  나. $ lastlog 명령어 사용


. wtmp

  가. 로그인 정보 로그

  나. $ last -f /var/log/wtmp 사용


0. 준비사항

  가. ubuntu 18.04


1. 설치

  가. $ sudo apt update && sudo apt install mariadb-server mariadb-client -y


2. 설정

  가. 보안

    1) $ sudo mysql_secure_installation

      가) root 패스워드 변경, 익명유저 제거, root 원격 로그인, 테스트 db 삭제, 권한 테이블 리로드 설정

  나. 외부접속허용(3306포트)

    1) $ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf

      가) [mysqld] 섹션의 bind-address = 127.0.0.1 -> bind-address = :: 으로 변경

    2) $ sudo systemctl restart mysql <-- 재시작

  나. 원격접속권한(root)

    1) GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

 FLUSH PRIVILEGES;

0. 준비사항

  가. Ubuntu

  나. 참고 사이트

    1) https://github.com/randy3k/RemoteSubl


1. rsub 설치 및 실행

  가. 서버측 설치

    1) $ curl -o rsubl https://raw.githubusercontent.com/aurora/rmate/master/rmate

       $ curl -o rsubl https://raw.githubusercontent.com/kajuha/rmate-python/master/bin/rmate

    2) $ chmod +x rsubl

    3) $ sudo mv rsubl /usr/local/bin

  나. 로컬측 설치

    1) sublime text의 Package Control에서 RemoteSubl을 설치

  다. 로컬측 실행

    1) ssh 접속

      가) ssh -R 52698:localhost:52698 서버ID@서버주소

      가) ssh -R 52698:127.0.0.1:52698 서버ID@서버주소

        (1) 예 : ssh -R 52698:localhost:52698 user@google.com

        (1) 예 : ssh -R 52698:127.0.0.1:52698 user@google.com

        (2) 실행측의 .ssh/config 파일안에 아래를 적으면 위의 원격을 매번 안쳐도 됨

             특정 호스트만 적용하려면 * -> 아이피주소로 변경하면 됨

          (가) Host *

          (나) RemoteForward 52698 127.0.0.1:52698

    2) 서브라임 텍스트 실행

    3) ssh에서 rsubl 편집할 파일명

      가) 예 : rsubl test.txt

0. 준비사항

  가. Ubuntu 18.04.1 Server


1. 상황

  가. 콘솔에서 virtualenv를 설치하려고 함

    1) $ sudo apt install virtualenv

  나. 패키지를 찾을 수 없다는 에러가 발생


2. 해결

  가. /etc/apt/sources.list의 마지막에 universe를 추가함

    ex) 기존 : deb http://archive.ubuntu.com/ubuntu bionic main

         수정 : deb http://archive.ubuntu.com/ubuntu bionic main universe


3. 의미

  가. 우분투 소프트웨어 저장소의 종류

    1) Main - Officially Supported, Open-Source Software

    2) Restricted – Officially Supported, Closed-Source Software

    3) Universe – Community-Maintained, Open-Source Software

    4) Multiverse – Unsupported, Closed-Source and Patent-Encumbered Software


0. S/W 준비사항

  가. Ubuntu 18.04 LTS

  나. 사용자ID 및 홈디렉토리는 user로 가정

  다. 작업디렉토리는 /home/user/ws/jupyter로 가정

    1) mkdir -p /home/user/ws/jupyter

  라. 가상환경디렉토리는 /home/user/venv/jupyter로 가정

    1) mkdir -p /home/user/ws/jupyter

  마. 자신의 IP는 192.168.0.1로 가정


1. 추가 S/W 설치

  가. 파이썬 가상환경 설치 및 실행

    1) $ sudo apt install virtualenv

    2) $ virtualenv --python=python3 /home/user/venv/jupyter

    3) $ . (<-점, 포인트) /home/user/venv/jupyter/bin/activate

      가) $ source /home/user/venv/jupyter/bin/activate (<- 동일한 방법)

  나. 쥬피터 노트북 설치

    1) $ pip install jupyter


2. 쥬피터노트북 설정

  가. 설정 파일 생성

    1) $ jupyter notebook --generate-config

      가) 홈 디렉토리에 .jupyter 설정 디렉토리가 생성됨

        (1) $ cd /home/user/.jupyter

      나) jupyter_notebook_config.py 파일을 수정

        (1) 설정파일은 사전에 백업을 해둘 것

          (가) cp jupyter_notebook_config.py jupyter_notebook_config.py.bak

  나. 설정 파일 편집

    1) $ vi jupyter_notebook_config.py

    2) 외부 접속 허용

      가) c.NotebookApp.allow_origin = '*'

    3) 시작시 브라우저 실행 안함

      가) c.NotebookApp.open_browser = False

    4) 암호 설정(1번 방법)

      가) $ jupyter notebook password

      나) 설정할 패스워드 입력하면 완료

    5) 암호 설정(2번 방법)

      가) $ python3 실행

        (1) from notebook.auth import passwd 엔터

        (2) passwd() 엔터

        (3) 설정할 패스워드를 입력하면 sha1 암호가 출력됨 저장해둘 것

      나) 쥬피터 설정파일에서 저장된 암호를 입력

        (1) c.NotebookApp.password = 'sha1:...............'

  다. 실행

    1) $ jupyter notebook --ip=0.0.0.0


3. 실행 스크립트 작성

  가. /home/user/ws에 jupyter.sh 스크립트 작성

    1) $ cd /home/user/ws

    1) $ vi jupyter.sh

      가) #!/bin/bash

      나)

      다) source /home/user/venv/jupyter/bin/activate

      라) cd /home/user/ws/jupyter

      마) jupyter notebook --ip=0.0.0.0

  나. 실행권한 설정

    1) chmod 755 jupyter.sh


4. 서비스 등록

  가. $ cd /etc/systemd/system

  나. $ sudo vi jupyter.service

    1) [Unit]

    2) Description=Jupyter Notebook

    3)

    4) [Service]

    5) Type=simple

    6) WorkingDirectory=/home/user/ws/jupyter

    7) ExecStart=/home/user/ws/jupyter.sh

    8) User=user

    9) Group=user

    10) Restart=always

    11)

    12) [Install]

    13) WantedBy=multi-user.target

  다. 서비스 시작 및 활성화

    1) sudo systemctl start jupyter.service

    2) sudo systemctl enable jupyter.service

  라. 서비스 수정후 데몬 리로드

   1) sudo systemctl daemon-reload


5. 끝

0. 준비 사항

  가. 우분투 18.04

  나. ipTIME VPN서버 PPTP(암호화없음)


1. 네트워크 매니저(GUI 방식)

  가. 16.04에는 네트워크 편집기에 VPN 자동연결 항목이 있음, 18.04에는 없음

  나. 기존 네트워크 편집기로 수정하면 가능함

    1) nm-connection-editor 실행


2. 네트워크 매니저(CLI 방식)

  가. 네트워크 매니저 디렉토리에 새로운 연결을 만들 파일(vpn) 생성

    1) $ sudo vi /etc/NetworkManager/system-connections/vpn

    2) 본문내용

[connection]

id=vpn <-- 노출되는 연결명

uuid=aff531e3-47bf-41db-b8ee-a7017e3e3e8a

type=vpn

autoconnect=false

permissions=

[vpn]

gateway=123.456.789.000 <-- vpn 서버 주소

password-flags=0 <-- 비밀번호 입력을 자동으로 할 경우

user=guest <-- vpn 사용자

service-type=org.freedesktop.NetworkManager.pptp

[vpn-secrets]

password=00000000 <-- vpn 비밀번호

[ipv4]

dns-search=

method=auto

[ipv6]

addr-gen-mode=stable-privacy

dns-search=

method=auto

  나. 특정 연결이 네트웍에 연결될 경우 자동으로 vpn을 연결할 경우

    1) 특정 연결 열기 ex) $ sudo vi /etc/NetworkManager/system-connection/noname

    2) [connection] 섹션에서

      가) secondaries=연결할 vpn 연결 파일의 uuid를 입력

        (1) ex) secondaries=aff531e3-47bf-41db-b8ee-a7017e3e3e8a;

  다. 네트워크 매니저를 재실행

    1) $ sudo systemctl restart NetworkManager

  라. 네트워크 현황 보기

    1) $ nmcli conn

  마. 특정 네트워크 연결 및 해제

    1) $ sudo nmcli conn up 특정 연결명(/etc/NetworkManager/system-connection)

    2) $ sudo nmcli conn down 특정 연결명

    

0. 설치


  가. $ sudo apt install tmux : ubuntu, (apt or apt-get)


1. Session 관련(여러개 세선 생성 가능)


  가. $ tmux new-session -s [session_name] -n [window_name] : screen_name 및 window_name 을 가지는 세션 생성, -s, -n을 지정하지 않으면 임의 이름 생성됨


  나. $ tmux attach-session -t [session_name] : 지정 session_name을 가지는 세션으로 접속, 화면 공유 같이됨


  다. 세션(윈도우-팬)에서 Ctrl + b + d : 세션 detach


  라. 세션(윈도우-팬)에서 Ctrl + b + $ [session_name] : session_name으로 세션 이름 변경


2. Window 관련(세션 내에는 여러 윈도우 생성 가능)


  가. Ctrl + b + c : 새로운 윈도우 생성


  나. Ctrl + b + , : 윈도우 이름 변경


  다. Ctrl + b + 0~9 : 지정 번호의 윈도우로 이동


  라. Ctrl + b + & 또는 exit : 윈도우 삭제


3. Pane 관련(윈도우 내에서는 여러 팬 생성 가능)


  가. Ctrl + b + " : 팬 가로 분할


  나. Ctrl + b + % : 팬 세로 분할


  다. Ctrl + b + 방향키 : 팬 이동


  라. Ctrl + b + [ : 스크롤(방향키업다운 또는 페이지업다운 )


  마. exit : 팬 삭제


4. Session 공유(A:공유권한자, B:공유사용자)


  가. $ tmux attach-session -t [session_name] : 지정 session_name을 가지는 세션으로 접속, 화면 공유 같이됨


  나. 가는 동일한 유저일 경우 간편하게 사용가능함, 하지만 다른 유저일 경우는 아래와 같이 사용


  다. A : $ tmux -S /tmp/socket


    1) -S /tmp/socket는 다른 유저에게 공유할 소켓 경로 이름


  라. A : $ chmod 777 /tmp/socket


    1) 다른 유저가 공유할 수 있도록 접근권한 변경


  마. B " $ tmux -S /tmp/socket attach-session

1. 우분투 설치(16.05.3기준)

  가. 써드파티 드라이버 & 라이센스 설치

  나. LVM을 가진 전체 디스크로 설치

    1) 기존에 LVM으로 설정된 내장 또는 외장 디스크가 있을 경우 설치가 안될 수도 있으므로 LVM을 삭제해야함.

    2) 이것을 모르고 디스크 용량이 부족한 것으로 판단하였음

      가) 우분투에서 디스크 용량 부족 경고를 띄웠음

      나) 아무런 표시도 없이 현재 창을 다시 보여주는 것도 있었음

2. LVM

  1) microSD 64GB 삽입

  2) LVM으로 기존 논리 볼륨에 추가

  3) 확장 참고

    가) http://zelda.tistory.com/entry/lvm?category=177187

3. 원격 제어

  1) 인터넷이 안되므로 USB-LAN이나 무선랜을 장착해서 이후 진행

  2) sudo apt update

    가) 안될 경우 Software & Updates의 저장소를 변경하면 됨

  3) sudo apt install ssh screen

  4) 이후부터는 ssh로 접근해서 사용

4. ssh로 접속

  1) sudo apt upgrade -y

  2) sudo apt git libncurses5-dev libssl-dev

  3) sudo apt kernel-package

5. WLAN 드라이버 인식

  1) 참고

    가) http://zelda.tistory.com/entry/%EC%9D%B8%ED%85%94-%EC%BB%B4%ED%93%A8%ED%8A%B8-%EC%8A%A4%ED%8B%B1STCK1A8LFC-%EB%AC%B4%EC%84%A0%EB%9E%9CWiFi-%ED%99%9C%EC%84%B1%ED%99%94?category=177187

6. HDMI가 없을 경우 부팅 안됨

  1) 초기에는 H/W 문제로 판단됨

    가) 이걸로 인해 엄청난 삽질을 했음

    나) 결론은 바이오스 업데이트로 해결

  2) 해당 쓰레드

    가) https://communities.intel.com/thread/84871?start=15&tstart=0

  3) 바이오스 업데이트 사이트

    가) https://downloadcenter.intel.com/download/26540/Compute-Stick-BIOS-Update-FCBYT10H-86A-?v=t

1. 인텔 컴퓨트 스틱 내장 8기가 eMMC

  가. 외장 64기가 microSD


2. 내장 8기가에 우분투 16.04설치

  가. 설치시 lvm으로 설치


3. 디스크 크기 확인

  가. df -h


4. 물리볼륨 확인

  가. pvscan, pvdisplay, pvs


5. 물리볼륨 생성

  가. pvcreate /dev/mmcblk2


6. 볼륨그룹 확인

  가. vgscan, vgdisplay, vgs


7. 볼륨그룹 확장

  가. vgextend ubuntu-vg /dev/mmcblk2


8. 논리볼륨 확인

  가. lvscan, lvdisplay, lvs


9. 논리볼륨 확장

  가. lvextend -L+60G /dev/ubuntu-vg/root

  나. +60G는 60G를 추가한다는의미, 외장 크기에 따라 입력할 것


10. 파일시스템 확장

  가. resize2fs /dev/mapper/ubuntu--vg-root


11. 디스크 크기 확인

  가. df -h

1. 아마존에서 컴퓨트 스틱 구매

 가. https://www.amazon.com/gp/product/B00W7KAABK/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1

  나. 사양

    1) CPU : Z3735F, RAM : 1GB, FLASH : 8GB

    2) Ubuntu 14.04 preinstalled

  다. 플래시 8기가중 실제 4기가만 사용가능, 나머지 4기가는 프리인스톨된 우분투 복구 파티션(7.1기가 정도로 인식되고 2기가는 복구용 5.1기가는 리눅스용)


2. MicroSD 64GB 장착 및 우분투 16.04 설치

  가. MicroSD 64GB 장착

  나. 우분투 16.04를 MicroSD에 설치

    1) 우분투 16.04 LTS : 

    2) 기존 8기가 파티션은 삭제(그대로 두면 리눅스에서 인식이 되므로 특별한 필요가 없다면 다른 용도로 사용)


3. 우분투 16.04 사용

  가. 와이파이 안됨, 프리인스톨된 우분투에는 와이파이 드라이버가 설치되어서 가능한 경우임, 컴퓨트 스틱의 와이파이는 rtl8723bs SDIO 드라이버가 필요함

  나. 우분투 16.04의 커널은 4.10.0-28임

    1) config 파일을 boot 디렉토리에서 복사

  다. 구글링 결과 커널 4.14에 staging driver에 rtl8723bs SDIO 드라이버가 포함되어 있음

  라. 커널 컴파일시 기본 포함이 아니므로 rtl8723bs를 모듈로 포함해야함

    1) make menuconfig -> Device Drivers -> Staging Drivers -> Realtek RTL8723BS SDIO Wireless LAN NIC driver

      가) 커널 컴파일 참고 : http://zelda.tistory.com/entry/Ubuntu-Kernel-Compile?category=177187

  마. 설치된 커널로 부팅시에도 와이파이 사용불가

  바. 와이파이의 펌웨어 파일을 설치해야함

    1) https://github.com/hadess/rtl8723bs

    2) make install


4. 정상동작

  가. 와이파이 설정후 사용

    1) GUI에서 networkmanager 사용

    2) console에서 nmcli 또는 nmtui 사용

0. 절차

  가. 설치한 우분투 버전의 커널 버전과 동일한 커널 컴파일 및 설치


  나. 커널 버전 업 및 다운 그레이드를 위한 커널 컴파일 및 설치


1. 준비사항

  가. OS: Ubuntu 16.04.2 LTS 64bits


  나. Linux Kernel: 4.8.0


2. 커널 준비

  가. $ sudo apt update && sudo apt upgrade: 커널 컴파일에 필요한 툴을 설치하기 전 현재 패키지를 업데이트

    1) sudo: root 권한으로 명령어 수행

    2) apt: 우분투 패키지 매니저

      가) update: 패키지 업데이트

      나) upgrade: 패키지 업그레이드

    3) &&: 앞의 명령어가 정상 종료(성공)했다면 다음 명령어를 실행

    4) sudo apt upgrade로 커널 업그레이드됨(4.8.0-36 -> 4.8.0-51)

  나. $ sudo apt install build-essential kernel-package libncurses5-dev bison flex libssl-dev


3. 커널 컴파일(설치한 우분투 버전과 동일한 커널 버전)

  가. 커널 가져오기

    1) $ uname -r: 커널버전 확인

      가) uname: 시스템 정보 출력

        (1) -r: kernel release

      나) 4.8.0-51-generic: 커널 4.8.0

    2) https://www.kernel.org/pub/linux/kernel/ 에서 설치된 커널과 동일한 커널 가져오기

      가) https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.8.tar.xz 받기

      나) gz, bz2(V2.x이하 대), xz이 있으며 압축 형식만 다름

    3) 컴파일용 디렉토리 생성 및 커널 압축해제

      가) $ mkdir kernel: 사용자 홈디렉토리에 생성(ex) /home/user/kernel)

      나) kernel 디렉토리에 linux-4.8.tar.xz 이동(ex) ~$ mv Downloads/linux-4.8.tar.xz kernel/

      다) 압축해제

        (1) tar xvJf linux-4.8.tar.xz: xz파일 확장자를 가지는 압축 파일을 해제

          (가) tar: 파일을 묶거나 풀기(압축 및 해제 지원)

            (1) x: 풀기

            (2) v: 확인(묶거나 풀리는 파일을 표시)

            (3) J: xz 파일 포맷, bz2는 j, gz는 z

            (4) f: 파일지정

        (2) linux-4.8 커널 디렉토리가 생성됨

      라) linux-4.8 커널 디렉토리가 생성됨


  나. 커널 컴파일

    1) $ cd linux-4.8: linux-4.8 커널 디렉토리로 이동

      가) $ cd linux-4.8

    2) 커널 config 파일 가져오기

      가) $ cp /boot/config-4.8.0-51-generic .config: boot 디렉토리의 커널 컨피그 파일을 .config로 변경

        (1) .config가 실제 컨피그 설정파일이며 boot 디렉토리에는 현재 커널시 설정한 컨피그 파일이 저장되어 있으므로 그 파일을 활용

      나) $ make menuconfig: 콘솔에서 커널 설정

        (1) curses.h 에러가 나므로 해당 패키지 설치

          (가) $ sudo apt install -y libncurses5-dev

            a. install: 패키지 설치

            b. -y: 패키지와 관련한 의존성 패키지가 있을 시 물어보지 않고 설치

      다) 현재 설치된 커널과 동일한 설정을 가지는 커널 컴파일 상황이므로 빠져나가기(ESC)

    3) 커널 컴파일 및 설치

      가) $ fakeroot make-kpkg -j 2 --initrd --append-to-version=-user kernel-image kernel-headers: 커널 컴파일

        (1) fakeroot: 실제 root 권한없이 빌드시 필요한 root 권함을 줌

        (2) make-kpkg:

          (가) -j: 컴파일에 사용할 프로세서 수

          (나) --initrd: 램디스크 생성

          (다) --append-to-version: 컴파일된 커널의 버전 뒤에 붙는 이름

          (라) kernel-image: 커널 이미지 생성

          (마) kernel-headers: 커널 헤더 생성

            (a) 최근에는 kernel-headers 생성서 에러가 발생함

            (b) touch REPORTING-BUGS로 해결

        (3) make-kpkg 명령이 없어서 에러 발생하므로 해당 패키지 설치

          (가) $ sudo apt install -y kernel-package

        (4) 커널 컴파일중 opensslv.h 에러 발생

          (가) $ sudo apt install -y libssl-dev

      나) $ cd ..: 상위 디렉토리에 컴파일된 커널.deb가 생성

      다) $ sudo dpkg -i *.deb: 커널 이미지 및 헤더를 설치

        (1) dpkg: 데비안 패키지 매니저

          (가) -i: 설치

    4) 컴파일된 커널 확인

      가) uname -r을 하여 컴파일된 커널을 확인


4. 최신 커널 컴파일

  가. git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git: git으로 최신 커널 가져오기

    1) git 명령이 없어 에러가 나므로 git 설치

      가) sudo apt install git

    2) git으로 가져오는 것이 웹에서 가져오는 것보다 느림


  나. cd linux-stable: linux-stable 디렉토리로 이동


  다. cp ../linux-4.8/.config .: 상위 디렉토리의 하위 디렉토리 linux-4.8에서 커널 컨피그 파일을 최신 커널 디렉토리에 복사

    1) ..: 상위 디렉토리

    2) .: 현재 디렉토리


  라. make oldconfig: 이전 커널 버전의 설정 파일을 이용하여 최신 커널 버전의 설정 파일로 적용하고 추가된 기능을 사용 유무를 확인

    1) 모르는 기능에 대해서는 넘기기(엔터)를 함

  마. 이후의 사항에 대해서는 전과 동일함

0. 설치


  가. $ sudo apt install screen : ubuntu, (apt or apt-get)



1. Session 관련(여러개 세션 생성 가능)


  가. $ screen -S [session_name] : session_name을 가지는 세션 생성


  나. $ screen -r [session_name] : session_name을 가진 세션으로 reattach


  다. $ screen -x [session_name] : session_name과 같은 세션 화면 공유(2명이서 화면을 같이 사용)


  라. 세션(윈도우)에서 Ctrl + a + d : 세션detach


  마. 세션(윈도우)에서 Ctrl + a + :sessionname [session_name] : session_name으로 세션 이름 변경


  바. $ echo $STY : 현재 세션 이름 확인



2. Window 관련(세션 내에는 여러 윈도우 생성 가능)


  가. Ctrl + a + w : 윈도우 목록을 하단에 표시


  나. Ctrl + a + " : 윈도우 목록을 표시하고 이동 선택 가능


  다. Ctrl + a + c : 새로운 윈도우 생성


  라. Ctrl + a + A : 윈도우 이름 변경


  마. Ctrl + a + 0~9 : 지정 번호의 윈도우로 이동


  바. Ctrl + a + k : 윈도우 삭제

리눅스에서 디바이스 드라이버 모듈을 동적으로 적재할 수 있기 때문에, 간단한 디바이스 드라이버 예제를 만들어 본다. 다음은 로드와 언로드가 가능한 가장 기본적인 뼈대만을 가지고 있는 적재 가능한 디바이스 드라이버 모듈이다.

-------------------- test.c --------------------
#include <linux/module.h>

static int test_init(void)
{
        printk("test module is loaded \n");

        return 0;
}

static void test_exit(void)
{
        printk("test module is unloaded \n");
}

module_init(test_init);
module_exit(test_exit);

MODULE_LICENSE("GPL");

-------------------- Makefile --------------------
obj-m := test.o

KDIR := /lib/modules/$(shell uname -r)/build/

PWD := $(shell pwd)

default:
        $(MAKE) -C $(KDIR) M=$(PWD) modules

clean:
        rm -rf .*.cmd
        rm -rf .tmp*
        rm -rf *odule*
        rm -rf *.ko
        rm -rf *.mod.*
        rm -rf *.o

$make 를 하게 되면 ko 확장자를 가지는 모듈이 생성된다. 생성된 모듈을 로드하려면 $insmod test.ko 를 실행한다. 모듈을 로드한 뒤에는 아무런 메시지도 뜨지 않는다. 하지만 $dmesg를 하게 되면 test.c에서 모듈로드시 커널메시지로 출력하게되는 test module is loaded. 이라는 메시지를 볼 수 있다. test module is loaded.라는 메시지를 보았다면 정상적으로 모듈이 로드가 된 것이다. 뿐만 아니라, $lsmod를 하게 되면 현재 로드된 모듈이 리스트로 출력되며, test 모듈도 확인할 수 있다. 마지막으로 로드된 모듈을 제거하는 명령어인 $rmmod test.ko를 실행하면 test 모듈은 해제되며, $dmesg에서 모듈이 제거되었다는 메시지를 확인할 수 있다.
디바이스 드라이버의 가장 기본적인 목적 중의 하나는 사용자의 프로그램을 커널의 중요한 데이터 구조나 하드웨어 장치에 직접 접근하지 못하도록 따로 분리시키는 것이다. 가령 사용자 프로그램에서 하드 디스크에 데이터를 쓰려고 할 때 하드 디스크의 섹터 크기가 512바이트이니 1024바이트인지 등을 신경쓰지 않아도 된다는 것이다. 사용자는 단순히 파일을 열어서 쓰기 명령을 내리면 된다. 그러면 디바이스 드라이버가 자세한 세부 내용을 모두 처리하고, 사용자에게는 복잡함과 하드웨어 디바이스를 프로그래밍하는 어려운 과정을 숨긴다. 즉, 유명한 UNIX/LINUX 규약에 따라서 모든 것을 하나의 파일로 다룰 수 있는 기반을 제공하는 것이다.

디바이스 드라이버(device driver), 로드 가능한 커널 모듈(LKM:Loadable Kernel Module) 그리고 모듈이라는 각각의 용어들이 모두 '로드 가능한 커널 디바이스 드라이버 모듈'을 가리킨다.

리눅스에서 디바이스 드라이버는 넓은 의미에서 두 가지로 나눌 수 있다. 캐릭터 디바이스와 블록 디바이스가 그것이다. 캐릭터 디바이스는 순차적인 데이터를 직렬 스트림 형식으로 주고 받는 장치라고 볼 수 있다. 캐릭터 디바이스의 예로는 시리얼 포트나 키보드 등을 들 수 있다. 블록 디바이스는 데이터를 블록 단위로 읽거나 쓸 수 있고, 해당 장치의 임의의 위치에 접근할 수 있는 능력을 가지는 장치로 특징지을 수 있다. 블록 디바이스의 예로는 하드 드라이브나 플로피 드라이브를 들 수 있다.

# yum install vsftpd

실행했는데 에러가 난다.

네이뇽은 yum의 에러라고 한다.

해결책은

# yum clean all

위의 명령을 실행하고 나면.. 정상적으로 동작한다
Fedora 는
yum install 패키지명

Debian, Ubuntu 는
apt-get install 패키지명
colinux를 사용하는 도중 커널 컴파일을 하고 싶은 마음에
ftp.kernel.org에 접속을 해서 커널을 다운 받으려 했다.
기본 ftp 프로그램으로 접속을 하니 정상적으로 접속은 되었으나,
ls 명령이 먹지 않는다.
Consider using PASV 란 메시지와 함께..
패시브 모드로 접속이 되어 있어서 인 것 같아
자세한 이유는 모르고 네이버에 검색해보니
패시브 모드와 데이터 모드가 있다는 걸 알았는데.
하지만 어떻게 다운을 받는지 나와있는 곳은 없다.
...... 젝힐..
영어는 못하지만 가볍게..
# man ftp를 해보니 훗..
간단하게 해결되었다.
-p란 옵션이 Use passive mode for data transfers 란다..+_+
# ftp -p ftp.kernel.org
하니 ls도 잘 먹고 get도 잘 된다~~
어려운 리눅스~~ 성공성공~~

+ Recent posts