本文共 2049 字,大约阅读时间需要 6 分钟。
shell介绍
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/adf37bbaf91ca310c91638411a8c2957.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- shell是一个命令解释器,提供用户和机器之间的交互。
- 用户配置的最后一个段 就是shell
- 创建的普通的用户 它的shell是bin bash
- 每个用户都可以有自己的shell sentos7 的shell 是bash
- 除此之外还有 zsh ksh ,用起来和bash 很像,但是有细节上的差异。
- 仓库里面提供的也有zsh 和ksh的rpm包,可以去yum安装它。-
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/643066be2d098dd4e3a8ad88c728f578.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- shell还有自己特定的语法,比如逻辑判断等。
命令历史
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/965b49f401596c9458539bf8d3cf16ad.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 敲过的命令是又一个文件保存着的。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/3733aa5d67fc2d485605307117bc74e4.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 可以cat 看一下之前敲过的命令。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/94191eaffa6d0109a6e10d40f143dc55.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 可以用history 查看之前的命令 最大存储1000条。
- 是由环境变量配置的,echo $HISTSIZE
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/a0d2ac04c1205a0adaf4f800f11f0f94.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 有时候敲命令出现1004 或者更多,是因为这些命令还没有写到环境变量中去。
- history -c 可以把当前内存里面的历史清空 但是配置文件里面的是没有清空的。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/d8b542144b8fb990ec38eed724f3daa7.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 敲的命令是退出终端才会保存到配置文件中去。
- HISTSIZE环境变量需要到etc/profile 当中进行修改。
- 比如觉得1000太少,可以修改为5000
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/54c688052d1c1bf256022a4046429e9f.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 保存退出后,再去查看还是1000 需要重启终端或者 运行source /etc/profile 才会生效。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/02cb94b04c1b3b599880db33f562bc6d.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- history去查看,只有id号和命令, 其实也可以显示出时间。
- HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S " 指定这个变量的格式。
- echo $ HISTTIMEFORMAT 格式已经更换了。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/b2efc4bd7ca59e229deb74bb00c87195.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 这个环境变量仅仅是在当前终端生效的,去从新复制个渠道去查询是空的,也就是在另一个渠道,系统默认这个环境变量是不存在的。需要去定义它。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/4c03b3d419de4c81ee8a8748489cb266.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 再次history 查看 就显示时间和日期了。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/b2c26523c4f5f71bc2cba134889504c0.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 想让这个生效,还可以编辑etc/profile 把这个环境变量写到下面。
- 然后 sorce一下。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/c63e9eeccaa0884f673d1710f5e76818.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/6f8d66bae5822d88d53f1b5203c54a81.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 再从新打开一个渠道,就发现已经生效了。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/cd671aa5503321b920b7b47e99bfd2aa.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 想让记录的命令 永久保存,不被删除,可以给它增加一个隐藏权限 a权限。增加后只能追加不能删除掉,用户所有的命令都会记录下来。但是有特殊的情况,如果没有正常退出终端的话 会记录不完整。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/8502079fcbc9f38818e29a44b9bb5297.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- !!两个叹号是上一条命令 也就是你最后输的一条命令。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/b1765ba195c1a17ef1c89ac2d33ede7f.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- !+数字 是重复执行 你所输入数字的命令。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/b43a38cd842cc1d26f10a9819171333e.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- !+字符串,就可以倒着往上数使用 最近的一次 使用 的字符串的命令。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/391db9988417fc153de3a542e3d7ab6a.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
命令补全和别名
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/aafb83e50f6821670eb6540b9e9481ae.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- tab 补全 不仅可以补全命令 还可以补全文件和目录名。
- 当文件 或者命令名 开头一样 后面的不一样 需要两次tab
- 在sentos7里面可以补全参数 但是默认是没有的,需要yum 安装。
- yum install - y bash-completion
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/3baa9cb29a1097c1698416a64e8d8790.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 这个时候还是不行的 需要重启一下才能生效。
- reboot 重启。 然后就可以自动补全了。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/d732459c14d8445d7df0eb67fc1b1006.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- alias 别名 给命令重新起名字 比如 这个重启网络服务的命令很长,我们可以给他重起个名字,简单一点。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/695a11b4ad489ca3c20c680a9d3a71ab.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 取消别名的命令是unalias +别名
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/c380de702085f2026a471001f04b4248.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- alias都有哪些 可以直接alias 把这些都列出来,
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/493a52eb7e956eee7b1e77db889dc03c.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 这些alias都在哪里 用户家目录下.bashrc里面有三个, 其他的都在etc/profile.d/下。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/29996dcbcf5056931a08a0bab8608d91.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/f00e65ab8223279b5ec0d9a6839ccc58.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
通配符
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/16d157d681186c36039312c656fd5c6e.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 之前有用过 *就是通配的意思,
- 比如当前目录下有几个txt文件,就可以用来把它们都列出来。也可以txt 也可以在两边 txt*
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/4742f9f5238a637bb364f849b7b58aeb.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 也可以在后面 比如 1* ,1开头的不管是目录还是文件都会列出来。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/905e15f7ab408484e2e399ef66633f6b.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 还有? 表示一个任意一个字符。 (bb.txt没有列出来 因为是两个字符)
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/16b9cffbd581c86ffbda0b500a799b13.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 还有[ ] 里面可以写一个范围,比如ls【0-3】.txt 只要这个范围内任意一个满足方括号内的条件,就会被列出来。 也可以写如数字 加上大写
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/08393c9f40a5e613905a9f089c224261.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 还有{} 和[ ]差不多, 但是要加个逗号。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/c257bd13ea563d1da51a3e995d6c90dd.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
输入输出重定向
- >是把前面的命令输出 给输入到后面的文件里面去。
- 比如cat 1.txt>2.txt 会把1.txt删除掉重写。
- >> 是追加, 不会删除之前命令的内容。
- 2> 会把这个命令产生的错误信息给指定输入到一个文件里去。
- 比如运行一个有问题的错误命令。他会提示没有命令,用2> 就会把这个错误的命令 写到一个文件里, cat查看 就会看到这个错误命令。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/975ff63fc128b973e2e23f748367987f.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 2>> 错误追加重定向。 (linux的追加就是在文件里 再后面加一些内容)
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/e634f777a973b4aaa39572be45485022.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- >+2>=&> 也就是这两个可以结合起来。可以把错误 正确的输出信息 定向到一个文件里去
- 做个实验:
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/df4dccd7e3760982b98089fb4c2ba341.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 同样也可以追加。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/8d2e353d979903a3357f4131816ffaac.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 也可以这样写 比如 ls [123].txt abc.txt >1.txt 2>a.txt
- 这样就可以分开,
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/167de2f421eb0e459a319e14f51ea50b.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 这样就可以把正确和错误区分开, 以后写shell脚本用的比较多。
- < 输入重定向。 可以把右边的文件内容 输入重定向 一个文件或者命令里面。
- 比如把1.txt 输入重定向到一个命令里面去。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/f862d2489b0ead79275479c3f5ff657d.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
- 这里要注意 输入重定向只能是一个输入到一个命令 不能是文件。
![学习笔记第二十二节课](https://s1.51cto.com/images/blog/201804/20/37af272547621cadb9e3aa03a8d8ad59.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
-
转载于:https://blog.51cto.com/13645927/2105978