目录
一:Linux文件类型(字符表示)
-:普通文件d:目录文件l:链接文件 linkb:块设备文件c:字符设备文件p:管道文件
二:Linux用户类别
root:这是系统特权用户类,他们都有访问root登录帐号的权限owner:这是实际拥有文件的用户group:这是共享文件的组访问权的用户类的用户组名称world:这是不属于上面3类的所有其他用户
三:/etc/passwd文件
家目录:用户默认所在home目录
四: /etc/shadow文件
五:文件权限的查看
六:Linux文件权限位
文件权限位的表示:-rwxrwxrwx第一位表示文件的类型,-表示普通文件,d表示目录文件,l表示符号链接文件;接下来三位表示 owner用户的读,写,执行权限紧接着三位表示 group用户的读,写,执行权限最后三位表示 world用户的读,写,执行权限
七:Linux文件权限管理
规划用户以及用户所属的组设置文件所属的用户以及所属的组(chown,chgrp)给文件赋予相应的权限位(chmod)
八:chmod命令
九:chmod例子
给text文件赋予rwxr-xr-x权限
chmod 755 text
给text及其子目录底下所有文件赋予rwxr-xr-x权限
chmod -R 755 text
为文件abc的组拥有者增加rw权限
chmod g+rw abc
为abc文件的用户拥有者去除x权限
chmod u-x abc
指定文件abc的其他用户权限为rw-
chmod o=rw-
为文件abc及其子目录底下的所有文件的全体用户增加x权限
chmod -R a+x abc
十:组的创建与用户的创建
Centos/ubuntu 是反过来的
创建组groupadd groupname
创建用户并设置默认组useradd –g/G groupname username
useradd username
向组添加删除用户gpasswd -a username groupname
给用户设置密码passwd username
十一:删除组与删除用户
删除组groupdel groupname
删除用户userdel –r username
向组删除用户gpasswd -d username groupname
十二:目录的权限
目录的内容认为是文件,如果目录是没有w权限,则不能该目录下进行增删文件操作
十三:特殊的权限
1.考查/usr/bin/passwd与/etc/shadow的权限,分别为:-r-s--x--x、-r--------
2.我们发现/etc/shadow文件没有写的权限,那么普通用户要修改密码如何做到修改/etc/shadow文件呢?这是通过s这个特殊权限实现的当具有s权限的文件运行时,进程的拥有者不是执行程序的用户,而是文件的拥有者
3.同样如果文件组用户执行权限位为s,表示任何用户执行该文件,都拥有该组的权限,就好像自己是组的成员一样
十四:文本编辑工具vi
什么vi :vi是Linux/Unix底下最常用的文本编辑器
vim:vim是vi的升级版本,它不仅兼容vi的所有命令,而且还加入了一些新的特性
十五:vi的三种工作方式
十六:编辑方式
十七:插入方式
十八:命令方式
十九: gcc编译程序的过程
预处理(Pre-Processing)
编译(Compiling)
汇编(Assembling)
链接(Linking)
二十:gcc编译程序过程示意图
二十一:gcc常用选项
-g 在目标文件中嵌入调试信息,以便gdb之类的调试程序调试
-Wall 使gcc对源文件的代码有问题的地方发出警告
二十二:gcc示例
gcc -E hello.c -o hello.i(预处理cpp)
gcc -S hello.i -o hello.s(编译cc)
gcc -c hello.s -o hello.o(汇编as)
gcc hello.o -o hello(链接ld)
gcc hello.c -o hello(直接编译链接成可执行文件)
gcc -c hello.c或gcc -c hello.c -o hello.o(编译生成目标文件)
二十三:头文件与库文件位置
/usr/include及其子目录底下的include文件夹
/usr/local/include及其子目录底下的include文件夹
/usr/lib /usr/lib/x86_64-linux-gnu
/usr/local/lib
二十四:静态库与共享库
静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中
共享库( .so或.sa ):程序在运行的时候才去链接共享库的代码,多个程序共享使用库的代码
一个可执行文件使用静态库 的文件更大,还是使用共享库文件大
二十五:生成和使用共享库
生成共享库编译选项shared: 表示生成共享库格式fpic:产生位置无关码(position independent code)库名规则:lib+xxx+版本号.so示例:gcc –shared –fpic test.o –o libTest.so
使用共享库编译选项l:链接共享库,只要库名即可(去掉lib以及版本号)L:链接库所在的路径.示例:gcc –o test –L./ -lTest
二十六:运行共享库设置
1、拷贝.so文件到系统共享库路径下一般指/usr/lib
2、ldconfigld.so.conf,将路径写入文件ldconfig,生效更新ld.so.cache
3、更改LD_LIBRARY_PATH
二十七:gdb用法
watch 设置观察点
二十八: 静态库和动态库的小结
1. 静态库生成:
1.1 把要用的接口文件 生成 .o文件
1.2 把所有.o文件打包生成.a静态库
1.3 自己源码与库链接 : -l链接库
2. 计算机的dll文件
dll文件[动态链接库文件]
库[代码封装]
3. linux下的.a和.so文件
.a文件静态库文件
.so文件动态库文件
4.静态库和动态库的优缺点
4.1 静态库:
缺点:所有库都集合在exe(比较大)并且版本单一
对于游戏的更新exe使用不了就需要卸载掉重新安装新的
优点:库文件不易丢失
4.2 动态库:
优点:版本更新 更新相关的.so .dll即可 exe体积小, exe依赖于.so .dll(动态链接库)文件
缺点:库文件缺失,需要自己要补上
5. 静态库和动态库的生成
5.1 生成静态库:
必须先生成.o文件[.o文件打包生成静态库]
gcc -c hello.c
生成静态库[如下示例myhello是静态库库名],生成.a文件(静态库)
ar -crv libmyhello.a hello.o
编译运行生成main可执行程序
gcc main.c -o main -L../mz -lmyhello
在使用中只需要:
main.c(自己写的) hello.h(接口文件) libmyhello.a(源码内容)
就能够生成.exe可执行程序
hello的方法在.a文件中
5.2 生成动态库
必须先生成.o文件
gcc -fpic -c hello.c
跟路径的地址无关
.so文件生成动态库(共享库)
gcc -shared -o libmyhellotest.so hello.o
编译运行
gcc main.c -L../mzback -lmyhellotest