1 什么是Bash 什么是Shell.docx

上传人:b****3 文档编号:4900829 上传时间:2023-05-07 格式:DOCX 页数:23 大小:29.10KB
下载 相关 举报
1 什么是Bash 什么是Shell.docx_第1页
第1页 / 共23页
1 什么是Bash 什么是Shell.docx_第2页
第2页 / 共23页
1 什么是Bash 什么是Shell.docx_第3页
第3页 / 共23页
1 什么是Bash 什么是Shell.docx_第4页
第4页 / 共23页
1 什么是Bash 什么是Shell.docx_第5页
第5页 / 共23页
1 什么是Bash 什么是Shell.docx_第6页
第6页 / 共23页
1 什么是Bash 什么是Shell.docx_第7页
第7页 / 共23页
1 什么是Bash 什么是Shell.docx_第8页
第8页 / 共23页
1 什么是Bash 什么是Shell.docx_第9页
第9页 / 共23页
1 什么是Bash 什么是Shell.docx_第10页
第10页 / 共23页
1 什么是Bash 什么是Shell.docx_第11页
第11页 / 共23页
1 什么是Bash 什么是Shell.docx_第12页
第12页 / 共23页
1 什么是Bash 什么是Shell.docx_第13页
第13页 / 共23页
1 什么是Bash 什么是Shell.docx_第14页
第14页 / 共23页
1 什么是Bash 什么是Shell.docx_第15页
第15页 / 共23页
1 什么是Bash 什么是Shell.docx_第16页
第16页 / 共23页
1 什么是Bash 什么是Shell.docx_第17页
第17页 / 共23页
1 什么是Bash 什么是Shell.docx_第18页
第18页 / 共23页
1 什么是Bash 什么是Shell.docx_第19页
第19页 / 共23页
1 什么是Bash 什么是Shell.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

1 什么是Bash 什么是Shell.docx

《1 什么是Bash 什么是Shell.docx》由会员分享,可在线阅读,更多相关《1 什么是Bash 什么是Shell.docx(23页珍藏版)》请在冰点文库上搜索。

1 什么是Bash 什么是Shell.docx

1什么是Bash什么是Shell

 1什么是Bash什么是Shell

  Bash是GNUBourne-AgainSHell,是目前大多数Linux发行版采用的Shell。

  Shell是*nix提供给用户使用的界面。

  一个操作系统的底层是独立运行的,用户界面和底层分开,可以最大限度的保证系统稳定。

Shell就是一个特殊的程序,负责接受用户的命令,并把系统的响应返回给用户。

  BashShell一般不需要自己安装,在安装发行版的同时都会安装好。

  Shell的存在是和登陆相关的,从用户名密码验证通过以后,Shell就启动了,知道你退出,Shell就结束了运行。

  除了BashShell之外,还有很多其他的Shell。

  2Linux的文件、目录、程序

  Linux的文件、目录、程序是使用bash操作的主要对象。

有必要事先了解一下文件、目录和程序的概念

  文件

  Linux中一切都是文件、普通的文件、设备文件、管道也是文件的形式。

一切操作都是文件为基础的。

DOS操作系统早期也是模拟这种方式,不过有很多漏洞(比如C:

concon会蓝屏)

  文件是有属性的,有一个属性表示这个文件是不是目录,有3个属性表示这个文件的访问权限,还有一些表示从这个文件派生出的文件属性。

  目录

  目录是管理文件的手段,不同的文件要分门别类才容易找到。

严格的说,目录也是一种文件,是具有目录属性的文件。

  文件和目录都有所有者和所有组。

叫UID和GID,对应的,有3个属性表示相应的权限。

后面写到ls和chmod有详细地说明。

  程序

  程序是可以执行的代码,有些是直接交给内核或者CPU执行的,有些是通过其他程序执行的(解释脚本),可以运行的程序都有一个可执行的属性。

  3简单的命令lscpmvmkdirrmchownchmod

  前面说了一些枯燥的概念,现在趁着看官还没有烦躁,开始实际操作的例子。

  QUOTE:

  Lastlogin:

MonAug1421:

52:

472006from61.149.202.143

  [root@CERNET~]#

  这就是bash登陆后的样子。

