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
'IT 이야기 > Linux 명령어' 카테고리의 다른 글
[RHEL6] 터미널 명령어 2탄(echo, env, history, jobs) (0) | 2020.03.25 |
---|---|
[RHEL6] 터미널 명령어 1탄(chvt, clear, deallocvt, dircolors) (0) | 2020.03.25 |
[RHEL6] 커널 명령어 1탄(depmod, insmod, lsmod, modinfo) (0) | 2020.03.24 |
[RHEL6] 일반 명령어 6탄(sync, touch, xargs, zdump) (0) | 2020.03.24 |
[RHEL6] 일반 명령어 5탄(readonly, rm, rmdir, sudo) (0) | 2020.03.24 |
댓글