Linux基础篇(一)

您所在的位置:网站首页 怎么进入shell脚本编程 Linux基础篇(一)

Linux基础篇(一)

2024-01-31 16:36| 来源: 网络整理| 查看: 265

1 Shell的概念 1.1 Shell的由来

        现在我们使用的操作系统(Windows、Mac OS、Android、iOS 等)都是带图形界面的,简单直观,容易上手;然而在计算机的早期,并没有图形界面,我们只能通过一个一个地命令来控制计算机,这些命令有成百上千之多。 对于图形界面,用户点击某个图标就能启动某个程序;对于命令行,用户输入某个程序的名字(可以看做一个命令)就能启动某个程序。这两者的基本过程都是类似的,都需要查找程序在硬盘上的安装位置,然后将它们加载到内存运行。然而,真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),图形界面和命令行只是架设在用户和内核之间的一座桥梁。

        由于安全、复杂、繁琐等原因,用户不能直接接触内核(也没有必要),需要另外再开发一个程序,让用户直接使用这个程序;该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核,这样用户就能间接地使用操作系统内核了。用户界面和命令行就是这个另外开发的程序,在 Linux下,这个命令行程序叫做 Shell 。

Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。

        Shell 本身并不是内核的一部分,它只是在内核的基础上编写的一个应用程序,它和 QQ、迅雷、Firefox 等其它软件没有什么区别。然而 Shell 也有着它的特殊性,就是开机立马启动,并呈现在用户面前;用户通过 Shell 来使用 Linux,不启动 Shell 的话,用户就没办法使用 Linux。

         Shell 的另一个重要特性是它自身就是一个 解释型的程序设计语言 ,Shell 程序设计语言支持在高级语言里所能见到的绝大多数程序控制结构,比如循环,函数,变量和数组。Shell 主要用来开发一些实用的、自动化的小工具,而不是用来开发具有复杂业务逻辑的中大型软件,例如检测计算机的硬件参数、搭建 Web 运行环境、日志分析等,Shell 都非常合适。任何在提示符下能键入的命令也能放到一个可执行的 Shell程序里,这意味着用shell语言能简单地重复执行某一任务。

1.2 Shell的工作原理

        Shell 程序本身的功能是很弱的,比如文件操作、输入输出、进程管理等都得依赖内核。我们运行一个命令,大部分情况下 Shell 都会去调用内核暴露出来的接口,这就是在使用内核,只是这个过程被 Shell 隐藏了起来,它自己在背后默默进行,我们看不到而已。接口其实就是一个一个的函数,使用内核就是调用这些函数。

        Shell 是一个命令语言解释器(command-language interpreter),把我们在计算机上的操作或我们的命令,翻译为计算机可识别的二进制命令,传递给内核,以便调用计算机硬件执行相关的操作;同时,计算机执行完命令后,再通过Shell翻译成自然语言,呈现在我们面前。

        在 Shell 中输入的命令,有一部分是 Shell 本身自带的,这叫做内置命令;有一部分是其它的应用程序(一个程序就是一个命令),这叫做外部命令。

        Shell 本身支持的命令并不多,功能也有限,但是 Shell 可以调用其他的程序,每个程序就是一个命令,这使得 Shell 命令的数量可以无限扩展,其结果就是 Shell 的功能非常强大,完全能够胜任 Linux 的日常管理工作,如文本或字符串检索、文件的查找或创建、大规模软件的自动部署、更改系统设置、监控服务器性能、发送报警邮件、抓取网页内容、压缩文件等。

        更值得一提的是,Shell 还可以让多个外部程序发生连接,在它们之间很方便地传递数据,也就是把一个程序的输出结果传递给另一个程序作为输入。

        将 Shell 在整个 Linux 系统中的地位描述成下图所示的样子。

        不论何时你键入一个命令,它都被 Linux Shell 所解释。Shell 首先检查命令是否是内部命令,不是的话再检查是否是一个应用程序,这里的应用程序可以是Linux本身的实用程序,比如 ls 和 rm,也可以是购买的商业程序,比如 xv,或者是公用软件(public domain software),就象 ghostview。然后 Shell 试着在搜索路径($PATH)里寻找这些应用程序。搜索路径是一个能找到可执行程序的目录列表。如果你键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。而如果命令被成功的找到的话,shell的内部命令或应用程序将被分解为系统调用并传给Linux内核。

1.3 shell如何启动