#井号是root特权用户的提示符号,一般用户提示符是$符号。

  现在输入ls,列出当前目录的内容

  QUOTE:

  [root@CERNET~]#ls

  anaconda-ks.cfginstall.log.sysloglog4cplus-1.0.2MceMonitor-install-files.tgz.md5sumvmstat_monitor

  Ice-3.0.1jwsmtp-1.32.11log4cplus-1.0.2.tar.gzmemcached-1.1.12wuhan.sh

  Ice-3.0.1.tar.gzjwsmtp-1.32.11.tar.gzlogin_keepalivedmemcached-1.1.12.tar.gz

  ids.shlibevent-0.8MceMonitorsar.log

  install.loglibevent-0.8.tar.gzMceMonitor-install-files.tgztmp

  再输入cd/,把当前目录改为根目录

  QUOTE:

  [root@CERNET/]#ls

  bindataetchomelibmediamntprocsbinsrvtmpvar

  bootdeveth1.routeinitrdlost+foundmiscoptrootselinuxsysusr

  相信你的Linux一定是有颜色的,呵呵。

  现在回到原来的目录(刚登陆的时候那个目录叫用户主目录),然后新建一个目录叫aaa。

  QUOTE:

  [root@CERNET/]#cd~

  [root@CERNET~]#mkdiraaa

  [root@CERNETaaa]#

  ~表示用户的主目录,mkdir是建立目录的命令,还可以这样用

  mkdir{aaa,bbb,ccc,ddd}会同时建立4个目录

  mkdir-p~/aaa/bbb/ccc/ddd/eee这样在前面目录不存在的时候,会自动建立。

  在当前目录下有这样的文件,复制和移动是这样的:

  QUOTE:

  [root@CERNET/]#ls

  a.log

  [root@CERNET/]#cpa.logb.log

  [root@CERNET/]#ls

  a.logb.log

  [root@CERNET/]#rma.log

  [root@CERNET/]#ls

  b.log

  [root@CERNET/]#mkdirdir1

  [root@CERNET/]#ls

  b.logdir1

  [root@CERNET/]#rm-rdir1

  b.log

  cp是复制文件,rm是删除文件。

cp和rm都有-r的参数,可以复制目录或者删除目录。

  删除时有可能会提示你每个文件都按y确认,可以用-f参数不让它提示。

  -r-f这样的参数可以写成-rf。

也就是

  QUOTE:

  [root@CERNET/]#rm-rfdir1

  最后看一下设置权限的两个命令,这通常会给初学者造成很大的困扰,遇到权限不足错误的时候,应该看一下是不是权限的问题。

  先列出完整的文件列表:

  QUOTE:

  [root@CERNET/]#ll

  total176

  drwxr-xr-x2rootroot4096Apr1204:

02bin

  drwxr-xr-x3rootroot4096Apr315:

47boot

  drwxr-xr-x4rootroot4096Apr2700:

34data

  drwxr-xr-x8rootroot5180Jun2713:

51dev

  drwxr-xr-x76rootroot12288Aug1304:

03etc

  -rw-r--r--1rootroot176Apr414:

17eth1.route

  drwxr-xr-x2rootroot4096Aug132004home

  drwxr-xr-x2rootroot4096Aug132004initrd

  drwxr-xr-x11rootroot4096Apr404:

04lib

  drwx------2rootroot16384Apr323:

45lost+found

  drwxr-xr-x2rootroot4096Aug132004media

  drwxr-xr-x2rootroot4096Dec22005misc

  drwxr-xr-x2rootroot4096Aug132004mnt

  drwxr-xr-x5rootroot4096Aug900:

27opt

  dr-xr-xr-x191rootroot0Jun2721:

50proc

  drwxr-x---12rootroot4096Aug1209:

02root

  drwxr-xr-x2rootroot12288Apr404:

05sbin

  drwxr-xr-x2rootroot4096Apr315:

46selinux

  drwxr-xr-x2rootroot4096Aug132004srv

  drwxr-xr-x9rootroot0Jun2721:

50sys

  drwxrwxrwt4rootroot4096Aug1422:

16tmp

  drwxr-xr-x14rootroot4096Apr315:

47usr

  drwxr-xr-x22rootroot4096May1716:

08var

  ll命令是RedHat系列一般都有的一个别名,它代表ls-l。

每一行是一个文件或者目录,就这一行说明一下:

  QUOTE:

  drwxr-xr-x14rootroot4096Apr315:

47usr

  drwxr-xr-x表示:

目录所有者有rwx权限所有组有r-x权限其他用户有r-x权限

  rootroot表示:

所有者是root,所有组是root。

(前面的是用户,后面的是组)

  4096是大小,目录的大小和文件系统有关系,文件的话,大小就是文件真实的大小。

  现在看看修改权限:

  QUOTE:

  [root@CERNETaaa]#ls-l

  drwxr-xr-x2rootroot4096Apr315:

46bbb

  drwxr-xr-x2rootroot4096Aug132004ccc

  [root@CERNETaaa]#chownftp:

ftpbbb

  [root@CERNETaaa]#ls-l

  drwxr-xr-x2ftpftp4096Apr315:

46bbb

  drwxr-xr-x2rootroot4096Aug132004ccc

  [root@CERNETaaa]#chmod-R777bbb

  drwxr-xr-x2ftpftp4096Apr315:

46bbb

  drwxrwxrwx2rootroot4096Aug132004ccc

  4管道和高级一些的命令greplessmoresedawk

  常用的命令还有很多,在后面有没见过的命令,我会随时说明。

  现在说一些主要用作配合别的命令的命令。

  管道

  配合别的文件操作的这类命令一般是这样工作的:

前一个程序的输出结果,是后一个程序的输入。

这样衔接起来,可以实现一个很长的串完成复杂的工作。

  *nix的设计概念就是这样的,每个工具完成很简单的工作,都使用文本做输入输出。

还有就是关键的“管道”,这就可以串起来了。

  比如:

  QUOTE:

  [root@CERNETlog]#cat/var/log/dmesg

  这个命令会把/var/log/dmesg显示在屏幕上。

但是这个文件里面是系统的日志,非常得多,几百行一个屏幕放不下。

所以这样:

  QUOTE:

  [root@CERNETlog]#cat/var/log/dmesg|less

  自己动手实验看看效果吧,这个很重要。

  QUOTE:

  [root@CERNETlog]#cat/var/log/dmesg|more

  也是可以分屏显示的,区别是less可以上下的滚动,more只能整屏的向后翻。

  QUOTE:

  [root@CERNETlog]#cat/var/log/dmesg|grepACPI

  这会把包含“ACPI”的行,都显示出来,不包含的不显示。

这就是grep的作用。

  上面的这个结果,不用管道也可以:

  QUOTE:

  [root@CERNETlog]#grepACPI/var/log/dmesg

  grep有-v的参数,可以把不符合条件的都显示出来。

自己试验一下吧。

  -c的参数可以把符合条件和行数数出来。

  awk和sed是稍复杂一些的命令,有很多高级的用法,本文只对初学者,所以只举两个例子说一下最简单的用途。

  QUOTE:

  [root@CERNETlog]#cat/etc/passwd|awk-F:

'{print$1}'

  这会把/etc/passwd这个文件每一行按冒号分割,输出第一个部分。

  QUOTE:

  [root@CERNETlog]#sed-i's/aaa/bbb/'test

  这会把test文件里面,所有的aaa字符替换成bbb。

sed-i的含义是直接在文件里替换。

没有-i的参数,它会把替换过的结果输出到屏幕上。

  *学用Linux命令有两个方面下手:

一个是命令本身的参数,一个是如何把命令结合的更好。

  命令本身的参数要用帮助慢慢学,man是系统帮助命令。

比如

  QUOTE:

  [root@CERNETlog]#mangrep

  可以显示出grep命令的帮助。

有些版本的Linux这个帮助是中文的。

  至于如何结合好不同的命令,就要看自己的理解了。

  5常用的编辑器vinanoemacs

Linux主要shell命令详解

2007-03-2614:

08:

29来源:

作者:

北南南北【大中小】评论:

2条

  shell是用户和Linux操作系统之间的接口。

Linux中有多种shell,其中缺省使用的是Bash。

本章讲述了shell的工作原理,shell的种类,shell的一般操作及Bash的特性。

  什么是shell

  Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。

它是命令语言、命令解释程序及程序设计语言的统称。

  shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。

当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。

  shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。

用户在提示符下输入的命令都由shell先解释然后传给Linux核心。

  有一些命令,比如改变工作目录命令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实现),结束登录。

  我们来实习一下shell是如何工作的。

  $makework

  make:

***Noruletomaketarget‘work’.Stop.

  $

  注释:

make是系统中一个命令的名字,后面跟着命令参数。

在接收到这个命令后,shell便执行它。

本例中,由于输入的命令参数不正确,系统返回信息后停止该命令的执行。

  在例子中,shell会寻找名为make的程序,并以work为参数执行它。

make是一个经常被用来编译大程序的程序,它以参数作为目标来进行编译。

在“makework”中,make编译的目标是work。

因为make找不到以work为名字的目标,它便给出错误信息表示运行失败,用户又回到系统提示符下。

  另外,用户键入有关命令行后,如果shell找不到以其中的命令名为名字的程序,就会给出错误信息。

例如,如果用户键入:

  $myprog

  bash:

myprog:

commandnotfound

  $

  可以看到,用户得到了一个没有找到该命令的错误信息。

用户敲错命令后,系统一般会给出这样的错误信息。

  shell的种类

  Linux中的shell有多种类型,其中最常用的几种是Bourneshell(sh)、Cshell(csh)和Kornshell(ksh)。

三种shell各有优缺点。

Bourneshell是UNIX最初使用的shell,并且在每种UNIX上都可以使用。

