学习目标:登录Linux系统并使用shell运行简单的命令。
掌握知识点:
- 在本地文本控制台中登录Linux系统,并使用 shell运行简单的命令。
- 使用GNOME3桌面环境登录Linux系统,并在终端程序中从shell提示符运行命令。
- 通过使用Tab补全、命令历史记录和命令编辑快捷键在Bash shell中运行命令来节省时间。
一、BASH SHELL简介
命令行是基于文本的界面,可用于向计算机系统输入指令。Linux命令行由名为shell的程序提供。
如果以交互方式使用shell,它在等待用户输入命令时显示一个字符串。这称为shell提示符。普通 用户启动shell时,默认提示符的结尾是$字符。
如果以超级用户root运行shell,则$字符替换为#字符。这可以更加显著地表明这是超级用户 shell,帮助避免出现可能会影响整个系统的意外和错误。
使用bash执行命令可以非常强大。bash shell提供了脚本语言,可支持自动化任务。shell还提供 额外功能,可以简化或实现利用图形化工具难以高效完成的操作。
1.1 SHELL基础知识
在shell提示符下输入的命令由三个基本部分组成:
- 要运行的命令
- 用于调整命令行为的选项
- 通常作为命令的目标的参数
命令是要运行的程序的名称。其后可能跟着一个或多个选项,这些选项用于调整命令的行为或其作用。选项通常以一个或两个破折号开头(例如,-a或–all),以将其与参数区分。命令后面可能也会跟着一个或多个参数,这些参数通常用于指明应在其中运行命令的目标。
例如,命令 “usermod -L lixh” 包含命令(usermod)、选项(-L)和参数(lixh)。该命令的作 用是锁定 lixh 用户帐户的密码。
# 锁定 lixh 用户帐户的密码 usermod -L lixh # 解锁 lixh 用户帐户的密码 usermod -U lixh
1.2 登录到本地计算机
要运行shell, 需要在终端中登录计算机。终端是一个基于文本的界面,用于向计算机系统输入命 令以及显示计算机系统的输出。执行此操作有几种方法。
计算机可能会具有硬件键盘和显示器,用作直接与之连接的输入和输出。这是Linux计算机的物理 控制台。物理控制台支持多个虚拟控制台,它们可以运行单独的终端。每个虚拟控制台均支持独立 的登录会话。可以同时按Ctrl+Alt和功能键(F1到F6)来切换。大多数虚拟控制台都运行提 供文本登录提示符的终端,如果正确输入用户名和密码,将登录并获得shell提示符。
计算机可以在其中一个虚拟控制台上提供图形登录提示符。可以使用该提示符来登录图形环境。 图形环境也在虚拟控制台上运行。要获得shell提示符,必须在图形环境中启动终端程序。shell 提示符在图形终端程序的应用窗口中提供。
Ctrl+Alt+F1 : GUI
Ctrl+Alt+F2 : GUI
Ctrl+Alt+F3 : Shell
Ctrl+Alt+F4 : Shell
Ctrl+Alt+F5 : Shell
Ctrl+Alt+F6 : Shell
1.3 通过网络登录
Linux用户和管理员通常需要通过网络连接到远程系统来获得对远程系统的shell访问权限。在现代计算环境中,许多无外设服务器实际上是虚拟机,或者作为公共或私有云实例运行。这些系统不是物理系统,也没有真正的硬件控制台。它们甚至可能无法提供对其(模拟的)物理控制台或串行控制台的访问。
在Linux中,获取远程系统上shell提示符的最常用方法是使用Secure Shell (SSH)大多数Linux系统(包括红帽企业Linux)和macOS提供OpenSSH命令行程序ssh来满足这一用途。
# 远程登录,通过用户名及密码登录 ssh root@192.168.0.1
ssh命令通过加密连接来防止通信被窃听或劫持密码和内容。
有一些云平台,不建议用户使用密码通过ssh登录,从而加强安全性。在不输入密码的情况下对远程计算机进行身份验证的另一种方法是利用公钥身份验证。
使用这种身份验证方法时,用户拥有包含私钥的特殊身份文件,这相当于用户保密的密码。他们在 服务器上的帐户配置有匹配的公钥,而这不必是保密的。在登录时,用户可以配置ssh来提供私 钥,如果该远程服务器上的对应帐户中安装了他们的匹配公钥,就会在不询问密码的情况下将他们 登录。
在以下示例中,计算机host上具有shell提示符的用户通过ssh使用公钥身份验证以 root 用户身份登录 192.168.0.1。利用-i选项来指定用户的私钥文件,即 mylab. pem。匹配的公钥已经设置为 root 帐户中经授权的密钥。
# 通过秘钥进行远程连接 ssh -i mylab.pem root@192.168.0.1
为使该流程正常运作,私钥文件必须只能由拥有该文件的用户读取。在上面的示例中,私钥位于 mylab. pem文件中,可以使用命令chmod 600 mylab. pem确保这一点。后面的章节中将详细探 讨如何设置文件权限。
1.4 注销
当使用完shell并想退出时,可以从几种方法中选择一种来结束会话。可以输入exit命令来终 止当前的shell会话。或者,可以通过按Ctrl+D来结束会话。
如果想注销登录的帐户,在GUI操作界面中,选择右上角的电源按钮,选择当前登录的用户,点击“注销”项即可,如果在Shell模式下,则需要使用命令“logout” 命令来登出系统。
1.5 练习
在GNOME界面中,将用户 “lixh” 的密码由 “123456” 修改为 “12341234”,并切换用户进行验证登录,判断密码是否修改成功。
二、使用BASH SHELL执行命令
GNU Bourne-Again Shell (bash)这一程序可以解读用户键入的命令。键入到shell中的每一字符串最多有三个部分:命令、选项(通常以-或-开头),以及参数。键入到shell中的每个词语通过空格相互隔开。
# 用于显示自身用户名称 whoami
如果希望在一行中键入多个命令,则可以使用分号(;)作为命令分隔符。分号是一类称为元字 符的字符的成员,对于bash具有特殊的含义。这时,系统会显示这两个命令的输出,然后显示下一shell提示符。
# 查看当前工作路径,并查看当前路径下所有文件 pwd;ls
2.1 简单命令
date命令可显示当前的日期和时间。超级用户也可以用它来设置系统时钟。以加号(+)开头的参数可指定日期命令的格式字符串。
# 显示当前日期 date # 显示当前小时与分钟 date +%R # 显示当前日期的描述,格式:年/月/日
passwd命令更改用户的密码。必须指定该帐户的原始密码,之后才允许进行更改。默认情况 下,passwd配置为需要强密码,其包含小写字母、大写字母、数字和符号,并且不以字典中的单词为基础。普通用户只能修改自己的密码,超级用户可以使用passwd命令更改其他用户的密码。
# 修改密码 passwd
file命令可以扫描文件内容的开头,显示该文件的类型。要分类的文件作为参数传递至该命令。Linux不需要文件扩展名来根据类型分类文件。
# 查看文件类型 file /etc/passwd # 查看文件类型 file /bin/passwd # 查看文件类型 file /home
2.2 查看文件内容
cat查看文件内容。Linux中一个最简单且最常用的命令是cat。通过cat命令,可以创建单个或多个文件,查看文件内容,串联多个文件中的内容,以及将文件内容重定向到终端或文件。
# 查看/etc/passwd文件的内容 cat /etc/passwd # 同时查看 file1 与 file2文件 cat file1 file2
有些文件篇幅很长,显示这些文件时所占用的空间可能要超过终端提供的大小。cat命令不会将文件的内容显示为多个页面。less命令一次显示文件的一个页面,可以随意滚动显示。
less命令允许在篇幅超过一个终端窗口适合大小的文件中向前和向后翻页。使用向上箭头键 和向下箭头键可向上和向下滚动显示。按q键退出该命令。
head和tail命令分别显示文件的开头和结尾部分。默认情况下,这两个命令显示文件的10行, 但它们都有一个-n选项,允许指定不同的行数。要显示的文件作为参数传递至这些命令。
# 显示 /etc/passwd 文件的前10行 head /etc/passwd # 显示 /etc/passwd 文件的后3行 tail -n 3 /etc/passwd
wc命令可计算文件中行、字和字符的数量。它接受 -l、-w 或 -c 选项,分别用于仅显示行数、字数或字符数。
# 计算 /etc/passwd 文件中的行数、字数和字符数量 wc /etc/passwd # 计算文件 /etc/passwd 和 /etc/group 的行数 wc -l /etc/passwd ; wc -l /etc/group # 计算文件 /etc/group 和 /etc/hosts 的字节数 wc -c /etc/group /etc/hosts
2.3 TAB补全
Tab补全允许用户在提示符下键入足够的内容以使其唯一后快速补全命令或文件名。如果键入的字符不唯一,则按Tab键两次可显示以键入的字符为开头的所有命令。
# 命令补全之两次 Tab(紫色Tab为键盘按下的按键) pas Tab+Tab # 命令补全之一次 Tab(紫色Tab为键盘按下的按键) pass Tab
Tab补全可以用于在键入文件名作为命令的参数时将它们补全。按Tab键时,它将尽可能将文件名补充完整。再按一次Tab时,shell将列出与当前模式匹配的所有文件。键入额外字符直到名称唯一 为止,然后使用Tab补全完成该命令行。
# 路径补全之两次 Tab(紫色Tab为键盘按下的按键) ls /etc/pa Tab+Tab # 路径补全之一次 Tab(紫色Tab为键盘按下的按键) ls /etc/pass Tab
许多命令可以通过Tab补全匹配参数和选项。useradd命令供超级用户root在系统上创建其他用 户。它有许多选项,可用于控制该命令的行为。键入选项部分内容后使用Tab补全可以将选项补充完整,而无需大量的键入操作。
# 参数补全(紫色Tab为键盘按下的按键)
useradd --Tab
2.4 长命令的续行
有的时候,一个命令具有多个选项和参数可能会很快变得很长,当光标到达右边缘时,命令窗口会自动换行。取而代之,为了提高命令的易读性,可以使用多行来键入长命令。
为此,请使用反斜杠字符(\)(称为转义字符)忽略紧跟在反斜杠后面的字符的含义。
# 显示 “/usr/share/dict/words” 和 “/usr/share/dict/linux.words” 文件的前三行内容(单行) head -n 3 /usr/share/dict/words /usr/share/dict/linux.words # 显示 “/usr/share/dict/words” 和 “/usr/share/dict/linux.words” 文件的前三行内容(多行) head -n 3 \ /usr/share/dict/words \ /usr/share/dict/linux.words
2.5 命令历史记录
history命令显示之前执行的命令的列表,带有命令编号作为前缀。
感叹号字符(!)是元字符,用于扩展之前的命令而不必重新键入它们。!number命令扩展至与指定 编号匹配的命令。!string命令扩展至最近一个以指定字符串幵头的命令。
方向键可用于在shell历史记录中的以往命令之间导航。向上箭头编辑历史记录列表中的上一个命 令。向下建头编辑历史记录列表中的下一个命令。向左箭头和向右箭头在历史列表中的当前命令中左右移动光标,以便在运行命令之前进行编辑。
可以使用Esc+.或A1t+.组合键,在光标的当前位置插入上一命令的最后一个单词。重复使用 组合键可将该文本替换为历史记录中更早命令的最后一个单词。Alt+.组合键尤其方便,因为可以按住Alt键,再反复按.键来轻松地回滚到更早的命令。
2.6 编辑命令行
以交互方式使用时,bash具有命令行编辑功能。这允许用户使用文本编辑器命令在当前键入的命 令内移动并进行修改。
2.7 访问命令练习
- 使用date命令来显示当前的日期和时间。
- 以12小时制显示当前时间(例如,11:42:11 AM)。提示:显示该输出的格式字符串为%r。
- /etc/passwd,的文件类型是什么?可否被人读取?
- 使用wc命令和Bash快捷键显示/etc/passwd的大小。
- 显示/etc/passwd的前10行。
- 显示/etc/passwd文件的后10行。
- 利用三次或更少的击键来完全重复上一个命令。
- 重复上一命令,但使用-n 20选项来显示文件中的最后20行。使用命令行编辑功能,以通过 最少的击键次数来完成此操作。
- 使用shell历史记录来再次运行date +%r命令。