loginctl
- loginctl用途
- loginctl安裝
- 開啟loginctl服務
- session操作
- user操作
- 管理用戶服務
loginctl - Control the systemd login manager
Redhat/centos平臺使用loginctl管理登錄用戶與session
loginctl用途
- 控制 systemd 登錄管理器
- 管理當前登錄的用戶和session
loginctl安裝
loginctl [OPTIONS...] {COMMAND} [NAME...]
- 查看所屬的rpm包
[root@blog ~]# whereis loginctl
loginctl: /usr/bin/loginctl /usr/share/man/man1/loginctl.1.gz[root@blog ~]# rpm -qf /usr/bin/loginctl
systemd-239-18.el8_1.4.x86_64
- 如果找不到loginctl命令,可以用yum安裝
[root@blog ~]# yum install systemd
- 查看版本和幫助
[root@node-137 ~]# loginctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN[root@blog ~]# loginctl --help
開啟loginctl服務
loginctl在使用時需要systemd-logind.service開啟
[root@redis local]# loginctl list-sessions
Failed to list-sessions: Unit systemd-logind.service is masked.
[root@redis local]# systemctl start systemd-logind.service
Failed to start systemd-logind.service: Unit systemd-logind.service is masked.#如果服務被mask,需要先取消mask再start[root@redis local]# systemctl unmask systemd-logind.service
Removed /etc/systemd/system/systemd-logind.service.
[root@redis local]# systemctl start systemd-logind.service
session操作
- 列出本機所有的session
只執行loginctl 和loginctl list-sessions效果一樣,list-sessions是 loginctl的默認操作
[root@node-137 ~]# loginctlSESSION UID USER SEAT31 1000 yurq15 0 root14 0 root30 1000 yurq4 sessions listed.
可以看到:同一個用戶可以開啟多個session
- 顯示一個session的詳細信息
[root@node-137 ~]# loginctl show-session 30
Id=30
User=1000
Name=yurq
Timestamp=Fri 2023-11-24 13:16:25 CST
TimestampMonotonic=12800340928
VTNr=0
Remote=yes
RemoteHost=192.168.17.1
Service=sshd
Scope=session-30.scope
Leader=5648
Audit=30
Type=tty
Class=user
Active=yes
State=closing
IdleHint=no
IdleSinceHint=0
IdleSinceHintMonotonic=0
LockedHint=no
- 顯示一個session的狀態:
session-status: session狀態,指定一個session id,可以看到這個session開啟的進程等信息
[root@node-137 ~]# loginctl session-status 30
30 - yurq (1000)Since: Fri 2023-11-24 13:16:25 CST; 1h 30min agoLeader: 5648Remote: 192.168.17.1Service: sshd; type tty; class userState: closingUnit: session-30.scope└─5739 podmanNov 24 13:16:25 node-137 sshd[5648]: pam_unix(sshd:session): session opened for user yurq by (uid=0)
Nov 24 13:16:25 node-137 systemd[1]: Started Session 30 of user yurq.
Nov 24 14:41:58 node-137 sshd[5648]: pam_unix(sshd:session): session closed for user yurq
- 結束指定的session
殺死指定會話的所有進程、釋放所有與此會話相關的資源
terminate-session 結束指定的session
[root@node-137 ~]# loginctl terminate-session 30
[root@node-137 ~]# loginctlSESSION UID USER SEAT42 0 root43 0 root2 sessions listed.
- kill-session 殺死session
與terminate session基本相同,但可以指定發送的信號。如果不加參數,則signal為SIGTERM
[root@node-137 ~]# loginctl kill-session 46
如果指定SIGSTOP,則session沒有退出,但用戶的終端會停止響應
[root@node-137 ~]# loginctl kill-session 45 --signal=SIGSTOP
man參考:
-s, --signal=When used with kill-session or kill-user, choose which signal to send to selected processes.Must be one of the well known signal specifiers, such as SIGTERM,SIGINT or SIGSTOP. If omitted, defaults to SIGTERM.
- 查看自己的tty的session
[root@node-137 ~]# tty
/dev/pts/0
[root@node-137 ~]# loginctl session-status 42
42 - root (0)Since: Fri 2023-11-24 14:42:29 CST; 14min agoLeader: 6526 (sshd)Remote: 192.168.17.1Service: sshd; type tty; class userState: activeUnit: session-42.scope├─6526 sshd: root@pts/0├─6530 -bash├─6765 loginctl session-status 42└─6766 lessNov 24 14:42:29 node-137 sshd[6526]: pam_unix(sshd:session): session opened for user root by (uid=0)
Nov 24 14:42:29 node-137 systemd[1]: Started Session 42 of user root.
user操作
- 列出所有用戶
[root@node-137 ~]# loginctl list-usersUID USER0 root1000 yurq2 users listed.
- 查看當前登錄用戶的詳細信息
[root@node-137 ~]# loginctl show-user yurq
UID=1000
GID=1000
Name=yurq
Timestamp=Fri 2023-11-24 13:16:25 CST
TimestampMonotonic=12800338419
RuntimePath=/run/user/1000
Slice=user-1000.slice
Display=45
State=active
Sessions=45
IdleHint=no
IdleSinceHint=0
IdleSinceHintMonotonic=0
Linger=yes
- 查看登錄用戶的狀態
[root@node-137 ~]# loginctl user-status yurq
yurq (1000)Since: Fri 2023-11-24 13:16:25 CST; 1h 43min agoState: activeSessions: *45Unit: user-1000.slice└─session-45.scope├─6641 sshd: yurq [priv]├─6644 sshd: yurq@pts/1└─6646 -bashNov 24 13:16:25 node-137 sshd[5648]: pam_unix(sshd:session): session opened for user yurq by (uid=0)
Nov 24 13:16:25 node-137 systemd[1]: Created slice User Slice of yurq.
...
Nov 24 14:52:37 node-137 sshd[6643]: pam_unix(sshd:session): session closed for user yurq
- 結束指定用戶的所有session
loginctl terminate-user yurq
- 停止用戶的終端
[webop@blog ~]$ loginctl kill-user webop --signal=SIGSTOP
管理用戶服務
loginctl enable-linger [USER…], disable-linger [USER…]
啟用/禁止用戶逗留(相當于保持登錄狀態)。 如果指定了用戶名或UID, 那么系統將會在啟動時自動為這些用戶派生出用戶管理器, 并且在用戶登出后繼續保持運行。 這樣就可以允許未登錄的用戶在后臺運行持續時間很長的服務。 如果沒有指定任何參數, 那么將作用于當前調用者的用戶。