vi에서 설정이 부족해서(?) backspace 키나 화살표키 등이 안먹힌다.


그래서 ~/.exrc 파일에 몇가지 설정을 해주면 잘 동작한다.

(걍 vim 설치해서 쓰면되긴 한다.)



그렇다면 저 파일은 뭘까해서 찾아봤당.


vi 사용시, user의 home 디렉터리에서 이 파일을 찾아서 설정을 반영한다.

indentation, tab space 설정 같은것 들이다.

대게 이런 설정은 파일이 열려있을 때 까지만 유효하기 때문에 .exrc라는 파일에 설정을 Group화 할 수 있다.



vim 설정파일인 .vimrc 같은 것 이다.




암튼 저 상황에 대한 해결책은


$ cd ~

$ vi .exrc


set autoindent

set number

set bs=2

set nocp



$ source .exrc         // 적용



'System > Linux OS ' 카테고리의 다른 글

리눅스 환경변수와 UID, PID, 시스템자원의 제한  (0) 2015.12.24
lsof  (0) 2015.12.24
strace, ltrace  (0) 2015.12.24
gcc / gdb  (0) 2015.12.24
man  (0) 2015.12.24

리눅스에서는 shell(base)를 통해 명령 및 프로그램을 실행

환경변수는 명령이나 프로그램을 수행하는 데 필요한 정보를 가짐


HOME : 현재 로그인 사용자의 홈 디렉토리

PATH  : 명령을 검색할 디렉토리 목록. 리눅스 명령에 대한 실행 파일의 위치가 포함

PS1 : 쉘 프롬프트

MANPATH : 온라인 매뉴얼 검색 디렉토리 목록

USERNAME : 로그인 사용자 명

HOSTNAME : 사용중인 시스템의 호스트 명


c에서 getenv("환경변수명"); 으로 값을 얻어올 수 있음

<-> putenv();



##### 사용자 계정정보

/etc/passwd : 리눅스에서 사용자 계정정보를 보관하는 파일

계정, UID, GID, 홈디렉토리, 로그인 쉘 등을 포함한 상세한 정보를 저장


# include <sys/types.h>


struct passwd *getpwuid(uid_t uid);

struct passwd *getpwnam(const char *name);


struct passwd {

char *pw_name;

uid_t pw_uid;

gid_t pw_gid;

...

}



### UID

: 리눅스 사용자 ID


1. Real UID : 실제 로그인 한 사용자 계정의 UID


getuid(), getgid(), setuid(), setgid()


2. Effective UID : 파일 접근의 효과를 가지고 있는 UID

일반적으로 Real UID와 동일하나 set-UID 퍼미션이 설정된 프로그램을 수행하면 일시적으로 변경이 가능하며,

파일 접근에 대한 권한을 설정할 수 있음


geteuid(), getegid()



### PID

리눅스에서 모든 명령은 파일로 정의되며, 명령을 수행한다는 것은 해당 파일을 실행하는 프로세스가 동작한다는 것을 의미


getpid() : 현재 프로세스 ID 출력

getppid() : 현재 프로세스의 부모 프로세스 ID 출력


### time 

리눅스에서는 시스템 시간을 clock tick으로 세며 다음과 같은 함수들을 제공


time() 초단위 시간으로 확인 가능

gettimeofday() 마이크로 초 단위의 시간까지 확인 가능

times() 프로그램의 실행 시간을 확인하는 함수

uname() 시스템 호스트 정보. 시스템의 이름이나 OS 종류 및 버전 등에 대한 정보가 필요할 경우 사용

localtime() time()에서 구한 시간을 연,월,일,시,분,초의 형식으로 계산해주는 함수


### 시스템 자원의 제한치 설정


int getrlimit(int resource, struct rlimit *r_limit);

int setrlimit(int resource, const struct rlimit *r_limit);


struct rlimit {

rlim_t    rlim_cur;        // 현재 설정된 소프트 제한 값 확인

rlim_t    rlim_max;        // 절대적 제한치

};


<설정 가능한 리소스 종류>

RLIMIT_CPU

RLIMIT_FSIZE

RLIMIT_DATA

RLIMIT_STACK

RLIMIT_CORE

RLIMIT_NPROC

RLIMIT_NOFILE

