3.1 shell 基础

由于 Linux 系统使用了异步的磁盘/内存传输模式,同时又是个多人多任务的环境,所以在使用的时候有其特别之处。

本文将重点介绍如何正确地使用 Linux,内容比较基础,主要包括三部分:登录、使用和关机。

以命令行模式登录 Linux

命令行模式

我们都是通过程序和 Linux 系统进行沟通的,命令行模式就是一个程序,它负责我们想要完成的任务。命令行模式登录成功后所运行的程序被称为壳(shell)。

在命令行模式里执行的命令,格式几乎都是 command [-options] parameter1 parameter2 ...,按下回车键就表示要开始执行此命令。

  • command 命令的名称。第一个输入的绝对是命令或可执行文件(比如 shell 脚本)

  • [-options] 选项,比如 -h--help-- 表示全称)

  • parameter1 parameter2 ... 依次为参数

有的选项或参数前面是 +,比如 date +%Y-%m-%d

说明:

  • 命令 选项 参数 的格式中,中间用空格来区分,多个空格会合并成一个

  • 如果命令太长,可以使用反斜线 \ 来转义回车键,以让命令连续到下一行

  • 在 Linux 系统中,大小写字母具有不同的含义,即大小写敏感

在终端登录 Linux

比如通过 ssh,成功登录阿里云之后,会显示如下信息:

Last login: Sun Feb  6 11:00:58 2022 from xxx.xxx.xx.xxx

Welcome to Alibaba Cloud Elastic Compute Service !

当用户登录系统之后,系统会列出上次该账号登录的时间和终端名称,以及一条提示信息。

此时,控制台会进入命令行模式,格式是 当前用户的账号@主机名 ~ 提示符,如下:

[root@iZm5e0lxdukyobel89sbbnZ ~]#
[lin@iZm5e0lxdukyobel89sbbnZ ~]$

其中,~ 是个变量,表示用户的家目录。此时执行 pwd 命令,就会显示当前目录,如下:

[root@iZm5e0lxdukyobel89sbbnZ ~]# pwd
/root
[lin@iZm5e0lxdukyobel89sbbnZ ~]$ pwd
/home/lin

提示符 # 表示是 root 用户,$ 表示是一般用户。

在 Linux 系统中,最好使用一般用户登录,等需要 root 权限的时候,再 su 过去。

当我们想离开或注销 Linux 系统的时候,可直接输入 exit 或按 ctrl+d

离开系统并不是关机,因为 Linux 本身就有相当多的任务在同时进行,我们的登录也仅仅是其中的一个任务而已。

一些基础命令

与其说是介绍基础命令,倒不如说是借基础命令来介绍命令行的基本使用方式。所以,这里不会对具体的命令做过多的介绍,只会简单地说说它的使用流程。

在命令行模式里执行的命令,主要有两种情况:

  1. 该命令会直接显示结果,比如 ls, date, cal

    • 此时,执行完命令之后,会直接回到命令提示符,等待下一个命令的输入

  2. 会进入到该命令的环境,比如 vim, bc

    • 此时,需要使用该命令的结束命令,才能回到命令提示符中

    • eg. 想离开 bc 回到命令行界面,可输入quit

接下来,介绍几个简单的命令。

locale

Linux 是支持多国语系的,locale 命令会显示目前所支持的语系。

# locale
LANG=en_US.UTF-8
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

也可以执行 echo $LANG

# echo $LANG
en_US.UTF-8

date

date 命令显示日期和时间。

# date
Sun Feb  6 17:27:47 CST 2022
# date +%Y-%m-%d
2022-02-06
# date +%Y-%m-%d\ %H:%M
2022-02-06 17:29

cal

cal 命令显示日历。

# cal
    February 2022
Su Mo Tu We Th Fr Sa
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28

# cal 2022
                               2022

       January               February                 March
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                   1          1  2  3  4  5          1  2  3  4  5
 2  3  4  5  6  7  8    6  7  8  9 10 11 12    6  7  8  9 10 11 12
 9 10 11 12 13 14 15   13 14 15 16 17 18 19   13 14 15 16 17 18 19
16 17 18 19 20 21 22   20 21 22 23 24 25 26   20 21 22 23 24 25 26
23 24 25 26 27 28 29   27 28                  27 28 29 30 31
30 31
        April                   May                   June
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                1  2    1  2  3  4  5  6  7             1  2  3  4
 3  4  5  6  7  8  9    8  9 10 11 12 13 14    5  6  7  8  9 10 11
10 11 12 13 14 15 16   15 16 17 18 19 20 21   12 13 14 15 16 17 18
17 18 19 20 21 22 23   22 23 24 25 26 27 28   19 20 21 22 23 24 25
24 25 26 27 28 29 30   29 30 31               26 27 28 29 30

        July                  August                September
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                1  2       1  2  3  4  5  6                1  2  3
 3  4  5  6  7  8  9    7  8  9 10 11 12 13    4  5  6  7  8  9 10
10 11 12 13 14 15 16   14 15 16 17 18 19 20   11 12 13 14 15 16 17
17 18 19 20 21 22 23   21 22 23 24 25 26 27   18 19 20 21 22 23 24
24 25 26 27 28 29 30   28 29 30 31            25 26 27 28 29 30
31
       October               November               December
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                   1          1  2  3  4  5                1  2  3
 2  3  4  5  6  7  8    6  7  8  9 10 11 12    4  5  6  7  8  9 10
 9 10 11 12 13 14 15   13 14 15 16 17 18 19   11 12 13 14 15 16 17
