1、shell核心命令
pwd 查看当前路径
cd 改变当前路径
cd 回到当前用户主目录
cd - 回到刚才的目录
mkdir 创建新目录
rm dir 删除空目录
rm dir -r 递归删除非空目录
ls 查看文件
-a 所有文件
-l 详细信息
-R 该目录及所有子目录的文件名
tree 以树形的方式显示文件
touch 创建空文件、更新三个时间
mv 移动、重命名文件
-f 强制覆盖已有文件
-v 输出移动信息
cp 拷贝文件
-r 拷贝目录
-a 拷贝所有
rm 删除文件
-f 删除前不提示,直接删除
file 查看文件类型
cat 查看文本内容(concatenate连接)
-n 对所有行编号
-b 对非空白行编号
more 逐屏查看文件内容
less 逐行查看文本内容
head 显示文件开头部分内容(默认显示十行)
-n n 显示前n行
-v 显示文件名
tail 显示文件结尾部分内容(默认显示十行)
-n n 显示后n行
-v 显示文件名
-f 实时更新(用追加重定向测试)
chown 改变文件的拥有者,只有当前文件的拥有者和root才可以
-R 递归修改子目录的文件
user :group 同时修改拥有者和拥有组
chgrp 改变文件的拥有组
-R 递归修改子目录的文件
find [路径] [参数] 最常用的文件查找工具
-name filename 查找文件名为filename的文件
-type [fdlpsbc] 根据文件类型查找
-perm –xxxx 查找权限为xxxx 的文件
-user username 查找username用户的文件
-group groupname 查找groupname组用户的文件
-exec command {} \; 每查找一个文件就执行一次command
tar
功能:打包,根据不同选项实现打包压缩或解压解包
用法:
tar -jxvf a.tar.bz2
tar -zcvf b.tar.gz xxx/
j----处理的是bzip2格式的
z----处理的是gz格式的
x----解包解压
c----打包压缩
v----显示过程信息
f----指定操作对象文件的名字
ps
功能:查看进程状态
用法: ps -ef
ps aux
ps ajx
diff/patch 制作补丁/打补丁
diff old/ new/ -ruN > patch.old
cd old
patch -p1 < ../patch.old
patch -p1 < ../patch.old -R //打补丁的反操作
ln
软链接:相当于win的快捷方式
ln -s target softlink
ln -s a.txt a.soft
硬链接:复制+同步更新
ln a.c a.hard
a.hard 与a.c 的inode相同,链接数也一样
ifconfig 查看/修改IP
sudo ifconfig ens33 192.168.23.4
ls | cat 把ls的输出通过管道(|)给到cat命令作为其输入
head -n 10 a.txt | tail -n 1
ls | xargs grep "hello" -Hrnw
在ls列出的各个文件的内容中搜索“hello”,(把一个命令的输出,作为另一个命令的参数)
/ ---根目录结构内容
├── bin ---可执行的程序
├── boot ---系统启动相关文件
├── cdrom
├── dev ---设备文件
├── etc ---配置文件
├── home
├── initrd.img -> boot/initrd.img-4.10.0-37-generic
├── initrd.img.old -> boot/initrd.img-4.10.0-35-generic
├── lib ---库
├── lib32
├── lib64
├── lost+found
├── media
├── mnt ---常用的挂载目录
├── opt
├── proc ---虚拟文件系统,系统运行的各种信息都在该目录下
├── root ---超级用户的家
├── run
├── sbin ---只有root有权限执行的可执行程序
├── snap
├── srv
├── sys ------系统中内核驱动相关信息在此目录下
├── tmp
├── usr-------用户程序、头文件 库
├── var------易变的,例如系统日志文件
├── vmlinuz -> boot/vmlinuz-4.10.0-37-generic
└── vmlinuz.old -> boot/vmlinuz-4.10.0-35-generic
2、动态库与静态库
gcc main.c -o main -I dir1/ -L dir2 -lxxx
-I 告诉gcc头文件在dir1目录下
-L 告诉gcc需要的库在dir2目录下
-lxxx 告诉gcc链接的是xxx库而不是yyy库
静态库的制作与使用
gcc -c add.c
gcc -c sub.c
ar rcsv libxxx.a add.o sub.o//静态库xxx制作OK
gcc main.c -o main -I dir1/ -L dir2 -lxxx
动态库的制作与使用
gcc -fpic -Wall -c yyy.c
得到yyy.o
gcc -shared -o libxxx.so yyy.o
得到了动态库libxxx.so
使用:
编译:gcc main.c -o main -I dir1/ -L dir2 -lxxx ------相同目录下,同名的动态库和静态库,优先链接动态库
如果想要链接静态库:编译:gcc main.c -o main -I dir1/ -L dir2 -lxxx -static
把libxxx.so拷贝到系统默认的库路径下/lib 或/usr/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:dir/ ----dir为动态库所在路径,写绝对路径,不用共享目录
修改/etc/ld.so.conf 把动态库所在路径追加到最后
sudo ldconfig ---使新修改的配置生效
gcc -Wl,-rpath,dir/ main.c -o main -I dir1/ -L dir2 -lxxx ---dir为动态库所在路径
其中-Wl,-rpath,dir1/:dir2/.....
env -----查看系统中所有环境变量
echo $PATH ----打印出PATH环境变量的值
3、make工具(makefile的编写)
make工具默认在当前目录下依照下列顺序读取内容
GNUmakefile makefile Makefile
makefile基本格式
目标:依赖文件 -----makefile中第一个出现的目标是最终目标
TAB命令
命令执行的条件(满足其一):
目标不存在
依*新
makefile的变量
自定义变量
DEP=main.o add.o sub.o
$(DEP)
$(CC) $(CFLAGS)
系统预定义变量
自动变量
$@ ----目标文件的完整名
$< ----依赖的第一个文件的完整名
$^ ----依赖的所有的文件,并以空格隔开
makefile 的规则
普通规则
模式规则
VAR=main.o add.o sub.o
main:$(VAR)
gcc -o $@ $(VAR)
%.o:%.c
gcc -c $< -o $@
.PHONY:clean
clean:
rm -f *.o main
隐式规则
main:
注意:隐式规则使用时不能有其它编译选项,目标名与源文件名相同
make 的常用选项
make -f xxx
make -C dir/
以dir_makefile目录下的simplemakefile作为makefile来组织编译程序
make -C ./dir_makefile/ -f simplemakefile
双目标
main::a.c
gcc -o main a.c
main::b.c
gcc -o main b.c
4、gdb调试器
编译时:gcc -g main.c -o main
gdb main
l (list)---查看代码
b 20 ---在20行设置断点
b 9 if i>98
info b ---查看断点信息
d 断点编号----删除断点
r run ---运行程序
next/step/continue
n--不进入函数内部,一次执行完一句
s--进入函数内部单步执行
c--从断点继续执行到程序结束
print i---- 打印变量i的值
display i
q quit--退出调试状态
5、服务器搭建(在有网络的基础上)
设置开发板IP
ifconfig eth0 192.168.23.xxx ---------开发板的IP重启后失效
可修改/etc/profile
添加ifconfig eth0 192.168.23.xxx
重新启动
nfs服务器
确保虚拟机能够上外网
sudo apt-get update
sudo apt-get install nfs-kernel-server nfs-common
sudo gedit /etc/exports
在末尾加上
/opt/nfs *(rw,sync,no_subtree_check)
Rw-------客户端对该目录可读可写
Sync----双方同步更新
no_subtree_check--------客户端与系统中当前用户权限相同
重启
sudo service nfs-kernel-server restart
查看设置好的nfs服务器目录
showmount -e
看到
/opt/nfs *
修改/opt/nfs的权限
sudo chmod 777 /opt/nfs -R
开发板端
mount -t nfs -o nolock 192.168.23.4:/opt/nfs /mnt
把ip为192.168.23.4的主机上的/opt/nfs目录,挂载到开发板的/mnt就可以通过/mnt访问到虚拟机中/opt/nfs目录下的内容
tftp服务器
sudo apt-get install tftp tftpd openbsd-inetd
sudo gedit /etc/inetd.conf
添加:
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /opt/tftp
sudo mkdir /opt/tftp
sudo chmod 777 /opt/tftp/ -R
重启tftp
sudo service openbsd-inetd reload
sudo service openbsd-inetd restart
查看tftp服务是否启动
netstat -a
netstat -a | grep "tftp"
sudo cp aaa.txt /opt/tftp/
开发板端
tftp -g -r aaa.txt 192.168.23.4
从IP为192.168.23.4主机的tftp服务器目录下,下载文件aaa.txt到开发板