轻松学习之Linux教程五 认识与学习bash

本系列文章由@超人爱因斯坦出品,转载请注明出处。

        
文章链接:

         http://hpw123.net/a/Linux/Linuxjichu/2014/1031/101.html

         作者:超人爱因斯坦    个人网站:http://www.hpw123.net

    邮箱: [email protected]

CSDN:http://blog.csdn.net/u010283694

在Linux的环境下,如果你不懂bash是什么,那么其他的东西就不用学了,因为前面教程使用终端执行命令的方式,就是通过bash的环境处理的,所以它很重要,bash的东西很多,包括变量的设置与使用,bash操作环境的构建,数据流重定向的功能,还有好用的管道命令。

好了,让我们进入主题吧:

一.硬件、内核与shell

二.bash shell的功能

命令记忆能力(history)

命令与文件补全功能([Tab]按键的好处)

命令别名设置功能(alias)

作业控制、前台、后台控制(job control, foreground, background)

程序脚本(shell script)

三.bash的环境配置文件

  • login与non-login shell

        login
shell:取得bash时需要完整的登陆流程的,就称为login shell,举例来说,你要由tty1~tty6登陆,需要输入用户的账号密码,此时取得的bash就称为“login shell”

        non-login shell:取得bash接口的方法不需要重复登陆的举动,举例来说,你以X
Window登陆Linux后,在以X的图形界面启动终端机,此时那个终端接口并没有需要再次输入账号与密码,那个bash的环境就称为non-login shell了,你在原本bash环境下再次执行bash这个命令,同样也没有输入账号密码,那第二个bash(子进程)也是non-login shell

  • /etc/profile(login shell才会读)

