modprobe

自动处理可载入模块

补充说明

modprobe命令 用于智能地向内核中加载模块或者从内核中移除模块。

modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。

语法

1
modprobe(选项)(参数)

选项

1
2
3
4
5
6
7
8
9
-a或--all:载入全部的模块;
-c或--show-conf:显示所有模块的设置信息;
-d或--debug:使用排错模式;
-l或--list:显示可用的模块;
-r或--remove:模块闲置不用时,即自动卸载模块;
-t或--type:指定模块类型;
-v或--verbose:执行时显示详细的信息;
-V或--version:显示版本信息;
-help:显示帮助。

参数

模块名:要加载或移除的模块名称。

实例

查看modules的配置文件:

1
modprobe -c

这里,可以查看modules的配置文件,比如模块的alias别名是什么等。会打印许多行信息,例如其中的一行会类似如下:

1
alias symbol:ip_conntrack_unregister_notifier ip_conntrack

列出内核中所有已经或者未挂载的所有模块:

1
modprobe -l

这里,我们能查看到我们所需要的模块,然后根据我们的需要来挂载;其实modprobe -l读取的模块列表就位于/lib/modules/`uname -r `目录中;其中uname -r是内核的版本,例如输出结果的其中一行是:

1
/lib/modules/2.6.18-348.6.1.el5/kernel/net/netfilter/xt_statistic.ko

挂载vfat模块:

1
modprobe vfat

这里,使用格式modprobe 模块名来挂载一个模块。挂载之后,用lsmod可以查看已经挂载的模块。模块名是不能带有后缀的,我们通过modprobe -l所看到的模块,都是带有.ko.o后缀。

移除已经加载的模块:

1
modprobe -r 模块名

这里,移除已加载的模块,和rmmod功能相同。

mktemp

创建临时文件供shell脚本使用

补充说明

mktemp命令 被用来创建临时文件供shell脚本使用。

语法

1
mktemp(选项)(参数)

选项

1
2
3
-q:执行时若发生错误,不会显示任何信息;
-u:暂存文件会在mktemp结束前先行删除;
-d:创建一个目录而非文件。

参数

文件:指定创建的临时文件。

mkswap

建立和设置SWAP交换分区

补充说明

mkswap命令 用于在一个文件或者设备上建立交换分区。在建立完之后要使用sawpon命令开始使用这个交换区。最后一个选择性参数指定了交换区的大小,但是这个参数是为了向后兼容设置的,没有使用的必要,一般都将整个文件或者设备作为交换区。

语法

1
mkswap(选项)(参数)

选项

1
2
3
4
-c:建立交换区前,先检查是否有损坏的区块;
-f:在SPARC电脑上建立交换区时,要加上此参数;
-v0:建立旧式交换区,此为预设值;
-v1:建立新式交换区。

参数

设备:指定交换空间对应的设备文件或者交换文件。

实例

查看系统swap space大小:

1
2
3
4
5
free -m
total used free shared buffers cached
Mem: 377 180 197 0 19 110
-/+ buffers/cache: 50 327
Swap: 572 0 572

查看当前的swap空间(file(s)/partition(s)):

1
2
3
4
5
swapon -s

等价于

cat /proc/swaps

添加交换空间

添加一个 交换分区 或添加一个 交换文件 。推荐你添加一个交换分区;不过,若你没有多少空闲空间可用,则添加交换文件。

添加一个交换分区,步骤如下:

使用fdisk来创建交换分区(假设 /dev/sdb2 是创建的交换分区),使用 mkswap 命令来设置交换分区:

1
mkswap /dev/sdb2

启用交换分区:

1
swapon /dev/sdb2

写入/etc/fstab,以便在引导时启用:

1
/dev/sdb2 swap swap defaults 0 0

添加一个交换文件,步骤如下:

创建大小为512M的交换文件:

1
dd if=/dev/zero of=/swapfile1 bs=1024 count=524288

使用mkswap命令来设置交换文件:

1
mkswap /swapfile1

启用交换分区:

1
swapon /swapfile1

写入/etc/fstab,以便在引导时启用:

1
/swapfile1 swap swap defaults 0 0

新添了交换分区并启用它之后,请查看cat /proc/swaps或free命令的输出来确保交换分区已被启用了。

删除交换空间:

禁用交换分区:

1
swapoff /dev/sdb2

/etc/fstab中删除项目,使用fdisk或yast工具删除分区。

mknod

