[RHEL6] 커널 명령어 2탄(modprobe, rmmod, sysctl, update_drv)
본문 바로가기
IT 이야기/Linux 명령어

[RHEL6] 커널 명령어 2탄(modprobe, rmmod, sysctl, update_drv)

by 찬찬이 아빠 2020. 3. 24.
반응형
  5. modprobe(커널 모듈 적재)

 1) 경로 : /sbin/modprobe

 2) 요약 : 커널에 모듈을 적재

 3) 사용 방법

   <모듈적재>

     modprobe [-a -n -v] [-C config] [-t 형태] 패턴 OR 모듈명1 모듈명2 ...

 

   <모듈 리스트>

     modprobe [-l(엘)] [-C config] [-t 형태] 패턴

 

   <설정보기>

     modprobe [-C config] -c

 

   <모듈 제거 또는 자동제거>

     modprobe [-C config] -r [모듈명...]

 

 4) 옵션

 -a, --all : 모듈과 의존성으로 관련된 다른 모듈도 같이 적재

 -c, --showconfig : 현재의 설정을 출력

 -d, --debug : 디버깅 정보를 출력

 -h, --help : 사용법 출력

 -k, --autoclean : autoclean 모듈을 로딩

 -l(엘), --list : 커널 모듈들을 출력

 -n, --show : 실제로 실행하지 않고 결과만 출력

 -q, --quiet : 작동을 멈춤

 -r, --remove : 모듈을 제거하거나 autoclean 모듈을 제거

 -s, --syslog : 메시지를 syslog로 보냄

 -t, --type moduletype : 지정된 타입을 찾음

 -V, --version : 버전 정보 출력

 -C, --configfile : /etc/modules.conf 파일 대신 지정한 설정 파일을 이용

 

 5) 추가 설명

modprobe 명령어는 insmod 보다 높은 수준으로 제어할 수 있습니다. 레드햇 기준으로 모듈 디렉터리는 /lib/modules/'uname -r'/kernel/에 있습니다.

# cd /lib/modules/2.6.18-194.el5/kernel/
# ls
arch	crypto	drivers	fs	lib	net	sound

 

현재 메모리에 적재된 모듈을 살펴 봅니다.

# lsmod
Module                  Size  Used by
xt_CHECKSUM            12549  1 
iptable_mangle         12695  1 
ipt_MASQUERADE         12678  3 
nf_nat_masquerade_ipv4    13430  1 ipt_MASQUERADE
iptable_nat            12875  1 
nf_nat_ipv4            14115  1 iptable_nat
nf_nat                 26583  2 nf_nat_ipv4,nf_nat_masquerade_ipv4
nf_conntrack_ipv4      15053  2 
nf_defrag_ipv4         12729  1 nf_conntrack_ipv4
xt_conntrack           12760  1 
nf_conntrack          139224  5 nf_nat,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_ipv4
ipt_REJECT             12541  2 
nf_reject_ipv4         13373  1 ipt_REJECT
tun                    32026  1 
bridge                151336  0 
stp                    12976  1 bridge
llc                    14552  2 stp,bridge
ebtable_filter         12827  0 
ebtables               35009  1 ebtable_filter
ip6table_filter        12815  0 
ip6_tables             26912  1 ip6table_filter
devlink                60067  0 
iptable_filter         12810  1 
sunrpc                354099  1 
dm_mirror              22289  0 
dm_region_hash         20813  1 dm_mirror
dm_log                 18411  2 dm_region_hash,dm_mirror
dm_mod                124501  2 dm_log,dm_mirror
intel_powerclamp       14451  0 
iosf_mbi               15582  0 
crc32_pclmul           13133  0 
snd_intel8x0           38199  1 
ghash_clmulni_intel    13273  0 
snd_ac97_codec        130479  1 snd_intel8x0
ac97_bus               12730  1 snd_ac97_codec
aesni_intel           189456  0 
lrw                    13286  1 aesni_intel
gf128mul               15139  1 lrw
snd_seq                62571  0 
snd_seq_device         14356  1 snd_seq
glue_helper            13990  1 aesni_intel
ablk_helper            13597  1 aesni_intel
snd_pcm               105777  2 snd_ac97_codec,snd_intel8x0
cryptd                 21190  3 ghash_clmulni_intel,aesni_intel,ablk_helper
snd_timer              29912  2 snd_pcm,snd_seq
sg                     40721  0 
snd                    83941  8 snd_ac97_codec,snd_intel8x0,snd_timer,snd_pcm,snd_seq,snd_seq_device
soundcore              15047  1 snd
i2c_piix4              22401  0 
video                  24538  0 
ip_tables              27126  3 iptable_filter,iptable_mangle,iptable_nat
xfs                   993020  3 
libcrc32c              12644  3 xfs,nf_nat,nf_conntrack
sr_mod                 22416  0 
sd_mod                 46281  5 
cdrom                  42556  1 sr_mod
crc_t10dif             12912  1 sd_mod
crct10dif_generic      12647  0 
ata_generic            12923  0 
pata_acpi              13053  0 
vmwgfx                291993  1 
drm_kms_helper        186531  1 vmwgfx
syscopyarea            12529  1 drm_kms_helper
sysfillrect            12701  1 drm_kms_helper
sysimgblt              12640  1 drm_kms_helper
fb_sys_fops            12703  1 drm_kms_helper
ttm                    96673  1 vmwgfx
ahci                   34056  4 
drm                   456166  4 ttm,drm_kms_helper,vmwgfx
ata_piix               35052  0 
libahci                31992  1 ahci
libata                243133  5 ahci,pata_acpi,libahci,ata_generic,ata_piix
e1000                 137624  0 
crct10dif_pclmul       14307  1 
crct10dif_common       12595  3 crct10dif_pclmul,crct10dif_generic,crc_t10dif
crc32c_intel           22094  1 
serio_raw              13434  0 
drm_panel_orientation_quirks    17180  1 drm

 

