月度归档:2014年06月

在Windows7下安装Linux(CentOS 6.x)

在Linux下,貌似无法识别NTFS,但可以识别FAT32,但是FAT32有个致命问题,就是单个文件无法大于4G,然而下载的CentOS 6.5 DVD1大于4G,所以这个方法不做考虑。

反过来思考,可以分一个EXT3分区,然后把其挂在Windows7下,这个是可行的,所以本文使用这个方法。

我的电脑C盘是一个SSD硬盘,只分一个区,这里把C盘压榨6G出来,用来安装CentOS到机械硬盘的空闲地方。这里使用一个叫分区助手的工具完成这个操作(直接360安装卫士的软件中搜索可下载):

先拆分分区,然后接着格式化(具体过程略)。
格式化分区

然后寻找一个叫ext2fsd的软件,用它可以把Ext3挂在到Windows里(http://www.ext2fsd.com)
EXT分区挂载到Windows

这里把这个EXT3分区映射为Windows下的X盘,接下就是拷贝文件进去:

CentOS-6.5-x86_64-bin-DVD1.iso
CentOS-6.5-x86_64-bin-DVD2.iso
images
isolinux

isolinux 和 images是从CentOS-6.5-x86_64-bin-DVD1.iso文件中提取出来的。

接下来就是要从这个EXT3分区引导安装,这个时候还需要一个叫EasyBCD的工具:
Windows下添加引导
这里配置一个启动项,这个配置项是需要正确指定刚刚配置的EXT3的对应编号,比如hd0表示第一个硬盘,后面的1表示这个硬盘的第二分区。
引导Linux分区启动
重新启动后就可以看到这个启动项,选择进入开始引导,选择镜像位置后就和用光盘安装没有什么区别了,所以后面的过程就省略了。安装完成后这个EXT3分区可以删掉,也可以挂到Linux中,使用它在Linux和Windows中共享文件。

原创文章,装载务必保留出处。
永久链接: http://blog.ifeeline.com/1090.html

CentOS 6.X下添加新硬盘

在虚拟机下操作练习。添加一张新硬盘,然后启动系统。

#fdisk命令参数介绍
#     p、打印分区表。
#     n、新建一个新分区。
#     d、删除一个分区。
#     m、输出菜单
#     q、退出不保存。
#     w、把分区写进分区表,保存并退出。

#查看分区情况,应看到新添加的磁盘为sdb,未分区
fdisk -l 	
#然后开始分区,这里就分一个区
fdisk /dev/sdb
#建立分区,用p表示建立主分区,然后用n建立分区(指定开始与结束柱面)
fdisk /dev/sdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help):
#最后用w保存分区表信息

#再次查看分区信息
fdisk –l
.....
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x64627767

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1305    10482381   83  Linux

#接下来需要格式化
mkfs –t ext4 –c /dev/sdb1

#然后把其进行挂载
mount –t ext4 –o rw /www

这样就完成了新硬盘添加和分区格式化。

为了让其能开机自动加载,还需要编辑/etc/fstab实现自动挂载

UUID=144e7ab9-0a81-4139-9ca7-9e69435d6ec9	/	ext4 	noatime,nodiratime 	1 1
UUID=817c334e-721c-4296-9e8b-e588bac87d87	/boot	ext4    	defaults        		1 2
UUID=d77cd91c-8ec8-44af-a5c7-e9052371b46e 	swap	swap    defaults        		0 0

第一列是设备名称,第二列是挂载点,第三列是挂载的文件系统,第四轮是挂载选项(比如可以是rw),第五列表示分区是否备份(像swap分区是不需要备份的),第六列表示分区是否校验(根分区一般是1,其它一般是2)。这里显示的分区是使用UUID来指定的,实际也可以直接指定分区名称,比如/dev/sab1等。不过,如果知道分区对应的UUID呢?

