二、Linux 系统命令


一、系统命令

# 清屏 (Ctrl + L)
$ clear

# 退出登录	
$ exit		

# 历史命令
$ history		
$ history | grep 'java -jar'	

1. 硬件信息

# 查看操作系统位数
$ getconf LONG_BIT
`
64
`

2. uname 系统信息

# - uname [选项]
`
-a或--all # 显示系统的所有信息,包括内核名称、主机名、内核版本、处理器类型等,这是最常用的选项之一。
-s或--kernel-name # 只显示内核名称。
$ uname -s # 会输出Linux。
-n或--nodename # 显示主机名。
$ uname -n # 会输出当前系统的主机名,如ubuntu。
-r或--kernel-release # 显示内核版本号。
$ uname -r # 会输出5.4.0-104-generic。
-v或--kernel-version # 显示内核版本信息,通常比-r选项更详细。
$ uname -v # 可能会输出#118-Ubuntu SMP Wed Feb 3 18:43:29 UTC 2021。
-m或--machine # 显示系统的硬件架构,如x86_64、i386、armv7l等。
$ uname -m # 会输出x86_64。
-p或--processor # 显示处理器类型或型号。不过,此选项可能并不总是能准确显示处理器的具体型号,有时仅显示处理器系列。
-i或--hardware-platform # 显示硬件平台信息,在某些系统中可能与-m选项的输出类似或相同。
`

# 1. 系统完整信息
$ uname -a
$ uname -an
`
Linux qs 3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

Linux qsmain 5.15.0-53-generic #59-Ubuntu SMP Mon Oct 17 18:53:30 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux


## 解释:
Linux # 1. 内核名称(类别)(uname)
qsmain # 2. 主机名(uname -n)
5.15.0-53-generic # 3. 内核版本号(uname -r)
59-Ubuntu SMP Mon Oct 17 18:53:30 UTC 2022 # 4. 内核版本(uname -v)
x86_64 # 5. 硬件架构(uname -m)
x86_64 # 6. 处理器类型(uname -p)
x86_64 # 7. 硬件平台类型(x86_64)
GNU/Linux # 8. 操作系统名称
`

# 1. 内核名称(类别)
$ uname
`
Linux
`
# 2. 主机名
$ uname -n
`
qsmain
`
# 3. 内核版本号
$ uname -r
`
5.15.0-53-generic
`
# 4. 内核版本
$ uname -v
`
#59-Ubuntu SMP Mon Oct 17 18:53:30 UTC 2022
2022 # 内核编译日期
`
# 5. 硬件架构
$ uname -m
`
x86_64
`
# 6. 处理器类型
$ uname -p
`
x86_64
`
# 7. 硬件平台类型
$ uname -i
`
x86_64
`
1. /proc/version 系统版本文件
# 1. 查看系统版本信息
$ cat /proc/version
`
Linux version 3.10.0-514.26.2.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Tue Jul 4 15:04:05 UTC 2017
`
2. /etc/redhat-release [红帽]系统信息
# 查看[红帽]系统信息(发行版信息)
$ cat /etc/redhat-release 
`
CentOS Linux release 8.4.2105
`
3. hostname 主机名
# 1. 查看主机名
$ hostname
`
qs
`
# 修改主机名
$ vim /etc/hostname
$ vi /etc/sysconfig/network

# 2. 查看IP 
$ hostname -i
`
192.168.137.2
`
$ hostname -I
`
192.168.31.43 192.168.122.1 172.17.0.1
`

# 3. 查看Ip
$ ifconfig

3. 关机重启

# 1. 数据同步
# 虽然关机命令会执行同步动作,但仍强烈建议先多次执行sync主动同步
$ sync;sync;sync;
1. shutdown 关机重启【建议】
# - shutdown [选项] <时间>
`
[选项]
-c # 取消前一个关机命令
-h # 关机
-r # 重启
`

# 立即关机(root用户使用)
$ shutdown -h now
# 过 30 分钟后自动关机
$ shutdown -h 30

# 立即重启(root用户使用)
$ shutdown -r now
# 30分钟后自动重启
$ shutdown -r 30
# 17:30时自动重启
$ shutdown -r 17:30
# 00:30时自动重启
$ shutdown -r 00:30
2. reboot 安全重启
# 重启reboot命令和shutdown命令差不多(安全)
$ reboot
$ reboot -f

