【elfboard linux开发板】2. 复习linux相关操作命令

前提:安装好VMWare虚拟机和在虚拟机上安装好ubuntu系统
ps: 如何生成可执行文件到嵌入式Linux中?

  1. 在Ubuntu系统上编写C程序
  2. 利用交叉编译工具将C程序经过预处理、编译、汇编、链接生成可执行文件
  3. 在嵌入式系统中输入ifconfig 获得ip地址
  4. 通过scp 命令将本地文件发送到ip设备的指定目录下
  5. 进入嵌入式系统,执行可执行文件

ps: 因为linux的ssh,需要能够ping通网络;笔记本没有以太网接口,可以买个RJ45网线接口,在等待过程中,先来熟悉下我们的Linux相关知识【elfboard linux开发板】2. 复习linux相关操作命令_第1张图片

0. 网络配置

在虚拟机中,桥接模式通常用作局域网之间通信,且将所有设备的ip地址设置在同一网口;NAT模式下,可以自动DHCP。并且在windows上的网络设置上,需要将VMware Network Adapter属性中的VMware Bridge Protocol 勾选上。
此外,检测网络是否连接上,可以通过ping命令,例: ping www.baidu.com,有数据传回表明网络顺利连通外网,也可以ping 某个ip地址,表明局域网连通。
【elfboard linux开发板】2. 复习linux相关操作命令_第2张图片
【elfboard linux开发板】2. 复习linux相关操作命令_第3张图片

1. SHELL命令

ps: 如果觉得终端字体太小,可以按CTRL+shift+= ;觉得太大,可以按CTRL+ -。

1.1 目录相关的命令

1.1.1 认识目录

主要介绍几个主要的一级目录(没有全部介绍)

bin: 存放系统命令
dev: 存放设备文件
etc:配置文件
home:家目录,如果有桌面,一般放置在这个目录下
lib:库文件目录
usr:user software resource
mnt:外部设备挂载位置
proc:虚拟文件系统,进程信息及内核信息等相关文件

1.1.2 命令

a. ls 查看当前文件夹下的文件

用的多的参数

-l 显示文件类型执行权限,文件类型有:-(一般文件)d(目录)l(链接)p(管道)s(套接字)b(block文件)c(字符文件)
-a 所有文件

b. ln 链接

分为软链接和硬链接

加参数 -s 生成软链接,相当于快捷方式

c. cd 文件夹 :作用为进入到指定文件夹下

cd ~: 进入home目录下
cd /:进入根目录下
cd -: 上一次目录下
cd .: 进入父目录
cd . . .. .. :进入子目录

d. cp a b :复制

e. mv a b,:移动或重命名命令

