FreeBSD 的启动登入与关闭重启

##################################################

目录

FreeBSD 的启动

FreeBSD 启动时的信息

登入系统

syslogd 程序

注销登录

以普通用户身份登入系统

关机重启与管理员身份切换

退出系统

详解 halt、reboot、poweroff、shutdown 命令

睡眠与休眠的区别

halt 程序

reboot 程序

poweroff 程序

shutdown 程序

写在后面的话


##################################################

FreeBSD 的启动

——————————

FreeBSD 启动时的信息

        FreeBSD 启动时会回显许多信息,导致屏幕不断滚动输出。

        系统启动完毕会启动 login 登录程序来让用户登入系统:

Sun Apr  24 23:39:02 CST 2022

FreeBSD/amd64 (FreeBSD) (ttyv0)

login: 

        

        FreeBSD-13.0-RELEASE-amd64 + VirtualBox-6.1.34-150636-Win 启动信息纯手打!!!:

---<<BOOT>>---
Copyright (c) 1992-2021 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 13.0-RELEASE #0 releng/13.0-n244733-ea31sbc261f: Fri Apr  9 04:24:09 UTC 2021

    root@releng1.nyi.freebsd.org:/usr/obj/usr/src/amd64.amd64/sys/GENERIC amd64
FreeBSD clang version 11.0.1 (git@github.com:llvm/llvm-project.git llvmorg-11.0.1-0-g43ff75f2c3fe)
VT(vga): text 80x25
CPU: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz (2095.31-MHz K8-class CPU)
  Origin = "GenuineIntel"  Id = 0x206a7  Family=0x6  Model=0x2a  Stepping=7
  Features=0x1783fbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,MMX,FXSR,SSE,SSE2,HTT>
  Features2=0x1c98220b<SSE3,PCLMULQDQ,MON,SSSE3,CX16,SSE4.1,SSE4.2,POPCNT,XSAVE,OSXSAVE,AVX>
  AMD Features=0x28100800<SYSCALL,NX,RDTSCP,LM>
  AMD Features2=0x1<LAHF>
  TSC: P-state invariant
