Blog

Eclipse踩坑-修改项目名后部署到tomcat上仍是旧项目名

使用eclipse进行项目开发,有的时候需要修改项目的名称,可是在eclipse中部署到tomcat中访问的时候仍然只能使用旧的项目名称进行访问。

比如下图原来项目的名称是test,现在我在eclipse中改成了pc-shop-web,可是Path仍然是test,这个时候只能通过http://localhost:8080/test进行访问。

其实很简单,Eclipse肯定也把这个保存在某个文件中。通过查看最后发现这个文件在你所部署项目的.settings目录下,名字叫做:org.eclipse.wst.common.component中。比如我们这里是在pc-shop-web(以前是test)/.settings/这个目录下。文件是xml格式的。其中有个:<property name=”context-root” value=”xxxx”/>,我这里的value值是:test,修改为你最新的项目名称即可。

注意:修改完成以后需要在eclipse的Project Explorer中刷新下项目才行。

原文链接:https://blog.csdn.net/achilles12345/java/article/details/45223211

centos6防火墙-学习小结

一、基本操作

# 查看防火墙状态
service iptables status
 
# 停止防火墙
service iptables stop
 
# 启动防火墙
service iptables start
 
# 重启防火墙
service iptables restart
 
# 永久关闭防火墙
chkconfig iptables off
 
# 永久关闭后重启
chkconfig iptables on

2、查看防火墙状态,防火墙处于开启状态并且只开放了22端口

 

3、开启80端口

vim /etc/sysconfig/iptables
# 加入如下代码,比着两葫芦画瓢 :)
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

保存退出后重启防火墙
service iptables restart

 

=================== 分割线 ===================

其他开启其他端口亦是如此。

https://www.cnblogs.com/xxoome/p/6884376.html

centos初装系统-终端翻页scroll问题

1、使用方向键 上下,可以查看命令历史记录

2、使用clear 清屏

I recognize that Up/Down will give you the command history. But, how do you look at past output by scrolling up and down?

I have used Shift+Page Up/Page DownAlt+Shift+Up/Down and Page Up/Page Downbut none of these seem to work.

How do you scroll up/down on the Linux console?

Shift+FnUP or DOWN on a Macbook will allow you to scroll.

或者

 

SHIFT+Page Up and SHIFT+Page Down. If it doesn’t work try this and then it should:

Go the terminal program, and make sure
Edit/Profile Preferences/Scrolling/Scrollback/Unlimited
is checked.

The exact location of this option might be somewhere different though, I see that you are using Redhat.

当然直接用SSH客户端连接服务器就能直接翻页scroll 和复制粘贴了。

centos初装系统-配置yum源加快下载

yum 下载慢,用 ctrl + c 取消 yum安装。我取消下载,然后重新下载速度就变快了 = _ =

配置国内yum源

系统默认的yum 源速度往往不尽人意,为了达到快速安装的目的,在这里修改yum源为国内源。

上海交通大学yum源

参考:https://www.cnblogs.com/mchina/archive/2013/01/04/2842275.html

感觉:不需要啊,因为 CentOS-Base.repo 采用的是 镜像源下载,理论上自动化,哪个下载点快,就用哪个的啊。↓↓↓↓↓

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/altarch/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

 

centos初装系统-无法上网

运行ping时,发现ping不通

[root@www ~]# ping www.baidu.com
ping: www.baidu.com: Name or service not known

如果ping域名的时候出现ping:unknown host  xxx.xxx
但是ping IP地址的时候可以通的话
可知是dns服务器没有配置好,
查看一下配置文件/etc/resolv.conf,里面是否有nameserver xxx.xxx.xxx.xxx,比如使用dns服务器 nameserver 8.8.8.8,如果有,修改一个可用的dns服务器,如8.8.8.8或者4.4.4.4,保存退出即可!

当然,如果连ip都ping 8.8.8.8都ping不通的话,那么就说明网络配置有问题:可以这样解决:

1、编辑网络配置

vi /etc/sysconfig/network-scripts/ifcfg-enp0s3  #注 网络配置文件名可能会有不同,在输入到ifcfg时,可以连续按两下tab键,获取提示,比如我的机器 为 ifcfg-enp0s3

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=098aaea2-65b0-49b7-821d-1fe636293b46
DEVICE=enp0s3
ONBOOT=yes    #### 刚打开这一行是 no ,我编辑改成了yes,只需要按 i 就能编辑,编辑完按esc退出编辑模式,然后按:wq保存文件 [注意:是英文的冒号]
ZONE=public

2、重启网络服务

centos6系统下  
service network restart

centos7系统下[速度有点慢2秒钟左右]
systemctl restart network

3、测试效果

[root@localhost ~]# ping baidu.com
PING baidu.com (39.156.69.79) 56(84) bytes of data.
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=1 ttl=53 time=39.6 ms
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=2 ttl=53 time=78.5 ms
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=3 ttl=53 time=71.8 ms
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=4 ttl=53 time=136 ms