# 使用man reboot时,会同时出现`halt、poweroff、reboot`的用法
$ man reboot
3. halt 关机重启
  • 其他关机命令(不太安全,不建议使用)
# - 最简单的关机命令,实际调用的是 shutdown -h
# - halt 执行时将杀死应用进程,执行sync系统调用文件系统写操作完成后就会停止内核

# - halt [选项]
`
# [选项]
-n # 防止sync系统调用,在用fsck修补根分区之后,以阻止内核用老版本的超级块〔superblock〕覆盖修补过的超级块
-w # 并不是真正的重启或关机,只是写wtmp〔/var/log/wtmp〕纪录
-d # 不写wtmp纪录〔已包含在选项[-n]中〕
-f # 没有调用shutdown而强制关机或重启
-i # 关机〔或重启〕前关掉所有的网络接口
-p # 该选项为缺省选项。就是关机时调用 poweroff
`
4. init 关机重启
# 关机
$ init 0
# 重启
$ init 6
`
## 系统运行级别:
0 # 关机
1 # 单用户
2 # 不完全多用户,不含NFS服务
3 # 完全多用户
4 # 未分配
5 # 图形界面
6 # 重启
`
4. poweroff 关机
# 关机
$ poweroff
5. 退出登录
# 修改系统默认运行级别
$ cat /ect/inittab
`
id:3:initdefalult
`

# 查询系统运行级别
$ runlevel

# 退出登录
$ logout

4. 系统时间

# - date [选项] [+格式]
`
-s # 设置系统时间
`
1. 查看时间
# 1. 当前系统时间
$ date
`
202412月 07日 星期六 13:14:19 CST
`

# 2. 当前系统时间(格式化)
$ date +"%Y-%m-%d %H:%M:%S"
`
2024-12-07 13:15:41
`

# 3. 当前系统时间戳(从 1970 年 1 月 1 日 00:00:00 UTC 到当前时刻的秒数,这个秒数也被称为 Unix 时间戳。)
$ date +%s
`
1733548669
`

# 4. 当前系统时间,带时区
$ date -R
`
Sat, 07 Dec 2024 13:16:27 +0800
`
# 测试
$ echo "Current date and time: $(date)" >> myfile.txt
2. 设置时间
# 1. 设置日期和时间(将日期设置为 2024 年 12 月 10 日)
$ date -s "2024-12-10"

# 2. 设置时间为下午 3 点 30 分
$ date -s "15:30:00"

# 3. 设置系统时间
$ sudo date -s "2014-01-01 10:10:10"
`
-s # 设置系统时间
HH:MM:SS # 24小时制格式
hh:mm:ss # 12小时制格式。hh时mm分ss秒
MMDDhhmm[[CC]YY][.ss] # MM月DD日CC世纪YY年份后两位
`

$ sudo date -s "0412122323" # 2023年04月12日

# 同步服务器时间
$ sudo ntpdate -u ntp.api.bz
3. 设置时区
# 查看时区
$ date -R

# 方法1:设置时区
$ sudo timedatectl set-timezone Asia/Shanghai
# 方法2:设置时区
$ tzselect
$ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 查看时区
$ date -R

在这里插入图片描述

5. 防火墙

1. 安装
$ yum install firewalld
2. 启动关闭
  1. CentOS
# 查看防火墙状态
$ systemctl status firewalld			

# 开启关闭防火墙服务
$ systemctl start firewalld.service
# 临时关闭	
$ systemctl stop firewalld.service 	
$ systemctl stop firewalld 
# 然后 reboot 永久关闭
$ systemctl disable firewalld
# 关闭防火墙
$ service iptables stop	
# 永久关闭防火墙
$ chkconfig iptables off	

# 开机自启动防火墙服务
$ systemctl enable firewalld.service	
# 关闭开机自启动防火墙服务
$ systemctl disable firewalld.service	
  1. Ubantu
# 安装防火墙
$ sudo sudo apt-get install ufw

# 查看防火墙版本
$ sudo ufw version
# 查看防火墙状态
$ sudo ufw status
`
Status: active # 活跃
Status: inactive # 不活跃
`

# 开启防火墙
$ sudo ufw enable

# 关闭防火墙 
$ sudo ufw disable

