## 리눅스 압축 명령어

* tar 

tar은 은밀히 말하면 압축방식이 아니다. 일종의 묶음 파일로 이해하는 것이 좋을듯 하다.
이 tar과 gzip을 같이 사용하는 경우 tar.gz (또는 tgz)라는 확장자를 사용하게 된다.
tar이 비록 묶음 파일이라 하더라도 여기서는 압축파일의 하나로 이해하고 이를 묶고 푸는
방법에 대해 알아보도록 한다.


- 압축 생성
  # tar cvf temp.tar temp/
    ; temp 디렉터리를 temp.tar 이라는 파일로 묶는다.

     (temp 디렉터리와 그 이하의 모든 파일 및 디렉터리)

 

- 압축 해제
  # tar xvf temp.tar

 

※ 옵션설명
  -c : (create) 압축 파일을 생성한다.
  -x : (extract) 압축 파일을 해제한다.
  -v : 압축파일이 생성(해제)되는 과정을 보여준다.
  -f : 압축파일 또는 Archive 장치를 사용한다.
  -t : 압축파일 내용 확인
  -r : 압축파일 추가
  -z : gzip으로 압축/해제
  -j : bzip2으로 압축/해제

※ tar 명령에서 옵션 앞에 붙는 "-" 기호는 붙여도 되고, 붙이지 않아도 된다.

※ gzip과 같이 압축된 파일의 경우 (tar.gz 또는 tgz) -z 옵션을 사용하여 한번에
   처리할 수 있다.
 

 

* gzip (tar.gz 또는 tgz)
 
앞서 보았던 tar로 묶여진 파일을 다시 압축하는 방법으로 많이 사용되는 압축형태이다.
gzip 명령으로 압축하고 gunzip 명령으로 압축을 해제한다.


- 압축 생성
  
  # gzip temp.tar
  
  위 명령을 사용하면 temp.tar.gz 이라는 파일이 생성된다.

 

- 압축 해제
 
  # gunzip temp.tar.gz
  
  
  # gzip -d temp.tar.gz


 

※ gzip 명령으로 압축을 해제하면, 그 전단계인 tar 묶음 형태로 압축이 풀리게 되므로
   tar 명령으로 다시한번 묶음을 해제해야 한다. 최근에는 이러한 번거로운 과정을
   줄이기 위해 tar 명령에서 tar 묶음 및 gzip 압축까지 모두 해제할 수 있는 옵션(-z)을
   제공한다.
  
  # tar xzvf temp.tar.gz
 

 

* bzip2 (bz2) 

gzip과 같이 최근 많이 사용되는 압축 형태로 tar.bz2 라는 확장자로 다루어진다.
역시 tar 묶음에 다시 압축을 가하는 형태이며, bzip2 전용 명령도 있으며, 
tar에서도 한번에 사용할 수 있는 옵션(-j)이 있다.

- 압축 생성
  # bzip2 -zkv temp.tar

- 압축 해제
  # bunzip2 temp.tar.bz2

※ bzip2 명령으로 압축을 해제하면, tar 명령을 다시 사용해야 하므로, 최근에는 tar에서
   바로 해제하는 경우가 많다.
  
  # tar xjvf temp.tar.bz2
 
* zip 

zip 파일은 Windows에서도 많이 사용되는 압축 형태로, 리눅스에서도 동일하게 사용할 수 있다.

- 압축 생성
  
  # zip -v temp.zip temp/*
   
    ; temp 디렉터리 이하의 모든 파일을 zip으로 압축한다.

- 압축 해제
  
  # unzip temp.zip
 
* compress

확장자 .Z 형태의 압축파일 생성

# compress    [파일명]     : 압축시 

# uncompress  [파일명]    : 해제시  

* zcat 명령어 

zcat -DVv [file...]

zcat 명령은 compress 명령 또는 mkszip 명령으로 압축된 data file을 input으로 취한다.
만약 data file이 command line에 적혀 있지 않는다면 standard input을 읽게 된다.
또한 standard input을 어떤 파일로 적으므로써 zcat에 보낼수 있다.

zcat은 모든 압축된 입력 파일의 압축을 풀어서, standard out에 적는다.
zcat은 cat이 하는 것과 동일한 concatenates을 한다.

압축된 inputfile의 이름은 .z, .gz, bz2로 끝날것을 예상한다.
특정 파일이름이 이런 첨자로 끝나지 않는다면, zcat은 file.z, file.gz, file.bz2로 끝나는
파일을 찾는다. 예를 들어 command line에 abc라는 파일이 적혀있다면,
zcat은 abc.z, abc.gz, abc.bz2를 찾는다. 만약에 이들 중 어느 것도 찾지 못한다면,
zcat은 abc를 확장자 없이 취급한다.

zcat은 다음과 똑같다.

uncompress -c

옵션

-D : compress나 mkszip의 directory option을 사용해서 압축된 파일을 압축해제하라.

-V : zcat의 version을 화면에 나타내라.

-v : 압축된 파일의 각각의 이름을 화면에 나타내라.

Posted by cyj4369
,

여러가지 이유로 MBR이 제거되는 경우가 있는데(저같은 경우는 윈도우와 리눅스를 같이 사용하다 윈도우를 재설치하여 MBR이 제거됨)
다음 단계를 거치면 MBR을 복구할 수 있다.

1단계 :   리눅스 설치 CD 1번(grub를 지원하는 어느  배포판이든 가능(?))을 가지고 복구 모드로 부팅을 한다. (전 우분투 6.10이 설치되어 있었는데 Fedora 6 시디를 사용)
boot: linux rescue

2단계 : 부팅을 한후 복구 모드로 들어가서 다음 명령어를 사용하여 실행한다.
 sh-3.1#: grub

3단계 :grub 실행후 grub shell에서 다음 명령어를 사용하여 실행한다.
grub> root (hd0,2)
Filesystem type is ext2fs, partition type 0x83

