1. Find a Windows System installation disk, start it when you power on your PC; 2. Choose repair computer, then use command line; 3.cd bootattrib bcd -s -h -rrenc:\boot\bcd bcd.oldbootrec /rebuildbcd4. reboot
Saturday, November 26, 2016
Windows error code 0xc0000098 when start you PC
Wednesday, June 1, 2016
domain.com 301 redirection to www.domain.com
server {
server_name mysite.com;
return 301 $scheme://www.mysite.com$request_uri;
}
server {
server_name www.mysite.com;
root /usr/share/nginx/mysite.com;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.html index.php;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
Saturday, March 19, 2016
Backup and Restore MySQL Database Using mysqldump
备份MySQL数据库并恢复
备份的方法很多, 官方文档 http://dev.mysql.com/doc/
本文主要讲如何使用mysqldump备份并恢复MySQL. mysqldump是一个高效的备份MySQL数据库的工具.它创建一个*.sql文件,该文件带有原数据库的DROP table, CREATE table 和INSERT into sql-statements. 使用mysqldump,你可以用一条命令备份本地数据库并且同时恢复到远端服务器.
基本用法:
backup # mysqldump -u root -p[password] [database_name] > dumpfilename.sql
restore # mysqldump -u root -p[password] [database_name] < dumpfilename.sql
注意 -u 后面有空格 -p没有空格直接跟密码 restore数据库时 目标数据库必须存在 也就是先要创建一个数据库 才能做restore的动作
下面开始举例子:
1.备份单个数据库
# mysqldump -u root -p[password] store > store.sql
将数据库sotre备份至当前目录并且命名为store.sql. store.sql将包含store的drop table, create table and insert命令的所有tables.
2.备份多个数据库
如果你想备份多个数据库,首先请指定你想备份的数据库的名字
#mysql -u root -p[password] 进入数据库
mysql> show database;
+--------------------+
| Database |
+--------------------+
| information_schema |
| bugs |
| mysql |
| store |
+--------------------+
4 rows in set (0.00 sec)
你想备份数据库store和bugs, 执行命令
#mysqldump -u root -p[password] --databases bugs store > bugs_store.sql
验证bugs_store.sql包含两个数据库
# grep -i "Current database:" /tmp/bus_store.sql
-- Current Database: `mysql`
-- Current Database: `store`
3.备份所有数据库
#mysqldump -u root -p[password] --all-databases > /tmp/all-databases.sql
4.备份指定table
备份数据库store中的accounts_contacts到目录/tmp/store_accounts_contacts.sql
# mysqldump -u root -p[password] store accounts_contacts \
> /tmp/store_accounts_contacts.sql
如何恢复数据库
1.恢复数据库store.sql到数据库store. 首先,数据库store必须存在,创建数据库store如下
#mysql -u root -p[password]
mysql> create database store;
mysql> quit;
恢复数据库命令
# mysql -u root -p[password] store < /tmp/store.sql
2.备份本地数据库的同时恢复数据库到远端服务器
备份本地数据库store 恢复store到远端服务器并且重命名为store1
请注意必须先在远端服务器创建数据库store1
# mysqldump -u root -p[password] store | mysql -u root -p[password] --host=remote-server -C store1
好了,问题来了:
备份多个数据库到一个文件bugs_store.sql后, 如何只恢复其中一个数据库store呢?
操作过程中出现的问题:
备份后 在远端恢复数据之后 打开网站 显示报错
Call to undefined function: mysqli_connect(). Please install the MySQL Connector for PHP
于是打开info.php页面, 发现Additional.ini files parsed一项比原来少了很多, 一项一项安装添加比较 始终还是报同样的错误
重新配置php5-mysql好了,执行命令
apt-get purge php5-mysql
apt-get autoremove
apt-get install php5-mysql
输出以下信息
Selecting previously unselected package php5-mysql.
(Reading database ... 331424 files and directories currently installed.)
Preparing to unpack .../php5-mysql_5.6.14+dfsg-0+deb8u1_amd64.deb ...
Unpacking php5-mysql (5.6.14+dfsg-0+deb8u1) ...
Processing triggers for php5-fpm (5.6.14+dfsg-0+deb8u1) ...
Setting up php5-mysql (5.6.14+dfsg-0+deb8u1) ...
Creating config file /etc/php5/mods-available/mysql.ini with new version
php5_invoke: Enable module mysql for fpm SAPI
php5_invoke: Enable module mysql for cli SAPI
Creating config file /etc/php5/mods-available/mysqli.ini with new version
php5_invoke: Enable module mysqli for fpm SAPI
php5_invoke: Enable module mysqli for cli SAPI
Creating config file /etc/php5/mods-available/pdo_mysql.ini with new version
php5_invoke: Enable module pdo_mysql for fpm SAPI
php5_invoke: Enable module pdo_mysql for cli SAPI
Processing triggers for php5-fpm (5.6.14+dfsg-0+deb8u1) ...
重新配置完毕, 打开info.php页面,发现好多配置瞬间有了. 再次访问server_ip 正常访问. 问题解决.
备份的方法很多, 官方文档 http://dev.mysql.com/doc/
本文主要讲如何使用mysqldump备份并恢复MySQL. mysqldump是一个高效的备份MySQL数据库的工具.它创建一个*.sql文件,该文件带有原数据库的DROP table, CREATE table 和INSERT into sql-statements. 使用mysqldump,你可以用一条命令备份本地数据库并且同时恢复到远端服务器.
基本用法:
backup # mysqldump -u root -p[password] [database_name] > dumpfilename.sql
restore # mysqldump -u root -p[password] [database_name] < dumpfilename.sql
注意 -u 后面有空格 -p没有空格直接跟密码 restore数据库时 目标数据库必须存在 也就是先要创建一个数据库 才能做restore的动作
下面开始举例子:
1.备份单个数据库
# mysqldump -u root -p[password] store > store.sql
将数据库sotre备份至当前目录并且命名为store.sql. store.sql将包含store的drop table, create table and insert命令的所有tables.
2.备份多个数据库
如果你想备份多个数据库,首先请指定你想备份的数据库的名字
#mysql -u root -p[password] 进入数据库
mysql> show database;
+--------------------+
| Database |
+--------------------+
| information_schema |
| bugs |
| mysql |
| store |
+--------------------+
4 rows in set (0.00 sec)
你想备份数据库store和bugs, 执行命令
#mysqldump -u root -p[password] --databases bugs store > bugs_store.sql
验证bugs_store.sql包含两个数据库
# grep -i "Current database:" /tmp/bus_store.sql
-- Current Database: `mysql`
-- Current Database: `store`
3.备份所有数据库
#mysqldump -u root -p[password] --all-databases > /tmp/all-databases.sql
4.备份指定table
备份数据库store中的accounts_contacts到目录/tmp/store_accounts_contacts.sql
# mysqldump -u root -p[password] store accounts_contacts \
> /tmp/store_accounts_contacts.sql
如何恢复数据库
1.恢复数据库store.sql到数据库store. 首先,数据库store必须存在,创建数据库store如下
#mysql -u root -p[password]
mysql> create database store;
mysql> quit;
恢复数据库命令
# mysql -u root -p[password] store < /tmp/store.sql
2.备份本地数据库的同时恢复数据库到远端服务器
备份本地数据库store 恢复store到远端服务器并且重命名为store1
请注意必须先在远端服务器创建数据库store1
# mysqldump -u root -p[password] store | mysql -u root -p[password] --host=remote-server -C store1
好了,问题来了:
备份多个数据库到一个文件bugs_store.sql后, 如何只恢复其中一个数据库store呢?
操作过程中出现的问题:
备份后 在远端恢复数据之后 打开网站 显示报错
Call to undefined function: mysqli_connect(). Please install the MySQL Connector for PHP
于是打开info.php页面, 发现Additional.ini files parsed一项比原来少了很多, 一项一项安装添加比较 始终还是报同样的错误
重新配置php5-mysql好了,执行命令
apt-get purge php5-mysql
apt-get autoremove
apt-get install php5-mysql
输出以下信息
Selecting previously unselected package php5-mysql.
(Reading database ... 331424 files and directories currently installed.)
Preparing to unpack .../php5-mysql_5.6.14+dfsg-0+deb8u1_amd64.deb ...
Unpacking php5-mysql (5.6.14+dfsg-0+deb8u1) ...
Processing triggers for php5-fpm (5.6.14+dfsg-0+deb8u1) ...
Setting up php5-mysql (5.6.14+dfsg-0+deb8u1) ...
Creating config file /etc/php5/mods-available/mysql.ini with new version
php5_invoke: Enable module mysql for fpm SAPI
php5_invoke: Enable module mysql for cli SAPI
Creating config file /etc/php5/mods-available/mysqli.ini with new version
php5_invoke: Enable module mysqli for fpm SAPI
php5_invoke: Enable module mysqli for cli SAPI
Creating config file /etc/php5/mods-available/pdo_mysql.ini with new version
php5_invoke: Enable module pdo_mysql for fpm SAPI
php5_invoke: Enable module pdo_mysql for cli SAPI
Processing triggers for php5-fpm (5.6.14+dfsg-0+deb8u1) ...
重新配置完毕, 打开info.php页面,发现好多配置瞬间有了. 再次访问server_ip 正常访问. 问题解决.
LEMP配置-Debian Jessie
LEMP配置手册
Linux + Nginx + MySQL + PHP-FPM 搭建网站平台
1.更新系统
apt-get update
apt-get upgrade
2.安装nginx
apt-get install nginx
systemctl start nginx 开启nginx服务
systemctl enable nginx 设置开机启动nginx
可能出现的问题:
dpkg: error processing package nginx (--configure):
dependency problems - leaving unconfigured
Processing triggers for systemd (215-17+deb8u1) ...
Errors were encountered while processing:
nginx-full
nginx
E: Sub-process /usr/bin/dpkg returned an error code (1)
解决办法:
编辑 /etc/nginx/sites-available/default 注释掉行 listen [::]:80 default_server;
systemctl restart nginx
apt-get install nginx 目的是配置Nginx
此时访问 server_ip 出现welcom表示配置成功.
Welcome to nginx on Debian!
If you see this page, the nginx web server is successfully installed and working on Debian. Further configuration is required.
For online documentation and support please refer to nginx.org
Please use the reportbug tool to report bugs in the nginx package with Debian. However, check existing bug reports before reporting a new bug.
Thank you for using debian and nginx.
3.安装MySQL
apt-get install mysql-server
安装过程中请根据提示设置root密码
安装完成后, 请执行安全安装选项
mysql_secure_installation
输入刚才设置的SQL root密码, 当被问到是否修改root密码时, 请输入n.
过程如下:
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
You already have a root password set, so you can safely answer 'n'.
Change the root password? [Y/n] n
... skipping.
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y
... Success!
By default, MySQL comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
- Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
... Failed! Not critical, keep moving...
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
设置开机启动mysql systemctl enable mysql
安装过程可能会报错:
Job for mysql.service failed. See 'systemctl status mysql.service' and 'journalctl -xn' for details.
invoke-rc.d: initscript mysql, action "start" failed.
dpkg: error processing package mysql-server-5.5 (--configure):
subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of mysql-server:
mysql-server depends on mysql-server-5.5; however:
Package mysql-server-5.5 is not configured yet.
dpkg: error processing package mysql-server (--configure):
dependency problems - leaving unconfigured
Processing triggers for libc-bin (2.19-18+deb8u3) ...
Errors were encountered while processing:
mysql-server-5.5
mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)
root@kali:/var/www/html# systemctl status mysql.service
● mysql.service - LSB: Start and stop the mysql database server daemon
Loaded: loaded (/etc/init.d/mysql)
Active: failed (Result: exit-code) since Fri 2016-03-18 16:53:04 CST; 30s ago
Process: 11831 ExecStart=/etc/init.d/mysql start (code=exited, status=127)
Mar 18 16:53:02 kali mysql[11831]: /etc/init.d/mysql: WARNING: /etc/mysql/my.cnf cannot be read. See README.Debian.gz ... (warning).
Mar 18 16:53:04 kali mysql[11831]: Starting MySQL database server: mysqld ..
Mar 18 16:53:04 kali mysql[11831]: /etc/init.d/mysql: line 121: /etc/mysql/debian-start: No such file or directory
Mar 18 16:53:04 kali systemd[1]: mysql.service: control process exited, code=exited status=127
Mar 18 16:53:04 kali systemd[1]: Failed to start LSB: Start and stop the mysql database server daemon.
Mar 18 16:53:04 kali systemd[1]: Unit mysql.service entered failed state.
解决办法:
apt-get purge mysql-server
apt-get autoremove
apt-get clean
apt-get autoclean
apt-get update
apt-get install mysql-server
4.安装PHP-FPM
apt-get install php5-fpm php5-mysql
下一步要做的就是修改nginx配置文件, 修改之前请先备份.
mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.old
vim /etc/nginx/sites-available/default
基本配置如下:
server {
listen 80;
server_name your_website_name.com;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
保存退出.
5.测试
创建一个文件名为info.php的文件 放在目录/var/www/html下
vim /var/www/html/info.php
文件内容如下:
<?php
phpinfo();
?>
重启nginx服务以验证.
systemctl restart nginx
访问页面server_ip/info.php 你将会看到PHP版本, 包含的modules 等等.
LEMP配置完成!
Thanks!
Linux + Nginx + MySQL + PHP-FPM 搭建网站平台
1.更新系统
apt-get update
apt-get upgrade
2.安装nginx
apt-get install nginx
systemctl start nginx 开启nginx服务
systemctl enable nginx 设置开机启动nginx
可能出现的问题:
dpkg: error processing package nginx (--configure):
dependency problems - leaving unconfigured
Processing triggers for systemd (215-17+deb8u1) ...
Errors were encountered while processing:
nginx-full
nginx
E: Sub-process /usr/bin/dpkg returned an error code (1)
解决办法:
编辑 /etc/nginx/sites-available/default 注释掉行 listen [::]:80 default_server;
systemctl restart nginx
apt-get install nginx 目的是配置Nginx
此时访问 server_ip 出现welcom表示配置成功.
Welcome to nginx on Debian!
If you see this page, the nginx web server is successfully installed and working on Debian. Further configuration is required.
For online documentation and support please refer to nginx.org
Please use the reportbug tool to report bugs in the nginx package with Debian. However, check existing bug reports before reporting a new bug.
Thank you for using debian and nginx.
3.安装MySQL
apt-get install mysql-server
安装过程中请根据提示设置root密码
安装完成后, 请执行安全安装选项
mysql_secure_installation
输入刚才设置的SQL root密码, 当被问到是否修改root密码时, 请输入n.
过程如下:
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
You already have a root password set, so you can safely answer 'n'.
Change the root password? [Y/n] n
... skipping.
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y
... Success!
By default, MySQL comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
- Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
... Failed! Not critical, keep moving...
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
设置开机启动mysql systemctl enable mysql
安装过程可能会报错:
Job for mysql.service failed. See 'systemctl status mysql.service' and 'journalctl -xn' for details.
invoke-rc.d: initscript mysql, action "start" failed.
dpkg: error processing package mysql-server-5.5 (--configure):
subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of mysql-server:
mysql-server depends on mysql-server-5.5; however:
Package mysql-server-5.5 is not configured yet.
dpkg: error processing package mysql-server (--configure):
dependency problems - leaving unconfigured
Processing triggers for libc-bin (2.19-18+deb8u3) ...
Errors were encountered while processing:
mysql-server-5.5
mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)
root@kali:/var/www/html# systemctl status mysql.service
● mysql.service - LSB: Start and stop the mysql database server daemon
Loaded: loaded (/etc/init.d/mysql)
Active: failed (Result: exit-code) since Fri 2016-03-18 16:53:04 CST; 30s ago
Process: 11831 ExecStart=/etc/init.d/mysql start (code=exited, status=127)
Mar 18 16:53:02 kali mysql[11831]: /etc/init.d/mysql: WARNING: /etc/mysql/my.cnf cannot be read. See README.Debian.gz ... (warning).
Mar 18 16:53:04 kali mysql[11831]: Starting MySQL database server: mysqld ..
Mar 18 16:53:04 kali mysql[11831]: /etc/init.d/mysql: line 121: /etc/mysql/debian-start: No such file or directory
Mar 18 16:53:04 kali systemd[1]: mysql.service: control process exited, code=exited status=127
Mar 18 16:53:04 kali systemd[1]: Failed to start LSB: Start and stop the mysql database server daemon.
Mar 18 16:53:04 kali systemd[1]: Unit mysql.service entered failed state.
解决办法:
apt-get purge mysql-server
apt-get autoremove
apt-get clean
apt-get autoclean
apt-get update
apt-get install mysql-server
4.安装PHP-FPM
apt-get install php5-fpm php5-mysql
下一步要做的就是修改nginx配置文件, 修改之前请先备份.
mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.old
vim /etc/nginx/sites-available/default
基本配置如下:
server {
listen 80;
server_name your_website_name.com;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
保存退出.
5.测试
创建一个文件名为info.php的文件 放在目录/var/www/html下
vim /var/www/html/info.php
文件内容如下:
<?php
phpinfo();
?>
重启nginx服务以验证.
systemctl restart nginx
访问页面server_ip/info.php 你将会看到PHP版本, 包含的modules 等等.
LEMP配置完成!
Thanks!
Sunday, January 17, 2016
syslinux引导bootmgr
使用syslinux多启动时, 添加WIN7后竟然转到grub4dos 提示命令行输入.
于是:
采用syslinux官方提供的chain.c32模块
只需要更改syslinux.cfg的内容类似下面
LABEL win7_x64_install
MENU LABEL Windows 7 x64 Install
COM32 chain.c32
APPEND fs ntldr=/bootmgr
引导至bootmgr后便可以进行WIN系统安装.
于是:
采用syslinux官方提供的chain.c32模块
只需要更改syslinux.cfg的内容类似下面
LABEL win7_x64_install
MENU LABEL Windows 7 x64 Install
COM32 chain.c32
APPEND fs ntldr=/bootmgr
引导至bootmgr后便可以进行WIN系统安装.
Thursday, January 7, 2016
安装VMware vSphere 6.0中出现的问题.
今日闲来无事, 想搞一次虚拟化测试. 主机Windows 10 Pro, 装虚拟机VMware WorkStation 12.
在VM 12上首先装ESXi 6.0, 然后导入vCenter Host Gateway 6.0.
导入完成后, 发现vCenter使用root/vmware不能登录. 密码输入错误5次账户还被锁定了. 于是进入grub设置参数修改root密码.
1. 开机出现GRUB提示时, 按上下箭头禁止自动引导;
2. 选中正常启动项 按e进入编辑;
3. 按上下箭头滚动到第二行显示内核引导参数, 按e编辑引导命令;
4. 将 init=/bin/bash附加到内核引导选项, 按enter确认
5. 按b启动引导 直至进入shell
6. passwd root重置密码
7. reboot重启机器
后来查阅资料得知, 自vCSA 5.5U1开始, 本地密码90天强制过期.
在VM 12上首先装ESXi 6.0, 然后导入vCenter Host Gateway 6.0.
导入完成后, 发现vCenter使用root/vmware不能登录. 密码输入错误5次账户还被锁定了. 于是进入grub设置参数修改root密码.
1. 开机出现GRUB提示时, 按上下箭头禁止自动引导;
2. 选中正常启动项 按e进入编辑;
3. 按上下箭头滚动到第二行显示内核引导参数, 按e编辑引导命令;
4. 将 init=/bin/bash附加到内核引导选项, 按enter确认
5. 按b启动引导 直至进入shell
6. passwd root重置密码
7. reboot重启机器
后来查阅资料得知, 自vCSA 5.5U1开始, 本地密码90天强制过期.
Friday, October 2, 2015
计算机启动过程
本文介绍从按下电源按钮到系统弹出登录界面, 计算机发生了什么.
1. BIOS
2. MBR
3. Boot Loader
4. Kernel
5. /etc/inittab
6. /etc/rc.sysinit
7. /etc/rcX.d
8. /etc/rc.local
9. /bin/login
当我们按下电源按钮时, 电源就开始向主板和其他设备供电, 此时电压不太稳定, 主板控制芯片组会向CPU发出并保持一个RESET信号, 让CPU内部自动恢复到初始状态. 当主板控制芯片组检测到电源稳定供电时, 它就撤去RESET信号, CPU就马上开始执行指令, 此指令地址一般为系统BIOS地址范围, 将控制权交给BIOS.
系统BIOS的启动代码首先要做的事情就是POST(Power-on Self Test 加电自检), POST的主要任务是检测系统的一些关键设备是否存在和能否正常工作, 比如显卡, 内存等设备. 由于POST是最早进行的检测过程, 此时显卡还没有初始化, 如果系统BIOS在进行POST的过程中发现了一些致命错误, 比如没有找到内存或者内存有问题(640k常规内存), 那么系统BIOS就会直接通过蜂鸣器发出警告, 根据蜂鸣器发出声音的长短和次数也可以判别错误类型. 如果POST通过, 系统BIOS会查找显卡BIOS, 找到后调用显卡BIOS的初始化代码,此时显示屏已经有显示信息啦. 显卡检测成功后系统BIOS会执行其他设备的检测, 完全检测通过后系统BIOS重新执行自己的代码, 获取系统控制权. 此后系统BIOS会检测系统的标准硬件, 比如硬盘, 软驱, 串行接口和并行接口等, 再之后就是检测即插即用设备,如果有则为即插即用设备分配中断, DMA通道和I/O端口等资源. 到了这里, 所有的设备都检测完毕. 如果和上次启动相比, BIOS发现系统硬件出现变动, 则BIOS还会更新ESCD(Extended System Configuration Data 扩展系统配置数据). ESCD是系统BIOS用来与操作系统交换硬件配置信息的数据, 这些信息被存放在CMOS中. 系统BIOS执行的最后一个工作是根据用户指定的启动顺序, 从硬盘, 光驱或者USB启动系统.
BIOS非常重要, 它包含了CPU的相关信息, 设备启动顺序信息, 硬盘信息, 内存信息, PnP特性等.
如果系统BIOS执行的最后一步是从硬盘启动系统. 则系统会查找MBR(Master Boot Record 主引导记录, 硬盘的0磁道0磁头1扇区被称为MBR), MBR的大小是512 Byte, 512 Byte= 446 Byte + 64 Byte + 2 Byte. 前446 Byte是调用操作系统的机器码, 中间64 Byte是磁盘分区信息表, 最后2 Byte是主引导记录签名(0x55和0xAA). 系统找到硬盘MBR后, 就会将其复制到0x7c00地址所在的物理内存, 其实复制到物理内存的内容就是Boot Loader. 具体到计算机, 就是lilo或者grub. 我们常见的为grub, 用户从grub选择要启动的操作系统后, 控制权就会转移到操作系统.
根据grub设定的内核映像所在路径, 系统读取内核映像, 解压缩并将解压后的内核放到内存中, 调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备, 完成linux核心环境的建立. 此时, 基于linux的程序可以正常运行啦.
内核加载后, 第一个运行的程序是/sbin/init, 该程序会读取/etc/inittab文件, 根据此文件进行初始化工作. 该程序的作用是确定linux的运行等级. linux的运行等级为0-6, 都有不同的含义. init的pid为1, 它是所有其他进程的父进程. linux启动的第一个进程都是init.
确定运行等级后, linux执行的第一个用户层文件是/etc/rc.sysinit脚本程序, 它的工作非常多, 包括设定PATH, 设定网络配置(/etc/sysconfig/network), 启动swap分区, 设定/proc等. 具体信息可以到/etc路径中查看rc.sysinit文件.
启动内核模块. 依据/etc/modules.conf和/etc/modules.d目录下的文件来启动内核模块.
执行不同运行级别的脚本程序. /etc/rcX.d (此处X是指linux的运行等级0-6)
执行用户定义的脚本程序. /etc/rc.local
执行/bin/login脚本, 等待用户输入.
Sunday, August 11, 2013
RedHat 6.4 环境搭建DNS服务器
DNS基础知识:
本实验是在RedHat 6.4环境下搭建DNS服务器. 在搭建服务器之前需要安装相应软件:
yum install bind bind-chroot
安装完成后先重启服务 service named restart.
同时修改所有启动level下DNS服务是自动启动的 chkconfig named on
其中bind是我们需要的DNS配置软件; bind-chroot是辅助软件,建议安装, 安装好之后,会在/var/named/chroot下面产生伪根, 包含DNS配置的所有信息, 我们写配置就在这个目录下写. 一旦重启服务不成功, 伪根就不能用啦. 我们需要在真实的路径下重写修改配置,重启服务.
DNS正向解析:
1. 进入主配文件 vim /etc/named.conf

修改行11 listen-on port 53 {any;};
修改行17 allow-query {any;};
保存退出.
2. 进入具体域的配置文件 vim
/etc/named.rfc1912.zones

复制行13到行17, 写入自己的zone信息, 如行19-23, 保存退出.

3. 进入伪根 cd
/var/named/chroot/var/named/
复制正向解析模板 cp –p named.localhost named.google.com
注意2点:
1 复制时一定要保存权限
2 这里的named.google.com一定要跟具体zone信息里的file名相同.
然后编辑 vim named.google.com

修改为类似以下

保存退出.
4.修改本地dns配置 vim /etc/resolv.conf

修改为192.168.1.7 保存退出. 重启服务.
我是在1.6上ssh连上1.7的 所以此处要写真实dns服务器192.168.1.7
5.
验证.

验证成功.
DNS反向解析:
正向解析成功时,才能做反向解析.
1.
编辑反向解析zone vim /etc/named.rfc1912.zones

复制行37-41 生成行43-47. 保存退出.
2.
进入模板路径 cd /var/named/chroot/var/named
复制 cp –p named.loopback named.loopback.google.com
修改信息如下 vim
named.loopback.google.com

保存退出. 重启服务.
3 验证

DNS高速缓存解析:
有客户端发送DNS请求给内部DNS服务器, 但该服务器没有此记录, 此时此服务器可以指向外部某一DNS服务器, 比如8.8.8.8. 当8.8.8.8返回给内部DNS服务器结果是, 内部服务器先本地缓存一份,然后把结果发给真实的客户端.
环境: 本地缓存DNS服务器为192.168.1.6 外部DNS服务器为192.168.1.7
1.
首先修改本地DNS服务器 vim /etc/resolv.conf


保存退出.
测试一下
2.
修改named.conf 主配文件 vim
/etc/named.conf
注释行19-21 添加行22 保存退出.

3 重启服务 验证

注意: 不成功时尝试关闭防火墙
iptables –F
DNS视图:
同一个网址www.google.com 我们有电信用户和联通用户同时在访问, 电信用户访问联通的www.google.com可能比较慢, 同样, 联通用户访问电信的www.google.com也一样比较慢. 我们可以以视图的形式让电信用户访问3.3.3.3 让联通的用户访问4.4.4.4(假设3.3.3.3是电信的www.google.com地址, 4.4.4.4是联通的www.google.com地址).
1.
在192.168.1.7上写配置

vim
/etc/named.conf
我写了2个视图 view “google.com.10010”和 view “google.com.10000”
注意 1: 写视图时要把根 zone “.” 写入视图
2: 注释掉 include
保存退出, 重启服务.

2.
验证
首先将192.168.1.6 和192.168.1.8的nameserver 改为192.168.1.7 vim /etc/resolv.conf

主辅DNS:
辅助DNS服务器是主要DNS的备份.
我在192.168.1.6上有个google.com域的辅助DNS服务器, 主要DNS服务器在192.168.1.7
首先验证 cd
/var/named/chroot/var/named/slaves
ls –a

编辑 vim
/etc/named.rfc1912.zones

写入行19-23 保存退出 重启服务

验证 cd /var/named/chroot/var/named/slaves

DNS子域委派
环境: gooogle.com在HK有个google.com.hk 当中国用户访问google.com时, 美国总部DNS服务器不会直接解析,而是把链接指向HK的DNS服务器 google.com.hk
可达到方便管理 提高性能 负载均衡等效果.
192.168.1.7模拟美国总部DNS服务器 192.168.1.6模拟HK分部google.com.hk
在.7上配置
Saturday, July 20, 2013
Linux 基础学习
Everything is a
file.
/dev/sda /dev 设备文件 sda第一块硬盘 sda1 第一个分区 hd sd vd
sda5 扩展分区的第一个逻辑分区
文件系统:
/ 根
/boot 系统启动信息
/home 用户信息
/swap 交换分区
硬盘 每个扇区512Byte 第一个扇区MBR 最重要
MBR Master Boot
Record 硬盘的主引导记录
MBR由三部分组成: 主引导程序 boot loader 446字节
硬盘分区表 DPT Disk Partition table 64字节
magic number 2字节 固定为55AA
1. MBR 446+64+2
命令;
CTRL+ALT+F1 F2 F3 F4 F5 F6
CTRL+ALT+F1 F2 F3 F4 F5 F6
passwd
su
ld
uid=500(tom)
gid=500(tom) groups=500(tom)
history 存在于/home/tom/.bash_history history –c 清除历史记录 !2 执行history记录里第二条记录
ctrl+a 光标跳到最左边
ctrl+e 最右边
红色-压缩
蓝色-目录
黑色-普通文件 绿色-可执行文件
ls –l –d dir 列出当前目录下的dir文件的详细信息
man手册里查找 / 然后输入要查找的内容
home : /root, /home/username
user executable:
bin, /usr/bin, /usr/local/bin
system
executables: /sbin,/user/sbin,/user/local/sbin
other mountpoints:
/media, /mnt
configuration:
/etc
temporary files:
/tmp 定期删除里面的信息
kernels and
bootloader:/boot
server data: /var,
/srv
system
information: /proc, /sys
shared libraries:
/lib, /usr/lib, /usr/local/lib
/proc是虚拟的,不占用实际存储空间 cd /proc
more cupinfo
cd 立刻回到家目录 pwd 显示当前绝对路径
cd – 回到上一次工作目录
cd .. 回到上一级目录 .当前 .. 上级
cp –r –p –I
cp –r 拷贝目录
cp –p 保留权限 copy后属性不变
cp –I 交互式提问
mv 剪切或者重命名
cp file /tmp/FILE
touch 建立空文件
mkdir 建立目录
rm –r –I –f rm用于删除文件
rm –r 删除目录,递归删除
rm –I 交互式提问
rm-f 强制删除文件
rmdir 删除空目录, 非空不能删
mkdir –p mkdir –p /a/b/c 建立目录 一次性建立
alias别名
用户 群组 权限
用户: 管理员 普通用户 系统内置账户
uid 0 root用户 普通用户uid从500开始
用户信息存于/etc/passwd 密码信息 /etc/shadow
passwd内容: 7段 6个冒号
user name :X: uid
: gid : 说明信息 :家目录 : shell环境 X原来存放密码 现在无内容 只是占位
useradd XX; passwd
XX
userdel –r XX 删除用户 –r表示家目录也删掉
群组: 主要组 次要组
gid 信息存于 /etc/group
组名:组密码:组号:组成员
组密码 X
ls –l 10个字符标识一个文件的详细信息
r w x
对于文件和目标 其含义是不同的
文件 r 查看内容 w 修改其中内容 但不能对文件本身做修改,比如删除 x 执行
目录 r 浏览目录 w 修改其中的子目录子文件 x 进入目录 要想添加子目录,必须有X权限
修改权限 chmod
chmod u/g/o/a +/-/=
r/w/x chmod o+w rhce 给other添加w权限到rhce文件
chown 修改拥有人/拥有组
chgrp 修改拥有组
file 命令可以查看文件类型
shell 环境
type 用于查看命令是内部命令还是外部命令 type ls
cat /etc/shells 这么多种shell环境
其中有一个 /sbin/nologin 不可登录shell
ftp的用户shell环境就是上面的/sbin/nologin
/bin/bash 此shell环境的优点
通配符
* 匹配任意字符
? 匹配单个字符
[0-9] 范围中的任意一个
[abc] 范围中的任意一个字母
[^abc] 除了abc其他任意字母
~ 家目录
``=$()
hostname 输出rhce
echo “this pc is
$(hostname)”
或者 echo “this pc is `hostname`”
touch rhce{1,2,3} 建立rhce1 rhce2 rhce3 3个文件
vim 命令模式 插入模式 末行模式
I 插入模式 o 跳到下一行插入 O 跳到上一行插入
esc 末行模式 : wq! 保存退出
hjkl 可以代替上下左右键
wb 单词左边/右边
数字+G 立刻跳到第几行 G直接跳到最后一行 gg 立刻跳到第一行
命令行模式
dd 删除整行 u 撤销 yy复制 7y复制7行 p复制到光标下一行 P复制到上一行
末行模式
:set nu 显示行号
:set nonu 取消显示行号
在家目录下 建立一个文件 .vimrc 里面写入 set nu 那么打开任何文件 都会显示行号
q 退出vim q! 强制退出
标准输入输出 0 正确输入 1 正确输入 错误输出
ls > abc 将ls输出信息保存到abc
dffdffd >abc 输出的错误信息仍然显示到当前终端
dfddffd 2> abc 将错误信息显示到abc
>覆盖原来的信息
>> 链接到原来信息的后面
&>重定向所有文件
ping –c 3 执行3次
黑洞 /dev/null 所有进入的东西立即删除
管道符号 |
cat /etc/passwd |
grep root 筛选
mail –s “snow” snow <
/etc/passwd 将/etc/passwd里面的信息发送给snow 标题为 snow 点 . 代表结束
tee命令 -a追加保存
cat /etc/password
| tee all |grep root
先保存password的内容到all 再筛选其总的信息root输出
tr 转换 tr
‘a-z’ ‘A-Z’ < /etc/passwd 将passwd 里所有小写转换为大写
mail.sh
#!/bin/bash
mail –s “hello” tom <<OP 结束标志
hello tom
hello world!
OP 结束标志 表示到此结束
test process
less 按行 more 按屏 支持搜索
head tail -n 9 显示9行
tailf
/var/log/messages 滚动显示日志 =tail -f
cut grep
cut –d 指定分隔符 –f 指定字段 –c 用字符串分隔
cut –d: -f3 /etc/passwd
只要passwd里面的第三个字段 用:分隔
没有d选项时 默认用TAB分隔符 -d’ ‘ 空格作为分隔符
grep关键词筛选 –I 忽略大小写 –v 取反
grep –c root
/etc/passwd 统计包含root的有几行
grep –n root
/etc/passwd 详细列出第几行包含root 及其内容
grep –A2 root
/etc/passwd 上面2行
grep –B2 root
/etc/passwd 下面2行
wc –lw /etc/passwd
统计里面行数 单词数
diff abc abc.bak 对比2个文件的差异
sort 排序默认按字母排序 –n 按数字排序 –k 字段 –t 分隔符
sort –n –k3 –t:
/etc/passwd passwd里按数字排序 第三个字段 按照:分隔
-r 反向排序 –u 删除重复行 显示的时候
对比:
uniq 连续相同的行只显示一行
sort –u 只要是相同的行都只显示一行 不管是否连续
uniq –c abc -c 重复的次数
uniq –d abc 只显示重复的行
进程;
ps 当前终端的进程 –l
aux 显示所有进程
pstree 显示进程树
ps -ef 显示所有进程
top监控进程信息 PR优先级 top –d 10s 刷新一次
pgrep –u root 只显示root产生的进程
pidof 显示某一个进程的进程号
kill –l 显示所有64种信号
1 15 9 18
1 重新加载
15 完全退出
9 强制杀死
18 继续
19 stop
kill -1 1828 向进程号1发送信号1
killall -9 httpd 关于http的进程全部杀死
进程优先级 -20
– 19 数字越小 优先级越大 只有root可以调节,普通用户只能将优先级调大
nice –n 5 command 开启一个进程是 给予优先级
renice 5 pid 已经存在的进程 重新赋予优先级
& 将进程放到后台执行 jobs 显示当前作业
bg %1 作业号1 继续放到后台运行
ctrl+z 进程挂起
fg %1 作业号 1 放到前台运行
kill -9 %1 强制杀死作业1
ctrl+z 信号19
ctrl+c 信号?
echo $? 显示上次命令的执行返回值 0 代表正确 127代表此命令找不到
其他非零表示命令没有正确执行
test 语句
= eq
< lt
>gt
>=ge
<=le
&& ||
test –f –d –e –r
–w –x –n –z
-f 文件 –d 目录 –e 不知道是目录还是文件 –r 是否可读 –w是否可写 –x是否可执行 –n 是否非空值 -z 是否空值
网络配置信息 vim /etc/sysconfig/network-scripts/ifcfg etho
ifconfig ip a
ifconfig eth0 down
ifconfig eth0 up 重启单个网卡
Subscribe to:
Posts (Atom)