# 重启防火墙
# 注意:添加规则以后,需要使用该命令进行重启防火墙
$ sudo ufw reload
# 设置默认允许外部访问本机
$ sudo ufw default allow

# 设置默认拒绝外部访问主机
# 拒接所有外来访问,本机能正常访问外部
$ sudo ufw default deny

# 允许外部访问 53 端口
$ sudo ufw allow 53
# 注意:开放成功以后,需要重启生效
# 查看 53 端口信息
$ sudo netstat -tunlp | grep 53
# 拒绝外部访问 53 端口
$ sudo ufw deny 53

# 允许 某个IP 访问本机所有端口
$ sudo ufw allow from 192.168.0.1
3. firewall-cmd 命令
# 查看防火墙状态,`running`运行,`not running`关闭
$ firewall-cmd --state	
# 获取活动的区域			
$ firewall-cmd --get-active-zones

# 获取所有支持的服务(每个服务以空格分隔)		
$ firewall-cmd --get-service			
# 获取所有永久支持的服务,就是重启后也支持的
$ firewall-cmd --get-service --permanent	

# 在 0.3.0 之前的 FirewallD版本中,panic 选项是 –enable-panic 与 –disable-panic
# 查看应急模式的状态
$ firewall-cmd --query-panic	
# 开启应急模式阻断所有网络连接		
$ firewall-cmd --panic-on		
# 关闭应急模式		
$ firewall-cmd --panic-off			

# 防火墙预定义的服务配置文件是xml文件,目录在`/etc/firewalld/services/`、`/usr/lib/firewalld/services/`
# 修改配置文件后,使用命令重新加载
$ firewall-cmd --reload				
4. 修改服务
# 查看开启的服务,服务空格隔开(例如: dhcpv6-client https ss)
$ firewall-cmd --permanent --zone=public --list-services	
$ firewall-cmd --permanent --list-services

# 启用某个服务
$ firewall-cmd --zone=public --add-service=https # 临时
$ firewall-cmd --permanent --zone=public --add-service=https # 永久
$ firewall-cmd --permanent --zone=public --add-service=ftp # 永久添加 ftp 服务
$ firewall-cmd --reload # 重启防火墙
5. 修改端口
# 查看开启的端口,端口空格隔开(例如: 8080-8081/tcp 8388/tcp 80/tcp)
$ firewall-cmd --permanent --zone=public --list-ports 
# 查看开启的端口号	
$ firewall-cmd --permanent --list-ports  
# 查询8080端口是否开放
$ firewall-cmd --query-port=8080/tcp

# 开启某个端口
$ firewall-cmd  --zone=public --add-port=8080-8081/tcp # 临时(8080-8081)
$ firewall-cmd --permanent --zone=public --add-port=8080-8081/tcp	# 永久
$ firewall-cmd --permanent --zone=public --add-port=21/tcp # 永久添加tcp 21 端口
$ firewall-cmd --permanent --add-port =8080-8085/tcp # 添加8080-8085的端口区段,也可以是固定值,如3000

# 关闭上面设置的端口
$ firewall-cmd --permanent --remove-port=8080-8085/tcp # 需要注意的是,如果是加的区段值,删的时候也必须为区段值
$ firewall-cmd --reload # 使用命令加载设置
6. 修改规则
# 3. 添加规则: 设置某个ip,访问某个服务(ip:192.168.0.4/24,访问:http)
$ firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4"  source address="192.168.0.4/24" service name="http" accept"
# 删除上面设置的规则
$ firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4"  source address="192.168.0.4/24" service name="http" accept"
  1. 在每次修改服务、端口和规则后 /etc/firewalld/zones/public.xml 文件就会被修改。
  2. 所以也可以修改文件,然后重新加载。
    在这里插入图片描述
7. 端口转发
# 1. 先开启允许伪装IP
# 检查是否允许伪装IP
$ firewall-cmd --query-masquerade 

# 允许防火墙伪装IP	
$ firewall-cmd --add-masquerade   	

# 禁止防火墙伪装IP
$ firewall-cmd --remove-masquerade	

# 2. 设置转发
# 转发tcp 22 端口至 3753	
$ firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=3753	

# 转发 22 端口数据至另一个 ip 的相同端口上
$ firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toaddr=192.168.1.100	