위 명령어를 실행하였을 경우 Filesystem ... 라고 나오면 성공한것이고 그렇지 않으면  
Filesystem type unknown, partition type 0x82  또는 Error 23: Error while parsing number 
메시지가 출력된다.

참고 :   위의 명령어중 hd0,2 라는 것이 있는데  이것은  사용자의 파티션에 따라서  모두 다릅니다.  따라서  사용자의 하드디스크의 수및 파티션수에 따라  입력을 하여야 합니다.
저는 하드디스크  하나(hd0)에 윈도우 파티션이 2개 그외 리눅스 파티션을 이용하고 있었습니다. 만약 2개 하드디스크를 사용하고 있는데 두번째 하드디스크에 리눅스를 설치하였다면  hd1 입니다.  하드디스크의 수는 0번부터 시작합니다. 
그리고 2라는 것은 /boot (만약 /boot 파티션을 별도로 잡지 않고 / 파티션에 설치하였을 경우는 / )가   설치되어 있는 파티션 번호입니다.  이것은 /dev/sda3에 설치되어 있었기 때문에 이 번호 또한 0번부터 시작하므로 2가 됩니다.

/dev/sda1 => 윈도우 C  드라이브
/dev/sda2  => 윈도우 D 드라이브
/dev/sda3 => 리눅스 /boot 
/dev/sda4 => 리눅스 /
/dev/sda5 => 리눅스 swap

4단계: MBR에 GRUB를 설치한다.(대부분의 경우 첫번째 하드디스크입니다.)
grub> setup (hd0)
Checking if "/boot/grub/stage1" exists ... no
Checking if "/grub/stage1" exists ... yes
Checing if "/grub/stage2" exists ... yes
Checking if "/grub/e2fs_stage1_5" exists ... yes
Running "embed /grub/e2fs_stage1_5 )hd0)" .. . 15 sectors are embedded.
Running "install /grub/stage1 (hd0) (hd0)1+15 p (hd0,2)/grub/stage2 /grub/grub.conf"... succeeded.
Done.

5단계: grub shell에서 빠져나오고 리부팅을 시켜준다.
grub>quit
sh-3.1# reboot ( 또는 ctrl + alt + del  키를 누른다.)

혹시라도 리부팅후 바로 부팅매니저가 나오지 않고 grub shell로 빠질경우 3,4단계를 다시한번 해준다. 그리고 리부팅하면 정상적으로 될 것이다.

참고사항 #1

grub 상태에서 윈도우로 부팅하려면 (C 드라이브에 윈도가 깔려있다고 할 경우) 다음 명령어를 실행하면 된다.

grub>root  (hd0,0)
grub>chainloader +1
grub>boot


grub 상태에서 리눅스를 부팅하려면

grub>root(hd0,2)  //여기서 2는 리눅스가 설치된 파티션을 말한다.

grub>kernel  /커널파일이름 ro root=/dev/sda3 ro  quiet  splash (Ubuntu)

grub>kernel  /커널파일이름 ro root=/dev/sda3 ro  rhgb  quiet  (RedHat 계열)

grub>boot

=>  커널파일이름 :  vmlinuz-2.6.x 와 같은 형식으로 되어 있다.  (/boot/grub/menu.lst 참고)
 
참고 사항 #2
윈도우와 리눅스를 같이 사용하다 리눅스를 삭제한후에 혹시라도 부팅할때 부트 매니저  lilo, grub 등이 남아 있을 경우는 아래 방법으로
하드 디스크(hard disk)의 MBR 영역을 초기화 해주면 된다.


첫번째 방법 : 응급복구 디스크를 이용하여(fdsik  파일포함) 도스(DOS)로 부팅해서 명령 프롬프트(command prompt)에서   fdisk /mbr  실행

두번째 방법 : 윈도xp CD로 부팅해서 복구 모드(recovery mode)로 들어간 후 명령 프롬프트(command prompt)에서   fixmbr 실행

'Embedded Lab > linux, x86' 카테고리의 다른 글

[환경변수 삭제]  (0) 2013.03.29
[리눅스 압축명령]  (0) 2013.03.28
[우분투에서 GRUB메뉴가 안보일 때]  (0) 2013.03.28
[에뮬레이터와 시뮬레이터의 차이]  (0) 2013.03.24
[어셈블리와 어셈블러]  (0) 2013.03.17
Posted by cyj4369
,

1.
/etc/default/grub 을 편집한다.


2.
GRUB_HIDDEN_TIMEOUT=0 를 주석처리한다.
(GRUB_TIMEOUT=10이라는 것은 10초후에 자동으로 부팅된다는것...)


3.
update-grub 을 때리고 재부팅.

Posted by cyj4369
,

게임 중에 시뮬레이션 게임들이 있죠.
그 시뮬레이션 게임들은 실제 상황을 시뮬레이션 해서 만드는 것입니다.
즉, 실제와 완전히 똑같을 필요까지는 없고 시뮬레이션하는 대상이 지니는 주요 특성만을 
재현해주면 되는 것입니다.
비행 시뮬레이션 이라면 하늘을 나는 것처럼 3D표현으로 화면에 보여주고
하늘을 나는 것처럼 조작할 수 있게 해주면 되는 것이죠.
물론 실험용 시뮬레이션이라면 바람이나 기후에 의한 영향이라던지
기체의 상태에 의한 영향 같이 더 자세한 특성들을 재현해줘야 하는 것이지만
그렇다고 해서 모든 것(화면 모습의 텍스쳐를 실제 현실처럼 자세하게 해줘야 한다거나 하는...)을
재현할 필요까지는 없습니다. 
심지어는 어떠한 시뮬레이션의 경우는 단순히 그 상황에 대한 관측 수치만 제공하는 경우도 있습니다.