RLIMIT_MEMLOCK



'System > Linux OS ' 카테고리의 다른 글

.exrc  (0) 2016.04.23
lsof  (0) 2015.12.24
strace, ltrace  (0) 2015.12.24
gcc / gdb  (0) 2015.12.24
man  (0) 2015.12.24


##### lsof

현재 동작 중인 모든 프로세스에 대한 오픈된 파일 보기


* 리눅스에서는 모든걸 파일로 관리하므로 유용하고 다양하게 쓰이는 명령어임


ex) 


$ sudo lsof -p 1052

특정한 1052번 프로세스가 오픈한 파일들의 목록


$ sudo lsof -i:22

네트워크가 연결되어있는 호스트나 포트로 확인


$ lsof -s /tmp

특정 파일 또는 디렉토리와 관련한 프로세스 찾기



'System > Linux OS ' 카테고리의 다른 글

.exrc  (0) 2016.04.23
리눅스 환경변수와 UID, PID, 시스템자원의 제한  (0) 2015.12.24
strace, ltrace  (0) 2015.12.24
gcc / gdb  (0) 2015.12.24
man  (0) 2015.12.24



##### strace

프로그램이 실행되는 동안 수행되는 시스템콜을 추적하는 도구

디버깅 초기에 문제를 확인하거나 메모리 문제 같은 운영체제 관련 문제를 추적할 때 사용


$ strace -help

usage: strace [-CdffhiqrtttTvVxxy] [-I n] [-e expr]...

              [-a column] [-o file] [-s strsize] [-P path]...

              -p pid... / [-D] [-E var=val]... [-u username] PROG [ARGS]

   or: strace -c[df] [-I n] [-e expr]... [-O overhead] [-S sortby]

              -p pid... / [-D] [-E var=val]... [-u username] PROG [ARGS]


-f : 자식프로세스도 추적

-tt / -T : 타임 스탬프 표시 / 실지 함수호출 시간 표시

-v : 상세 출력 모드

-p PID : 이미 실행중인 프로세스 추적

-o 파일명 : 추적 결과 파일에 저장

-e trace=### : ###에 해당되는 내용 출력

ex) -e trace=open



$ strace /bin/pwd

시스템콜 이름, 매개변수, 반환값





$ sudo strace -p $(pgrep ssh)        // ssh 포트그룹을 식별하여 ssh 프로세스의 시스템 콜 확인


> select 함수에서 waiting


> 다른 곳에서 ssh를 통해 접속


> accept 함수로 떨어지면서 정상정으로 ssh 접속 수행




$ sudo strace -e trace=process -p $(pgrep ssh)      // ssh 동작 중 프로세스 관련 시스템 콜 부분만 뽑아 보기


> 프로세스가 수행되는 중인 정보만 나옴


> ssh 접속


> clone 시스템 콜이 동작하여 프로세스가 생성됨


> $ exit 명령을 사용하여 ssh 접속 종료


> ssh 접속 종료후의 프로세스 관련 내용 출력





##### ltrace 

프로그램이 실행되는 동안 호출되는 동적(공유) 라이브러리 함수를 추적하는 도구

strace와 유사

동적 라이브러리만 추적하므로 파악하기는 쉽지만, 문제의 원인을 찾기가 어려움


-u username : username의 권한으로 명령 실행하면서 라이브러리 추적 (관리자 권한 필요)

-tt / -T : 타임 스탬프 표시 / 실지 함수호출 시간 표시

-v : 상세 출력 모드

-p PID : 이미 실행중인 프로세스 추적

-o 파일명 : 추적 결과 파일에 저장

-e {[+|-][라이브러리 함수명][라이브러리 파일명]} : 해당 내용만 출력



$ ltrace cat /etc/passwd


> 함수들과 인수들의 값을 동적으로 확인



$ sudo ltrace -e malloc+free+select -p $(pgrep ssh)        // ssh 동작 중 -e 옵션으로 malloc+free+select 부분만 출력



> ssh 접속이 되면 해당 부분만 출력


> ssh 접속 종료에도 해당 정보만 출력



 

'System > Linux OS ' 카테고리의 다른 글

