#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
,

awk '{print substr(값, 시작위치, 잘라낼문자갯수)}' [FileName]



Posted by cyj4369
,

LVM에서 VG구성했던 USB없이 VG삭제하는 방법

vgreduce --force --removemissing [vg이름]

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

[쉘 스크립트에서 숫자연산]  (0) 2013.01.31
[awk에서 substr쓰기]  (0) 2013.01.31
[apt-get 자세한 사용법]  (0) 2013.01.29
[리눅스 RAM 확인하기]  (0) 2013.01.09
[ioctl시 CPU관점에서 커널 lock]  (0) 2013.01.08
Posted by cyj4369
,

yum = apt-get
rpm = dpkg

소스리스트 업데이트                   : apt-get update
설치된 패키지 업데이트               : apt-get upgrade

패키지 설치                               :  apt-get install <package name>

패키지 제거                               :  apt-get --purge remove <package name>
패키지 검색                               :  apt-cache search <package name>
패키지 정보보기                         : apt-cache show <package name>
의존성 파일들 강제로 설치해두기  : apt-get -f install 

패키지 삭제와 설정지우기           : apt-get --purge autoremove

의존성 검사 수행하며 패키지 업데이트                 :apt-get -s dist-upgrade
 

deb 파일 설치                            : dpkg -i <file name.deb>
패키지 제거                               : dpkg -P <package name>
설치된 패키지 리스트                  : dpkg -l
설치된 패키지에 포함된 파일 보기 : dpkg -L <package name>
deb파일 포함된 파일들 보기         : dpkg -c <file name.deb>
deb파일의 정보보기                    : dpkg -I <file name.deb>
파일의 패키지명 알아내기            : dpkg -S <file name>
 

istall 로 설치된 
/var/cache/apt/archives/ 비우기

apt-get clean

apt-get autoclean


강제삭제
dpkg --force-all -r 패키지명
 
강제설치
dpkg --force-architecture -i 패키지명

시스템 아키텍쳐 확인(32비트,64비트)
dpkg --print-architecture 

apt-get 설치중 
apt-get install -f 에러가 난다면 그대로 쳐주자

apt-get install -f 

 
패키지검색
aptitude search 패키지명 

패키지를 재설치 하게될때는
apt-get install 명령어로 받은 deb 파일의 저장 위치
 /var/cache/apt/archives/ 에 .deb 패키지파일로 저장되어있으니
해당경로로 이동하여 dpkg -i 패키지로 재설치 해주자 

http://ftp.de.debian.org/debian/pool/main/  에서 패키지를 다운받을수도 있다.
 


아래와같이 하위프로세스가 시그널에 의해서 죽었다는 메세지가 뜨면 강제로 재설치해주자

dpkg: error processing /var/cache/apt/archives/gpgv_1.4.10-4_i386.deb (--unpack):

trying to overwrite '/usr/bin/gpgv', which is also in package gnupg 1.4.1-1.sarge3

dpkg-deb: subprocess paste killed by signal (Broken pipe)

Errors were encountered while processing:

 /var/cache/apt/archives/gpgv_1.4.10-4_i386.deb

E: Sub-process /usr/bin/dpkg returned an error code (1)

# dpkg -i --force-overwrite gpgv_1.4.10-4_i386.deb 


설치중에 libapt-pkg4.10 관련되서 에러가 뜨면 

Reading package lists... Done

Building dependency tree       

Reading state information... Done

