学习A8前的预备知识
1.关于APT
1,software center --> software sources --> Download from,选择合适的服务站点
2,执行sudo apt-get update,下载远端服务器的软件列表
3,在联网的情况下,就可以下载安装软件,比如:
sudo apt-get install vim
4,卸载软件:
sudo apt-get remove ssh ==> 保留配置文件
sudo apt-get remove ssh --purge ==> 不保留配置文件,纯粹地删除!
5,手工安装:
sudo dpkg -i xxx.deb
注:
所有的软件安装包统一放置在:/var/cache/apt/archives,它们会被定期清除。
2.1
硬链接文件 == 文件的引用 == 文件别名
古老的一种文件,已经被遗弃。
缺陷:不能给目录取别名,不能跨分区。
2.2
软连接文件 == windows快捷方式
2.3 关于根文件系统:
/
├── bin/ ==> 二进制文件(命令、可执行程序)
├── boot/ ==> 内核镜像文件所在地
├── cdrom
├── dev/ ==> 所有设备(除了网络接口之外)的节点文件
├── etc/ ==> 等等…… 几乎所有的软件/服务的配置文件
├── home/ ==> 所有普通用户的家目录的所在地
├── lib/ ==> 系统库文件所在路径
├── lost+found
├── media
├── mnt/ ==> 空目录,专门用来给用户挂载分区的
├── opt
├── proc/ ==> 将系统的关键信息以proc文件系统方式呈现给用户
├── root/ ==> 管理员的家目录
├── run
├── sbin/ ==> 需要管理员权限运行的命令
├── selinux
├── srv
├── sys
├── tmp
├── usr/ ==> 第三方软件 / 库的安装路径
├── var/ ==> 容易变化的文件的所在地
/usr/
├── bin/
├── games
├── include
├── lib/
├── local/
├── sbin/
├── sdl
├── share
└── src
2.4 关于SHELL的通配符
1,星号 * : 代表任意长度的任意字符
2,问号 ? : 代表一个任意字符
3,方括号[]: 代表一个范围指定的字符
4,方括号[^]:代表一个范围指定之外的字符
2.5.
UNIX/LINUX的审美观:以小为美
关于管道
1,将第一个命令的输出作为第二个命令的输入:ls /dev | wc -w
2,将第一个命令的输出作为第二个命令的参数:find . -name "*.txt" | xargs grep "apple" -Hrnw
3. 环境变量的设置
将所要添加的命令加进
家目录~下面 ls -a 的 .bashrc 里 ( vi .bashrc)
在最后面加下面的语句
export PATH = $PATH: /home/gec
($PATH为包括已存在目录, /home/gec为所要添加文件所在目录)
之后保存退出,关掉终端重新打开终端
4.关于gdb
1,编译的时候,要加上-g : gcc debugme.c -o debugme -g
2,使用gdb来启动待调试代码:
gdb ./debugme
3,列出待调试代码:
l
list
l 10
l 1,30
4,设置断点:
b 10 (在程序的第10行,设置一个断点)
b 20 if i>= 5 (在程序的第20行,设置一个断点,并且只有当i>=5时才停下来)
info b (查看所设置的断点的信息)
delete N (删除第N号断点)
disable N (禁用第N号断点)
enable N (启用第N号断点)
5,启动待调试代码:
run
r
r abcd 1234
6,查看相关的变量、栈的信息:
print i
p i
display i
backtrace full (查看当前进程的栈的信息)
bt full
whatis i (查看变量i的类型)
7,单步调试
next (单步运行:将函数调用看作一步)
n
n 10
step (单步运行:会进入函数调用)
s
s 10
8,继续运行代码:
continue (让进程持续运行,直到遇到断点,或者进程退出为止)
c
9,退出gdb:
quit
最常见的错误:非法内存访问(段错误 / segmentation fault)
该种错误的调试步骤:
============================
1,编译: gcc debugme.c -o debugme -g
2,取消系统对core文件大小的限制:
ulimit -c unlimited
3,让有段错误的代码去死,产生一个core文件
./debugme
4,让gdb帮我们看看在哪里出错:
gdb ./debugme core
注:
gdb不一定100%地能找到错误的地方,如果找不到,还是要自己一步一步地找。我们要根源上写代码的时候就要避免出现此类错误,预防大于治疗。
5.关于vi编辑器
1,进入命令模式 : 按Esc
1.1 复制 / 剪切
yy / dd 一行
Nyy / Ndd N行
yw / dw 一个单词
Nyw / Ndw N个单词
y$ / d$ 到行尾
y^ / d^ 到行首
1.2 粘贴
p
1.3 保存 / 另存为
:w / :w file
1.4 退出 / 不保存退出
:q / :q!
1.5 撤销 : u
1.6 恢复 : ctrl + r
1.7 查找
/string ==> 查找string 按n跳到下一个
1.8 替换
:%s/oldstring/newstring ==> 将整个文件中所有的oldstring全部替换成newstring
:10,20s/oldstring/newstring ==> 将从第10行到第20行中所有的oldstring全部替换成newstring
1.9 交换
先剪切一个字符,命令是x
再粘贴到后面去,命令是p
加起来就是xp连着用
1.10 定位
gg ==> 直接跳到开头
G ==> 直接跳到结尾
:100 ==> 跳到第100行
1.11
:x 退出
:x! 退出不保存
:w 保存文件
:w! 不询问方式写入文件
:r file 读文件file
:%s/oldchars/newchars/g 将所有字符串oldchars换成newchars
2,进入编辑模式:按i o a I O A
6.关于编译器gcc
1,一步到位的编译:gcc example.c -o example
2,分步进行:
2.1 预处理
gcc example.c -o example.i -E ==> 展开所有的预处理指令,比如#include #define等等
注:分析复杂宏的时候可能会用到。
2.2 编译
gcc example.i -o example.s -S ==> 将C语言翻译为相应的汇编语言
注:分析你的程序的每一条机器指令。(objdump)
2.3 汇编
gcc example.s -o example.o -c ==> 将汇编翻译为机器指令流
注:当你需要将你的代码制作成库。
2.4 链接
gcc example.o -o example (-lc) ==> 链接必要的库(默认的库是标准C库)
注:生成可执行文件
浙公网安备 33010602011771号