6224 字
31 分钟
Linux基础问题 7
2025-08-23

1./dev/zero和/dev/null是什么?#

在类Unix系统中,/dev/zero/dev/null 都是特殊的设备文件,但它们有不同的作用,简单来说:

  • /dev/zero 是一个提供零字节的设备。
  • /dev/null 是一个丢弃数据的“黑洞”设备
  1. /dev/zero

    • 是一个生成连续零字节的虚拟设备。

    • 你可以将它用于填充文件,或者需要给某个程序提供一段全零的输入。

    • 示例:用 dd 命令将 /dev/zero 的内容写入一个文件(例如,创建一个大小为 1GB 的全零文件)。

      Terminal window
      dd if=/dev/zero of=zero_file bs=1M count=1024
  2. /dev/null

    • 是一个“黑洞”设备,它会丢弃所有写入它的数据,相当于一个空输出。

    • 任何写入 /dev/null 的数据都会被丢弃,而且它是一个无限大的设备,所以可以无穷无尽地写入数据而不会引发问题。

    • 通常用于丢弃不需要的输出,或者作为命令行参数来忽略某些输入。

    • 示例:将命令输出丢弃到 /dev/null

      Terminal window
      # 这个命令将标准输出和标准错误输出都丢弃
      some_command > /dev/null 2>&1
      • >:覆盖写入(这里和追加写入也没区别了)

      • 2>&1(标准错误重定向):

        • 2>:这里的 2文件描述符(File Descriptor)。在 Linux 中:

          • 0 代表标准输入(stdin)
          • 1 代表标准输出(stdout)
          • 2 代表标准错误(stderr)

          所以 2> 表示重定向标准错误

        • &1:这里的 &1 不是一个文件,而是指向文件描述符 1 当前目的地的指针。

        • 合起来2>&1 的意思是 “将标准错误(2)重定向到(&)标准输出(1)当前所指向的同一个地方”

2.如何查看硬盘的分区,以及当前系统磁盘使用大小?#

  1. df -Th:看整个分区
    • -h 选项代表 “Human-readable”,以易读的单位(G, M, K)显示大小
    • -T显示文件系统类型(Type),如 ext4, xfs, tmpfs 等
  2. du -sh:看特定目录或文件占用空间
    • -s:显示总和,不显示子目录详情。
    • -h:人性化显示单位。
    • 例如:du -h /home --max-depth=1 | sort -h
      • 查看/home目录下所有文件和子目录的大小,并排序
      • --max-depth=1:只深入到第 1 级子目录。

3.创建一块新硬盘,1G大小,挂载到/opt/mydir目录,并设置为开机启动挂载?#

1.创建虚拟硬盘文件#

dd 命令从 /dev/zero 读取数据,创建一个充满空字节的 1GB 文件

Terminal window
sudo dd if=/dev/zero of=/opt/mynewdisk.img bs=1M count=1024
  • if=/dev/zero:输入源,提供无限的零字节。
  • of=/opt/mynewdisk.img:输出文件,我们创建的“硬盘”文件路径和名称。
  • bs=1M:块大小,每次读写 1 MiB。
  • count=1024:块数量。1M * 1024 = 1024MB ≈ 1GB。

Linux 可以将一个文件虚拟成块设备,文件关联为loop设备

Terminal window
sudo losetup -fP /opt/mynewdisk.img
  • -f:查找第一个可用的 loop 设备。
  • -P强制内核在设备上扫描分区表,这是关键参数,否则分区(如 loop0p1)可能不会立即出现。

查看使用了哪个loop设备:

Terminal window
losetup -a
# 输出如下
/dev/loop1: [64768]:789541 (/var/lib/snapd/snaps/lxd_29351.snap)
/dev/loop6: [64768]:786637 (/var/lib/snapd/snaps/snapd_25202.snap)
/dev/loop4: [64768]:789408 (/var/lib/snapd/snaps/core20_2599.snap)
/dev/loop2: [64768]:1704148 (/opt/mynewdisk.img)
/dev/loop0: [64768]:789540 (/var/lib/snapd/snaps/core20_2318.snap)
/dev/loop5: [64768]:788501 (/var/lib/snapd/snaps/lxd_31333.snap)
/dev/loop3: [64768]:787239 (/var/lib/snapd/snaps/snapd_24792.snap)