그에 반해 에뮬레이터는 재현고자 하는 대상을 완벽하게 재현하는 것이 목표입니다.
어떠한 PDA를 에뮬레이션 하려고 한다면 PDA에 사용된 cpu가 처리할 수 있는 명령어들을
그대로 처리할 수 있는 가상의 cpu를 구현해야 하고 PDA에 사용된 디스플레이와 같은
해상도에서 PDA와 동일한 성능으로 PDA에서 돌아가는 프로그램을 사용할 수 있어야 합니다.
간단히 말하자면 에뮬레이터는 어떠한 하드웨어를 소프트웨어 적으로 재구현하는 것이죠.
(유사하게 하드웨어 -> 하드웨어는 짝퉁(카피) (중국의 짝퉁 자동차나 짝퉁 mp3같은... ) 
소프트웨어 -> 소프트웨어는 클론( 네이트온을 대신하는 Jateon 같은... )
소프트웨어 -> 하드웨어는 생각이 안나는군요. (이러는 경우가 있기는 하던가요;;)
이라고 할 수 있겠습니다. )

그리고 그 설명에서는

"시뮬레이터는 하드웨어도 포함할 수도 있지만
에뮬레이터는 소프트웨어적으로만 구현하는 것을 의미한다."

라고 이해하시면 될거 같습니다.
저 차이는 두가지를 완벽하게 구분하는데 사용하기는 힘든 특성이죠.

즉, 시뮬레이션은 소프트웨어적, 하드웨어적, 혹은 소프트웨어+하드웨어 등을 동시에 사용하여
어떠한 상황에 대한 자세한 데이터를 수집하거나 보여주는 것이 목적이고,

에뮬레이션은 어떠한 하드웨어를 소프트웨어적으로 구현하여 대상 하드웨어를 사용하는 것과
동일하게 사용하는 것이 목적이라고 할 수 있겠습니다.

============================================================

에뮬레이션은 진실값으로 대체 하는 거고, 시뮬레이션은 모델링 한 적절한 값으로 대체 하는 겁니다.
어떤 시스템을 모델링 한다는 것은 그 시스템과 100% 일치되지는 않지만 주요 특징을 살리는 결과물을 
만들어 내는 것입니다.따라서 "xxx 를 시뮬레이션 해보자" 하는 것은 xxx 의 주요 특징을 모델링 하고 (주로 수식으로)
거기에 입력을 가한 후 출력을 보는 것입니다.
에뮬레이션은 100% 동일해야 합니다. 현실에서 어려운 경우가 많죠.

과거에는 프로그래밍 할 때 에뮬레이터나 시뮬레이터를 사용했습니다.
가령 8086 이나 Z80 을 개발한다면 해당 에뮬레이터를 구입해서 (노트북 만하게 생겼습니다.)
개발중인 보드의 cpu 대신에 에뮬레이터 소켓을 꼽습니다.
그러면 이제 부터 에뮬레이터가 해당 cpu 를 대신 합니다.
에뮬레이터를 작업 pc 에 연결해서 작업합니다.
cpu 내부 실행되는 상황파악은 물론, 각 핀들을 물리적으로 컨트롤합니다. cpu 와 완전 동일한 거죠.

에뮬레이터가 비싸서 어려움이 있다면 시뮬레이터를 구입합니다. 이것은 소프트웨어의 일종입니다.
작업 pc 에서 소프트웨어를 구동하고 target cpu 를 프로그램적으로 하나 만들어 내서 
내가 작성한 코드를 실행해 주죠. 물리적인(전기적인) 동작은 할 수 없고,
프로그램의 논리관계만 검증합니다.

지금 주류가 된 ARM mcu 도 초기에는(2000년대 초반 ???) arm 에서 판매하는 500만원짜리 에뮬레이터를 
가지고 작업했습니다. 지금은 그거 없어도 무관한 것 같은데요....ㅎㅎㅎ.

Posted by cyj4369
,

MASM(Microsoft Macro Assembler), NASM(Netwide Assembler), FASM(Flat Assembler), GAS(GNU Assembler), YASM 등 정말 다양한 종류가 있습니다. 그럼 여기서 잠시 질문하나 드리겠습니다. 어셈블리(Assembly)는 무엇이고 어셈블러(Assembler)는 무엇일까요? 그렇습니다. 어셈블리는 언어를 말하는 것이고, 어셈블러는 compiler 를 의미하는 것입니다. 물론 어셈에서는 C언어처럼 컴파일 이라는 용어대신 Assemble 한다고 표현하며, 이 동작을 해 주는 녀석을 Assembler 라고 말합니다.

 자, 그럼 위에서 나열한 것은 Assembler 의 종류입니다. 그런데 왜 각각에 대해서 문법이 다를까요?
Assembler 마다 지원하는 platform 이 다르고, syntax 형태도 차이가 있습니다. 당연히 platform 에 따라 종류를 나누면 상당히 많은 어셈블리가 존재하지요. 인텔(Intel)의 IA-32 Assembly 도 있고, IA-64 Assembly 도 있습니다. 그 이외에 상당히 많은 종류의 어셈블리(Assembly)가 존재하지요. syntax 에는 Intel 방식과 AT&T 방식이 있습니다. 자세한 내용은 아래에서 계속 설명 드리도록 하겠습니다.


GAS(GNU Assembler)

GAS 는 약자 속에 나와 있듯이 GNU Project 에서 사용되고 만들어진 어셈블러입니다. 당연히 GCC 안에 기본적으로 사용되는 녀석이기도 하지요. Linux 에서 인라인 어셈을 해 보신 분은 GAS가 어떤 syntax 를 사용하는지 아실겁니다. 바로 AT&T 입니다. 제가 싫어하는 문법이기도 하지요 =_=; 간단히 예를 들면 MOV EAX, 80 을 MOV $80, %EAX 로 표현합니다. 전자는 AT&T 이외에 다른 syntax 인 Intel syntax 입니다. 여튼 GAS는 Free Software 이고, Cross Platform 을 지원합니다.