리눅스 환경변수와 UID, PID, 시스템자원의 제한  (0) 2015.12.24
lsof  (0) 2015.12.24
gcc / gdb  (0) 2015.12.24
man  (0) 2015.12.24
리눅스 커널 커밋(commit)하기 - ing  (0) 2015.12.23


##### gcc 

: GNU Compiler CollectionGNU의 C 컴파일러

(이름이 바뀜, 이전엔 C Compiler 였나..?)


ANSI + POSIX



### 과정 및 옵션

.c -> 컴파일(전처리①, 문법검사/코드최적화 -> .o -> 링크 -> .exe


① 컴파일과정 - 전처리 옵션

-I : 헤더파일 위치지정 옵션, 표준 디렉토리(/usr/include) 외의 헤더파일의 위치 지정에 사용

-D : Dname, name에 지정된 심볼을 1로 정의, 조건부 컴파일에서 유용하게 사용 됨


② 컴파일과정 - 문법검사/코드최적화

-O : "ON", 컴파일러 최적화 옵션으로 최적화 단계(0~3)를 N으로 지정


③ 링크과정

-L : 라이브러리 파일이 위치하는 경로를 지정

-l + string : 컴파일 시 string으로 입력한 경로의 라이브러리 파일을 추가

* 라이브러리 파일은 ".so" or ".a"

* 라이브러리 파일의 이름은 "lib"로 시작

* 표준 라이브러리는 "/usr/lib"에 존재

ex) 수학 표준 라이브러리 libm.a or libm.so 사용시 "-lm"을 사용해야 함

gcc -o exam_mlib ex exam_mlib.c -lm


④ 기타

g : 실행파일에 표준 디버깅 정보 포함, gdb, DDD 등 디버거 이용 시 사용

wall : gcc가 제공하는 모든 경고를 사용,

시스템과 네트워크 프로그램 및 커널기반의 프로그램 작성 시 해당 옵션을 사용하는 게 좋음



### 라이브러리


1. 정적 라이브러리

소스파일 생성(.c) -> 오브젝트파일 생성(.o) -> 라이브러리파일생성(.a)

  vi static.c                gcc -c static.c                ar rb lib##.a  static.o


2. 동적 라이브러리

소스파일 생성(.c) -> 재배치 가능한 오브젝트파일 생성(.o) -> 라이브러리파일생성(.a)

  vi shared.c              gcc -c -fPIC shared.c                        ld -shared -o lib##.so shared.o


* 공유 라이브러리 파일 이용 시 메모리에 미리 올라가져 있어야 사용할 수 있으며, 환경변수 설정 후 사용할 수 있게 됨됨

사용자 home의 .bashrc파일에 저장하여 매번 실행해야하는 불편함을 줄일 수 있음




### sysinfo를 활용하여 간단한 프로그램 작성


$ man 2 sysinfo


$ vi test_sysinfo.c


$ gcc -o sysinfo sysinfo.c


$ ./sysinfo



##### gdb 


* gdb를 이용하여 파일을 디버깅하려면 실행파일이 디버그모드로 컴파일 되어 있어야 함 (-g 옵션 사용)


명령어 참고. 

https://sourceware.org/gdb/current/onlinedocs/gdb/index.html#Top

http://egloos.zum.com/psyoblade/v/2653919




'System > Linux OS ' 카테고리의 다른 글

lsof  (0) 2015.12.24
strace, ltrace  (0) 2015.12.24
man  (0) 2015.12.24
리눅스 커널 커밋(commit)하기 - ing  (0) 2015.12.23
Btrfs/트리  (0) 2015.08.13


### man 

: 개발자를 위한 리눅스 매뉴얼