可以发现使用的loop设备为/dev/loop2

2.分区#

使用 fdisk 对刚刚关联的 loop 设备(例如 /dev/loop2)进行分区

Terminal window
fdisk /dev/loop2

fdisk 的交互界面中,依次输入以下命令:

  1. n:创建新分区。
  2. p:选择主分区。
  3. 1:分区号设为 1。
  4. 回车:接受第一个扇区的默认值。
  5. 回车:接受最后一个扇区的默认值(使用整个磁盘)。
  6. w:将分区表写入磁盘并退出。

3.格式化#

格式化新创建的分区为 ext4 文件系统:

Terminal window
mkfs.ext4 /dev/loop2

4.创建挂载点#

没有这个/opt/mydir,创建一个

5.临时挂载#

Terminal window
mount /dev/loop2 /opt/mydir

6.配置开机自动挂载#

编辑 /etc/fstab 文件,在文件末尾添加一行:

Terminal window
/dev/loop2 /opt/mydir ext4 defaults 0 2
  • /dev/loop2:新硬盘分区
  • /opt/mydir:挂载点
  • ext4:文件系统类型
  • defaults:挂载选项,表示使用默认设置
  • 0:表示不需要在启动时进行备份(dump)
  • 2:表示在启动时自动进行文件系统检查

7.验证#

用以下指令判断修改后的配置文件是否正确:

Terminal window
# 如果没有任何错误输出,则配置正确
mount -a

检查是否挂载到/opt/mydir

Terminal window
df -Th
# 输出带有这行,说明没有问题
Filesystem Type Size Used Avail Use% Mounted on
/dev/loop2 ext4 974M 24K 907M 1% /opt/mydir

4.使用dd命令,在/opt/mydir目录中写入一个200M大小的文件?#

Terminal window
sudo dd if=/dev/zero of=/opt/mydir/file_200MB bs=1M count=200
  • if=/dev/zero:输入文件是 /dev/zero,它会生成零字节的数据。
  • of=/opt/mydir/file_200MB:输出文件路径,即将在 /opt/mydir 目录下创建一个名为 file_200MB 的文件。
  • bs=1M:设置块大小为 1MB。
  • count=200:表示写入 200 个块,因此文件的总大小将为 200MB

5.如何查看当前系统内存使用大小?#

  1. free命令:

    Terminal window
    free -h
    • -h 参数表示以人类可读的格式(如 MB、GB)显示内存信息。
    • 输出结果包括:
      • total:总内存大小。
      • used:已使用的内存大小。
      • free:空闲内存大小。
      • shared:共享内存大小。
      • buffers:用于缓存的内存大小。
      • cached:用于缓存的内存(文件系统缓存)大小。
  2. htop命令

6.如何查看系统负载?系统负载为10,表示什么含义,是高还是低?#