# 转发 22 端口数据至另一 ip 的 2055 端口上		
$ firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.100	

6. openssl

$ openssl version

二、进程命令

ifconfig

## 开放53端口
sudo ufw allow 53

# 查看进程所有打开最大 fd 数
ulimit -n

1. top、htop

# - top、htop
# 基本原理:
top命令可以实时显示系统的各种资源使用情况,如 CPU 使用率、内存使用率、进程状态等。
htop是top的增强版,提供了更友好的用户界面和更多的功能。
# 操作方法:
在终端中输入top或htop,会实时显示系统的资源使用情况和进程列表。
通过查看这些信息,可以了解系统的实时运行状态,判断是否存在资源占用过高或异常的进程。
# 1. 资源管理器(q退出)
$ top
# 2. 查看系统实时状态
$ htop

2. netstat、ss

# - netstat 可以显示网络连接、路由表、接口统计信息等。
# - netstat 是一个常用的网络工具,可以显示网络连接、路由表、接口统计等信息。

# - ss 是 netstat 的现代替代品,但性能更好,输出格式也更灵活。
1. netstat
# 基本原理:
netstat命令用于显示网络连接、路由表和网络接口等信息,通过查看网络连接状态,可以了解系统是否存在外部连接或正在进行的网络活动。
# 操作方法:
输入netstat -an可以查看所有的网络连接,包括 TCP、UDP 和 UNIX 域套接字等,通过分析连接状态和相关端口,可以判断系统是否存在异常的网络活动或外部连接。

$ sudo netstat [-选项]
`
-t # 选项表示只显示 TCP 协议的端口;
-u # 选项表示只显示 UDP 协议的端口;
-l # 选项表示只显示正在监听的端口;
-n # 选项表示以数字形式显示端口号,而不是使用服务名。
-a # 它会显示所有(all)的套接字连接,包括正在监听(LISTEN)的服务端口和已经建立(ESTABLISHED)的连接,还包括一些处于其他状态(如TIME_WAIT、CLOSE_WAIT等)的连接。
`
# 1. 查看所有监听端口:
$ sudo netstat -tuln
`
活跃的互联网连接(服务器和已建立的)
Active Internet connections (servers and established)
	  接收	 发送	本地						外部						状态
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:81              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN   
...
`

# 2. 查看特定端口:
$ sudo netstat -tuln | grep ':80'
`
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN  
`

# 网络状态(确认有哪些连接)
$ sudo netstat -a
# 查看开放的端口
$ sudo netstat -tulpn
# 查看端口占用
$ sudo netstat -lnt
2. ss
# 查看所有监听端口:
$ sudo ss -tuln
# 查看特定端口:
$ sudo ss -tuln | grep ':443'
# 查看特定端口被哪个进程占用:
$ sudo ss -tlnp | grep <端口号>

4. lsof

# - lsof 可以列出系统上所有打开的文件,包括网络套接字。
# - lsof (list open files):
是一个列出当前系统打开文件的工具。

$ sudo lsof [-选项]
`
`
# 1. 查看所有监听端口
$ sudo lsof -i -P -n

# 2. 查看特定端口
$ sudo lsof -i -P -n | grep ':22'
$ lsof -i:80

# 3. 查看特定端口的进程号
$ lsof -i:80 | grep LISTEN | grep -v grep | awk '{print $2}'

# 4. 查看打开特定文件的进程号		
$ lsof <文件名>
# 4. 查看特定进程所打开的文件
$ lsof -c <进程号>
$ lsof -p <进程号>
# 显示归属 gid 的进程情况
$ lsof -g gid

## 显示目录下被进程开启的文件
$ lsof +d /usr/local/ 
## 同上,但是会搜索目录下的目录,时间较长
$ lsof +D /usr/local/ 

## 显示使用 fd 为 4 的进程
$ lsof -d 4
# 显示所有打开的 端口 和 UNIX domain 文件
$ lsof -i -U

3. ps

# - ps
# 基本原理:
ps命令用于查看系统中的进程,通过查看进程列表,可以了解系统正在运行的程序和服务,判断是否存在异常的进程。
# 操作方法:
输入ps -ef可以查看系统中所有的进程,包括进程的 PID、父进程 PID、用户、启动时间、占用的 CPU 和内存等信息。