f. rm 文件:作用为删除该文件,举个例子:sudo rm -rf /* 删库跑路命令 -r 为迭代,-f 为强制(force)

g. pwd: 查询当前目录

h. mkdir 目录名: 创建目录

1.2 权限相关命令

a. chmod: 更改文件权限,分别可以+rwx,也可以 777,分别给所有者、所在组、其他所有的权限

b. chown:改变文件拥有者

c. chgrp:改变文件所在组

d. umask: 生成掩码,生成的文件权限为 777-umask

e. touch :生成文件,文件均没有执行权限

1.3 编辑查找命令

a. echo 命令: 输出内容到目标文件

echo a > a.txt 将a放进a.txt,a.txt必须有w权限
echo b >>a.txt 追加b在a.txt的最后一行,a.txt必须有w权限
cat a.txt 显示 a.txt 的文本,,a.txt必须有r权限,cat 可以用more/less 等命令替换

b. find 命令:查找文件

参数
-maxdepth 限制查找层数
-type : 后面带下列参数f、d、 l、 p、 s、 c、 b(同1.1.2 a)
-name
查找的内容给其他命令使用

使用管道:需要参数xargs
使用-exec:需要以\ ; ; ;结尾

c. file 命令:查看文件类型

d. grep 查找文件中的字符

1.4 压缩命令

a. tar

-zcvf z压缩成gzip c create v visual f file
-jcvf j压缩成bzip2
解压缩 将c 替换为 x

b. gzip 和gunzip
c. bzip2 和bunzip2

1.5 其他命令

1.5.1 帮助命令

man:manual,可以用作手册,使用方法为 man 【第几卷】 需要查询的命令

1.5.2 下载命令

sudo apt-get install ***
sudo aptitude install ***

1.5.3 线程进程信号相关命令

a. ps

-aux 显示用户,进程号等信息
-ajx 显示进程信息

b. kill: 发送信号

kill -9 pid号: 杀掉进程

2. 编辑器VI的使用

2.1 模式切换

i/a/o : 进入编辑模式
esc:退出到命令模式
在命令模式下输入 :为末行模式
输入 :wq 保存退出
在命令模式下,按[数字]H或J或K或L:向左、向下、向上或向右移动多少

2.2 删除命令

dd: 删除一行
dw:删除一个单词
d$或D:删除到行尾
d0:删除到行首

2.3 复制粘贴命令

[行数]yy 复制
p 粘贴

2.4 跳转查找替换

查找格式为:/查找内容 回车 按n下一个 N上一个
替换格式为::%s /被替换/替换 -g
在{ 上按%:跳转到对应的},反之亦然
按#或n:跳转到上一个单词
N:下一个

2.5 撤回与取消

u : 撤回
ctrl+r:取消

2.6 其他

在末行模式 输入vsp 文件名,可以在旁边打开该文件,按ctrl+W+W,可以切换
在命令模式下,按K跳转到posix命令,方便看函数传参类型和用法

3. 编译工具

gcc编译时的参数:

预处理 -E
编译 -S
汇编 -C
指定输出名 -o
带调试信息 -g
指定include目录-I

静态库:

gcc -c c文件名.c -o 汇编文件名.o :生成汇编文件
用ar工具生成静态库:ar rcs 库名.a 汇编文件

动态库:

汇编时 加上-fPIC 生成与位置无关的代码
gcc -shared 汇编文件 -o lib库名.so
链接器ld -l库名 -L 路径
动态库错误处理:

  1. 将动态库文件放进/lib下
  2. 在~/.bashrc文件增添 export LD_LIBRARY_PATH= “绝对路径”,然后 source ~/.bashrc
  3. vi ld.so.conf 在文件中添加路径,后在shell中 ldconfig -v
  4. 讲库文件放进/lib或/usr/lib下

4. makefile

格式:

目标:依赖 比如说 a.out:a.cpp, 目标文件a.out需要依赖a.cpp文件生成
参数 :

-n 模拟运行

$(wildcard ./*.c) 表示当前文件下所有的c文件
$(patsubst ./%.c,./%.o,$(src)) 表示将第三个参数中对应位置的c文件路径,替换为汇编文件名称
$< 表示依次取出依赖文件
$@ 表示目标文件
$^ 表示取出所有依赖文件
ALL:目标文件
clean 下的-rm前加-在于没有该文件也不会报错
.PHONY 作用在于文件中有下列重名的文件,也能执行

标准示例:

src=$(wildcard ./*.c)
obj=$(patsubst ./%.c,./%.o,$(src))
tar=$(pathsubst ./%.c,./%.out,$(src))

all:$(tar)
para=-Wall -g
thread = -lpthread
$(tar):%.out:%.c
	g++ $< -o $@ $(para) $(thread)
clean:
	-rm -rf $(tar)
.PHONY:clean all

5. gdb 调试工具

gdb 可执行文件:要求在生成时带 -g 参数

l 1 :查看源程序
r/run: 运行调试,可以快速查出段错误的位置
n: 下一个语句
s: 进入函数下一步
continue:继续执行后续命令
finish:结束当前函数调用
b 行号:打断点
p 变量名: 输出变量名值
ptype 变量名:查看变量类型
bt: 列出存活的栈帧号
info b:查询断点信息
delete 序号:去除序号断点
frame 1:切换到栈帧编号为1 的栈帧
display 变量名: 设置跟踪变量,后接变量名
undisplay 跟踪变量号: 取消跟踪,后接跟踪号
quit: 退出调试

你可能感兴趣的:(linux)