shell是啥意思阿!!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell是啥意思阿!!!相关的知识,希望对你有一定的参考价值。

在网站上多次看到shell,到底是什么意思啊?

在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)。它类似于DOS下的command.com。它接收用户命令,然后调用相应的应用程序。同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。在C++中,Shell是希尔排序的名称。
  基本上shell分两大类:
  一:图形界面shell(Graphical User Interface shell 即 GUI shell)
  </b>例如:应用最为广泛的 Windows Explorer (微软的windows系列制作系统),还有也包括广为人知的 Linux shell,其中linux shell 包括 X windows manger (BlackBox和FluxBox),以及功能更强大的CDE、GNOME、KD、 XFCE。
  二:命令行式 shell(Command Line Interface shell ,即CLI shell)</b>
  例如:
  bash / sh / ksh / csh(Unix/linux 系统)
  COMMAND.COM(MS-DOS 系统)
  cmd.exe / 命令提示字符(Windows NT 系统)
  Windows PowerShell(支援 .NET Framework 技术的 Windows NT 系统)
  传统意义上的shell指的是命令行式的shell,以后如果不特别注明,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是1970年底在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会等待读取你的输入。
  C Shell
  Bill Joy于20世纪80年代早期,在Berkeley的加利福尼亚大学开发了C shell。它主要是为了让用户更容易的使用交互式功能,并把ALGOL风格的语法结构变成了C语言风格。它新增了命令历史、别名、文件名替换、作业控制等功能。
  Korn Shell
  有很长一段时间,只有两类shell供人们选择,Bourne shell用来编程,C shell用来交互。为了改变这种状况,AT&T的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.
  Windows PowerShell 是一种新的交互式的命令行和基于任务脚本编写技术,它使信息技术 (IT) 管理员能够全面地自动操作和控制系统管理任务,从而提高了管理员的生产力。Windows PowerShell 包括多个系统管理实用工具、一致的语法和命名惯例、及对普通管理数据更好地导航,如登记、证书存储 或 Windows Management Instrumentation (WMI)。Windows PowerShell 还专门针对 IT 管理,提供直观的脚本编写语言。
  Shell也是一个VB函数,它的作用是运行程序,语法是Shell(命令字符串[,窗口类型])
参考技术A shell是一个命令处理器(command processor)——是一个读入并解释你输入的命令的程序。除了是一个命令中断器以外,shell还是一个程序设计语言。你可以编写shell可以解释的程序(被称为源程序),这些源程序可以包含shell程序设计命令等等。shell除了解释命令以外,还有其他工作,它也可以配置和编程。shell拥有自己的语言允许用户编写程序并以一种复杂方式运行。shell编程语言具有许多常用的编程语言的特征,例如:循环和控制结构等。用户可以生成像其他应用程序一样复杂的shell程序。
补充说明:简单的说 : shell 是一个交互性命令解释器。shell独立于操作系统,这种设计让用户可以灵活选择适合自己的shell。shell让你在命令行键入命令,经过shell解释后传送给操作系统(内核)执行。
一下是shell功能的一个汇总:
查找命令的位置并且执行相关联的程序。
为shell变量赋新值
执行命令替代
处理 I/O重定向和管道功能
提供一个解释性的编程语言界面,包括tests、branches和loops等语句
参考技术B 壳 的目的... 阻止掌控
壳 的内容... 方便控制
参考技术C 总结发言:
shell是小白为了拉B格而跟风流传出来的玩意。传疯的是它的引申义。
shell的正确用法和出处已经由上面两大段给出。
引申义就是高权限,特别是操作的权限。至少是个输入输出接口。其实这个就算啥shell,根本只算个接口。根本没有“壳”的存在。和实际本意离题千里。
参考技术D 安达市撒大法师的塞得更多

$$ 在 shell 中是啥意思?

【中文标题】$$ 在 shell 中是啥意思?【英文标题】:What does $$ mean in the shell?$$ 在 shell 中是什么意思? 【发布时间】:2010-09-09 20:38:42 【问题描述】:

我曾经读到,在 shell 中为临时文件获取唯一文件名的一种方法是使用双美元符号 ($$)。这确实会产生一个不时变化的数字......但如果你重复调用它,它会返回相同的数字。 (解决办法就是利用时间。)

我很想知道$$ 究竟是什么,以及为什么建议将其作为生成唯一文件名的一种方式。

【问题讨论】:

【参考方案1】:

$$ 是 bash 中的进程 ID (PID)。使用$$ 是个坏主意,因为它通常会产生竞争条件,并允许您的shell 脚本被攻击者破坏。例如,查看所有创建不安全临时文件并不得不发布安全建议的 these people。

改为使用mktemp。 Linux man page for mktemp 非常棒。以下是其中的一些示例代码:

tempfoo=`basename $0`
TMPFILE=`mktemp -t $tempfoo` || exit 1
echo "program output" >> $TMPFILE

【讨论】:

