访问命令行
bash shell
命令行是介于文本的界面,可用于向计算机系统输入指令。Linux命令行由名为shell的程序提供。在与unix类似的系统的漫长历史中,许多shell得以开发。Red Hat Enterprise Linux中供用户使用的默认shell为GNU Bourne-Again Shell(Bash)。Bash是与Unix类似的系统上使用的最成功的一个shell的改进版本。
如果以交互方式使用shell,它在等待用户输入命令时显示一个字符串。这称为shell提示符。普通用户启动shell时,默认提示符的结尾$字符
[qinzhen@localhost ~]$
如果以超级用户root运行shell,则$替换为#。这可以更加显著的表明这是超级用户shell,帮助避免在特权账户中出现意外和错误。
[qinzhen@localhost ~]#
虚拟控制台
用户通过终端访问bash shell。终端提供键盘供用户输入,也提供显示用于输出。在基于文本的安装中,这可以是Linux计算机的物理控制台、硬件键盘和显示。也可通过串行端口配置终端访问。
访问shell的另一种方式是虚拟控制台。Linux计算机的物理控制台支持多个虚拟控制台,它们作为单独的终端运行。每个虚拟控制台均支持独立的登陆会话。
如果提供图形环境,它将在Red Hat Enterprise Linux 的第一个虚拟控制台中运行。而另外五个文本登陆提示符在控制台二至六(如果图形环境关闭,则为控制台一至五)中可用。在运行图形环境的情况下,通过按Ctrl+Alt并按功能键(F2至F6),在虚拟控制台上访问文本登陆提示符。按Ctrl+Alt+F1返回第一个虚拟控制台和图形桌面。
Shell基础知识
在shell提示符下输入的命令由三个基本部分组成:
- 要运行的命令
- 用于调整命令行为的选项
- 通常作为命令的目标的参数
命令是要运行的程序的名称。 其后可能跟着一个或多个选项,这些选项用于调整命令的行为或其作用。选项通常以一个或者两个破折号开头(例如 -a 或 --all),以将其与目标参数区分。命令后面可能也会跟着一个或多个参数,这些参数通常用于指明应在其中运行命令的目标。
例如,命令行usermod -l qinz
,包含一个命令usermod
,一个选项-l
,和一个参数qinz
。该命令的作用是锁定用户qinz的账户的密码。
要有效的使用命令,用户需要了解命令接受的选项和参数,以及他们正确的排列顺序(命令的语法)。大多数命令都包含--help
选项。这可使命令打印其作用的说明,即介绍命令的语法、其接受的选项列表及其作用的“用法语句”。
用法语句可能看起来比较复杂,难以读懂。当用户熟悉了集中基本的惯例后,理解起来就比较容易了:
- 方括号 [ ] 括起来的是可选项目。
- …前面的任何内容均表示该类型项目的任意长度列表。
- 以竖线 | 分隔的多个项目表示只能指定其中一个项目。
- 尖括号<>中的文本表示变量数据。例如,<filename>表示“在此处插入您要使用的文件名”。有时这些变量会简单写成大写字母,例如 FILENAME。
来看看date
命令的第一个用法语句:
[qinzhen@localhost ~]# date --help
date [OPTION]... [+FORMAT]
这表示date
可以接受一个可选选项列表([OPTION]...
),其后为可选的格式字符串,它以加号字符 + 为前缀,用于定义当前显示日期的显示方式([+FORMAT]
)。由于这两项都可选,因此即使未指定选项或参数,date
也将执行(它将使用默认格式打印当前日期和时间)。
术语描述
描述 | 术语 |
---|---|
执行以字符串形式键入的命令的解释程序 | Shell |
指明交互shell正在等待用户键入命令的视觉线索 | 提示符 |
运行的程序的名称 | 命令 |
命令行中调整命令行为的部分 | 选项 |
命令行中指定命令所执行的目标的部分 | 参数 |
用于与系统交互的硬件显示和键盘 | 物理控制台 |
多个逻辑控制台之一,可以分别支持独立的登陆会话 | 虚拟控制台 |
为输出提供显示并为shell会话输入提供键盘的界面 | 终端 |
使用Bash Shell执行命令
基本的命令语法
GNU Bourne-Again Shell (bash) 这一程序可以解读用户键入的指令。键入到shell中的每一字符串最多由三个部分:命令、选项(以 - 或者 – 开头),以及参数。键入到shell中的每个词语通过空格相互隔开。命令是系统中安装的程序的名称。每个命令拥有自己的选项和参数。
用户准备好执行命令时,按下Enter键执行。每一命令在单独的一行中键入,系统会显示各个命令的输出,然后再显示shell提示符。如果用户希望在一行中键入多个命令,则可以使用分号(;)作为命令分隔符。分号是一类称为元字符的成员,对于bash具有特殊意义。
简单命令示例
在命令行中,root用户可以通过localectl
命令更改系统的区域设置。如果不带参数运行localectl
命令,它将显示当前的系统区域设置。
要设置系统区域的语言,请运行localectl set-locale LANG=locale
命令,其中locale对应的时语言代码,例如zh_CN.UTF-8。此更改将在用户下一次登陆时生效,它存储在 /etc/locale.conf 中。
[root@localhost ~]# localectl set-locale LANG=en_US.UTF-8
date
命令用于显示当前的时间和日期。超级用户也可以用它来设置系统时钟。以加号(+)开头的参数可指定日期命令的格式字符串。
[root@localhost Desktop]# date
Sun May 19 12:09:29 CST 2019
[root@localhost ~]# date +%R
12:09
[root@localhost ~]# date +%T
12:10:04
[root@localhost ~]# date +%x
05/19/2019
[root@localhost ~]#
passwd
命令更改用户自己的密码。必须指定该账户的原始密码,之后才允许进行修改。默认情况下,passwd配置为需要强密码,其包含小写字母、大写字母、数字和符号,并且不以字典中的单词为基础。超级用户可以使用passwd
命令更改其他用户的密码。
[qinz@localhost ~]$ passwd
Changing password for user qinz.
Changing password for qinz.
(current) UNIX password:
New password:
BAD PASSWORD: The password is too similar to the old one
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]# passwd qinz
Changing password for user qinz.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
Linux不需要文件扩展名作为类型根据来分类文件。file
命令可以扫描文件内容的开头,显示该文件的类型。要分类的文件作为参数传递至该命令。
[root@localhost ~]# file /etc/passwd
/etc/passwd: ASCII text
[root@localhost ~]# file /bin/passwd
/bin/passwd: setuid ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x91a7160a019b7f5f754264d920e257522c5bce67, stripped
[root@localhost ~]# file /home
/home: directory
head
和tail
命令分别显示文件的开头和结尾部分。默认情况下,这两个命令显示10行,但是它们都有一个-n
选项,允许指定不同的行数。要显示的文件作为参数传递至这些命令。
[root@linuxprobe Desktop]# head /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
wc
命令可计算文件中行、字和字符的数量。它可以接受-l
,-w
或-c
选项,分别用于仅显示行数、字数或字符数。
[root@linuxprobe Desktop]# wc /etc/passwd
42 70 2110 /etc/passwd
[root@linuxprobe Desktop]# wc -w /etc/passwd
70 /etc/passwd
Tab自动补全
Tab补全允许用户在提示符下键入足够的内容以使其唯一后快速补全命令或者文件名。如果键入的字符不唯一,则按Tab键两次可显示以键入的字符开头的所有命令或者文件。
[root@linuxprobe Desktop]# pas
passwd paste pasuspender
[root@linuxprobe Desktop]# passwd
命令历史记录
history
命令显示之前执行的命令的列表,带有命令编号作为前缀。
感叹号字符!
是元字符,用于拓展之前的命令而不用重新键入它们。!number
扩展至与指定编号匹配的命令。!string
拓展至最近一个以指定字符串开头的命令。
[root@linuxprobe Desktop]# history
1 date
2 LANG=zh_CN.UTF8 date
3 cd /etc
4 ls
5 cat local
[root@linuxprobe Desktop]# !3
[root@linuxprobe etc]#
方向键可用于在shell命令历史记录中导航。向上键↑编辑历史记录列表中的上一个命令。向下键↓编辑历史记录列表中的下一个命令。按下向上键↑过多次数时,可使用history
命令。向左键←和向右键→可在当前编辑的命令行中向左和向右移动光标。
Esc+.组合键可使shell将上一命令的最后一个单词复制到当前命令行中的光标所在位置。如果重复使用,它将继续转到更早的命令。
编辑命令行
交互使用时,bash具有命令行编辑功能。这允许用户使用文本编辑器命令在当前键入的命令内移动并进行修改。使用方向键可以在当前命令内移动,也可访问命令历史记录,下面介绍更强大的编辑命令。
快捷方式 | 描述 |
---|---|
Ctrl+A | 跳到命令行的开头 |
Ctrl+E | 跳到命令行的末尾 |
Ctrl+U | 将光标处到命令行开头之间的内容删除 |
Ctrl+K | 将光标处到命令行末尾之间的内容删除 |
Ctrl+← | 跳到命令行中前一字的开头 |
Ctrl+→ | 跳到命令行中下一字的开头 |
Ctrl+R | 在历史记录列表中搜索某一模式的命令 |