### 按 contrl键 + c键  取消

还可以自定义DNS

vi /etc/resolv.conf 
nameserver 8.8.8.8
nameserver 8.8.4.4

4、查看本机IP

ifconfig 安装

##### 如果查看本机,发现没有 ifconfig 命令行
[root@localhost ~]# ifconfig
-bash: ifconfig: command not found
[root@localhost ~]# 


##### 首先确认下是否是环境变量没有ifconfig 引起。 
[root@localhost ~]# ls /sbin/ifconfig
ls: cannot access /sbin/ifconfig: No such file or directory
[root@localhost ~]# 


##### 以上确定了系统是没有安装ifconfig,下面我们来安装     
##### locale是本地语言设置问题可忽略
[root@localhost ~]# yum install ifconfig
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.huaweicloud.com
 * extras: centosx4.centos.org
 * updates: mirrors.huaweicloud.com
No package ifconfig available.
Error: Nothing to do
[root@localhost ~]# 


### 提示没有ifconfig安装包。我们再使用yum search ifconfig来搜索下ifconfig的相关
[root@localhost ~]# yum search ifconfig
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.huaweicloud.com
 * extras: mirror-hk.koddos.net
 * updates: mirrors.huaweicloud.com
=================================== Matched: ifconfig ====================================
net-tools.i686 : Basic networking tools
[root@localhost ~]# 



##### 查看ifconfig匹配的是net-tools.i686包                     
 yum install net-tools.i686 -y

ifconfig使用