MASM(Microsoft Macro Assembler)

가 장 많이 들어보셨을 어셈블러(Assemler)라고 생각합니다. Microsoft 에서 만들었으며, 많은 사랑을 받아온 어셈블러입니다. 64-bit 도 지원하며, syntax 는 Intel 방식을 따릅니다. 개인적으로 저는 이 syntax 가 가독성이 좋습니다. MASM 는 초기에 유료로 제공되었으며 사용하기 위해서는 별도로 설치를 해 주어야 합니다. 하지만 이제는 뮤로로 제공되며 고맙게도 Visual Studio 2008 이상 버젼부터는 기본적으로 MASM v9.0이 기본적으로 포함되어 있기 때문에 별도 설치를 해 줄 필요가 없습니다. 더불어 MASM 은 이름에서도 알 수 있듯이, 강력한 Macro 를 지원해줌으로써 프로그래머가 좀 더 편리하게 개발 할 수 있도록 지원해 줍니다. 편리하긴 하지만 때론 Assemly 의 참 모습을 잃어가는 것 같아 조금 아쉽기도 하네요. 참, 아시다시피 cross-platform 은 지원되지 않습니다 ^-^;

참고 사이트
http://www.masm32.com
http://www.movsd.com


NASM(Netwide Assembler)

80x86 platform 용으로 개발된 어셈블러입니다. 그리고 open-source 로 시작되었지요. 왜 그랬을까요? 네, 바로 Microsoft 때문입니다 -_-; 당시 Microsoft 의 MASM은 상용으로서 돈을 지불하고 사야만 했기 때문이죠. 그렇기에 MASM과 비슷한 점이 많고, 사람들의 비교 대상도 되곤 합니다. NASM의 장점은 현재는 Cross-Platform 을 지원한다는 것과 Macro(단, x86 platform에서) 를 제공한다는 것입니다. 그렇기에 일반적으로 Kernel 과 같이 O/S를 개발할 경우에 많이 사용되는 Assembler 입니다.

참고 사이트
http://www.nasm.us



이외의 Aseembler

이밖에 어셈블러(Assembler)는 다음 주소를 참고하시기 바랍니다.
JWASM : http://www.japheth.de/JWasm.html
FASM : http://flatassembler.net/
YASM : http://www.tortall.net/projects/yasm/




출처 http://rootfriend.tistory.com/entry/어셈블러Assembler의-종류

Posted by cyj4369
,

#apt-get install curlftpfs

#vim /etc/fstab

다음을 추가

curlftpfs#ID:PW@URL /media/nas fuse rw,uid=1000,gid=1000,umask=0755 0 0

'Embedded Lab > linux, x86' 카테고리의 다른 글

[에뮬레이터와 시뮬레이터의 차이]  (0) 2013.03.24
[어셈블리와 어셈블러]  (0) 2013.03.17
[crystaldiskmark]  (0) 2013.03.05
[파일시스템과 리눅스 디렉토리구조]  (0) 2013.02.20
[쉘 스크립트 wc]  (0) 2013.01.31
Posted by cyj4369
,

CrystalDiskMark는 SSD, HDD, USB등의 읽고 쓰기 성능을 시험할 수 있게 해주는 프로그램이다.
다운 받은 파일의 압축을 풀고 실행하면 되는 간단한 구조로 되어 있다.

1 ~ 9 - 테스팅하는 횟수
50MB ~ 4000MB - Test 크기
C:, D:, F: - Test할 드라이버
Seq - Sequential Read/Write Test :순차적 읽기, 쓰기 속도
512K - 무작위 쓰기, 읽기 속도(512KB)
4K - 무작위 쓰기 ,읽기 속도(4KB)
4K QD32 - 4K단위로 무작위 읽기, 쓰기 속도 실험하지만, QD가 32이어서 NCQ, AHCI를 위해 만든 옵션입니다.
(QD32란? 데이터를 병렬로 동시에 읽고 쓰는걸 테스트 하는 것 이다. (대기열 32라는 뜻이다.))

NCQ - HDD의 작업 효율을 높이는 기술이다. (HDD를 한번에 여러개의 명령을 보내고 수행)
            하드디스크에 지시한 명령을 접수한 순서대로 처리하지 않고 빠르게 처리할 수 있는 명령부터 다시 배열해 작업 속도를 단축시킨다.
AHCI - AHCI는 스토리지 드라이버에서 NCQ 및 핫 플러그와 같은 고급 직렬 ATA 기능을 사용할 수 있는 인터페이스 사양.
             AHCI는 소프트웨어가, SATA 장치들과 신호를 주고 받을 수 있도록 만든 하드웨어 구조를 뜻한다. (SATA HDD 파일 전송시 좀더 빠른 속도를 내기 위한 기술이다.)

'Embedded Lab > linux, x86' 카테고리의 다른 글

[어셈블리와 어셈블러]  (0) 2013.03.17
[리눅스에서 FTP자동 Mount]  (0) 2013.03.13
[파일시스템과 리눅스 디렉토리구조]  (0) 2013.02.20
[쉘 스크립트 wc]  (0) 2013.01.31
[쉘 스크립트에서 숫자연산]  (0) 2013.01.31
Posted by cyj4369
,

1. 파일 시스템의 종류

 

리눅스는 다양한 파일 시스템을 지원한다. ext2, ext3, minix, xiats, umsdos, hpfs OS/2, isofs, CD-ROM, msdos, nfs, sysv 등이 있다. 이 파일 시스템들은 각각 다음과 같은 특징을 가지고 있다.

 

◎ minix

과거 미닉스에서 사용되어졌던 파일 시스템으로 리눅스 파일 시스템 대부분의 기능을 제공하는 파일 시스템이다.

 

◎ xiafs

