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

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

         文章链接:

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

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

    邮箱: 424346976@qq.com

       优快云:http://blog.youkuaiyun.com/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 分存到不同的文件去
[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,今天的内容大概就是这些,如果有什么写的不对的,求大神指正,我们下篇文章见:)

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



目 录 一、Linux基础 5 1.什么是Linux? 5 2.什么是自由软件、GNUGPL? 5 3.从技术上说,Linux有什么优点? 5 4.我需要学习Linux吗? 5 5.Linux会取代Windows吗? 6 6.LinuxWindowsNT谁更好? 6 7.LinuxUNIX有什么不同? 6 8.Linux能应用在哪些领域呢? 6 9.Linux作系统发展现状未来如何? 6 10.Linux对软件业有什么影响呢? 6 11.我该如何学习Linux呢? 6 12.网上有哪些Linux资源? 7 13.RedHat Linux 6.5Linux 2.4哪个版本高? 7 14.Linux的发行版有哪些? 7 15.RedHat Linux有哪些特点? 7 16.TurboLinux有哪些特点? 7 17.BluePoint、Xterm、RedFlag三种中文Linux谁好? 7 18.哪种版本Linux适合我? 7 19.如何得到Linux? 8 二、用户用户组管理 8 ※一、Linux系统用户账号的管理 8 ※1、添加新的用户账号使用useradd命令,其语法如下: 8 ※2、删除帐号 8 ※3、修改帐号 8 ※4、用户口令的管理 9 ※二、Linux系统用户组的管理 9 ※1、增加一个新的用户组使用groupadd命令。其格式如下: 9 ※2、如果要删除一个已有的用户组,使用groupdel命令,其格式如下: 9 ※3、修改用户组的属性使用groupmod命令。其语法如下: 9 ※4、如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其它用户组的权限。用户可以在登录后,使用命令newgrp切换到其它用户组,这个命令的参数就是目的用户组。 10 ※三、用户账号有关的系统文件 10 ※1、/etc/passwd文件是用户管理工作涉及的最重要的一个文件。 10 ※2、/etc/shadow中的记录行/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生。 11 ※3、用户组的所有信息都存放在/etc/group文件中。 11 四、赋予普通用户特殊权限 12 三、文件系统结构基本文件处理 13 ※1.文件类型 13 ※2.文件系统结构 14 ※3.主目录当前工作目录 14 ※4.路径、绝对路径相对路径 15 ※5.查看当前目录pwd 15 ※6.浏览文件系统cd 15 ※7.创建删除文件(touchrm) 15 ※8.创建删除目录(mkdir rmdir) 16 ※9.查看目录内容文件属性ls 17 ※10.确定文件类型file 18 ※11.文件的复制移动(cp mv) 18 ※12.查看文件内容cat、head、tail、more、less 19 ※13.统计文件大小wc 21 14./etc文件系统 22 15./dev文件系统 22 16./usr文件系统 23 17./var文件系统 23 18./proc文件系统 24 四、高级文件处理 24 ※1.文件比较diff 24 ※2.删除重复行uniq 25 3. 不唯一 26 4. 对特定域进行测试 26 ※5.文件排序sort 26 ※6.文件的查找find 30 ※1、使用name选项 31 ※2、用perm选项 31 ※3、忽略某个目录 31 ※4、使用usernouser选项 31 ※5、使用groupnogroup选项 32 ※6、按照更改时间或访问时间等查找文件 32 ※7、查找比某个文件新或旧的文件 32 ※8、使用type选项 32 ※9、使用size选项 33 ※10、使用depth选项 33 ※11、使用混合查找方式查找文件 33 ※7.搜索文件内容grep 34 ※2. grep正则表达式元字符集(基本集) 34 ※8.cut and paste 35 ※9.文件合并jion 37 ※10.文件分割split 38 ※11.文件的压缩 38 ※1.gzip 、zcat命令 39 ※2.bzip2、bzcat 39 ※3.tar (打包文件或目录) 40 ※12.设备挂载mount 40 ※1.制作ISO文件 40 ※2.挂接移动硬盘 41 ※3.挂接U盘 42 、文件安全权限 42 ※1.文件安全策略 42 ※2.文件权限位 42 ※3.文件类型 43 ※4.改变权限chmod 43 ※4.1符号模式 43 ※4.2绝对模式 44 ※目录 44 ※5.chownchgrp 44 ※6.umask 45 7.Set UID、Set GID、Sticky Bit 46 8.文件隐藏属性 47 9.lsattr(显示文件的隐藏属性) 48 10.SUIDSGID的详细解析 48 11.Linux病毒 49 六、Shell 50 1.内核Shell 50 ※2.shell的功能 50 3.输入输出 52 ※3.1 echo 52 ※3.2 read 54 ※3.3 cat 54 ※3.4 Tee 55 ※4.输入输出复位向、管道 55 5.变量 58 5.1.什么是shell变量 58 ※5.2.本地变量 58 ※5.3.环境变量 64 ※5.4.位置变量参数 67 ※七、Linux 进程管理 69 1、程序进程 69 1.1 进程分类; 69 1.2 进程的属性; 69 1.3 父进程子进程; 69 2、进程管理; 69 2.1 ps 监视进程工具; 69 2.2 pgrep 71 3、终止进程的工具 kill 、killall、pkill、xkill; 71 4、top 监视系统任务的工具; 73 5、进程的优先级:nicerenice; 73 八、脚本 77 ※1. Linux 脚本编写基础 77 ※1.1 开头 77 ※1.2 注释 77 ※1.3 变量 77 ※1.4 环境变量 77 ※2.条件判断 77 ※test 文件运算符 78 ※字符串比较运算符 80 ※整数比较运算符 81 ※布尔运算符 83 3.流程控制 86 ※3.1 if 86 ※3.2.case 87 ※3.3. selsect 88 ※3.4.loop 89 ※3.5. Here documents 90 ※3.6函数 90 ※4.命令行参数 91 九、shell 十三问 91 二、关于{}() 91 ※七、 exec 跟 source 差在哪? 这次先让我们从 CU Shell 版的一个实例贴子来谈起吧:例中的提问是: 92 八、 ( ) { } 差在哪? 95 ※九、 $(( )) $( ) 还有${ } 差在哪? 97 ※十、 $@ $* 差在哪? 101 ※十一、 && || 差在哪? 103 ※Part-I: Wildcard 112 ※Part-II: Regular Expression 113 ※十、功能最强大的编辑器——vi 117 1.vi的基本状态 117 2.vi的基本操作 117 3.离开vi及存文件 117 4.Command mode功能键列表 117 5.Last line mode下指令简介 118 ※十一、ifconfig 119 十二、write 命令 122 用途: 122 语法: 123 描述: 123 工作站 123 参数 123 标志 124 退出状态 124 示例 124 文件 125 十三、关于 Linux系统中关机命令详细解析 125 1.shutdown 125 2.halt----最简单的关机命令 126 3.reboot 126 4.init 126 十四、软件安装 127 十Linux操作系统中备份恢复技术的详解 129 十六、GRUB使用说明 131
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值