shell特性

命令历史

Linux会自动记录系统过去执行的命令,并保存在内存的缓冲区中(内存数据在重启后会消失)
在每个用户的home目录下,有个隐藏文件.bash_history保存命令历史(只有当用户正常退出当前shell时,当前shell中运行的命令才会保存到文件中)

# history    查看执行过后的Linux命令历史
    -c:清空命令历史
    -d:删除某一条命令历史(示例:history -d 4 4    #这里-d后面第一个参数是删除第几条,第二个参数是延续第一个参数继续删除多少条)
    -w:将命令历史保存在某个文件中

变量:PATH命令路径变量
    HISTSIZE:命令历史大小变量

    echo $HISTSIZE    #查看HISTSIZE变量的值,默认的命令历史是1000条。
使用技巧:
    !!:执行上一条命令
    !n:执行命令历史第n条命令(n是命令历史编号)
    !-n:执行命令历史中的倒数第n条命令(n是命令历史编号)
    !word:执行命令历史中最近一次以word开始的命令(word必须能够唯一的标识用户想执行的命令) 
    !$:引用一个命令的最后一次执行的命令
    ESC键(按完松开)再按.键:引用一个命令的最后一次执行的命令

管道,重定向

冯诺依曼体系结构

  • 运算器(是CPU的功能用于读取系统指令)
  • 运算器(CPU进行)
  • 存储器(RAM内部存储器,易失性存储器)
  • 输入设备(Input,用于输入数据比如:键盘、硬盘等)
  • 输出设备(Output,用于输出指令执行结果比如:显示器,音箱,硬盘等)

计算机总线

  • 地址总线(负责内存寻址)
  • 数据总线(负责传输数据)
  • 控制总线(负责控制指令)

寄存器(CPU中内部临时存储空间)

I/O设备(负责计算机内部存储和外部存储设备进行交互的设备)

程序:指令+数据;那指令是什么?指令是由程序提供,用来加工数据。数据来自可以来自变量、文件、输入设备等。要是没有指定数据来源时会指定到标准输入/输出设备
标准输入设备有(stdin):键盘,文件描述符为0
标准输出设备有(stdout):显示器,文件描述符为1
标准错误输出设备(stderr):显示器,文件描述符为2

三种数据流:标准输入数据流、标准输出数据、流标准错误输出数据流

当在Linux中打开一个文件时,内核会反复调用一些输入/出设备,对于文件标识就很重要了,用文件描述符来标识文件,文件加载完成用数字表示(fd:file descriptor文件描述符)

IO重定向:是当用户没有为指令指定数据来源时,系统要有一个默认来源,有可能是输入或输出设备。重定向是把默认的输入或输出的数据来源,重新定向到其他的文件或设备。
输出重定向

  • &gt:覆盖输出重定向
  • &gt&gt:追加输出重定向
  • 2&gt:错误覆盖输出重定向
  • 2&gt&gt:错误追加输出重定向
  • &&gt:混合覆盖输出重定向(不区分正确或错误)
  • &&gt&gt:混合追加输出重定向

输入重定向

  • <:输入重定向

管道:用 | 连接多条命令,把前一条命令的输出结果作为后一条命令的输入条件。

tr 它用来实现字符转换,并不修改源文件,语法是:tr [OPTION] ...

例子:ls / | tr [a-z] [A-Z] #ls显示/目录下的所有文件与文件夹,并把它传给tr转换成大写字母。

tee #它与>相似,它会把文件输出到屏幕上并写入到文件中。
例子:ls / | tee show.out #这条命令会把显示/目录下的文件与文件夹,并用管道把它传给tee命令进行使用,tee将ls穿过来的内容进行屏幕显示并写入到show.out文件

重定向补充
标准输出和标准错误输出默认都输出到屏幕
[test@centos7 ~]$ find /home -iname .bashrc > file 2>&1 #将标准错误输出重定向到标准输出先将标准输出到file文件最后再把错误输出到标准输出,这里的标准输出就是前面file文件。
[test@centos7 ~]$ find /home -iname .bashrc > file 1>&2 #将标准输出重定向到错误这里的变换等同于上一条。

-符号意义用于当做 stdout 或 stdin。
下面命令tar -cvf -减号的位置是当做标准输出(结果会输出到屏幕上) ./saa是输入

[root@centos7 home]# tar cvf - ./saa 
./saa
./saa0000644000000000000000000000371013452642177010414 0ustar  rootrootabrt
adjtime

命令别名

alias COMM_ALIAS=COMMAND  #注意:执行alias命令时,COMMAND最好用''(引号)引起来,只执行alias命令,会列出系统中所有的命令别名。

unalias COMM_ALIAS  #取消命令别名

命令行编辑

学会一些快捷键会提高在命令行中的效率,别指望一次性全部记住,当你想到要用的时候回来看看,照着敲,次数多了自然就记住了。
这张图忘了从那个blog上下的,如有侵权请留言,我尽快处理。
bash快捷键.jpg
Ctrl+_ #撤销刚刚输入的内容。
Ctrl+p #返回上一个执行过的命令。对应键盘↑
Ctrl+n #返回一下个命令。对应键盘↓
Ctrl+a #从光标位置快速跳到行首
Ctrl+e #从光标位置快速跳到行尾
Ctrl+u #删除光标前所有字符。
Ctrl+k #删除光标后所有字符
Ctrl+h #删除光标前一个字符。
Ctrl+d #1.删除光标后一个字符。2.在终端没有字符的情况下退出当前终端(exit也可以)。
Ctrl+w #删除光标前的单词
Alt+d #删除光标后的单词
Ctrl+l #命令全部占满屏幕看的不舒服,清屏(等同于clear命令)。
Ctrl+i #用来补全和敲两个tab作用一致。
Ctrl+j #用来执行命令和敲enter一致
Ctrl+y #粘贴剪切板内容
Ctrl+c #终止当前命令
Ctrl+z #暂停当前进程,可以用fg恢复进程。
Ctrl+Shift+C #复制
Ctrl+Shift+V #粘贴
!! #调用上一条执行过的命令
!$ #调用上一条执行过的命令的参数,最好使用Alt+.显视的把参数调出来。
Ctrl+r #根据你输入的关键词搜索历史命令,搜索不满意可以再次输入关键词继续使用Ctrl+r来搜索。不过不能上下翻页这一点算是遗憾。
Ctrl+g/Ctrl+c #退出搜索
Shift+PageUp/PageDown #可以在 Shell 中翻页查看已经执行过的命令(在图形化 Shell 窗口可以代替鼠标滑轮呀,纯 CLI Shell 你可没法用鼠标 hhh)

命令行展开

命令补齐:在PATH变量搜索命令并补齐(PATH变量必须正常,输入要补齐的字符数一定能够唯一标识这条命令;tab键补齐)
echo $PATH //查看PATH变量的值
按tab键两次,列出以某个字符开始所有的命令
命令行补齐功能不能补齐选项
路径和文件补齐:在系统路径中查找

命令替换:(经常用到shell编程当中) $(command)或`command`(两边是反撇号)
echo "字符串"

""(双引号):弱引用(可实现变量的替换,把变量名替换为变量值)
`` (反撇号):命令引用
''(单引号):强引用(不能完成变量替换)

命令行通配(Wildcard)

*:匹配任意长度的任意字符
?:匹配任意单个字符
[]:匹配指定范围内的任意单个字符
    [a-z] [A-Z] [0-9] [a-zA-Z] [a-zA-Z0-9]    //匹配会包含开始字母与结束字母
[^]:匹配指定范围外的任意单个字符
    [^a-z] [^A-Z]    //与上面相反(不匹配中括号内的字符)
[:space:]:表示空格          //在使用时要加上[]列如:[[:space:]]
[:punct:]:表示所有标点符号
[:lower:]:表示所有小写字母
[:upper:]:表示所有大写字母
[:alpha:]:表示所有字母(包括大小写)
[:digit:]:表示所有数字
[:alnum:]:表示所有数字和大小写字母

man文档的使用

获取 Linux 命令的帮助信息最常用的是下面两种方式。

内部命令使用 help [command],外部命令使用 [command] --help,另一个是用 man,前者是简要信息,后者更为详细。

man 所有手册存放在 /usr/share/doc 目录。

进到内页后的一些操作

  • ↑ ↓ 或 Enter 键进行翻行。
  • Pagedown 向上翻页
  • Pageup 向下翻页
  • /word:从上往下查找关键字,找到关键字后可以用 n 再次向下查找,N 反之。
  • ?word 从下往上查找关键字
  • q 退出当前帮助信息

既然是手册,当然会有不同的篇章,下面是介绍。
1 Executable programs or shell commands :可执行程序或shell命令,普通用户命令 (/bin /usr/bin /usr/local/bin):binary二进制
2 System calls (functions provided by the kernel) :系统调用库。
3 Library calls (functions within program libraries) :程序库调用。
4 Special files (usually found in /dev) :设备或特殊文件(硬件设备 放在 /dev)。
5 File formats and conventions eg /etc/passwd 查看配置文件格式
6 Games :游戏。不知道为什么还存在这种东西。
7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7): 杂项
8 System administration commands (usually only for root) :系统管理员命令(/sbin /usr/sbin /usr/local/sbin)。
9 Kernel routines [Non standard]
以上 section 标题眼熟就好,在实际使用过程中是 man section command 这样来找到对应内容,当然也不是每个 section number 都记得很清楚,可以使用 man -a command 来找到所有篇章内容,这样就方便不少。