查看系统负载#

  1. uptime:显示系统的当前时间、运行时间、当前用户数、平均负载(1分钟、5分钟、15分钟)

  2. top

  3. sar -q

    • 安装:apt install sysstat

    • 启用数据收集:vim /etc/default/sysstat,将以下字段改为true:ENABLE="true"

    • 重启sysstat服务:systemctl restart sysstat

    • sar -u 1 3:每秒钟收集一次 CPU 使用情况,总共收集三次

      输出如下:

      Terminal window
      Linux 5.15.0-152-generic (i3-1215u) 08/23/2025 _x86_64_ (8 CPU)
      06:18:12 AM CPU %user %nice %system %iowait %steal %idle
      06:18:13 AM all 0.50 0.00 0.25 0.00 0.00 99.25
      06:18:14 AM all 0.38 0.00 0.50 0.00 0.00 99.12
      06:18:15 AM all 0.25 0.00 0.37 0.00 0.00 99.38
      • %user:用户态 CPU 时间的百分比,表示 CPU 在运行用户空间进程的时间。0.50% 表示 CPU 运行用户进程的时间占总时间的 0.50%。
      • %nice:用户进程的优先级调整时间百分比。0.00% 表示没有任何时间被用于调整优先级的进程。
      • %system:内核态 CPU 时间的百分比,表示 CPU 在运行内核空间进程的时间。0.25% 表示 CPU 运行内核进程的时间占总时间的 0.25%。
      • %iowait:等待 I/O 操作的 CPU 时间百分比,表示 CPU 等待磁盘或其他 I/O 操作的时间。0.00% 表示没有时间等待 I/O 操作。
      • %steal:虚拟机环境中被其他虚拟机占用的 CPU 时间百分比。0.00% 表示没有其他虚拟机占用 CPU 时间。
      • %idle:空闲 CPU 时间的百分比,表示 CPU 没有被任何进程占用的时间。99.25% 表示 CPU 的 99.25% 时间处于空闲状态。
  4. vmstat 1:看CPU、内存、磁盘I/O负载

    PixPin_2025-08-23_14-26-58

    • r:表示正在运行等待运行(就绪队列) 的进程数
      • 如果 r 的值持续大于你机器的 CPU逻辑核心数,说明CPU已经饱和,进程开始在运行队列中排队,这是CPU负载高的明确信号
    • b:表示处于不可中断睡眠(uninterruptible sleep) 状态的进程数。
      • 如果 b 的值持续大于0,说明有进程因为等待I/O而阻塞,这是I/O负载高的强烈指示
    • us (user):用户态进程占用CPU时间的百分比。值高表示应用程序本身很繁忙
    • sy (system):内核态占用CPU时间的百分比。值高表示系统调用频繁,或者内核在处理中断、调度等。
    • id (idle):CPU空闲时间的百分比。这是最重要的指标之一id 值持续很低(例如低于10%或20%)意味着CPU资源紧张,负载高。
    • wa (I/O wait):CPU等待I/O完成的时间百分比。这是诊断I/O瓶颈的黄金指标
      • wa 值高(例如 > 5-10%) 意味着CPU经常闲着没事干,因为它在等待慢速的磁盘I/O操作。这明确指示系统的负载瓶颈在磁盘I/O上,而不是CPU计算能力
    • st (steal):在虚拟化环境中,被宿主机“偷走”的CPU时间百分比。值高表示你的虚拟机正在和其他虚拟机激烈争夺物理CPU资源。

系统负载10的含义#

  • 如果你的系统只有 1 个 CPU 核心,负载为 10 表示 CPU 被过度占用,系统可能会变得非常缓慢。
  • 如果你的系统有 10 个 CPU 核心,负载为 10 表示每个 CPU 核心平均有一个任务在处理,这通常是一个正常的负载。
  • 如果你的系统有 更多的核心(比如 20 核或 40 核),负载为 10 就显得比较低了,说明系统比较空闲。
  • 负载为 10 是还是,完全取决于你有多少个 CPU 核心

7.系统负载与CPU使用率有什么关联?#

  • CPU 使用率 反映 CPU 的实际使用情况,通常与系统负载成正比。
  • 系统负载 反映的是 CPU 和其他资源(如 I/O)需求的程度,可能与 CPU 使用率不完全一致。
  • 高负载不一定意味着高 CPU 使用率,可能是 I/O 或其他瓶颈导致的进程积压。
    • CPU负载
    • 内存负载
    • 磁盘I/O负载

8.如何查看本机启动了哪些端口?如何使用telnet测试端口是否连通?#

  1. netstat命令

    Terminal window
    netstat -tuln
    • -t:显示 TCP 连接。

    • -u:显示 UDP 连接。

    • -l:显示监听状态的端口。

    • -n:以数字形式显示端口和 IP 地址,而不进行 DNS 查询

  2. ss命令

    Terminal window
    ss -tuln
  3. 使用 telnet 测试端口是否连通

    • 测试本机或远程端口

      Terminal window
      telnet <hostname or IP> <port>
      • 例如:

        Terminal window
        # 测试本机 80 端口(HTTP 服务)是否开放
        telnet 127.0.0.1 80
        # 测试远程主机的某个端口(例如,测试 baidu 的 80 端口)
        telnet www.baidu.com 80
      • 连接成功输出:

        Terminal window
        Trying 2409:8c00:6c21:11eb:0:ff:b0bf:59ca...
        Connected to www.baidu.com.
        Escape character is '^]'.
      • 连接失败输出:

        Terminal window
        Trying 192.168.0.105...
        telnet: Unable to connect to remote host: Connection refused
    • telnet 会话中,按 Ctrl + ] 然后输入 quit 退出连接