real memory  = 107366288 (1023 MB)
avail memory = 1004163072 (957 MB)
Event timer "LAPIC" quality 100
ACPI APIC Table: <VBOX   VBOXAPIC>
random: unblocking device.
ioapic0: MADT APIC ID 1 != hw id 0
ioapic0 <Version 2.0> irqs 0-23
Timecounter "TSC" frequency 2095309275 Hz quality 1000
KTLS: Initialized 1 threads
random: entropy device external interface
000.000018 [4354] netmap_init			netmap: loaded module
[ath_hal] loaded
WARNING: Device "kbd" is Giant locked and may be deleted before FreeBSD 14.0.
kbd1 at kbdmux0
mlx5en: Mellanox Ethernet driver 3.6.0 (Decenver 2020)
nexus0
vtvga0: <VT VGA driver>
cryptosoft0: <software crypto>
aesnio: No Aes or SHA support.
acpi0: <VBOX VBOXXSDT>
acpi0: Power Button (fixed)
acpi0: Sleep Button (fixed)
cpu0: <ACPI CPU> on acpi0
attimer0: <AT timer> port 0x40-0x43,0x50-0x53 on acpi0
Timecounter "i8254" frequency 1193182 Hz quality 0
Event timer "i8254" frequency 1193182 Hz quality 100
Timecounter "ACPI-fast" frequency 3579545 Hz quality 900
acpi_timer0: <32-bit timer at 3.579545MHz> port 0x4008-0x400b on acpi0
pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
pci0: <ACPI PCI bus> on pcib0
isab0: <PCI-ISA bridge> at device 1.0 on pci0
isa0: <ISA bus> on isab0
atapci0: <Intel PIIX4 UDMA33 controller> port 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0xd000-0xd00f at device 1.1 on pci0
ata0: <ATA channel 0> at channel on atapci0
ata1: <ATA channel 1> at channel on atapci0
vgapci0: <VGA-compatible display> port 0xd010-0xd01f mem 0xe0000000-0xe0ffffff,0xf0000000-0xf01fffff irq 18 at device 2.0 on pci0
vgaoci0: Boot video device
pcm0: <Intel ICH (82801AA)> port 0xd100-0xd1ff,0xd200-0xd23f irq 21 at device 5.0 on pci0
pcm0: <SigmaTel STAC9700/83/84 AC97 Codec>
ohci0: <Apple KeyLargo/Intrepid USB controller> mem 0xf0804000-0xf0804fff irq 22 at device 6.0 on pci0
usbus0: on ohci0
pci0: <bridge> at device 7.0 (no driver attached)
ehci0: <Intel 82801FB (ICH6) USB 2.0 controller> mem 0xd010-0xd017 mem 0xf0805000-0xf0805fff irq 19 at device 11.0 on pci0
usbus1: EHCI version 1.0
usbus1 on ehci0
battery0: <ACPI Control Method Battery> on acpi0
acpi_acad0: <AC Adapter> on acpi0
atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0
atkbd0: <AT Keyboard> irq 1 on atkbdc0
kbd0 at atkbd0
atkbd0: [GIANT-LOCKED]
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: [GIANT-LOCKED]
WARNING: Device "psm" is Giant locked and may be deleted before FreeBSD 14.0.
psm0: model IntelliMouse Explorer, device ID 4
orm0:<ISA Option ROMs> at iomem 0xc0000-0xc7fff,0xe2000-0xe2fff pnpid ORM0000 on isa0
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff pnpid PNP0900 on isa0
atrtc0: <AT realtime clock> at port 0x70 irq 8 on isa0
atrtc0: registered as a time-of-day clock, resolution 1.000000s
Event timer "RTC" frequency 32768 Hz quality 0
atrtc0: non-PNP ISA device will be removed from GENERIC in FreeBSD 14.
Timecounters tick every 10.000 msec
pcm0: measured ac97 link rate at 46846 Hz
usbus0: 12Mbps Full Speed USB v1.0
usbus1: 480Mbps Hihg Speed USB v2.0
ugen1.1: <Intel EHCI root HUB> at usbus1
uhub0 on usbus1
uhub0: <Intel EHCI root HUB, class 9/0, rev 2.00/1.00 , addr 1> on usbus1
ugen0.1: <Apple OHCI root HUB> at usbus0
uhub1 on usbus0
uhub0: <Apple OHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus0
Trying to mount root from ufs:/dev/ada0p2 [rw]...
Root mount waiting for: CAM usbus0 usbus1
ada0 at ata0 bus 0 scbus0 target 0 lun 0
ada0: <VBOX HARDDISK 1.0> ATA-6 device
ada0: 33.300MB/s transfers (UDMA2, PIO 65536bytes)
ada0: 14336MB (29360128 512 byte sectors)
cd0 at ata1 bus 0 scbus1 target 0 lun 0
cd0: <VBOX CD-ROM 1.0> Removable CD-ROM SCSI device
cd0: 33.300MB/s transfers (UDMA2, ATAPI 12bytes, PIO 65534bytes)
cd0: 4562MB (2335946 2048 byte sectors)
uhub1: 12 ports with 12 removable, self powered
Root mount waiting for: usbus1
Root mount waiting for: usbus1
Root mount waiting for: usbus1
Root mount waiting for: usbus1
uhub0: 12 ports with 12 removable, self powered
mountroot: waiting for device /dev/ada0a...
Setting hostuuid: 0730a9b7-a177-8b4a-9adf-8b9d45b805b4.
Setting hostid: 0xfacd3356.
Starting file system checks:
/dev/ada0a: FILE SYSTEM CLEAN; SKIPPING CHECKS
/dev/ada0a: clean, 2048578 free (586 frags, 255999 blocks, 0.0% fragmentation)
Mounting local filesystems:.
ELF ldconfig pathL /lib /usr/lib /usr/lib/compat
32-bit compatibility ldconfig path: /usr/lib32
Setting hostname: FreeBSD
Setting up harvesting: [UMA],[FS_ATIME],SWI,INIERRUPT,NET_NG,[NET_ETHER],NET)TUN,MOUSE,KEYBOARD,ATTACH,CACHED
Feeding entropy: /
Autoloading module: intpm.ko
intsmb0: <Intel PIIX4 SMBUS Interface> irp 23 at device 7.0 on pci0
intsmb0: intr IRQ 9 enabled revision 0
smbus0: <System Management BUS> on intsmb0
lo0:link state changed to up
Starting Network: lo0.
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV5>
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
        inet 127.0.0.1 netmask 0xff000000
	groups: lo
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
Starting devd.
Starting module: intpm.ko
add host 127.0.0.1: gateway lo8 fib 0: route already in table
add host ::1: gateway lo8 fib 0: route already in table
add net fe80::: gateway ::1
add net ff02::: gateway ::1
add net ::ffff:0.0.0.0: gateway ::1
add net ::0.0.0.0: gateway ::1
Starting local_unbound.
Waiting for nameserver to start... good
Clearing /tmp (X related).
Creating and/or trimming log files.
Updating motd:.
Updating /var/run/os-release done.
Starting syslogd.
Mounting late filesystems:.
Starting powerd.
powerd: no cpufreq(4) support -- aborting: No such file or directory
/etc/rc: WARNING: failed to start powerd
Starting default moused.
Starting sendmail_submit.
Starting sendmail_msp_queue.
Performing sanity check on sshd configuration.
Starting sshd.
Configuring vt: blanktime.
Starting cron.
Starting background file system checks in 60 seconds.

