shell的基本概念

Shell就像一个壳层,这个壳层介于用户和操作系统之间,负责将用户的命令解释为操作系统可以接收的低级语言,并将操作系统响应的信息以用户可以了解的方式来显示。            从用户登陆到注销期间,用户输入的每个命令都会经过解译及执行,其负责机制就是shell。

            shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。
            有一些命令,如改变工作目录命令cd,是shell内置命令。还有一些命令,例如拷贝命令cp和移动命令mv,是存在于文件系统中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在shell内部还是一个单独的程序。
          #find        /        -name        cd
          #find        /        -name        cp

shell的主要版式本
在Linux系统中常见的shell版本有以下几种。
(1)Bourneshell(sh):它是UNIX最初使用的shell,并且在每种UNIX都可以使用。它在shell编程方面相当优秀,但处理与用户的交互方面不如其他几种shell。
(2)Cshell(csh):它最初由BillJoy编写,它更多地考虑了用户界面的友好性,支持如命令补齐等一些Bourneshell所不支持的特性,但其编程接口做得不如Bourneshell。Cshell被很多C程序员使用,因为Cshell的语法和C语言的很相似,Cshell也由此得名。
(3)Kornshell(ksh):它集合了Cshell和Bourneshell的优点,并且和Bourneshell完全兼容。
(4)BourneAgainshell(bash):bash是大多数Linux系统的默认shell。它是Bourneshell的扩展,并与Bourneshell完全向后兼容,而且在Bourneshell的基础上增加和增强了很多特性。。
(5)tcsh:它是Cshell的一个扩展版本,与csh完全向后兼容,但它包含了更多使用户感觉方便的新特性,其最大的提高是在命令行编辑和历史浏览方面。它不仅和Bashshell提示符兼容,而且还提供比Bashshell更多的提示符参数。
(6)pdksh:它是一个专门为Linux系统编写的Kornshell(ksh)的扩展版本。Ksh是一个商用shell,不能免费提供,而pdksh是免费的。

Linux中的各种shell

shell                            名称描述                                                   位置
ash                         一个小shell(和sh类似)                            /bin/ash
ash.static                一个不依靠软件库的ash版本                       /bin/ash.static
bash                       BourneAgainShell                                       /bin/bush
bush2                     BourneAgainShell的新版本                         /bin/bush2
bsh                         ash的一个符号链接                                     /bin/bsh
csh                         Cshell,tcsh的一个符号链接                          /bin/ash
ksh                         公共域受限制的shell(针对网络操作)            /usr/bin/rsh
sh                          bash的一个符号链接                                    /bin/sh
tcsh                       和csh兼容的shell                                          /bin/tcsh
zsh                        一个和csh,ksh和sh兼容的shell                     /bin/zsh

判断登入shell
使用echo命令来查询系统的“SHELL”环境变量,命令如下:
#echo $SHELL

暂时变更shell
除非是在受限的shell中,否则若要变更使用shell,只要执行该Shell程序名称(shell_name),即可切换到不同的Shell。如:
#sh(或#csh等等)
此处的shell_name是指shell的名称(例如,sh或csh)。暂时变更shell,可在其它的shell中进行试验。
键入exit或CTRL-D可以回到您原始的shell中。

永久性地变更shell
若要永久变更登入shell(登入时的预设shell),请使用“chsh”(changeshell)命令
#chsh username full_shell_name
此处的username即为使用者名称,而shell_path_name是欲作为预设之shell的完整路径名称(如/usr/bin/sh)。
使用chsh命令之后,您必须再次注销和登入,变更才会生效。
例,如果terry将预设的登入shell改为Cshell,该命令的形式如下:
$chsh       terry       /usr/bin/csh
%

Shell功能介绍
交互式处理(Interactive Processing)
接收来自用户输入的命令后,shell 会根据命令类型的不同来执行,执行完毕后,shell 会将结果回传给用户,并等待用户下一次输入。用户执行exit 或是按 Ctrl+D 来注销 shell 才会结束。

命令补全功能
指用户输入命令后,有时不需输入完整的命令,而系统会自动找出最符合的命令名称,这种功能可以节省输入长串命令的时间。
不需要输入完整的文件名,只需输入开头几个字母,然后按Tab键时候,系统会补充完整,连续按两次Tab(Esc)键系统会显示所有符合输入前缀的文件名称。
若忘了命令的全名,而只记得命令的开头字母,按Tab键一次会补充完整,连续按两次Tab(Esc)键系统会显示所有符合输入前缀的命令名称。

别名(Alias)功能
查询目前系统所有别名:#alias
设置别名:#alias dir=‘ls-l’
使用别名:#dir /etc
取消别名:       #unalias dir
alias命令的效力仅限于该次登录,在注销系统后,这个别名的定义就会消失。如果希望每次登陆都使用这些别名,则应该将别名的设置加入“~/.bashrc”文件中,若是写入“/etc/bashrc”文件中,则系统上的所有用户都能使用这个别名。

查阅历史记录-history命令
在Linux系统上输入命令并按下Enter后,这个命令就会存放在命令记录表 ( ~/.bash_history )中,预定的记录为1000笔,这些都定义在环境变量中。
列出所有的历史记录:#history
只列出最近5笔记录犯例:#history5
使用命令记录号码执行命令:#!561
重复执行上一个命令:#!!
执行最后一次以ls开头的命令:#!ls

