kk Blog —— 通用基础

date [-d @int|str] [+%s|"+%F %T"]

gdb 输出控制

1

1
set print repeats [on/off]

设置打印数组的长度上限值。如果数组中连续相同的成员的数量超过这个上限,GDB会打印字符串””,这里n是同样的重复次数,而不是重复打印这些相同的成员。将这个上限设置为0的话,打印所有的成员。默认上限时10。

1
show print repeats

显示打印重复相同成员的上限数量。

2

1
set print elements <number-of-elements>

这个选项主要是设置数组的,假如你的数组太大了,那么就可以指定一个来指定数据显示的最大长度,当到达这个长度时,GDB就不再往下显示了。假如设置为0,则表示不限制。

1
show print elements

查看print elements的选项信息。

3

运行GDB的时候 总是会出现type return to continue,or q to quit,
因为显示得太多,此时gdb的显示会有些像more命令
把这个消息屏蔽掉可以设置

1
set pagination off 

4

将GDB中需要的调试信息输出到文件

1
2
3
4
# (gdb) set logging file <文件名>
# (gdb) set logging on
# (gdb) bt
# (gdb) set logging off

gdb的脚本使用

1)启动gdb时候

1、gdb在启动的时候,会在当前目录下查找".gdbinit"这个文件,并把它的内容作为gdb命令进行解释,所以如果我把脚本命名为".gdbinit",这样在启动的时候就会处理这些命令。
2、启动gdb的时候自动执行脚本 gdb -x your_script

2)gdb运行期间

可以使用 source script-file 来解释gdb命令脚本script-file

linux内核模块签名

make binrpm-pkg 模块签名和debuginfo同时开启会出错

模块签名是在mod_install的时候,但后续在find-debuginfo.sh中debugedit又会修改文件,导致前面的签名无效。

可行改动方法为:

  1. 在Makefile中将 mod_sign_cmd = perl $(srctree)/scripts/sign-file $(CONFIG_MODULE_SIG_HASH) $(MODSECKEY) $(MODPUBKEY) 改为 mod_sign_cmd=true

  2. 在find-debuginfo_kk.sh中的debugedit后几行位置加上下面三行

1
2
3
  if [[ $f =~ .ko$ ]]; then
    $BUILDDIR/scripts/sign-file "sha256" "$BUILDDIR/signing_key.priv" "$BUILDDIR/signing_key.x509" "$f"
  fi

vault.centos.org/7.3.1611/os/Source/SPackages/rpm-4.11.3-21.el7.src.rpm


linux内核模块签名 Documentation/module_signing.txt

内核在模块模块加载时使用加密签名验证,校验签名是否与已编译的内核公钥匹配。目前只支持RSA X.509验证。
签名验证在通过CONFIG_MODULE_SIG使能。打开签名同时还会强制做模块ELF元数据检查,然后再做签名验证。

公钥生成

内核编译时可以指定一系列的公钥。x509.genkey文件用来生成X509密钥。如果没有该文件,系统会自动提供一个默认的配置。Makefile会根据x509.genkey规则在内核编译根目录生成默认配置,用户可以手动更改该文件。

由此在内核编译过程中分别生成私钥和公钥文件分别为./signing_key.priv和./signing_key.x509。

默认配置是使用/dev/random生成的。如果/dev/random没有足够数据,在后台运行以下命令可以生成更多的数据:rngd -r /dev/urandom。

模块签名

设置了CONFIG_MODULE_SIG_ALL,所有模块将会自动添加签名。如果没有设置,需要手动添加:
scripts/sign-file $(MODSECKEY) $(MODPUBKEY) modules.ko
哈希算法必须为sha1, sha224, sha256, sha384, sha512。对应的加密算法必须是使能的。CONFIG_MODULE_SIG_HASH设置sign-file使用的默认算法。

MODSECKEY=<secret-key-ring-path>
加密私钥文件,默认是./signing_key.priv

MODPUBKEY=<public-key-ring-path>
加密公钥文件,默认为./signing_key.x509

签名模块裁减

签名模块裁减就是去除签名部分,在重新签名之前需要先裁减之前的签名。在打包内核模块发布时,并没有自动裁减。

加载签名模块

模块是通过insmod来加载的,模块加载时通过检查模块的签名部分来验证。

不合法签名和没有签名的模块

如果设 置了CONFIG_MODULE_SIG_FORCE或者在内核启动命令行设置了module.sig_enforce,内核将只加载带有公钥的合法签名 模块。如果都没有设置则会加载没有签名的模块。如果内核有密钥,但模块没有提供合法的签名就会被拒绝加载。下表说明了各种情况:

1
2
3
4
5
6
7
8
模块状态     许可模式    强制检查
未签名         通过      EKEYREJECTED
签名,没有公钥     ENOKEY      ENOKEY
签名,公钥       通过      通过
非法签名,公钥     EKEYREJECTED    EKEYREJECTED
签名,过期密钥     EKEYEXPIRED EKEYEXPIRED
破坏的签名       EBADMSG     EBADMSG
破坏的ELF      ENOEXEC     ENOEXEC