Sun Apr  24 23:39:02 CST 2022

FreeBSD/amd64 (FreeBSD) (ttyv0)

login: |

        这些信息会被保存在缓冲区内

        终端模式下用户可以随意按下 Scroll Lock 来 开启/关闭 滚动浏览缓冲区:

Scroll Lock        开启或关闭缓冲区滚动

PageUp        向上翻滚屏幕

PageDown        向下翻滚屏幕

方向键上        向上移动一行

方向键下        向下移动一行

##################################################

登入系统

——————————

syslogd 程序

        syslogd 程序就是我们系统启动完毕后执行的第一个程序!

        她的任务就是弹出来这个 login 让我们输入用户及密码登入系统:

login 登入器
login 登入器

         
        这个程序所在路径是

/usr/sbin/syslogd

        只有管理员权限能运行:

syslogd
login 登入器程序

        我们看到

/etc/rc.d/syslogd

        目录下也有这个登录程序 这个应该是个符号链接文件 指向 /usr/sbin/syslogd 程序

        既然 sbin 目录下的程序需要手动执行 那 /rc.d 目录下的程序就是开机自动运行了

        不信你运行 sbin 目录下的登入程序的时候会告诉我们:

suslogd already running
suslogd already running

syslogd: suslogd already running, pid: 518 

syslogd:suslogd已在运行,pid:518

        很好理解 因为每个终端用户都必须登录系统啊 你 Ctrl Alt F1~F7 切换终端的时候都必须第一时间启动 syslogd 登入器

        然后你发现进程里没看到:

PS 普通进程查看
PS 普通进程查看

        你可以加上参数 aux 查看所有进程 这里我通过 grep 筛选进程号:

# ps -aux | grep 518

PS 筛选
PS 筛选指定进程

         可以看到登入器确实一直运行着呢!

——————————

        以 root 管理员身份登入系统:

Sun Apr  24 23:39:02 CST 2022    /* 当然是时间啊 */            

FreeBSD/amd64 (FreeBSD) (ttyv0) /* 系统版本 系统名称 当前终端号 */

login: root     /* login 处输入登入用户名 可以使用退格键 回车确认 */

Password:     /* Password 输入密码 保密起见 不会回显 可以使用退格键 回车确认 */

        登入信息 手麻了就不打了:

登入信息_1
登入信息

         登入系统 获得一个 Shell 终端 可以看到提示符 # 这是 root 的独家提示符:

提示符
提示符 #

——————————

注销登录


        命令行有三种方式:

exit         /*输入 exit 命令退出当前程序 这里没有程序所以退出终端返回 login 处*/

logout         /*输入 logout 命令注销登录*/

^D         /*按下 Ctrl D 命令发送退出信号 其实也就是 logout 命令*/

        exit 退出 Shell 返回 login 程序:

exit
exit 退出

        使用 logout 命令退出:

logout
logout/Ctrl D

——————————

以普通用户身份登入系统

        这边就以我们建立的普通用户登入 FreeBSD :

普通用户登录
lilian 登入 BSD

        发现提示符变成 $ :

$
普通用户提示符号 $

——————————

关机重启与管理员身份切换

        对于关机重启命令来说 linuxer 都知道首当其冲的就是:

reboot        /*重启命令*/

poweroff        /*关闭*/

        其实也可以使用 shutdown 命令

