Linux下C编程笔记之环境配置

来源:互联网 发布:mac休眠耗电 编辑:程序博客网 时间:2024/04/30 03:30

编译:
1、把源代码转换成机器名的过程
2、之前还会进行前期处理
3、过程中会进行语法检查
4、编译器:完成编译动作的程序

连接:
1、将可执行文件与包含文件/用到的函数库建立关联的过程

编译型语言:需要经过先编译和连接程序产生可执行文件的语言,如:java/c/c++
开发人员编译连接
解释型语言:不需要经过编译和连接的过程,直接在特定的程序或环境即可执行的语言,如JavaScript/python等
自动编译连接

C语言是美国的Dennis Ritchie在1972年设计发明的。
C语言同时具有汇编语言和高级语言的优势。
语言简洁、紧凑,使用方便,灵活。
运算符及其丰富。
生成的目标代码质量高,程序执行效率高。
可移植性好(较之汇编语言)
可以直接操纵硬件
C语言是"中级语言"
C语言是结构化语言
C语言功能齐全
C语言适用范围广

Linux开发环境的构成
编辑器:vi
编译器:gcc
调试器:gdb
函数库:glibc
系统头文件:glibc_header

IDE
Kylix:号称Linux下的dephi
Kdevelop
RHTDE:类似于Turbo C++

编译器:gcc
gcc(GNU C Compiler)
.c,c语言源文件
.h程序所包含的头文件
.i已经处理过的c源代码
.o编译后的目标文件
.s汇编语言源代码文件

gcc -o hello hello.c

函数库:glibc
Glibc有两种安装方式:
A 安装成测试用的函数库,在编译程序时用不同的选项来使用新的函数库
B 安装成主要的C函数库,所有新编译程序均用的函数库

系统头文件:glibc_header
缺少了系统头文件的话,很多用到系统功能的C程序将无法编译。

查看glibc的版本
ls /lib/libc-*
查看gcc版本号
gcc --version

对于一个C程序,安装完成后可以分成三个组成:
可执行文件:最终运行的命令
包含文件:该C程序include的一些定义文件
库文件:该C程序自定义的库
比如,用RPM安装的MySql数据库:
可执行文件在/usr/bin下
包含文件在/usr/include/mysql下
库文件在/usr/lib/mysql下

vi编辑器
i insert 进入插入模式
a append 添加


:wq 存盘,退出
:q 退出


Linux基础
芬兰大学生Linus Torvalds从1990到1991年利用Tancnbaum教授自行
设计的Unix操作系统Minix作为开发平台为自己的intel 386PC设计的
操作系统。

操作系统(OS)作为用户和计算机之间接口的软件程序。
操作系统的功能:
命令解释
进程管理
内存管理
输入/输出(I/O)操作和外围设备管理
文件管理

Linux特点:
开放性
多用户
多任务
出色的稳定性和速度性能
丰富的网络性能
可靠的系统安全
可移植性:适用于大多数计算机平台
Linux关机方法
shutdown -h now关机
shutdown -r now重启
reboot 快速重启(跳过sync过程)
init 0关机 init 6 重启
halt 系统停机
Linux系统结构
外层应用程序
Shell
Kernel
硬件
Linux目录结构
存放命令的目录/bin /sbin /usr/bin /usr/sbin /usr/local/bin
/boot内核及其他系统启动所需文件
/opt安装大的应用程序
/tmp临时文件
/lost+found系统修复过程中恢复的文件
/root超级用户的主目录
/dev设备目录
b----block块设备
c----character字符设备
Linux的硬件对应文件
/dev/cdrom光驱设备
/dev/fd0软驱
/etc配置文件所在目录
启动引导程序/etc/lilo.conf /etc/grub.conf
多系统引导时,可设置默认启动的系统等等
控制启动模式/etc/inittab(图形/文本登陆)
文件系统配置/etc/fstab
/etc/profile增加环境变量等(修改PATH等)
/etc/ftp* ftp的配置文件
/etc/httpd web服务器的配置文件
/etc/ssh* ssh的配置文件