VMware增加磁盘空间

一 添加

选择“VM”—-“setting”并打开,将光标定位在hard Disk这一选项,然后点击下方的Add按钮
点击next,执行下一个步骤
根据提示,创建一个虚拟的磁盘,并点击下一步
按照默认的,选择SCSI格式的磁盘即可,点击next执行下一步
按照默认的点击下一步即可完成虚拟磁盘的添加

则会多出一个/dev/sd?,这里的?代表硬盘编号,第一个硬盘编号为a即sda,第 二个就是sdb,第三个是 sdc,以此类推,一般来说,如果以前没有增加过硬盘,那么原来的硬盘就是sda,通过VMware菜单增加的虚拟硬盘编号就是sdb。如果添加的第二块 硬盘是IDE硬盘,就应该看到hdb,如果是SCSI硬盘,看到的就应该是sdb。

二 分区

使用fdisk /dev/sda进入菜单项,m是列出菜单,p是列出分区表,n是增加分区,w是保存并推出。由于这里增加的磁盘只有5G,因此5G划为一个区。 对新建的磁盘进行分区及格式化的工作:
输入 fdisk /dev/sdb
终端会提示:Command (m for help):
输入:m 则会出现提示
然后根据提示输入:n
会出现下面的提示,依次输入p 和 1 即可
接着便会提示卷的起始地址和结束地址,都保持默认按回车的即可(意思是只分一个区)
输入“w”保存并推出
再次使用 “fdisk -l ”这个命令来查看会发现出现了/dev/sdb1(说明已经完成了分区工作)

三 对新建的分区进行格式化

格式化成ext3的文件系统即可
使用mkfs -t ext3 -c /dev/sda3 格式化分区
-c : 在制做档案系统前,检查该partition 是否有坏轨

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
[root@localhost ~]# mkfs -t ext3 -c /dev/sda3
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
656000 inodes, 1311305 blocks
65565 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1346371584
41 block groups
32768 blocks per group, 32768 fragments per group
16000 inodes per group
Superblock backups stored on blocks:
	    32768, 98304, 163840, 229376, 294912, 819200, 884736


Writing inode tables: done                           
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done


This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

[root@localhost ~]# cd /
[root@localhost /]# mkdir /cm             #增加一个/cm
[root@localhost /]# mount /dev/sda3 /cm           #挂载分区到   /cm        
[root@localhost /]# df -h             #挂载后的分区情况
文件系统              容量  已用 可用 已用% 挂载点
/dev/mapper/VolGroup00-LogVol00
	                  8.6G  2.8G  5.4G  35% /
/dev/sda1              99M   12M   82M  13% /boot
tmpfs                 125M     0  125M   0% /dev/shm
/dev/sda3             5.0G  139M  4.6G   3% /cm

四 设置开机自动加载

创建加载点:mkdir /cm 挂载之后, 修改vi /etc/fstab 分区表文件,
在文件最后加上 /dev/sda3 /cm ext3 defaults 0 0 然后保存,重启即可。

(注意:修改分区表如果有误,将导致进不了linux桌面系统,但这时系统会进入commandline模式,我们可以在commandline模式下对有误的fstab进行修复更改,不过默认情况下这个commandline模式会是Read-Only file system,这意味着你的任何修改操作都是不允许的,但可以通过命令 mount / -o remount,rw 来解除这个限制)。

vm虚拟机命令行

1)开启虚拟机
1
vmrun start "/opt/VM_OS/RH_OS_B/Red Hat Enterprise Linux 5 64-bit.vmx" nogui|gui
2)停止虚拟机
1
vmrun stop "/opt/VM_OS/RH_OS_B/Red Hat Enterprise Linux 5 64-bit.vmx" nogui|gui
3)重启虚拟机
1
vmrun restart "/opt/VM_OS/RH_OS_B/Red Hat Enterprise Linux 5 64-bit.vmx" nogui|gui
4)列出正在运行的虚拟机
1
vmrun list

Linux 即时修改 启动级别 启动参数 磁盘满无法进系统 忘记密码

1、修改启动级别错误配置的方法

如果你不小心把级别设成0或6,用下边的方法补救:
1. 启动系统后,在倒计时结束前按任意键,进入grub引导界面
2. 在grub引导界面的输入‘e’,进入下一级,高亮第二行,再输入‘e’
3. 在最后输入 1[单用户模式] 按回车回到上一级(单用户模式启动不会去读取/etc/inittab) 4. 输入‘b’重启系统

也可以改其他启动参数 进行紧急引导最简单的方法是:
把 init=/bin/bash 或 init=/bin/sh 选项传递给内核

2、磁盘满导致无法进入系统

删除一些文件后重启
没法删除 说文件系统是只读的 ,重新mount 你的磁盘系统为可读写的。

1
mount -o remount,rw  /
3、忘记密码

passwd user