#列出当前系统中所有已挂载文件系统的UUID
blkid -s UUID              #build id->blkid
#查看UUID
ls -l /dev/disk/by-uuid
lrwxrwxrwx 1 root root 10 Jun 19 23:31 144e7ab9-0a81-4139-9ca7-9e69435d6ec9 -> ../../sda2
lrwxrwxrwx 1 root root 10 Jun 19 23:31 817c334e-721c-4296-9e8b-e588bac87d87 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jun 19 23:31 e70fa1c3-2542-49cd-adaf-7364fb263218 -> ../../sdb1

从这个结果可以看到,实际UUID就是一个实际分区的链接文件。

总结一下操作硬盘:

fdisk -l		显示硬盘和分区信息
fdisk /dev/sd*		管理硬盘,比如添加删除分区等
mkfs –t 类型 分区	格式化分区
df –h			查看已经挂载的文件系统
/etc/fstab		自动挂载设置文件

原创文章,转载务必保留出处。
永久链接: http://blog.ifeeline.com/1088.html

Linux下C程序编译 与 调试(GCC 和 GDB)

Linux下C程序编译

GCC是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,在CentOS下如果没有安装可以:

#安装gcc
yum install gcc
Package gcc-4.4.7-4.el6.x86_64 already installed and latest version
Nothing to do
#查看安装的文件
rpm -ql gcc
/usr/bin/c89
/usr/bin/c99
/usr/bin/cc
/usr/bin/gcc
...
#查看cc文件
ls -lah /usr/bin/cc
lrwxrwxrwx 1 root root 3 May 20 06:24 /usr/bin/cc -> gcc

c89 和 c99针对C语言的两个标准。cc是gcc的链接。所以,使用cc就是使用gcc。

查看gcc的版本信息:

gcc -v
Using built-in specs.
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)

用法:

gcc [options] file...

options为编译选项,GCC总共提供的编译选项超过100个,但只少数几个会被频繁使用,直接使用gcc加源文件它会为目标程序生成默认的文件名a.out,可用-o编译选项来为将产生的可执行文件制定一个文件名来代替a.out。

-o <file>   Place the output into <file>(链接生成可执行文件)
-c          Compile and assemble, but do not link(生成目标文件,一般是点o结尾,不链接)
-S          Compile only; do not assemble or link
-E          Preprocess only; do not compile, assemble or link(只做预处理,预处理输出被送到标准输出)
-O	    对源代码进行基本优化从而使得程序执行更快。-O2产生尽可能小和尽可能快的代码。
-g	    告诉GCC产生能被GNU调试器使用的调试信息以调试程序,在GCC里,可以联用-g和-O(产生优化代码)

一般例子:

vi vfeelit.c
#include <stdio.h>
int main(void)
{
	printf("Welcome!");
	return 0;
}

gcc -c vfeelit.c  		#编译 产生vfeelit.o
gcc -o vfeelit vfeelit.o	#链接 从目标文件生成vfeelit这个可执行文件

##也可以从源文件直接生成可执行文件
gcc -o vfeelit vfeelit.c	#直接编译链接

Linux下C程序调试
安装GDB调试器

yum install gdb
Package gdb-7.2-60.el6_4.1.x86_64 already installed and latest version
Nothing to do

可能遇到问题,参考:http://blog.ifeeline.com/1079.html

GDB是一个用来调试C和C++程序的调试器,可以进行设置断点、观察变量、单步等一系列调试工作,常用命令:

file	装入要调试的可执行文件
kill	终止正在调试的程序
list	列表显示源代码
next	执行一行源代码但不进入函数内部
step	执行一行源代码而且进入函数内部
run	执行当前被调试的程序
quit	终止GDB
watch	监视一个变量值
break 	在代码里设置断点,程序执行到这里时挂起
make	不退出GDB重新产生可执行文件
shell	不离开GDB执行shell

演示程序:(求0+1+2+3+…+99)

vi sum.c
#include <stdio.h>

int main(void)
{
	int sum=0,i;
	for(i=0;i<100;i++){
		sum += i;
	}
	printf("The sum 0+1+2+3+...+99 is %d",sum);
	return 0;
}

