Linux基础复习第五天
1./etc/passwd 这个文件有什么作用,记录的内容是什么
/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。
2.如果我想获取上面文件的以:分隔的第一列内容,如何获取
可以使用以下几种常见的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:
:指定字段分隔符为冒号:
。
- 说明:
3.如何使用AWK获取上面文件第3列内容,并进行排序
/etc/passwd
的字段由冒号 :
分隔,第三列是 UID(用户标识符)。提取的 UID 可能包含重复值,且需要按 数值大小 排序。使用 awk
提取第三列并搭配使用 sort -n
实现的命令如下:
awk -F: '{print $3}' /etc/passwd | sort -n
说明:
-F:
:指定字段分隔符为冒号:
。{print $3}
:打印每行的第三个字段(UID)。|
:将awk
的输出传递给sort
。sort -n
:按数值升序排序。
4.如何查看系统版本和内核版本
查看系统版本
-
方法一:使用
lsb_release
命令命令:
lsb_release -a
说明:显示系统的完整版本信息(名称、版本号、代号等)。
示例输出:
Distributor ID: Ubuntu Description: Ubuntu 22.04.5 LTS Release: 22.04 Codename: jammy
注意事项:
如果未安装 lsb_release,可以通过包管理器安装:
- Ubuntu/Debian:
sudo apt install lsb-core
- RHEL/CentOS:
sudo yum install redhat-lsb-core
- Ubuntu/Debian:
-
方法二:查看
/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)
5.如何更改系统源为国内源
在更换系统源之前,建议先对原始配置文件进行备份,并查看和确认系统版本。
-
使用
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
6.如果添加了错误的国内源,比如使用ubuntu22.04但是添加了ubuntu20.04的源,会发生什么
-
可能出现的问题
(1)APT 更新失败
-
执行
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 中并不存在。
(2)软件包版本冲突
- 如果错误源被保留并尝试安装软件包,APT 会尝试从
focal
源拉取旧版本的软件包,导致:- 软件包版本过低,与系统现有组件不兼容。
- 依赖关系无法满足(例如,
libssl1.1
在focal
中是 1.1.1,而jammy
中是 3.0)。
(3)系统不稳定
- 安装的软件包可能与系统内核、库或其他服务不兼容,导致:
- 系统崩溃或服务无法启动。
- 安全漏洞未修复(因为
focal
的源可能已停止更新)。
(4)无法升级系统
- 执行
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
相关条目。
-
7.如何更新系统中的软件包,apt update和apt upgrade有什么区别
-
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
-
8.如何使用apt安装nginx
-
步骤 1:更新系统软件包列表
sudo apt update
-
步骤 2:安装 Nginx
sudo apt install nginx
-
步骤 3:检查 Nginx 服务状态
安装完成后,Nginx 会自动启动。检查服务状态以确认是否运行正常:
sudo systemctl status nginx
9.Nginx默认使用的端口号是多少,安装后如何访问
Nginx 默认使用的端口号
- HTTP 默认端口:
80
- HTTPS 默认端口:
443
(需配置 SSL/TLS 证书)
安装后访问 Nginx步骤
-
本地访问(开发环境)
-
直接访问:
-
打开浏览器,输入以下任意一种方式:
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
-
-
-
验证 Nginx 是否运行
-
检查服务状态:
sudo systemctl status nginx
- 如果显示
active (running)
,说明服务正常运行。
- 如果显示
-
测试本地访问:
curl http://localhost
- 正确输出应包含
Welcome to nginx!
。
- 正确输出应包含
-
10.apt安装的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配置文件的路径。
11.如何查看当前机器监听了哪些端口号
-
使用
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 地址为主机名。
- 参数说明:
12.什么是回环地址,为什么要有回环地址
回环地址(Loopback Address) 是一种特殊的 IP 地址,用于将网络请求从本地主机发送到自身,而不经过物理网络接口。它主要用于 本地测试 和 网络诊断,确保数据包不会离开设备,而是直接由操作系统内部处理。
-
IPv4 的回环地址
-
最常用地址:
127.0.0.1
-
完整地址范围:
127.0.0.0/8
(即所有以127.
开头的地址,如127.1.2.3
)。 -
IPv6 的回环地址:
::1
(零压缩形式)。
-
-
IPv6 的回环地址
-
地址:
::1
(全称为0:0:0:0:0:0:0:1
)。 -
用途:与 IPv4 的
127.0.0.1
类似,用于本地测试。
-
-
回环地址的存在是为了满足以下几个关键需求:
本地网络协议测试
- 验证协议栈功能:通过
ping 127.0.0.1
或ping ::1
,可以快速检查本机的 TCP/IP 协议栈是否正常工作。 - 无需物理网络:即使未安装网卡或未连接网络,也可以测试本地网络功能。
本地服务调试
- 开发和测试环境:开发者常使用回环地址运行本地服务(如 Web 服务器、数据库),并通过
http://127.0.0.1:端口
访问,避免依赖外部网络。 - 隔离测试:确保某些服务仅在本地运行,不暴露给外部网络,提高安全性。
网络配置排查
- 区分本地和外部问题:如果服务无法访问,可以通过回环地址判断问题是出在本地协议栈还是外部网络。
- 检查防火墙规则:确认防火墙是否阻止了本地服务的端口。
路由器和网络设备的管理
- 稳定标识设备:路由器等网络设备通常配置
loopback
接口(逻辑接口),其地址作为设备的唯一标识(如192.168.1.1
),即使物理接口故障,也能通过loopback
接口管理设备。 - 动态路由协议:OSPF、BGP 等协议使用
loopback
接口的地址作为Router ID
,确保路由信息的稳定性。
安全防护
- 防御攻击:在遭受 DDoS 攻击时,可以将被攻击的域名解析到
127.0.0.1
,迫使攻击者攻击自己,从而缓解压力。 - 限制访问:某些服务(如数据库)默认仅监听
127.0.0.1
,防止外部未授权访问。
- 验证协议栈功能:通过
13.如何判断端口号是绑定到某个具体地址,还是所有地址
-
使用
netstat
或ss
命令这两个工具可以显示网络连接和监听端口的信息,包括绑定的地址和端口号。
命令:
sudo netstat -tulnp | grep <端口号>
或
sudo ss -tulnp | grep <端口号>
参数说明:
-t
:显示 TCP 连接。-u
:显示 UDP 连接。-l
:仅显示监听状态的连接。-n
:以数字形式显示地址和端口(不解析为服务名)。-p
:显示进程信息(需要管理员权限)。
-
实际场景示例
场景 1:Web 服务监听所有地址
$ 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
- 服务同时监听所有 IPv4 和 IPv6 地址的 80 端口。
- 外部网络可以通过任意 IP 地址访问该服务。
场景 2:Web 服务仅监听本地回环地址
$ sudo netstat -tulnp | grep 80 tcp 0 0 127.0.0.1:80 0.0.0.0:* LISTEN 1234/nginx
- 服务仅监听本地回环地址的 80 端口。
- 外部网络无法访问该服务,只能通过
localhost
或127.0.0.1
访问。
场景 3:Web 服务仅监听特定 IP
$ 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
访问该服务。
14.如何通过终端软件将本地文件上传到Linux中,又如何下载文件到本地
-
方法 1:使用
rz
和sz
命令(推荐用于支持 Zmodem 协议的终端,如windterm、xshell) -
方法2:使用
scp
命令(基于SSH的安全拷贝)-
上传本地文件到Linux服务器
scp 本地文件路径 用户名@远程服务器IP:远程路径 # 示例: scp file.txt longlijisi@192.168.163.139:/home/user/ # 如果远程服务器的 SSH 端口不是默认的 22(例如 2222): scp -P 2222 file.txt longlijisi@192.168.163.139:/home/user/ -P : 指定SSH端口号
-
从Linux服务器下载文件到本地
scp 用户名@远程服务器IP:远程文件路径 本地路径 # 示例: scp user@192.168.163.139:/home/user/file.txt . # 如果远程服务器的 SSH 端口是非默认端口: scp -P 2222 longlijisi@192.168.163.139:/home/user/file.txt . -P : 指定SSH端口号
-
-
方法3:使用rsync命令(适合大文件或断点续传)
-
首先安装rsync
-
Debian/Ubuntu:
sudo apt update && sudo apt install rsync
-
CentOS/RHEL:
sudo yum install rsync
-
-
上传文件到Linux服务器
rsync -avzP 本地文件路径 用户名@服务器IP:远程路径 # 示例: rsync -avzP file.txt longlijisi@192.168.163.139:/home/user/
-
下载文件到本地
rsync -avzP 用户名@服务器IP:远程文件路径 本地路径 # 示例: rsync -avzP longlijisi@192.168.163.139:/home/user/file.txt .
参数说明
-a
:归档模式(保留文件属性)。-v
:显示详细信息。-z
:传输时压缩数据。-P
:支持断点续传。
-
-
方法4:使用sftp命令(交互式文件传输)
-
方法 5:使用
wget
或curl
(适用于从 HTTP/FTP 下载文件)
15.如何完全复制一个目录到指定路径
-
方法1:使用
cp
命令(基础方法)如果目标路径不存在,
cp
会自动创建目标目录。cp -r <源目录路径> <目标路径>
-
方法2:使用
rsync
命令(推荐)rsync -av <源目录路径> <目标路径>
-
方法3:使用tar命令(打包后解压)
-
先将源目录打包为
.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:指定解压目录。
-
16./opt目录有什么作用
在 Linux 系统中,/opt
目录是一个标准文件系统层级结构(FHS)中定义的目录,主要用于存放可选的第三方软件包或用户自定义的大型应用程序。它的设计目标是将非系统核心的软件与系统自带的软件分离,便于管理、维护和避免冲突。
- 主要用于安装和存放第三方软件、非标准软件,用于区分系统自带软件,避免文件冲突或覆盖。
- 每个软件在
/opt
下都有独立的子目录,便于统一管理、升级或卸载。 - 适合部署需要独立环境或特定版本的应用程序。
17.如何使用一条命令创建多级目录
可以使用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 # 可以同时创建三个独立的多级目录结构
18.什么是软链接什么是硬链接,区别是什么
-
硬链接(Hard Link)
硬链接是文件系统的**索引节点(inode)**的别名,多个文件名共享同一个inode和数据块。
- 所有硬链接指向同一个inode。
- 删除任意一个硬链接,只要还有一个硬链接存在的话,文件数据仍然可用。
- 但它不能跨文件系统,inode是文件系统特有的。
- 不可以对目录创建硬链接,避免文件系统的循环引用。
-
软链接**(Symbolic Link)**
软链接本质上是一个独立的文件,其内容是目标文件的路径名,类似于Windows的快捷方式。
- 软链接有独立的inode,仅存储目标路径。
- 可以跨文件系统,甚至可以指向网络路径。
- 可以对文件或者目录创建软链接。
- 如果目标文件或目录被删除,软链接会实现,变成悬空链接。
-
区别对比
特性 硬链接(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
-
19.什么场景下使用软链接,什么场景下使用硬链接
-
硬链接:
- 需要确保文件即使被误删也能保留(例如备份重要文件)。
- 同一文件系统内需要多个文件名指向同一数据。
- 不推荐用于目录(可能导致文件系统问题)。
-
软链接:
- 需要跨文件系统或分区链接文件或目录。
- 需要为目录创建快捷方式(例如将深层目录链接到更易访问的位置)。
- 需要动态调整路径(例如版本管理、符号链接到动态库)。
20.创建一个软链接/opt/nginx,让其链接到nginx的配置目录
-
首先,确认Nginx配置目录的路径
可以通过一下命令进行查找:
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 配置文件内容,则说明软链接有效。
21.如何判断一个文件是链接文件还是普通文件
-
用
ls -l 文件名
或者ls -l
命令查看当前文件夹的文件- 普通文件的第一个字符为**
-
** - 软链接文件的第一个字符**
l
,且会显示目标路径**。
- 普通文件的第一个字符为**
-
用
file 文件名
命令-
file
命令会直接说明文件类型-
普通文件:
example.txt: ASCII text
-
软链接:
symlink: symbolic link to /etc/nginx
-
-
-
用
readlink 文件名
命令readlink
专门用于读取软链接的目标路径- 如果是软链接,会输出目标路径。
- 如果是普通文件,则无输出或者报错。
-
用
stat 文件名
命令- 如果是普通文件,
File
显示为文件名且无指向文件路径。 - 如果是软链接,
File
显示为文件名并指向链接的目标路径。
- 如果是普通文件,