미닉스의 제한이 이었던 파일 이름과 파일 시스템에 대한 제한을 보안한 미닉스 파일 시스템의 수정 버전이다. 이 파일 시스템에는 추가된 새로운 기능은 없다. 한때 ext2와 함께 사용되었던 파일 시스템이었으나 현재는 많이 사용되지 않는다.

 

◎ msdos

도스의 FAT파일 시스템과 호환을 지원하는 파일 시스템이다. 또한 msdos와 OS/2와 윈도NT FAT파일 시스템과도 호환된다

 

◎ hpfs OS/2

OS/2의 파일 시스템이다. 하지만 현재는 읽기 전용인 파일 시스템으로 파일 시스템에 대한 읽기만이 가능하다.

 

◎ isofs CD-ROM

ISO기준을 따르는 표준 CD-ROM의 파일 시스템이다. isofs CD-ROM은 CD-ROM에 좀더 긴 파일명을 사용할 수 있도록 확장된 록 브릿지가 기본으로 지원된다.

 

◎ umsdos

MS-DOS 파일 시스템을 리눅스 상에서도 긴 파일명과 소유자, 접근 허가, 링크와 장치 파일 등을 사용할 수 있도록 확장한 파일 시스템이다. umsdos는 일반적으로 DOS 파일 시스쳄이 마치 리눅스 파일 시스템인 것처럼 보이도록 하는 기능을 제공하므로 따로 리눅스를 위한 파티션은 필요하지 않는다.

 

◎ nfs

네트워크 파일 시스템이다. 네트워크 상의 많은 컴퓨터들이 각각의 시스템에 가진 파일들을 서로 쉽게 공유하기 위해 제공되는 상호간의 파일 시스템 공유 파일시스템이다.

 

◎ sysv

System V/386, Xenix 그리고 Coherent 파일 시스템이다.

 

◎ ext

리눅스 초기에 사용되던 파일 시스템으로 호환성이 없던 ext2의 구 버전이다. 지금은 대부분 하지 않는다.

 

◎ ext2

리눅스는 미닉스 파일시스템을 처음으로 사용했다. 그러나 여러가지 제약 조건과 성능이 뛰어나지 못하였다. 이를 보안 하기 위해 EXT(Extened File System)이 제시 되었다. 이 파일 시스템은 리눅스 전용으로 설계되어 1992년 4월에 소개 되었다. 또한 1993년에는 2차 확장 파일 시스템인 EXT2가 ext의 여러가지 문제점을 보안하여 나왔다.

 

2. 디렉토리 구조

 

리눅스의 기본 디렉토리 구조는 트리 구조를 하고 있다. 그리고 디렉토리 구조는 기본구조를 제외하고 사용자의 설정에 따라 달라질 수 있다. 리눅스의 디렉토리 구조는 파일 시스템 표준안 (FSSTND, Linux File System Standard)을 기반으로 하는 것이 바람직하다. 파일 시스템 표준안은 리눅스상에서 어떻게 파일 시스템을 구성할 것인지에 대한 표준안을 제정하기 위해서 만들어진 문서이다. 표준안을 무조건 따르라는 강제력은 없지만 파일의 위치가 일관된게 유지되어 프로그램 작성, 포딩은 물론 시스템 관리도 쉬워지는 이점이 있기에 배포판들은 이 표준안을 지키고 있다.

 

2.1 디렉토리 기능 및 내용

 

대부분의 리눅스는 FHS(Filesystem Hierarchy Standard) 표준 파일 시스템 계층을 사용하고 같은 목적의 파일들은 같은 장소에 일관되게 모아 관리하므로 시스템에 자원이나 프로그램들을 쉽게 찾을 수 있다.

 

◎ /

루트 디렉토리라고 부르는 리눅스 시스템에서 가장 최상위 디렉토리며 디렉토리 구조의 시작이다. 시스템관리자의 홈인 /root와는 다르다. / 디렉토리 아래에 /bin, /etc, /boot, /mnt, /usr, /lib, /home, /dev, /proc, /var, /sbin, /tmp, /root, /lost+found 등의 디렉토리가 존재한다.

 

◎ /bin

binaries의 약어로 이진 파일들이며 리눅스에서 가장 기본이 되는 명령어들이 모여 있는 디렉토리이다. 디렉토리의 파일들을 보면 대부분이 실행 파일임을 알 수 있다. 또한 이곳에는 부팅에 필요한 명령어들이 위치하여 부팅후에 시스템의 계정 사용자들이 사용할 수 있는 일반적인 명령어들도 위치 하고 있다.

 

◎ /etc

이 디렉토리는 리눅스 시스템에 관한 각종 환경 설정에 연관된 파일들과 디렉토리들을 가진 디렉토리이다. 대부분의 이 디렉토리의 파일들은 시스템 관리자에 의해 관리되는 파일들이다. 웹 서버 환경 설정, 시스템 계정 사용자 정보, 패스 워드 관리, 시스템의 파일 시스템 관리 파일, 여러가지 시스템 보안에 관련된 파일들, 시스템 초기화 설정 파일, TCP/IP 설정 파일 등 시스쳄 전반에 걸친 거의 모든 환경 설정 파일들이 모두 이 디렉토리에 있다.

 

◎ /etc/rc.d

시스템의 부팅과 시스템 실행 레벨 변경시에 실행되는 스크립트들이 저장되어 있는 디렉토리이다. 리눅스의 6가지 실행 레벨로 각각의 해당 디렉토리가 있다.

 

◎ /etc/shadow

파일에서 패스워드 부분만을 따로 저장하는 파일이다. 이 파일에 패스워드는 암호화 되어 셰도우 패스워드 형태로 저장되어 있으며 시스템 관리자만이 접근할 수 있기 때문에 크래킹 등에 대한 우려가 상대적으로 적다.

 

◎ /etc/group

시스템의 그룹에 대한 정보를 저장하고 있는 파일이다.

 

◎ /etc/inittab

init를 설정하는 파일이다.

 

◎ /etc/issue, /etc/issue.net