16 17 18 19 20 21 22   20 21 22 23 24 25 26   18 19 20 21 22 23 24
23 24 25 26 27 28 29   27 28 29 30            25 26 27 28 29 30 31
30 31


# cal 5 2022
      May 2022
Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

bc

bc 命令,计算器。输入命令点击回车之后,屏幕会显示版本信息,之后就进入等待输入的阶段。

# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1+2     # 加法
3
520-20  # 减法
500
34*10   # 乘法
340
10%3    # 取余
1
2^8     # 指数
256

10/100       # 除法(结果是 0,因为 bc 默认仅输出整数)
0
scale=2      # 执行 scale 命令,设置小数位的个数
10/100
.10
1/3
.33

quit         # 离开 bc 回到命令行界面

热键+在线帮助

几个重要热键

  1. tab键:命令补全、文件补齐、参数补齐等。善用此键,可提高效率也能避免手误

    • 当按一次时,是补齐

    • 当连续按两次时,是列出可选的选项们

  2. ctrl+c:中断当前正在运行中的命令/程序

  3. ctrl+d:和输入 exit 效果类似,即退出命令行模式

  4. shift+翻页键/箭头:翻页

在线帮助

  1. --help选项:可查询特定命令的相关选项和参数

  2. maninfo:可查询命令或相关文件

    • eg. man ls , info ls

      • 可以按空格键和箭头键上下左右移动

      • 可以按 q 键退出

    • man man还可以查询man命令的格式和用法。其中

      • 1 表示用户在 shell 环境中可以操作的命令和可执行文件

      • 5 表示配置文件或是某些文件的格式

      • 8 表示系统管理员可用的管理命令

    • info info

  3. /usr/share/doc/

正确地关机

在 Linux 中,每个程序/服务都运行在后台,所以在我们的屏幕背后其实有相当多的人同时在我们的主机上工作,如果我们直接按下电源开关来关机的话,其他人的数据可能就因此中断了。

此外,不正常的关机,可能会造成文件系统的损毁(因为还来不及将数据回写到文件中)。

作为服务器的 Linux 主机一般都带着电源,以防突然断电。

所以,正常情况下,关机需要注意以下事项:

  1. 观察系统的使用状态,从而判断是否可以关机

    • who 看目前谁在线

    • netstat -a 看网络的联机状态

    • ps -aux 看后台执行的程序

  2. 通知在线用户关机的时刻。可以使用 shutdown 命令的功能

  3. 正确的关机命令

    • sync 将数据同步写入硬盘中

    • shutdown 关机

    • reboot, poweroff, halt 重新启动

由于 Linux 系统的关机和重新启动是很重大的系统操作,因此只有 root 才有权限执行。

使用状态

eg. who

# who
usname   pts/0        Jan 12 20:18 (123.115.33.224)
root     pts/2        Jan 12 21:20 (123.115.33.224)

eg. netstat -a

# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN
tcp        0      0 localhost:55726         localhost:2379          ESTABLISHED
udp        0      0 localhost:ntp           0.0.0.0:*
udp        0      0 0.0.0.0:ntp             0.0.0.0:*
udp6       0      0 [::]:ntp                [::]:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     186126848 /run/lvm/lvmetad.socket
unix  2      [ ]         DGRAM                    9669     /run/systemd/shutdownd

eg. ps -aux

# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       328  0.0  0.7  61792  7440 ?        Ss    2018   6:03 /usr/lib/systemd/systemd-journald
nginx      378  0.0  1.5 350756 15692 ?        S     2021   0:09 php-fpm: pool www
usname   16432  0.0  0.1 155332  1808 pts/0    R+   21:26   0:00 ps -aux

sync

所有的数据都得被读入内存后,才能被 CPU 处理,而数据又常常需要由内存写回硬盘。考虑到硬盘的速度太慢(相对于内存来说),所以如果常常让数据在内存和硬盘中来回读写,就会导致系统的性能不会太好。因此在 Linux 系统中,为了加快数据的读取速度,默认情况下某些已经在内存中的数据是不会直接被写回硬盘,而是先暂存在内存中的。

不过这样也会造成一些困扰,比如当我们的系统因为某些特殊情况而不正常关机的时候(比如停电),由于数据没有被写回硬盘从而会导致数据的不正常。

sync 命令就能将内存中的数据同步写回硬盘。虽然关机和重启的命令都会在关机前自动调用 sync 程序,不过多手动执行几次,还是会让人更放心一些。

  • 当一般用户执行sync时,只更新自己的数据

  • 当 root 执行sync时,是更新整个系统的数据

shutdown

关机比较常用的命令是 shutdown,它会通知系统内的各个进程,并且会通知系统中的相关服务来执行关闭。

shutdown 可以完成如下工作:

  • 可以自由地选择关机模式:是关机,还是重新启动

  • 可以设置关机时间:是现在立刻关,还是到某个特定时间才关机

  • 可以自定义关机信息:在关机前,将此信息发送给在线用户

  • 可以仅发出警告信息

reboot

reboot, poweroffhalt 这三个命令调用的函数库都差不多,选择一个自己喜欢的就好。

总结

本文以 shell 为切入点,介绍了如何正确地使用 Linux 系统。内容包括:

  • 以命令行模式登录 Linux

    • 命令行的命令格式 命令 选项 参数

    • 通过 ssh 登录 Linux

  • 使用 Linux

    • 命令行模式里的命令:直接执行 or 进入命令环境

    • 几个重要热键 tab, ctrl+c, ctrl+d

    • 在线帮助 --help, man+info

  • 正确地关机

    • 观察系统的使用状态 who, netstat -a, ps -aux

    • 相关命令 sync, shutdown, reboot

Last updated