다양한 모듈이 로딩되어 있는 것을 확인할 수 있습니다. 이중 lp 모듈과 lp 모듈이 의존하고 있는 parport 모듈을 제거한 다음 다시 추가해 봅니다. parport 모듈을 제거하기 위해서는 의존성이 걸려있는 lp와 parport_pc를 먼저 제거한 후 parport 모듈을 제거합니다. 만약 제거되지 않으면 -f 옵션으로 강제적으로 제거합니다. 이 옵션은 시스템에 치명적 오류를 줄 수도 있으므로 테스트로만 사용합니다.

# rmmod lp
# rmmod parport_pc
# rmmdo parport

 

아래와 같이 insmod 명령어는 .ko로 끝나는 드라이버 파일의 전체 경로를 지정합니다. 의존성이 걸려있는 모듈은 자동으로 추가하지 못합니다. 예를 들어 위에서 삭제한 lp 모듈을 추가해 봅니다.

# insmod /lib/modules/2.6.19-194.el5/kernel/drivers/parport/parport.ko
# insmod /lib/modules/2.6.19-194.el5/kernel/drivers/parport/parport_pc.ko
# insmod /lib/modules/2.6.19-194.el5/kernel/drivers/char/lp.ko

 

그러나 modprobe 명령어는 insmod 명령어와 달리 손 쉽게 의존성이 있는모듈을 로딩할 수 있습니다. 위에 insmod로 추가한 모듈들을 삭제하고 modprobe 명령어로 다시 로딩해 봅니다.

 

먼저 depmod 명령어로 의존성 정보 파일 "/lib/modules/'uname 0r'/modules.dep"을 생성합니다.

# depmod

 

modprobe 명령어는 의존성이 걸려있는 모듈들을 자동으로 찾아 추가합니다.

# modprobe lp
# lsmod | grep lp
lp			15849	0
parport		37513	2	lp,parport_pc

 

위의 parport 모듈은 lp 모듈에 의존성이 있기 때문에 사용자가 수동으로 드라이버를 로딩하지 않아도 modprobe에서 의존성을 찾아 메모리에 로딩합니다.

 

  6. rmmod(모듈 제거)

 1) 경로 : /sbin/rmmod

 2) 요약 : 리눅스 커널에서 모듈을 제거

 3) 사용 방법 : rmmod [옵션] 모듈명

 4) 옵션

 -f, --force : 강제로 모듈을 제거. 강제 옵션은 커널의  CONFIG_MODULE_FORCE_UNLOAD 옵션이 활성화되어야 함

 -h, --help : 사용법 출력

 -r, --stacks : 모듈 스택을 제거

 -s, --syslog : syslog에 메시지 로그를 저장

 -v, --verbose : 상세한 정보 출력

 -V, --version : 버전 정보 출력

 -w, --wait : 사용자가 해당 모듈을 사용 중이라면 접근을 종료할 때까지 대기

 

 5) 추가 설명