getty에 의해서 로그인을 위한 프롬프트가 뜨기 전에 출력되는 메시지를 설정하는 파일이다. 리눅스 시스템으로 접속할 경우 가장 처음으로 볼 수 있는 메시지이다. 보통 시스템에 대한 설명과 각종 환영 메시지를 전달하기 위해서 사용된다. issue 파일의 내용은 보통 시스템의 터미널에서 볼 수 있다. 그리고 /etc/issue.net 파일의 내용은 리모트상에서 시스템으로 접속할 경우 볼 수 있다.

 

◎ /etc/motd

'Message of the day'의 약자로 시스템으로의 접속에 성공할 경우 쉘이 뜨기 전에 출력되는 메세지를 설정하는 파일이다.

 

◎ /etc/profile, /etc/csh.login, /etc/csh.cshrc

시스템이 시작될 때 사용자가 로그인을 할 때 본쉘이나 C쉘에 의해서 실행되는 스크립트 파일이다. 일반적으로 사용자들에 대한 기본 환경 설정에 사용된다.

 

◎ /etc/securetty

시스템 관리자가 시스템에 로그인할 수 있는 안전한 터미널에 대한 정보가 저장되어 있다. 일반적으로 가상콘솔이 설정되어 있다. 이것은 네트워크를 통해 시스템으로 침입해 시스템 관리자의 권한을 획득하는 크랙킹을 막기 위해서이다.

 

◎ /ete/shell

시스템에서 안정적으로 사용할 수 있는 쉘에 대한 정보를 저장하고 있는 파일이다. 만약 chsh명령을 사용해 사용중인 쉘을 바꾸려면 이 파일에 저장되어 있는 쉘중에 선택해야한다. 또한 ftp데몬의 경우 사용자의 쉘을 검사하여 /etc/shell에 저장되어 있지 않은 쉘을 사용한다면 로그인을 허용하지 않는다.

 

◎ /boot

리눅스 커널이 저장되어 있는 디렉토리로서 각종 리눅스 boot에 필요한 booting지원 파일들이 저장되어 있는 디렉토리이다.

 

◎ /mnt

외부 장치인 플로피 디스크, 시디롬, 삼바등을 마운트하기 위해서 제공되는 디렉토리이다. 임시로 사용되는 디렉토리이므로 프로그램들은 /mnt에 어떤 파일 시스템이 마운트 되었는지 자동으로 인식하지 않는다. 또한 /mnt는 보통 여러 개의 하위 디렉토리로 나누어 사용되고, 평소에는 각 디렉토리들은 비어 있다.

 

◎ /usr

시스템에 사용되는 각종 프로그램들이 설치되는 디렉토리이다. 프로그램과 관련된 명령어 미치 라이브러리들이 이 디렉토리에 위치 하게 된다. 또한 X 시스템관련 파일들과 리눅스 커널 소스, 각종 C언어 과련 해더 파일 등도 이 디렉토리 안에 저장되어 있다.

 

◎ /usr/bin

리눅스 시스템에서 사용되는 각종 프로그램들이 저장되어 있으며 /bin 디텍토리에 없는 다양한 실행 파일들이 저장되어 있는 디렉토리이다.

 

◎ /usr/X11R6

X 윈도우 시스템에 사용되는 모든 파일들이 이 디렉토리 안에 저장된다. 이 디렉토리는 X 윈도우 시스템의 개발과 설치를 좀더 쉽게 하기 위해서 전체 시스템 디렉토리 구조에 통합되지 않고 독자적인 구조를 가진다.

 

◎ /usr/etc

/etc 디렉토리에는 각종 환경 설정 파일들이 있듯이 이곳에도 여러 가지 시스템 환경 설정 파일들이 저장되어 있다./usr/etc의 파일들은 /etc디렉토리 안의 파일들과 달리 꼭 팔요한 파일들은 아니다.

 

◎ /usr/sbin

시스템 관리자를 위한 명령어들이 저장되는 디렉토리이다. 보통 이 디렉토리의 명령어들은 루트 파일 시스템에는 필요가 없는 서버 프로그램들이 저장된다.

 

◎ /usr/include

C언어 관련 해더 파일드이 저장되어 있는 디렉토리이다.

 

◎ /usr/lib

각종 라이브러리들이 저장되어 있는 디렉토리이다. 만약 사용자가 직접 작성한 프로그램을 컴파일한다면 해당 프로그램은 /usr/lib 디렉토리의 파일에 link된다. 또한 이 라이브러리 안에 실행 코드가 필요하다면 /lib 디렉토리를 참조한다.

 

◎ /usr/local

시스템의 특정적인 프로그램들이 저장되는 디렉토리이다.특정적인이란 시스템 관리자에 의해서 따로 설치되는 프로그램들을 말한다.

 

◎ /usr/man

man페이지의 실제 내용들이 저장되어 있는 디렉토리이다. 디렉토리를 살펴보면 man1, man2, man3, 등과 같이 여러개의 디렉토리들로 나누어져 있는 모습을 볼수 있다.man1 디렉토리는 섹션 1의 man 페이지 소스를 위한 디렉토리를 말한다.

 

◎ /usr/src

시스템에서 사용하는 각종 프로그램들의 컴파일되지 않은 소스 파일들이 저장되어 있다./usr/src/linux 디렉토리가 바로 리눅스의 커널소스를 저장하고 있는 디렉토리이기 때문이다.

 

◎ /usr/X386

/usr/X11R6 디렉토리와 유사한 티렉토리로 X11 Release 5를 위한 디렉토리이다.

 

◎ /usr/info

GNU info문서들을 저장하고 있는 디렉토리이다.

 

◎ /usr/doc

각종 문서들이 저장되어 있는 디렉토리이다

 

◎ /lib

프로그램들의 각종 라이브러리들이 존재한다. 대부분 공유 라이브러리로 더 편하게 사용할 수 있으며,파일의 크기를 줄여서 실행할 때 불러 사용하게 된다. /lib/modules 디렉토리에는 커널로 로딩 사능한 커널 모듀들이 저장되어 있다.

 

