1.头文件和库文件的位置(linux下)(我的是centos7.0)
/usr/include
/usr/local/include/
/usr/lib64(其他的可能是/usr/lib)
/usr/local/lib64(其他的可能是/usr/local/lib)
2.如何 使用外部库
gcc -Wall a.c -o a -lm
-lm表示要链接libm.so或者libm.a库文件
此处m表示数学库函数,lib不需要写出来 ,故只需写成lm,链接数学库
一个简单的例子:
进入自己的用户目录 cd ~
进入Documents目录 cd Documents
创建practise目录并进入,以后的练习文件放入此目录下
mkdir practise
cd practise
创建并编写calc.c文件
vim calc.c
#include
#include
int main()
{
double a=pow(2.0,3.0);
printf("%lf\n",a);
return 0;
}
按ESC切换vim模式,敲:键
输入wq(w表示写入的保存,q表示退出)
然后gcc calc.c -Wall -o calc -lm
最后ls ,可以看到生成了一个calc文件(此文件就是最后的可执行文件)
运行文件./calc
最后查看到8.000000
(编译好的math库的位置:/usr/lib/libm.a(静态库)和/usr/ib/libm.so(共享库)
3.静态库和共享库的区别:
静态库:(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序执行的时候将不再需要静态库
共享库:(.so或.sa):程序在运行的时候才去链接共享库的代码,多个程序共享使用库的代码。
4.如何生成静态库:
.a文件是一个或者多个.a文件的打包
举例:
编写一个hello_fn.c文件
编译生成.o文件:gcc -c hello_fn.c (就会生成一个hello_fn.o文件)
ar rcs libhello.a hello_fn.o
ar是故归档工具,rcs表示(replace and create and save)
5.如何使用.a文件:
gcc -Wall main.c -o main -lhello
gcc -Wall -L. main.c libhello.a -o main
-L.:表示库文件的位置在当前目录下
6.库的搜索路径
C_INCLUDE_PATH LIBRARY_PATH
从左到右搜索-I -L 指定的目录
由环境变量指定的目录
由系统指定的目录 例如(usr/include,usr/lib等)
配置当前用户的环境变量:
vi ~/.bash_profile
7.生成共享库
shared:表示成成共享库格式
fPIC:产生位置无关码(
库名规则:libxxx.so
示例:gcc -shared -fPIC hello.o -o libhello.so
8.使用共享库
I:链接共享库,只要库名即可(去掉lib以及版本号)
L:链接库所在的路径
示例:gcc main.o -o main -L. -lhello //其实和静态库是一样的使用方式,若两者同时存在,则默认链接动态库
若已经得到了main,怎么配置共享库的位置可以运行时链接
1.拷贝.so文件到系统共享库路径下,一般指/usr/lib
2.更改LD_LIBRARY_PATH
3.ldconfig
配置ld.so.conf(位置:/etc/ld.so.conf ,Idconfig更新Id.so.cache
可以使用ldd命令查看所依赖的动态连接库的尽可能的详细信息
常用的linux命令:
-f:强制执行
-h:human readable(如将文件尺寸单位表示为K或者M)
-i:开启交互模式
-r:(或者R):递归执行(此命令是操作目录的相关命令的选项)
tar -zcf bg.png.tar.gz bg.png
history:查看执行过的命令
!n: 调用之前的命令
tab:补全
常用的linux命令:
文件管理:
man:命令参考手册 举例(查看stdio.h头文件)则可以 man stdio 或者man stdio.h
cd,pwd,ls,
chmod:改变文件或者目录的权限
chown:改变目录或文件的所有者
chgrp:改变目录或文件的所属组
以上三者对于编程人员来说用的相对较少(一般维护人员用的较多)
file:查看文件类型 例如:file hello.h 结果显示ASCII text,file calc.c 结果显示:C source,ASCII text
重点:
cp:复制文件或者目录 例如:cp a.h sun //把当前目录下的a.h文件复制到sun文件目录中
mv:移动目录、文件或目录、文件改名
rm:删除目录或文件
rmdir:删除空目录
touch:更改时间戳
mkdir:创建目录
ln:为文件或目录创建链接 此条命令很常用
1.创建软链接:ln –s 源文件 目标文件 -s决定是软链接还是硬链接(两者的区别:软链接生成镜像,不占存储空间,硬链接生成和源文件完全大小的文件,占存储空间,共同点事两者都和源文件同步变化)
more,less 分页查看 ctrl+f 向下一页 ctrl+b 向上一页
head tail 查看文件的头部和尾部
whereis:查看文件所在的位置(通常用于查找可执行文件或配置) (经常使用)
which:确认当前执行的是哪个目录下的可执行文件 列如:which more
whereis 和 which的区别
whereis more :结果显示:more: /usr/bin/more /usr/share/man/man1/more.1.gz /usr/share/man/man1p/more.1p.gz
which more :结果显示:/usr/bin/more (显示的是可执行文件的目录)which查找的顺序(/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin)
which的原理:在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。
作用:查找某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
特别好用的一个命令:查找文件位置:locate ***
linux目录结构(重点)
/ 整个文件系统的根
----/bin/ 最经常使用的命令 列如ls,cd等
----/boot/ 存放着启动linux时使用的一些核心文件
----/dev/ 设备文件目录
----/etc/ 系统管理所需要的配置文件和目录
----/etc/init.d/ 非常重要的一个:系统服务启动配置脚本目录
----/home/ 用户的主目录
----/lib/ 存放系统所需要的共享库和静态库
----/media/ 光驱、软驱,USB存储设备加载所用的目录
----/mnt/ 加载的文件系统目录
----/opt/ 某些可选软件安装后放入此目录
----/proc/ 不是真正的文件系统,操作系统运行时,进程信息和内核信息(比如cpu,硬盘分区,
内存信息等)放在这里
----/root/ root用户的主目录
----/sbin/ 系统管理命令存放处,一般只供root用户使用
-----/tmp/ 存放系统运行过程中的临时文件,一般在系统重启后将被清空
-----/var/ 存放不断变化的文件如日志,安装包缓存目录、web目录,ftp,mailserver相关目录等
ls的几个选项(以前忽略的)
-i 显示文件的inode
-F 标识文件的类型,目录/ 符号链接@ 可执行文件* socket文件=,管道加|...
-h human readable (要与-l联合使用)
隐藏文件: 在UNIX系统中以.开头的文件
文件类型通常包括:
-:普通文件
d:目录
l:符号连接
c:字符设备
b:快设备
s:socket(套接字)
p:具名管道(FIFO)
修改时间:
$touch -d '2009-11-18 12:32:00' a.txt
创建目录:
mkdir
-p 如果父目录不存在,创建
mkdir -p f4/{t1/{v1,v2},t2/{u1,u2}}
则创建的目录结构 :f4 ---t1---v1
---v2
---t2---u1
---u2
常用的linux命令---网络通讯 (注意,以下所有命令要在相对应服务开启的时候才有用)
telnet --基于telnet协议,与其他计算机通信
telnet hostname/ip [port]
默认端口23
明文传输,对于敏感数据不安全
连接主机后,进入命令模式 ctrl+]
此条命令的使用价值:检测服务进程是否运行
举例:我们开发了一个服务器端程序(sunxiaowu.org.cn)(侦听8888端口)
则可以 telnet sunxiaowu.org.cn 8888来检测
ssh --基于OpenSSH协议的远程登录客户端(secure shell)
默认端口 22
常用执行方式: ssh-l login-name hostname/ip[port]
ssh login-name@hostname/ip [port]
ssh数据是加密传输
举例: ssh sunxiaowu@localhost
ssh -l sunxiaowu localhost
scp --基于OpenSSH协议的安全复制远程文件
使用方式:
1.本机-》远程主机 :scp local-files loginname@remote-host/ip:[dir/file]
2.远程主机-》本机:scp login-name@remote-host/ip:files local-dir
-p:保持文件权限
-r:递归式复制
举例:
将当前目录下所有的.c 文件上传到sunxiaowu.org.cn主机的sunxiaowu用户主目录下的test目录下
scp *.c sunxiaowu@sunxiaowu.org.cn:test
将suxiaowu.org.cn主机上sunxiaowu用户主目录下的test目录所有内容复制到本机当前目录下的backups目录内
scp -r sunxiaowu@sunxiaowuorg.cn:test ./test
ftp、sftp --文件传输工具
ifconfig 配置网络接口
netstat 查看网络状态
tcpdump 网络传输数据分析工具(抓包工具)
ping 查看主机是否可以到达
whois 域名查询工具
talk 与其他在线用户交流
write 想其他在线用户发送信息
wall 向所有在线用户发送信息(write all)