Bash shell系列里,由变量谈起,先讲到环境变量的功能与修改的问题, 然后会继续提到历史指令的运用。接下来,就会谈一下『数据流重导向』这个重要概念,
最后就是管线命令的利用!

一  Bash shell简介

管理整个硬件的其实是核心 (kernel),一般使用者 (user) 则是以
shell 来跟核心沟通~

我们常常提到的 shell 其实是比较狭隘的定义,一般来说,在 Linux 里头,所谓的 shell 就是指 BASH 这个文字模式的 shell 。但是,广义的 shell 也可以是 KDE 之类的图形接口控制软件呢! 因为他也可以帮我们与
kernel 进行沟通。

那么我们来了解一下 Linux 使用的是哪一个 shell 呢?检查一下 /etc/shells 这个档案,至少就有底下这几个可以用的 shells:

    /bin/sh (已经被 /bin/bash 所取代)

    /bin/bash (就是 Linux 预设的 shell)

    /bin/ksh (Kornshell 由 AT&T Bell lab. 发展出来的,兼容于 bash)

    /bin/tcsh (整合 C Shell ,提供更多的功能)

    /bin/csh (已经被 /bin/tcsh 所取代)

    /bin/zsh (基于 ksh 发展出来的,功能更强大的 shell)

我这个使用者预设会取得哪一个 shell 啊?!



还记得我们在 首次进入 Linux -- 以文字方式登入 那个章节当中提到的登入动作吧?当我登入的时候,系统就会给我一个 shell 让我来工作了。 而这个登入取得的 shell 就记录在 /etc/passwd 这个档案内!这个档案的内容是啥?

[root@linux ~]# cat /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

.....(中间省略).....

二  Bash shell 功能简介

chap1    BASH 主要的优点有底下几个:



1) 命令编修能力(类似 DOS 的 doskey 功能):

『记忆使用过的指令!』 指令列按『上下键』就可以找到前一个输入的指令!记录的档案在你的家目录的.bash_history ! ~/.bash_history 记录的是前一次登入以前所执行过的指令,
这一次登入所执行的指令都被暂存在暂内存中,当您成功的注销系统后,该指令记忆才会记录到 .bash_history 当中! 



2) 命令与档案补全功能:

    [Tab] 接在一串指令的第一个字的后面,则为命令补全;

    [Tab] 接在一串指令的第二个字以后时,则为『档案补齐』!

    如果我想要知道我的环境中,所有可以执行的指令有几个? 就直接在 bash 的提示字符后面输入两个 [tab][tab] 就能够输出所有的可执行指令了。 



3) 命令别名(alias)设定功能:

    alias lm='ls -al'



4) 工作控制(jobs)、前景背景控制:

    资源管理章节中会再提及



5) Shell scripts 的强大功能:



在 DOS 年代还记得将一堆指令写在一起的所谓的『批次档』吧?在 Linux 底下的 shell scripts 则发挥的更为强大的功能,可以将您日常生活当中常需要下达的连续指令写成一个档案, 该档案并且可以透过对谈交互式的方式来进行主机的侦测工作!整个设计下来几乎就是一个小型的程序语言了!以前在
DOS 底下需要程序语言才能写的东西,在 Linux 底下使用简单的 shell scripts 就可以帮你达成了



6) 万用字符*



举例来说,想要知道 /usr/X11R6/bin 底下有多少以 xt 为开头的档案吗?ls -l /usr/X11R6/bin/xt* 就能够知道啰~此外,还有其它可供利用的万用字符, 这些都能够加快使用者的操作.



chap2  内建命令: type



为了方便 shell 的操作,其实 bash 已经『内建』了很多指令了,例如 cd , 还有例如 umask 等等的指令, 那我怎么知道这个指令是来自于外部指令(指的是其它非 bash 套件所提供的指令) 或是内建在 bash 当中的呢:



[root@linux ~]# type [-tpa] name



参数:

:不加任何参数时,则 type 会显示出那个 name 是外部指令还是 bash 内建的指令!

-t :当加入 -t 参数时,type 会将 name 以底下这些字眼显示出他的意义:

file :表示为外部指令;

alias :表示该指令为命令别名所设定的名称;

builtin :表示该指令为 bash 内建的指令功能;

-p :如果后面接的 name 为指令时,会显示完整文件名(外部指令)或显示为内建指令;

-a :会将由 PATH 变量定义的路径中,将所有含有 name 的指令都列出来,包含 alias



范例一:查询一下 ls 这个指令是否为 bash 内建?

[root@linux ~]# type ls

ls is aliased to `ls --color=tty'

# 没有加上任何参数,仅列出 ls 这个指令的最主要使用情况

[root@linux ~]# type -t ls

alias

# -t 参数则仅列出 ls 这个指令的最主要使用情况说明

[root@linux ~]# type -a ls

ls is aliased to `ls --color=tty'

ls is /bin/ls

# 利用所有方法找出来的 ls 相关信息都会被列出来!



范例二:那么 cd 呢?

[root@linux ~]# type cd

cd is a shell builtin