Bourneshell在shell编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。

Linux操作系统缺省的shell是BourneAgainshell,它是Bourneshell的扩展,简称Bash,与Bourneshell完全向后兼容,并且在Bourneshell的基础上增加、增强了很多特性。

Bash放在/bin/bash中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能,它还包含了很多Cshell和Kornshell中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。

  Cshell是一种比Bourneshell更适于编程的shell,它的语法与C语言很相似。

Linux为喜欢使用Cshell的人提供了Tcsh。

Tcsh是Cshell的一个扩展版本。

Tcsh包括命令行编辑、可编程单词补全、拼写校正、历史命令替换、作业控制和类似C语言的语法,它不仅和Bashshell是提示符兼容,而且还提供比Bashshell更多的提示符参数。

  Kornshell集合了Cshell和Bourneshell的优点并且和Bourneshell完全兼容。

Linux系统提供了pdksh(ksh的扩展),它支持任务控制,可以在命令行上挂起、后台执行、唤醒或终止程序。

  Linux并没有冷落其他shell用户,还包括了一些流行的shell如ash、zsh等。

每个shell都有它的用途,有些shell是有专利的,有些能从Internet网上或其他来源获得。

要决定使用哪个shell,只需读一下各种shell的联机帮助,并试用一下。

  用户在登录到Linux时由/etc/passwd文件来决定要使用哪个shell。

例如:

  #fgreplisa/etc/passwd

  lisa:

x:

500:

500:

TurboLinuxUser:

/home/lisa:

/bin/bash

  shell被列每行的末尾(/bin/bash)。

  由于Bash是Linux上缺省的shell,本章主要介绍Bash及其相关知识。

  shell命令

  命令行c

  用户登录到Linux系统时,可以看到一个shell提示符,标识了命令行的开始。

用户可以在提示符后面输入任何命令及参数。

例如:

  $date

  二112301:

34:

58CST1999

  $

  用户登录时,实际进入了shell,它遵循一定的语法将输入的命令加以解释并传给系统。

命令行中输入的第一个字必须是一个命令的名字,第二个字是命令的选项或参数,命令行中的每个字必须由空格或TAB隔开,格式如下:

  $CommandOptionArguments

  1.选项和参数

  选项是包括一个或多个字母的代码,它前面有一个减号(减号是必要的,Linux用它来区别选项和参数),选项可用于改变命令执行的动作的类型。

例如:

  $ls

  motdpasswd

  $

  这是没有选项的ls命令,可列出当前目录中所有文件,只列出各个文件的名字,而不显示其他更多的信息。

  $ls-l

  total2

  -rw-r--r--2wzhbook22Apr2020:

37motd

  -rw-r--r--2wzhbook796Apr2020:

37passwd

  $

  加入-l选项,将会为每个文件列出一行信息,诸如数据大小和数据最后被修改的时间。

  大多数命令都被设计为可以接纳参数。

参数是在命令行中的选项之后键入的一个或多个单词,例如:

  $ls-ltext

  -rw-r--r--2wzhbook22Apr2020:

37motd

  -rw-r--r--2wzhbook796Apr2020:

37passwd

  $

  将显示text目录下的所有文件及其信息。

  有些命令,如ls可以带参数,而有一些命令可能需要一些最小数目的参数。

例如,cp命令至少需要两个参数,如果参数的数目与命令要求不符,shell将会给出出错信息。

例如:

  $cp-imydatanewdata

  注意:

命令行中选项先于参数输入。

  2.命令行特征

  命令行实际上是可以编辑的一个文本缓冲区,在按回车之前,可以对输入的文本进行编辑。

比如利用BACKSPACE键可以删除刚键入的字符,可以进行整行删除,还可以插入字符,使得用户在输入命令,尤其是复杂命令时,若出现键入错误,无须重新输入整个命令,只要利用编辑操作,即可改正错误。

  利用上箭头可以重新显示刚执行的命令,利用这一功能可以重复执行以前执行过的命令,而无须重新键入该命令。

  bash保存着以前键入过的命令的列表,这一列表被称为命令历史表。

按动上箭头,便可以在命令行上逐次显示各条命令。

同样,按动下箭头可以在命令列表中向下移动,这样可以将以前的各条命令显示在命令行上,用户可以修改并执行这些命令。

这一特征将在10.4节中进行详细的论述。

  在一个命令行中还可以置入多个命令,用分号将各个命令隔开。

例如:

  $ls-F;cp-imydatanewdata

  也可以在几个命令行中输入一个命令,用反斜杠将一个命令行持续到下一行。

  $cp–i

  mydata

  newdata

   

  上面的cp命令是在三行中输入的,开始的两行以反斜杠

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2