◎ /home

시스템 계정 사용자들의 홈 디렉토리와 ftp,www,등과 같은 서비스 디렉토리들이 저장된다. 이곳의 디렉토리와 파일들은 시스템에서 상용되지 않는다. 단지 리모트상에서 시스템으로 접속하는 사용자들을 위한 공간이다.

 

◎ /dev

디렉토리에는 시스템의 각종 디바이스들에 접근하기 위한 디바이스 드라이버들이 자장되어 있는 디렉토리이다. 이 디렉토리는 물리적인 용량은 갖지 않는 가상 디렉토리이다. 대표적으로는 하드 드라이브,플로피, 씨디롬 그리고 루프팩장치 등이 존재한다. 리눅스 시스템은 윈도우와 달리 각종 디바이스 장치들을 하나의 파일로 취급한다. 따라서 시스템은 각각의 장치들로부터의 정보를 /dev 디렉토리에 존해하는 해당 장치 파일로 부터 가지고 온다.

 

◎ /dev/console

시스템의 콘솔이다.

 

◎ /dev/hda

시스템의 하드 디스크이다. 여기서 /dev/hda는 첫 번째 하드 디스크를 의미하는 것이다./dev/hda1은 첫번째 하드 디스크의 첫번째파티션,/dev/hda2 두 번째 파티션등을 의미한다.만약 시스템에 여러 개의 하드 디스크가 부착되어 있다면 /dev/hdb,/dev/hdc 등의 파일도 /dev/hdb1,/dev/hdb2등과 같은형식으로 저장되어 있다.

 

◎ /dev/lp

시스템의 병렬 포트 장치들이다.

 

◎ /dev/null

이 디렉토리는 블랙홀이라고도 부르는 특별한 장치이다. 이 장치로 데이터 등을 보내면 모두 폐기되므로 주의해야 할 것이다.

 

◎ /dev/pty

시스템으로의 원격 접속을 위한 'pesudo-terminal'들이다. 만약 시스템 계정 사용자드이 원격지에서 시스템으로 텔넷등을 이용하여 시스쳄에 접속을 시도한다면 이들은 /dev/pty 디바이스들을 사용하게 되는 것이다.

 

◎ /dev/sda

SCSI 장치들이다. 만약 시스템에 스카시 하드 디스크를 장착했다면 시스템은 /dev/sda파일에서 정보를 얻어 장치에 접근할 것이다.

 

◎ /dev/ttyS,/dev/cuaS

/dev/ttyS은 직렬포트 장치들이고, /dev/cauS는 Callout. 장치이다.

 

◎ /dev/tty

시스템의 가상콘솔들이다. 이 가상 콘솔의 기능은 하나의 화면에 여러 개의 콘솔들을 만든다. 만약 사용자가 시스템 앞에 앉을 수 있다면,Alt + F1, Alt + F2등을 이용하여 리눅스에 제공한 여러개의 가상 콘솔을 직접 볼수 있을 것이다.

 

◎/proc

시스템의 각종 프로세서, 프로그램 정보 그리고 하드웨어적인 정보들이 저장된다. 이 티렉토리는 가상 파일 시스템으로 가상 파일 /dev와 마찬가지로 하드 디스크상에 물리적인 용량을 갖지 않는다. 즉 디렉토리에 존재하는 파일들은 실제 하드 디스크에 저장되지 않고 커널에 의해 메모리에 적재 된다. 디렉토리 안의 파일들은 현재의 시스템 설정을 보여 주는 것이다.

 

◎ /proc/1

프로세스 번호가 1인 프로세스에 대한 정보를 저장하는 디렉토리이다. 다른 프로세스들도 자신의 고유한 프로세스 번호의 디렉토리를 가진다는 것을 의미한다.

 

◎ /proc/cpuinfo

프로세서의정보를 저장하고 있는 파일이다. cpu의 타입, 모델, 제조회사, 각종 성능 등의 정보를 제공하여 준다.

 

◎ /proc/devices

현재 시스템 커널에 설정되어 있는 장치들에 대한 정보를 저장하고 있다.파일등의 정보로 모든 시스템의 장치 목록에 대한 정보를 얻을 수 있다.

 

◎ /proc/dma

현재 시스템에서 사용하고 있는 DMA 채널에 대한 정보를 저장하고 있다.

 

◎ /proc/filesystem

시스템에 설정되어 있는 파일 시스템에 대한 정보를 저장하고 잇는 파일이다.

 

◎ /proc/interrupts

현재 사용중인 인터럽트와 인터럽트의 사용량에 대한 정보를 저장하고 있는 파일이다.

 

◎ /proc/ioports

현재 사용중인 I/O 포트에 대한 정보를 저장하고 있는 파일이다.

 

◎ /proc/kcore

현재 시스템에서 사용중인 메로리의 실제 이미지이다. 이 파일은 실제 메모리의 내용을 모두 가진 것처럼 보이지만 프로그램이 필요로 하는 부분의 이미지만을 필요할 때 만들어 제공한다.

 

◎ /proc/kmsg

커널에 의해서 출력되는 메시지들을 저장하고 있는 파일이다.이것은 또한 syslog파일에도 저장된다.

 

◎ /proc/loadavg

현재 시스템의 평균 부하량(Load Average)에 대한 정보를 저장하고 있는 파일이다.이 파일을 통해서 시스템이 현재 수행해야 하는 일이 얼마나 많은지를 알려주는 3가지 지표에 대한 정보를 얻을 수 있다.

 

◎ /proc/ksyms

시스템 커널이 사용하고 있는 심볼들에 대한 정보를 저장하고 있는 파일이다.

 

◎ /proc/meminfo

