1、目录命令的学习
1.1、ifconfig
ifconfig // 查看网卡等 信息
ifconfig eth0 + IP // 设置网卡 IP
ifconfig eth0 down/up 网卡开关
1.2、mount/umount
实现 nfs 网络文件系统的挂载,一般的格式是:
mount –t type –o optlist dev dir
-t : 指定挂接文件系统的类型,比如 nfs
-o: 指定挂接可选的命令,当多个的命令的时候,还是使用一个 -o,但是命令之间使用逗号进行隔开,这个逗号可不是中文的哦,图 tcp
dev: 挂接的设备
dir : 指定挂接的位置,这里的挂接的位置,必须是已经存在的目录,如果多个文件需要进行挂载的话,可以在 mnt 目录下,新建多个目录,进行区分
当实现挂接一个 Linux 的文件当板子目录上,在板子的串口操作 secureCRT中:
mount –t nfs –o nolock,tcp 10.100.10.249:/home/carlos/nfs/3516c /mnt
可见,-t 指定为 nfs,而 –o 指定了 nolock 和 tcp,dev 是通过 IP 指定的路径,dir 是板子上的 mnt 目录
umount :
实现挂接文件的卸载,一般是:
mount –a // 将所有挂接的文件都卸载
mount DIR // 将挂接的位置,进行释放
1.3、ps
一般是拿来查看进程,
ps –e // 实现全部进程的查看,第一个是进程号
ps –ajx // 查看进程 PID、PPID 等信息
ps –aux //查看所有进程消耗的 CPU MEM 等信息
1.4、kill/killall
kill 一般是通过 –9 的方式,加进程号,直接 kill 掉一个进程
kill –9 + 进程号
killall 是通过进程名的方式,kill 一个进程
kill –p + 进程名
1.5、make
编译、生成升级包?
1.6、reboot
实现系统的重启,一般的设置有,
reboot 或者 reboot + 命令
-f : 强制进行关机
-i :关闭网络之后再关机
-n: 保存数据之后再关机
1.7、ping
ping + IP
1.8、vim
1.9、gcc
gcc 编译,一般是通过 指定,控制生成的文件
-o + 文件名: 生成可执行的 obj 文件,默认的是 a.out
-S : 将源码编译为 汇编未见, gcc hello.c –S –o nhello.asm
-E : 预处理,这个不生成文件,需要自己重定位到文本文件 gcc hello.c –E > yuchuli.txt
2.0、tcpdump 和 tcptraceroute
2.1、Makefile
Makefile 的规矩:
目标 : 依赖
TAB+命令 // 这里必须是 TAB,不能是空格,否则报错
a) 编写Makefile,自动把c文件,编译出可执行文件
hello : hello.o
gcc hello.c –o hello
hello.o : hello.c
gcc hello.c –o hello.o
b) 修改c文件,调用第三方库文件的api
hello : hello.o file1.o
gcc hello.o file1.o –o hello
hello.o : hello.c
gcc hello.c –o hello.o
file1.o : file1.c
gcc file.c –o file.o
clean :
rm –rf hello.o file.o
常用的通配符:
$@: 代表了目标
$^ : 代表所有的依赖的对象
$< : 表示第一个依赖的对象
所以上面的可以修改为: // 目标是 $@ → hello ,所有的依赖是 hello.0 file.0
hello : hello.o file1.o
gcc $^–o $@
hello.o : hello.c
gcc $< –o $@
file.o : file.c
gcc $< –o $@
// 需要自己去学习,《跟我一起学习Makefile》
2.2、学习 shell
a) 了解变量
变量都是以字符串、变量名都是以大写的形式(和系统的变量进行区分,可以通过 set 查看)
ABC=XXXX,等号的左右两边不能存在空格。
当以命令的形式获得变量:
ABC=$(date)
变量的使用:
echo ${ABC}, echo $ABC 两种都是可以的,
b) 了解条件语句
if [ 条件 ]; then
XXXXXX
fi
或者:
if [ 条件 ]; then // 这里有分号,不要忘记了
XXXXXX
else
XXXX
fi
c) 了解循环语句
for i in {数字,数字以逗号进行隔开}
do
XXXXXXX
done
for file in 字符(’ls ’)
do
XXXX
done
while 循环体:
while [ 条件 ] // 没有分号
do
xxxxx
done
d) 编写一个脚步文件,循环处理:1、读取/proc/meminfo的内容;2、分析MemFree和Cached的大小;3、如果两者相加,小于5Mbyte,提示内存泄漏,退出循环。
(1)通过 while 循环体 ,一直实现检测,但是浪费了 CPU 资源
while [ 1 ]
do
for i in {2,3}
do
if [ ${i} = 2 ];then
memfree=$(cat /proc/meminfo | sed '2 p' -n | awk '{print $2}')
echo "memfree = ${memfree}"
fiif [ ${i} = 3 ];then
cache=$(cat /proc/meminfo | sed '4 p' -n | awk '{print $2}')
echo "cache = ${cache}"
fi
done
addnum=$(expr ${memfree} + ${cache} )
echo "addnum = ${addnum}"mm=$(expr ${addnum} / 1024)
echo "mm = ${mm}"if [ ${mm} -le 5 ];then
echo "warning"
else
echo "OK"
fi
done
(2)通过定时器执行的方法进行执行:
for i in {2,3}
doif [ ${i} = 2 ];then
memfree=$(cat /proc/meminfo | sed '2 p' -n | awk '{print $2}')
echo "memfree = ${memfree}"
fiif [ ${i} = 3 ];then
cache=$(cat /proc/meminfo | sed '4 p' -n | awk '{print $2}')
echo "cache = ${cache}"
fi
done
addnum=$(expr ${memfree} + ${cache} )
echo "addnum = ${addnum}"mm=$(expr ${addnum} / 1024)
echo "mm = ${mm}"if [ ${mm} -le 5 ];then
echo -e " 33[31;43m warning 33[0m" > /dev/pts/4 // 终端,以不同的颜色进行打印,
else
echo -e " 33[31;43m OK 33[0m" > /dev/pts/4 // 中断
fi定时执行:
crontab –e*/1 * * * * /XXX/XXX/XX/1.sh
每分钟都会运行脚本文件,
因为打印输出的话,是通过控制台进行输出的,所以打印控制台的话: /dev/pts/4,如果不知道的话,可以通过 tty 命令进行确定,因为不同的控制台都是不一样的,要根据实际的控制台进行更换。
2.3、dd
实现文件之间的拷贝,拷贝的同时支持格式的转换
if : 输入文件
of : 输出文件
bs: ibs + obs ,既强制数据的输入和输出都是,以指定数据块的大小
count : 写入的时候,指定写入的块,
从 A 设备拷贝到 B 设备
dd if=/XXX/X/A of=/XXX/XX/B bs=8k // 实现数据的拷贝,每一次拷贝的大小为 8K,没有指定 count 也就是全部拷贝过来
测试磁盘写入能力:
time dd if=/dev/zero of=/XXX/XX/设备名 bs=8K count=30000
/dev/zero : 是产生 ASCII 0 的设备,就是一直产生零,将这些零,每一 8K ,一共 30000 次,写入指定的设备,并将整个过程的时间 time 出来。
测试磁盘的读出能力:
time dd if=/dv/设备名 of=/dev/null bs=8K
/dev/null 是空文件,是黑洞,所以设备的数据,每次 8k 拷贝过来,最后将这个过程时间打印出来,
2.4、diff
对比两个文件,一般是用于制作补丁包
格式:
diff 选项 file1 file 2
将 file1 和 file 2 做比较。在制作补丁包的时候,file1 是源文件、file2 则是最新的目的文件,
-r : 支持递归,
-N : 确保文件的创建,
-u : 以统一的格式,
生成补丁文件:
diff -urN 老的文件 目的文件 > xxxxxx.path
使用补丁文件: 借助 patch 命令
patch –p[0-N] < xxxx.patch // 里面的信息包含了比对的文件的路径,文件的名字等等信息
-p 后面数值是,忽略路径,
2.5、ln
创建链接,连接分为软链接和硬连接,不管是软的还是硬的,文件都是保持同步,只要源文件改变了,连接文件也是会跟着改变。
创建软链接:
ln –s 源文件或者目录 目的文件, 生成的软链接大小很小,类似 window 的图标,4KB
创建硬链接:
ln 源文件 目的文件 // 创建的目的文件和源文件的大小是一模一样
2.6、top
top 命令,查看系统使用 CPU 、内存、等信息
top - 14:41:28 up 497 days, 4:21, // 到现在位置系统启动时间
13 users, // 用户数量
load average: 0.21, 0.19, 0.24 // 系统负载,记载的是1分钟,5分钟,15分钟,到现在的平均值
Tasks: 209 total, 2 running, 207 sleeping, 0 stopped, 0 zombie // 总任务数、正在运行、睡眠、停止、僵尸进行的数目
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni, 95.8%id, 4.1%wa, 0.0%hi, 0.0%si, 0.1%st // 用户空间、内核空间占据 CPU 使用量
Mem: 7901184k total, 4514476k used, 3386708k free, 332896k buffers //
Swap: 4088532k total, 49312k used, 4039220k free, 3735268k cached
2.7、free
查看内存等使用状况
2.8、tar
用于打包或者是解压
格式:
tar 命令 输出文件 输入文件 // 解压的时候就没有输出文件了
命令:
-v : 显示细节,都可以
-f : 跟文件,都可以使用
-c : 打包,打包的时候使用
x : 解压缩
j : bzip2
z : zip / gzip
打包:
tar –cvf 1.sh.tar 1.sh // 将 1.sh 进行打包 , c 是小写
解包:
tar xvf 1.sh.tar // 因为没有涉及到解压的格式,就不用使用 j 或者 z
解压缩指定的格式:
tar -jxvf xxxx.tar.bz2 // 解压缩 bz2 格式,所以使用 j
tar –zxvf xxxx.tar.zip/gzip // 解压缩 zip 格式,所以使用 z
2.9、zip/unzip
zip : 实现 zip 压缩
zip 命令 压缩生成文件 被压缩的文件
压缩解压文件:
zip 1.sh.zip 1.sh
unzip 1.sh.zip
压缩目录解压目录:
zip –r XXXX.zip 目录
unzip xxxx.zip -d 路径 // –d 可以指定 解压路径
3、自己编写的第一个脚本
#!/bin/sh -v
cd /flashapp/wifi/driver && ./load_wifi_driver.shif [ !$? ];
then
cd /flashapp/wifi/tools && ./wifi_connect.sh
eles
echo "fail = cd /flashapp/wifi/driver && ./load_wifi_driver.sh"
fiif [ !$? ];
then
udhcpc -iwlan0
else
echo "fail = cd /flashapp/wifi/tools && ./wifi_connect.sh"
fimount -t nfs -o nolock,tcp 10.100.20.249:/home/carlos/nfs/3516c /mnt
if [ !$? ];
then
echo -e " 33[31;43m everything is OK 33[0m"
ficd /mnt && ls -l