### 使用ifconfig命令,可以查看本地IP,下面这个是 没有联网时的
[root@localhost ~]# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 08:00:38:56:29:2c  txqueuelen 1000  (Ethernet)
        RX packets 95  bytes 9319 (9.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 104  bytes 9383 (9.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 152  bytes 13024 (12.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 152  bytes 13024 (12.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


### 下面这个是 联网 成功的 本机IP是 192.168.1.128

enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.128  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fd38::3d2:a2b7:39cb:278a  prefixlen 64  scopeid 0x20<link>
        ether 08:00:38:56:29:2c  txqueuelen 1000  (Ethernet)
        RX packets 111  bytes 11112 (10.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 124  bytes 11293 (11.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 156  bytes 13368 (13.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 156  bytes 13368 (13.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ip addr 命令(也可以查看本机ip)

[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:38:56:29:2c brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.128/24 brd 192.168.1.255 scope global noprefixroute dynamic enp0s3
       valid_lft 5226sec preferred_lft 5226sec
    inet6 fd38::3d2:a2b7:39cb:278a/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@localhost ~]# 

netstat和ss命令(也可以查看本机ip)

  • centos6 可以使用 netstat
  • centos7 可以使用 ss -ant

5、centos6下编辑ifcfg-xxx 仍无法上网

输入ifconfig命令查看是否有内网ip地址,如果没有,那么配置一下: eth0是设备名,具体看ifconfig 显示的设备名。

ifconfig eth0 192.168.1.100  netmask 255.0.0.0 up

另外使用route命令查看一下当前的默认网关,如果没有,也配置一个,

route add default gw 192.168.1.1

配置好这两个以后,就可以正常的ping通网络了,如果还不能ping www.baidu.com,那么就要去查看dns服务器啦


参考:

https://blog.csdn.net/qq_30180559/article/details/79535596
https://jingyan.baidu.com/article/eb9f7b6d42636d869364e8c9.html

https://blog.csdn.net/menlinshuangxi/article/details/7968955

SSH-踩坑-无法连接到局域网服务器centos

之前为了方便连接到公网服务器,在本地SSH 客户端设置了socket代理。这样能加速访问服务器。

但是有一天,要访问局域网时,因为默认开了代理的缘故,本机SSH 无法连接到 局域网内的centos服务器。【其实是开了centos虚拟机,网络配置是桥接】

只要将本地的SSH取消socket代理就行了,这样就能访问局域网内的服务器了。

虚拟机-centos7安装VBoxGuestAdditions出错

VBoxGuestAdditions 是Virtual Box虚拟机的辅助功能软件,可以实现 虚拟机的共享文件夹、共享剪切板 等功能。

没有安装Virtual Box增强功能Guest Additions的虚拟机操作很不方便,比如:

  • 虚拟机的分辨率最大只有1024×768;
  • 鼠标被虚拟机捕获后要按右Ctrl键才能释放,否则只能再虚拟机里移动;
  • 剪贴板不能共享

通过虚拟机的菜单栏–>devices–>Insert Guest Additions CD image  安装

Kernel headers not found for target kernel

安装出现错误,查看日志文件  /var/log/vboxadd-install.log

VirtualBox Guest Additions: Starting.
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel 
modules.  This may take a while.
VirtualBox Guest Additions: To build modules for other installed kernels, run
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup <version>
VirtualBox Guest Additions: or
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup all
VirtualBox Guest Additions: Kernel headers not found for target kernel 
3.10.0-862.11.6.el7.x86_64. Please install them and execute
  /sbin/rcvboxadd setup
modprobe vboxguest failed
The log file /var/log/vboxadd-setup.log may contain further information.

发现是 kernel header 文件没有找到

### 这里就需要安装 kernel-devel 和 kernel-headers 
### 然后因为要编译Guest Additions模块,所以需要 gcc make //安装GCC就行,后面命令行安装有反馈
###【我这里好像没有装cmake 也可以啊,到底是不是需要编译以后再探讨吧】
yum install kernel-headers kernel-devel gcc make -y


### 编译完后 重启电脑
reboot

### 查看当前安装的 内核开发环境  版本
rpm -qa|grep -e  kernel-devel  -e  kernel-headers 

kernel-devel-3.10.0-327.18.2.el7.x86_64
kernel-headers-3.10.0-327.18.2.el7.x86_64

### 查看系统 中使用的内核版本
uname -r
3.10.0-327.18.2.el7.x86_64

成功安装好后,就可以继续执行Guest Additions的安装了。

/sbin/rcvboxadd setup

unable to find the sources of your current Linux kernel

别人遇到的错误,记录一下:

/tmp/vbox.0/Makefile.include.header:112: *** Error: unable to find the sources of your current Linux kernel. Specify KERN_DIR= and run Make again.  Stop.
Creating user for the Guest Additions.
Creating udev rule for the Guest Additions kernel module.
查询kernel-devel版本是3.10.0-514.26.2.el7.x86_64,而Linux内核版本是3.10.0-514.el7.x86_64,确实不一致。如果安装CentOS时选择了Development Tools组,kernel-devel版本和Linux内核版本是匹配的,则不会出现这个问题。
$ rpm -qa | grep kernel-devel
kernel-devel-3.10.0-514.26.2.el7.x86_64

$ uname -r
3.10.0-514.el7.x86_64

可以使用下面两个命令中的一个安装和Linux内核版本匹配的kernel-devel
$ sudo yum install -y "kernel-devel-uname-r == $(uname -r)"
$ sudo yum install -y kernel-devel-3.10.0-514.el7
然后再次安装Guest Additions成功
$ cd /run/media/centos/VBOXADDITIONS_5.1.22_115126
$ sudo sh ./VBoxLinuxAdditions.run

 

补充我实现的简便方法
确实是犹豫内核版本不一样导致无法挂载共享
1、登入linux系统查看内核版本 $ uname -r
2、进行系统升级,yum update, 升级结果就能看到内核已经升级了 3.10.0-862.2.3.el7.x86_6
3、这个时候直接安装 yum install gcc kernel-devel kernel-headers dkms make bzip2
查看kernel-devel 版本  kernel-devel-3.10.0-862.2.3.el7.x86_64

这样就内核一致了
4、最后关机
5、利用virtualbox 给这个虚拟机添加 VBoxGuestAddisions 包后缀iso
6、这时候vagrant up就会自动安装了


命令行模式安装

安装增强功能,需要先安装这些

#yum install kernel-headers
#yum install kernel-devel
#yum install gcc* 
#yum install make

通过虚拟机的菜单栏–>devices–>Insert Guest Additions CD image  安装:

1、有图形界面和windows一样,双击CD里面的文件执行;
2、命令行模式先将cdrom挂载到mnt目录下,这里的cdrom也需要到dev目录下去查看验证是否这个文件,否则也会有错误。

[root@localhost ~]# mount /dev/cdrom  /mnt
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# cd /mnt
[root@localhost mnt]# ls
AUTORUN.INF  runasroot.sh                       VBoxSolarisAdditions.pkg
autorun.sh   TRANS.TBL                          VBoxWindowsAdditions-amd64.exe
cert         VBoxDarwinAdditions.pkg            VBoxWindowsAdditions.exe
NT3x         VBoxDarwinAdditionsUninstall.tool  VBoxWindowsAdditions-x86.exe
OS2          VBoxLinuxAdditions.run
[root@localhost mnt]# 

执行安装程序,遇到问题

[root@localhost mnt]# ./VBoxLinuxAdditions.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 6.0.10 Guest Additions for Linux........
VirtualBox Guest Additions installer
Copying additional installer modules ...
Installing additional modules ...
VirtualBox Guest Additions: Starting.
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel 
modules.  This may take a while.
VirtualBox Guest Additions: To build modules for other installed kernels, run
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup <version>
VirtualBox Guest Additions: or
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup all
VirtualBox Guest Additions: Kernel headers not found for target kernel 
3.10.0-957.21.3.el7.centos.plus.i686. Please install them and execute
  /sbin/rcvboxadd setup
modprobe vboxguest failed
The log file /var/log/vboxadd-setup.log may contain further information.
[root@localhost mnt]# 

安装kernel-devel 和 kernel-headers

yum install kernel-devel kernel-headers

再次执行发现需要GCC

[root@localhost mnt]# ./VBoxLinuxAdditions.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 6.0.10 Guest Additions for Linux........
VirtualBox Guest Additions installer
Removing installed version 6.0.10 of VirtualBox Guest Additions...
Copying additional installer modules ...
Installing additional modules ...
VirtualBox Guest Additions: Starting.
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel 
modules.  This may take a while.
VirtualBox Guest Additions: To build modules for other installed kernels, run
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup <version>
VirtualBox Guest Additions: or
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup all
VirtualBox Guest Additions: Building the modules for kernel 
3.10.0-957.21.3.el7.centos.plus.i686.

This system is currently not set up to build kernel modules.
Please install the gcc make perl packages from your distribution.
modprobe vboxguest failed
The log file /var/log/vboxadd-setup.log may contain further information.
[root@localhost mnt]# 

继续安装 gcc

yum install gcc

再执行VBoxGuestAdditions安装,成功。

[root@localhost mnt]# ./VBoxLinuxAdditions.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 6.0.10 Guest Additions for Linux........
VirtualBox Guest Additions installer
Removing installed version 6.0.10 of VirtualBox Guest Additions...
Copying additional installer modules ...
Installing additional modules ...
VirtualBox Guest Additions: Starting.
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel 
modules.  This may take a while.
VirtualBox Guest Additions: To build modules for other installed kernels, run
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup <version>
VirtualBox Guest Additions: or
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup all
VirtualBox Guest Additions: Building the modules for kernel 
3.10.0-957.21.3.el7.centos.plus.i686.
[root@localhost mnt]# 

说明

kernel.i686 : Linux 内核(Linux 操作系统的核心)
kernel-devel.i686 : 用来构建与内核匹配的内核模块的开发软件包。

yum search mysql 则会出现有i686,i386,x86_64的等,我就试了x86_64
总结来说(借用别人的):i386架构对应的是32位系统、而i686是i386的一个子集,i686仅对应P6及以上级别的CPU,
i386架构则广泛适用于80386以上的各种CPU;x86_64架构支持64位系统。

 查看

[root@localhost mnt]# cat /proc/version
Linux version 3.10.0-957.21.3.el7.centos.plus.i686 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Tue Jun 18 18:05:09 UTC 2019
[root@localhost mnt]# 

创建共享文件夹

1、在windows 下共享文件夹,给个共享路径,名称设置为project,自动挂载,固定分配

2、在centos中 创建共享文件夹,挂载共享文件夹,project为上面创建共享的文件夹名称

[root@localhost mnt]# mkdir /usr/os_share
[root@localhost mnt]# mount -t vboxsf project /usr/os_share
[root@localhost mnt]# ls /usr/os_share
share_ok_file.txt
[root@localhost mnt]# 

 


参考:
https://www.cnblogs.com/mylinux/p/5612168.html
https://www.jianshu.com/p/7c556c783bb2
https://blog.csdn.net/blueney/article/details/80236204
https://blog.csdn.net/blueney/article/details/80236204

centos初装系统-系统更新后删除旧的内核kernel

CentOS7开机启动界面显示多个内核选项

正常情况下,有两个启动项,一个是“正常启动”,另一个是“救援模式启动”(rescue)。
如果启动项多于2个,说明当前系统有旧内核未删除。原因是CentOS更新后不会自动删除旧内核。
默认以新内核启动,可以在启动选项中临时选择,也可以修改配置永久指定。

修改默认启动的内核

[root@CentOS-7 ~]# uname -r   # 查看当前内核版本
3.10.0-693.5.2.el7.x86_64
[root@CentOS-7 ~]# 
[root@CentOS-7 ~]# cat /boot/grub2/grub.cfg |grep "menuentry "  # 查看所有可用内核
menuentry 'CentOS Linux (3.10.0-693.5.2.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-88ae7d3d-ffaf-4402-9d44-56b6845789e4' {
menuentry 'CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-88ae7d3d-ffaf-4402-9d44-56b6845789e4' {
menuentry 'CentOS Linux (0-rescue-8405cda22c0b421db40478edcf9c1fb2) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-8405cda22c0b421db40478edcf9c1fb2-advanced-88ae7d3d-ffaf-4402-9d44-56b6845789e4' {
[root@CentOS-7 ~]# 
[root@CentOS-7 ~]# grub2-set-default 'CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)'
[root@CentOS-7 ~]# 
[root@CentOS-7 ~]# grub2-editenv list  # 查看内核修改结果
saved_entry=CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
[root@CentOS-7 ~]#

删除无用内核

[root@CentOS-7 ~]# uname -r   # 查看当前内核版本
3.10.0-693.5.2.el7.x86_64
[root@CentOS-7 ~]# 
[root@CentOS-7 ~]# rpm -qa |grep kernel-[0-9]  # 查看全部内核包
kernel-3.10.0-693.5.2.el7.x86_64
kernel-3.10.0-327.el7.x86_64
[root@CentOS-7 ~]# 
[root@CentOS-7 ~]# yum remove kernel-3.10.0-327.el7.x86_64  # 删除指定的无用内核
Loaded plugins: fastestmirror, langpacks
Resolving Dependencies
--> Running transaction check
---> Package kernel.x86_64 0:3.10.0-327.el7 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================================================================================================
 Package                           Arch                              Version                                      Repository                            Size
=============================================================================================================================================================
Removing:
 kernel                            x86_64                            3.10.0-327.el7                               @anaconda                            136 M

Transaction Summary
=============================================================================================================================================================
Remove  1 Package

Installed size: 136 M
Is this ok [y/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Erasing    : kernel-3.10.0-327.el7.x86_64                                                                                                              1/1 
  Verifying  : kernel-3.10.0-327.el7.x86_64                                                                                                              1/1 

Removed:
  kernel.x86_64 0:3.10.0-327.el7                                                                                                                             

Complete!
[root@CentOS-7 ~]# 
[root@CentOS-7 ~]# rpm -qa |grep kernel-[0-9]  # 查看全部内核包
kernel-3.10.0-693.5.2.el7.x86_64
[root@CentOS-7 ~]# 
[root@CentOS-7 ~]# cat /boot/grub2/grub.cfg |grep "menuentry "
menuentry 'CentOS Linux (3.10.0-693.5.2.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-88ae7d3d-ffaf-4402-9d44-56b6845789e4' {
menuentry 'CentOS Linux (0-rescue-8405cda22c0b421db40478edcf9c1fb2) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-8405cda22c0b421db40478edcf9c1fb2-advanced-88ae7d3d-ffaf-4402-9d44-56b6845789e4' {
[root@CentOS-7 ~]#

来自:https://www.cnblogs.com/anliven/p/7944842.html

内存与调试-内存管理(2)实模式下的1MB内存分布

一、真正的内存不用1MB

8086具有20根地址线,它的寻址范围是0x00000到0xFFFFF,可以寻址1M的内存空间。实际上这20根地址线并没有全部用于内存寻址,只不过是大部分地址线用于内存,还有一部分地址线用于只读存储器ROM(存放BIOS)和外围设备。

在8086中1M寻址空间分布如下:

1、较低端的640KB,物理内存占用。物理地址范围是0x00000-0x9FFFF。
2、中间还剩余320KB,由外设占用。其中就包括显卡的显存部分。由于历史原因,一直以来0xB8000-0xBFFFF这段物理地址空间,是留给显卡的。
3、最顶端的64KB,ROM占用。物理地址的范围是0xF0000-0xFFFFF。这一段空间固化了开机时要执行的指令。

二、实模式下1M地址分布

起始 结束 大小 用途
FFFF0 FFFFF 16B BIOS入口地址,此地址也属于BIOS代码,

同样属于顶部的640KB字节。只是为了

强调其入口地址才单独贴出来。此处16字节

的内容是跳转指令jmp f000:e05b

F0000 FFFEF 64KB-16B 系统BIOS范围是F0000~FFFFF共640KB,

为说明入口地址,将最上面的16字节从

此处去掉了,所以此处终止地址是0XFFFEF

C8000 EFFFF 160KB 映射硬件适配器的ROM或内存映射式I/O
C0000 C7FFF 32KB 显示适配器BIOS
B8000 BFFFF 32KB 用于文本模式显示适配器
B0000 B7FFF 32KB 用于黑白显示适配器
A0000 AFFFF 64KB 用于彩色显示适配器
9FC00 9FFFF 1KB EBDA(Extended BIOS Data Area)

扩展BIOS数据区

7E00 9FBFF 622080B约608KB 可用区域
7C00 7DFF 512B MBR被BIOS加载到此处,共512字节
500 7BFF 30464B约30KB 可用区域
400 4FF 256B BIOS Data Area(BIOS数据区)
000 3FF 1KB Interrupt Vector Table(中断向量表)

三、两个字符操作显存

显存就是用来控制显示器要输出的内容。需要输入两个字节,第一个是字符,第二个是字符的样式(比如颜色,背景等等)【简单总结,可能不够准确】

四、86-DOS 将开机码载入200H 的理由

在86-DOS 中会将储存在磁碟开头的开机码(bootstrap) 载入到200H,而200H 这个值刚好在8086 的中断向量所在的位址范围内(0H – 3FFH)。

根据Tim Peterson 的说明,中央处理器的中断向量所在区域在规格上属于预定好的保留区,也就是说0H-3FFH 这个区域是绝对不会载入作业系统的「安全地带」,因此选择了200H这个位址。

摘录Tim Paterson 的说明如下:

At SCP, I chose 0x200 because it was in the interrupt vector space (0 – 3FFH). This means it needed to be reserved and couldn’t be in the way of an OS, no matter where it wanted to load.

整理一下:

  • 0x0 – 0x3FF 是8086 在规格上用来放置中断向量的区域
  • 0x400 以后的位址会载入86-DOS 系统
  • 0x200 – 0x3FF 之间的的中断向量在86-DOS 时代并未被使用

根据以上的理由使用了200H – 3FFH 之间的空间。顺带一提,100H – 200H 之间的空间似乎也被用来备份暂存器内容或作为Monitor/开机码所使用的堆叠空间。

五、MBR 载入到7C00H的理由

先说结论,”0x7C00″最早出现于1981年8月发表的IBM Personal Computer (PC) 5150的ROM BIOS

首先,所谓的7C00H 就是:

32KB (8000H) - 1024B

最前面的32KB 到刚好1024 Bytes 的位置,就是7C00H 了。首先是第一个疑问:这里的”32KB – 1024 = 7C00″ 是有意义的,为什么要订在这个位址呢?

第二个疑问是:IBM PC 5150 发表时,搭载最少记忆体的机种只有16KB (4000H) 的RAM。换句话说,只有16KB 的RAM 是无法将MBR 载入到7C00H 这个位址的。这样说来,16KB 的机种不就没办法执行DOS 了吗?

整理一下后是以下两点:

  1. 0x7C00 刚好是32KB – 1024B 的位置,为什么是这个位置?
  2. 5150 搭载最少记忆体的机种只有16KB 的RAM,那不就无法启动OS 了吗?(无法存取到0x7C00)

针对这两个疑问,试着写信询问了IBM PC 5150 的ROM BIOS 的开发者,David Bradley。同时他也因为设计了以”Ctrl-Alt-Delete” 重置系统而为人所知。

另外,在信件中也问了「86-DOS 会载入到200H,为什么要改变呢?」

I don’t know anything about 86-DOS.

得到这样的回应。也就是说,David 没看过86-DOS 的程式,在不晓得「86-DOS 将开机码载入200H」这件事的情况下开发了ROM BIOS。

那么,先从David Bradley 的回信中解答关于16KB 机型的疑问:

It had to boot on a 32KB machine. DOS 1.0 required a minimum of 32KB, so we weren’t concerned about attempting a boot in 16KB.

要执行DOS 1.0 至少需要32KB,因此没考虑过16KB 机型的问题。

接着是「为什么是32KB – 1024B?」的回答:

We wanted to leave as much room as possible for the OS to load itself within the 32KB. The 808x Intel architecture used up the first portion of the memory range for software interrupts, and the BIOS data area was after it. So we put the bootstrap load at 0x7C00 (32KB-1KB) to leave all the room in between for the OS to load. The boot sector was 512 bytes, and when it executes it’ll need some room for data and a stack, so that’s the other 512 bytes . So the memory map looks like this after INT 19H executes:

  1. 考虑到OS 需要的最少记忆体,希望能在32KB 中尽量空出空间
  2. 从位址0 开始,一直到3FFH 为止规划为中断向量,因此无法使用
  3. 所以,只能载入到32KB 的后半段了
  4. MBR 中的开机码需要空间以便存放资料或作为堆叠使用,要多保留512 bytes
  5. 根据上述,32KB – 512B (MBR) – 512B (资料与堆叠) 就得到了7C00H

根据以上的说明,执行INT 19h 后的记忆体规划如下图:

+--------------------- 0x0
| Interrupts vectors
+--------------------- 0x400
| BIOS data area
+--------------------- 0x5??
| OS load area
+--------------------- 0x7C00
| Boot sector
+--------------------- 0x7E00
| Boot data/stack
+--------------------- 0x7FFF
| (not used)
+--------------------- (...)

以上就是超过25 年,一直控制着x86 IBM PC/AT 相容机上的OS 开机码的0x7C00、7C00H 的由来。

六、32位系统下实模式的差异

计算机刚刚启动时的内存布局如图:

地址 用途
(4GB – 64KB) ~ 4GB 实际BIOS ROM
1MB ~ (4GB – 64KB) 空闲空间
640KB ~ 1MB 视频内存,BIOS启动固件(映射)
0 ~ 640KB 空闲空间

(这是一个非常简略的示意图,具体请见Memory Map (x86)

这一复杂的映射机制是为了保证向后兼容而设计的。在8086时代,内存只有1MB大小,此时,BIOS的代码固化在EPROM中,且EPROM被编址在1MB内存地址空间的最高64KB中。PC加电后,CS寄存器初始化为0xF000,IP寄存器初始化为0xFFF0,所以CPU要执行的第一条指令的地址为CS:IP=0xF000:0XFFF0( Segment:Offset表示) =0xFFFF0( Linear表示) 。这个地址位于被固化的EPROM中,该地址存储了一条指令,它是一个长跳转指令JMP F000:E05B。这样就开启了BIOS的执行过程。

到了32位的80386 CPU时代,内存空间扩大到了4G,多了段机制和页机制。如果仍然把BIOS启动固件编址在0xF0000起始的64KB内存地址空间内,就会把整个物理内存地址空间隔离成不连续的两段,一段是0xF0000以前的地址,一段是1MB以后的地址,这很不协调。为此,intel采用了一个折中的方案:默认将执行BIOS ROM编址在32位内存地址空间的最高端,即位于4GB地址的最后一个64KB内。在PC系统开机复位时,CPU进入实模式,并将CS寄存器设置成0xF000,将它的shadow register的Base值初始化设置为0xFFFF0000,EIP寄存器初始化设置为0x0000FFF0。所以机器执行的第一条指令的物理地址是0xFFFFFFF0。80386的BIOS代码也要和以前8086的BIOS代码兼容,故地址0xFFFFFFF0处的指令还是一条长跳转指令jmp F000:E05B。注意,这个长跳转指令会更新CS寄存器和它的shadowregister,即执行jmp F000:E05B后,CS将被更新成0xF000。表面上看CS其实没有变化,但CS的shadow register被更新为另外一个值了,它的Base域被更新成0x000F0000,此时形成的物理地址为Base+EIP=0x000FE05B,这就是CPU执行的第二条指令的地址。此时这条指令的地址已经是1M以内了,且此地址不再位于BIOS ROM中,而是位于RAM空间中。由于Intel设计了一种映射机制,将内存高端的BIOS ROM映射到1MB以内的RAM空间里,并且可以使这一段被映射的RAM空间具有与ROM类似的只读属性。所以PC机启动时将开启这种映射机制,让4GB地址空间的最高一个64KB的内容等同于1MB地址空间的最高一个64K的内容,从而使得执行了长跳转指令后,其实是回到了早期的8086 CPU初始化控制流,保证了向下兼容。

上述说明指出,在CPU启动之后,它处于实模式之下,执行的第一条指令是jmp F000:E05B,跳转到BIOS程序中。此时,PC = 16*CS + IP,系统地址空间只有20位(1MB)。


参考:

https://gist.github.com/letoh/2790559

http://book.51cto.com/art/201604/509566.htm

https://zhanghuimeng.github.io/post/os-mooc-lecture-3-summary/

互联网入门-UEFI GPT和BIOS MBR的区别

 BIOS和UEFI(都是用来引导操作系统的固件)

BIOS是Basic Input Output System的简称。它是位于计算机主板上的芯片中的低级软件。计算机启动时,BIOS加载,BIOS负责唤醒计算机的硬件组件,确保它们正常运行,然后运行引导加载程序来引导Windows或任何其他已安装的操作系统。

EFI,是Extensible Firmware Interface的词头缩写,直译过来就是可扩展固件接口,它是用模块化、高级语言(主要是C语言)构建的一个小型化系统,EFI和BIOS一样,主要在启动过程中完成硬件初始化,但它是直接利用加载EFI驱动的方式,识别系统硬件并完成硬件初始化,彻底摒弃读各种中断执行。EFI驱动并不是直接面向CPU的代码,而是由EFI字节码编写成,EFI字节码是专用于EFI的虚拟机器指令,需要在EFI驱动运行环境DXE下解释运行,这样EFI既可以实现通配,又提供了良好的兼容。此外,EFI完全是32位或64位,摒弃16位实模式,在EFI中就可以实现处理器的最大寻址,因此可以在任何内存地址存放任何信息。

当EFI发展到1.1的时候,英特尔决定把EFI公之于众,于是后续的2.0吸引了众多公司加入,EFI也不再属于英特尔,而是属于了Unified EFI Form的国际组织,EFI在2.0后也遂改称为UEFI,UEFI,其中的EFI和原来是一个意思,U则是Unified(一元化、统一)的缩写,所以UEFI的意思就是“统一的可扩展固件接口”。

UEFI就是BIOS的升级版,它最显而易见的区别在于它把把BIOS单调的蓝底白字或黑底白字替换为图文并茂的样式,可以通过鼠标点击进行设置,反正看起来就是很高大上的样子了。

BIOS和UEFI都包含了硬件驱动,不然怎么识别显示器和磁盘呢?

BIOS支持 16位,32位,64位系统,对系统安装没有限制。

efi固件只要支持64位,就绝对不会支持32位。反之同理。

UEFI固件64位的话,以UEFI启动只能安装7/8/8.1/10的64位系统,Legacybios启动安装一般没系统限制。现在新出台式机、笔记本多数取用新型主板,支持UEFI启动+Legacybios启动,UEFI固件绝大部分是64位。而平板电脑绝大部分UEFI固件32位,而且不支持Legacybios启动,这些平板只能UEFI启动安装8/8.1/10的32位系统.

Legacybios 是UEFI 的一个CSM 功能,Compatibility Support Module (CSM) that provides legacy BIOS compatibility.

MBR和GPT(都是分区格式)

正常情况下:BIOS 只识别 MBR ,UEFI 只识别 GPT,但是UEFI 有CSM模式,可以识别MBR。至于BIOS 呢,可以通过一定技巧识别GPT

MBR只能支持4个主分区,再多就要用逻辑分区,而GPT则本身无限制,但受限于操作系统(Windows为128个);

MBR 与 GPT,都是分区格式,其中MBR最大分区小于等于2TB,而GPT分区没有2TB的限制,理论最大分区18 EB!GPT只能用在64位操作系统。Windows 10 64bit默认就是GPT。

MBR的硬盘最大支持2TB吗?不是说分区最大支持2TB嘛。MBR的4个主分区,加起来理论上应该可以支持8TB啊。【理论上可以实现接近4T,第一个分区2T不到点,第二个2T分区,因为有】https://superuser.com/questions/1393198/what-is-the-maximum-size-of-hard-drive-used-mbr-partitioning


MBR Sector 是什么

MBR Sector (Master Boot Record Sector) 是主引导记录扇区, 是硬盘上的第一个分区, 独立于其他文件系统。MBR 扇区 在磁盘上出现得比较多, 随着固件和硬件的发展, 将逐步被淘汰。

Master Boot Record Sector 是位于磁盘最前端的一段前导代码, 占一个扇区的空间大小, 因此被称为 MBR 扇区, 由于这一扇区承担有磁盘其他存储空间所不具备的特殊职能, 因此它独立于其他磁盘分区而存在。

  • 位置: 磁盘 0 扇区 至 1 扇区
  • 大小: 512Byte (1 扇区)
  • 独立性: 不属于任何一个操作系统, 独立于所有磁盘分区, 不受其他磁盘分区操作影响

MBR Sector 的作用

保存磁盘主分区信息于 MBR Sector 的磁盘分区表中, 保存操作系统启动引导分区信息于 MBR Sector 的主引导记录中, 引导 BIOS 将控制权交给系统启动引导程序;

MBR Sector 的结构

MBR Sector 主要由三个部分组成:

  • MBR 主引导记录, 保存操作系统启动引导信息
  • DPT 磁盘分区表, 记录磁盘的主分区信息
  • 结束标志, 值为 AA55 , 为 MBR sector 的结束标志

MBR 主引导记录

位置: 0000 – 01BD
大小: 446Byte

组成 位置 作用
Master Boot Record 0000 – 0088 引导代码, 引导从活动分区装载运行引导程序
出错信息数据区 0089 – 01BD 记录数据, 0089 – 00E1 为出错信息, 00E2 – 01BD 为 0 字节

DPT 磁盘分区表

位置: 01BE – 01FD
大小: 64Byte

磁盘分区表占 64Byte, 中存储了 4 个主分区的信息, 每个分区信息占 16Byte, 因此, 使用 MBR Sector 的磁盘最多拥有 4 个主分区, 为解决主分区数量被绝对限制住的问题, 可将 16Byte 的数据拿来指向一个分区空间, 再在这个空间中进行独立分区和记录, 这个空间便被成为拓展分区, 拓展分区里的分区被称为逻辑分区, Linux 文件系统中对硬盘设备的命名规则与此相关

Linux FHS 对于磁盘/硬盘设备的命名为: /dev/sd\[a-p]\[1-n]
sd 标识硬盘/磁盘设备文件,
a-p 代表 16块不同的硬盘, 从 a 开始分配,
1-4 代表主分区或者拓展分区, 5-n 代表拓展分区所指向的逻辑分区, 从 5 开始编号

DPT 结构信息

长度 意义
1 Byte Boot Signature, 00 代表非活动分区, 08 代表活动分区
1 Byte Start Head, 起始磁头
6 Bit Start Sector, 起始扇区
10Bit Start Cylinder, 起始柱面
1 Byte Partiton Signature, 分区类型
1 Byte End Head, 结束磁头
6 Bit End Sector, 结束扇区
10Bit End Cylinder, 结束柱面
4 Byte Sector Preceding Partiton, 起始扇区地址
4 Byte Sector in Partiton, 分区包含扇区数

结束标志

位置: 01FE – 01FF
大小: 2Byte

01FE 存储 55 标志, 为结束标志, 01FF 存储 AA 标志, 二者组合检验 MBR sector 是否有效。


参考:

https://blog.51cto.com/letitgo/1640956

https://zoharyips.github.io/2019/03/23/MBR/