黑马服务器开发之linux基础编程视频——笔记
目录
视频链接:13_软硬链接_哔哩哔哩_bilibili
注:命令操作中的文件名,若是当前文件夹下的文件,可不加路径,若是其他文件夹下的,要添加路径。
1. 命令解析器:shell
2. Linux 快捷键
3. Linux系统目录结构:
4. 用户目录:
5. 文件和目录操作
6.用户权限,用户和用户组
7.压缩包的管理
8.软件的安装与卸载
9.vim的使用
10.gcc的使用
11.库的介绍
12.makefile
13.gdb的使用
视频链接:13_软硬链接_哔哩哔哩_bilibili
注:命令操作中的文件名,若是当前文件夹下的文件,可不加路径,若是其他文件夹下的,要添加路径。
1. 命令解析器:shell
shell -- unix操作系统
bash -- Linux操作系统
本质: 根据命令的名字, 调用对应的可执行程序,shell就是将命令翻译为内核可执行的指令。
2. Linux 快捷键
1>. 命令和路径补齐: tab
2>. 主键盘快捷键:
1). 历史命令:
历史命令: history
向上遍历: 方向上
向下遍历: 方向下
2). 光标移动:
向左: ctrl+←
向右: ctrl+→
移动到头部: ctrl+a
移动到尾部: ctrl+e
3). 删除字符:
删除光标前边的字符: ctrl+h / backsapce
删除光标后边的字符: ctrl+d / delete
删除光标前的所有内容: ctrl+u
3. Linux系统目录结构:
1>. / 根目录:
2>. /bin: 可执行二进制文件,shell命令就在这个文件夹下。
3>. /boot: Ubuntu内核和启动文件/boot Ubuntu内核和启动文件
4>. /dev: 外部设备的驱动文件。
5>. /etc: 存放一些系统配置文件,比如用户账号和密码文件,各种服务的起始地址
6>. /home: 存放所有用户的主目录,当前系统下的所有用户。
7>. /lib: 系统最基本的动态链接共享库,几乎所有的应用程序都要用到
8>. /media: 系统自动识别的一些设备,如U盘、光驱...
9>. /mnt: 用户手动挂载外部设备时,可以选择挂载到mnt下
10> ./opt : 可选的文件和程序存放目录,给第三方软件放置的目录。
11>. /root: 管理员文件
12>. /srv : 服务相关目录。比如网络服务。
13> /sys 记录内核信息,虚拟文件系统。
14>./tmp: 临时目录
15>. /var: 存放一些变化的文件,比如日志文件
16 > /sbin : 和/bin类似,也是存放一些二进制可执行文件。sbin下面的一般是系统开机过程中所需要的命令。是super bin,是管理员使用的程序
17>. /usr: 存放于系统用户有关的文件,会占用很大的存储空间!类似于windows下的program files目录
18>. /proc: 虚拟文件系统,数据放置到内存中,存放系统运行信息
4. 用户目录:
1>. 绝对路径: 从根目录开始写 /home/itcast/aa
2>. 相对路径: bb 相对于当前的工作目录而言
. -> 当前目录
.. -> 当前的上一级目录
- -> 在临近的两个目录直接切换 cd -
3>. itcast@ubuntu:~$
itcast: 当前登录用户
@: at 在
ubuntu: 主机名
~: 用户的家目录(宿主目录)
$: 当前用户为普通用户
#: 超级用户 -- root
5. 文件和目录操作
1> 查看目录下所有文件:
1) tree 文件夹路径(必须先install tree软件)
2)ls -a 文件夹路径(如果要显示当前目录下的文件,可不加路径):显示全部文件,包括隐藏
3) ls -l 文件夹路径(如果......,可不....) : 列表形式列出目录下文件,不包括隐藏
此时若显示目录文件,大小为4096,只是目录所占大小,并不包括目录下其他文件。
4)ls -la : 列表形式列出目录下的全部文件,包括隐藏文件。 相当于 ll(L).
2> 进入某个目录
1) cd : 进入家目录
2)cd - :返回上次的目录
3)cd .
4) cd ..
5) cd 绝对路径或相对路径 ;进入某个文件夹
6)pwd: 查看当前所在路径
3> 创建目录:
1)mkdir dirName
2) mkdir dir/dir1/dir2 -p :多级目录
4> 删除目录:
1)rmdir 空目录: 删除空目录
2)rm -r 目录 (-r表示递归删除, 逐步进入目录进行删除) : 删除非空目录
3)rm -ri 目录 (会出现提示:是否删除...)
5> 创建文件
1)touch 文件名 文件名不存在,新建文件;文件名存在,修改文件最后操作时间
6> 删除文件
rm 文件名 / rm -i 文件名 (提示是否删除)
7> 拷贝文件/目录
1)拷贝文件: cp 源文件 目标文件 (目标文件不存在会自动创建,文件存在,则会 用 源文件中的内容覆盖掉原来的内容)
2)拷贝目录: cp 源目录 目标目录 -r(实现递归) (目标文件不存在会自动创建,存在,择把源目录增加到目标目录下)
3)拷贝文件到目录下:cp 源文件 目标目录(存在)
8> mv 原文件 目标文件
改名:mv file (存在) file1(不存在):file 改名为file1
mv dir(存在) dir1(不存在) :目录改名
移动:mv file(存在) dir(存在) : file 移动到dir 处
mv dir(存在) dir1 (存在) :dir 移动到dir1下
mv file(存在) file1(存在) :file的内容覆盖到fle1,file删除
9> 查看文件内容
1)cat 文件名 ; (在终端不能全部显示,适合查看短小文件)
2)more 文件名: (可通过回车键显示下一行,按空格键翻页, 按q退出;ctrl+p往前翻页,ctrl+n往后翻页)
3)head -n 文件名 (不写n默认显示前10行,写了n显示n行)
4)tail 文件名:显示后10行
10> 新建链接文件
1)软链接: ls -s 源文件路径 新文件名 (新的iinode,新文件中是源文件的路径,即源文件名,所以源文件路径是绝对路径时,可以把新文件移动到任何文件夹下都可访问该文件)
2) 硬链接: ls 原文件名 新文件名 ( 共用inode,硬链接数加1)
6.用户权限,用户和用户组
1> 修改文件或目录权限 --chmod
1) 文字设定法
chmod who[+|-=]mode 文件名
who : u -user, 文件所有者
g - group, 文件所属组
o - other ,其他人
a -all ,所有人(不写who表示默认)
mode: w / r / x/ - ,写/读/执行/无任何权限
例:file文件所有者和其他人减去读写权限: chmod uo-wr file
file文件所有者加上读权限,其他人加写权限,chmod u+r,o-w file
2) 数字设置法
421:分别表示读写执行,
chmod 0文件所有者权限数字 同组用户全新数字 其他用户权限数字 file
例:chmod 0777 file
chmod -440 file : 文件所有者和同组用户减去了读权限,其他不变
2> 修改文件所有者或所属组 -chown
1)修改所有者:chmod 新的所有者 文件名
2)修改所有者,所有组:chmod 新的所有者 新的组 文件名
注:在etc/passwd 文件下查看所有用户
3> 文件查找和检索
1)根据文件属性查找 -find
文件名 : find 查找的目录 -name "查找的文件名"
文件类型: find 查找的目录 -type 文件类型
文件类型(7种): f / d / l / c / b / p / s / f普通文件
文件大小: find 查找的目录 -size 10k / -10k /+10k
+: 大于, 如大于10k ,+10k
-:小于, 如小于10k ,-10k
等于:如等于10k, 10k
单位是k必须小写,单位是M,必须大写。
例:查找家目录大于10k,小于100k, find ~ -size +10k -size -100k
按日期: 创建日期:find -ctime -n/+n , 例查找一天以内的, find -ctime -1
修改日期:find -mtime -n/+n
访问日期:find -atime -n/+n
-n: n天以内
+n: n天以外
深度: find 要查找的目录/ -maxdepth n (层数): 最多搜索n层
find 要查找的目录/ -mindepth n (层数) :最少搜索n层
高级查找: 例:查找指定目录,并列出该目录中的文件详细信息
如: find ./ -type d -exec ls -l {} \ ;
find ./ -type d -ok ls -l {} \ ; //ok比较安全,每次查找都会询问,需要输入y或n
find ./ -type d | xargs ls -l (shell命令)
2)根据文件中内容查找 -grep -r / -w /......
grep -r (搜索路径有目录时要加,-r表示递归) ”查找的内容“ 搜索的路径
例:家目录下,哪个文件中包含helloworld 字符串的文件, grep -r "hello world" ~ -n(加上会显示行号)
3) 总结:
find 搜索的路径 -属性类型 属性值
grep 搜索的内容 搜索的路径
7.压缩包的管理
1> linux下常见压缩包的格式
gz -- gzip
bz2--bzip2
2>常用压缩命令
1) tar - 打包
参数: c - 创建压缩文件
x - 释放压缩文件
v - 打印提示信息
f - 指定压缩包的名字
z - 使用gzip方式压缩文件 -xxx.tar.gz 用tar进行了打包,然后用gzip方式进行了压缩
j - 使用bzip2的方式压缩文件
压缩:tar 参数 压缩包名字 原材料(可多个目录或文件)。 例:以gz方式压缩:tar zcvf test.tar.gz file dir
解压缩:解压到当前文件夹下 tar 参数 压缩包的名字 。例:tar zxvf test.tar.gz
解压到指定文件夹下 tar 参数 压缩包的名字 -C 指定路径。 例: tar zxvf test.tar.gz -C dir
2) rar:使用前需要先安装 sudo apt-get install rar
压缩: rar a 压缩包名 (不用指定后缀) 压缩内容
解压缩: rar x 压缩包名 解压目录
3) zip/unzip
压缩: zip 参数 压缩包名(不用指定后缀) 原材料
参数 有目录: -r
解压缩:unzip 压缩包的名字 -d 解压缩目录
练习:1.写出命令查找宿主目录下小于10M大于100k的文件,并将详细信息列到某个目录下
find ~ -size +100k -size -10M | xargs ls -l > file
2.写出查找目录下含有字符串helloworld的文件,并显示行号
grep -r "helloworld" ~ -n
8.软件的安装与卸载
1.在线安装
安装命令: sudo apt-get install 安装包的名字
卸载命令: sudo apt-get remove 软件的名字
软件列表的跟新:sudo apt-get update
清除缓存:sudo apt-get clean
安装命令执行后,会把安装包先下载到 /var/cache/apt/archives, 然后进行安装。清除缓存便是清除该目录下的安装包
安装包格式: xxx.deb
2. 软件安装(ubuntu下的.deb)
安装:sudo dpkg -i xx.deb
卸载:sudo dpkg -r 软件的名字
3.源码安装
一般这种源码目录下会有readme,根据里边的命令进行安装
9.vim的使用
1> 命令模式
保存退出:ZZ
对齐操作:gg=G
光标的移动:
上下左右: k j h l
光标移动到行首: 0
光标移动到行尾: $
光标移动到文件首部: gg
光标移动到文件尾部: G
光标移动到某行: nG
删除:
删除光标前字符:X
删除光标后字符:x
删除光标后一个单词全部字符:dw
删除光标后全部字符:d$ / D
删除光标前全部字符:d0
删除当前行:dd
删除n行:ndd (从光标开始记起的n行)
撤销操作:u
反撤销:ctrl + r
复制黏贴和替换:
复制:yy
nyy:n表示数,复制n行
黏贴:p 黏贴在光标所在位置的下一行
P 黏贴在光标所在位置的上一行
替换:
替换一个字符:按下r,然后在按下要替换的字符
替换多个字符:按下R,然后在按下要替换的字符,实现替换
可视模式:v ,上下左右相当于windows系统下按鼠标选择
复制:y
删除:d
黏贴:p 黏贴到光标后面;P黏贴到光标前面
查找/搜索:
在命令模式下:
1)从当前位置向下查找;输入/xxx 然后按回车,按n切换到查找到的下一个,N切换到查找到的上一个
2)从当前位置向上查找;输入?xxx 然后按回车,按n切换到查找到的上一个,N切换到查找到的下一个
3)查找一个单词,将光标移动到要查找的单词处,然后按#,然后用n/N切换
函数查找:
k
精确定位:章节号K
man 章节数 要查找的内容
1 可执行程序或 shell 命令
2 系统调用(内核提供的函数)
3 库调用(程序库中的函数)
4 特殊文件(通常位于 /dev)
5 文件格式和规范,如 /etc/passwd
2> 文本编辑模式
a: 从光标后开始插入
A:从光标所在的行最后面开始插入
i: 从光标前开始插入
I:从光标所在行首开始插入
o: 光标所在的下一行开始插入
O:光标所在的上一行开始插入
s: 删除光标所在的字符,开始插入
S:删除光标所在的行,开始插入
3> 末行模式
:+ 内容
1) 保存&退出
:数字n : 跳转到n行
:q! :退出不保存
:wq / x : 退出并保存
:q : 退出
:w : 保存不退出
2)替换
:s/A/B ----> 把所在当前行的第一个A 替换 为 B
:s/A/B/g ----> 把所在当前行的所有的A 替换 为 B
:s/A/B/gc ----> 把所在当前行的所有的A 替换 为 B, 每个替换前都会询问是否替换,
:m,n/A/B/g ----> 把m到n行所有的A 替换 为 B
:m,n/A/B/gc ----> 把m到n行所有的A 替换 为 B, 每个替换前都会询问是否替换,
:%S/A/B/g ----> 把该文本下所有的A 替换 为 B
:%S/A/B/gc ----> 把该文本下所有的A 替换 为 B ,每个替换前都会询问是否替换,
3)分屏
:sp ----> 横向分分1个屏出来,此时屏数为n+1,n为分屏前数目
:vsp ----> 竖向分分1个屏出来,此时屏数为n+1,n为分屏前数目
:vsp xxx ----> 新的竖屏打开xxx文件
:q ----> 退出光标所在屏分屏
ctrl+ww ----> 按两次实现光标在屏幕间切换
:qall ----> 退出所有屏分屏
:wall ----> 保存所有屏修改
:wqall ----> 保存退出所有屏修改
注:在终端用vim打开文件时,输入命令vi -O xxx xxxx xx ----> 以竖屏方式打开这几个文件
在终端用vim打开文件时,输入命令vi -o xxx xxxx xx ----> 以横屏方式打开这几个文件
末行模式下执行shell,:! shell命令
4)
1.多行注释:
1. 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式;
2. 在行首使用上下键选择需要注释的多行;
3. 按下键盘(大写)“I”键,进入插入模式;
4. 然后输入注释符(“//”、“#”等);
5. 最后按下“Esc”键。 注:在按下esc键后,会稍等一会才会出现注释,不要着急~~时间很短的
2.删除多行注释:
1. 首先按esc进入命令行模式下,按下Ctrl + v, 进入列模式;
2. 选定要取消注释的多行;
3. 按下“x”或者“d”. 注意:如果是“//”注释,那需要执行两次该操作,如果是“#”注释,一次即可
10.gcc的使用
1> gcc的工作流程( 整个过程中编译最为耗时)
1) 预处理: -E 文件格式转换 xxx.c -> xxx.i (仍然是c文件)
工具: gcc调用 预处理器 cpp 完成
任务:宏替换;头文件展开;注释去掉;
2) 编译: -S 文件格式转换 xxx.i -> xxx.s
任务:高级语言转换为汇编语言
工具: gcc完成
3) 汇编: -c 文件格式转换 xxx.s -> xxx.o
任务:汇编转换为机器语言
工具:gcc调用 汇编器 as 完成
4) 链接: 不需要参数 xxx.o -> xxx(可执行的)
工具:gcc调用 链接器 ld 完成
2> gcc常用参数
-v/--vision : 查看版本
-I : 指定头文件的路径。使用场景:当.c文件中包含的头文件路径不在同一文件夹下,可通过-I 指定路径
-c : j将汇编文件生成二进制文件,得到1个.o文件
-o : 指定生成的可执行文件文件的名字
-g : gdb调试的时候加
-D : 在编译的时候指定一个宏 ,例gcc example.c -D debug -o example .相当于在.c文件中添加了#define debug
-wall : 添加警告信息
-On : 优化代码,n是优化级别:1 ,2,3
11.库的介绍
1.库是什么?
库是二进制文件xxx.o; 将源代码.c 或 .cpp ---->二进制的源代码; 将源代码加密
2.库制作出,如何给用户使用?
将头文件和制作出的库提供给用户
3.静态库的制作和使用 (windows下xxx.lib , linux下是 xxx .a)
1> 命名规则:libxxx.a
xxx: 用户自己定义,库的名字
2> 制作步骤:
原材料: 源代码.c .cpp
.c生成.o : 生成二进制文件,gcc xx.c -c
将.o打包 : ar rcs libxxx.a 原材料(xx.o)
3>库的使用:
1)将头文件和二进制的库文件提供给用户。
2)用户调用时在程序中包含头文件
3)gcc编译时 gcc xxx.c -I(大i) 头文件路径 -L 静态库路径 -l(小L) 静态库的名字(掐头去尾,只要xxx)-o x
例: gcc test.c -I ./include -L ./lib -l mycal -o app
4.动态库的制作和使用 (windows下xxx.dll , linux下是 xxx .so)
1>命名规则:libxxx.so, xxx: 用户自己定义,库的名字
2>制作步骤:1)将原材料(.c)生成.o gcc 原材料(xx.c) -c -fpic
2) 将.o 打包为.so gcc -shared -o libxxx.so 原材料(xx.o )
3> 库的使用:1)提供头文件a.h,和库文件libtest.so给用户
2)用户调用时在程序中包含头文件
3)gcc编译时 gcc xxx.c -I(大i) 头文件路径 -L 动态库路径 -l(小L) 动态库的名字(掐头去尾,只要xxx)-o x
4>解决动态库执行./x时出现报错:
对于 elf 格式( gcc生成的可执行文件都是elf格式)的可执行程序,库文件加载是由ld-linux.so*(动态加载器)来完成的,它先后搜索elf文件的DT_RPATH段 —— 环境变量LD_LIBRARY_PATH —— /etc/ld.so.cache文件列表 —— /lib/, / usr/lib 目录找到库文件后将其载入内存。
注: ldd 可执行程序:查看可执行程序运行时需要哪些库。
1)报错原因:动态加载器在DT_RPATH、LD_LIBRARY_PATH 、/etc/ld.so.cache、 /lib/, / usr/lib 没有加载到需要的动态库
2)解决方法:可在LD_LIBRARY_PATH 、/etc/ld.so.cache的路径下添加动态库路径
(1)使用环境变量:
1. 临时设置(关掉终端后会失效)
在终端输入:export LD_LIBRARY_PATH=动态库的路径
上述写法会覆盖 LD_LIBRARY_PATH 中的内容,可将其更改为
export LD_LIBRARY_PATH = 动态库的路径 : $ LD_LIBRARY_PATH
:表示拼接,$ 表示取内容。
2 .永久设置
(1)用户级别 (设置完成后只针对于当前用户生效)
~./.bashrc ,在这个文件下添加 export LD_LIBRARY_PATH=动态库的路径: $ LD_LIBRARY_PATH
配置完成后:(1)重启终端 或 (2)输入命令 source ~/.bashrc。目的是为了刷新~./.bashrc
(2)系统级别 (设置完成后针对于全部用户生效)
/etc/profile , 在这个文件下添加 export LD_LIBRARY_PATH=动态库的路径: $ LD_LIBRARY_PATH
配置完成后:(1)重启虚拟机 或 (2)输入命令 source /etc/profile。目的是为了刷新profile
(2)更新文件列表 /etc/ld.so.cache
1. 首先找到一个配置文件 /etc/ld.so.conf, 把动态库的绝对路径添加到文件中
2. 执行一个命令,sudo idconfig -v (参数-v可不加)
3. 知识点拓展:系统调用 dlopen dlclose dlsym
5. 静态库动态库的工作原理和优缺点
1.静态库的优缺点
静态库生成过程 :
优点:静态库被打包到应用程序中(调用程序和被调用函数打包为一个程序),加载速度快
发布程序无需提供静态库,移植方便
缺点:消耗系统资源,浪费内存(多个程序包含相同的库,当它们加载进内存执行时,内存中有多个相同的库,浪费内存)
更新、部署、发布需要重新生成,麻烦。
2. 动态库的优缺点
优点: 可实现进程间资源共享,可共享一个动态库
程序升级简单
程序员可控制何时加载动态库 (使用 dlopen dlclose dlsym )
缺点:加载速度比静态库慢
发布程序需要提供依赖的动态库
12.makefile
1. make
gcc ——编译器,
make ——linux自带的构建器,构建的规则在makefile中。make命令执行后,会根据makefile构建的规则执行gcc
2. 命名规则
makefile、Makefile
3. makefile编写的规则
- 三部分:目标、依赖、命令
目标:依赖
(tab缩进)命令 (命令可以没有目标和依赖)
- makefile中由一条或多条规则组成
4. makefile的编写
1> 第一个版本
app:main.c add.c sub.c mul.cgcc main.c add.c sub.c mul.c -o app
缺点: 效率低,修改一个文件,所有文件都会被重新编译
2>第二个版本
app:main.o add.o sub.o mul.ogcc main.o add.o sub.o mul.o -o appmain.o:main.cgcc main.c -c
add.o:add.cgcc add.c -c
sub.o:sub.cgcc sub.c -c
mul.o:mul.cgcc mul.c -c
makefile的工作原理:
检查依赖是否存在,如果不存在向下搜索下边的规则,如果有规则是用来生成查找的依赖的,执行规则中的命令。 如果存在,则会对比依赖和目标的时间,若目标的时间比依赖的早,则会重新生成目标
缺点:冗余
3> 第三个版本:
1) 自定义变量:obj=a.o b.o c.o
变量的取值:aa = $(obj)
2) makefile自带的变量:大写
CPPFLAGS:(是预处理的时候需要加的参数)。
赋值:CPPFLAGS=
CC
3)自动变量:(只能在规则的命令中使用)
$@: 规则中的目标
$<:规则中的第一个依赖
$^: 规则中所有的依赖
obj=main.o add.o sub.o mul.o
target=app$(target):$(obj)gcc $(obj) -o $(target)#模式匹配
%.o:%.cgcc -c $< -o $@
缺点:可移植性差
4> 第四个版本:
1)使用makefile中的函数(makefile中所有的函数都有返回值)
(1)查找指定目录下指定类型的文件
src=$(wildcard ./*.c): 搜索当前目录下所有.c类型的文件,搜索到的字符串保存在src变量里
(2)匹配替换
obj = $(patsubst %.c,%.o, $(src)) : 将所有的.c文件后缀替换为.o文件,.c文件是src下的文件;返回的字符串保存在obj
src=$(wildcard ./*.c)
obj=$(patsubst %.c %.o $(src))
target=app$(target):$(obj)gcc $^ -o $@%.o:%.cgcc -c $< -o $@
缺点: 不能清理项目
5> 第五个版本
1) 让make生成不是终极目标的目标
(1)编写一个清理项目的规则
#语法规则
目标名:命令例:
clean: rm $(obj) $(target) -f #-f表示强制删除#或-rm $(obj) $(target) #rm前面加-表示rm执行失败,向下执行其他命令#当clean受到目录下相同名称文件的影响,可用伪目标来解决
.PHONY:clean
clean:rm $(obj) $(target) -f #-f表示强制删除
执行:make 目标名。如:make clean
13.gdb的使用
1.生成可调试的可执行程序
gcc 原材料 -o 可执行程序 -g -g会保留函数名和变量名。 例:gcc a.c b.c -o app -g
2.启动gdb
gdb 可执行程序,例gdb app
可执行程序若带参数,传参命令 set args xxx xxx
3.查看源代码
l = list
l | 默认显示main函数下的代码 |
show listsize | 查看 list 默认显示的行数 |
set listsize n | 设置list 默认显示的行数为 n 行 |
l 行号 | 显示该行附进的代码 |
l 函数名 | 显示该函数的代码 |
l 文件名 :行号 | 显示该文件下该行的代码 |
l 文件名 :函数 | 显示该文件下该函数的代码 |
4.设置断点
b | b n (行号) | 在第n行设置断点 | break |
b 函数名 | 在该函数处打断点 | ||
b 文件名:行号 | |||
b 文件名:函数名 | |||
b n if 变量== val 例 b 17 if i==val |
设置条件断点 | ||
i | i b | 查看设置的所有的断点 | info |
d |
d num(断点编号) |
删除第num个断点 | delete |
d num1 num2 ..... | 删除num1,num2....的断点 | ||
d num1 - num6 | 删除num1-num6之间的所有断点 | ||
dis |
dis num |
设置第num个断点无效 | disable |
dis num1 num2 ..... | 设置num1,num2....的断点无效 | ||
dis num1 - num6 | 设置num1-num6之间的所有断点 无效 | ||
ena |
ena num |
设置第num个断点生效 | enable |
ena num1 num2 ..... | 设置num1,num2....的断点生效 | ||
ena num1 - num6 | 设置num1-num6之间的所有断点生效 |
5.调试命令
enter键 | 默认执行上一次输入的命令 | |
r | 运行到第一个断点处停止 | run |
start | 运行到main入口,即 { 处 | |
n | 单步运行,遇到函数跳过 | next |
s | 进入函数内 | step |
finish |
退出函数 当函数中无有效断点或无断点才有效 |
|
c | 全速运行 | continue |
until |
退出循环 当函数中无有效断点或无断点才有效 |
|
q | 退出调试 | |
p 变量名 | 打印当前变量的值 | |
ptype 变量名 | 查看变量的类型 | |
display 变量名 | 每次停止,显示该变量的值 | |
i display | 查看所有自动显示的变量 | |
undisplay num | 取消第num 个变量的自动显示 | |
set var 变量名=val | 调试过程中,如果在循环内打了断点:当i=5时下 |
14.标准c库函数和linux系统函数的区别
通过文件描述符找到 inode 节点,从而在外存找到文件
内核缓冲区默认是8k,其大小可以修改;有了缓冲区后,缓冲区与外存硬盘只交换一次数据。
15.虚拟地址空间
1.用户区
虚拟地址空间,不是物理内存上的空间,而是磁盘上的。程序运行时,通过MMU将虚拟地址映射到物理内存上。
2.内核区
文件描述符:寻找磁盘文件
黑马服务器开发之linux基础编程视频——笔记相关推荐
- Android NDK开发之 NEON基础介绍
原文:http://blog.csdn.net/app_12062011/article/details/50434259 Android NDK开发之 NEON基础介绍 这是官方介绍: http:/ ...
- ios开发之OC基础-类和对象
ios开发之OC基础-类和对象 本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录 ...
- python运维开发之socket网络编程01
python运维开发之socket网络编程01说明:本文来自来自北京老男孩linux运维实战培训中心-运维开发课程免费视频内容,本文内容为系列内容,更多分享信息见:http://oldboy.blog ...
- python开发之Socket网络编程
python开发之Socket网络编程 一.SOCKET基础 二.SOCKET通信流程 1. 流程描述: 2. 相关方法及参数介绍: 三.实例(屌丝追女神的故事) 1. 故事1:(一次通信) 2. 故 ...
- 最全的linux基础学习视频
最全的linux基础学习视频,千锋教育的Linux视频课程免费下载地址: http://pan.baidu.com/s/1c13ddvE,更多精彩的视频在不断的更新中,OpenStack覆盖了网络.虚 ...
- C#进行MapX二次开发之MapX基础知识
C#进行MapX二次开发之MapX基础知识 MapX的主要技术特点 (1). 以表(Table)的形式组织信息 每一个表都是一组MapInfo文件,这些文件组成了地图文件和数据库文件.为使用MapIn ...
- Java游戏服务器开发之A星算法
Java游戏服务器开发之A星算法 学习这个主要是用于寻路算法. 参考资料主要是siki学院的视频,A计划--人工智能--A星算法. 网址http://www.sikiedu.com/cou ...
- android语音播放工具类,Android开发之MediaPlayer多媒体(音频,视频)播放工具类
本文实例讲述了Android开发之MediaPlayer多媒体(音频,视频)播放工具类.分享给大家供大家参考,具体如下: package com.android.imooc.chat; import ...
- 高性能服务器开发之C++定时器
高性能服务器开发之C++定时器 来源: https://www.cnblogs.com/junye/p/5836552.html 写这篇文章前搜了下网上类似的文章,有很多,所以笔者的这篇文章就不对定时 ...
最新文章
- 《卫报》长文解读机器的崛起:人类越来越无法掌控它们
- Windows Service:用C#创建Windows Service
- c++ mysql 配置_C++--mysql相关配置
- 一直在构建工作空间_大华股份殷俊:AI,构建数字世界的基础
- [翻译] .NET Core 3.0 Preview 9 发布
- [渝粤教育] 西南交通大学 信号与系统A 参考 资料
- 2019年技术盘点云数据库篇(二):阿里云携手MongoDB率先上线4.2数据库 云上数据库已是大势所趋...
- 去除非ascii字符以及ascii中的控制符
- Rust : Tonic 基于Rust的gRPC实现
- PDF文档翻译(英文翻译为中文)
- Python入门必学,用Python练习画个美队盾牌
- 火狐浏览器打印时会出现边框线不显示(缩放页面也会出现)
- 广东省污水处理厂数字孪生平台建模_三维可视化平台_吉优赛维数字孪生_三维激光扫描_BIM建模
- 2022大三计算机 | 保研机试 | 学习路线
- 这份新年豪礼面试锦囊,真舍不得给你们!
- javaweb总——注:跟着狂神学的
- Shader 轮廓线(描边)总结
- 校园上网神器:猎豹免费WiFi2.0
- 小技巧 - 微信零钱转出免手续费方法(利用零钱通转出)
- iOS5打电话没声音,别人打进来没反应
热门文章
- chapter8——消抖技术
- agx 刷机+系统迁移至SD/m2+pytorch+Eigen3.3.7配置教程
- mysql repair 所有表_MySQL磁盘满repair多个表问题的解决
- 【自学编程】C语言编程简单的小程序,计算长方体体积!
- 我是怎么从安卓到php再成为前端开发工程师的
- 第五章 CSS美化网页元素
- 大板加腋 弹性板6计算_加腋大板楼盖计算方法浅析
- 北京卫星地图 百度卫星地图高清版(含道路地名标签叠加)
- 《高质量读研:教你如何写论文、做科研》- 张军平
- 写综述前应如何快速、高效地阅读相关文献?