man [section #no] 라이브러리 함수명 or 시스템 콜이름


section #no. 1 : 시스템 콜 매뉴얼

     2 : 라이브러리 함수 매뉴얼





$ man --help

Usage: man [OPTION...] [SECTION] PAGE...




### time system call 매뉴얼


$ man 2 time





SYNOPSIS : 문법

DESCRIPTION : 설명

RETURN VALUE




### memset() 함수 매뉴얼


$ man 3 memset





'System > Linux OS ' 카테고리의 다른 글

strace, ltrace  (0) 2015.12.24
gcc / gdb  (0) 2015.12.24
리눅스 커널 커밋(commit)하기 - ing  (0) 2015.12.23
Btrfs/트리  (0) 2015.08.13
Linux LVM  (0) 2015.08.12


1. ubuntu 설치


virtualbox

ubuntu-desktop-14.04.iso


Memory 2GB, HDD 20GB

Network Interfaces

eth0(bridge mode) 192.168.168.106/24

eth1(NAT) - 10.0.3.15/24



 > ssh로 작업할 예정




2. GRUB 부트로더 설정 (CLI 모드로 실행되게)


$ sudo vi /etc/default/grub 


GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

GRUB_CMDLINE_LINUX=""

#GRUB_TERMINAL=console

를 아래와 같이 수정


#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

GRUB_CMDLINE_LINUX="text"

GRUB_TERMINAL=console




'System > Linux OS ' 카테고리의 다른 글

gcc / gdb  (0) 2015.12.24
man  (0) 2015.12.24
Btrfs/트리  (0) 2015.08.13
Linux LVM  (0) 2015.08.12
[tip] tmpdump ipv4 ipv6 모드변경  (0) 2015.05.01

http://www.potatogim.net/wiki/Btrfs/%ED%8A%B8%EB%A6%AC

'System > Linux OS ' 카테고리의 다른 글

man  (0) 2015.12.24
리눅스 커널 커밋(commit)하기 - ing  (0) 2015.12.23
Linux LVM  (0) 2015.08.12
[tip] tmpdump ipv4 ipv6 모드변경  (0) 2015.05.01
[Linux] 리눅스 모니터링  (0) 2015.04.22

계속 까먹어서 정리해야겠음..




참고. 

http://blog.daum.net/99lib/9

http://blog.boxcorea.com/wp/archives/448

https://wiki.gentoo.org/wiki/LVM/ko




# LVM 

: Logical Volume Manager


- 여러 물리적인 디스크를 하나의 논리적인 디스크처럼 사용할 수 있음. (RAID와 비슷)

- raid처럼 parity, mirroring등을 지원하지 않음

- 하지만 RAID보다 비교적 관리가 쉽고, 확장성, 안정성, 효율, 스냅샷지원 등의 이유에서 많이 사용됨




출처. http://ivanvillareal.com/linux/migrate-from-direct-partition-to-lvm/



1. Hard Drives -> Paritions

: LVM 타입으로 파티션 생성 (생략 가능한 듯)


# fdisk /dev/sda

(8e, linux LVM)



2. Partitions -> PV

: 물리볼륨을 생성


# pvcreate /dev/sda1

Physical volume "/dev/sda1" successfully created


# pvdisplay



3. PV -> VG

: 볼륨그룹을 생성


# vgcreate myVolumeGroup /dev/sda1 [나머지 PV들 나열]

Volume group "myVolumeGroup" successfully created


# vgdisplay


4. VG -> LV

: 논리볼륨을 생성


# lvcreate -n lv1 -L 5GB myVolumeGroup

Logical volume "lv1" created


# lvcreate -n lv2 -l 100%FREE myVolumeGroup

Logical volume "lv2" created


# lvdisplay


5. File System 

: 파일시스템 포맷 및 마운트


# mkfs.ex4 /dev/myVolumeGroup /lv1

mkfs.ex4 /dev/myVolumeGroup /lv2


# mkdir /mnt/volume1

# mkdir /mnt/volume2

# mount -t ext4 /dev/myVolumeGroup /lv1 /mnt/volume1

# mount -t ext4 /dev/myVolumeGroup /lv2 /mnt/volume2

( # mount -a)


# df -l

(# df -f)


# vi /etc/fstab

/dev/myVolumeGroup       /mnt/volume1    ext4    0    0

( UUID=(위에서 확인한 uuid)  /srv/repository  ext4  errors=remount-ro  0  1)







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

root@controller:~# fdisk -l


Disk /dev/sda: 500.1 GB, 500107862016 bytes

255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x000bf3f3


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1            2048   390625279   195311616   fd  Linux raid autodetect

/dev/sda2       390625280   878907391   244141056   fd  Linux raid autodetect

/dev/sda3       937711616   976771071    19529728   fd  Linux raid autodetect

/dev/sda4       878907392   937711615    29402112   fd  Linux raid autodetect


Partition table entries are not in disk order


Disk /dev/sdb: 500.1 GB, 500107862016 bytes

255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x000d3a7b


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1   *        2048   390625279   195311616   fd  Linux raid autodetect

/dev/sdb2       390625280   878907391   244141056   fd  Linux raid autodetect

/dev/sdb3       937711616   976771071    19529728   fd  Linux raid autodetect

/dev/sdb4       878907392   937711615    29402112   fd  Linux raid autodetect


Partition table entries are not in disk order


Disk /dev/md1: 500.0 GB, 499999834112 bytes                                        * RAID 0으로 구성한 md1을 Linux LVM으로 바꾸었었는데

2 heads, 4 sectors/track, 122070272 cylinders, total 976562176 sectors        이런 경우 어떤의미를 가지는지 생각해봐야 할 듯.

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 524288 bytes / 1048576 bytes

Disk identifier: 0x0357007d


    Device Boot      Start         End      Blocks   Id  System

/dev/md1p1            2048   976562175   488280064   8e  Linux LVM


Disk /dev/md2: 40.0 GB, 39995834368 bytes

2 heads, 4 sectors/track, 9764608 cylinders, total 78116864 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 524288 bytes / 1048576 bytes

Disk identifier: 0x00000000


Disk /dev/md2 doesn't contain a valid partition table


Disk /dev/md3: 60.2 GB, 60214476800 bytes

2 heads, 4 sectors/track, 14700800 cylinders, total 117606400 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 524288 bytes / 1048576 bytes

Disk identifier: 0x00000000


Disk /dev/md3 doesn't contain a valid partition table


* 기존에 RAID 0 으로 설정했던 md0을 cinder-volumes로 사용하기 위하여 LVM physical volume으로 생성하기 위해 일단 "mdadm –manage –stop /dev/md0"으로 md를 중지 후"pvcreate"로 physical volume 생성

* cinder volume 생성한 것


// 1GB 짜리

Disk /dev/mapper/cinder--volumes-volume--ee1bc346--f489--42c4--b73a--135e97acf2b4: 1073 MB, 1073741824 bytes

255 heads, 63 sectors/track, 130 cylinders, total 2097152 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000


Disk /dev/mapper/cinder--volumes-volume--ee1bc346--f489--42c4--b73a--135e97acf2b4 doesn't contain a valid partition table


// 20GB 짜리

Disk /dev/mapper/cinder--volumes-volume--5d6c6e13--f9e3--4146--9df2--ffbe312599c1: 21.5 GB, 21474836480 bytes            

255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors            

Units = sectors of 1 * 512 = 512 bytes 

Sector size (logical/physical): 512 bytes / 512 bytes  

I/O size (minimum/optimal): 512 bytes / 512 bytes 

Disk identifier: 0x00000000 


Disk /dev/mapper/cinder--volumes-volume--5d6c6e13--f9e3--4146--9df2--ffbe312599c1 doesn't contain a valid partition table

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




# cinder volume 삭제하는데 오래걸리는 구나


'System > Linux OS ' 카테고리의 다른 글

리눅스 커널 커밋(commit)하기 - ing  (0) 2015.12.23
Btrfs/트리  (0) 2015.08.13
[tip] tmpdump ipv4 ipv6 모드변경  (0) 2015.05.01
[Linux] 리눅스 모니터링  (0) 2015.04.22
[ubuntu] 디스크 늘리기(ESXi기반의 VM)  (0) 2015.04.21

tmpdump ipv4만 보이게 꼼수


[참고]

http://www.tcpdump.org/tcpdump_man.html

http://iat.chonnam.ac.kr/lecture/2003_Fall/Doc/TCPDUMP%20User%20Guide.htm


sysctl.conf에서 커널단에서 ipv6기능을 disabled

GRUB 설정 바꾸기 --> https://github.com/mininet/mininet/blob/master/util/install.sh








'System > Linux OS ' 카테고리의 다른 글

Btrfs/트리  (0) 2015.08.13
Linux LVM  (0) 2015.08.12
[Linux] 리눅스 모니터링  (0) 2015.04.22
[ubuntu] 디스크 늘리기(ESXi기반의 VM)  (0) 2015.04.21
[Linux]라우팅 테이블  (0) 2015.04.21

+ Recent posts