mkinitrd

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

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

语法

mkinitrd(选项)(参数)

选项

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

参数

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

实例

[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)

insmod

insmod命令用于将给定的模块加载到内核中。Linux有许多功能是通过模块的方式,在需要时才载入kernel。如此可使kernel较为精简,进而提高效率,以及保有较大的弹性。这类可载入的模块,通常是设备驱动程序。

语法

insmod(选项)(参数)

选项

-f:不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入;
-k:将模块设置为自动卸除;
-m:输出模块的载入信息;
-o<模块名称>:指定模块的名称,可使用模块文件的文件名;
-p:测试模块是否能正确地载入kernel;
-s:将所有信息记录在系统记录文件中;
-v:执行时显示详细的信息;
-x:不要汇出模块的外部符号;
-X:汇出模块所有的外部符号,此为预设置。

参数

内核模块:指定要加载的内核模块文件。

实例

加载RAID1阵列级别模块,如下所示:

[root@localhost boot]# insmod /lib/modules/2.6.
18-8.el5/kernel/drivers/md/raid1.ko  

[root@localhost boot]# lsmod | grep raid1
raid1                  25153  0

从以上显示结果可知,RAID1模块已加载成功。只是在使用insmod命令加载模块时,需要使用绝对路径方能加载,且加载时无法自动解决依赖关系。

mkisofs

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

语法

mkisofs(选项)(参数)

选项

-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/的目录:

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

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

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

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

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

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

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

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

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

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

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/

rmmod

rmmod命令用于从当前运行的内核中移除指定的内核模块。执行rmmod指令,可删除不需要的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放如核心。你可以将这些功能编译成一个个单独的模块,待有需要时再分别载入它们。

语法

rmmod(选项)(参数)

选项

-v:显示指令执行的详细信息;
-f:强制移除模块,使用此选项比较危险;
-w:等待着,直到模块能够被除时在移除模块;
-s:向系统日志(syslog)发送错误信息。

参数

模块名:要移除的模块名称。

实例

用rmmod命令主要用于卸载正在使用的Linux内核模块,与modprobe -r命令相似,如下所示:

[root@localhost boot]# lsmod | grep raid1
raid1                  25153  0

[root@localhost boot]# rmmod raid1
[root@localhost boot]# lsmod | grep raid1

modprobe

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

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

语法

modprobe(选项)(参数)

选项

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

参数

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

实例

查看modules的配置文件:

modprobe -c

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

alias symbol:ip_conntrack_unregister_notifier ip_conntrack

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

modprobe -l

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

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

挂载vfat模块:

modprobe vfat

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

移除已经加载的模块:

modprobe -r 模块名

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

mknod

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

语法

mknod(选项)(参数)

选项

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

参数

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

实例

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接口。

vgchange

vgchange命令用于修改卷组的属性,经常被用来设置卷组是处于活动状态或非活动状态。处于活动状态的卷组无法被删除,必须使用vgchange命令将卷组设置为非活动状态后才能删除。

语法

vgchange(选项)(参数)

选项

-a:设置卷组的活动状态。

参数

卷组:指定要设置属性的卷组。

实例

使用vgchange命令将卷组状态改为活动的。在命令行中输入下面的命令:

[root@localhost ~]# vgchange -ay vg1000     #将卷组"vg1000"设置为活动状态

输出信息如下:

1 logical volume(s) in volume group "vg1000" now active

bmodinfo

bmodinfo命令用于显示给定模块的详细信息。

语法

bmodinfo(选项)(参数)

选项

-a:显示模块作者;
-d:显示模块的描述信息;
-l:显示模块的许可信息;
-p:显示模块的参数信息;
-n:显示模块对应的文字信息;
-0:用ASCII码的0字符分割字段值,而不使用新行。

参数

模块名:要显示详细信息的模块名称。

实例

显示sg模块的信息:

[root@localhost ~]# modinfo sg
filename:    /lib/modules/2.6.9-42.ELsmp/kernel/drivers/scsi/sg.ko
author:     Douglas Gilbert
description:  SCSI generic (sg) driver
license:    GPL
version:    3.5.31 B0B0CB1BB59F0669A1F0D6B
parm:      def_reserved_size:size of buffer reserved for each fd
parm:      allow_dio:allow direct I/O (default: 0 (disallow))
alias:     char-major-21-*
vermagic:    2.6.9-42.ELsmp SMP 686 REGPARM 4KSTACKS gcc-3.4
depends:    scsi_mod

mkswap

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

语法

mkswap(选项)(参数)

选项

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

参数

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

实例

查看系统swap space大小:

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)):

swapon -s

等价于

cat /proc/swaps

添加交换空间

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

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

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

mkswap /dev/sdb2

启用交换分区:

swapon /dev/sdb2

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

/dev/sdb2 swap swap defaults 0 0

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

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

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

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

mkswap /swapfile1

启用交换分区:

swapon /swapfile1

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

/swapfile1 swap swap defaults 0 0

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

删除交换空间:

禁用交换分区:

swapoff /dev/sdb2

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

echo

echo命令用于在shell中打印shell变量的值,或者直接输出指定的字符串。linux的echo命令,在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的,因此有必要了解下echo的用法echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。

语法

echo(选项)(参数)

选项

-e:激活转义字符。

使用-e选项时,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:

  • \a 发出警告声;
  • \b 删除前一个字符;
  • \c 最后不加上换行符号;
  • \f 换行但光标仍旧停留在原来的位置;
  • \n 换行且光标移至行首;
  • \r 光标移至行首,但不换行;
  • \t 插入tab;
  • \v 与\f相同;
  • \\ 插入\字符;
  • \nnn 插入nnn(八进制)所代表的ASCII字符;

参数

变量:指定要打印的变量。

实例

用echo命令打印带有色彩的文字:

文字色:

echo -e "\e[1;31mThis is red text\e[0m"
This is red text
  • \e[1;31m 将颜色设置为红色
  • \e[0m 将颜色重新置回

颜色码:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37

背景色

echo -e "\e[1;42mGreed Background\e[0m"
Greed Background

颜色码:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47

文字闪动:

echo -e "\033[37;31;5mMySQL Server Stop...\033[39;49;0m"

红色数字处还有其他数字参数:0 关闭所有属性、1 设置高亮度(加粗)、4 下划线、5 闪烁、7 反显、8 消隐