# - grep(管道):作用是 将一个命令的输出 用作 另一个命令的输入。
# 1. 查看系统进程
$ ps -ef
`
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 Nov28 ?        00:00:10 /sbin/init noibrs
root           2       0  0 Nov28 ?        00:00:00 [kthreadd]
...
`
# 3. 后台进程执行状态
$ ps -aux
`
# 注:COMMAND列,带[]的是内核进程,不带[]的是用户态进程 
root      333271  0.0  0.0   5768  1016 ?        S    15:17   0:00 sleep 1
qs        333274  0.0  0.0   5768  1032 ?        S    15:17   0:00 sleep 1
root      333275  0.0  0.0  10332  3616 pts/0    R+   15:17   0:00 ps -aux
`
# 查看进程占用CPU的情况
ps aux --sort=-%cpu


# 查看所有运行的进程
ps -ef
# 查看所有名称中包含 java 的进程
ps -ef | grep java
# 根据 jar名 查找进程号
ps -ef | grep qs-server | grep -v grep | awk '{print $2}'
# 查看服务启动参数(空代表没有)
ps -eaf | grep qs-server | grep -v grep

ps aux | grep tomcat
# 指定端口查询
ps aux | grep 4874

# 查看 nginx 进程
$ ps -A | grep nginx
$ ps -ef | grep nginx
# 查看进程内加载的环境变量
# 也可以去 cd /proc 目录下, 查看进程内存中加载的东西
ps eww -p <进程号>

# 查看进程树找到服务器进程
ps auwxf

# 强制关闭进程名包含xxx的所有进程
ps aux | grep <xxx> | grep -v grep | awk '{print $2}' | xargs kill -9

3. jps

jps # 查看 java 进程 pid
jps -q # 只显示 pid
jps -m # 输出传递给 main 方法的参数,在嵌入式 jvm 上可能是 null
jps -l # 输出应用程序 main class 的完整 package 名,或者应用程序的 jar 文件完整路径名
jps -v # 输出传递给 JVM 的参数
jps -V # 隐藏输出传递给 JVM 的参数

9. kill

kill 2868 # 杀掉 2868 进程
kill -9 2868 # 强制杀掉 2868 进程

pkill nginx
nc -l -k 443 -c 'echo -e "HTTP/1.1 200 OK\n\n $(date) test port"'
nc -l -k 3306 -c 'echo -e "HTTP/1.1 200 OK\n\n $(date) test port"' &

11. ls

## 查看进程启动路径
cd /proc/<进程号>
ls -all
## cwd 对应的是启动路径

12. fuser

# 查看 某个文件或目录 被 哪个进程占用
sudo fuser <端口号>/tcp

三、用户

# 查看当前用户环境变量
$ env

1. 当前登陆用户

1. users
# - users
# 基本原理:
users命令用于显示当前登录系统的用户。
如果需要查看系统中所有的用户,需要结合其他命令一起使用。
# 操作方法:
在终端中输入users,会列出当前登录系统的所有用户。
如果要查看所有用户,可以先使用cut -d: -f1 /etc/passwd获取所有用户名,再结合users命令进行筛选。
# 1. 该脚本会先获取所有用户名,然后检查每个用户是否登录系统,如果登录则输出相应信息。
`
#!/bin/bash
all_users=$(cut -d: -f1 /etc/passwd)
for user in $all_users; do
    if who | grep -q "^$user "; then
        echo "$user is logged in"
    fi
done
`
2. who、w
# - who 
# 基本原理:
who命令用于查看当前系统中有哪些用户登录以及他们从哪里登录等信息。
# 操作方法:
在终端中输入who,会列出当前登录系统的用户的用户名、终端设备、登录时间等信息。
如果输出为空,则表示当前没有用户登录。
# 1. 查看当前登录用户
$ who
`
root     pts/0        2024-12-17 11:06 (121.238.221.3)
root     pts/1        2024-12-17 11:06 (121.238.221.3)
qs       pts/2        2024-12-17 11:33 (121.238.221.3)
qs       pts/3        2024-12-17 11:33 (121.238.221.3)
`