1、进入Linux 控制台

         一种进入 Shell 的方法是让 Linux 系统退出图形界面模式,进入控制台模式,这样一来,显示器上只有一个简单的带着白色文字的“黑屏”,就像图形界面出现之前的样子。这种模式称为 Linux 控制台(Console)。

        从图形界面模式进入控制台模式也很简单,往往按下 Ctrl + Alt + Fn(n=1,2,3,4,5...) 快捷键就能够来回切换。

        例如,CentOS 在启动时会创建 6 个虚拟控制台,按下快捷键 Ctrl + Alt + Fn(n=2,3,4,5,6) 可以从图形界面模式切换到控制台模式,按下 Ctrl + Alt + F1 可以从控制台模式再切换回图形界面模式。也就是说,1 号控制台被图形桌面程序占用了。

下图就是进入了控制台模式:

        输入用户名和密码,登录成功后就可以进入 Shell 了。

在图形界面模式下,输入密码时往往会显示为 •,密码有几个字符就显示几个 •;而在控制台模式下,输入密码什么都不会显示,好像按键无效一样,但不要惊慌,只要输入的密码正确就能够登录。

        Shell 在你成功地登录进入系统后启动,并始终作为你与系统内核的交互手段直至你退出系统。你系统上的每位用户都有一个缺省的 Shell。每个用户的缺省 Shell 在系统里的 passwd 文件里被指定,该文件的路径是 /etc/passwd。passwd 文件里还包含有其他东西:每个人的用户ID号,一个口令加密后的拷贝和用户登录后立即执行的程序,(注:为了加强安全性,现在的系统一般都把加密的口令放在另一个文件–shadow中,而passwd中存放口令的部分以一个x字符代替)虽然没有严格规定这个程序必须是某个Linux shell,但大多数情况下都如此。

2、使用终端

        进入 Shell 的另外一种方法是使用 Linux 桌面环境中的终端模拟包(Terminal emulation package),也就是我们常说的 终端(Terminal),这样在图形桌面中就可以使用 Shell。以Ubuntu 为例,直接按快捷键 ctrl+alt+t 便可以进入 Shell。

        Shell 在你成功地登录进入系统后启动,并始终作为你与系统内核的交互手段直至你退出系统。你系统上的每位用户都有一个缺省的 Shell。每个用户的缺省 Shell 在系统里的 passwd 文件里被指定,该文件的路径是 /etc/passwd。passwd 文件里还包含有其他东西:每个人的用户ID号,一个口令加密后的拷贝和用户登录后立即执行的程序。

1.4 常用的shell

        在 Linux 和 UNIX 系统里可以使用多种不同的 Shell 可以使用。最常用的几种是 Bourne shell (sh), C shell (csh), Korn shell (ksh)等。三种 Shell 都有它们的优点和缺点。Bourne shell 的作者是 Steven Bourne。

        除了这些 Shell 以外,在 Linux 上常见的有 tcsh (csh 的扩展),Bourne Again shell(bash, sh 的扩展), 和 Public Domain Korn shell (pdksh, ksh 的扩展)。Bash 是大多数 Linux 系统的缺省 Shell。

2 Bash 2.1 Bash简介

        Bash(GNU Bourne-Again Shell)是一个为 GNU 计划编写的 Unix shell,它是许多 Linux 平台默认使用的 shell。

        Bash 与 Bourne shell 完全向后兼容,并且在 Bourne shell 的基础上增加和增强了很多特性。Bash 也包含了很多 C 和 Korn shell 里的优点。Bash 有很灵活和强大的编程接口,同时又有很友好的用户界面。

        Shell 是一个命令解释器,是介于操作系统内核与用户之间的一个绝缘层。准确地说,它也是能力很强的计算机语言,被称为解释性语言或脚本语言。它可以通过将系统调用、公共程序、工具和编译过的二进制程序“粘合”在一起来建立应用,这是大多数脚本语言的共同特征,所以有时候脚本语言又叫做“胶水语言”。

        事实上,所有的 UNIX 命令和工具再加上公共程序,对于 shell 脚本来说,都是可调用的。Shell 脚本对于管理系统任务和其它的重复工作的例程来说,表现的非常好,根本不需要那些华而不实的成熟紧凑的编译型程序语言。

2.2 Bash常用功能

1、命令补全(Command-Line Completion)

        在 Bash(或任何其他的 Shell)下输入命令时你不必把命令输全,按下 Tab 键, Shell 就能自动补全你所要输入的命令。

pw # 输入pw之后按下,自动补全为 pwd

2、通配符

        使用通配符会使命令输入变得更简单。

字符含义*匹配 0 或多个字符?匹配任意一个字符[…]匹配任何包含在括号里的单字符 pw* # 输入pw之后输入*,自动把 pw* 替换为 pwd