9.什么是域名,什么是dns,什么是hosts?#

域名:人类可读的地址,例如 www.example.com

DNS:将域名解析为 IP 地址的系统。

  • DNS 是互联网的 “电话簿”,它将易记的域名(如 www.google.com)转换为计算机可以理解的 IP 地址

hosts 文件:本地文件,用于手动配置域名与 IP 地址的映射,通常优先于 DNS 查询。

10.一个域名是如何进行解析的?#

  • hosts文件(手动指定的映射)优先级最高:如果/etc/hostsC:\Windows\System32\drivers\etc\hosts中有匹配的域名记录,则直接使用该IP地址,跳过DNS缓存DNS服务器查询
  • 本地缓存检查:操作系统首先检查本地缓存和 hosts 文件是否已有 www.baidu.com 的 IP 地址。
  • DNS 服务器查询:如果缓存和 hosts 文件都没有,操作系统会向 DNS 服务器查询。
  • 递归查询:
    • 根 DNS 服务器:返回 .com TLD 服务器的地址。
    • .com TLD 服务器:返回 baidu.com 的权威 DNS 服务器的地址。
    • 权威 DNS 服务器:返回 www.baidu.com 对应的 IP 地址。
  • 结果返回:本地 DNS 服务器将 IP 地址返回给操作系统,操作系统将该地址提供给浏览器。
  • 浏览器访问:浏览器使用该 IP 地址访问百度网站。

11.如何设置使用的DNS地址?#

通过 systemd-resolved 配置 DNS(Ubuntu 18.04 及之后版本):

Terminal window
vim /etc/systemd/resolved.conf

在文件中找到并取消注释 DNSFallbackDNS 行,并添加想使用的 DNS 地址:

Terminal window
[Resolve]
DNS=8.8.8.8 114.114.114.114
FallbackDNS=1.1.1.1 1.0.0.1

重新启动 systemd-resolved 服务:

Terminal window
systemctl restart systemd-resolved

使用 dignslookup 命令检查 DNS 是否工作正常:

Terminal window
dig @8.8.8.8 www.baidu.com

如果输出从 DNS 服务器返回的 IP 地址,说明 DNS 配置已经生效

12.dig与nslookup有什么区别,什么场景下使用?#

特性nslookupdig
默认输出显示基本的 DNS 解析结果(如 IP 地址)。显示更详细的 DNS 解析过程,包括查询类型、响应时间等。
支持的查询类型支持常见的查询类型(A、AAAA、MX、NS)。支持更多的查询类型(A、AAAA、MX、NS、CNAME 等)。
详细信息返回的默认信息比较简单,缺少很多诊断信息。返回的信息非常详细,适合进行 DNS 故障排查。
查询时间查询速度较快,但不显示具体的响应时间。返回查询时间等详细信息,适合进行性能分析。
可扩展性功能简单,扩展性较差。灵活且支持扩展,能通过多种选项自定义查询行为。
交互模式支持交互模式,适合手动进行多次查询。不支持交互模式,主要用于一次性查询。
  • nslookup 的使用场景nslookup www.baidu.com
    • 基础的 DNS 查询:如果你只需要简单的域名解析(如查询 IP 地址),nslookup 足够用。
    • 交互式查询:当你需要反复查询不同的 DNS 记录时,可以使用 nslookup 的交互模式。
    • 快速测试:在一些快速测试和小范围的 DNS 查询中,nslookup 提供了足够的功能。
  • dig 的使用场景dig www.baidu.com
    • 详细的 DNS 调试和故障排查dig 的输出包含了查询状态、响应时间、DNS 服务器信息等,适合进行复杂的 DNS 故障排查。
    • 多种 DNS 查询类型:当你需要查询不同类型的 DNS 记录(如 MX, NS, CNAME, TXT 等)时,dig 提供了更强的功能。
    • 性能分析dig 返回的查询时间和服务器信息可以帮助你分析 DNS 响应的性能。
    • 自动化脚本和监控:由于 dig 支持更详细的输出,常用于脚本化的 DNS 查询和自动化监控。