현재 시스템이 사용중인 메모리의 사용량을 저장하고 있는 파일이다./proc/meminfo에서 실제 메모리는 물론 가상 메모리에 대한 정보도 얻으 수 있다.

 

◎ /proc/self

이 디렉토리를 보고 있는 프로그램 자시의 프로세스 디렉토리로 링크도어 있다. 만약 서로 다른 2개의 프로세스가 /proc 디렉토리를 보고 있다면 두 프로세스는 서로 다른 링크를 보게 된다. 이를 통해서 프로그램들이 자신의 프로세스 디렉토리를 쉽게 찾을 수 있다.

 

◎ /proc/stat

시스템의 현재 상태에 대한 다양한 정보를 저장하고 있는 파일이다.

 

◎ /proc/uptime

시스템이 얼마나 오래 동작했는지에 대한 정보를 저장하고 있는 파일이다.

 

◎ /proc/version

시스템이 현재 사용중인 커널 버전에 대한 정보를 저장하고 있는 파일이다.

 

◎ var

시스템에서 사용되는 동적인 파일들이 저장된다. 각종 시스템 로그 파일, 사용자 로그인에 대한 보안기록,메일서버를 운영한다면 사용자들에게 전송된 메일들을 임시로 저장한다.

 

◎ /var/cache

포멧된 메뉴얼 페이지들이 잠시 대기(Cache)하기 위한 디렉토리이다.

 

◎ /var/lib

시스테이 동작하면서 계속 수정되고 변경되는 파일들을 위한 디렉토리이다.

 

◎ /var/local

/usr/local 디렉토리에 설치된 프로그램들의 각종 데이터들이 저장되는 디렉토리이다.

 

◎ /var/lock

잠금 파일들이 저장되는 디렉토리이다.프로그램들이 특정한 장치나 파일들을 프로그램 자신이 독점적으로 사용하려 할 때 /var/lock 디렉토리에 잠금 파일을 만들어 사용하게 된다. 그렇기 때문에 다른 프로그램들은 장치나 파일을 사용하기 전에 우선 이 디렉토리의 내용을 조사하여 해당 장치나 파일들이 사용중인지 확인하게 된다.

 

◎ /var/log

프로그램들의 로그 파일들이 저장되는 디렉토리이다. 이 디렉토리에 wtmp파일은 login 파일과 messages파일은 syslog의 로그 파일이다.wtmp는 시스쳄의 모든 사용자 로그인과 로그 아웃에 대한 정보르 저장하고 있는 파일이고,messages는 커널과 시스템의 모든 출력 메세지를 저장하고 있는 파일이다./var/log 안의 파일들은 시스템의 사용량에 따라 그 크기가 무한대로 증가할 있으므로 정기적으로 파이들을 삭제하는 등 디렉토리 관리가 필요하다

 

◎ /var/run

시스템의 현재 정보들을 저장하고 있는 디렉토리이다./var/run/xinetd.pid 파일의 경우 현재 사용중인 xinetd 데몬의 프로세스 번호를 저장하고 있다.

 

◎ /var/spool

메일이나 뉴스, 프린터 큐 등고 같은 시스템상에서 대기 상태에 있는 작업들을 위한 디렉토리이다. 각각의 대기 작업들은 모두 /var/spool 아래 고유의 디렉토리에 위치하게 된다. 예를 들어 시스템의 계정 사용자들의 메일은 /var/spool/mail 에 저장된다.

 

◎ /var/tmp

/tmp에 저장된 임시 파일들중에 오래 보관되어야 할 임시 파일들이 저장되는 디렉토리이다.

 

◎ /tmp

이름에도 알 수 있듯이 임시 파일들을 위한 디렉토리이다.

 

◎ /root

시스템 관리자의 홈 디렉토리이다

 


'Embedded Lab > linux, x86' 카테고리의 다른 글

[리눅스에서 FTP자동 Mount]  (0) 2013.03.13
[crystaldiskmark]  (0) 2013.03.05
[쉘 스크립트 wc]  (0) 2013.01.31
[쉘 스크립트에서 숫자연산]  (0) 2013.01.31
[awk에서 substr쓰기]  (0) 2013.01.31
Posted by cyj4369
,

파일내의 단어 수 등의 정보를 출력한다.

문법
wc [ -cwl ] 파일이름(들)
옵션
-c : 문자(character)의 개수만을 알고 싶을 때 사용한다.
-w : 단어(word)의 개수만을 알고 싶을 대 사용한다.
-I : 행(line)의 숫자를 알고 싶을 때 사용한다. 혹은 개행 문자의 개수를 알고자 할 때 사용될 수도 있다.
설명
wc라는 이름은 word counter를 의미하는 것이 아닌가 생각한다. 아무런 옵션을 주지 않고서 사용하면 행수, 단어수, 문자수를 모두 검사해서 보고한다. 텍스트 문서 속에서 단어란 공백(space)문자, 탭(tab)문자 그리고 개행(newline)문자에 의해 구분되는 문자들의 집합을 의미한다.
사용예
$ wc sample.txt
11 29 197 sample.txt

Posted by cyj4369
,

쉘 스크립트에서는 모든걸 문자로 인식 한다.
그래서 어떻게 하면 문자를 숫자로 인식 하는가 살펴 보았더니
키보드 1 옆의 ` 와 expr 이라는 문장과 " " 을 잘 혼합하여야 계산이
되는 것이었다.

예를 보자
========================
cal.sh
========================
#!/bin/sh
log1=11
log2=21
total=`expr "$log1" "+" "$log2"`
echo $total
========================


결과를 보시다 시피 32가 실행되어서 나온다.
` 과 ` 사이에 expr 이라는 문자열을 넣고 변수의 경우 " " 로 감싸 주고 
연산자 + 도 "+" 로 감싸 주었다 
이렇게 하면 위의 그림처럼 결과가 나온다.

손이 좀 많이 가는 쉘스크립트 숫자 연산인 것 같다.

Posted by cyj4369
,