第4章 Linux系统命令行入门基础
4.1 Linux命令行概述
4.1.1 Linux命令行的作用与意义
众所周知,Linux是一个主要通过命令行来进行管理的操作系统,即通过键盘输入指令来管理系统的相关操作,包括但不限于编辑文件、启动停止服务等。这与初学者曾经熟悉的Windows系统使用鼠标点击这类可视化管理大不相同。
使用鼠标进行可视化管理的优势是简单、容易上手,缺点是不能方便快速、批量、自动化地管理系统,而且感觉系统也很臃肿,这个时候Linux系统的命令行管理优势就凸显出来了。使用Linux命令行进行管理,不但可以批量、自动化管理,还可以实现智能化、可视化管理,当然,后者需要开发人员配合开发管理界面来完成,但无论如何,Linux系统的优势基因还是快速、批量、自动化、智能化管理系统及处理业务。
4.1.2 Linux命令行介绍
安装Linux系统时,无论是使用文本模式(命令行)安装,还是使用图形模式安装,最终管理系统的任务都会落到命令行上。
大多数互联网企业在安装系统时甚至不会安装图形管理软件包,而是直接使用文本模式安装,因此登录后直接面对的就是命令行的界面(如图4-1所示)。
图4-1 通过SSH客户端(Xshell)连接Linux系统后的命令行图
4.1.3 Linux命令行的开启及退出
在开启主机时,Linux系统会经过一系列的引导和程序加载,最终将会出现登录前的提示界面(如图4-2所示)。
在图4-2中,将光标定位到“login:”字符串后面,输入超级用户管理员root后,按回车键,弹出密码提示框后再输入密码,注意密码是不显示的。输入正确密码之后,再按回车键就可以登录到Linux系统中了(如图4-3和图4-4所示)。
图4-2 CentOS Linux系统登录界面
图4-3 CentOS Linux系统登录前输入用户密码界面
在命令行界面,执行exit或logout命令可退出命令行(如图4-5所示),当然也可以使用快捷键Ctrl+d退出命令行,退出命令行后,如果需要再次登录,还应再次输入用户名和密码(除非使用SSH客户端保存用户名和密码)。
图4-4 CentOS Linux系统登录后的命令行界面
图4-5 CentOS Linux命令行退出命令操作界面
特别提示:工作中99%的场景都不会在本节的Linux系统里直接操作,而是会通过SSH远程连接工具(例如,Xshell)远程连接到Linux系统上进行操作,对于这点,新手需要注意一下。
4.1.4 Linux命令行提示符介绍
Linux命令行结尾的提示符有“#”和“$”两种不同的符号,示例代码如下所示:
[[email protected] ~]# #<==这是超级管理员root用户对应的命令行。 [[email protected] ~]$ #<==这是普通用户oldboy对应的命令行。
对于上述代码中的提示符,说明如下。
1)“#”号是使用超级用户root登录后的命令行结尾提示符,而“$”号是使用普通用户登录后的命令行结尾提示符。
2)超级用户具有管理系统的所有权限,普通用户的权限比较小,只能进行基本的系统信息查看等操作,其无法更改系统配置和管理服务。
3)命令行提示符“@”前面的字符代表当前登录的用户(可使用whoami命令查询),“@”后面的为主机名(可使用hostname命令查询),“~”所在的位置是窗口当前用户所在的路径(可使用pwd命令查询)。示例代码如下:
[[email protected] ~]$ #<==“@”前的oldboy为当前用户,“@”后的oldboy为主机名,此处的“~”表示当前目录,即家目录。
4)Linux命令提示符由PS1环境变量控制。示例代码如下:
[[email protected] ~]# set|grep PS1 #<==注意PS1是大写的。
这里的PS1='[\[email protected]\h\W]\$',可以通过全局配置文件/etc/bashrc或/etc/profile按需进行配置和调整。
4.1.5 Linux命令行常用快捷键
这里需要特别说明一下的是,在企业工作中,管理Linux时一般不会直接采用键盘、显示器登录系统,而是会通过网络在远程进行管理,因此,这里需要通过远程连接工具连接到Linux系统中,关于远程连接的具体内容请参见第3章的内容讲解。目前最常用的Linux远程连接工具为:Xshell客户端软件,因此,本节涉及的常用命令快捷键就是基于Xshell客户端软件的,其他软件快捷键的使用情况与此基本类似。
表4-1展示的是提高Linux运维效率的命令行常用的快捷键,在此列出供读者参考查阅。
表4-1 Xshell5远程连接CentOS7 Linux命令行常用快捷键总结
注意:上述快捷键适合于SecureCRT和Xshell客户端。其中,带有符号“*”的为常用快捷键。
4.2 在Linux命令行下查看命令帮助
4.2.1 使用man获取命令帮助信息
1.man命令的基本语法
man命令是Linux系统中最核心的命令之一,因为通过该命令,可以查看其他Linux命令的使用信息。当然了,man命令不仅可以查看命令的使用帮助,还可以查看软件服务配置文件、系统调用、库函数等的帮助信息。
【功能说明】
man命令用于查看命令的帮助信息。
【语法格式】
man参数选项 命令/文件
【参数选项】
man命令的参数选项及具体说明请参见表4-2。
表4-2 man命令的参数选项及说明
【实践操作】
范例4-1:查看cp指令的帮助
[[email protected] ~]# man cp #<==系统管理员一般常见的用法还是直接使用man命令,不带参数。
2.利用man查阅命令帮助内容的格式说明
当我们使用“man命令”查询各命令所对应的帮助时,帮助内容中的标题格式所对应的含义具体见表4-3。
表4-3 执行“man命令”后帮助内容中的标题介绍
注意:表4-3中带有符号“*”的为重点功能说明。
可能有一些读者不习惯英文,希望看到中文的man帮助手册,这种情况可以将系统调整为中文的字符集或单独安装man的中文包,不过遗憾的是,man的中文手册内容“年久失修”,与英文手册相去甚远,建议大家还是多查看man的英文帮助,看得多了,自然就容易看懂了。
3.进入man帮助页面中的快捷键功能说明
执行“man命令”进入到man帮助页面中,实际上就相当于是浏览一个文本文件,可以利用表4-4中的快捷键快速浏览查阅想要查找的内容。
表4-4 man帮助页面中的快捷键
man命令也包含了很多其他的参数,但是在实际工作中几乎是用不到的,如果有部分读者在工作中需要使用man的特殊参数,那么可以使用“man man”命令进行查阅。
4.2.2 使用--help参数获取命令帮助信息
除了可以使用“man命令”来查看命令的帮助信息之外,还可以使用“--help命令”查看命令的使用信息(如图4-6所示),虽然这个输出有时比较简单,但相应地查看起来也会更方便。
图4-6 带--help的命令帮助
读者也可以用中文显示命令的帮助信息,只需调整系统字符集为“zh_CN.UTF-8”即可。
[[email protected] ~]# LANG="zh_CN.UTF-8" [[email protected] ~]# echo $LANG zh_CN.UTF-8
特别说明:工作中到底是使用“man命令”还是“--help命令”呢?建议结合使用,“--help命令”获取的是基础常用的帮助信息,“man命令”获取的是更多更复杂的帮助信息。
4.2.3 使用help命令获取bash内置命令帮助
在Linux系统里有一些特殊的命令,它们是bash程序的内置命令,例如cd、history、read等,这些命令在系统目录里没有真实的程序文件存在(这些文件存在于bash程序里),对于这部分命令而言,查看帮助的方法就是使用help命令,示例代码如下:
[[email protected] ~]# help cd cd: cd [-L|-P] [dir] Change the shell working directory. Change the current directory to DIR. The default DIR is the value of the HOME shell variable.
提示:如果使用man cd,那么通常会查不到帮助信息,而是会进入bash的帮助页面。
有关Linux各种内置命令的讲解详见后文。
4.2.4 使用info获取帮助信息
Linux系统中的info命令是一个查看程序对应文档信息的命令,可以作为man及help命令的帮助补充。不过一般在企业运维工作中,很少会有机会需要使用info去查询命令的使用帮助,因此,知道有这个命令就可以了,普通读者无需关注太多。使用info命令查看命令帮助的语法操作与man类似,示例代码如下:
[[email protected] ~]# info ls File: coreutils.info, Node: ls invocation, Next: dir invocation, Up: Directory listing 10.1 `ls': List directory contents ================================== The `ls' program lists information about files (of any type, including directories). Options and file arguments can be intermixed arbitrarily, as usual.
4.2.5 从互联网搜索获取命令帮助信息
除了Linux系统自带的帮助功能之外,通过互联网搜索引擎查找命令的帮助信息,可能是很多初学者默认选择的方法,使用互联网搜索引擎查找命令的关键字如图4-7所示。但是当你逐渐熟悉了Linux以后,还应该养成使用man或help查看帮助的习惯,这对读者的能力提升极为关键,当你有了较全面的能力时,无论从什么渠道获取信息都是很有必要的,怎么快捷怎么处理就好了。
图4-7 使用搜索引擎查找命令帮助信息
特别说明:对于搜索引擎的使用,优先顺序建议为:www.google.com(需要翻墙才行)→www.bing.com→www.baidu.com。
4.3 Linux关机重启注销命令
4.3.1 重启或关机命令:shutdown
【功能说明】
shutdown是一个用来安全关闭或重启Linux系统的命令,系统在关闭之前会通知所有的登录用户,系统即将关闭,此时所有的新用户都不可以再登录了,与shutdown功能类似的命令还有init、halt、poweroff、reboot。
【语法格式】
shutdown [OPTION]... TIME [MESSAGE] shutdown [选项] 时间 消息
技巧说明:
1)注意shutdown命令与后面的选项之间至少要有一个空格。
2)通常情况下,我们执行的shutdown命令为shutdown-h now或shutdown-r now。
【选项参数】
参数选项及说明见表4-5。
表4-5 shutdown命令的参数选项及说明
说明:表中带※符号的为重点说明。
shutdown命令的工作过程就是当用户执行了对应参数并附带关机时间的命令之后,其会通知所有的用户即将关机,并且在这个时间内禁止新用户登录;当到了指定的关机时间时,shutdown命令会根据参数选项,发送请求给系统的init进程,请求将系统调整到对应参数的状态(例如,“-h”参数),系统的关机状态实际上对应的是Linux系统里的运行级别0。与系统关机相关的运行级别有:0(关机运行级别)-halt,6(重启运行级别)-reboot。更多信息请查看/etc/inittab文件。
【实践操作】
范例4-2:关机或重启系统的常见操作
一分钟后关闭Linux系统的命令如下:
[[email protected] ~]# shutdown -h +1 #<==1分钟后关闭Linux系统。 Shutdown scheduled for 三 2019-01-30 17:26:31 CST, use 'shutdown -c' to cancel. Broadcast message from [email protected] (Wed 2019-01-30 17:25:31 CST): #<==通知所有用户关机信息。 The system is going down for power-off at Wed 2019-01-30 17:26:31 CST! #<==关机时间提示。 ^C #<==按Ctrl+c快捷键取消。
上述代码中,结尾的“+1”表示的是关机的时间段,即1分钟后关机,当然,你也可以改为5分钟后关机,这个时间段是以当下系统时间为准来计算的,时间段也可以改为具体的时间点。
shutdown命令的工作原理如下:一旦到达关机时间,那么shutdown命令会发送请求给系统的init进程将系统调整到合适的运行级别(运行级别命令请参考runlevel命令),其中,0表示关机,6表示重启。所以,执行“init 0”就表示关机,执行“init 6”就表示重启。
11点整重启Linux系统的命令如下:
[[email protected] ~]# shutdown -r 11:00 Shutdown scheduled for Thu 2019-01-31 11:00:00 CST, use 'shutdown -c' to cancel.
其中,结尾的11:00表示的是关机的时间点,比如说,下午19:00我要和一个女生约会,那么19:00就是一个时间点。本命令相当于是在11:00的时候告诉init进程把运行级别调整为6,即相当于执行了“init 6”命令。
立即关闭Linux系统的命令如下:
[[email protected] ~]# shutdown -h now
在工作中,一般使用得比较多的都是立即关闭系统命令。
4.3.2 关机与重启命令:shutdown/halt/poweroff/reboot/systemctl
【功能说明】
halt、poweroff、reboot这三个命令对应的是同一个man帮助文档,而halt、poweroff、shutdown、reboot命令都是systemctl命令的链接文件(CentOS7),有关CentOS6的描述,请参考本书第一版图书。
[[email protected] ~]# ls -l `which reboot` `which poweroff` `which halt` `which shutdown` lrwxrwxrwx. 1 root root 16 Jan 29 23:20 /usr/sbin/halt -> ../bin/systemctl lrwxrwxrwx. 1 root root 16 Jan 29 23:20 /usr/sbin/poweroff -> ../bin/systemctl lrwxrwxrwx. 1 root root 16 Jan 29 23:20 /usr/sbin/reboot -> ../bin/systemctl lrwxrwxrwx. 1 root root 16 Jan 29 23:20 /usr/sbin/shutdown -> ../bin/systemctl [[email protected] ~]# which systemctl /usr/bin/systemctl
【语法格式】
reboot [OPTION]... halt [OPTION]... poweroff [OPTION]... systemctl [command] #<==CentOS7的独有命令。
对于上述这几个命令的参数,由于实在是没有什么价值,因此这里就不为读者介绍了。
【实践操作】
范例4-3:关机或重启系统的常见操作
使用halt关机的命令如下:
[[email protected] ~]# halt #<==在CentOS7.6中,此处改为了systemctl halt。 Connection closed by foreign host. Disconnected from remote host(老男孩教育-核心基础教材-192.168.2.217) at 18:02:35. Type `help' to learn how to use Xshell prompt.
使用poweroff关机的命令如下:
[[email protected] ~]# poweroff #<==在CentOS7.6中,此处改为了systemctl poweroff。 Connection closed by foreign host. Disconnected from remote host(老男孩教育-核心基础教材-192.168.2.227) at 18:22:16. Type `help' to learn how to use Xshell prompt.
使用systemctl reboot重启系统的命令如下:
[[email protected] ~]# systemctl reboot #<==在CentOS6中,此处就是reboot。 Connection closed by foreign host. Disconnected from remote host(老男孩教育-核心基础教材-192.168.2.217) at 18:23:39. Type `help' to learn how to use Xshell prompt.
CentOS7系统中,systemctl有关关机、重启功能的命令小结如表4-6所示。
表4-6 CentOS7系统systemctl有关机、重启功能的命令
提示:CentOS7里新增的systemctl命令功能十分强大,我们后续再慢慢与大家讲解相关内容。
4.3.3 关机、重启和注销的命令列表
本章结尾为读者总结了Linux(CentOS6和CentOS7都适用)下常见的关机、重启、注销等命令,并标注了企业中的常用命令,具体见表4-7。
表4-7 Linux下常见的关机、重启、注销命令集合
4.4 本章相关问题
1)请描述Linux命令行提示符的含义及控制变量。
2)Linux命令行常用的快捷键有哪些?
3)如何在Linux命令行下查看帮助?
4)请说出你知道的Linux系统的重启和关机命令。