创建字符设备文件和块设备文件

补充说明

mknod命令 用于创建Linux中的字符设备文件和块设备文件。

语法

1
mknod(选项)(参数)

选项

1
2
3
4
-Z:设置安全的上下文;
-m:设置权限模式;
-help:显示帮助信息;
--version:显示版本信息。

参数

  • 文件名:要创建的设备文件名;
  • 类型:指定要创建的设备文件的类型;
  • 主设备号:指定设备文件的主设备号;
  • 次设备号:指定设备文件的次设备号。

实例

1
2
3
ls -la /dev/ttyUSB*
crw-rw—- 1 root dialout 188, 0 2008-02-13 18:32 /dev/ttyUSB0
mknod /dev/ttyUSB32 c 188 32

扩展知识

Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录 下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。

为了管理这些设备,系统为设备编了号,每 个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编 号,如硬盘的主设备号是3。

Linux为所有的设备文件都提供了统一的操作函数接口,方法是使用数据结构struct file_operations。这个数据结构中包括许多操作函数的指针,如open()、close()、read()和write()等,但由于外设 的种类较多,操作方式各不相同。Struct file_operations结构体中的成员为一系列的接口函数,如用于读/写的read/write函数和用于控制的ioctl等。

打开一个文件就是调用这个文件file_operations中的open操作。不同类型的文件有不同的file_operations成员函数,如普通的磁盘数据文件, 接口函数完成磁盘数据块读写操作;而对于各种设备文件,则最终调用各自驱动程序中的I/O函数进行具体设备的操作。这样,应用程序根本不必考虑操作的是设 备还是普通文件,可一律当作文件处理,具有非常清晰统一的I/O接口。所以file_operations是文件层次的I/O接口。

mkisofs

建立ISO 9660映像文件

补充说明

mkisofs命令 用来将指定的目录与文件做成ISO 9660格式的映像文件,以供刻录光盘。

语法

1
mkisofs(选项)(参数)

选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
-a或--all:mkisofs通常不处理备份文件。使用此参数可以把备份文件加到映像文件中;
-A<应用程序id>或-appid<应用程序ID>:指定光盘的应用程序ID;
-abstract<摘要文件>:指定摘要文件的文件名;
-b<开机映像文件>或-eltorito-boot<开机映像文件>:指定在制作可开机光盘时所需的开机映像文件;
-biblio<ISBN文件>:指定ISBN文件的文件名,ISBN文件位于光盘根目录下,记录光盘的ISBN;
-c<开机文件名称>:制作可开机光盘时,mkisofs会将开机映像文件中的全-eltorito-catalog<开机文件名称>全部内容作成一个文件;
-C<盘区编号,盘区编号>:将许多节区合成一个映像文件时,必须使用此参数;
-copyright<版权信息文件>:指定版权信息文件的文件名;
-d或-omit-period:省略文件后的句号;
-D或-disable-deep-relocation:ISO 9660最多只能处理8层的目录,超过8层的部分,RRIP会自动将它们设置成ISO 9660兼容的格式。使用-D参数可关闭此功能;
-f或-follow-links:忽略符号连接;
-h:显示帮助;
-hide<目录或文件名>:使指定的目录或文件在ISO 9660或Rock RidgeExtensions的系统中隐藏;
-hide-joliet<目录或文件名>:使指定的目录或文件在Joliet系统中隐藏;
-J或-joliet:使用Joliet格式的目录与文件名称;
-l或-full-iso9660-filenames:使用ISO 9660 32字符长度的文件名;
-L或-allow-leading-dots:允许文件名的第一个字符为句号;
-log-file<记录文件>:在执行过程中若有错误信息,预设会显示在屏幕上;
-m<目录或文件名>或-exclude<目录或文件名>:指定的目录或文件名将不会房入映像文件中;
-M<映像文件>或-prev-session<映像文件>:与指定的映像文件合并;
-N或-omit-version-number:省略ISO 9660文件中的版本信息;
-o<映像文件>或-output<映像文件>:指定映像文件的名称;
-p<数据处理人>或-preparer<数据处理人>:记录光盘的数据处理人;
-print-size:显示预估的文件系统大小;
-quiet:执行时不显示任何信息;
-r或-rational-rock:使用Rock Ridge Extensions,并开放全部文件的读取权限;
-R或-rock:使用Rock Ridge Extensions;
-sysid<系统ID>:指定光盘的系统ID;
-T或-translation-table:建立文件名的转换表,适用于不支持Rock Ridge Extensions的系统上;
-v或-verbose:执行时显示详细的信息;
-V<光盘ID>或-volid<光盘ID>:指定光盘的卷册集ID;
-volset-size<光盘总数>:指定卷册集所包含的光盘张数;
-volset-seqno<卷册序号>:指定光盘片在卷册集中的编号;
-x<目录>:指定的目录将不会放入映像文件中;
-z:建立通透性压缩文件的SUSP记录,此记录目前只在Alpha机器上的Linux有效。

