/etc/passwd
是 Linux的核心系统文件,用于存储用户账户的基本信息。它是用户身份验证、权限管理和进程控制的基础。尽管文件名包含 passwd
,但它不存储加密后的密码(现代系统中密码通常存储在 /etc/shadow
文件中),而是记录用户的其他关键属性。
文件中的每一行对应一个用户账户,字段由冒号 :
分隔,共 7 个字段。格式如下:
username:password:UID:GID:GECOS:home_directory:shell
各字段含义:
字段 | 说明 |
---|---|
1. username | 用户名(登录名)。这是用户登录系统时使用的唯一标识符。 |
2. password | 密码占位符。现代系统中该字段通常为 x 或 * ,表示密码实际存储在 /etc/shadow 中。 |
3. UID (User ID) | 用户的唯一数字标识符(User ID)。系统通过 UID 识别用户,而不是用户名。 |
4. GID (Group ID) | 用户的主组的唯一数字标识符(Group ID)。主组信息在 /etc/group 中定义。 |
5. GECOS | 用户描述信息(如全名、电话号码等)。通常用于注释或显示用户信息。 |
6. home_directory | 用户的主目录路径(Home Directory)。用户登录后默认进入此目录。 |
7. shell | 用户登录后使用的默认 Shell(命令解释器)。如 /bin/bash 或 /sbin/nologin 。 |
以下是 /etc/passwd
文件中的典型条目:
root:x:0:0:root:/root:/bin/bash
root
:用户名。x
:密码占位符(实际密码在 /etc/shadow
中)。0
:UID 为 0(root 用户的 UID 固定为 0)。0
:GID 为 0(root 的主组 ID 为 0)。root
:GECOS 字段(用户描述信息)。/root
:root 用户的主目录。/bin/bash
:root 用户的默认 Shell。可以使用以下几种常见的Linux命令:
cut
命令cut -d: -f1 /etc/passwd
说明:
-d:
:指定字段分隔符为冒号 :
。-f1
:提取第一个字段(即用户名)。# 输出为:
root
daemon
bin
sys
.......
awk
命令awk -F: '{print $1}' /etc/passwd
说明:
-F:
:指定字段分隔符为冒号 :
。{print $1}
:打印每一行的第一个字段。# 输出为:
root
daemon
bin
sys
.......
cat
和管道符cat /etc/passwd | awk -F: '{print $1}'
cat /etc/passwd
:读取文件内容。|
:将输出传递给 awk
处理。awk -F: '{print $1}'
:提取用户名。-F:
:指定字段分隔符为冒号 :
。/etc/passwd
的字段由冒号 :
分隔,第三列是 UID(用户标识符)。提取的 UID 可能包含重复值,且需要按 数值大小 排序。使用 awk
提取第三列并搭配使用 sort -n
实现的命令如下:
awk -F: '{print $3}' /etc/passwd | sort -n
说明:
-F:
:指定字段分隔符为冒号 :
。{print $3}
:打印每行的第三个字段(UID)。|
:将 awk
的输出传递给 sort
。sort -n
:按数值升序排序。方法一:使用 lsb_release
命令
命令:lsb_release -a
说明:显示系统的完整版本信息(名称、版本号、代号等)。
示例输出:
Distributor ID: Ubuntu
Description: Ubuntu 22.04.5 LTS
Release: 22.04
Codename: jammy
注意事项:
如果未安装 lsb_release,可以通过包管理器安装:
sudo apt install lsb-core
sudo yum install redhat-lsb-core
方法二:查看 /etc/os-release
文件
命令:cat /etc/os-release
说明:显示系统的详细版本信息,包括名称、版本号、ID等。
示例输出:
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.5 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
方法三:查看 /etc/issue
文件
命令:cat /etc/issue
说明:显示系统的简要版本信息(通常用于登录界面)。
示例输出:
Ubuntu 22.04.5 LTS \n \l
方法四:使用 hostnamectl
命令(仅限 systemd 系统)
命令:hostnamectl
说明:显示系统信息,包括操作系统版本和内核版本。
示例输出:
Static hostname: longlijisi
Icon name: computer-vm
Chassis: vm
Machine ID: 2b29fbad6f144648bac3add2497fad97
Boot ID: 7ac5783e1d694c2285324c7f945f41ec
Virtualization: vmware
Operating System: Ubuntu 22.04.5 LTS
Kernel: Linux 5.15.0-143-generic
Architecture: x86-64
Hardware Vendor: VMware, Inc.
Hardware Model: VMware Virtual Platform
方法一:使用 uname
命令
命令:uname -r
说明:显示当前运行的内核版本号。
示例输出:
5.15.0-143-generic
扩展命令:uname -a
说明:显示所有内核信息(包括架构、主机名、内核版本等)。
示例输出:
Linux longlijisi 5.15.0-143-generic #153-Ubuntu SMP Fri Jun 13 19:10:45 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
方法二:查看 /proc/version
文件
命令:cat /proc/version
说明:显示内核版本和编译信息。
示例输出:
Linux version 5.15.0-143-generic (buildd@lcy02-amd64-115) (gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #153-Ubuntu SMP Fri Jun 13 19:10:45 UTC 2025
方法三:使用 dmesg
命令
命令:sudo dmesg | grep "Linux version"
说明:从系统日志中提取内核版本信息。
示例输出:
[ 0.000000] Linux version 5.15.0-143-generic (buildd@lcy02-amd64-115) (gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #153-Ubuntu SMP Fri Jun 13 19:10:45 UTC 2025 (Ubuntu 5.15.0-143.153-generic 5.15.180)
在更换系统源之前,建议先对原始配置文件进行备份,并查看和确认系统版本。
sed
命令自动替换# 替换主源和安全更新源为阿里云镜像
sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
完成源文件修改后,更新APT缓存以使新源生效:
sudo apt update
如果需要升级系统中已安装的软件包到最新版本:
sudo apt upgrade
执行sudo apt update
时会报错:
E: The repository 'http://archive.ubuntu.com/focal Release' does not have a Release file.
或者:
E: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/focal/... 404 Not Found
因为focal
源的地址(如http://archive.ubuntu.com/ubuntu/dists/focal/)在 Ubuntu 22.04 中并不存在。
focal
源拉取旧版本的软件包,导致:
libssl1.1
在 focal
中是 1.1.1,而 jammy
中是 3.0)。focal
的源可能已停止更新)。sudo apt upgrade
或 sudo do-release-upgrade
时会失败,因为系统无法找到正确的升级路径。如果已安装了来自 focal
源的软件包,需手动修复:
清理缓存
sudo apt clean
修复依赖关系
sudo apt --fix-broken install
强制升级系统
sudo apt full-upgrade
删除错误源
如果仍有残留错误源,编辑 /etc/apt/sources.list.d/
中的文件,删除或修正 focal
相关条目。
apt update
和 apt upgrade
的区别命令 | 功能 | 特点 |
---|---|---|
apt update |
更新本地软件包列表(从配置的源获取最新的软件包信息)。 | - 不实际安装或升级任何软件包。 - 仅刷新软件包版本信息。 |
apt upgrade |
根据更新后的软件包列表,升级所有已安装的软件包到最新版本。 | - 实际下载并安装新版本的软件包。 - 不会移除或安装额外的软件包(除非依赖关系要求)。 |
步骤 1:更新软件包列表
sudo apt update
/etc/apt/sources.list
和 /etc/apt/sources.list.d/
中的源获取最新的软件包元数据(版本号、依赖关系等)。步骤2:升级已安装的软件包
sudo apt upgrade
apt update
获取的最新信息,升级所有可以升级的软件包。步骤3(可选):处理复杂依赖关系
如果某些软件包升级需要移除旧版本或安装新依赖,使用:
sudo apt full-upgrade
步骤 4(可选):清理无用软件包
升级完成后,清理不再需要的依赖项:
sudo apt autoremove
sudo apt autoclean
sudo apt update
sudo apt install nginx
安装完成后,Nginx 会自动启动。检查服务状态以确认是否运行正常:
sudo systemctl status nginx
80
443
(需配置 SSL/TLS 证书)直接访问:
打开浏览器,输入以下任意一种方式:
http://localhost
http://127.0.0.1
如果 Nginx 配置了 HTTPS
(默认443
端口),输入:
https://localhost
https://127.0.0.1
自定义端口访问:
如果修改了默认端口(例如8080
),在浏览器中输入:
http://localhost:8080
通过服务器 IP 地址访问:
获取服务器公网 IP(例如192.168.163.139),在浏览器中输入:
http://192.168.163.139
如果配置了 HTTPS:
https://192.168.163.139
通过域名访问:
如果域名已解析到服务器 IP(例如example.com),输入:
http://example.com
https://example.com
检查服务状态:
sudo systemctl status nginx
active (running)
,说明服务正常运行。测试本地访问:
curl http://localhost
Welcome to nginx!
。Nginx的主配置目录在/etc/nginx/
文件夹中,
主配置文件路径为/etc/nginx/nginx.conf
可以通过sudo nginx -t
命令验证nginx
配置文件路径
输出为:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
还可以通过sudo nginx -c 路径名
指定nginx配置文件的路径。
netstat
命令netstat
是一个传统的网络工具,用于显示网络连接、路由表和接口统计信息。
sudo netstat -ntlp
-n
:不解析主机名、服务名或用户ID,直接显示数字形式的 IP 地址和端口号(如 0.0.0.0:80
而非 *:http
)-t
:仅显示 TCP 协议 的连接和监听端口。-l
:仅显示处于 监听状态 (LISTEN) 的连接(即等待客户端连接的服务)。-p
:显示与每个连接相关的 进程 ID (PID) 和程序名称(如 nginx
、sshd
)。ss
命令(推荐)ss
是 netstat
的现代替代工具,性能更好且输出更简洁。
sudo ss -tuln
-t
:TCP 端口。-u
:UDP 端口。-l
:仅显示监听状态的端口。-n
:不解析服务名和主机名。lsof
命令lsof
可以列出所有打开的文件和网络连接,适合查看具体进程占用的端口。
sudo lsof -i -P -n | grep LISTEN
-i
:显示网络连接。-P
:不将端口号转换为服务名。-n
:不解析 IP 地址为主机名。回环地址(Loopback Address) 是一种特殊的 IP 地址,用于将网络请求从本地主机发送到自身,而不经过物理网络接口。它主要用于 本地测试 和 网络诊断,确保数据包不会离开设备,而是直接由操作系统内部处理。
最常用地址:127.0.0.1
完整地址范围:127.0.0.0/8
(即所有以 127.
开头的地址,如 127.1.2.3
)。
IPv6 的回环地址:::1
(零压缩形式)。
地址:::1
(全称为 0:0:0:0:0:0:0:1
)。
用途:与 IPv4 的 127.0.0.1
类似,用于本地测试。
ping 127.0.0.1
或 ping ::1
,可以快速检查本机的 TCP/IP 协议栈是否正常工作。http://127.0.0.1:端口
访问,避免依赖外部网络。loopback
接口(逻辑接口),其地址作为设备的唯一标识(如 192.168.1.1
),即使物理接口故障,也能通过 loopback
接口管理设备。loopback
接口的地址作为 Router ID
,确保路由信息的稳定性。127.0.0.1
,迫使攻击者攻击自己,从而缓解压力。127.0.0.1
,防止外部未授权访问。netstat
或 ss
命令这两个工具可以显示网络连接和监听端口的信息,包括绑定的地址和端口号。
命令:
sudo netstat -tulnp | grep <端口号>
或
sudo ss -tulnp | grep <端口号>
参数说明:
-t
:显示 TCP 连接。-u
:显示 UDP 连接。-l
:仅显示监听状态的连接。-n
:以数字形式显示地址和端口(不解析为服务名)。-p
:显示进程信息(需要管理员权限)。$ sudo netstat -tulnp | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx
tcp6 0 0 [::]:80 [::]:* LISTEN 1234/nginx
$ sudo netstat -tulnp | grep 80
tcp 0 0 127.0.0.1:80 0.0.0.0:* LISTEN 1234/nginx
localhost
或 127.0.0.1
访问。$ sudo netstat -tulnp | grep 80
tcp 0 0 192.168.1.100:80 0.0.0.0:* LISTEN 1234/nginx
192.168.1.100
的 80 端口。192.168.1.100
访问该服务。rz
和 sz
命令(推荐用于支持 Zmodem 协议的终端,如windterm、xshell)lrzsz
包Debian/Ubuntu:
sudo apt install lrzsz
CentOS/RHEL:
sudo yum install lrzsz
rz
命令,会弹出文件选择窗口,选择本地文件并确认上传。lz 文件名
,会弹出保存文件的对话框,选择本地保存路径。scp
命令(基于SSH的安全拷贝)scp 本地文件路径 用户名@远程服务器IP:远程路径
# 示例:
scp file.txt [email protected]:/home/user/
# 如果远程服务器的 SSH 端口不是默认的 22(例如 2222):
scp -P 2222 file.txt [email protected]:/home/user/
-P : 指定SSH端口号
scp 用户名@远程服务器IP:远程文件路径 本地路径
# 示例:
scp [email protected]:/home/user/file.txt .
# 如果远程服务器的 SSH 端口是非默认端口:
scp -P 2222 [email protected]:/home/user/file.txt .
-P : 指定SSH端口号
Debian/Ubuntu:
sudo apt update && sudo apt install rsync
CentOS/RHEL:
sudo yum install rsync
rsync -avzP 本地文件路径 用户名@服务器IP:远程路径
# 示例:
rsync -avzP file.txt [email protected]:/home/user/
rsync -avzP 用户名@服务器IP:远程文件路径 本地路径
# 示例:
rsync -avzP [email protected]:/home/user/file.txt .
参数说明
-a
:归档模式(保留文件属性)。-v
:显示详细信息。-z
:传输时压缩数据。-P
:支持断点续传。sftp 用户名@服务器IP
# 示例:
sftp [email protected]
在 sftp>
提示符下使用 put
命令:
put 本地文件路径
# 示例,上传file.txt到服务器当前目录:
put file.txt
使用get
命令
get 远程文件路径
# 示例:
get /home/user/file.txt
命令 | 说明 |
---|---|
ls |
查看远程服务器目录内容 |
lls |
查看本地目录内容 |
cd |
切换远程服务器目录 |
lcd |
切换本地目录 |
bye /exit |
退出 sftp 会话 |
wget
或 curl
(适用于从 HTTP/FTP 下载文件)wget
示例:
wget http://example.com/file.zip
curl
示例:
curl -O http://example.com/file.zip
上传文件到远程服务器(需支持 HTTP/FTP 服务)
wget
/curl
上传文件,建议使用 scp
或 sftp
。cp
命令(基础方法)如果目标路径不存在,cp
会自动创建目标目录。
cp -r <源目录路径> <目标路径>
# 示例:
cp -r /path/to/source_directory /path/to/destination/
# 参数说明:
-r:递归复制,会保留目录结构和子目录
cp -r <源文件路径>* <目标路径>
# 示例:
cp -r /path/to/source_directory/* /path/to/destination/
这会将 source_directory
下的所有内容复制到 destination
目录中,而不是在 destination
下创建同名子目录。
rsync
命令(推荐)rsync -av <源目录路径> <目标路径>
rsync -av /path/to/source_directory/ /path/to/destination/
参数说明:
-a
:归档模式(递归复制并保留所有属性,如权限、时间戳等)。-v
:显示详细进度。注意源路径末尾的斜杠:
/
(如 /source_directory/
),rsync
会复制目录内容(不包含目录本身)。/source_directory
),rsync
会在目标路径下创建同名子目录(如 /destination/source_directory/
)。先将源目录打包为.tar
文件:
# 示例:
tar -cvf archive.tar /path/to/source_directory/
-c:创建新归档。
-v:显示进度。
-f:指定归档文件名。
然后将.tar
文件复制到目标路径:
cp archive.tar /path/to/destination/
在目标路径解压.tar
文件即可:
tar -xvf archive.tar -C /path/to/destination/
-x:解压文件。
-C:指定解压目录。
在 Linux 系统中,/opt
目录是一个标准文件系统层级结构(FHS)中定义的目录,主要用于存放可选的第三方软件包或用户自定义的大型应用程序。它的设计目标是将非系统核心的软件与系统自带的软件分离,便于管理、维护和避免冲突。
/opt
下都有独立的子目录,便于统一管理、升级或卸载。可以使用mkdir -p
的命令选项
mkdir -p <目录路径>
mkdir -p a/b/c/d
# 一次性创建嵌套目录结构 a/b/c/d。如果 a、b、c 不存在,会自动创建。
mkdir -p /opt/project/logs/backend
mkdir -p dir1/subdir1 dir2/subdir2 dir3/subdir3
# 可以同时创建三个独立的多级目录结构
硬链接是文件系统的**索引节点(inode)**的别名,多个文件名共享同一个inode和数据块。
软链接本质上是一个独立的文件,其内容是目标文件的路径名,类似于Windows的快捷方式。
特性 | 硬链接(Hard Link) | 软链接(Symbolic Link) |
---|---|---|
inode 编号 | 与源文件相同(共享同一个 inode) | 独立的 inode |
跨文件系统 | ❌ 不支持(只能在同一文件系统内) | ✅ 支持(可以跨文件系统或分区) |
目录支持 | ❌ 不支持(不能对目录创建硬链接) | ✅ 支持(可以对目录创建软链接) |
删除源文件后的效果 | ✅ 数据仍然可用(只要硬链接存在) | ❌ 软链接失效(指向不存在的目标) |
文件权限一致性 | ✅ 与源文件一致 | ❌ 可能不同(软链接权限独立于目标文件) |
存储开销 | 无额外存储(仅增加目录项) | 需要额外存储(保存路径字符串) |
文件系统通过 inode 管理数据块。每个文件名对应一个 inode,而 inode 记录了文件的元数据(如权限、大小、数据块位置)。
硬链接是多个文件名共享同一个 inode 的多个目录项。例如:
touch file1.txt # 创建文件,inode 为 12345
ln file1.txt hardlink # 创建硬链接,hardlink 也指向 inode 12345
file1.txt
后,hardlink
仍然有效,因为数据块未被释放。软链接是一个 独立的文件,其内容是目标文件的路径。例如:
ln -s file1.txt symlink # 创建软链接,symlink 内容是 "file1.txt"
symlink
时,系统会读取其内容并跳转到 file1.txt
。file1.txt
被删除或移动,symlink
会失效。硬链接:
ln source_file hardlink_name
# 示例:
ln file1.txt hardlink_to_file1.txt
软链接:
ln -s target_file symlink_name
# 示例:
ln -s /path/to/file1.txt symlink_to_file1.txt
可以通过一下命令进行查找:
find / -name nginx.conf
# 或者
whereis nginx
ln -s
命令创建软链接sudo ln -s /etc/nginx /opt/nginx
# 参数说明
-s:表示创建软链接(符号链接)。
/etc/nginx:目标目录(Nginx 配置目录)。
/opt/nginx:软链接的路径。
ls -l /opt/nginx
# 输出应类似:
lrwxrwxrwx 1 root root 10 Jul 9 08:58 /opt/nginx -> /etc/nginx
# 验证软链接是否正常工作:
cat /opt/nginx/nginx.conf
如果输出 Nginx 配置文件内容,则说明软链接有效。
ls -l 文件名
或者ls -l
命令查看当前文件夹的文件-
**l
,且会显示目标路径**。file 文件名
命令file
命令会直接说明文件类型
普通文件:
example.txt: ASCII text
软链接:
symlink: symbolic link to /etc/nginx
readlink 文件名
命令readlink
专门用于读取软链接的目标路径
stat 文件名
命令File
显示为文件名且无指向文件路径。File
显示为文件名并指向链接的目标路径。