rmmod는 커널의 드라이버 모듈을 제거하는 명령어입니다. 커널 모듈과 관련한 명령어로는 depmod, lsmod, modinfo, modprobe, insmod 등이 있습니다. 이들은 서로 연관성이 많으므로 함께 살펴봅니다.

 

lsmod 명령어는 메모리에 적재되어 있는 모듈을 출력합니다.

# lsmod
Module                  Size  Used by
xt_CHECKSUM            12549  1 
iptable_mangle         12695  1 
ipt_MASQUERADE         12678  3 
nf_nat_masquerade_ipv4    13430  1 ipt_MASQUERADE
iptable_nat            12875  1 
nf_nat_ipv4            14115  1 iptable_nat
nf_nat                 26583  2 nf_nat_ipv4,nf_nat_masquerade_ipv4
nf_conntrack_ipv4      15053  2 
nf_defrag_ipv4         12729  1 nf_conntrack_ipv4
xt_conntrack           12760  1 
nf_conntrack          139224  5 nf_nat,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_ipv4
ipt_REJECT             12541  2 
nf_reject_ipv4         13373  1 ipt_REJECT
tun                    32026  1 
bridge                151336  0 
stp                    12976  1 bridge
llc                    14552  2 stp,bridge
ebtable_filter         12827  0 
ebtables               35009  1 ebtable_filter
ip6table_filter        12815  0 
ip6_tables             26912  1 ip6table_filter
devlink                60067  0 
iptable_filter         12810  1 
sunrpc                354099  1 
dm_mirror              22289  0 
dm_region_hash         20813  1 dm_mirror
dm_log                 18411  2 dm_region_hash,dm_mirror
dm_mod                124501  2 dm_log,dm_mirror
intel_powerclamp       14451  0 
iosf_mbi               15582  0 
crc32_pclmul           13133  0 
snd_intel8x0           38199  1 
ghash_clmulni_intel    13273  0 
snd_ac97_codec        130479  1 snd_intel8x0
ac97_bus               12730  1 snd_ac97_codec
aesni_intel           189456  0 
lrw                    13286  1 aesni_intel
gf128mul               15139  1 lrw
snd_seq                62571  0 
snd_seq_device         14356  1 snd_seq
glue_helper            13990  1 aesni_intel
ablk_helper            13597  1 aesni_intel
snd_pcm               105777  2 snd_ac97_codec,snd_intel8x0
cryptd                 21190  3 ghash_clmulni_intel,aesni_intel,ablk_helper
snd_timer              29912  2 snd_pcm,snd_seq
sg                     40721  0 
snd                    83941  8 snd_ac97_codec,snd_intel8x0,snd_timer,snd_pcm,snd_seq,snd_seq_device
soundcore              15047  1 snd
i2c_piix4              22401  0 
video                  24538  0 
ip_tables              27126  3 iptable_filter,iptable_mangle,iptable_nat
xfs                   993020  3 
libcrc32c              12644  3 xfs,nf_nat,nf_conntrack
sr_mod                 22416  0 
sd_mod                 46281  5 
cdrom                  42556  1 sr_mod
crc_t10dif             12912  1 sd_mod
crct10dif_generic      12647  0 
ata_generic            12923  0 
pata_acpi              13053  0 
vmwgfx                291993  1 
drm_kms_helper        186531  1 vmwgfx
syscopyarea            12529  1 drm_kms_helper
sysfillrect            12701  1 drm_kms_helper
sysimgblt              12640  1 drm_kms_helper
fb_sys_fops            12703  1 drm_kms_helper
ttm                    96673  1 vmwgfx
ahci                   34056  4 
drm                   456166  4 ttm,drm_kms_helper,vmwgfx
ata_piix               35052  0 
libahci                31992  1 ahci
libata                243133  5 ahci,pata_acpi,libahci,ata_generic,ata_piix
e1000                 137624  0 
crct10dif_pclmul       14307  1 
crct10dif_common       12595  3 crct10dif_pclmul,crct10dif_generic,crc_t10dif
crc32c_intel           22094  1 
serio_raw              13434  0 
drm_panel_orientation_quirks    17180  1 drm

 