You might want to run `apt-get -f install' to correct these:

The following packages have unmet dependencies:

  apt-utils: Depends: libapt-pkg4.10

  libapt-pkg-perl: Depends: libapt-pkg4.10

E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution)

아래 주소에서 패키지 다운받고 설치해주자

# wget http://ftp.br.debian.org/debian/pool/main/a/apt/apt_0.8.10.3+squeeze1_i386.deb 

# dpkg -i apt_0.8.10.3+squeeze1_i386.deb 




출처 : http://cdral.tistory.com/778

Posted by cyj4369
,

1. lshw 를 사용하여 하드웨어 상세 정보 확인(링크 참조)

- lshw 는 rpm 패키지를 별도로 설치해야됨

참고글 : http://jonnychoe.egloos.com/5549359

2. dmidecode 
- 설치할 필요없음
- dmidecode 명령은 서버 하드웨어, 바이오스 정보를 system DMI 테이블에서 읽어온다.
시스템의 현재 configuration 상태뿐만 아니라 최대 지원가능한 설정 정보까지도 불러온다.
예를 들어, 시스템의 현재 RAM 정보와 최대 확장가능한 RAM 정보까지도 확인할 수 있다.

dmidecode 의 output 형태는 다음과 같다.
Record Header: Handle {record id}, DMI type {dmi type id}, {record size} bytes
Record Value: {multi line record value}
  • record id: Unique identifier for every record in the DMI table.
  • dmi type id: Type of the record. i.e BIOS, Memory etc.,
  • record size: Size of the record in the DMI table.
  • multi line record values: Multi line record value for that specific DMI type.

dmidecode 명령의 output 예 :

# dmidecode | head -15

# dmidecode 2.9
SMBIOS 2.3 present.
56 structures occupying 1977 bytes.
Table at 0x000FB320.

Handle 0xDA00, DMI type 218, 11 bytes
OEM-specific Type
        Header and Data:
                DA 0B 00 DA B0 00 17 03 08 28 00

Handle 0x0000, DMI type 0, 20 bytes
BIOS Information
        Vendor: Dell Computer Corporation
        Version: A07
        Release Date: 01/13/2004

DMI 테이블의 레코드 갯수를 보기위해서는 

# dmidecode | grep ^Handle | wc -l
56

(or)

# dmidecode | grep structures
56 structures occupying 1977 bytes.

DMI Types

시스템의 CPU 정보를 보기위해서는 type id 4 옵션을 dmidecode 명령과 함께 준다.

# dmidecode -t 4
# dmidecode 2.9
SMBIOS 2.3 present.

Handle 0x0400, DMI type 4, 35 bytes
Processor Information
        Socket Designation: Processor 1
        Type: Central Processor
        Family: Xeon
        Manufacturer: Intel
        ID: 29 0F 00 00 FF FB EB BF
        Signature: Type 0, Family 15, Model 2, Stepping 9
        Flags:
                FPU (Floating-point unit on-chip)
                VME (Virtual mode extension)
                DE (Debugging extension)
                PSE (Page size extension)
                TSC (Time stamp counter)
                MSR (Model specific registers)

DMI type 은 아래와 같다.

Type   Information
       ----------------------------------------
          0   BIOS
          1   System
          2   Base Board
          3   Chassis
          4   Processor
          5   Memory Controller
          6   Memory Module
          7   Cache
          8   Port Connector
          9   System Slots
         10   On Board Devices
         11   OEM Strings
         12   System Configuration Options
         13   BIOS Language
         14   Group Associations
         15   System Event Log
         16   Physical Memory Array
         17   Memory Device
         18   32-bit Memory Error
         19   Memory Array Mapped Address
         20   Memory Device Mapped Address
         21   Built-in Pointing Device
         22   Portable Battery
         23   System Reset
         24   Hardware Security
         25   System Power Controls
         26   Voltage Probe
         27   Cooling Device
         28   Temperature Probe
         29   Electrical Current Probe
         30   Out-of-band Remote Access
         31   Boot Integrity Services
         32   System Boot
         33   64-bit Memory Error
         34   Management Device
         35   Management Device Component
         36   Management Device Threshold Data
         37   Memory Channel
         38   IPMI Device
         39   Power Supply

또한, type id 를 입력하는 대신에 키워드를 사용할 수도 있다.

다음은 사용가능한 키워드이다.

       Keyword     Types
       ------------------------------
       bios        0, 13
       system      1, 12, 15, 23, 32
       baseboard   2, 10
       chassis     3
       processor   4
       memory      5, 6, 16, 17
       cache       7
       connector   8
       slot        9

type id 2 와 10 에 대한 정보를 보기 위해 키워드 baseboard 를 사용한 예

# dmidecode -t baseboard
# dmidecode 2.9
SMBIOS 2.3 present.

Handle 0x0200, DMI type 2, 9 bytes
Base Board Information
        Manufacturer: Dell Computer Corporation
        Product Name: 123456
        Version: A05
        Serial Number: ..CN123456789098.

Handle 0x0A00, DMI type 10, 14 bytes
On Board Device 1 Information
        Type: SCSI Controller
        Status: Enabled
        Description: LSI Logic 53C1030 Ultra 320 SCSI
On Board Device 2 Information
        Type: SCSI Controller
        Status: Enabled
        Description: LSI Logic 53C1030 Ultra 320 SCSI
On Board Device 3 Information
        Type: Video
        Status: Enabled
        Description: ATI Rage XL PCI Video
On Board Device 4 Information
        Type: Ethernet
        Status: Enabled
        Description: Broadcom Gigabit Ethernet 1
On Board Device 5 Information
        Type: Ethernet
        Status: Enabled
        Description: Broadcom Gigabit Ethernet 2


dmicode 를 사용하여 RAM(Physical Memory) 에 대한 정보 확인하기

시스템에서 지원가능한 최대 RAM 크기는 얼마인가? 
아래 예는 최대 RAM 크기가 8GB 임을 보여준다.

# dmidecode -t 16
# dmidecode 2.9
SMBIOS 2.3 present.

Handle 0x1000, DMI type 16, 15 bytes
Physical Memory Array
        Location: System Board Or Motherboard
        Use: System Memory
        Error Correction Type: Multi-bit ECC
        Maximum Capacity: 8 GB
        Error Information Handle: Not Provided
        Number Of Devices: 4

메모리를 얼마나 확장할 수 있는지 를 확인하기 위해 /proc/meminfo 명령을 사용하여 현재 메모리 총량을 확인할 수 있다.

# grep MemTotal /proc/meminfo
MemTotal:      1034644 kB

위 예는 현재 시스템이 1 GB 메모리를 가지고 있음을 확인할 수 있지만, 이것이 1GB 1개인지, 512MB 2개인지, 256MB 4개인지는 알 수가 없다.

dmidecode 명령을 사용하여 memory 슬롯에서 각각 사용되고 있는 RAM  크기를 알 수 있다.

아래 예는 memory slot  이 4개이며, 현재 슬롯 1,2 에 512 MB RAM 이 각각 장착되어 있음을 확인할 수 있다.

# dmidecode -t 17
# dmidecode 2.9
SMBIOS 2.3 present.

Handle 0x1100, DMI type 17, 23 bytes
Memory Device
        Array Handle: 0x1000
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: 512 MB  [Note: Slot1 has 512 MB RAM]
        Form Factor: DIMM
        Set: 1
        Locator: DIMM_1A
        Bank Locator: Not Specified
        Type: DDR
        Type Detail: Synchronous
        Speed: 266 MHz (3.8 ns)

Handle 0x1101, DMI type 17, 23 bytes
Memory Device
        Array Handle: 0x1000
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: 512 MB [Note: Slot2 has 512 MB RAM]
        Form Factor: DIMM
        Set: 1
        Locator: DIMM_1B
        Bank Locator: Not Specified
        Type: DDR
        Type Detail: Synchronous
        Speed: 266 MHz (3.8 ns)

Handle 0x1102, DMI type 17, 23 bytes
Memory Device
        Array Handle: 0x1000
        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: No Module Installed [Note: Slot3 is empty]
        Form Factor: DIMM
        Set: 2
        Locator: DIMM_2A
        Bank Locator: Not Specified
        Type: DDR
        Type Detail: Synchronous
        Speed: 266 MHz (3.8 ns)

Handle 0x1103, DMI type 17, 23 bytes
Memory Device
        Array Handle: 0x1000

        Error Information Handle: Not Provided
        Total Width: 72 bits
        Data Width: 64 bits
        Size: No Module Installed [Note: Slot4 is empty]
        Form Factor: DIMM
        Set: 2
        Locator: DIMM_2B
        Bank Locator: Not Specified
        Type: DDR
        Type Detail: Synchronous
        Speed: 266 MHz (3.8 ns)


BIOS information 확인하기

# dmidecode -t bios
# dmidecode 2.9
SMBIOS 2.3 present.

Handle 0x0000, DMI type 0, 20 bytes
BIOS Information
        Vendor: Dell Computer Corporation
        Version: A07
        Release Date: 01/13/2004
        Address: 0xF0000
        Runtime Size: 64 kB
        ROM Size: 4096 kB
        Characteristics:
                ISA is supported
                PCI is supported
                PNP is supported
                BIOS is upgradeable
                BIOS shadowing is allowed
                ESCD support is available
                Boot from CD is supported
                Selectable boot is supported
                EDD is supported
                Japanese floppy for Toshiba 1.2 MB is supported (int 13h)
                5.25"/360 KB floppy services are supported (int 13h)
                5.25"/1.2 MB floppy services are supported (int 13h)
                3.5"/720 KB floppy services are supported (int 13h)
                8042 keyboard services are supported (int 9h)
                Serial services are supported (int 14h)
                CGA/mono video services are supported (int 10h)
                ACPI is supported
                USB legacy is supported
                LS-120 boot is supported
                BIOS boot specification is supported
                Function key-initiated network boot is supported

Handle 0x0D00, DMI type 13, 22 bytes
BIOS Language Information
        Installable Languages: 1
                en|US|iso8859-1
        Currently Installed Language: en|US|iso8859-1


장비의 Manufacturer, Model 과 Serial number 확인하기

# dmidecode -t system
# dmidecode 2.9
SMBIOS 2.3 present.

Handle 0x0100, DMI type 1, 25 bytes
System Information
        Manufacturer: Dell Computer Corporation
        Product Name: PowerEdge 1750
        Version: Not Specified
        Serial Number: 1234567
        UUID: 4123454C-4123-1123-8123-12345603431
        Wake-up Type: Power Switch

Handle 0x0C00, DMI type 12, 5 bytes
System Configuration Options
        Option 1: NVRAM_CLR:  Clear user settable NVRAM areas and set defaults
        Option 2: PASSWD:  Close to enable password

Handle 0x2000, DMI type 32, 11 bytes
System Boot Information
        Status: No errors detected


Posted by cyj4369
,

제공 : 한빛 네트워크
저자 : 한동훈 

Linux Scalability Effort 
http://sourceforge.net/project/showfiles.php?group_id=8875 
: 락은 동기화를 위해 필요하지만 수행 성능에 큰 저하를 가져온다. 

적절히 무시할 수 있는 센스 
http://minjang.egloos.com/1094167 
: 위의 블로그에도 써 있는 것처럼 무시할 수 있다면 무시하는 것이 더 좋다. 

위 소스포지 사이트는 리눅스 커널의 수행성능을 끌어올리기 위해 커널에서 사용되는 다양한 잠금(lock)을 제거하는 패치로 이뤄져 있다. 커널 2.2와 2.4를 대상으로 하고 있는 커널 패치이다. 위 프로젝트는 현재 중단되었으며, 프로젝트의 내용들은 대부분 커널 2.6에 포함되었다. 어떤 식으로 커널의 잠금을 제거하거나 성능 향상을 이뤄냈는지 살펴보기엔 귀중한 소스이다. 중단된 프로젝트라해도 오픈된 채로 남겨두면 누군가에겐 도움이 된다. 특히, 커널을 공부하는 입장에서는...(실제로, 소스포지에는 RTLinux 패치도 여전히 남아있다. 리얼타임 패치의 대부분은 커널에 사용된 잠금 구조를 제거하는 것으로 이뤄져있다. RTLinux 패치의 일부분이었던 O(1) 스케줄러는 현재 커널 2.6에 포함되어 있다) 

커널의 잠금을 제거하고, 수행성능을 최적화하기 위한 시도는 커널 2.4에서 2.6으로 넘어가는 동안에도 이뤄졌다. 

커널 2.4에서는 빅 커널 락(Big Kernel Lock, BKL)이 있다. 커널 2.4는 CPU가 커널 영역에서 실행하기 위해 BKL을 획득하는 구조였다. 즉, CPU0이 BKL을 획득하고 커널 영역에서 실행중이라면 다른 CPU들은 커널 영역에 진입할 수 없었다. CPU0가 커널 영역에서 실행되는 동안에는 CPU1은 사용자 프로세스를 실행하던가, 사용자 프로세스도 다 실행해버려서 다른 프로세스로 전환하기 커널 영역에 진입해야 한다면 CPU0이 커널 영역에서 볼일 다 볼 때까지 손가락 빨고 있어야하는 구조인 것이다. 물론, 커널 영역에서의 실행은 대부분 매우 짧지만 커널 영역 선점을 위해 CPU들이 경쟁하는 경우엔 비효율적인 구조였다. 장점은 잠금 메커니즘이 매우 단순하게 구현되기 때문에 커널 개발자 입장에서 매우 편하다는 것이다. 하지만, CPU 개수가 늘어나면 늘어날수록 커널 영역 진입을 위한 경쟁은 심화될 수 밖에 없었다. 따라서, 커널 2.6부터는 CPU0이 커널 영역에서 실행되고 있더라도 CPU1이 CPU0의 커널영역 제어권을 뺏어올 수 있게 되었다. 이를 커널 선점(Kernel Preemption)이라 부른다. 

커널 2.6에서는 BKL의 상당부분을 제거하고, 세마포어(semaphore, 원어로는 세머퍼라 읽는다), 스핀락(spinlock)을 이용하는 구조로 전환하였다. 이는 BKL에 비하면 커널 선점을 허용하면서 잠금을 관리하는 데 들어가는 비용이 낮다. 커널 2.6은 BKL을 완전히 제거하지는 못했다. 그저, 상당부분을 제거했을 뿐이다. 

[참고] 커널 선점을 허용하기 위한 잠금 메커니즘은 매우 복잡하며, 이로 인해 시스템에 있는 버그를 발견하는 것이 더 어렵게 되었다며, 커널 선점을 사용하지 않게 커널을 설정할 것을 권하며 논쟁이 되었던 적도 있다. 

Linux: Debating The Merits Of Kernel Preemption 
http://kerneltrap.org/node/3966 
또한, 잠금을 아예 하지 않으면서 동기화를 이루기 위한 구조로 RCU(Read-Copy-Update) 구조를 도입했다. 

CPU0이 A라는 데이터를 접근하고 있고, CPU1이 A를 접근해서 데이터를 수정해버리면 RCU에서는 A'을 생성한다. 이때는 시스템에 A와 A'이 동시에 존재하게 된다. 이때 CPU2가 A를 접근하게 되면 RCU에 등록된 연결리스트를 타고 A'에 접근하게 된다. 시간이 경과해서 CPU0이 A라는 데이터를 더 이상 접근하지 않게 되면 RCU에서는 A를 완전히 제거하게 된다. 

A라는 구조체에는 참조 카운팅을 관리하는 멤버도 갖지 않는다. 이 말은 내가 A 구조체의 참조 카운팅을 관리하기 위한 루틴을 작성하지 않아도 되는 것을 의미하고, A 구조체의 잠금을 관리하기 위한 루틴을 작성하지 않아도 되는 것을 의미한다. A라는 자료의 동기화는 오직 RCU에 의존해서 수행된다. 

A와 A'이 동시에 존재하는 상황에서 A를 제거하는 시점은 시스템 내의 모든 CPU들이 프로세스 전환이 발생하거나 대기(idle) 상태가 되는 경우가 일정 횟수 이상 발생하면 A를 참조하지 않는다는 것을 알 수 있다. 물론, 이때도 A'은 여전히 참조하고 있는 것이다. 이렇게 되면 시스템은 모두 업데이트된 A'을 참조하게 되고, 데이터 무결성을 보장할 수 있게 된다. 

말은 쉽지만 복잡하다. 구현이 시작되고, 커널의 메인라인에 포함되기까지 거의 2년이 걸린 것으로 알고 있다. (거의 2년으로 알고 있음. 그만큼 구현하기 어렵고, 테스트하기 어렵다는 의미가 아닐까. 지금은 만들어져서 널리 쓰이고 있으므로 커널 개발자들은 RCU 관련 API들을 가져다 쓰기만 하면 된다) 

[참고] RCU는 여러번 수정하는 것도 허용한다. 이때는 A가 A', A'이 A'', A''이 A'''으로 변경되는 구조이며, 앞에서 얘기한 특정한 조건이 만족되면 리스트를 따라 A, A', A''을 시스템에서 제거하고, 모든 수정이 반영된 A'''만 남게 된다. 
RCU는 현재 커널 전반에서 널리 쓰이고 있으며, RCU로 대체할 수 있다면 RCU로 모두 대체하고 있는 중이다. RCU가 쓰이는 곳으로는 IP 라우팅, 가상 파일 시스템에서의 덴트리 등이다. 

그러나, 사람들은 여전히 이것에 만족하지 않으며, 보다 많은 커널 잠금을 제거해서 최대한의 성능을 내려고 하고 있다. 

많은 사람들이 최적의 성능을 위해 끊임없이 머리를 짜내서 만들어 놓고도 지칠 줄 모르는지 그 위에 더 나은 성능을 내기 위해 노력하고 있다. 

커널 2.4 -> 2.6의 큰 변화에 대해서는 다음의 발표자료가 참고가 된다.(2004. 1월 자료) 

Linux 2.6 Performance in the Corporate Data Center 
ftp://www6.software.ibm.com/software/developer/library/os-ltc-kernel/2.6-datacenter.pdf 

커널에서 동기화를 위한 프로그래밍은 상당히 어려웠고, 커널 개발자들은 동기화 메커니즘을 테스트하기 위한 다양한 코드를 만들어왔다. 그리고, 이러한 코드들을 모아서 Kernel Lock Validator라 이름 붙였고, 커널 2.6.17 이후부터 포함되었다 

관심있는 분들이라면 아래 사이트의 내용을 참고하면 좋을 것이다. 

The kernel lock validator 
http://lwn.net/Articles/185666/ 

KLV를 들여다보면 락 메커니즘을 테스트하기 위한 코드를 어떻게 작성해야 하는지 이해할 수 있지 않을까.











커널 2.6.36에서는 file_operations 에서 ioctl 이 제거되었고
대신에 unlocked_ioctl 과 compat_ioctl 이 사용되게 되었다.

unlocked_ioctl 과 compat_ioctl 은 2.6.11 에서 처음 추가되었는데 그 이유는 BKL 이슈에 대한 것때문이다.
BKL 은 Big Kernel Lock 의 약자인데 커널에서 락을 이용하지 않게 하려는 시도가 꾸준히 있어왔다.

그 이유는 커널에서 특히 SMP 구조에서 락에 들어가는 비용이 너무 많기 때문이며, 효율적으로 사용하기 위해서다.
그런 이유로 도입된 것이 RCU(read copy update) 이다.

어쨋든 ioctl 이 호출되면 커널 락이 수행되고 자동적으로 SMP 구조에서는 비효율을 가져오고 있었다.
그래서 사용되는 것이 unlocked_ioctl 이다.

쉽게 얘기해서 모든 CPU에 대해서 lock 을 걸던것을 개별적인 lock 을 걸수 있게끔 바꾼것이다.

Posted by cyj4369
,