/etc/inittab
停止系统
init 0 halt poweroff shutdown
重启系统
init 6 reboot
文字界面启动
init 3
图形界面登陆
init 5
单用户模式
init 1 init single

/home
useradd username创建新用户
passwd username添加密码
useradd -g test -d /home/test1 -s /etc/bash -m test1
注解:-g 所属组 -d 家目录 -s 所用的SHELL
删除用户命令
userdel -r test1
创建密码命令
passwd
/etc/passwd:系统能识别的用户清单
纯文本显示加密了的口令,普通用户可读
/etc/shadow:超级用户才能读,用于保护加密口令的安全
隐藏口令

/lib库文件目录
/lib系统所用的库,如C程序库
/lib/modules/2.6.31-14-generic/drivers,驱动模块
/usr/lib/应用程序使用的库,如MySql的API

/mnt
光驱的装载
mount -t iso9660 /dev/cdrom /mnt/cdrom
mount -t 文件类型 设备文件 挂装目录
卸载 umount /mnt/cdrom
软驱的使用
mount -t fstype /dev/fd0 /mnt/floppy

/usr
/usr/doc /usr/share/doc帮助文档
man 命令 查看命令的手册页
info 命令 查看命令的帮助
命令 -help

/sur/src Linux源代码
/usr文件系统部分内容
X11 用于X Windows
bin 几乎所有的命令程序
sbin 系统管理的命令
include C语言头文件
lib 库文件和数据文件
local 本地安装的软件
share 共享文件和数据

/var文件系统的部分内容
www apache的文档目录
lib 系统运行时随时改变的文件
local /usr/local程序的可变数据
log 日志文件
spool 邮件,新闻等队列的脱机目录
tmp 临时文件

了解所用硬盘的信息
mount 所挂装分区
fdisk -l [/dev/had] 硬盘分区状况
df -h 硬盘分区的使用情况
du -sh 目录占用空间
uname -a 查看Linux版本号

Linux常用文件操作目录
mkdir rmdir pwd cd
rm -r -f 递归删除目录,并且不提示
ls 参数
-R递归显示所有目录和文件
-d不递归
more/less/cat 显示文件内容
mv
cp

Linux文件类型
普通文件- 文本文件和二进制文件
目录文件d 文件夹
链接文件 ln创建的文件
特殊文件 设备文件(b、c)和管道文件(p)
文件类型对应颜色配置文件 /etc/DIR-COLORS
硬连接相当于拷贝,软连接相当于快捷方式

检查文件系统
当系统非正常关机,可能无法进入系统,这时可以执行fsck修复磁盘
fsck [选项] 设备名
-f fstype 制定要检查的文件系统类型
-N 模拟显示,并不真正检查
-r 恢复时要求用户确认
-p 自动修正安全地更正并且不会导致数据丢失问题
fsck -p -t ext2 /dev/hda2
注:应该先卸载文件系统,再检查

文件的查找
find 路径 [选项]
find /etc -name passwd
-size按文件大小查找
-type按文件类型查找
locate
locate -u &

在文件中查找符合模式的字符串
grep [选项] 查找模式 文件名 [文件名...]
grep [参数] 'str' filelist
-n 显示匹配行号
-I 忽略大小写
-r 递归查找

索引节点inode:Linux为每个文件分配一个称为索引节点的编号,可以将inode简单理解成一个指针,
它永远指向本文件在物理磁盘上的具体存储位置。系统是通过索引节点(而不是文件名)来定位每一个文件的。