这是系统整体的设置,你最好不要修改这个文件,bash的login shell情况下所读取的整体环境配置文件其实只有/etc/profile,但是/etc/profile还会调用其他的配置文件

  • ~/.bash_profile(login shell才会读

   bash在读完了整体环境设置的/etc/profile并借此调用其他配置文件,接下来会读取用户的个人配置文件,分别是~/.bash_profile  ~/.bash_login  ~/.profile  其实bash的login shell设置只会读取三个文件中的一个,读取顺序依照我写的顺序,也就是说~/.bash_profile存在,那么其他两个文件不论是否存在,都不会被读取

  • source:读入环境配置文件的命令

如果你将自己的设置写入了/etc/profile或~/.bash_profile通常都是注销后再登陆后改设置才会生效,那么能不能直接读取配置文件二不注销呢?哈哈,可以的,使用source就ok了,如source /profile

  • ~/.bashrc(non-login shell会读)

 当你取得non-login shell 时,该bash配置文件仅会读取~/.bashrc而已

  • 其它相关配置文件

~/.bash_history   ~/.bash_logout 想了解这些的朋友可以自行百度啦,百度功底是需要慢慢培养地呢。

  • bash默认组合键

四.通配符与特殊符号

五.数据流重定向

大家要问,为何要使用命令输出重定向?

  • 屏幕输出的信息很重要,而且我们需要将它存下来的时候;
  • 后台执行中的程序,不希望它干扰屏幕正常的输出结果时;
  • 一些系统的例行命令(例如写在/etc/crontab中的文件)的执行结果,希望它可以存下来时;
  • 一些执行命令的可能已知错误信息时,想以“2>/dev/null”将它丢掉时;
  • 错误信息与正确信息需要分别输出时。

如何进行重定向?

  1. 标准输入(stdin):代码为0,使用<或<<;
  2. 标准输出(stdout):代码为1,使用>或>>;
  3. 标准错误输出(stderr):代码为2,使用2>或>>
  • 1>:以覆盖的方法将正确的数据输出到指定的文件或设备上;
  • 1>>:以累加的方法将正确的数据输出到指定的文件或设备上;
  • 2>:以覆盖的方法将错误的数据输出到指定的文件或设备上;
  • 2>>以累加的方法将错误的数据输出到指定的文件或设备上;
//将 stdout 与 stderr 分存到不同的文件去
[[email protected]:~]$ find /home -name .bashrc > list_right 2> list_error

/dev/null垃圾桶黑洞设备与特殊写法

//将错误的数据丢弃,屏幕上显示正确的数据
[[email protected]:~]$ find /home -name .bashrc 2> /dev/null /home/dmtsai/.bashrc <==叧有 stdout 会显示刡屏幕上, stderr 被丢弃了

standard input:<与<<

//用 stdin 替代键盘的输入以建立新档案的简单流程
[[email protected]:~]# cat > catfile < ~/.bashrc
[[email protected]:~]# ll catfile ~/.bashrc -rw-r--r-- 1 root root 194 Sep 26 13:36 /root/.bashrc-rw-r--r-- 1 root root 194 Feb 6 18:29 catfile
// 注意看,这两个档案的大小会一模一样!几乎像是使用 cp 复制一般!

如果我要用cat直接将输入的信息输出到catfile中,且当由键盘输入eof时,该次输入就结束,那我可以这样做

[[email protected]:~]#cat > catfile << "eof"
> This is a test.
> OK now stop
> eof <==输入这关键词,立刻就结束而不需要输入 [ctrl]+d
[[email protected]:~]# cat catfile
This is a test. OK now stop <==叧有这两行,不会存在关键词那一行!

五.命令执行的判断依据: ;  &&  ||

哈哈,如果我想一次输入多个命令去执行那该怎么办啊

在命令与命令中间利用分号(;)来隔开,这样一来,分号前的命令执行完后就会立刻接着执行后面的命令啦,这真是方便啊,如果前一个命令是否执行成功与后一个命令是否要执行有关,那就得动用到&&和||啦

六.管道命令(pipe)

符号|         解析:管道符左边命令的输出就会作为管道符右边命令的输入

管道命令流程

1.选取命令:cut,grep

[[email protected] ~]# cut -d‘分隔字符‘ -f fields <==用于有特定分隔字符
[[email protected] ~]# cut -c 字符区间 <==用于排列整齐的信息
选项参数:
-d :后面接分隔字符。与-f 一起使用;
-f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段得意思; -c :以字符 (characters) 的单位取出固定字符区间;
[[email protected] ~]# grep [-acinv] [--color=auto] ‘搜寻字符串‘ filename
选项参数:
-a :将 binary 文件以 text 文件方式搜寻数据
-c :计算找到 ‘搜寻字符串‘ 的次数
-i :忽略大小写的不同,所以大小写规为相同
-n :顺便输出行号 -v :反向选择,亦即显示出没有 ‘搜寻字符串‘ 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示喔!

2.排序命令:sort,wc,uniq

[[email protected] ~]# sort [-fbMnrtuk] [file or stdin]
选项参数:
-f :忽略大小写的差异,例如 A 与a 视为编码相同;
-b :忽略最前面的空格符部分;
-M :以月份的名字排序,例如 JAN, DEC 等等的排序方法;
-n :使用『纯数字』进行排序(默认是以文字型态排序的);
-r :反向排序;
-u :就是 uniq ,相同的数据中,仅出现一行代表;
-t :分隔符,预讴是用 [tab] 键分隔;
-k :以那个区间 (field) 来进行排序的意思
[[email protected] ~]# uniq [-ic]
选项参数:
-i :忽略大小写字符的不同;
-c :进行计数
[[email protected] ~]# wc [-lwm]
选项参数:
-l :仅列出行;
-w :仅列出多少字(英文单字);
-m :多少字符;

3.双向重定向:tee

[[email protected] ~]# tee [-a] file
选项参数: -a :以累加 (append) 的方式,将数据加入 file 当中!
//不加a是以覆盖的方式

4.字符转换命令:tr,col,join,paste,expand

[[email protected] ~]# tr [-ds] SET1 ...
选项参数:
-d :删除信息当中的 SET1 这个字符串;
-s :替代掉重复的字符!

[[email protected] ~]# col [-xb]
选项参数:
-x :将 tab 键转换成对等的空格键
-b :在文字内有反斜杠 (/) 时,仅保留反斜杠最后接的那个字符

[[email protected] ~]# join [-ti12] file1 file2
选项参数:
-t :join 默认以空格符分隔数据,并且比对『第一个字段』的数据, 如果两个档案相同,则将两笔数据联成一行,且第一个字段放在第一个!
-i :忽略大小写的差异;
-1 :这个是数字的 1 ,代表『第一个文件要用那个字段杢来分析』癿意思;
-2 :代表『第二个文件要用那个字段来分析』癿意思。

[[email protected] ~]# paste [-d] file1 file2
选项参数:
-d :后面可以接分隔字符。预设是以 [tab] 来分隔的!
- :如果 file 部分写成 - ,表示来自 standard input 的资料的意思。

[[email protected] ~]# expand [-t] file
选项参数:
-t :后面可以接数字。一般来说,一个 tab 按键可以用 8 个空格键替代。 我们也可以自行定义一个 [tab] 按键代表多少个字符呢!
[[email protected] ~]# split [-bl] file PREFIX
选项参数:
-b :后面可接欲分割成的文件大小,可加单位,例如 b, k, m 等;
-l :以行数来进行分割。
PREFIX :代表前导符的意思,可作为分割文件前导文字。

5.参数代换:xargs

[[email protected] ~]# xargs [-0epn] command
选项参数:
-0 :如果输入的 stdin 中有特殊字符,例如 `, \, 空格键等等字符时,这个 -0 参数 可以将他还原成一般字符。这个参数可以用于特殊状态喔!
-e :这个是 EOF (end of file) 的意思。后面可以接一个字符串,当 xargs 分析到这个字符串时,就会停止继续工作!
-p :在执行每个指令的 argument 时,都会询问使用者的意思;
-n :后面接次数,每次 command 指令执行时,要使用几个参数的意思。

6.关于减号-的用途

在管线命令当中,常常会使用到前一个指令的 stdout 作为这次的 stdin , 某些指令需要用到文件名 (例如 tar) 来进行处理时,该 stdin 不 stdout 可以利用减号 "-" 来替代,
举例来说:

[[email protected] ~]# tar -cvf - /home | tar -xvf -

上面这个例子是说:『我将 /home 里面的文件给他打包,但打包的数据不是记录到文件,而是传送到stdout; 经过管线后,将 tar -cvf
- /home 传送给后面的 tar -xvf - 』。后面的这个 - 则是取用前一个指令的
 stdout, 因此,我们就不需要使用 file 了!这是最常见的例子喔!注意注意!

    ——————————超人爱因斯坦于2014年11月1日更新

?

ok,今天的内容大概就是这些,如果有什么写的不对的,求大神指正,我们下篇文章见:)

呵呵,让我们轻松一下吧    美图

时间: 2024-10-31 06:34:05

轻松学习之Linux教程五 认识与学习bash的相关文章

轻松学习之Linux教程三 玩转Linux常用命令

本系列文章由@超人爱因斯坦出品,转载请注明出处.         文章链接:          http://hpw123.net/a/Linux/Linuxjichu/2014/1025/89.html 作者:超人爱因斯坦    个人网站:http://www.hpw123.net 邮箱: [email protected] CSDN:http://blog.csdn.net/u010283694 知道吗?Linux有多种不同的操作方式,图形界面与文字界面,使用命令操作的时候,怎么用这些命令,

轻松学习之Linux教程六 正则表达式详解

本系列文章由@超人爱因斯坦出品,转载请注明出处. 作者:超人爱因斯坦    个人网站:http://www.hpw123.net          文章链接:http://hpw123.net/a/Linux/Linuxjichu/2014/1101/104.html     邮箱: [email protected] CSDN:http://blog.csdn.net/u010283694 正则表达式是一些特殊字符的排列,用以查找.替换.删除一些或多行文字字符串,简单的说,正则表达式就是用在字

轻松学习之Linux教程四 神器vi程序编辑器攻略

本系列文章由@超人爱因斯坦出品,转载请注明出处.           文章链接:          http://hpw123.net/a/Linux/Linuxjichu/2014/1026/93.html          作者:超人爱因斯坦   个人网站:http://www.hpw123.net         邮箱:[email protected]         CSDN:http://blog.csdn.net/u010283694 文本编辑器有很多,比如图形模式的gedit.k

轻松学习之Linux教程二 一览纵山小:Linux操作系统详解

本系列文章由@超人爱因斯坦出品,转载请注明出处.         文章链接:          http://hpw123.net/member/index.php?uid=hpw&action=viewarchives&aid=66 作者:超人爱因斯坦    个人网站:http://www.hpw123.net 邮箱: [email protected] CSDN:http://blog.csdn.net/u010283694 这篇文章主要是介绍Linux,让大家认识Linux是什么,着

轻松学习之Linux教程二 一览纵山小:Linux操作系统具体解释

本系列文章由@超人爱因斯坦出品,转载请注明出处.         文章链接:          http://hpw123.net/a/Linux/Linuxjichu/2014/1021/70.html 作者:超人爱因斯坦    个人站点:http://www.hpw123.net 邮箱: [email protected] CSDN:http://blog.csdn.net/u010283694 这篇文章主要是介绍Linux,让大家认识Linux是什么,着重解说其文件夹树及文件权限: 嘿嘿.

javaweb学习总结(四十五)——监听器(Listener)学习二

一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器. 这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener 和ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换

redis学习教程五《管道、分区》

redis学习教程五<管道.分区> 一:管道 Redis是一个TCP服务器,支持请求/响应协议. 在Redis中,请求通过以下步骤完成: 客户端向服务器发送查询,并从套接字读取,通常以阻塞的方式,用于服务器响应. 服务器处理命令并将响应发送回客户端. 管道的意义 管道的基本含义是,客户端可以向服务器发送多个请求,而不必等待回复,并最终在一个步骤中读取回复. 示例 要检查Redis管道,只需启动Redis实例,并在终端中键入以下命令. (echo -en "PING\r\n SET t

【Linux】鸟哥的Linux私房菜基础学习篇整理(五)

1. type [-tpa] name:查看name命令是否为bash内置命令.参数:type:不加任何参数,type会显示出那么是外部命令还是bash的内置命令:-t:当加入-t参数时,type会通过如下关键字显示其意义: file:表示为外部命令 alias:表示为命名别名 builtin:表示为bash的内置命令-p:如果后面接的name为外置命令时,才会显示完整文件名:-a:会由PATH变量定义的路径中,将含有name的命令都列出来,包含别名. 2. unset name:取消变量名na

《Linux实验楼》第四次、第五次周学习总结

<Linux实验楼>第四次.第五次周学习总结 实验介绍: 第四次Linux 目录结构及文件基本操作 一 实验内容 Linux 的文件组织目录结构. 相对路径和绝对路径. 对文件的移动.复制.重命名.编辑等操作. 二 实验知识点 每个目录的大体内容 文件的属性 touch,file,rm,mv 等基本命令 学习到的知识点有: 在进行目录切换的过程中请多使用 Tab 键自动补全,可避免输入错误,连续按两次 Tab 可以显示全部候选结果. 创建名为 test 的空白文件,因为在其它目录没有权限,所以