# - w
# 基本原理:
w命令不仅可以查看当前登录的用户,还能显示系统的负载情况,如系统运行时间、平均负载等。
# 操作方法:
在终端输入w,它会以表格形式展示登录用户的详细信息,包括用户名、终端、登录时间、空闲时间、JCPU、PCPU 和当前执行的命令等,同时也会显示系统负载的相关数据。
# 1. 查看系统负载及登录用户详细信息
$ w
`
 11:39:19 up 18 days, 16:09,  4 users,  load average: 0.00, 0.01, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    121.238.221.3    11:06    0.00s  0.01s  0.00s w
root     pts/1    121.238.221.3    11:06   32:27   1.69s  1.68s top
qs       pts/2    121.238.221.3    11:33    5:41   0.01s  0.01s -bash
qs       pts/3    121.238.221.3    11:33    5:41   0.32s  0.31s top
`
3. last 最近登录信息列表
# - last
# 基本原理:
last命令可以查看系统的登录历史记录,包括登录的用户、登录时间、登录来源等信息,通过查看该记录可以了解过去一段时间内系统的登录情况。
# 操作方法:
在终端中输入last,会按照时间倒序显示系统的登录记录。
如果想查看更详细的信息,可以使用last -a命令,它会显示登录用户的主机名或 IP 地址等额外信息。

# 1. 查看系统登录历史记录
$ last -a
`
qs       pts/3        Tue Dec 17 11:33   still logged in    121.238.221.3
qs       pts/2        Tue Dec 17 11:33   still logged in    121.238.221.3
root     pts/1        Tue Dec 17 11:06   still logged in    121.238.221.3
root     pts/0        Tue Dec 17 11:06   still logged in    121.238.221.3
...
`

# 最近登录的5个账号
$ last -n 5

2. 切换用户

# 1. 切换root用户
$ su -
# 获取一个具有特权的shell(通常会切换到root用户的shell)
$ sudo -s

# 2. 切换test用户  
$ su test
# 切换test用户,并切换用户环境【推荐使用】				
$ su - test

# 查看用户的UID和GID
$ id '用户名'

# 退出
$ Ctrl+D							
1. ssh
# /usr/local/suninfo/oma/oma/third/openssh/bin/ssh.exe 

# 切换远程用户
$ ssh -l test -p 22 192.168.19.128
$ ssh -p 22 root@192.168.100.101

3. 查看用户

1. /etc/passwd 用户文件
# 用户文件 
$ cat /etc/passwd
`
root:x:0:0:root:/root:/bin/bash
# 每条记录用冒号分隔(包含7个字段)
账号名称(root) # 在系统中是唯一的(字符长度1-12个字符)
用户密码(x) # 此字段存放加密口令(保存在/etc/shadow文件中)
用户标识码(UserID) # 系统内部用它来标示用户
组标识码(GroupID) # 系统内部用它来标识用户组(保存在/etc/group文件中) 
用户相关信息(root) # 例如用户全名等 
用户目录 # 用户登录系统后所进入的目录(家目录)
用户环境 # 用户工作的环境(用户使用的shell类型)
`

# 使用awk或cut命令,仅打印出Linux系统中所有用户的用户名列表
$ awk -F':' '{ print $1}' /etc/passwd
$ cut -d: -f1 /etc/passwd
# - /etc/passwd
# 基本原理:
/etc/passwd文件是 Linux 系统用于存储用户信息的重要文件,每行记录一个用户的相关信息,通过查看该文件可以获取系统中所有用户的基本信息。
# 操作方法:
使用cat命令查看/etc/passwd文件的内容,如cat /etc/passwd,文件中的每一行都代表一个用户,格式为用户名:密码:用户ID:组ID:用户描述信息:用户主目录:默认登录Shell。
# 1. 查看所有用户
$ cat /etc/passwd
`
root:x:0:0:root:/root:/bin/bash
qs:x:1001:1001::/home/qs:/bin/bash
...
`

# - awk
# 基本原理:
awk是一种强大的文本处理工具,可以对文本文件进行各种操作。
通过指定/etc/passwd文件和相应的分隔符,可以提取出用户名并显示。
# 操作方法:
使用awk -F: '{print $1}' /etc/passwd命令,会以:为分隔符,提取/etc/passwd文件中的第一列,即用户名,并将其显示出来。
# 1. 查看所有用户名
$ awk -F: '{print $1}' /etc/passwd

