一. 常用编译命令选项
假设源程序文件名为test.c。
1. 无选项编译链接
用法:#gcc test.c
作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。
2. 选项 -o
用法:#gcc test.c -o test
作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。
3. 选项 -E
用法:#gcc -E test.c -o test.i
作用:将test.c预处理输出test.i文件。
4. 选项 -S
用法:#gcc -S test.i
作用:将预处理输出文件test.i汇编成test.s文件。
5. 选项 -c
用法:#gcc -c test.s
作用:将汇编输出文件test.s编译输出test.o文件。
6. 无选项链接
用法:#gcc test.o -o test
作用:将编译输出文件test.o链接成最终可执行文件test。
7. 选项-O
用法:#gcc -O1 test.c -o test
作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。
8. 选项-g
添加调试信息给gdb使用。
二. 多源文件的编译方法
如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为test.c和testfun.c]
1. 多个文件一起编译
用法:#gcc testfun.c test.c -o test
作用:将testfun.c和test.c分别编译后链接成test可执行文件。
2. 分别编译各个源文件,之后对编译后输出的目标文件链接。
用法:
#gcc -c testfun.c //将testfun.c编译成testfun.o
#gcc -c test.c //将test.c编译成test.o
#gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test
以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。
三 makefile 使用
#Makefile 内容
main: main.o Context.o Client.o Color.o State.o
g++ -o main main.o Context.o Client.o Color.o State.o
main.o: main.cpp
g++ -o main.o -c main.cpp
Context.o: Context.cpp
g++ -o Context.o -c Context.cpp
Client.o: Client.cpp
g++ -o Client.o -c Client.cpp
Color.o: Color.cpp
g++ -o Color.o -c Color.cpp
State.o: State.cpp
g++ -o State.o -c State.cpp
功能说明:压缩或解压缩文件。
语 法:lha [-acdfglmnpqtuvx][-a <0/1/2>/u</0/1/2>][-<a/c/u>d][-<e/x>i][-<a/u>o][-<e/x>w=<目的目录>][-<a/u>z][压缩文件][文件...] 或 lha [-acdfglmnpqtuvx]
[-a <0/1/2>/u</0/1/2>][-<a/c/u>d][-<e/x>i][-<a/u>o][-<e/x>w=<目的目录>][-<a/u>z][压缩文件][目录...]
补充说明:lha是从lharc演变而来的压缩程序,文件经它压缩后,会另外产生具有".lzh"扩展名的压缩文件。
参 数:
-a或a 压缩文件,并加入到压缩文件内。
-a<0/1/2>/u</0/1/2> 压缩文件时,采用不同的文件头。
-c或c 压缩文件,重新建构新的压缩文件后,再将其加入。
-d或d 从压缩文件内删除指定的文件。
-<a/c/u>d或<a/c/u>d 压缩文件,然后将其加入,重新建构,更新压缩文件或,删除原始文件,也就是把文件移到压缩文件中。
-e或e 解开压缩文件。
-f或f 强制执行lha命令,在解压时会直接覆盖已有的文件而不加以询问。
-g或g 使用通用的压缩格式,便于解决兼容性的问题。
-<e/x>i或<e/x>i 解开压缩文件时,忽略保存在压缩文件内的文件路径,直接将其解压后存放在现行目录下或是指定的目录中。
-l或l 列出压缩文件的相关信息。
-m或m 此参数的效果和同时指定"-ad"参数相同。
-n或n 不执行指令,仅列出实际执行会进行的动作。
-<a/u>o或<a/u>o 采用lharc兼容格式,将压缩后的文件加入,更新压缩文件。
-p或p 从压缩文件内输出到标准输出设备。
-q或q 不显示指令执行过程。
-t或t 检查备份文件内的每个文件是否正确无误。
-u或u 更换较新的文件到压缩文件内。
-u</0/1/2>或u</0/1/2> 在文件压缩时采用不同的文件头,然后更新到压缩文件内。
-v或v 详细列出压缩文件的相关信息。
-<e/x>w=<目的目录>或<e/x>w=<目的目录> 指定解压缩的目录。
-x或x 解开压缩文件。
-<a/u>z或<a/u>z 不压缩文件,直接把它加入,更新压缩文件。
磁盘挂载与卸载:mount
单一文件系统不应该被重复挂载在不同的挂载点中
单一目录不应该重复挂载多个文件系统
作为挂载点的目录理论上应该都是空目录
#mount -a
#mount [-l]
#mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 设备文件名 挂载点
-a:依照配置文件/etc/fstab 的数据将所有未挂载的磁盘都挂载上来
-l:单纯输入mount会显示目前挂在信息,加上-l 可增列Label名称
-t:可加上文件系统种类来指定欲挂载的类型
-n:在默认情况下,系统会将实际挂载的情况实时写人/etc/mtab中,以利其他系统运行,但在某些情况下欲避免问题,会刻意不写入,此时就要加-n选项。
-L:系统除了可以利用设备文件名之外,还可以利用文件系统的卷标名称来进行挂载
-o:后面可以接一些挂载时额外加上的参数:
ro,rw :挂载文件系统为只读或者读写
async,sync :此文件是否使用同步写入或异步写入的内存机制,默认为异步
auto,noauto:允许此分区被mount -a 自动挂载(auto)
dev,nodev :是否允许此分区上可创建设备文件
suid,nosuid:是否允许此分区含有suid/sgid的文件格式
exec,noexec:是否允许此分区上拥有可执行文件(binary)
user,nouser:是否允许此分区被任何用户执行mount,一般只有root可以执行
defaults :默认值为rw,suid,dev,exec,auto,nouser,async
remount :重新挂载,这在系统出错或重新更新参数时很有用
例如: #mkdir /mnt/hdc6
#mount /dev/hdc6 /mnt/hdc6
linux系统指定下列类型的文件系统才需要进行测试挂载:
/etc/filesystems:系统指定的测试挂载文件系统类型
/proc/filesystems:linux系统已经加载的文件系统类型
linux支持的文件系统的驱动程序都写在如下目录中(驱动程序是二进制文件):
/lib/modules/$(uname -r)/kernel/fs/
挂载CD或DVD
#mkdir /media/cdrom
#mount -t iso9660 /dev/cdrom /media/cdrom
或#mount /dev/cdrom /media/cdrom
#df
/dev/cdrom 是个连接文件,正确的磁盘名得要看你的光驱是什么连接接口的环境。
挂载软盘
#mkdir /dedia/floppy
#mount -t vfat /dev/fd0 /media/floppy
#df
挂载U盘
U盘不能是NTFS的文件系统,linux不支持,要挂载得下载驱动等等。
#fdisk -l
#mkdir /mnt/flash
#mount -t vfat -o iocharset=cp950 /dev/sda1 /mnt/flash
vfat文件格式中可以使用iocharset指定语系,而中文语系是cp950.
重新挂载根目录与挂载不特定目录
根目录不能够被卸载,但是除了问题怎办?一种是重新启动,一种是下面的方法:
#mount -o remount,rw,auto /
当你进入单用户维护模式时,你的根目录常会被挂载为只读,这个时候这个命令很重要,记住!
另外,我们也可以利用mount将某一个目录挂载到另外一个目录去:
#mkdir /mnt/home
#mount --bind /home /mnt/home
卸载:
#umount [-fn] 设备文件名或挂载点
-f:强制卸载,可用在类似网络文件系统无法读取到的情况
-n:不更新 /etc/mtab 的情况下卸载
使用Label name 进行挂载的方法
#dumpe2fs -h /dev/hdc6 ==>查询Label 名字
#mount -L "vbird_logical" /mnt/hdc6