man 内容相关标题说明:
NAME #命令名称及简要用法
SYNOPSIS #语法格式,可能包括一些选项的使用
DESCRIPTION #命令和命令选项的详细说明
Exit status #退出状态码
AUTHOR #作者信息
REPORTING BUGS(BUG) #发现bug时如何反馈信息
COPYRIGHT #该命令的版权信息
SEE ALSO #另外参照的帮助信息
OPTIONS #说明该命令每一个选项的详细用法
EXAMPLES #命令使用实例

一般看 man 手册都是查命令的详细使用方法,下面是 SYNOPSIS 相关说明。

  • <> 必须使用的选项或参数,不可省略。
  • [] 可以省略的选项或参数。
  • ... 可以使用多个选项或参数。
  • | 或,表示在多个[选项1|选项2|选项3]中必须选择一个。
  • {} 表示分组,或是一个范围,这个范围内必须选择一个。

info 在线(不是联网)查看帮助,注重命令历史,版权信息等。

whatis 查看命令所在的帮助信息目录,该命令在系统启动大约 70m 后会生成 whatis 数据库,如果时间太短,该命令不会执行,我们可以使用 makewhatis 初始化该命令(7.0 中使用 mandb 来更新数据库,6.0 版本使用 makewhatis 更新数据库)

参考链接

标签: none

讨论讨论讨论!