shutdown -r now         /*现在重启*/
shutdown -h now         /* 现在关机*/

        还有一个关机命令:

halt         /*停止机器*/

        无一例外 这些命令都在 /sbin 目录下:

halt-reboot-poweroff-shutdown
halt/reboot/poweroff/shutdown 命令都需要提升权限

         普通用户是没权限执行这些程序命令的:

权限不足
 Operation not permitted/不允许操作

         普通用户有权执行的程序在 /bin 目录下:

bin
/bin 下的有限命令

        还记得我们将 lilian 加入 wheel 组吗?

        FreeBSD 下只有 wheel 组成员的用户才能切换 root 身份

         使用 su 切换为超级管理员:

$ su root        /* 注意还是普通用户提示符 */

Password:        /* 这边输入 root 密码 */

#        /* 注意切换成功则被切换成管理员提示符 */

wheel 组用户切换 root 身份
wheel 组用户切换 root 身份

        然后输入 reboot 可以看到正在重启系统:

sureboot
rebooting

        重启完毕:

重启完毕
login 登入器

        为什么不是演示关机命令呢 你傻啊,关机了我怎么截屏!!!

##################################################

退出系统

——————————

详解 halt、reboot、poweroff、shutdown 命令

        简单说一下 halt、reboot、poweroff、shutdown 四个程序

        对了 此时 where 组成员请可以变身了(盖亚——!)

——————————

睡眠与休眠的区别

        睡眠与休眠的概念

        halt 程序通知硬件来停止所有的 CPU 功能,但是仍然保持通电!!!

        使系统处于低层维护状态,即熟知的 休眠 !

        说一下开机的简单过程 就是 CPU 从硬盘中将操作系统加载进内存这就是启动系统

        同样启动程序就是将程序装载内存

        那么关机呢 执行关机操作后系统将退出所有程序然后断开所有硬件的电源

        就是说内存里的东西都清空了然后硬件电源也断掉 这个就是关机了

        用过 Windows 的应该都知道睡眠这个功能吧?

        睡眠并不是真正的关机 因为数据还在内存中 所以你唤醒系统会非常地快

        睡眠情况下只有内存保持供电 其她硬件都停止供电

        唤醒电脑也很简单 按两下键盘或者稍微晃动鼠标~ 系统恢复后没有关闭的程序就会重新出现啦!

        如果内存断电比如说你拔掉了主机电源或者本本电池电量耗尽又或者停电了!那么内存里的数据当然会丢失掉

        

        而休眠情况下电脑内存中的所有数据是全部存放到了硬盘中的。

        当你按开机键唤醒电脑的时候,电脑又会把这些数据全部恢复到内存里面

        然后恢复到你休眠前的系统状态

        这个时间是比较长的 而且休眠模式一般需要点按开机键才能唤醒

        有时候也可以通过键盘或者鼠标唤醒主板

        休眠唤醒的时间比较长 我家里的那台 08 年的联想唤醒休眠竟然需要二十分钟!!!

        我曾经一度以为她再也开不起来了。。。于是才会对休眠睡眠理解的这么深刻

        休眠与关机是非常类似的

        休眠的情况下 内存、CPU、硬盘 等一系列硬件都不在工作了 但是数据提前存入到硬盘所以开机后不会丢失

        而关闭是关闭系统清理内存然后又关闭硬件电源 并不将数据留存 所以每次开机都是崭新的系统!

        我家的 AMD 主板有一次我关机之后 不小心碰了键盘然后就自动开机……属实把我吓到了,那可是半夜三更外面还刮风下雨,,百思不得其妹啊 后来才发竟然支持键盘、鼠标唤醒主板功能

        这么恶心人的功能怎么会存在!是不是还支持远程无线开机啊?在我睡觉的时候偷偷挖矿??

        简直了我直接把电池扣下来每次关机之后拔掉电源才能安心入眠

        后来才知道并不是所有的主板都支持唤醒,可以在 BIOS 中设置一下关闭

        如果你能理解我上面所说的 那么我们再来说一下 Windows 的快速启动

        Windows 7 好像是没有的 Windows 8 之后便结合休眠和睡眠在电源模式中加入了快速启动功能

        从此你关闭便不是真正的关机……而是先将把系统的一些核心数据留存在硬盘中下次开机后不需要加载系统和各种非必要的程序或驱动等等一大堆数据很快就能开机!

        断电并不会影响快速启动 因为并不是存在内存中,而是硬盘上。

