Linux目录结构:
bin (binaries)————————> 存放二进制可执行文件
sbin (super user binaries)——> 存放二进制可执行文件,只有root才能访问
etc (etcetera)————————-> 存放系统配置文件
usr (unix shared resources)—-> 用于存放共享的系统资源
home —————————————> 存放用户文件的根目录
root ————————————-> 超级用户目录
dev (devices)—————————> 用于存放设备文件
lib (library)————————-> 存放跟文件系统中的程序运行所需要的共享库及内核模块
mnt (mount)—————————-> 系统管理员安装临时文件系统的安装点
boot —————————————> 存放用于系统引导时使用的各种文件
tmp (temporary)———————-> 用于存放各种临时文件
var (variable)————————> 用于存放运行时需要改变数据的文件
Linux常用命令:
hostname ———————-> 查看主机.
ifconfig ————————> 查看ip地址.
ping ip地址 ——————-> 测试网络的连通性 ip 192.168.3.4
shutdown ———————-> 系统关机.
-r 关机后, 立即重启.-h 关机后, 不重新启动.
halt ——————————> 关机后,关闭电源.
reboot —————————> 重新启动.
crtl c ———————-> 停止当前进程.
history————————-> 查看命令历史.
crtl l ————————> 清屏.
clear—————————-> 清屏.
su ——————————-> 切换用户,低权限用户切换时,默认切换为root, 需要输入密码. 高权限切为低权限需要指定用户名.
top ——————————> 显示当前系统中耗费资源最多的进程
ps ——————————-> 显示瞬间的进程状态
-e /-A 显示所有进程,环境变量-f 全格式-a 显示所有用户的所有进程(包括其它用户)-u 按用户名和启动时间的顺序来显示进程-x 显示无控制终端的进程
ps -ef | more ————-> 查看进程
kill -9 pid值 —————> 杀死一个进程 , kill -9 3727
df ——————————-> 显示文件系统磁盘空间的使用情况.
free——————————> 显示当前内存和交换空间的使用情况
netstat ————————> 显示网络状态信息
-a 显示所有连接和监听端口-t (tcp)仅显示tcp相关选项-u (udp)仅显示udp相关选项-n 拒绝显示别名,能显示数字的全部转化成数字。-p 显示建立相关链接的程序名
netstat -an | grep 8080 ——-> 查找8080端口的程序.
ls -la /usr ——————> 查看文件和目录列表. ls -lt /usr , ls -l /usr , ls -a /usr , ll(查看默认目录内容)
-a 显示所有,包括隐藏文件.-l 以长列表形式显示long.
ls -lhR mnt/ ——> 表示查看大小, R表示递归查看, 可以查看mnt下的所有的文件夹及文件.
cd /usr ———————> 切换目录 , cd . , cd .. , cd /usr/local/java , cd 跳出当前环境.
cd - ————————-> 返回进入此目录之前所在的目录
cd !$ ————————> 把上个命令的参数作为cd参数使用。
pwd ——————————> 查看当前工作目录.
help + 命令 ——————> 内部命令, 查看帮助文档. eg: help cd
man + 命令 ——————> 外部命令, 查看文档帮助. eg: man ls
mkdir 文件目录 ————> 创建文件目录 mkdir /usr/local/jdk , mkdir /hello ,
创建项目的目录结构:
mkdir -vp scf/{lib/,bin/,doc/{info,product},logs/{info,product},service/deploy/{info,product}}
创建的目录结构如下:
scf/
|— bin
|— doc
| |— info
| -- product |-- lib |-- logs | |-- info |— product-- service— deploy
|— info
`— product
mkdir room-1,room-2,room-3 , 可以一次性创建多个目录.
mkdir -p 文件目录 ——-> 创建文件目录, 父目录不存在, 先创建父目录. mkdir -p /java/jdk7
mkdir -m 777 dirname ——> 创建权限为777的文件目录.
cp 文件 目录 ————-> 复制文件到目录下. cp book room-a, 复制book文件, 并放在room-a目录下.
cp -r 目录/文件 目录————> 递归处理,将指定目录下的文件与子目录一并拷贝 . cp -r /usr/java /family/room , 将java下的左右内容复制到room下.
touch:
1). touch 文件 ——————> 创建一个空文件. touch book , 创建一个文件book.
2). touch -r file1.log file2.log -----> 更新file2.log的时间戳与file1.log的时间相同.(file1.log的时间戳不变)-r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。3). touch -t 201502072137.50 file3.log ----> 手动设定文件的时间戳.-t time : 使用指定的时间值 time 作为指定文件相应时间戳记的新值.此处的 time规定为如下形式的十进制数: [[CC]YY]MMDDhhmm[.SS]
echo ‘内容’ > 文件名——> 在创建文件时, 添加文件内容. echo ‘think in java’ > book, 创建book文件时, 添加内容”think in java”.
echo ‘content’ > filename ——-> 往文件中追加信息.
文件 ————————-> 创建一个空文件, 与touch 效果相同.
mv :
1). 文件改名 : mv test1.log test2.txt ——> 将test1.log 名字改为 test2.txt
2). mv dir1 dir2 ---------> 如果目录dir2不存在,将目录dir1改名为dir2;否则,将dir1移动到dir2中。3). mv 目录/文件(*) 目录 --> 将目录或文件,移动到另一个目录中.4). mv book room-a room-c/ , 将文件book及目录room-a移动到room-c目录中.eg: mv * ../ -----> 将本目录下的内容全部移动到上一级目录.5). mv -t /opt/soft/test/test4/ log1.txt log2.txt log3.txt 命令将三个文件移动到test4目录中去-t: 加上这个, 就可以将目录放在前面, 文件放在后面.
rm 目录 ———————-> 移除文件. rm room , 删除文件, 会有确认, 移除目录, 只能移除空目录.
-r 同时删除该目录下的所有文件(recursive),递归删除-f 强制删除文件或目录(force)rm -rf room , 移除room目录及其中的所有内容.
rmdir 空目录——————> 删除空目录.
cat :
1). cat 文件 ———————-> 查看文件中的信息, 全部显示. cat install.log , 查看其全部信息, 全部显示.
参数:-A, --show-all 等价于 -vET-b, --number-nonblank 对非空输出行编号-e 等价于 -vE-E, --show-ends 在每行结束处显示 $-n, --number 对输出的所有行编号,由1开始对所有输出的行数编号-s, --squeeze-blank 有连续两行以上的空白行,就代换为一行的空白行-t 与 -vT 等价-T, --show-tabs 将跳格字符显示为 ^I-u (被忽略)-v, --show-nonprinting 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外2). cat > filename ----------> 从键盘创建一个文件,只能创建新文件,不能编辑已有文件.3). 将几个文件合并为一个文件: cat file1 file2 > file .cat 1.txt 2.txt > new.txt -------> 将1.txt和2.txt文件的内容合并到new.txt文件中, 前提是new.txt文件是存在的.4). tac file1.log ------> 反向列示, 就是讲文件的内容从后向前, 倒过来显示.5). here doc 来生成文件.cat > 1.log << eof> ...> ...>eof--------> 系统会将...键盘接受的输入的内容输出到文件1.log中, eof为开始和结束标志, 注意语法.
nl 命令:
1). nl file.log --------------> 带行号查看文件, 如果为空行, 则不计算该行的行号2). nl -b a file.log ---------> 带行号查看文件, 如果该行为空行, 也计算该行的行号.3). nl -n ln file.log --------> 在屏幕的最左方显示行号.4). nl -n rn file.log --------> 在屏幕的最右方显示行号.5). nl -n rz file.log --------> 行号在自己栏位的最右方显示,且加 0 ;
more/less 文件 ————-> 分页显示文件内容. more install.log
1). more +5 file.log ------------> 查看文件file.log自第五行之后的文件内容.2). more +/day3 log2012.log -----> 从文件中查找第一个出现"day3"字符串的行,并从该处前两行开始显示输出3). more -10 menu.sh ------------> 设定每屏显示行数4). ls -l | more -5 ------------> 列一个目录下的文件,由于内容太多,我们应该学会用more来分页显示。这得和管道 | 结合起来-------> 每页显示5个文件信息,按 Ctrl+F 或者 空格键 将会显示下5条文件信息。
head/ tail ———————> 查看文本中开头或结尾部分的内容,默认显示十行. head install.log, tail install.log.
tail -n 5 install.log——> 查看文本的末尾的5条数据.
tail -f install.log——> 循环读取文本中的数据.
wc install.log—————-> 统计文本的行数、字数、字符数. // 920 1853 39317 install.log
-m 统计文本字符数 -w 统计文本字数(word) -l 统计文本行数(line)wc -m install.log wc -w install.log wc -l install.log
find 指定目录(选) -name 文件/目录名—-> 在文件系统中查找指定的文件 , 指定目录可以不填.
find -name book , 将从文件系统中查找所有的book的路径
grep ‘内容’ 文件 ———————-> 在指定的文本文件中查找指定的字符串 . grep ‘java’ book.
ln -s family/room-c/ link ———-> 建立链接文件
-s 对源文件建立符号连接,而非硬连接
time [command] ——> 查看指定命令的执行时间.
which 命令:
1). which 查看可执行文件的位置。which pwd ----------> /bin/pwdwhich useradd ------> /usr/sbin/useradd2). whereis 查看文件的位置。3). locate 配合数据库查看文件位置。4). find 实际搜寻硬盘查询文件名称。5). which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。
gzip 文件 ————————————> 压缩(解压)文件或目录,压缩文件后缀为gz
-d将压缩文件解压(decompress)-l显示压缩文件的大小,未压缩文件的大小,压缩比(list)-v显示文件名和压缩比(verbose)-num用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6eg: gzip install.log , 压缩. gzip -d install.log.gz, 解压.gzip -9 install.log , 高压缩比压缩.
bzip2 文件 ———————————-> 压缩(解压)文件或目录,压缩文件后缀为bz2
-c将压缩的过程产生的数据输出到屏幕上-d解压缩的参数(decompress)-z压缩的参数(compress)-num 用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6bzip2 install.log, 压缩. bzip2 -d install.log.bz2, 解压.
tar 文件————————————-> 文件、目录打(解)包
-c 建立一个压缩文件的参数指令(create)-x 解开一个压缩文件的参数指令(extract)-z 是否需要用 gzip 压缩-j 是否需要用 bzip2 压缩-v 压缩的过程中显示文件(verbose)-f 使用档名,在 f 之后要立即接档名(file)tar -czvf ff.tar.gz family/, 将文件解压到family目录下.
nohup ——-> 不挂断的运行命令. 如: nohup java -jar sendMessage.jar & —-> & 表示后台运行,需要加上
----> 后台运行, 原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。
nohup command > myout.log 2>&1 & ——> 也可以指定输出日志的文件 , 2>&1 表示错误输出也指向正常日志, 也就是, 错误正确都指向这个日志文件.
VIM/VI 文本编辑器:
vim install.log ----> 进入文本详情:i ----------> 在光标前插入.I ----------> 在光标当前行开始插入.a ----------> 在光标后插入.A ----------> 在光标当前行末尾插入.o ----------> 在当前行的下一行插入新的空行.O ----------> 在当前行的上一行插入新的空行.:set nu-----> 显示行号.:set nonu---> 取消行号.gg----------> 到文本的第一行.G-----------> 到文本的最后一行.:n----------> 到文本的第n行.x-----------> 删除光标所在处的字符.nx----------> 删除光标所在处后的n个字符.dd----------> 删除光标所在行ndd---------> 删除n行.dG----------> 删除光标所在行到末尾行的所有行.D-----------> 删除光标所在处到行尾的内容.:n1,n2d ----> 删除指定范围的行.u-----------> 取消上一步操作.crtl+r------> 返回到undo之前.r-----------> 替换光标坐在处的字符.R-----------> 从光标所在处开始替换,按esc键结束.shift+zz ---> 保存退出:wq --------> 保存并退出,与上述作用相同.:x ---------> 保存并退出:q! --------> 不保存退出v 或 shift+v----> 进入行可视模式.crtl+v -----> 进入块可视模块.
用户与账户管理:
/etc/passwd ————————> 保存用户信息的文件:
/etc/shadow ————————> 保存密码的文件
/etc/group ————————-> 保存用户组的文件
/etc/gshadow ———————-> 保存用户组密码的文件
/etc/default/useradd ———-> 用户配置文件
查看其中的内容就可以使用: cat , more, less, tail, head.
操作用户命令:
————————————————> account:password:UID:GID:GECOS:directory:shell <———————————-
添加用户命令:useradd username——-> 添加用户. useradd lisi
-u 指定组ID(uid)-g 指定所属的组名(gid)-G 指定多个组,用逗号“,”分开(Groups)-c 用户描述(comment)-e 失效时间(expire date)
查看用户的命令: id username —> id root ===> uid=0(root) gid=0(root) groups=0(root) ;
查看系统的所有的用户信息: cat /etc/passwd —> 对于普通用户, uid都是从500开始排的.
设置密码命令: passwd username————-> 为哪个用户设置密码, eg: passwd lisi—-> 为lisi用户设置密码.
ll /home/ —————> 查看用户及组.
cat /etc/passwd——-> 查看用户信息.
cat /etc/shadow ——> 查看当前系统中的账户的密码信息.
cat /etc/group ——> 查看当前用户的组信息.
修改用户命令:usermod(user modify)
-l 修改用户名 (login)usermod -l a b(b改为a) ----------- eg : usermod -l LiSi zhangsan 将用户名张三修改为LiSi.-g 添加组 usermod -g sys tom-G添加多个组 usermod -G sys,root tom–L 锁定用户账号密码(Lock)–U 解锁用户账号(Unlock)
删除用户命令:userdel(user delete) —-> 删除用户的同时,会删除该用户的组,密码, home下的所有信息.
-r 删除账号时同时删除目录(remove)
查看系统中组的信息: cat /etc/group
添加组:groupadd
-g 指定gid
修改组:groupmod
-n 更改组名(new group)
删除组:groupdel
groups 显示用户所属组
将用户添加到组中:
gpasswd -a user1 root -----> 将用户user1 添加到root组中. 一个用户可以同时属于多个组. 该用户的权限, 是两个组的权限之和.
把组中的用户删除:
gpasswd -d user1 root -----> 将root组中的user1用户删除.
权限管理:
三种基本权限
r 读权限(read)
w 写权限(write)
x 执行权限 (execute)
d r w x r - x r - x - r w - r - - r - - l r w x r w x r w x
第1位:文件类型(d 目录,- 普通文件,l 链接文件)第2-4位:所属用户权限,用u(user)表示第5-7位:所属组权限,用g(group)表示第8-10位:其他用户权限,用o(other)表示第2-10位:表示所有的权限,用a(all)表示完整信息:一个文件,所属用户具有读写执行权限;所属组的用户有读写权限,没有执行权限;其他用户只有读权限
//———- chmod 权限分配
chmod修改文件权限命令(change mode)
参数:-R 下面的文件和子目录做相同权限操作(Recursive递归的)
-----> chmod u+x a.txt --- 增加权限 | chmod u-x a.txt ---- 减少权限-----> chmod g+x a.txt --- 增加权限 | chmod g-x,g-w a.txt ---- 减少权限-----> chmod a+x a.txt
用数字来表示权限(r=4,w=2,x=1,-=0)
-----> chmod 750 b.txtrwx用二进制表示是111,十进制4+2+1=7r-x用二进制表示是101,十进制4+0+1=57 5 01 1 1 1 0 1 0 0 0r w x r _ x - - -
// —————- acl 权限 ———
1). getfacl root.txt ——> 获取文件的权限信息. 返回文件名,文件拥有者, 所属组, 用户权限,组权限,其他权限.
2). setfacl -m u:deng:rw root.txt ——> 为用户deng分配root.txt文件的权限. -m表示更改modify
3). setfacl -x u:deng root.txt ——-> 删除给deng这个用户层设置的所有权限. 通过acl设置的权限.
4). setfacl -b root.txt ———————> 擦除给文件root.txt上的所有的acl权限.
setfacl -bR deng ------> 遍历擦除deng文件夹下的所有的acl权限.
5). linux中的文件如果没有执行(x)的权限, 是不能切换到该目录下的. 切换的瞬间是执行该文件夹.
6). 如果要在目录下 删除/创建 一个文件, 需要对该目录设置权限.
setfacl -m u:deng:rwx /mnt
7). 如何对一个目录及子目录和文件设置权限:
setfacl -m u:deng:rwx -R /mnt -----> -R 表示, 递归设置权限.---> 这样设置是可以解决当前目录下当前所有文件的acl权限, 但是后期新加的子目录和文件, 无法继承父目录的权限.解决方法:①. setfacl -m u:deng:rwx -R /mnt ----> 给现有是目录文件递归添加权限.②. setfacl -m d:u:deng:rwx -R /mnt ----> 给目录做默认权限操作.
//—————- visudo 权限 ———————
设置用户对命令的执行权限-visudo ——> sudo授权.配置中配置.
- 设置
visudo ——> 进入权限设置文件配置.
下列这种方式需要密码:
①. user1 locahost=/usr/sbin/useradd —-> 给user1分配useradd命令的执行权限.
②. user1 localhost=/usr/sbin/userdel —-> 给user1分配userdel命令的执行权限.
下列的这种方式不需要使用密码:
user1 ALL = NOPASSWD:/usr/sbin/useradd —-> 不需要当前用户输入密码.
user1 localhost = NOPASSWD:/usr/sbin/useradd —-> 不需要当前用户输入密码.
2.使用sudo授权的命令, 需要在命令前加上sudo
sudo /usr/sbin/useradd user2
sudo /usr/sbin/userdel -r user2
- 使用无密码的sudo授权命令
rpm命令使用:
rpm的常用参数:i:安装应用程序(install)e:卸载应用程序(erase)vh:显示安装进度;(verbose hash)U:升级软件包;(update)qa: 显示所有已安装软件包(query all)结合grep命令使用ex:rpm -ivh 3.el6.x86_64.rpm -C /usr/java-------> 直接安装.rpm -Uvh xxxxxxxxxxx.rpm -C /usr/java -------> 更新升级安装包.
tomcat的安装:
解压: tar -zxvf apache-tomcat-7.0.47.tar.gz -C /usr/local/src/
启动tomcat:
1). cd /usr/local/src ----> [root@itcast01 src]# ./2). cd /usr/local/src ----> [root@itcast01 src]# sh apache-tomcat-7.0.47/bin/startup.sh --- > 推荐.3). [root@itcast01 bin]# sh startup.sh ---> 这种可以推荐使用.
防火墙:
service iptables status; ————> 查看防火墙.
service iptables stop; —————> 关闭防火墙.
source /etc/profile———————————> 刷新文件. 当配置文件修改时, 需要刷新文件.
IP地址的配置:
1). 直接通过图形化界面, 来配置ip地址.2). 通过setup指令, 进入网络设置.3). vim /etc/sysconfig/network-scripts/ifcfg-eth0
vim /etc/sysconfig/network —————> 修改hostname.
vim /etc/hosts———————————-> 配置hosts.系统内部的DNS
yum -y install mysql-server —————> 联网自动下载需要安装的软件. -y 表示提示安装过程.
yum update ——> 全部更新
yum check-update ——-> 检查可更新的程序.
//————————————————- Shell 脚本编程 ———————————————
历史命令
history 查看历史命令;! 指定的命令索引, 可以调用该命令 !5 --> 执行第五条命令!vi --> 调用历史中最后一次使用vi开头的命令. !ser --> 执行历史中最后一次执行的ser*开头的命令
history -c 清除历史命令
init 0 关闭系统
tr —-> 转换字符, 如: 将大写转为小写,选项可以让你指定所要删除的字符,以及将一串重复出现的字符浓缩成一个.命令别名
alias x=’ll’ —-> 给命令起别名, 然后可以使用简短的别名操作---> 这样的别名, 服务器重新启动后就会失效 ; 持久化, 可以将其存储在 .bashrc文件中
alias —-> 查看系统中的所有的命令的别名.
unalias x —-> 清除指定的别名.- 输出重定向
ll >> root.txt ——-> bash输出重定向. 将查找到的数据放在root.txt文件中.和 >> 的区别:
1).都是重定向, > 是覆盖式重定向, >> 是追加式重定向.
1> 和 2> 的区别:(覆盖式) 1>> 2>> (追加式)
1). 1> 是正确重定向, 如果前面的命令是正确的, 将该命令的返回结果存储在指定的文件中.2). 2> 是错误重定向, 如果前面的命令是错误的, 将该命令的返回结果存储在指定的文件中.
&> 把正确的或者错误的输出结果存储在文件中. (是覆盖式的输出, 并非追加式输出)
bash red.sh 1>>note.txt 2>&1 —-> 将正确的输出结果存在note.txt中,将错误的结果也通过1的通道存储在note.txt中, 而且还是追加.
< 输入数据.shell的管道操作.
free -m | grep -i mem ——> 通过管道|, 将前面的查询结果, 交给后面, 由后面的grep来过滤.--> 1). free 查看内存信息, -i 表示忽略大小写匹配, grep 表示查找.
free -m | grep -i mem | awk ‘{print $1”\n”,$2”\n”,$3”\n”,$4”\n”}’; ——> 此处使用了awk编程. “\n”表示换行 , 查找指定的列.
- 执行shell脚本的方式:
1). bash test.sh ——-> 不需要再文件中写解析器
——-> 不需要给脚本设置执行权限
2). ./test.sh ——-> 需要些解析器
——-> 需要给脚本设置执行权限. - crontab LINUX下的任务调度:
格式:
分 时 日 月 周 命令
30 21 * /usr/local/etc/rc.d/lighttpd restart
——> 上面的例子表示每晚的21:30重启apache
30 17 5 /opt/deng/test.sh
——> 表示每周五17:30执行test.sh脚本;
vi crontab ——> 可以将定时任务放在crontab中,linux会定时执行这里的任务.
printf 与 echo的功能基本相同, 只是printf不会自动换行,需要”\n”来操作换行 , 这两个命令的标准不同.
printf “this is a test program , %s , %s \n” Hello world ————> this is a test program , Hello , world
与C语言中的printf用法很相似.
- 变量的定义: 变量的引用 $
1). shell 中的变量只能以 字母 或者 下划线_ 开头, 并且字母区分大小写.
2). 在LINUX下的, 所有的文件名, 路径都是区分大小写的.
3). 变量可以使用双引号””, 也可以使用单引号’’, 都可以使用
name=”dengchangtao” —-> 注意,这里的空格都会影响执行的结果.
echo $name ——> 变量可以直接引用输出.
echo “my name is $name” ——> “my name is dengchangtao” 变量也可以在一段话中输出.
echo “my name is $nameDeng” ——> “my name is “ 这种方式不能正常输出, 会寻找变量nameDeng, 不能自动识别.
echo “my name is ${name}Deng” ——> “my name is dengchangtaoDeng” —-> 可以通过${}将变量封装在{}中引用输出. - read -p ————-> 接受键盘输入事件 : /* read [-p “信息”] 变量名
$name ——> 表示变量name, $ 引用变量.
read -p “please input your name :” name ——-> 读取键盘事件接受到的内容, 将其赋值给变量name
echo “my name is $name” - name=”dengchangtao”
echo $name
echo ‘my name is $name’ —-> my name is $name —-> - 1). 单引号 ‘’ 是不能解析变量的. ‘my name is $name’ —-> 其中的name变量是不能被解析的.
2). 双引号 “” 可以解析变量. “my name is $name” —-> 其中的name变量是可以解析的.
3). 反引号` 可以将其中的命令,输出的结果,返回给前面的变量. ---> str =echo dengchangtaoecho "$str" ----> "dengchangtao"<br />-----> num=expr 1 + 2 + 3` —-> 将表达式的执行结果, 赋值给变量num. - date ——> linux 命令可以直接输出当前的日期时间.
set -x ——-> 打开shell脚本的执行跟踪功能;
set +x ——-> 关闭shell脚本的执行跟踪功能. - unset 变量名 —-> 清除变量.
name=”dengchangtao”
echo $name —-> dengchangtao
unset name
echo $name —-> 没有输出内容 - 位置变量:
$n n<9 ---> $1 $2 $3 $4 $5 $6 $7 $8 $9 —> 位置变量就只要这9个. 可以超过10,十个以上,引用变量就需要使用${10},需要{}括号括起来.
echo $1
echo $2
echo $3
sh test.sh 11 22 33 —-> 一次输出11 , 22 , 33 - 位置变量的使用案例; —> case in esac 语句的使用. 注意语法格式.
case $1 in
start)
echo “this is starting…..”
;;
stop)
echo “this is stoping….”
;;
esac
- linux 中是不支持 echo 1+2 这种直接运算操作的, 会原样输出
echo $(( $1+$2 )) —-> 这种语法可以解析. 输出变量1和变量2 之和.
expr 10 + 20 —-> 可以解析运算符. 注意 “+”的左右是有空格的, 否则会报错.
expr 10 - 20 ,expr 10 \ 20,expr 10 20,expr 10 % 20 ——> 是特殊字符, 需要转义. - 预定义变量:
1). $# : 命令行中位置参数的个数
2). $* : 所有位置参数的内容
3). $? : 上一条命令执行后返回的状态, 当返回的状态值为0是,表示
执行正常,非0值表示执行异常或者出错
4). $0 : 当前执行的进程或者程序名.
eg:
#!/bin/bash
#deng
echo "参数的个数为:$#"------> 可以直接写 $#echo "参数分别是$*"echo "该执行的文件名或者程序名是:${0}" ------> 也可以写 ${0}, ${#} , ${?} ,${*}echo ${?}
eg2:
total=0
for i in $; do ——> for循环,i表示遍历到的变量. $表示所有的参数.
total=$(( $i+$total )) ——> 遍历获取动态参数的值.
done
echo $total
eg3:
ls
if [[ $? == 0 ]]; then
echo “上条命令执行成功, 执行成功就是返回0”
else
echo “上条命令执行失败,执行失败返回非0”
fi
=====>> 注意: 这里检测命令是否正常执行, 当使用简写命令时,将提示命令错误, 执行不成功. 如 ll --> 执行失败.
———— shell的输入, 输出 ———-
- echo -e “my name is user1\nmy name is user2”; ———————-> \n 表示换行.
- echo -e “\033[32;40m[ok]\033[0m” ———————> 设置字体颜色. 注意: 颜色部分用双引号包括.
\033[前景颜色;背景颜色m
\033[0m —-> 系统默认颜色.
前景颜色: 30 黑色,
31 红色
32 绿色
33 棕色
34 蓝色
35 紫色
36 青色
37 白色
背景颜色: 40 黑色
41 红色
42 绿色
43 棕色
44 蓝色
45 紫色
46 青色
47 白色
/——————— 文件测试 和 整形测试 ———————
- 测试文件的状态:
格式: [ 操作符 文件或目录 ] ————-> 执行结果为真,则返回0, 如果为假, 则返回非0 ; - 常用的测试操作符
1). -d: 测试是否为目录(Disctory) ;
2). -e: 测试目录或文件是否存在(Exist);
3). -f: 测试是否为文件(File);
4). -r: 测试当前用户是否具有权限读取(Read);
5). -w: 测试当前用户是否具有权限写入(Write);
6). -x: 测试当前用户是否可以执行(Excute);
7). -L: 测试是否为符号链接(Link)文件; - 条件测试在shell脚本中的使用:
#!/bin/bash
#deng
if [ -f ./file1 ]
then
echo “file1 is exists”
else
echo “file1 is not exists”
touch file1
fi
——> 判断文件file1是否存在,如果存在则输出 “file1 is exists”, 如果不存在,则输出”file1 is not exists” ,并创建文件. 挂载和未挂载:
mount —-> 挂载mount /dev/cdrom/media ----> 挂载光盘在挂载光盘时,会输出许多挂载光盘是的日志信息, 可以屏蔽掉mount /dev/cdrom/media &> /dev/null -----> 屏蔽掉信息,也就是将其输出重定向到null这个黑洞中.
unmount ——> 未挂载.
unmount /dev/cdrom/media ----> 未挂载光盘
整型数据的比较:
格式: [ 整数1 操作符 整数2 ]
0). 操作符:
1). -eq : 等于 (Equal)
2). -ne : 不等于(Not Equal)
3). -gt : 大于(Greater Than)
4). -lt : 小于(Lesser Than)
5). -le : 小于等于(Lesser or Equal)
6). -ge : 大于等于(Greater or Equal)
1). who 查看当前系统中登陆的用户;root pts/0 2015-01-13 06:37 (192.168.3.4)root pts/1 2015-01-13 06:38 (192.168.3.4)
2). who -l 系统当前登陆用户的信息.
LOGIN tty3 2015-01-13 06:36 2210 id=3LOGIN tty2 2015-01-13 06:36 2208 id=2LOGIN tty4 2015-01-13 06:36 2212 id=4LOGIN tty5 2015-01-13 06:36 2218 id=5LOGIN tty6 2015-01-13 06:36 2220 id=6
3). who | wc -l ; 登陆的用户的数量. 是一个数字, 也就是几条数据.
who | wc -l ----> 4
4). [
who | wc -l-ge 2 ]&& echo “当前用户已被入侵….” ——> 打印 “当前用户已被入侵…”---> 注意其中的空格.
5). 使用shell脚本编写程序:
#!/bin/bash#dengif [ `who | wc -l ` -ge 2 ]thenecho "当前登陆用户系统的人数大于等于两人,可能被入侵..."elseecho "当前登陆用户系统的人数小于等于两人"fi
6). df -Th ——-> linux的文件挂载情况; 或系统的分区情况.
7). df -Th | grep boot ——> 从df -Th的查询结果中查找出boot , 分区的使用系统./dev/sda1 ext4 291M 34M 242M 13% /boot
8). df -Th | grep boot | awk ‘{print $6}’| cut -d ‘%’ -f1 —-> 13
----> $6 , 表示第六个参数.----> cut -d '%' , 表示以"%"进行分割.----> -f1 , 表示取第一部分.
9). 例子:
#!/bin/bash
#dengbootspace=`df -Th | grep 'boot' | awk '{print $6}' | cut -d '%' -f1`if [ $bootspace -ge 14 ]thenecho "boot分区的使用空间已经大于等于14%" | mail -s 'boot space Warning!!!' root@localhostelseecho "boot分区的使用空间已经xiao于等于14"fi
10). ls -lh ——> 可以将查看的文件的大小, 让其显示成单位为M.
11). mail ——> 打开linux下的邮件系统.
12). & 后面跟上数字, 就可以查看第几封邮件 ; &1 , &2 —-> 打开第一封 , 第二封邮件.
13). q ——> 退出邮件系统.字符串测试和逻辑测试:
1). 字符串比较:格式: [ 字符串1 = 字符串2 ][ 字符串1 != 字符串2 ][ -z 字符串 ] -------> 字符串为空.常用的测试操作符:=: 字符串内容相同!=: 字符串内容不同,!表示相反的意思-z: 字符串内容为空
2). read -p ‘name:’ name —-> 提示name,键盘输入名称, 将输入的值赋给变量name.
3). 字符串判别, shell实例: ——> if条件判断下面的这两种写法都是可以的.①. #!/bin/bash#dengread -p 'please input your name :' nameread -p 'please input your pass :' passif [[ 'deng' = $name && '1234' = $pass ]]thenecho "Login success ! "elseecho "Login failure !"fi②. #!/bin/bash#dengread -p 'please input your name :' nameread -p 'please input your pass :' passif [ 'deng' = $name ] && [ '1234' = $pass ]thenecho "Login success ! "elseecho "Login failure !"fi---> shell执行:please input your name :dengplease input your pass :1234Login success !
4). 逻辑测试:
格式: [ 表达式1 ] 操作符 [ 表达式2 ]常用的测试操作符:①. -a 或 && 逻辑与, '而且'的意思②. -o 或 || 逻辑或,'或者'的意思③. !: 逻辑否, 当指定的条件不成立时, 返回的结果为真.
流程控制.
1). if条件判断
eg1: ——————-> 双分支结构if [ $1 -lt 60 ]echo '小于60'elseecho '大于60'fi
eg2: ——————-> 多分支结构.
#/bin/bash
#deng ```成绩级别
60以下
60-75之间
75-90之间
90以上
if [ $1 -lt 60 ];then
echo ‘此成绩不及格啊,得努力!!’
elif [ $1 -ge 60 ]&&[ $1 -lt 75 ];then
echo ‘此成绩是个中等成绩,加油!!’
elif [ $1 -ge 75 ]&&[ $1 -lt 90 ];then
echo ‘此成绩是个比较优秀的成绩,fighting!!’
else
echo ‘此成绩是个给非常好的成绩!’
fi
—-> ./0118.sh 78 ==> ‘此成绩是个比较优秀的成绩,fighting!!’
7. eg3: ---> eg2中的判定有些多余, 可以精简如下:
if [ $1 -lt 60 ];then
echo ‘此成绩不及格啊,得努力!!’
elif[ $1 -lt 75 ];then
echo ‘此成绩是个中等成绩,加油!!’
elif[ $1 -lt 90 ];then
echo ‘此成绩是个比较优秀的成绩,fighting!!’
else
echo ‘此成绩是个给非常好的成绩!’
fi
——> 因为流程判断时,从上面往下走,结果只能是一个,不能是多个.
7. 2). case条件判断, 相当于其他语言中的switch.<br />①. 注意语法格式, 以case开始,esac结束, 每一个条件判断中间,以";;"分割开.<br />:<br />case $1 in<br />1 )<br />echo '周一'<br />;;<br />2 )<br />echo '周二'<br />;;<br />3 )<br />echo '周三'<br />;;<br />4 )<br />echo '周四'<br />;;<br />* )<br />echo '其他' -------> 如果不符合上述的任何条件,则进入该条件中.<br />;;<br />esac<br />:<br />week=`date +%w`<br />case $week in<br />1 )<br />echo '周一'<br />;;<br />2 )<br />echo '周二'<br />;;<br />3 )<br />echo '周三'<br />;;<br />4 )<br />echo '周四'<br />;;<br />* )<br />echo '其他' -------> 如果不符合上述的任何条件,则进入该条件中.<br />;;<br />esac
====> 日期格式化命令.
7. ②. date +%w ----> 查看当前是星期几<br />③. date +%d -----> 可以查看当前是几号<br />④. date +%m -----> 查看当前的月份.<br />⑤. date +%M -----> 查看当前的月份.<br />:
case $1 in
start )
net start mysql ——> 如果传入的是start, 则启动mysql
;;
stop )
net stop mysql ——> 如果传入的是stop, 则停止mysql
;;
* )echo 'command not found';;
esac
—-> 这样就可以在shell后面加上 位置参数启动mysql.
8. 循环控制.<br />1). while ... do ... done 循环
** 注意 while条件判断后面是有个空格的.
8. [eg1:]()<br />#/bin/bash<br />#deng
num=10 //注意while后面的空格. while [ $num -gt 0 ] ——————-> 符合条件执行do之后的代码. 执行完毕之后,执行done的代码. do echo $num num=$(($num-1)) done echo ‘最后一个num是’$num
8. [eg2:]() <br />//求连续数字的和.<br />num=100<br />tot=0
while [ $num -gt 0 ] do tot=$(($tot+$num)) num=$(($num-1)) done echo $tot
8. [eg3:]()<br />i=0<br />while [ $i -lt 5 ]<br />do<br />useradd user$i<br />echo '123'|passwd --stdin user$i<br />i=$(($i+1))<br />done
语句解读: useradd user$i ——> 循环遍历创建用户.
echo '123'|passwd --stdin user$i -----> 将123输出的结果,通过管道作为密码,并作为标准输出流 赋给用户.
8. [eg4:]() --- 隔行换色, while结合if语句. [[]] (()) 的嵌套使用,是为了转义,这样在shell中就可以直接使用运算符了 <br />i=0<br />while [[ $i -lt 10 ]]; do<br />if [[ $i%2 -eq 0 ]]; then / if [ $(($i%2)) -eq 0 ]]; then<br />echo -e "\033[32;43m${i}\033[0m"<br />else<br />echo $i<br />fi<br />i=$(($i+1))<br />done<br />2). for循环
①. 针对于操作系统中的操作 , for ..in是非常实用的.
for .. in .. 循环:
#/bin/bash#dengfor i in user0 user1 user2 user3 user4 ; doecho $idone---------------------------------------------#/bin/bash#dengfor i in `cat user.txt` ; doecho $iuseradd $idone----> 将文件user.txt中的数据读出来,以空格分开.
for i in `cat /etc/passwd | awk -F: '{print $1}'` ; doecho $iecho $i >> user.txtdone--> 解析命令: cat /etc/passwd | awk -F: '{print $1}'**: /etc/passwd ---> 该目录下存放的是用户的信息.**: -F: -----------> 表示以第一个:分开.**: '{print $1}'---> 表示输出第一个参数.
②. 普通的for 循环: for 循环类似于java中的for循环, ((初始条件;判断条件;执行后操作))
#/bin/bash#dengfor (( i = 0; i < 10; i++ )); doecho $isleep 1done
#/bin/bash#dengfor (( i = 0; i < 10; i++ )); doecho $iuseradd user$iecho 1234 | passwd --stdin user$idone
③. 接受键盘输入, 并判定键盘上的键的类型, [a-z][A-Z] [0-9]
#/bin/bash#dengread -p 'please input your one key :' keycase $key in[a-z][A-Z])echo '字母键!';;[0-9])echo '数字键!';;*)echo '功能键!';;esac
9. shift 迁移语句:<br />1). 用户迁移位置变量,将$1~$9依次想左传递:
①. 例如,若当前脚本程序获得的位置变量如下:
$1=file1 , $2=file2 , $3=file3 , $4=file4
②. 则执行依次shift命令后,各位置变量为:
$1=file2 , $2=file3 , $3=file4
③. 再次执行shift命令后, 各位置变量为:
$1=file3 , $2=file4
9. 例1 :<br />#/bin/bash<br />#deng
tot=0 while [ $# -gt 0 ]; do tot=$(($tot+$1)) shift ————> 位置参数左偏移. done echo $tot
——> ./0122.sh 1 2 3 4 5 ——> 输出 15
10. shell函数<br />1). 函数的定义:
/bin/bash
deng
function add(){ echo ‘dengchangtao go go go !!!’ }
add ———-> 在脚本中调用函数.
10. 2). 函数的传参:<br />#/bin/bash<br />#deng
function add(){ num=$1 —————> 接受传递进来的第一个参数. tot=0 for (( i = 0; i < $num; i++ )); do tot=$(($tot+$i)) done echo $tot }
add 10 ——-> 调用函数并传参. add 100 add 1000 add 10000
//---------------------------------------------------------- VI编辑器命令大全 ----------------------------------进入vi的命令vi filename :------------------ 打开或新建文件,并将光标置于第一行首vi +n filename :-------------- 打开文件,并将光标置于第n行首vi + filename :--------------- 打开文件,并将光标置于最后一行首vi +/pattern filename:-------- 打开文件,并将光标置于第一个与pattern匹配的串处vi -r filename :-------------- 在上次正用vi编辑时发生系统崩溃,恢复filenamevi filename....filename :----- 打开多个文件,依次进行编辑移动光标类命令h :--------------------------- 光标左移一个字符l :--------------------------- 光标右移一个字符space:------------------------ 光标右移一个字符Backspace:-------------------- 光标左移一个字符k或Ctrl+p:-------------------- 光标上移一行j或Ctrl+n :------------------- 光标下移一行Enter :----------------------- 光标下移一行w或W :------------------------光标右移一个字至字首b或B :------------------------光标左移一个字至字首e或E :------------------------光标右移一个字至字尾) :------------------------光标移至句尾( :------------------------光标移至句首}:------------------------光标移至段落开头{:------------------------光标移至段落结尾nG:------------------------光标移至第n行首n+:------------------------光标下移n行n-:------------------------光标上移n行n$:------------------------光标移至第n行尾H :------------------------光标移至屏幕顶行M :------------------------光标移至屏幕中间行L :------------------------光标移至屏幕最后行0:------------------------(注意是数字零)光标移至当前行首$:------------------------光标移至当前行尾屏幕翻滚类命令Ctrl+u:------------------------向文件首翻半屏Ctrl+d:------------------------向文件尾翻半屏Ctrl+f:------------------------向文件尾翻一屏Ctrl+b;-----------------------向文件首翻一屏nz:----------------------------将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。插入文本类命令<br />i :------------------------在光标前I :------------------------在当前行首a:------------------------光标后A:------------------------在当前行尾o:------------------------在当前行之下新开一行O:------------------------在当前行之上新开一行r:------------------------替换当前字符R:------------------------替换当前字符及其后的字符,直至按ESC键s:------------------------从当前光标位置处开始,以输入的文本替代指定数目的字符S:------------------------删除指定数目的行,并以所输入文本代替之ncw或nCW:------------------------修改指定数目的字nCC:------------------------修改指定数目的行删除命令ndw或ndW:------------------------删除光标处开始及其后的n-1个字do:------------------------删至行首d$:------------------------删至行尾ndd:------------------------删除当前行及其后n-1行x或X:------------------------删除一个字符,x删除光标后的,而X删除光标前的Ctrl+u:------------------------删除输入方式下所输入的文本搜索及替换命令/pattern:------------------------从光标开始处向文件尾搜索pattern?pattern:------------------------从光标开始处向文件首搜索pattern:set hlsearch ------------------- 将搜索到的内容高亮显示.:set nohlsearch ----------------- 将搜索到的内容取消高亮显示.n:------------------------在同一方向重复上一次搜索命令N:------------------------在反方向上重复上一次搜索命令:s/p1/p2/g:------------------------将当前行中所有p1均用p2替代:n1,n2s/p1/p2/g:------------------------将第n1至n2行中所有p1均用p2替代:g/p1/s//p2/g:------------------------将文件中所有p1均用p2替换选项设置all:------------------------列出所有选项设置情况<br />term:------------------------设置终端类型<br />ignorance:------------------------在搜索中忽略大小写<br />list:------------------------显示制表位(Ctrl+I)和行尾标志($)<br />number:------------------------显示行号<br />report:------------------------显示由面向行的命令修改过的数目<br />terse:------------------------显示简短的警告信息<br />warn:------------------------在转到别的文件时若没保存当前文件则显示NO write信息<br />nomagic:------------------------允许在搜索模式中,使用前面不带“\”的特殊字符<br />nowrapscan:------------------------禁止vi在搜索到达文件两端时,又从另一端开始<br />mesg:------------------------允许vi显示其他用户用write写到自己终端上的信息最后行方式命令<br />:n1,n2 co n3:------------------------将n1行到n2行之间的内容拷贝到第n3行下:n1,n2 m n3:------------------------将n1行到n2行之间的内容移至到第n3行下:n1,n2 d :------------------------将n1行到n2行之间的内容删除:w :------------------------保存当前文件:e filename:------------------------打开文件filename进行编辑:x:------------------------保存当前文件并退出:q:------------------------退出vi:q!:------------------------不保存文件并退出vi:!command:------------------------执行shell命令command:n1,n2 w!command:------------------------将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入:r!command:------------------------将命令command的输出结果放到当前行寄存器操作"?nyy:------------------------将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字"?nyw:------------------------将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字"?nyl:------------------------将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字"?p:------------------------取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字ndd:------------------------将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。**_ 常用命令累计 _1). ps aux --------------------> 查看所有的进程.2). ps auxwww ------------------> 查看所有进程的完整信息, 最多加三个w.3). last -----------------------> 查看服务器的用户登录情况.(可以查看登录的时间, 登录的用户名, 在线的累计时长, 登录的IP)4). cat 1.log | tee new.log ----> tee 重定向并显示重定向的内容.5). ls | tr 'a-z' 'A-Z' --------> tr 替换, 将小写替换为大写.6). for i in `seq 1 10000`; do cat /etc/passwd >> 1.txt ; done ------->7). du -sh 1.txt ---------------> 查看文件大小, du -sb 1.txt , 参数不同, 显示的单位不同.8). ls aming* | xargs -i mv {} {}.txt -------------> 给符合条件的文件加上.txt后缀名.9). cd /opt/ourpalm ; ls -----------> 多个命令可以在一行执行, 中间用;隔开10). & 符号 --------------------------> 将命令放在后台执行, 如: sleep 100 &11). -------> 主机之间拷贝文件.
cd /data // data目录下有我们要拷贝的目标文件目录 test
tar cvf - test| ssh 10.0.1.11 “cd /copy1/; tar xvf -“ //首先将要拷贝的目录test打包,”-“ 代表标准输出,然后再ssh 到目标主机 10.0.1.11 ,运行相应的命令。其中tar xvf - 意思是,将前面的标准输出内容作为解包的对象。
总结:其实就是想拷贝的目录先打包,然后将打包好的文件拷贝到目标主机,最后在目标主机上解包。只不过,我们用一条命令实现了边打包边解包的过程。
12). set noai nosi ----------> 取消了自动缩进和智能缩进,这样粘贴就不会错行了。但在有的vim中不行,还是排版错乱。
:set paste ——————> 后来发现了更好用的设置:
进入paste模式以后,可以在插入模式下粘贴内容,不会有任何变形。这个真是灰常好用,情不自禁看了一下帮助,发现它做了这么多事: •textwidth设置为0 •wrapmargin设置为0 •set noai •set nosi •softtabstop设置为0 •revins重置 •ruler重置 •showmatch重置 •formatoptions使用空值
13). seq 命令详解: seq命令用于产生从某个数到另外一个数之间的所有整数。
seq [选项]… 尾数 : seq 10 ——————> 默认生成从1 到 10的整数
seq [选项]… 首数 尾数 : seq 5 15 ————> 生成从 5 到 15 之间的整数.
seq [选项]… 首数 增量 尾数 : seq 10 2 20 ———-> 以2位步长,生成连续的整数, 12,14,16,18,20.
-f选项:指定格式
seq -f”%3g” 9 11 : ———————-> 生成9到11之间整数, %后面指定数字的位数 默认是%g,%3g那么数字位数不足部分是空格。
sed -f”str%03g” 9 11 : ———————> 这样的话数字位数不足部分是0,%前面制定字符串。
-w选项:指定输出数字同宽
seq -w 98 101 : ————————-> 098 099 100 101 , 不足位数的在前面补0 ```
14). yes命令: 在命令行中输出指定的字符串,直到yes进程被杀死。不带任何参数输入yes命令默认的字符串就是y.
eg : yes hello ----> 将一直在命令行, 输出hello字样 , 直到ctrl+c终止当前进程.
15). rename oldname newname namelist —————-> 根据名字列表,将老的名字,替换为新的名字, 支持正则表达式.
oldname: 原字符串:将文件名需要替换的字符串;newname: 目标字符串:将文件名中含有的原字符替换成目标字符串;namelist: 文件:指定要改变文件名的文件列表。eg: rename name1.log name.log name1.log ----------> 将name1.log重命名为name.log正则:? 可替代单个字符* 可替代多个字符eg: rename foo foo0 foo? -------> 会把foo1到foo9的文件重命名为foo01到foo09,重命名的文件只是有4个字符长度名称的文件,文件名中的foo被替换为foo0。
16). comm命令:(比较的两个文件是排序之后的文件)
comm命令可以用于两个文件之间的比较,它有一些选项可以用来调整输出,以便执行交集、求差、以及差集操作。交集:打印出两个文件所共有的行。求差:打印出指定文件所包含的且不相同的行。差集:打印出包含在一个文件中,但不包含在其他指定文件中的行。选项:-1:不显示在第一个文件出现的内容(删除第一列);-2:不显示在第二个文件中出现的内容(删除第二列)-3:不显示同时在两个文件中都出现的内容(删除第三列)cat a.log ----->222223333344444aaaaaccccccat b.log ----->11111222223333344444cccccdddddeg :1). comm a.log b.log11111222223333344444aaaaacccccddddd第一列 第二列 第三列.======> 第一列只包含在a.log中出现的行;第二列包含在b.log中出现的行;第三列包含在a.log和b.log中相同的行。各列是以制表符(\t)作为定界符。2). comm a.log b.log -3 | sed 's/^\t//' -------> 删除第三列, 求两个文件中不相同的行, 两列合并为一列.3). comm a.log b.log -1 -2 -------------------> 删除第一,第二列, 求两个文件的交集 .4). 通过删除不需要的列,可以得到a.log和b.log的差集:
17). curl 命令:
①. curl -d "jsonStr={\"common\":{\"interfaceId\":\"0005\",\"pCode\":\"10000538310143000003101430031014300000001\"}}""http://pay.0708.com/billingcenter2.0/platform/main.do"--------> linux命令行模拟post请求