硬连接:1个inode编号肯定和一个文件的数据存储区一一对应。那么一个文件系统中两个
或更多个不同的文件名 能否对应同一个文件呢?答案是肯定的。我们知道inode编号是记
录在文件名对应的目录项中的,我们可以使两个或多个文件的目录项具有相同的inode 值,
实际上就是使它们对应着同一个数据存储区。有几个目录项具有相同的inode号,我们就说
这个文件有几个硬连接(hardlink),对于普通文 件,ls -l命令的连接计数count域的数值就是
本文件拥有的硬连接数。硬连接可以通过ln命令建立。建立硬连接实际上只是增加了一个
目录项,但并未复制文件数 据区,原文件的数据区由两个文件共享。这样一方面能够节约
大量磁盘空间,同时可以保证两个文件能同步更新。


# ln /home/zyd/mytext hardlink_mytext

ls -il'可以显示文件的inode(在下面最左边):

262457 -rw-rw-r- 2 zyd zyd 17 Nov 3 14:50 hardlink_mytext

262457 -rw-rw-r- 2 zyd zyd 17 Nov 3 14:50 mytext


连接计数count:连接连接计数域表示有几个文件共享同一数据存储区,即几个硬连接
(hardlink_mytext和mytext互为硬连接)。如上面的例子中hardlink_mytext和mytext文件
的count值都是2。 当删除硬连接文件是系统先计算count-1的值,如果大于1则仅删除目录
项并修改硬连接数;如果为1则删除目录项,另一文件变为普通文件,修改硬连接 数;
如果为0则直接删除文件。我们可以通过建立硬连接来保护重要的文件,避免被误删除。

符号连接:文件的路径指向,非常像windows下的快捷方式。

符号连接和硬连接的区别:

符号连接是文件的路径指向,它甚至不需要原文件的存在(这称之为断链);硬连接指向
同一数据区,此数据区必须存在。另外不允许为目录建立硬连接,硬连接也不能跨文件系统。

用ls -i命令来查看文件系统对象的索引节点号
$ ls -i /usr
用ls -dl命令看到索引节点被引用的次数
$ ls -dl /usr/local
硬链接和符号链接
$ ln firstlink secondlink
$ ln -s firstlink secondlink

Linux用户类型
系统管理员root
系统管理员SA主要负责Linux操作系统的平滑操作
文件拥有者u
创建文件的用户
组拥有者g
用户组可给一个名,就像给用户一个名一样
其他用户o
不属于特定组的这些用户
所有用户a

文件目录的权限
rwx rwx rwx
owner group others

rwx r-x ---
111 101 000
7 5 0
chmod 750 文件/目录名

改变文件访问权限
符号标记法
chmod (ugoa)(+-=)(rwx) filename/filelist
e.g. chmod g+w o-x /usr/local/*
数字标记法

改变文件/目录属主、属组
chown
改变文件/目录属组
chgrp

文件比较
diff 找出两个文本文件的差异
diff [参数] <file><file>
-w 忽略所有空格差别
-I 忽略大小写

cmp 任意比较两个文件
cmp [para] <file><file>

标准文件
标准输入文件
键盘成为标准文件
Linux中,所有的打开文件,包括标准文件,都被赋以一个称为文件描述符的数。
文件描述符0被赋予标准输入文件
标准错误文件
监视器又是标准错误文件
文件描述符2赋给标准错误文件
标准输出文件
监视器称为标准输出文件
文件描述符1被赋予标准输出文件

重定向
重定向改变关于标准输入、输出、错误的分配
输入重定向:cat < test1
错误重定向:cat datafile 2> error-mesg
输出重定向:cat test1 > test2

网络主要命令
ifconfig
ping
route -n
netstat

Linux系统中应用软件分发格式
tar
rpm
deb

rpm包
rpm ivh rm包 安装rpm包
rpm -Uvh rpm包 升级
rpm -e rpm包 删除
rpm -qi 包名称 列出信息
rpm -qf 'which 命令' 显示命令所在包
rpm -ql 包名称 包中的文件列表
http://www.rpmfind.net

备份格式介绍
tar cvf home.tar /home
tar czvf home.tar.gz /home
bzip2 filename -> filename.bz2
bunzip filename.bz2
gzip和gunzip
zip和unzip
rar