# - getent
# 基本原理:
getent命令用于从系统数据库中获取条目,通过指定passwd数据库,可以获取与/etc/passwd文件相同的用户信息。
# 操作方法:
在终端中输入getent passwd,会列出系统中的所有用户及其相关信息,格式与/etc/passwd文件中的一致。
# 1. 查看所有用户
$ getent passwd
`
root:x:0:0:root:/root:/bin/bash
qs:x:1001:1001::/home/qs:/bin/bash
...
`
# - id
# 基本原理:
id命令用于显示用户的身份标识信息,包括用户 ID、组 ID 等。如果不指定用户名,则显示当前用户的信息。通过循环遍历所有可能的用户 ID,可以查看系统中的所有用户。
# 1. 显示当前用户信息
$ id
`
uid=0(root) gid=0(root) groups=0(root)
`
# 2. 显示指定用户信息
$ id qs
`
uid=1001(qs) gid=1001(qs) groups=1001(qs),0(root)
`
# 3. 使用for循环结合id命令来查看所有用户,例如以下脚本:
`
#!/bin/bash
for i in $(seq 0 65535); do
    id "user$i" 2>/dev/null && echo "user$i exists"
done
`

# 显示所有可用的命令,别名和函数
$ compgen -u
2. /etc/shadow 用户密码文件
# 密码文件    
$ cat /etc/shadow
`
root:$6$fY0VaIFr$n2WpIAO8cQoet7zx1c6af4aamabadE40w0YFserSkdanbfiI9IM77TWdmHhrVvZWeMivpmK0XltwdP8kYqGyZ/:19352:0:99999:7:::
qs:$y$j9T$FhplkKWsZM8X3I/QpqF9I/$zeubrM0qHCFEwP561XonAzaTGhMo5fH/gW3wu0Dsfi7:19871:0:99999:7:::
mysql:!:19112:0:99999:7:::
# 每条记录用冒号分隔,9个字段组成
用户名 # 用户登录到系统时使用的名字,而且是惟一的 
口令 # 存放加密的口令 
最后一次修改时间 # 标识从某一时刻起到用户最后一次修改时间 
最大时间间隔 # 口令保持有效的最大天数,即多少天后必须修改口令 
最小时间间隔 # 再次修改口令之间的最小天数 
警告时间 # 从系统开始警告到口令正式失效的天数 
不活动时间 # 口令过期少天后,该账号被禁用 
失效时间 # 指示口令失效的绝对天数(从1970年1月1日开始计算)
标志 # 未使用 
`
3. /etc/sudoers 权限文件
# 增加 sudo 权限
$ vim /etc/sudoers
`
root    ALL=(ALL:ALL) ALL
qs      ALL=(ALL:ALL) ALL
`

4. 创建用户

# 1. 创建test用户
$ useradd test
# 为test用户设置密码
$ passwd test

# 2. 创建test用户,并指定用户目录
$ useradd test -d /home/test

# 3. 创建qs用户,并添加到root用户组
# 但是不允许用户登录,仅仅可以ftp登录,ftp登录后的默认工作目录是/home/data 
$ useradd -g root -d /home/data -s /sbin/nologin qs

5. 删除用户

# 1. 删除test用户,不会删除用户目录
$ userdel test

# 2. 删除test用户,以及用户目录
$ userdel –r test      		

6. 修改密码

# 1. 修改root用户密码
$ sudo passwd root

四、用户组

# - 当在创建一个新用户user时,若没有指定他所属于的组。
# 就建立一个和该用户同名的私有组。
# - 创建用户时,也可以指定所在组并创建。

1. 查看登陆用户所属组

# 查看当前登录用户的所有所属组列表
$ groups
`
root
# - 或
qs root
`

2. 查看用户组

1. /etc/group 用户组文件
# 组信息文件 
$ cat /etc/group  
`
root:x:0:qs
qs:x:1001:
组名 # 用户所属组 
组口令 # 一般不用GID(组ID) 
用户列表 # 属于该组的所有用户
`
2. /etc/gshadow 用户组密码文件
$ cat /etc/gshadow
`
root:*::qs
qs:!::
mysql:!::
`

3. 创建用户组

# 1. 创建public用户组
$ groupadd public

# 2. 创建qs用户,并指定public用户组    
$ useradd qs –g public

4. 删除用户组

# 如果用户组存在用户,必须先删除用户才能删除用户组
$ groupdel public
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

骑士梦

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值