目录
一.Linux系统概述
1.嵌入式:以计算机应用为核心,软硬件可裁剪的专用计算机操作系统,对功耗,体积,成本,可靠性等有要求的系统。
2.linux是一个分时,多任务,多用户的操作系统。
3.代码临界区:指处理时不可分割的代码,运行这些代码不允许被打断(若中断不调用任何包含临界区的代码,也不访问任何临界区使用的共享资源)(封闭区域,不被打扰)。
4.linux文件没有扩展名。不同文件可通过属性查看。
-开头:普通文件
d:目录文件
b:块设备文件
c:字符设备文件
p:管道文件
l:链接文件
s:套接口文件
5.内核:内核提供的基本服务是任务切换。内核与系统是不通的。
非占先式内核:每个任务自我放弃CPU的所有权、也称合作型多任务,合作共享一个CPU。
占先式内核:一个任务被高优先级的任务取代时,该任务将失去所有权。
6.linux文件系统只有一个根目录,没有父目录。
以斜杠开始的路径称为绝对路径,从根目录逐级查找。
不以斜杠开始的路径称为相对路径,从当前目录逐级查找。
二.Linux常用命令
2.1目录相关命令
cd //切换目录
pwd //显示当前路径
mkdir a //创建a目录
mkdir -p ./a/b/c //在a目录下创建b目录,b目录下创建c目录
mkdir -pm 777 ./a/b/c //创建目录并设置权限
rmdir //删除目录
2.2.文件命令
ls
参数说明
-a:显示所有的隐藏目录和文件
-l:长格式显示当前目录或文件的属性
-al:长格式显示当前所有隐藏目录的属性
-s:在每个文件的后面打印出文件的大小
-t:按时间进行文件的排序
cp
参数说明
-f:强制覆盖
-i:询问是否覆盖
-r:拷贝目录(带子文件)
-u:比较文件新旧,新覆盖,旧不覆盖。
rm
参数说明
-f:强制删除
-i:询问是否删除
-r:删除子目录
rm -rf:强制删除
mv
参数说明
-f:如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。
-i:如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作
2.3查看文件内容
cat:在终端显示文件内容。(头到尾)
参数说明
-n:带行号显示
-E:在每行结束处显示 $
-T:将 TAB 字符显示为 ^I
-v:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外
-A:等价于 -vET
tac:在终端显示文件内容。(尾到头)
参数说明:与cat相同
more:按页查看
例:ls-al /etc | more
|:管道符(命令A|命令B,即命令1的正确输出作为命令B的操作对象。)
less:与more相似
head:显示前些行的命令
参数说明
head 文件名(默认显示前十行)
head -line 文件名 : 显示前line(行号)行
tail:显示后些行的命令
参数说明
tail 文件名(默认显示后十行)
tail -line 文件名 : 显示后line(行号)行
nl:nl命令用于计算文件中行号。nl可以将输出的内容自动加上行号
参数说明
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
-b t :如果有空行,空的那一行不要列出行号(默认值)
od:读取所给予的文件的内容,并将其内容以八进制字码呈现出来。
2.4其他命令
touch:创建文件
passwd:用来更改使用者的密码
命令参数:
-d 删除密码
-l 停止账号使用
-S 显示密码信息
su:切换用户
tar:打包压缩
参数说明:
-c :创建一个归档文件
-x:释放归档文件
-z:压缩成gzip格式
-j:压缩成bzip2格式
-J:压缩成xz格式
-v:显示过程
-f:后面跟文件的名字
打包并压缩成gzip格式 :tar -czf day1.tar.gz day1
打包并压缩成bzip2格式 :tar -cjf day1.tar.bz2 day1
打包并压缩成xz格式: tar -cJf day1.tar.xz day1
万能拆包命令 :tar -xvf 压缩包
-C指定路径
tar -xvf day1.tar.gz -C
clear:清屏
ifconfig:查看设置虚拟机ip地址
ifconfig eth0 ip :配置ip地址
man :查看Linux中的指令帮助、配置文件帮助和编程帮助等信息
find :根据输入的指定路径或表达式路径中查找目录或文件
语法格式:find +参数+路径+查找和搜索范围
参数说明:
-name:根据名称查找
-size:根据大小查找
-user:根据属性查找
-type:根据类型查找
-iname:忽略大小写
chgrp:更改文件或目录的一组
chown:设置文件所有者和文件关联组的命令
chown -R:处理指定目录以及其子目录下的所有文件
chmod:更改目录权限
语法:chmod + 权限 + 目录/文件
chmod 777 目录/文件
u:usr
g:group
o:other
a:all
r:
w:
x:
chmod u-w 207
chomd -R:对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
echo:回显
echo $PATH:查看PATH
PATH = “$PATH”:/root:查找PATH的值,在整个路径下找并且可到root目录下找。
三.文本编辑器vim
命令行模式:ESC 复制:yy 复制n行:nyy 粘贴:p 剪切:dd 剪切N行:ndd u:撤销 gg:跳转到首行 G:跳转到尾行 ngg(nG):跳转到n行 v:光标经过位置选中(按行) ctrl+v:光标经过位置选中 保存并退出的快捷键:shift+zz /(ZZ) 插入模式:(在命令行模式)下输入:i 底行模式:(在命令行模式下):输入:shift +: q:退出 w:保存 w [文件名]:另存为 n1,n2 w + 文件名:保存n1~n2行到指定文件 wq:退出并保存 q!:退出不保存 set nu:显示行号 set nonu:取消显示行号 sp :上下分屏 vsp:左右分屏 /name:查找 n1,n2 s/word1/word2/g:n1行到n2行word1都换成word2 !+命令:强制执行命令,不需要回到终端 多文档编辑:files 显示打开的文件 n 向后切换文件 N 向前切换文件 多窗口:sp +文件名 ctrl +ww 光标窗口切换
四.gcc编译器
1.预处理(-E)
预处理的作用:对宏的替换,头文件的展开,条件编译的替换。
宏仅仅是在C预处理阶段的一种文本替换工具,就是指一段文本替换成另外一段文本,
而不考虑其中任何的语义内容。不做运算,不做语法分析。
gcc -E hello.c -o hello.i
2.编译(-S)
编译的作用:进行语法的检查,如果代码语法有问题,会报错,结束编译,生成一个汇编文件
gcc -S hello.i -o hello.s
3.汇编(-c)
汇编的作用:将汇编文件转换成二进制文件,还没有链接到库,不可执行
gcc -c hello.s -o hello.o
4.链接
链接的作用:将所有需要的.o文件链接生成可执行的二进制文件
gcc hello.o -o hello
5.调试
gcc -g hello.c -o hello
6.优化(大写O)
-O0 、-O1 、-O2 、-O3
编译器的优化选项的 4 个级别,-O0 表示没有优化, -O1 为默认值,-O3 优化级别最高。
gcc -O hello.c -o hello
7.多文件编译
8.-Wall:生成所有警告信息
9.-w:不生成任何警告信息
10.-I:指定头文件路径
11.-L:指定连接的动态库或者静态库路径
12.-l (L的小写):指定需要链接的库的名字
五.静态库与动态库
1.静态库与动态库概念
程序库:包含了一些通用函数的数据和二进制可执行机器码的文件,其单独不能够运行,但是如果将其与其他的可执行程序结合起来就可以执行了
静态库:是在执行程序之前就已经加入到执行代码中,成为执行程序的一部分来执行的,后缀名:.a
动态库:是在执行程序启动时加载到执行代码中,后缀名:.so
2.静态库与动态库区别
动态库只有在使用它的程序执行时才被链接使用,而不是将需要的部分直接编译入可执行文件中,并且一个动态库可以被多个程序使用故可称为共享库,而静态库将会整合到程序中,因此在程序执行时不用加载静态库。 从而可知,链接到静态库会使你的程序臃肿,并且难以升级,但是可能会比较容易部署。而链接到动态库会使你的程序轻便,并且易于升级,但是会难以部署。
3.静态库的创建
gcc –c 源文件.c
ar rcs libname.a(lib+库名) 目标文件1 目标文件2
rc:静态库不存在,就创建该库文件
s:更新库文件
4.静态库的使用
静态库创建成功后,然后对全局变量和函数进行声明,在编译的时候加上库文件就行!
gcc file.c -o file –L. -lname
jsetc@linux:~/207$ gcc -c add.c sub.c mul.c div.c
jsetc@linux:~/207$ ls
add.c C练习 div.c main main.h mul.o sub.o
add.o day3 div.o main.c mul.c sub.c
jsetc@linux:~/207$ ar rcs -o libzc.a add.o sub.o mul.o div.o
jsetc@linux:~/207$ ls
add.c C练习 div.c libzc.a main.c mul.c sub.c
add.o day3 div.o main main.h mul.o sub.o
jsetc@linux:~/207$ gcc main.c -o main -L. -lzc
jsetc@linux:~/207$ ls
add.c C练习 div.c libzc.a main.c mul.c sub.c
add.o day3 div.o main main.h mul.o sub.o
5.动态库的创建
gcc -shared –fPIC –o 库名.so 源文件.c
6.动态库的使用
gcc 源文件.c ./ 库名.so –o 可执行文件名