shell,作名词时意为“壳,贝壳;炮弹;外形”,作及物动词时意为“剥皮;炮轰”,作不及物动词时意为“剥落;设定命令行解释器的位置”。
在计算机科学中,Shell俗称壳(用来区别于核(Kernel)),是指“为使用者提供操作界面”的软件(command interpreter,命令解析器,将用户命令解释成操作系统能理解的命令)。它类似于DOS下的COMMAND.COM和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
术语Windows 7中包含的Powershell
同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
在排序算法中,Shell是希尔排序的名称。
Shell的分类基本上shell分两大类:
一:图形界面shell
(Graphical User Interface shell 即 GUI shell)
例如:应用最为广泛的Windows Explorer(微软的Windows系列操作系统,explorer.exe是Windows程序管理器或者文件资源管理器,它用于管理Windows图形壳(cmd是控制台外壳,非图形外壳),包括桌面和文件管理,删除该程序会导致Windows图形界面无法使用。),还有也包括广为人知的Linux shell,其中Linux shell包括X Window Manager(BlackBox和FluxBox),以及功能更强大的CDE、GNOME、KDE、Xfce。
二:命令行式shell
(Command Line Interface shell ,即CLI shell)
例如:
sh(Bourne Shell)/csh/tcsh/bash/ksh/zsh/fish等(Unix及类unix)
COMMAND.COM(CP/M系统;MS-DOS、PC-DOS、DR-DOS、FreeDOS等DOS;Windows 9x)
cmd.exe/命令提示符(OS/2、Windows NT、React OS)
Windows PowerShell(支持.NET Framework技术的Windows NT)
GCOS Command Language (GCL)(Honeywell GCOS)
MULTICS Command Language(MULTICS)
DIGITAL Command Language(DCL)(OpenVMS)
RDOS/DOS Command Line Interpreter
传统意义上的shell指的是命令行式的shell,以后如果不特别注明,shell是指命令行式的shell。
文字操作系统与外部最主要的接口就叫做shell。shell是操作系统最外面的一层。shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。
shell提供了你与操作系统之间通讯的方式。这种通讯可以以交互方式(从键盘输入,并且可以立即得到响应),或者以shell script(非交互)方式执行。shell script是放在文件中的一串shell和操作系统命令,它们可以被重复使用。本质上,shell script是命令行命令简单的组合到一个文件里面。
Shell基本上是一个命令解释器,类似于DOS下的COMMAND.COM。它接收用户输入的命令(如ls等),然后调用相应的应用程序。较为通用的shell有标准的Bourne shell和C Shell。
交互式shell和非交互式shell交互式模式就是shell等待用户的输入,并且执行用户提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当用户签退后,shell也终止了。
shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与用户进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。
Unix shell的类型在UNIX中主要有:
Bourne shell(sh)
Kom shell(ksh)
Bourne Again shell(bash)
POSIX shell(sh)
C shell(csh)
TENEX/TOPS C shell(tcsh)
Bourne Shell(sh)
首个重要的标准Unix Shell是1979年底在V7 Unix(AT&T第7版)中引入的,并且以它的创始科技部基础条件平台“国家气象网络计算应用节点建设”(2004DKA50730)资助者Stephen Bourne的名字命名。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会等待读取你的输入。(Profile(简介、概述)是针对每个帐户的数据存储)
C shell(csh)
Bill Joy于20世纪80年代早期,在加利福尼亚大学伯克利分校开发了csh。它主要是为了让用户更容易地使用交互式功能,并把ALGOL风格的语法结构变成了C语言风格。它新增了命令历史、别名、文件名替换、作业控制等功能。
Korn Shell(ksh)
有很长一段时间,只有两类shell供人们选择——Bourne shell用来编程,csh用来交互。为了改变这种状况,AT&T贝尔实验室的David Korn开发了ksh。ksh结合了所有的C shell的交互式特性,并融入了Bourne shell的语法。因此,ksh广受用户的欢迎。它还新增了数学计算,进程协作(coprocess)、行内编辑(inline editing)等功能。ksh是一个交互式的命令解释器和命令编程语言。它符合POSIX——一个操作系统的国际标准。POSIX不是一个操作系统,而是一个目标在于应用程序的移植性的标准——在源程序一级跨越多种平台。
Bourne Again Shell(bash)
bash是GNU计划的一部分,用来替代Bourne shell。它用于基于GNU的系统如Linux。大多数的Linux(Red Hat、Slackware、Caldera)都以bash作为缺省的shell,并且运行sh时,其实调用的是bash。
POSIX Shell(sh)
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缺省的是Bourne shell。
FreeBSD缺省的是C shell。
HP-UX缺省的是POSIX shell。
Linux是Bourne Again shell。
Windows PowershellWindows PowerShell是一种新的交互式的命令行和基于任务脚本编写技术,它使信息技术(IT)管理员能够全面地自动操作和控制系统管理任务,从而提高了管理员的生产力。Windows PowerShell包括多个系统管理实用工具、一致的语法和命名惯例、及对普通管理数据更好地导航,如登记、证书存储或Windows Management Instrumentation(WMI)。Windows PowerShell还专门针对IT管理,提供直观的脚本语言语言。
Shell也是一个VB函数,它的作用是运行程序,语法是Shell(命令字符串[,窗口类型])
常用命令 常用命令命令
备注
适用于的命令解释程序
cat [文件名]
输出文件内容到基本输出(屏幕 or 加>fileName 到另一个文件)
Unix、类unix、Haiku操作系统
cb
格式化源代码
Unix、类unix
chmod
改变文件的权限
Unix、类unix
cp
复制文件
MULTICS、Unix、类unix、Haiku操作系统
date
当前的时间和日期
Unix、类unix、Haiku操作系统
echo $abc
在变量赋值之后,只需在变量前面加一个$去引用。
Unix、类unix、Haiku操作系统、Windows Powershell
lint
语法检查程序
Unix、类unix、Haiku操作系统
ls
列出文件目录
MULTICS、Unix、类unix、Haiku操作系统、Windows Powershell
dir
列出文件目录
Debian GNU/Linux、Cygwin
man
查询命令
Unix、类unix、Haiku操作系统
more
查看文本文件内容
Unix、类unix、Haiku操作系统
du
查看磁盘空间状况
Unix、类unix、Haiku操作系统
uname
查看当前操作系统名称或版本号
Unix、类unix
who
你的用户名和终端类型 定义变量 name
Unix、类unix
ps
查看当前进程状况
=abc? (bash/pdksh) || set name = abc (tcsh)
Unix、类unix、Haiku操作系统(process status)
mv
改文件名/移动文件
Unix、类unix、Haiku操作系统
pwd
显示目录路径命令
Unix、类unix
exit
登出
Unix、类unix
logout
登出
Unix、类unix(FreeBSD操作系统中仅适用于root用户)
rm
删除文件
Unix、类Unix、Haiku操作系统
echo [文本]
显示指定文本
Unix、类unix、Haiku操作系统、DOS、OS/2、Windows、React OS(Windows NT cmd.exe中,[文本]不能为on或off)
help [命令]
列出一个命令的详细信息
Cygwin、Windows NT
shutdown
关机
Unix、类unix、Windows NT、React OS
cd
更改工作目录
Unix、类unix、Haiku操作系统、OS/2、Windows、React OS;DOS从2.0版起
chdir
更改工作目录
Unix、类unix、Haiku操作系统、OS/2、Windows、React OS;DOS从2.0版起
rmdir
删除目录
Unix、类unix、Haiku操作系统
mkdir
创建目录
Unix、类unix、Haiku操作系统、OS/2、Windows、React OS;DOS从2.0版起
COPY
复制文件
DOS、OS/2、Windows、React OS
DIR
列出目录
OpenVMS、DOS、OS/2、Windows、React OS
HELP
列出命令
CP/M、DR-DOS、OS/2、Windows、React OS
TYPE
显示文本文件的内容
DOS、OS/2、Windows、React OS、RDOS/DOS [5] [10]
VER
查看当前操作系统名称或版本号
DOS、OS/2、Windows 9x、Windows NT cmd.exe、React OS
RMDIR
删除目录
OS/2、Windows、React OS;DOS从2.x版起
MD
创建目录
OS/2、Windows、React OS;DOS从2.x版起
RD
删除目录
OS/2、Windows、React OS;DOS从2.x版起
DELTREE
删除目录
DOS、Windows 9x
DEL
删除文件
DOS、OS/2、Windows、React OS
REN
改文件夹名(Windows NT);改文件名
DOS、OS/2、Windows、React OS
RENAME
改文件夹名(Windows NT);改文件名
DOS、OS/2、Windows、React OS
EXIT
关闭当前cmd.exe窗口
Windows NT、React OS
DATE
更改日期
DOS、OS/2、Windows、React OS
MOVE
移动文件
DOS、OS/2、Windows、React OS
TIME
更改时分秒
DOS、OS/2、Windows、React OS
PROMPT
更改提示符
DOS、OS/2、Windows 9x、Windows NT cmd.exe、React OS
FORMAT
格式化一个分区
DOS、OS/2、Windows、React OS
COPY CON
创建并编辑一份纯文本文件(回车按Ctrl+Z结束编辑)
DOS、OS/2、Windows 9x、Windows NT cmd.exe、React OS
ECHO ON
显示提示符
Windows NT cmd.exe
ECHO OFF
不显示提示符
Windows NT cmd.exe
用途使用用户的缺省凭证和环境执行shell。
在UEFI环境下,EFI的shell环境提供了一组丰富的扩展和增强的命令,在以后的计算机中,传统的DOS界面将会被shell环境所取代,所有的.exe文件将不会在以后支持shell的环境中出现,取而代之的文件后缀是.efi。在shell环境下,分为IA-32和x64,32位的*.efi文件不能在x64的计算机中运行。
描述shell命令重新初始化用户的登录会话。当给出该命令时,就会重新设置进程的控制终端的端口特征,并取消对端口的所有访问。然后 shell 命令为用户把进程凭证和环境重新设置为缺省值,并执行用户的初始程序。根据调用进程的登录用户标识建立所有的凭证和环境。
如果在可信路径上调用shell命令,并且/etc/security/user文件中用户的path属性没有always值,那么就不维护终端的可信环境。
注:shell命令不会重新设置用户的登录标识。
安全性
访问控制:该命令应该被 setuid 为 root 用户,以重新设置用户的进程凭证、授权执行(x)访问所有用户。该命令应该具有可信计算库属性。
文件访问:
方式 文件
1
2
3
4
5
r /etc/passwdr /etc/group
r /etc/security/audit/config
r /etc/security/environ
r /etc/security/limits
r /etc/security/user
审计事件:
事件 信息
USER_Shell portname
示例要在使用可信 shell(tsh)之后将会话重新初始化为缺省凭证和环境,请输入:
shell
文件/usr/bin/shell 包含 shell 命令。
/etc/security/user 包含用户的扩展属性。
/etc/passwd 包含用户标识。
/etc/group 包含组标识。
/etc/security/audit/config 包含审计配置信息。
/etc/security/environ 定义用户的环境属性。
/etc/security/limits 定义每个用户的进程资源限制。
希尔排序
由Donald Lewis Shell于1959年提出,它属于插入排序方法,是不稳定的排序方法。
示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//希尔排序兄弟们
#include "iostream.h"
#include
//using namespace std;//使用命名空间时,要将头文件中的.h去掉
#define N 50
void
shell_sort(
int
a[],
int
len)
{
int
h,i,j,temp;
for
(h=len/2; h>0; h=h/2)
//控制增量
{
for
(i=h; i=0&&temp
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?