https://github.com/zytc2009/BigTeam_learning
分类: LINUX
2010-10-28 13:46:52
为什么需要TFTP服务器?
在嵌入式开发过程中有宿主机和目标机的角色之分:宿主机是执行编译、链接嵌入式软件的计算机;目标机是运行嵌入式软件的硬件平台。
TFTP服务器作为工作于宿主机上的软件,主要提供对目标机的主要映像文件的下载工作。
Tftp-安装
使用RPM包安装tftp-server
1、如果利用如下命令能够看到服务已启动, 则不用安装
[arm@localhost]# netstat -a | grep tftp
已安装结果: udp 0 0 *:tftp *:*
2、如果没有安装,执行如下命令安装。(文件在安装原文件中)
[root@localhost]# rpm -ivh tftp-server-0.42-3.1.i386.rpm
3、建立tftp的主工作目录
[root@localhost btools]# mkdir /tftpboot
Tftp-配置
4、修改配置文件
[root@localhost btools]# vi /etc/xinetd.d/tftp
service tftp
{
…………………………
socket_type = dgram
…… …… ……
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
…… …… ……
}
重启服务
#/etc/init.d/xinetd restart
#netstat -a | grep tftp
udp 0 0 *:tftp *:*
NFS介绍
网络文件系统(NFS,Network FileSystem)是一种将远程主机上的分区(目录)经网络挂载到本地的一种机制,通过对网络文件系统的支持,用户可以在本地系统上像操作本地分区一样来对远程主机的共享分区(目录)进行操作。(类似于windows共享目录)
安装NFS服务器
[root@localhost]# rpm -q nfs-utils
如果没有安装,从对应Linux操作系统版本的安装光盘上找到nfs-utils的安装包。
例:
[root@localhost]# rpm -ivh nfs-utils-1.0.9-24.el5.i386.rpm
NFS配置
[root@localhost ]# vi /etc/exports
加入允许被其它计算机访问的目录和访问权限
例:
/home 192.168.1.*(rw,sync,no_root_squash)
1、/home : 允许其他计算机访问的目录
2、192.168.1.* : 被允许访问该目录的客户端IP地址
3、Rw: 可读可写
4、Sync:同步写磁盘(async:资料会先暂存于内存当中,而非直接写入硬盘)
5、no_root_squash:表示客户端root用户对该目录具备写权限
NFS启动
1、启动NFS服务器时用下面命令:
/etc/init.d/nfs start
2、重启NFS服务器时用下面命令:
/etc/init.d/nfs restart
NFS使用
使用mount 命令来挂载NFS 服务器上的共享目录。
# mount -t nfs servername:/shared_dir /localdir
例:
# mount -t nfs 10.168.1.100:/home /mnt/nfs
Samba
Linux与Linux之间通过NFS实现共享
Windows与windows之间通过共享目录实现共享
Linux与windows之间怎么实现共享?
Samba
Samba
修改/etc/samba/smb.conf,添加:
[root]
comment = Root Directories
browseable = yes
writeable = yes
path = /
valid users = smb(用户名)
Samba(添加用户)
vUseradd smb //添加smb系统用户
vSmbpasswd -a smb //修改密码
Wireshark (ethereal)
Wireshark (2006年夏天之前叫做Ethereal)是一款非常棒的Linux和Windows上的开源网络协议分析器。它可以实时检测网络通讯数据,也可以抓取网络通讯数据。可以通过图形界面浏览这些数据,可以查看网络通讯数据包中每一层的详细内容。
v Rpm –ivh lm_sensors-2.10.0-3.1.i386.rpm
v Rpm –ivh net-snmp-5.3.1-9.el5.i386.rpm
v Rpm –ivh wireshark-0.99.6-1.el5.i386.rpm
v Rpm –ivh wireshark-gnome-0.99.6-1.el5.i386.rpm
什么是Shell?
简单地讲,就是命令解析器,将用户输入的指令转换为相应的机
器能够运行的程序。种类
vBourne shell (sh)
vKorn shell (ksh)
vBourne Again shell (bash)
vC shell (包括csh and tcsh)
vTENEX/TOPS C shell (tcsh)
Shell脚本
Shell脚本是一个包含一系列命令序列的文本文件。当运行这个脚本文件时,文件中包含的命令序列将得到执行
语法
Shell脚本的第一行必须是如下格式:
v#!/bin/sh
符号#!用来指定该脚本文件的解析程序。在上面例子中使用/bin/sh来解析该脚本。当编辑好脚本后,如果要执行该脚本,还必须使其具有可执行属性。
chmod +x filename
注释
在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。如果使用了注释,即使相当长的时间内没有使用该脚本,也能在很短的时间内明白该脚本的作用及工作原理。
变量
在shell编程中,所有的变量都由字符串组成,并且不需要预先对变量进行声明,例s1:
#!/bin/sh
#set variable a
a="hello world"
# print a
echo "A is:"
echo $a
有时候变量名很容易与其他文字混淆,比
如:
S13:
num=2
echo "this is the $numnd“
思考:输出?Why?
num=2
echo "this is the $numnd"
这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量:
num=2
echo "this is the ${num}nd"
这将打印: this is the 2nd
默认变量
v$# :传入脚本的命令行参数个数
v$* :所有命令行参数值,在各个参数值之间留有空格
v$0 :命令本身(shell文件名)
v$1 :第一个命令行参数
v$2 :第二个命令行参数
S2:
#!/bin/sh
echo "number of vars:"$#
echo "values of vars:"$*
echo "value of var1:"$1
echo "value of var2:"$2
echo "value of var3:"$3
echo "value of var4:"$4
运行./s2 1 2 3 4
输出结果:?
局部变量
在变量首次被赋值时加上local 关键字可以声明一个局部变量,例s3:
#!/bin/bash
hello="var1"
echo $hello
function func1 {
local hello ="var2"
echo $hello
}
func1
echo $hello
输出:?
变量(注意)
1. 变量赋值时,“=”左右两边都不能有空格
2. BASH 中的语句结尾不需要分号
If语句
v if [ expression ]
then
#code block
Fi
v if [ expression ]
then
#code block
else
#code block
Fi
v if [ expression ]
then
#code block
else if [ expression ]
then
#code block
else
#code block
fi
fi
if [ expression ]; then
#code block
elif [ expression ]
then
#code block
else
#code block
fi
fi
比较
比较操作整数操作字符串操作
相同-eq =
不同-ne !=
大于-gt >
小于-lt <
大于或等于-ge
小于或等于-le
为空-z
不为空-n
例:
比较整数a和b是否相等:if [ $a = $b ] (也可用eq)
判断整数a是否大于整数b:if [ $a -gt $b ]
比较字符串a和b是否相等:if [ $a = $b ]
判断字符串a是否为空: if [ -z $a ]
判断整数变量a是否大于b:if [ $a -gt $b ]
注意:
1. 在“[”和“]”符号的左右都留有空格
2. “=”左右都有空格
判断
-e 文件已经存在
-f 文件是普通文件
-s 文件大小不为零
-d 文件是一个目录
-r 文件对当前用户可以读取
-w 文件对当前用户可以写入
-x 文件对当前用户可以执行
例S5:
#!/bin/sh
folder=/home
[ -r "$folder" ] && echo "Can read $folder"
[ -f "$folder" ] || echo "this is not file"
For循环
for 循环结构与C 语言中有所不同,在BASH 中for 循环的基本结构是:
for var in [list]
do
#code block
done
其中$var 是循环控制变量,[list] 是var 需要遍历的一个集合,do/done 对包含了循环体,相当于C 语言中的一对大括号。另外如果do 和for 被写在同一行,必须在do 前面加上“;”。如:
for $var in [list]; do
v S7:
#!/bin/bash
for day in Sun Mon Tue Wed Thu Fri Sat
do
echo $day
done
v 如果列表被包含在一对双引号中,则被认为是一个元素,如S8:
#!/bin/bash
for day in "Sun Mon Tue Wed Thu Fri Sat“
do
echo $day
done
注意
上面的例子中,在for 所在那行,变量day 是没有加"$" 符号的,而
在循环体内,echo 所在行变量$day 是必须加上"$" 符号的。
while循环
while 循环的基本结构是:
while [ condition ]
do
#code block
Done
until循环
until 循环的基本结构是:
until [ condition ]
do
#code block
done
while 和until的区别在于while是为真时执行,until是为假时执行
Case语句
BASH 中的case 结构与C 语言中的switch 语句的功能比较类似,可以用于进行多项分支控制。
case "$var" in
condition1 )
;;
condition2 )
;;
* )
default statments;;
esac
#!/bin/bash
echo "Hit a key, then hit return."
read Keypress
case "$Keypress" in
[A-Z] ) echo " Uppercase letter";;
[a-z] ) echo " Lowercase letter";;
[0-9] ) echo "Digit";;
* ) echo "Punctuation, whitespace, or other";;
esac