3、命令历史记录

        Bash 也支持命令历史记录。这意味着 Bash 保留了一定数目的你先前已经在 Shell 里输入过的命令。Bash 把先前输入的命令文本保存在一个历史列表中。当你用你的帐号登录后历史列表将根据一个历史文件被初始化。历史文件的文件名被一个叫 HISTFILE 的 Bash 变量指定。历史文件的缺省名字是 .bash_history 。这个文件通常在你的用户目录($HOME)中。(注意该文件的文件名以一个句号开头,这意味着它是隐含的,仅当你带 -a 或 -A参数的 ls 命令列目录时才可见)。

        使用历史记录列表最简单的方法是用 上方向键(↑)。按下上方向键后最后键入的命令将出现在命令行上,再按一下则倒数第二条命令会出现,以此类推。如果上翻多了的话也可以用向下的方向键来下翻。如果需要的话,显示在命令行上的历史命令可以被编辑。

4、重定向

        Linux Shell 重定向分为两种,一种输入重定向,一种是输出重定向;从字面上理解,输入输出重定向就是改变输入与输出的方向的意思。

    输入输出方向就是数据的流动方向:

输入方向就是数据从哪里流向程序。数据默认从键盘流向程序,如果改变了它的方向,数据就从其它地方流入,这就是输入重定向。输出方向就是数据从程序流向哪里。数据默认从程序流向显示器,如果改变了它的方向,数据就流向其它地方,这就是输出重定向。 输出重定向

        输出重定向是指命令的结果不再输出到显示器上,而是输出到其它地方,一般是文件中。这样做的最大好处就是把命令的结果保存起来,当我们需要的时候可以随时查询。此外,输出重定向可以用于把一个命令的输出当作另一个命令的输入时。输出重定向的符号是 > 。

        重定向举例,当你要把 ls 命令的输出保存为一个名为 1.out 的文件时,你可以使用下面的命令:

ls > 1.out 输入重定向

        输入重定向就是改变输入的方向,不再使用键盘作为命令输入的来源,而是使用文件作为命令的输入。输入重定向的使用与输出重定向很相似,但是输出重定向的符号是 < 。

5、管道

        管道可以把一系列命令连接起来。这意味着第一个命令的输出会通过管道传给第二个命令而作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,以此类推。而管道行中最后一个命令的输出才会显示在屏幕上(如果命令行里使用了输出重定向的话,将会放进一个文件里)。

6、提示符

        Bash 有两级用户提示符。第一级是你经常看到的 Bash 在等待命令输入时的提示符。缺省的一级提示符是字符$(如果是超级用户,则是#号)。

7、作业控制(Job Control)

        作业控制能够控制当前正在运行的进程的行为。特别地,你能把一个正在运行的进程挂起,稍后再恢复它的运行。Bash 保持对所有已启动的进程的跟踪,你能在一个正在运行的进程的生命期内的任何时候把它挂起或是使它恢复运行。

        按下 Ctrl-Z 使一个运行的进程挂起。bg 命令使一个被挂起的进程在后台恢复运行,反之 fg 命令使进程在前台恢复运行。这几个命令在当用户想在后台运行而意外的把它放到了前台时,经常被用到。当一个命令在前台被运行时,它会禁止用户与 Shell 的交互,直到该命令结束。这通常不会造成麻烦,因为大多数命令很快就执行完了。如果你要运行的命令要花费很长的时间的话,我们通常会把它放到后台,以使我们能在前台继续输入其他命令。

8、 用户化配置bash

        把任何想每次进入 Bash 都执行的命令放到初始化文件里。Bash 的初始化文件叫做 profile。每个使用 Bash 的用户都有一个 .profile 文件在他的用户目录里(也可能是.bash_profile)。Bash在每次启动时都读取这个文件,并执行所有包含的命令。启动 Bash 时会读取指定的配置文件,以规划 Bash 的工作环境。

系统配置文件,设置所有用户的环境 /etc/profile /etc/profile # 一般来说设置的变量主要有以下 PATH # 根据用户标识符(UID)决定要不要将系统命令目录/sbin加入到PATH MAIL # 根据账号设置mailbox->/var/spool/mail/账号 HISTSIZE # 历史命令记录条数, 一般为1000 USER HOSTNAME # 调用的外部数据 /ert/profile.d/*.sh, 并且具有r权限, 则会被/etc/profile调用 # 这个目录指定了操作接口的颜色, 命令的别名等, 可自行新建sh文件并设置一些共享的命令别名 用户配置文件,即个人设置文件 ~/.bash_profile ~/.bash_login ~/.profile # 调用的外部数据 ~/.bashrc /etc/bashrc 读取配置文件         修改完配置文件后,需要在下次登录后才能生效,可利用如下命令重新读取配置文件 source ~/.bashrc . ~/.bashrc 参考 Shell基础:http://c.biancheng.net/view/706.htmlShell和Bash的区别:https://blog.csdn.net/wenlifu71022/article/details/4069929Bash Shell 的操作环境:https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/90.html


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3