本节将简单介绍在使用树莓派终端过程中涉及的系统管理操作,如增删用户、修改密码、查看与终止进程、管理服务和关机重启等基础命令。
安装完Raspbian系统后,在树莓派桌面的左上角打开系统自带的终端,或者使用SSH软件连接默认打开终端,显示内容如图3.1所示。
图3.1 打开终端
从图3.1中可以看出,树莓派默认的提示命令符如下:
pi@raspberrypi:~ $
这表明我们是在名为raspberrypi的主机上以用户pi的身份登录,并且正处在pi用户的主目录即“~”下。可以在其后输入各种Linux命令,然后按Enter键即可执行。
当然,也可以使用超级管理员root用户登录,命令提示符如下:
root@raspberrypi:~ #
与pi用户不同的是,命令提示符为#,表明这是root用户,默认情况下,树莓派并不会启用root用户,可以通过以下方式启用root用户:
# 先设置密码 sudo passwd root # 输入两次密码(无提示)
再通过以下su命令切换到root用户:
su root # 输入密码即可
事实上,所有的Linux系统都带有root用户,而passwd命令主要用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者能用它管理系统用户的密码,只有管理者可以指定用户名称,一般用户只能变更自己的密码,使用方法如下:
passwd 用户名
还可以通过useradd命令增加一个叫作c0c的系统用户,具体如下:
sudo useradd c0c
用户建好之后,使用passwd命令设定用户的密码。如果要删除该用户,可以使用userdel命令实现,命令如下:
sudo userdel c0c
至此,细心的读者可能会发现,当我们新建用户或者删除用户时都带了一个sudo命令(第一次使用时要求输入密码),这表示以系统管理员身份执行这条命令,如果不加这条命令则会提示“Permission denied”权限不足。
进程是操作系统上非常重要的概念,所有系统上面运行的数据都会以进程的类型存在。在Linux系统中触发任何一个事件时,系统都会将它定义为一个进程,并且给予这个进程一个ID,称为PID,同时根据触发这个进程的用户,给予这个PID一组有效的权限设置。
当程序处于运行时,我们看不到也摸不着,因此Raspberry Pi OS系统提供了一系列方便的命令来查看正在运行的进程。首先是ps命令,如ps -l命令能查看当前bash下相关进程的全部信息。使用方法如下:
另外,还可以用pstree命令来显示整棵进程树,如图3.2所示。
图3.2 进程树
pstree清楚地显示了程序和进程之间的关系,如果不指定进程的PID号,或者不指定用户名称,则将默认为根进程,显示系统的所有程序和进程信息;如果指定用户或PID,则将以用户或PID为根进程,显示用户或PID对应的所有程序和进程。例如,如果想知道某个用户启动了哪些进程,可以使用pstree指令,执行如下命令:
pstree mysql
当然ps命令也有弊端,它只能显示进程某一时刻的信息。此时可以借助top命令来动态、实时地显示进程状态,并且top命令还提供了一个交互界面,用户可以根据需要,个性化定制自己的输出,更清楚地了解进程的实时状态,如图3.3所示。
图3.3 进程状态
如果要查找指定进程的进程号ID,还可以使用pidof命令,例如,查找nginx的进程号:
pidof nginx 13312 5371
如果要结束某个进程,可以使用kill命令,后面接上对应进程的PID,具体如下:
kill 3268
kill命令只结束对应的单个进程,如果要结束某个程序的全部进程,可以使用killall实现:
killall nginx
Linux服务管理主要有两种方式,即service和systemctl。其中,service已经逐渐被systemctl取代。本书主要介绍systemctl命令。systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。其中,Systemd是一个系统管理守护进程、工具和库的集合,用于取代System V初始进程。它的功能是集中管理和配置类UNIX系统,即system daemon,是Linux下的一种init软件。
Systemctl命令常见用法如下。
(1)列出所有可用单元,命令如下:
(2)检查某个服务的运行状态,命令如下:
(3)列出所有服务,命令如下:
(4)重启、停止、启动服务等,命令如下:
pi@raspberrypi:~ $ systemctl restart nginx # systemctl restart nginx # systemctl stop nginx # systemctl reload nginx # systemctl status nginx
(5)查询服务是否激活,以及配置开机启动,命令如下:
pi@raspberrypi:~ $ systemctl is-active nginx pi@raspberrypi:~ $ systemctl disable nginx pi@raspberrypi:~ $ systemctl enable nginx
(6)使用systemctl命令结束服务,命令如下:
pi@raspberrypi:~ $ systemctl kill nginx
(7)列出系统的各项设备、挂载、服务等:
pi@raspberrypi:~ $ systemctl list-unit-files --type automount device path snapshot swap timer busname mount service socket target
(8)重启、停止、挂起、休眠系统等,命令如下:
在3.1.2节中,我们已经通过systemctl命令介绍了系统重启和关机的方法,此外,还可以使用单独的命令来完成对应的操作:
# 重启 sudo reboot # 关闭系统并切断电源 sudo poweroff # 凌晨3点14分定时关机 sudo shutdown -h 03:14 # 关闭系统 sudo halt
这里要特别注意halt命令,其与poweroff不同,此命令会在关机前停止所有CPU功能。执行时,结束应用进程、执行sync系统调用、文件系统写操作完成后就会停止内核。推荐使用这种方法关机。