13.什么是三次握手和四次挥手,什么场景下使用?#

三次握手是 TCP 建立连接的过程,通过三个数据包交换来确保客户端和服务器之间的连接可靠。

  • 第一次握手:服务器处于listen状态,客户端处于closed状态,客户端向服务器发送一个SYN报文,SYN标志位置为1,携带客户端的初始化序列号ISN,然后进入SYN_SENT状态
  • 第二次握手:服务器收到来自客户端的SYN报文后,向客户端返回一个SYN+ACK报文,将SYN和ACK标志位置为1,然后携带服务器的初始化序列号,ack确认号等于客户端发来的seq+1,然后进入SYN_RECEIVED状态
  • 第三次握手:客户端收到服务器的报文后,向服务器返回一个ACK报文,ack确认号等于服务器发来的seq+1,然后进入ESTABLISHED状态,服务器收到这个ACK报文后也进入ESTABLISHED状态,连接建立完成

四次挥手是 TCP 断开连接的过程,用来优雅地关闭连接,确保数据已经完全传输完毕

  • FIN(结束):客户端发送一个 FIN 包,表示客户端没有数据要发送了,准备关闭连接。客户端进入 FIN_WAIT_1 状态。

  • ACK(确认):服务器收到 FIN 包后,发送一个 ACK 包确认客户端的关闭请求。此时,服务器进入 CLOSE_WAIT 状态,客户端进入 FIN_WAIT_2 状态。

  • FIN(结束):服务器也发送一个 FIN 包,表示服务器没有数据要发送,准备关闭连接。此时服务器进入 LAST_ACK 状态,等待客户端的确认。

  • ACK(确认):客户端收到服务器的 FIN 包后,发送一个 ACK 包确认服务器的关闭请求。此时客户端进入 TIME_WAIT 状态,等待足够时间以确保服务器收到了最后的 ACK 包,然后彻底关闭连接。服务器收到 ACK 包后进入 CLOSED 状态,连接完全断开。

14.TCP和UDP的区别是什么?它们分别适用于什么场景?#

特性TCPUDP
连接性面向连接,通信前需要建立连接(通过三次握手)。无连接,不需要建立连接,直接发送数据。
可靠性提供可靠的数据传输,保证数据按顺序到达,若丢失会重传。不保证数据到达,也不保证顺序,数据可能丢失。
流量控制支持流量控制和拥塞控制,确保网络负载合理。不提供流量控制和拥塞控制。
传输顺序保证数据按发送顺序到达接收端。不保证数据的顺序,数据可能乱序到达。
错误检查提供错误检查和纠正机制。提供简单的错误检查,若发生错误不进行纠正。
速度由于需要建立连接、确认数据和重传机制,相对较慢。传输速度较快,因为没有连接建立和重传机制。
头部开销头部较大,包含序列号、确认号、校验和、标志位等。头部较小,只有必要的源端口、目的端口、长度和校验和。
适用场景适合需要高可靠性、顺序传输和重传机制的场景。适合实时性要求高,但不要求可靠传输的场景。

TCP适用场景:

  1. Web浏览(HTTP/HTTPS):用户请求网页时需要保证数据的完整性和顺序。
  2. 文件传输(FTP):需要确保文件数据的完整传输。
  3. 电子邮件(SMTP):邮件传输时需要确保可靠性。
  4. 远程登录(SSH、Telnet):保证输入输出数据的正确顺序和完整性。
  5. 数据库应用:需要可靠的数据传输,保证操作的顺序性。