鸟哥的私房菜:Bash shell(一)-Bash shell功能简介的更多相关文章

  1. 鸟哥Linux私房菜基础学习篇学习笔记3

    鸟哥Linux私房菜基础学习篇学习笔记3 第十二章 正则表达式与文件格式化处理: 正则表达式(Regular Expression) 是通过一些特殊字符的排列,用以查找.删除.替换一行或多行文字字符: ...

  2. 鸟哥Linux私房菜基础学习篇学习笔记2

    鸟哥Linux私房菜基础学习篇学习笔记2 第九章 文件与文件系统的压缩打包: Linux下的扩展名没有什么特殊的意义,仅为了方便记忆. 压缩文件的扩展名一般为: *.tar, *.tar.gz, *. ...

  3. 鸟哥Linux私房菜基础学习篇学习笔记1

    鸟哥Linux私房菜基础学习篇学习笔记1 第三章 主导分区(MBR),当系统在开机的时候会主动去读取这个区块的内容,必须对硬盘进行分区,这样硬盘才能被有效地使用. 所谓的分区只是针对64Bytes的分 ...

  4. [Linux]《鸟哥的私房菜》笔记 (缓慢更新)

    暂时不更新了..这几天一看起书来发现内容很多,这样写blog太慢,也没意义.所以现在是每天看书,在笔记本上记笔记,再配合着<操作系统>和 linux内核 加深理解.往后会以心得体会为主写一 ...

  5. linux: 鸟哥的私房菜

    鸟哥的私房菜 http://vbird.dic.ksu.edu.tw/linux_basic/0320bash.php

  6. 鸟哥Linux私房菜知识汇总8至9章

    一看最近<鸟哥Linux私房菜>. 这是一个基本的书,万丈高楼平地起,学. 这是我整理的一些知识点.尽管非常基础. 希望和大家共同交流. 第8章 Linux磁盘与文件系统管理 一.Linu ...

  7. 鸟哥linux私房菜第6章笔记

    鸟哥linux私房菜第6章笔记 文件权限 修改 chgrp [-R] groupname filename //修改文件所属组 chown [-R] ownername[:groupname] fil ...

  8. 学习鸟哥linux私房菜--安装centos5.6(u盘安装,中文乱码)

    题头为"学习鸟哥Linux私房菜"的内容,均为博主在看鸟哥的Linux私房菜第三版的学习经历收获.以下正文: 鸟哥第一部分讲Linux规则与安装,看到第四章正式开始讲实际安装,于是 ...

  9. 鸟哥的私房菜:Bash shell(六)-管道命令

    就如同前面所说的, bash 命令执行的时候有输出的数据会出现! 那么如果这群数据必需要经过几道手续之后才能得到我们所想要的格式,应该如何来设定? 这就牵涉到管线命令的问题了 (pipe) ,管线命令 ...

  10. 鸟哥的私房菜:Bash shell(四)-Bash shell的使用环境

    Bash shell(四)-Bash shell的使用环境   是否记得我们登入主机的时候,屏幕上头会有一些说明文字,告知我们的 Linux 版本啊什么的, 还有,登入的时候,我们还可以给予使用者一些 ...

随机推荐

  1. Laravel 5.5 迁移报错:General error: 1215 Cannot add foreign key constraint

    问题 之前一直用的 Laravel 5.4,数据库也是直接写 sql 的,感觉可定制性更强,顺便锻炼下 sql.这次改用了 Laravel 5.5,索性用迁移建库试试,结果报错如下: SQLSTATE ...

  2. sleep允许休眠, delay不允许

    在Linux Driver开发中,经常要用到延迟函数:msleep,mdelay/udelay. 虽然msleep和mdelay都有延迟的作用,但他们是有区别的. 1.)对于模块本身 mdelay是忙 ...

  3. Oracle 函数 “把当前的用户(审核人,审核通过后)插入到数据表中”

    create or replace function mcode_apply_update_personnel(p_mca_no VARCHAR2, -- 参数(实参) p_action VARCHA ...

  4. webpack性能优化-实战

    题外话:年初项目重构上线,项目技术栈使用vue+webpack,测试执行整个打包流程需要10分钟,同时又因涉及三个渠道,部署好环境就需半个小时,这严重延误了上线进度,因此提高webpack构建效率,成 ...

  5. WORDPRESS登录后台半天都无法访问或者是访问慢的解决方法

    wordpress登录后台如果打开速度慢,一般分为两部分,第一部分是php虚拟主机的原因,其中主机的原因,又分为很多种情况.第二部分就是WordPress程序本身的问题.这里无忧主机小编主要是讲第二部 ...

  6. 自定义Adapter为什么会重复多轮调用getView?——原来是ListView.onMeasure在作祟

    相信很多人在使用自定义Adapter的时候都遇到这样的问题: 假设Adapter数据源中只有30个Item,理论上每显示一个新的Item的时候就会调用一次getView,均显示一次的话是要调用getV ...

  7. mysqlsla 安装

    tar -zxvf mysqlsla-2.03.tar.gz cd mysqlsla-2.03 perl Makefile.PLmake && make install BEGIN f ...

  8. PHP随机浮点数

    function randomFloat($min = 0, $max = 1) { $rand = mt_rand(); $lmax = mt_getrandmax(); return $min + ...

  9. mongodb导入导出

    导出 mongoexport -d 数据库 -c 表名 -o 输出文件名 例:mongoexport -d Mongodb_DataManager -c Kujiale_Users -o Kujial ...

  10. TypeScript学习笔记(四) - 类和接口

    本篇将介绍TypeScript里的类和接口. 与其他强类型语言类似,TypeScript遵循ECMAScript 2015标准,支持class类型,同时也增加支持interface类型. 一.类(cl ...