zoukankan      html  css  js  c++  java
  • L轻松学习inux教程5 知识与学习bash

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

      

             文章链接:

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

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

        邮箱: 424346976@qq.com

           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登陆。须要输入用户的账号password,此时取得的bash就称为“login shell”

            non-login shell:取得bash接口的方法不须要反复登陆的举动。举例来说,你以X Window登陆Linux后,在以X的图形界面启动终端机,此时那个终端接口并没有须要再次输入账号与password,那个bash的环境就称为non-login shell了,你在原本bash环境下再次运行bash这个命令,相同也没有输入账号password,那第二个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 分存到不同的文件去
    [hpw@hpw-Lenovo-Erazer-Z500:~]$ find /home -name .bashrc > list_right 2> list_error
    /dev/null垃圾桶黑洞设备与特殊写法



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


    standard input:<与<<


    //用 stdin 替代键盘的输入以建立新档案的简单流程 
    [hpw@hpw-Lenovo-Erazer-Z500:~]# cat > catfile < ~/.bashrc 
    [hpw@hpw-Lenovo-Erazer-Z500:~]# 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时,该次输入就结束,那我能够这样做
    [hpw@hpw-Lenovo-Erazer-Z500:~]#cat > catfile << "eof"
    > This is a test. 
    > OK now stop 
    > eof <==输入这关键词,立马就结束而不须要输入 [ctrl]+d 
    [hpw@hpw-Lenovo-Erazer-Z500:~]# cat catfile 
    This is a test. OK now stop <==叧有这两行,不会存在关键词那一行!


    五.命令运行的推断根据: ;  &&  ||

    哈哈,假设我想一次输入多个命令去运行那该怎么办啊

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


    六.管道命令(pipe)

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

    管道命令流程


    1.选取命令:cut,grep

    [root@www ~]# cut -d'分隔字符' -f fields <==用于有特定分隔字符 
    [root@www ~]# cut -c 字符区间 <==用于排列整齐的信息 
    选项參数: 
    -d :后面接分隔字符。与-f 一起使用; 
    -f :根据 -d 的分隔字符将一段信息切割成为数段。用 -f 取出第几段得意思; -c :以字符 (characters) 的单位取出固定字符区间。

    [root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename 
    选项參数: 
    -a :将 binary 文件以 text 文件方式搜寻数据 
    -c :计算找到 '搜寻字符串' 的次数 
    -i :忽略大写和小写的不同。所以大写和小写规为同样 
    -n :顺便输出行号 -v :反向选择。亦即显示出没有 '搜寻字符串' 内容的那一行!

    --color=auto :能够将找到的关键词部分加上颜色的显示喔。

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

    [root@www ~]# sort [-fbMnrtuk] [file or stdin] 
    选项參数: 
    -f :忽略大写和小写的差异,比如 A 与a 视为编码同样; 
    -b :忽略最前面的空格符部分。 
    -M :以月份的名字排序。比如 JAN, DEC 等等的排序方法。 
    -n :使用『纯数字』进行排序(默认是以文字型态排序的);
    -r :反向排序; 
    -u :就是 uniq ,同样的数据中,仅出现一行代表; 
    -t :分隔符,预讴是用 [tab] 键分隔。 
    -k :以那个区间 (field) 来进行排序的意思

    [root@www ~]# uniq [-ic] 
    选项參数: 
    -i :忽略大写和小写字符的不同。 
    -c :进行计数

    [root@www ~]# wc [-lwm] 
    选项參数: 
    -l :仅列出行。 
    -w :仅列出多少字(英文单字); 
    -m :多少字符;

    3.双向重定向:tee

    [root@www ~]# tee [-a] file 
    选项參数: -a :以累加 (append) 的方式,将数据增加 file 其中。
    //不加a是以覆盖的方式


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

    [root@www ~]# tr [-ds] SET1 ... 
    选项參数: 
    -d :删除信息其中的 SET1 这个字符串; 
    -s :替代掉反复的字符!

    [root@www ~]# col [-xb] 选项參数: -x :将 tab 键转换成对等的空格键 -b :在文字内有反斜杠 (/) 时。仅保留反斜杠最后接的那个字符 [root@www ~]# join [-ti12] file1 file2 选项參数: -t :join 默认以空格符分隔数据,而且比对『第一个字段』的数据, 假设两个档案同样。则将两笔数据联成一行,且第一个字段放在第一个!

    -i :忽略大写和小写的差异。 -1 :这个是数字的 1 ,代表『第一个文件要用那个字段杢来分析』癿意思。 -2 :代表『第二个文件要用那个字段来分析』癿意思。 [root@www ~]# paste [-d] file1 file2 选项參数: -d :后面能够接分隔字符。

    预设是以 [tab] 来分隔的! - :假设 file 部分写成 - ,表示来自 standard input 的资料的意思。

    [root@www ~]# expand [-t] file 选项參数: -t :后面能够接数字。一般来说。一个 tab 按键能够用 8 个空格键替代。

    我们也能够自行定义一个 [tab] 按键代表多少个字符呢!


    [root@www ~]# split [-bl] file PREFIX 
    选项參数: 
    -b :后面可接欲切割成的文件大小,可加单位,比如 b, k, m 等。 
    -l :以行数来进行切割。

    PREFIX :代表前导符的意思,可作为切割文件前导文字。

    5.參数代换:xargs

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


    6.关于减号-的用途

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

    [root@www ~]# tar -cvf - /home | tar -xvf -

    上面这个样例是说:『我将 /home 里面的文件给他打包,但打包的数据不是记录到文件,而是传送到stdout; 经过管线后。将 tar -cvf - /home 传送给后面的 tar -xvf - 』。

    后面的这个 - 则是取用前一个指令的 stdout, 因此,我们就不须要使用 file 了!这是最常见的样例喔!

    注意注意!

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



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

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



    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    C++笔记 谓词 1
    win7 ipv6设置(isatap)
    C++笔记
    打水印
    jquery导航滚动固定在顶部
    javascript获得属性
    tr光棒效果
    按字母查找
    js购物车
    数据采集
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4740341.html
Copyright © 2011-2022 走看看