——————————

halt 程序

        halt 是休眠程序 关闭系统但是不关闭机器硬件通电 可不就是休眠嘛……

        可以使用

# man halt

        halt 命令:

    用法示例:
halt    /* 休眠 */
halt -p    /* 关机 */
halt -n    /* 休眠时不写入硬盘缓存 */
halt -np    /* 不写入硬盘缓存且立刻关机 */

    参数解释:
-n    带着 -d 参数直接关机 不将记录写入硬盘
-d    请求 dump 即请求系统创建崩溃转储
-p    当休眠的时候顺带着 poweroff 关闭电源

    程序路径:
/sbin/halt

%%%%%

 无参 halt
 

        不带参数的 halt 命令便是休眠:

halt
halt

        神仙翻译手来也:

时间  FreeBSD halt[672]: halted by root/ 时间 FreeBSD halt[672]: 被 root 关闭掉
时间 FreeBSD syslogd: exiting on signal 15/ 时间 FreeBSD syslogd:在信号15上退出

Waiting (max 60 seconds) for system process `XXX` to stop... done
正在等待 (最多 60 秒) 系统进程 `XXX` 停止... 完成

Syncing disks, vnodes remaining... 0 done/正在同步磁盘,剩余的 vnodes... 0 完成
All buffers synced./所有缓冲区都同步了。
Uptime: 1m26s/正常运行时间:1 分钟 26 秒
umass0: detached/umass0:断开
uhub0: detached/uhub0:断开
uhub1: detacheduhub1:断开

The operating system has halted./操作系统已停止。
Please press any key to reboot./请按任意键重新启动!!!

        可以看出来我们的系统登入器应该是 syslogd 这个程序 这个程序在 /usr/sbin/syslogd 。

        看最后两行信息 告诉我们操作系统已经停掉了,按下任意键重新启动。

        因为我们是虚拟机 所以我们可以看到停留画面 我想实体机应该会熄屏休眠 然后等你唤醒她。

%%%%%

halt -p

        -p 参数是关闭所有之后顺带关一下电源

        不关电源硬件低功耗带启动就是就是休眠 断了电不就是关掉机器嘛:

halt -p
halt -p

%%%%%

halt -n

        -n 参数表示不 sync 便 halt :

# halt -n

halt -n
halt -n

         简单说一下 sync 是为了什么:

        linuxer 们应该都清楚 sync

        sync 程序用于数据同步 大部分都是在关闭系统时使用的。

        BSD 或类 UNIX 系统中写入硬盘的数据会因为效率起见 写到 filesystem buffer/文件缓冲区 中 应该是一块内存空间。

        注意了 此时如果断电 那么要写入硬盘的数据还在数据缓冲区中 会导致数据丢失。

        sync 指令就是强制将存在缓冲区中的数据写入硬盘


        我还发现了一个 rsync 程序

        是一个非常方便的同步工具 非常适合大量小文件在两台服务器之间同步

        当然两台需要 rsync 的主机需要配置 这边就不说了。

        这个程序存放于普通二进制执行目录 就是说普通用户也是可以用的:

sync
sync

%%%%%

halt -np

        -n 是不写入缓存 -p 是关机

        两个参数当然可以结合一下:

halt -np
halt -np

——————————

reboot 程序

        reboot 通常用来重启 一个能解决百分之九十五问题的神器:

    示例用法:
reboot    /* 无参重启 */
reboot -n    /* 无 sync 重启 */
reboot -p    /* 关机 */
reboot -d    /* 带 dump 重启 */
reboot -np    /* 无 sync 关机 */

    参数解释:
-n    不写入硬盘缓存立刻重启
-d    请求系统创建崩溃转储且重启
-p    变成关闭系统

    程序路径:
/sbin/reboot

%%%%%

        reboot 命令重启:

reboot
reboot

%%%%%

        reboot -n 不 sync 重启:

reboot -n
标题

%%%%%

        reboot -d 带 dump 重启:

reboot -d
标题

%%%%%

        reboot -p 命令关机:

reboot -p
reboot -p

%%%%%

        reboot -np 不写入缓冲区即刻关机:

reboot -np
reboot -np

——————————