后台处理(BackgroundProcessing)
通常将比较耗时的工作放在后台执行。要执行后台程序,只要在输入命令时,在命令的后面加上“&”符号,之后按Enter键,系统即会开始以后台的方式执行该命令。
若目前已在执行某个命令,无法使用“&”来将它加入后台中执行,需先按Ctrl+z键暂停这程序的执行,然后再直接输入“bg”命令,就可将此工作放入后台执行。
“nohup”指NoHangUp的意思,即注销后系统会继续执行该命令。
#nohup ping 192.168.11.1&
查看后台执行的程序:#jobs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDK源码解析之 java.lang.System

一个和系统环境进行交互的类. System不允许被实例化, 而且是一个final类 一、不能实例化 private System() { }二、成员变量 public final static InputStream in null; //这是“标准”输入流。 public final static PrintStream out null; //这是“标准”输出流。 public …

详解MySQL中DROP,TRUNCATE 和DELETE的区别

注意:这里说的delete是指不带where子句的delete语句 相同点: truncate和不带where子句的delete, 以及drop都会删除表内的数据 不同点: 1. truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index…

JDK源码解析之 Java.lang.Package

如果我们在Class对象上调用getPackage方法,就可以得到描述该类所在包的Package对象(Package类是在java.lang中定义的)。我们也可以用包名通过调用静态方法getPackage或者调用静态方法getPackages(该方法返回由系统中所有已知包构成的数组)来获得Package对象。getNam…

Mysql中limit的用法详解

在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SE…

Docker入门-简介

独具魅力的Docker作为一门新技术,它的出现有可能引起其所在领域大范围的波动甚至是重新洗牌。根据业内专业人士的看法,不论如何,Docker的出现,已经成为云服务市场中一枚极具意义的战略性棋子。从2013年开始在国内发力,…

Mysql中limit的优化

在一些情况中,当你使用LIMIT row_count而不使用HAVING时,MySQL将以不同方式处理查询。 如果你用LIMIT只选择一些行,当MySQL选择做完整的表扫描时,它将在一些情况下使用索引。 如果你使用LIMIT row_count与ORD…

Docker入门-架构

Docker 包括三个基本概念: 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。容器(Cont…

MYSQL出错代码列表大全(中文)

mysql出错了,以前往往靠猜.现在有了这张表,一查就出来了. 1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致…

Docker入门-安装

Centos7下安装Docker docker官方说至少Linux 内核3.8 以上,建议3.10以上(ubuntu下要linux内核3.8以上, RHEL/Centos 的内核修补过, centos6.5的版本就可以) 1、把yum包更新到最新:yum update 2、安装需要的…

Docker原理之Namespaces

命名空间(namespaces)是 Linux 为我们提供的用于分离进程树、网络接口、挂载点以及进程间通信等资源的方法。 一、Namespaces 在日常使用 Linux 或者 macOS 时,我们并没有运行多个完全分离的服务器的需要,但是如果我们在服务器上启…

mysql 快速插入(insert)多条记录

方法1: INSERT INTO table(col_1, col_2,col_3) VALUES(1,11,111); INSERT INTO table(col_1, col_2,col_3)   VALUES(2,22,222); INSERT INTO table(col_1, col_2,col_3)   VALUES(3,33,333); 有没有更快捷的办法呢?答案是有(见方法2) 方法2: INSERT INTO table(col…

Docker原理之CGroups

控制组(cgroups)是 Linux 内核的一个特性,主要用来对共享资源进行隔离、限制、审计 等。只有能控制分配到容器的资源,才能避免当多个容器同时运行时的对系统资源的竞争。控制组技术最早是由 Google 的程序员 2006 年起提出&#x…

Mysql中的转义字符

字符串是多个字符组成的一个字符序列,由单引号( “”) 或双引号 ( “"”) 字符包围。(但在 ANSI 模式中运行时只能用单引号)。 例如: a string"another string"在一个字符串中,如果某个序列具有特殊的含义,每个序…

Docker原理之UnionFS

一、UnionFS Linux 的命名空间和控制组分别解决了不同资源隔离的问题,前者解决了进程、网络以及文件系统的隔离,后者实现了 CPU、内存等资源的隔离,但是在 Docker 中还有另一个非常重要的问题需要解决 - 也就是镜像。 镜像到底是什么&#…

教你精确编写高质量高性能的MySQL语法

在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的编写,刚开始不会体会出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的…

Docker使用-Hello World

1、docker pull hello-world 拉去docker远程仓库中的Hello World的镜像 [rootCarlota2 ~]# docker pull hello-world Using default tag: latest latest: Pulling from library/hello-world 0e03bdcc26d7: Pull complete Digest: sha256:7f0a9f93b4aa3022c3a4c147a449bf11e09…

Mysql数据库引擎快速指南

如果你是个赛车手并且按一下按钮就能够立即更换引擎而不需要把车开到车库里去换,那会是怎么感觉呢? MySQL 数据库为开发人员所做的就好像是按按钮换引擎;它让你选择数据库引擎,并给你一条简单的途径来切换它。 MySQL的自带引擎肯…

Docker使用-构建MySQL

拉取官方镜像(我们这里选择5.7,如果不写后面的版本号则会自动拉取最新版) docker pull mysql:5.7 # 拉取 mysql 5.7 docker pull mysql # 拉取最新版mysql镜像MySQL文档地址 检查是否拉取成功 $ sudo docker images一般来说数据库容…

Java集合:什么是Java集合?

一、集合的由来 通常,我们的Java程序需要根据程序运行时才知道创建了多少个对象。但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型。为了满足这些常规的编程需要,我们要…

Mysql截取中英数混合的字符串

在 mysql中截取字符串我们用 LEFT函数 LEFT(str,len) 返回从字符串str 开始的len 最左字符。 mysql> SELECT LEFT(foobarbar, 5); -> fooba 手册上只介绍了截取英文字符串的方法,中文或者中英文的怎么办呢?以下是截取中英混合的字符串(中国人…