参数

路径:需要添加到映像文件中的路径。

实例

linux中用mkisofs命令把文件制作成ISO步骤:

把NFS服务器上的目录挂载到本地/mnt/nfs/的目录:

1
mount -t nfs 10.0.2.2:/linuxos/rhel4.0_update3/ /mnt/nfs/

把已挂载的文件复制到本地:

1
cp -a /mnt/NFS/* /root/Decp -a /mnt/nfs/* /root/Desktop/rhel4.0/&sktop/rhel4.0/&

查找boot.cat文件并删除掉:

1
find rhel4.0/ -name boot.cat | xargs rm

查找TRANS.TBL文件并删除掉:

1
find rhel4.0/ -name TRANS.TBL -exec rm {} \;

复制本地的所需文件到指定目录:

1
cp /usr/share/comps/i386/.discinfo rhel4.0/

把指定目录下的所有文件制作成ISO文件:

1
mkisofs -R -J -T -v -no-emul-boot -boot-load-size 4 -boot-info-table -V RHEL4ASDVD -b isolinux/isolinux.bin -c isolinux/boot.cat -o /RHEL4AS.iso rhel4.0/

mkinitrd

建立要载入ramdisk的映像文件

补充说明

mkinitrd命令 建立要载入ramdisk的映像文件,以供Linux开机时载入ramdisk。

这个是重新封包核心的命令,例如你自己修改了一个设备的驱动,如果这个驱动要加入核心级别的话,就需要对核心进行重新封包,把新加的配置编译到核心内部去!

语法

1
mkinitrd(选项)(参数)

选项

1
2
3
4
5
6
-f:若指定的映像问家名称与现有文件重复,则覆盖现有的文件;
-v:执行时显示详细的信息;
--omit-scsi-modules:不要载入SCSI模块;
--preload=<模块名称>:指定要载入的模块;
--with=<模块名称>:指定要载入的模块;
--version:显示版本信息。

参数

  • 映像文件:指定要创建的映像文件;
  • 内核版本:指定内核版本。

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@localhost tmp]# mkinitrd -v -f myinitrd.img $(uname -r)
Creating initramfs
WARNING: using /tmp for temporary files
Looking for deps of module ide-disk
Looking for deps of module ext3 jbd
Looking for deps of module jbd
Using modules: ./kernel/fs/jbd/jbd.ko ./kernel/fs/ext3/ext3.ko
/sbin/nash -> /tmp/initrd.Vz3928/bin/nash
/sbin/insmod.static -> /tmp/initrd.Vz3928/bin/insmod
/sbin/udev.static -> /tmp/initrd.Vz3928/sbin/udev
/etc/udev/udev.conf -> /tmp/initrd.Vz3928/etc/udev/udev.conf
copy from /lib/modules/2.6.9-5.EL/./kernel/fs/jbd/jbd.ko(elf32-i386) to /tmp/initrd.Vz3928/lib/jbd.ko(elf32-i386)
copy from /lib/modules/2.6.9-5.EL/./kernel/fs/ext3/ext3.ko(elf32-i386) to /tmp/initrd.Vz3928/lib/ext3.ko(elf32-i386)
Loading module jbd
Loading module ext3

[root@localhost tmp]# file myinitrd.img
myinitrd.img: gzip compressed data, from Unix, max compression

[root@localhost tmp]# mv myinitrd.img myinitrd.img.gz
[root@localhost tmp]# gzip -d myinitrd.img.gz
[root@localhost tmp]# file myinitrd.img
myinitrd.img: ASCII cpio archive (SVR4 with no CRC)

mkfs

用于在设备上创建Linux文件系统

补充说明

mkfs命令 用于在设备上(通常为硬盘)创建Linux文件系统。mkfs本身并不执行建立文件系统的工作,而是去调用相关的程序来执行。

语法

1
mkfs(选项)(参数)

选项

1
2
3
4
5
fs:指定建立文件系统时的参数;
-t<文件系统类型>:指定要建立何种文件系统;
-v:显示版本信息与详细的使用方法;
-V:显示简要的使用方法;
-c:在制做档案系统前,检查该partition是否有坏轨。

参数

  • 文件系统:指定要创建的文件系统对应的设备文件名;
  • 块数:指定文件系统的磁盘块数。

实例

/dev/hda5上建一个msdos的档案系统,同时检查是否有坏轨存在,并且将过程详细列出来:

1
2
3
4
mkfs -V -t msdos -c /dev/hda5

mkfs -t ext3 /dev/sda6 //将sda6分区格式化为ext3格式
mkfs -t ext2 /dev/sda7 //将sda7分区格式化为ext2格式

mke2fs

创建磁盘分区上的“etc2/etc3”文件系统

补充说明

mke2fs命令 被用于创建磁盘分区上的“etc2/etc3”文件系统。

语法

1
mke2fs(选项)(参数)

选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-b<区块大小>:指定区块大小,单位为字节;
-c;检查是否有损坏的区块;
-f<不连续区段大小>:指定不连续区段的大小,单位为字节;
-F:不管指定的设备为何,强制执行mke2fs;
-i<字节>:指定"字节/inode"的比例;
-N<inode数>:指定要建立的inode数目;
-l<文件>:从指定的文件中,读取文件西中损坏区块的信息;
-L<标签>:设置文件系统的标签名称;
-m<百分比值>:指定给管理员保留区块的比例,预设为5%;
-M:记录最后一次挂入的目录;
-q:执行时不显示任何信息;
-r:指定要建立的ext2文件系统版本;
-R=<区块数>:设置磁盘阵列参数;
-S:仅写入superblock与group descriptors,而不更改inode able inode bitmap以及block bitmap;
-v:执行时显示详细信息;
-V:显示版本信息。

参数

  • 设备文件:指定要创建的文件系统的分区设备文件名;
  • 块数:指定要创建的文件系统的磁盘块数量。

实例

创建指定的ext2文件系统。

1
mke2fs -q /dev/hda1

mkdir

用来创建目录

补充说明

mkdir命令 用来创建目录。该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。

注意:在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它们来更有效地组织文件。最好采用前后一致的命名方式来区分文件和目录。例如,目录名可以以大写字母开头,这样,在目录列表中目录名就出现在前面。

在一个子目录中应包含类型相似或用途相近的文件。例如,应建立一个子目录,它包含所有的数据库文件,另有一个子目录应包含电子表格文件,还有一个子目录应包含文字处理文档,等等。目录也是文件,它们和普通文件一样遵循相同的命名规则,并且利用全路径可以唯一地指定一个目录。

语法

1
mkdir (选项)(参数)

选项

1
2
3
4
-Z:设置安全上下文,当使用SELinux时有效;
-m<目标属性>或--mode<目标属性>建立目录的同时设置目录的权限;
-p或--parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
--version 显示版本信息。

参数

目录:指定要创建的目录列表,多个目录之间用空格隔开。

实例

在目录/usr/meng下建立子目录test,并且只有文件主有读、写和执行权限,其他人无权访问

1
mkdir -m 700 /usr/meng/test

在当前目录中建立bin和bin下的os_1目录,权限设置为文件主可读、写、执行,同组用户可读和执行,其他用户无权访问

1
mkdir -p-m 750 bin/os_1

mkbootdisk

可建立目前系统的启动盘

补充说明

mkbootdisk命令 用来为当前运行的系统创建能够单独使用的系统引导软盘,以便在系统出现故障时能够启动操作进行适当的修复工作。

语法

1
mkbootdisk(选项)(参数)

选项

1
2
3
4
5
--device<设备>:指定设备;
--mkinitrdargs<参数>:设置mkinitrd的参数;
--noprompt:不会提示用户插入磁盘;
--verbose:执行时显示详细的信息;
--version:显示版本信息。

参数

内核:指定内核版本。

实例

1
mkbootdisk --device /dev/fd0 `uname -r`

其中,uname -r是目前Linux 系统所使用的核心版本,如果你有多个核心版本的话,你以可以直接输入核心版本。例如在这个网页中所使用的核心有两个版本,一个是2.2.12-20,另一个是2.2.18,若要以2.2.18设定开机的话,可以使用:

1
mkbootdisk --device /dev/fd0 2.2.18