poweroff 程序

        poweroff 命令会发送一个 ACPI 信号来通知系统要做什么

    使用示例:
poweroff    /* 关机 */

    程序路径:
/sbin/poweroff

        输入 poweroff 系统就会很安详的关机:

poweroff_1
poweroff_1
poweroff_2
poweroff_2
poweroff_3
poweroff_3

——————————

shutdown 程序

        shutdown 程序会给系统计划一个时间关机 这个程序可以 计划 停止、关机、重启 机器

        你也可以设置第二个参数在系统关闭前发送给所有已登录的用户一条广播信息提醒一下
 

    用法示例:
shutdown -h now    /* 立刻休眠 */
shutdown -p +0    /* 立刻关机 */
shutdown -r +0    /* 立刻重启 */
shutdown -r +1    /* 1 分钟/60 秒 后重启 */
shutdown -h +30    /* 30 分钟/半小时 后休眠 */
shutdown -p +60    /* 60 分钟/ 1 小时 后关机 */
shutdown -r 05:10    /* 凌晨五点十分重启 */
shutdown -k now    /* 启动 nologin 并且发送广播信息 但不会真正进行操作 */

    命令格式:
shutdown 参数 时间 消息

    参数详解:
-h    /* 休眠 */
-p    /* 关机 */
-r    /* 重启 */
-k    /* 模拟关机 */

    程序路径:
/sbin/shutdown

%%%%%

现在休眠

    shutdown -h now
    shutdown -h +0
shutdown -h now
shutdown -h now
shutdown -h now
shutdown -h now

%%%%%

现在关机
 

    shutdown -p +0
    shutdown -p now
shutdown -p +0
shutdown -p +0

%%%%%

现在重启

    shutdown -r now
    shutdown -r +0
shutdown -r now
shutdown -r now

%%%%%

倒计时关机

# shutdown -p +3    /* 三分钟/一百八十秒 后关机 */
Shutdown at Mon Apr 25 18:38:48 2022./2022 年 4 月 25 日 星期一 18:38:48 关闭。
shutdown: [pid 723]	/* 告诉我们进程号 可以使用 kill 关掉 */
# 

*** System shutdown message from root@FreeBSD ***
*** 来自 root 的系统关闭消息@FreeBSD ***

System going down in 3 minutes/系统将在 3 分钟内关闭
shutdown -p +180
shutdown -p +180 

        其她终端的用户收到提醒:

lilian 被警告
lilian 被警告

        这个时候其实是可以查找到 shutdown 进程的 自从设定好了就一直在后台运行:

# ps -aux | grep shutdown
# ps -aux | grep shutdown
$ ps -aux | grep shutdown
$ ps -aux | grep shutdown

        因为参数 -c 在 BSD 下竟然不顶用 所以我们杀掉进程来停止后台运行的 shutdown 程序:

使用 kill 命令来停止 shutdown 程序的运行
使用 kill 命令来停止 shutdown 程序的运行

%%%%%

定时重启

# date    /* 查看 日期 & 时间 */
Mon Apr 25 18:20:09 CST 2022    /* 记住当前时间是 18 点 20 分 09 秒 */
# shutdown -r 18:21    /* 定时为 18 点 21 分 00 秒执行 */
Shutdown at Mon Apr 25 18:21:00 2022./2022 年 4 月 25 日 星期一 18:21:00 关闭。
shutdown: [pid 683]	/* PID 号为 683 */
# 

*** System shutdown message from root@FreeBSD ***
*** 来自 root 的系统关闭消息@FreeBSD ***

System going down in 30 seconds/系统将在 30 秒内关闭

        确定恰当的时间,我这里设定一分钟后执行命令,仅仅等了三十秒就提示我还剩三十秒:

shutdown -r 18:21
shutdown -r 18:21

%%%%%

操作时附带警告讯息

        其实只需要加上双引号包含住信息就可以了 必须跟在最后面:

shutdown 参数 时间  警告
shutdown 参数 时间  警告
看到警告信息
看到警告信息
lilian 也看到
其她终端在线的用户也能看到

%%%%%

说一下 -k 参数

        加上这个参数并不会真的关机什么的 只是将指定信息广播給所有在线用户然后禁止除了管理员之外的所有用户再次登入系统了毕竟都要关机了!

        至于是什么信息 你如果觉得好玩就:

Turn it off immediately, Send this message to scare you all.../马上关机了,发这条消息吓一吓你们大家……
It's turned off immediately, Ordinary users can't log in~~/马上就关掉了,普通用户都不可以登录了哦~~

Shut down immediately, Ordinary users can't log in!/立即关机,普通用户无法登录!

        噗 神仙翻译手!

        我直接发送简短明了的讯息广播通知給当前系统在线用户:

# shutdown -k now "shutdowning & USER+NO"

        shutdowing 表示正在关机吓人了啊

        USER+NO 表示新的用户不允许登录了哇

        当前终端显示广播:

当前终端显示广播
shutdown -k now "shutdowning & USER+NO"

        ttyv1 刚刚登录的是 lilian 也受到警告:

lilian 被警告
普通用户被警告

         ttyv2 登录的也是一个 root 用户也收到了信息:

其她终端也收到信息
其她终端也收到信息

%%%%%

参数 k 与文件 nologin

        shutdown -k now 之后试图以普通用户身份登入系统发现不得行

        Alt F4 新开第四个终端口 ttyv3 :

ttyv3
ttyv3

        报错

Login incorrect/登录不正确

        :

Login incorrect
Login incorrect

        不信邪 刚刚可能输入错误了 那再来一次 还是 Login incorrect :

还是不行
还是不行

        但是同样在 ttyv3 登入 root 管理员:

root 身份登入试试
root 身份登入试试

         登入成功:

登入成功
登入成功

         /etc/passwd 文件中 lilian 的信息正常 登入 Shell 依然是 sh

        此时查看 nologin 程序都在哪里:

find / -name "nologin"
find / -name "nologin"

        发现多了两个 nologin 文件:

禁止登入真相
禁止登入真相

        那么现在删除这两个文件:

rm nologin
rm nologin

        成功登入普通用户:

login/Password
login/Password
登入成功
普通用户登入成功

        那么看来问题就出现在这两个文件上

        那么就再次创建她们:

# echo 111 > /var/run/nologin

# echo 111 > /var/log/nologin

再次追加创建两个文件
再次追加创建两个文件

         然后…… 很好普通用户又不能登入系统了:

Login incorrect again
Login incorrect again

         再次删除解除登禁:

rm nologin again
rm nologin again

         再次运行 shutdown -k now 命令:

shutdown -k now
shutdown -k now

         一瞬间在线的所有用户再次被通知:

通知 lilian
通知 lilian
通知 root
通知 root

        查看两个文件发现 log 目录下的 nologin 不存了:

只剩 run 下的 nologin
只剩 run 下的 nologin

        这次带上广播消息:

shutdown -r now "----------"
shutdown -r now "----------"

        再次查看文件:

cat /var/run/nologin
cat /var/run/nologin

        这说明 log 目录下的是日志文件而 run 是运行文件

        -k 参数会建立 /var/run/nologin 文件来阻止普通用户登入系统 并输出里面的内容到屏幕上!

        简单说一下为什么需要存在 nologin 程序

        当你去厕所但是厕所在维修

        当你去吃饭但是饭店在打烊

        那你是不是就没必要去了?

        系统我都要关机了你作为一个普通用户还想着登录呢?

        干啥 居心叵测!当然不能让你登录了 这就是 shutdown -k 的意义

        阻止普通用户登录除了 -k 参数还可以手动建立文件以确保没有人可以再登录

/var/run/nologin

        例如

touch /var/run/nologin

        阻止非管理员用户登录:

    shutdown -k now
    touch /var/run/nologin

##################################################

写在后面的话

        除了 shutdown 带参数这种关机命令

        不建议依赖 halt 与 reboot 命令

        因为这两个命令都不运行 rc 脚本

        可能会导致某些程序意外终止而导发一些不必要的麻烦

        而且这两个命令不允许指定延迟关闭系统

        也不会向用户发出即将关闭系统的警告

        如果作为系统管理员应该养成使用 shutdown 命令的方式来关闭系统的好习惯

        在关闭电源之前保证正确关闭系统是非常重要的,直接关闭电源相当于 Windows 系统的非法关机

        因为在关闭电源时有些重要的程序正在运行,可能使程序受到损坏,在下次重新启动的时候,无法运行而带来不必要的麻烦

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

燃吹

呜呜呜没钱钱吃饭了……

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值