modinfo 명령어는 지정한 모듈의 정보를 확인합니다.

# modinfo floppy
filename:		/lib/modules/2.6.32-23.generic/kernel/drivers/block/floppy.ko
alias:			block-major-2-*
license:		GPL
author:			Alain L. Knaff
srcversion:		F09EF487AF6BE7153764D10
alias:			acpi*:PNP0700:*
alias:			pnp:dPNP0700*
depends:
vermagic:		2.6.32-23-generic SMP mod_unload modversions 586
parm:			floppy:charp
parm:			FLOPPY_IRQ:int
parm:			FLOPPY_DMA:int

 

해당 모듈은 rmmod 명령어로 메모리에서 제거할 수 있습니다.

단 슈퍼유저 권한이 필요합니다.

$ rmmod floppy
ERROR: Removing 'floppy': Operation not permitted
$ sudo rmmod floppy
 [sudo] password for user:

 

 

  7. sysctl(커널 파라미터 설정)

 1) 경로 : /sbin/sysctl

 2) 요약 : 실시간으로 커널의 파라미터를 설정

 3) 사용 방법

   sysctl [-n] [-e] variable...

   sysctl [-n] [-e] [-q] -w variable=value...

   sysctl [-n] [-e] [-q] -p [filename]

   sysctl [-n] [-e] -a

   sysctl [-n] [-e] -A

 

 4) 옵션

 -n : 키 이름을 출력하지 않음

 -e : 알려지지 않은 키 에러를 무시

 -N : 커널 파라미터 이름만 출력

 -q: 값을 출력하지 않음

 -w : sysctl 설정을 파일로 저장

 -p : 지정한 파일에서 설정을 불러옴

 -a : 현재 커널 파라미터 값을 모두 출력

 -A : 현재 커널 파라미터를 테이블 형태로 모두 출력

 

 5) 추가 설명

sysctl 명령어는 실시간으로 커널 파라미터 값을 읽거나 변경할 수 있습니다. -a 옵션을 전쳋 커널 파라미터 값을 확인합니다.

# sysctl -a
abi.vsyscall32 = 1
crypto.fips_enabled = 0
debug.exception-trace = 1
debug.kprobes-optimization = 1
debug.panic_on_rcu_stall = 0
dev.cdrom.autoclose = 1
dev.cdrom.autoeject = 0
dev.cdrom.check_media = 0
dev.cdrom.debug = 0
dev.cdrom.info = CD-ROM information, Id: cdrom.c 3.20 2003/12/17
dev.cdrom.info = 
dev.cdrom.info = drive name:		sr0
dev.cdrom.info = drive speed:		32
dev.cdrom.info = drive # of slots:	1
dev.cdrom.info = Can close tray:		1
dev.cdrom.info = Can open tray:		1
dev.cdrom.info = Can lock tray:		1
dev.cdrom.info = Can change speed:	1
dev.cdrom.info = Can select disk:	0
dev.cdrom.info = Can read multisession:	1
dev.cdrom.info = Can read MCN:		1
dev.cdrom.info = Reports media changed:	1
dev.cdrom.info = Can play audio:		1
dev.cdrom.info = Can write CD-R:		0
dev.cdrom.info = Can write CD-RW:	0
dev.cdrom.info = Can read DVD:		1
dev.cdrom.info = Can write DVD-R:	0
dev.cdrom.info = Can write DVD-RAM:	0
dev.cdrom.info = Can read MRW:		1
dev.cdrom.info = Can write MRW:		1
dev.cdrom.info = Can write RAM:		1
dev.cdrom.info = 
dev.cdrom.info = 
dev.cdrom.lock = 1
dev.hpet.max-user-freq = 64
dev.mac_hid.mouse_button2_keycode = 97
dev.mac_hid.mouse_button3_keycode = 100
dev.mac_hid.mouse_button_emulation = 0
dev.raid.speed_limit_max = 200000
dev.raid.speed_limit_min = 1000
dev.scsi.logging_level = 0
fs.aio-max-nr = 1048576
fs.aio-nr = 0
fs.binfmt_misc.status = enabled
fs.dentry-state = 26721	14853	45	0	4456	0
fs.dir-notify-enable = 1
fs.epoll.max_user_watches = 174530
fs.file-max = 83901
fs.file-nr = 1760	0	83901
... 생략 ...

 