UDP适用场景:

  1. 视频会议:实时性要求高,但丢失少量数据不会影响体验。
  2. 在线游戏:需要低延迟,不关心个别数据包是否丢失。
  3. 实时流媒体:如直播、视频点播,数据丢失对质量影响较小。
  4. DNS 查询:DNS 查询小数据包,要求快速响应,UDP 的低开销适合此场景。
  5. VoIP(语音通信):实时性是关键,少量丢包不会影响通话质量。

15.UDP会进行握手吗?#

不会,UDP协议是一个无连接的协议,不可靠,只保证最大程度传输,如果丢包是不会重传的,既可以一对多,也可以多对一,所以是不需要握手的

16.哪些服务会使用UDP协议?#

  1. DNS(域名系统)

    • 用途:DNS 用于将域名解析为 IP 地址。

    • 原因:DNS 查询通常较小且对时效性要求高,使用 UDP 可以减少延迟,且丢失少量数据包通常不会造成严重影响。DNS 响应不需要保证顺序,若丢包可以重新发送请求。

  2. DHCP(动态主机配置协议)

    • 用途:DHCP 用于在网络中自动分配 IP 地址和其他网络配置。
    • 原因:DHCP 使用 UDP 主要是为了节省开销并提高速度。由于 DHCP 请求和响应过程通常较短,且在网络配置过程中丢失一个包可以快速重发。
  3. SNMP(简单网络管理协议)

    • 用途:SNMP 用于监控和管理网络设备。

    • 原因:SNMP 使用 UDP 传输数据,因为管理信息通常是小数据量的查询和响应,对丢包的容忍度较高,且实时性更重要。

  4. TFTP(简易文件传输协议)

    • 用途:TFTP 是一种简化版的 FTP,用于文件的简单传输。
    • 原因:TFTP 用于低复杂度、低带宽的文件传输,通常在嵌入式设备、网络引导或设备固件更新时使用。由于它的目标是简化和快速传输,因此使用 UDP 进行高效的数据传输。
  5. RIP(路由信息协议)

    • 用途:RIP 是一种动态路由协议,用于在路由器之间交换路由信息。
    • 原因:RIP 使用 UDP 来快速交换路由信息,允许路由器及时更新网络拓扑。如果丢失路由信息包,协议会在下一轮周期中重新发送。

17.视频通话会使用TCP还是UDP?文字消息呢?#

视频通话会使用UDP,因为视频通话中丢失个别数据包不影响整体的体验,

18.解释ps -aux所有字段的含义#

字段如下:USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

  1. USER
    • 含义:进程所属的用户(即启动该进程的用户)
    • 示例rootuser1
  2. PID
    • 含义:进程的唯一标识符(进程ID)。
    • 示例1234
    • 用途:通过 PID 可以跟踪、管理或结束特定进程。
  3. %CPU
    • 含义:进程使用的 CPU 时间百分比。
    • 示例0.5 表示该进程使用了 0.5% 的 CPU 时间。
    • 注意:该值是进程当前占用 CPU 的比例,可能会随时间波动。
  4. %MEM
    • 含义:进程使用的物理内存百分比。
    • 示例1.2 表示该进程占用了 1.2% 的系统内存。
    • 注意:这个字段显示的是进程占用的物理内存占总内存的比例。
  5. VSZ
    • 含义:进程使用的虚拟内存的大小(单位:KB)。
    • 示例123456 表示该进程使用了 123456 KB(约 120 MB)的虚拟内存。
    • 说明:包括进程的所有内存,如共享库、代码、栈、堆等。
  6. RSS
    • 含义:进程实际占用的物理内存的大小(单位:KB)。
    • 示例9876 表示该进程实际占用了 9876 KB(约 9.7 MB)的物理内存。
    • 说明:与 VSZ 不同,RSS 只考虑进程使用的实际物理内存,不包括交换区(swap)。
  7. TTY
    • 含义:进程所属的终端(TTY 是 “teletypewriter” 的缩写)。
    • 示例tty1pts/0
    • 说明:如果进程没有控制终端,通常显示为 ?
  8. STAT
    • 含义:进程的状态。
    • 常见的值:
      • R:正在运行(Running)。
      • S:睡眠(Sleeping)。
      • D:不可中断睡眠(Uninterruptible sleep,通常是等待磁盘IO)。
      • Z:僵尸进程(Zombie)。
      • T:停止状态(Stopped)。
      • I:空闲状态(Idle)。
    • 示例S 表示进程处于睡眠状态。
  9. START
    • 含义:进程启动的时间。
    • 示例09:30Mar10
    • 说明:显示进程启动的具体时间。如果进程启动时间超过 24 小时,则显示日期。
  10. TIME
    • 含义:进程使用的总 CPU 时间(单位:分钟:秒)。
    • 示例00:02.5 表示进程已经使用了 2.5 秒的 CPU 时间。
    • 说明:这个字段累计了进程的 CPU 时间。
  11. COMMAND
    • 含义:启动进程的命令行。
    • 示例/usr/bin/firefoxbash
    • 说明:显示启动该进程的完整命令和其参数。