谢谢。 mktemp 选项 -t 现在已弃用(我认为是因为 char - 存在问题)。 这些天使用mktemp $tempfoo.XXXXXX。我冒昧地更新您的帖子。 另请注意,backtick was deprecated,所以请改用TMPFILE=$(mktemp)【参考方案2】:

在 Bash 中,$$ 是进程 ID,如 cmets 中所述,由于各种原因,将其用作临时文件名并不安全。

对于临时文件名,使用mktemp 命令。

【讨论】:

对于只看最上面答案的人来说,如果写入可公开写入的目录(例如 /tmp),即使单个文件也无法使用 $$。用符号链接乱扔 /tmp 很容易,这会导致你的脚本写在不受欢迎的地方。 mktemp 好多了。 是的,使用 $$ 会导致严重的安全漏洞。不要这样做。 或者提问的人应该将下面评分较高的答案设置为接受的答案... 我为 SEO 添加“美元”。 如果$$只是输出pid,怎么可能“不安全”呢?安全漏洞是由于糟糕的设计而不是在 tmp 文件名中使用 PID 而造成的...如果您非常关心 tmp 的输出的完整性,也许您甚至不应该把它放在首位? $$不会造成安全漏洞,缺乏远见会【参考方案3】:

$$是当前进程的id。

【讨论】:

【参考方案4】:

类 UNIX 操作系统中的每个进程都有一个(临时)唯一标识符,即 PID。同时运行的两个进程不能有相同的PID,$$指的是运行脚本的bash实例的PID。

这非常不是一个唯一标识符,因为它永远不会被重用(实际上,PID 会不断重用)。它给你的是一个数字,这样,如果另一个人运行你的脚本,他们将在你的脚本仍在运行时获得不同的标识符。一旦你的 PID 死了,PID 可能会被回收,其他人可能会运行你的脚本,获得相同的 PID,从而获得相同的文件名。

因此,说“$$ 给出一个文件名,这样如果其他人在我的实例仍在运行的情况下运行相同的脚本,他们将获得不同的名称”,这真的很明智。

【讨论】:

【参考方案5】:

$$ 是您的 PID。它不会真正生成一个唯一的文件名,除非你很小心并且没有其他人以完全相同的方式这样做。

通常你会创建类似 /tmp/myprogramname$$

有很多方法可以解决这个问题,如果您正在写入其他人可以写入的位置,那么在许多操作系统上预测您将拥有什么 PID 并搞砸并不太困难 - 想象一下您' 以 root 身份运行,我创建 /tmp/yourprogname13395 作为指向 /etc/passwd 的符号链接——然后你写入它。

在 shell 脚本中这样做是一件坏事。如果你打算使用临时文件来做某事,你应该使用更好的语言,它至少可以让你添加“独占”标志来打开(创建)文件。然后你可以确定你没有破坏其他东西。

【讨论】:

【参考方案6】:

$$ 是运行脚本的 shell 解释器的 pid(进程 ID)。目前在系统上运行的每个进程都是不同的,但是随着时间的推移,pid 会回绕,并且在您退出后最终会有另一个具有相同 pid 的进程。只要您正在运行,pid 对您来说是唯一的。

从上面的定义应该很明显,无论你在脚本中使用多少次 $$,它都会返回相同的数字。

您可以使用,例如/tmp/myscript.scratch.$$ 作为不需要非常可靠或安全的东西的临时文件。最好在脚本末尾删除此类临时文件,例如使用 trap 命令:

trap "echo 'Cleanup in progress'; rm -r $TMP_DIR" EXIT

【讨论】:

【参考方案7】:

$$ 是当前 shell 进程的 pid。这不是生成唯一文件名的好方法。

【讨论】:

【参考方案8】:

这是 bash 进程的进程 ID。任何并发进程都不会拥有相同的 PID。

【讨论】:

【参考方案9】:

$$ 是运行脚本的 shell 的进程 ID。有关更多详细信息,请参阅 sh 或 bash 的手册页。可以使用命令行“man sh”或在网上搜索“shell manpage”找到手册页

【讨论】:

【参考方案10】:

让我再说一遍 emk 的答案——不要将 $$ 本身用作“独特”的任何东西。对于文件,使用 mktemp。对于同一 bash 脚本中的其他 ID,请使用“$$$(date +%s%N)”以获得合理良好的唯一性。

 -k

【讨论】:

【参考方案11】:

另外,您可以通过此命令获取登录用户名。例如。

echo $(</proc/$$/login id). After that, you need to use getent command.

【讨论】:

【参考方案12】:

Fish 外壳 (3.1.2) 中:

$ 符号也可以多次使用,作为一种“取消引用”运算符(C 或 C++ 中的 *)

set bar bazz
set foo bar
echo $foo # bar
echo $$foo # same as echo $bar → bazz

【讨论】:

以上是关于shell是啥意思阿!!!的主要内容,如果未能解决你的问题,请参考以下文章

linux用户信息里面的: shell /bin/bash 啥意思阿?

JS是啥的简称阿

js replace(/\s/g,"")这破玩意是啥意思阿

shell脚本中#是啥意思

nand flash是啥意思

shell是啥意思?