#执行如下命令编译sum.c(加-g选项产生debug信息):
gcc -g -o sum sum.c

#在命令行上键入gdb sum开始调试sum,然后运行run命名执行sum
gdb sum
...
Reading symbols from /root/sum...done.
(gdb) run
Starting program: /root/sum 
The sum 0+1+2+3+...+99 is 4950
Program exited normally.
(gdb)

#list命令用于列出源代码,对上述程序两次运行list
(gdb) list
1	#include <stdio.h>
2	
3	int main(void)
4	{
5		int sum=0,i;
6		for(i=0;i<100;i++){
7			sum += i;
8		}
9		printf("The sum 0+1+2+3+...+99 is %d",sum);
10		return 0;
(gdb) list
11	}

#根据列出的源程序,如要将断点设置在第5行,再次运行run命令,程序将停留在第5行
#设置断点的另一种语法是break <function>,它在进入指定函数时停住。
(gdb) break 5
Breakpoint 1 at 0x4004cc: file sum.c, line 5.
(gdb) run
Starting program: /root/sum 

Breakpoint 1, main () at sum.c:5
5		int sum=0,i;

#clear用于清除所有已定义的断点,clear <function>清除设置在函数上的断点
#clear <linenum>则清除设置在指定行上的断点
(gdb) clear
Deleted breakpoint 1


#watch命令用于观察变量或表达式的值,watch <expr>为表达式(变量)expr设置一个观察点
#当表达式值有变化时,程序停止执行。注意watchpoint只能在程序启动后设置
#所以先设置一个断点
(gdb) break 6
Breakpoint 1 at 0x4004cc: file sum.c, line 6.
(gdb) run	#启动程序,将在断点处停止
Starting program: /root/sum 

Breakpoint 1, main () at sum.c:6
6		sum = 0;
(gdb) watch sum	#设置观察点
Hardware watchpoint 2: sum
(gdb) c		#使用c命令观察观察点变化
Continuing.
Hardware watct 2: sum

Old value = 0
New value = 1
main () at sum.c:7
7		for(i=0;i<100;i++){ #即将运行的语句
(gdb)

作为入门,此文到此结束。
永久链接:http://blog.ifeeline.com/1081.html

GDB在调试程序时候提示Missing separate debuginfos, use: debuginfo-install glibc…

使用GDB调试C程序时:

gdb sum
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6_4.1)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /root/the_c/sum...done.
(gdb) run
Starting program: /root/the_c/sum 
The sum of 1+2+3+...is 4950
Program exited with code 033.
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6_5.1.x86_64

提示使用debuginfo-install安装glibc。
在shell下运行:

debuginfo-install glibc-2.12-1.132.el6_5.1.x86_64
-bash: debuginfo-install: command not found

提示debuginfo-install命令不存在,那么必须还要安装个软件包。实际debuginfo-install是yum-utils软件包的一个工具,所以:

yum install yum-utils
...
rpm -ql yum-utils | grep debuginfo-install
/usr/bin/debuginfo-install
/usr/share/man/man1/debuginfo-install.1.gz

然后再次运行:

debuginfo-install glibc-2.12-1.132.el6_5.1.x86_64

Dependencies Resolved

===================================================================================
 Package                             Arch     Version              Repository
                                                                              Size
===================================================================================
Installing:
 glibc-debuginfo                     x86_64   2.12-1.132.el6_5.1   debug     8.7 M
 nss-softokn-debuginfo               x86_64   3.14.3-9.el6         debug     1.7 M
 yum-plugin-auto-update-debug-info   noarch   1.1.30-17.el6_5      updates    22 k
Installing for dependencies:
 glibc-debuginfo-common              x86_64   2.12-1.132.el6_5.1   debug     8.3 M

至此,问题解决。

原创文章,转载务必保留出处。
永久链接:http://blog.ifeeline.com/1079.html