2.1访问命令行
要输入命令,首先要得到一个能提供命令行交互界面的shell,那shell又是什么呢?
2.1.1 shell
所谓shell,是指“为用户提供用户界面”的软件,通常分为两类:命令行和图形界面,但一般指的是命令行界面的解析器。
一般来说,shell是指操作系统中,为访问内核提供服务的程序,比如输入一条命令,是需要通过shell将命令翻译给内核去执行相应的动作。shell也用于泛指所有为用户提供操作界面的程序,也就是程序和用户交互的层面
在红帽操作系统中,已经包含了多种shell,不同的shell,命令会有所差异,而红帽操作系统,默认采用的是bash这个shell,也是目前使用最广泛的linux shell,所以本教材主要针对bash shell进行讲解。
可通过以下命令查看系统自带了哪些shell:
[root@server ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
那怎么打开一个shell呢?其实很简单,我们得到的命令行界面,就是一个shell,或通过SSH远程连接也是打开了一个shell。当我们触发了一个shell,会得到一个提示符:
[root@server ~]#
·中括号内分别表示:登陆用户名@主机名 当前路径
·#:表示当前是root用户
·$:表示当前是一个普通用户
2.1.2虚拟控制台(tty)
一个键盘、一个鼠标、一个显示器就是一个控制台。每打开一个终端,就虚拟出一个控制台,也就是说一个终端就是一个虚拟控制台,同时触发一个shell进程。
如果有安装图形化,默认系统自带有6个控制台。第一个控制台运行图形界面;第二至第六个运行文本界面。
如果没有安装图形脂,则只有5个虚拟控制台,全是文本界面。
那么怎么在虚拟控制台之间互相切换呢?使用ctrl+alt+f键进行切换,f1对应第一个控制台,f2对应第二个控制台,以至类推。
例1
[root@server ~]# echo hello world > /dev/tty2
向第二个控制台发送一句话:hello world、
此时,切换到第二个控制台,就可看见这句话
2.1.3终端(pts)
所谓终端,就是动态生成的虚拟的控制台,比如一个SSH远程连接,就会产生一个虚拟控制台。在图形环境下,可以支持多个虚拟终端控制台,而每个虚拟控制台可以作为一个独立的终端。
例2
前提:打开两个终端
[root@server ~]# who
root tty1 2017-03-01 14:37
root pts/0 2017-03-01 15:10 (192.168.1.1)
root pts/1 2017-03-01 16:10 (192.168.1.1)
who命令用于查看有哪些用户登陆到当前系统,以及所使用终端
[root@server ~]# echo hello > /dev/pts/1
从0号终端,向1号终端发送hello
这时,在1号终端显示该字符
2.1.4命令行基本语法
命令、选项(以-或--开头)、参数
所谓命令就是一个可执行文件,文件本身包含了可执行的程序代码,那命令的可执行文件在哪儿呢?
例3
[root@server ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
可以看到ls命令就是/usr/bin/ls这个文件
which命令是用来查找所有可执行的命令文件所在具体位置
那为什么无论在什么位置直接执行命令就可以了,而不用指定命令的完整路径呢?那是因为系统有个PATH环境变量,执行某个命令的时候,系统会到PATH环境指定的路径里面去寻找这些命令的可执行文件,如果找到,就执行,如果没找到,会提示找不到这个命令。
例4
[root@server ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
打印PATH这个变量的值,所有命令所在路径,以冒号(:)隔开
如果一个新命令所在目录不在PATH环境变量中,怎么办呢?只需将新命令所在路径加入到PATH环境变量值中即可
例5
[root@server ~]# PATH=$PATH:/dir
增加/dir路径到PATH变量中
2.1.5 TAB补全
输入命令、选项、参数时,可以通过tab键补全功能来减轻输入压力。键入的内容如果足够使其唯一,按一次tab键即可补全,如果键入的内容不够使其唯一,按两次tab键,即可以显示以键入的字符为开头的所有命令。
在RHEL7/CentOS7以前的版本中,bash自动补全功能仅限于命令和文件名,然而网络设备往往可以自动补全命令的参数,常常让搞网络出身的工程师唏嘘不已。
在新出的RHEL7/CentOS7中的Bash已经可以自动补全命令参数了,需要注意的是RHEL7/CentOS7的默认安装类型是最小安装,它是没有这个功能的。要启用这个功能,你需要安装一个bash-completion包,然后退出bash,重新登录即可(未重启bash的情况下继续使用可能出现补全功能异常,出现一堆代码)。
例6
[root@server ~]# rpm -qa |grep bash-completion
查看bash-complition这个包有没有装
关于rpm,后面会有具体讲解
2.1.6命令历史记录
在每个用户的家目录,都有一个隐藏的历史记录文件:.bash_history。当一个用户登陆成功后,这个用户所有的历史记录会先记录到内存中,当正常退出这个用户时,才会将内存中的历史记录写到.bash_history文件中
例7
[root@server ~]# cat /root/.bash_history
查看root用户的历史记录文件
上面的例子,查看的只是当次root用户登陆之前的历史记录,那当前的历史记录怎么查呢?主要使用history命令
历史记录命令:
[root@server ~]# histroy
查看历史命令记录
[root@server ~]# !1
执行历史记录中编号为1的命令
[root@server ~]# !ca
执行历史记录中最近的一个以ca开头的命令。
[root@server ~]#!$
表示上一个命令的最后一段字符
历史记录快捷键:
上、下箭头
可以上下查阅历史记录
左、右箭头
在当前命令行中左右移动光标
esc+.
将上一命令的最后一个参数复制到当前命令行光标处,重复使用,将继续到更早的命令。
alt+.
将上一个命令的最后一段字符复制到当前,重复使用。
ctrl+r
在历史记录列表中搜索某一模式的命令
history -c
清除历史
2.1.7命令行快捷键
ctrl+a
光标定位到命令行首
ctrl+e
光标定位到命令行尾
ctrl+u
将光标处前面的内容清除
ctrl+k
将光标处后面的内容清除
ctrl+左箭头
跳到命令行中前一字的开头
ctrl+右箭头
跳到命令行中下一字的末尾
ctrl+c
截断进程
ctrl+l
清空屏幕
9.等待安装完