전체 파라미터 값이 아니라 지정한 파라미터를 확인할 수 있습니다.

# sysctl kernel.hostname
kernel.hostname = chan

# sysctl -n kernel.hostname
chan

# sysctl -N kernel.hostname
kernel.hostname

 

커널 파라미터 값을 변경하려면 아래와 같이 = 다음에 값을 지정합니다.

# sysctl kernel.hostname=test
kernel.hostname = test

# sysctl -n kernel.hostname
test

 

-w 옵션은 위에서 설정한 값을 저장합니다.

# sysctl -w kernel.hostname=test

 

 

 

  8. update_drv(디바이스 드라이버 속성 변경)

 1) 경로 : /usr/sbin/update_drv

 2) 요약 : 유닉스 기반의 디바이스 드라이버 속성을 변경

 3) 사용 방법

   update_drv [-f | -v] driver_module

   update_drv [-b basedir] [-f | -v] -a [-m 'permission'] [-i 'identify-name'] [-P 'privilege'] [-p 'policy'] driver_module

   update_drv [-b basedir] [-f | -v] -d [-m 'permission'] [-i 'identify-name'] [-P 'privilege'] [-p 'policy'] driver_module

 

 4) 옵션

 -a : 퍼미션, 알리아스, 권한 또는 폴리시 엔트리를 추가

 -b basedir : update_drv 실행 후 시스템에 인스톨 하는 루트 디렉터리(basedir)를 지정

 -d : 퍼미션, 알리아스, 권한 또는 폴리시 엔트리를 삭제

 -f : 강제로 dirver_conf 파일을 다시 읽음

 -i 'identify-name' : 공백으로 분리된 드라이버 알리아스 목록을 지정. 이 옵션은 -a나 -d 옵션과 함께 사용해야함. 만일 모든 알리아스를 제거하려면 rem_drv 명령을 추천함

 -m 'permission' : 공백으로 분리된 파일 시스템 퍼미션을 지정. -a나 -d 옵션과 함께 사용해야 함

 -p 'policy' : -a 옵션과 함께 공백으로 분리된 폴리시 목록을 지정

 -P 'privilege' : -a 옵션과 함께 콤마(,)로 분리된 권리 목록을 지정

 -v : 상세한 정보 출력

 

 5) 추가 설명

update_drv 명령어는 시스템에 이미 설치되어 있는 디바이스 드라이버의 속성을 변경합니다. 이는 driver.conf 파일을 읽거나 추가하거나 수정합니다. 또한 드라이버 마이너노드 퍼미션이나 알리아스를 삭제합니다. 만일 옵션을 사용하지 않으면 update_drv는 driver.conf 파일을 다시 읽습니다.

 

-a 옵션과 -m 옵션은 clone 드라이버에 마이너 퍼미션을 추가하거나 변경합니다.

# update_drv -a -m 'llcl 777 joe staff' clone

 

-d 옵션은 usbprn 드라이버의 모든 마이너 퍼미션 엔트리를 삭제합니다.

# update_drv -d -m '* 0666 root sys' usbprn

 

아래처럼 ugen 드라이버의 알리아스 엔트리를 추가할 수 있습니다. 문자열을 usb459, 20으로 정의 했습니다.

# update_drv -a -i '"usb459,20"' ugen

 

아래 예제는 ohci 드라이버를 위해 driver.conf 파일을 다시 읽어옵니다.

# update_drv ohci

 

아래 예제는 사용자가 정의한 권한을 tcp 소켓에 열어줍니다.

# update_drv -a -P net_tcp 'write_priv_set=net_tcp read_priv_set=net_tcp' tcp​
반응형

댓글