19.Linux中如何判断上一条命令是否执行成功?#

在 Linux 中,可以通过检查 退出状态码(Exit Status)来判断上一条命令是否执行成功。

  1. 查看 $? 变量

    • $? 是一个特殊变量,表示上一条命令的退出状态码。

    • 返回值:

      • 0:表示命令执行成功(没有错误)。
      • 0 值:表示命令执行失败,具体的错误码取决于命令的执行情况。
    • 例如:

      Terminal window
      ls -lh
      &?
      # 输出
      0
  2. 通过&&或者||判断

    • &&:如果前一个命令成功(返回 0),则执行后面的命令。

    • ||:如果前一个命令失败(返回非 0),则执行后面的命令。

    • 例如:

      Terminal window
      ls -lh && echo "命令成功"
      # 输出
      命令成功

20.如何修改系统默认时区,并同步网络时间?#

修改系统默认时区:

  • 查看当前时区

    timedatectl

    这将显示当前的日期、时间、时区、NTP(网络时间协议)同步状态等信息。

  • 列出可用的时区

    timedatectl list-timezones

    这将列出所有支持的时区,你可以从中找到你需要的时区,例如:Asia/ShanghaiEurope/London 等。

  • 设置时区: 假设你想设置时区为 Asia/Shanghai,可以执行以下命令:

    sudo timedatectl set-timezone Asia/Shanghai

    这将立即更改系统的时区设置。

同步网络时间:

  • 启用 NTP 同步: 使用以下命令启用自动时间同步:

    sudo timedatectl set-ntp true
  • 检查 NTP 状态: 要查看 NTP 是否启用,可以运行:

    timedatectl

    在输出中,如果 NTP 同步已启用,你将看到类似 NTP synchronized: yes 的行。

  • 使用 NTP 服务同步时间(如果需要): 如果你的系统没有启用 NTP,你可以手动同步时间,运行以下命令:

    sudo ntpdate pool.ntp.org

    这将从 NTP 服务器 pool.ntp.org 获取当前时间并同步系统时间。

21.如何使用curl访问页面?#

  • 基本访问:curl http://example.com
  • 保存内容:curl -o filename http://example.com
  • 查看响应头:curl -I http://example.com
  • 发送 POST 请求:curl -X POST -d "name=John" http://example.com
  • 设置请求头:curl -H "Authorization: Bearer YOUR_TOKEN" http://example.com

22.如何使用curl和wget来下载文件到本地?#

  • curl -O http://example.com/file1.zip -O http://example.com/file2.zip

  • wget http://example.com/file.zip

  • 下载多个文件,将所有的URL放入一个文本中,然后wget -i urls.txt

  • 可以中断后继续下载:wget -c http://example.com/largefile.zip

  • 显示进度条:curl -# -O http://example.com/file.zip

Linux基础问题 7
https://fuwari.cbba.top/posts/佚名运维免费训练营-第7天/
作者
Chen_Feng
发布于
2025-08-23
许可协议
CC BY-NC-SA 4.0