2854 字
14 分钟
Linux基础问题 3

1.自己编辑一个文件,随便编辑或者复制一些内容,20行以上,作为以下任务的练习对象。#

2.如何查看上面文件的大小、权限以及所属#

Terminal window
ls -l ymyw_group.md
-rw-rw---- 1 root ymyw 5431 Aug 16 15:43 ymyw_group.md
字段含义
-rw-r--r--文件权限(所有者可读写,其他用户只读)
1硬链接数量
user文件所有者(用户)
group文件所属组(用户组)
1234文件大小(单位:字节)
Aug 15 10:00最后修改时间
./ymyw_group.md文件名

3.如何更改此文件的权限及所属#

1.更改文件权限

  • 数字模式:chmod 644 ./ymyw_group.md
    • 6(所有者:读写) = 4(读) + 2(写)
    • 4(所属组:只读)
    • 4(其他用户:只读)
  • 符号模式:chmod u=rw,g=r,o=r ./ymyw_group.md
    • u:所有者(user)
    • g:所属组(group)
    • o:其他用户(others)
    • =:精确设置权限
    • rw/r:读写或只读
Terminal window
chmod 644 ./ymyw_group.md
ls -l ymyw_group.md
-rw-r--r-- 1 root ymyw 5431 Aug 16 15:43 ymyw_group.md

2.更改文件所有者

将文件所有者改为dev:

Terminal window
ls -l ymyw_group.md
-rw-r--r-- 1 root ymyw 5431 Aug 16 15:43 ymyw_group.md
chown dev ./ymyw_group.md
ls -l ymyw_group.md
-rw-r--r-- 1 dev ymyw 5431 Aug 16 15:43 ymyw_group.md

4.使用ls -l查看文件时,第一个字符串有什么含义。比如 drwxr-xr-x中开头的d和-rw-r—r—中开头的-。#

使用 ls -l 命令查看文件时,第一个字符(如 d-l 等)表示 文件类型,它揭示了该条目是文件、目录、链接还是其他特殊类型

首字符类型示例说明
-普通文件-rw-r--r--常规文件(如文本、图片、二进制可执行文件等)。
d目录drwxr-xr-x文件夹,包含其他文件或子目录。
l符号链接lrwxrwxrwx快捷方式,指向另一个文件或目录(如 ln -s 目标 链接名 创建的链接)。
c字符设备文件crw--w----按字符流操作的设备(如键盘、终端 /dev/tty)。
b块设备文件brw-rw----按数据块操作的设备(如硬盘 /dev/sda)。
s套接字(Socket)srwxr-xr-x进程间通信的文件(如 MySQL 的 /var/run/mysqld/mysqld.sock)。
p管道(FIFO)prw-r--r--先进先出的特殊文件(用于进程间通信)。

5.什么是管道符,有什么作用#

管道符(|),用于将 前一个命令的输出 作为 后一个命令的输入

例如:ifconfig | less,就是将ifconfig本应该输出的结果通过less来查看

例如:ps aux | grep nginx,就是从所有进程中筛选出包含nginx的行

6.如何统计目录下有多少文件和目录,比如/etc目录#

  • ls -l:长格式列出内容,每行开头字符表示类型(- 文件,d 目录)。
  • grep -c:统计匹配行数。
Terminal window
ls -l /etc | grep -c '^-' # 统计文件数量
79
ls -l /etc | grep -c '^d' # 统计目录数量
85

7.如何查看统计上面创建的文件有多少行#

Terminal window
wc -l ymyw_group.md
89 ymyw_group.md
cat ymyw_group.md | wc -l
89

8.如何只查看上面创建文件的前10行或者后10行#

Terminal window
head -n 10 ymyw_group.md # 显示前10行
tail -n 10 ymyw_group.md # 显示后10行

9.如何实时查看一个文件内容的增加,比如/var/log/kern.log#

1.使用tail -f

Terminal window
sudo tail -f /var/log/kern.log
  • 实时输出新增内容:文件末尾新增的内容会立即显示在终端。

  • 快捷键控制:

    • Ctrl+C 退出监控。

    • Ctrl+S 暂停输出,Ctrl+Q 恢复输出。

    • 结合过滤(如只显示包含 “error” 的行):

      Terminal window
      sudo tail -f /var/log/kern.log | grep "error"

2. 使用 less 的实时监控模式

Terminal window
less +F /var/log/kern.log
  • Ctrl+C 暂停监控(返回普通 less 模式)。
  • 在普通模式下按 F 重新进入实时监控。
  • q 完全退出 less
  • 可随时切换为普通 less 模式,支持全文搜索/ 键)、跳转行号: 后输入行号)等。

10./var/log目录是干啥的,有哪些关键的日志#

/var/log 目录是 Linux 系统中 集中存储所有日志文件的核心目录,记录了系统、服务、应用程序的运行状态和事件。

日志文件作用查看命令
messages通用系统日志(CentOS/RHEL),包含内核、服务等混合信息。sudo cat /var/log/messages
syslog系统日志(Ubuntu/Debian),记录内核、服务等事件。sudo less /var/log/syslog
kern.log内核专属日志(硬件错误、驱动加载、内核崩溃等)。sudo tail -f /var/log/kern.log
boot.log系统启动过程的详细记录。

11.家目录有什么作用,每个用户的家目录相同吗?如何进入当前用户的家目录#

  • 存储个人文件:默认存放用户的文档、下载、图片等(如 ~/Documents~/Downloads)。

  • 保存用户配置:隐藏文件(如 ~/.bashrc~/.ssh/)存储个性化设置和密钥。

  • 隔离用户数据:不同用户的文件互不可见(除非显式设置权限)。

  • 环境变量锚点:~ 符号在命令行中自动展开为当前用户的家目录路径(如 cd ~)。

普通用户/home/用户名,例如xh的路径是/home/xh

root 用户/root,注意:/root 不是 /home/root

12.什么是相对路径,什么是绝对路径#

1.绝对路径(Absolute Path)

  • 文件系统的根目录(/ 开始的完整路径,唯一指向目标文件/目录
  • / 开头
  • 与当前目录无关,无论在哪里执行命令,路径始终有效。
  • 唯一性:每个文件只有一个绝对路径

2.相对路径(Relative Path)

  • 当前工作目录(Current Working Directory) 出发的路径,依赖于执行命令时的位置
  • 不以 / 开头
  • 使用特殊符号:
    • .:当前目录(同 ./)。
    • ..:上级目录(同 ../)。
  • 灵活性:路径随当前目录变化而变化

13.什么场景下使用相对路径,什么场景下使用绝对路径#

1.使用相对路径

  • 操作当前目录附近的文件
  • 编写可移植脚本,脚本需在不同目录中运行时,避免硬编码绝对路径。
  • 频繁切换邻近目录

2.使用绝对路径

  • 操作系统级文件
  • 确保命令在任何目录下执行结果一致时
  • 路径可能因当前目录变化导致错误时

14.如何在一个文件中筛选某关键字,并且只展示有关键字的行。#

Terminal window
grep "error" /var/log/kern.log

15.如何在筛选后需要展示关键字的上下三行#

Terminal window
grep -A 3 -B 3 "error" /var/log/kern.log
# 或者
grep -C 3 "error" /var/log/kern.log

16.如何替换文件中的关键字,比如将文件中的aaa替换为bbb。#

先备份原文件:cp ymyw_group.md ymyw_group.md.bak

1.使用sed命令修改

Terminal window
sed -i 's/aaa/bbb/g' ymyw_group.md
  • -i:直接修改原文件(不加则仅预览不修改)。
  • s/旧内容/新内容/:替换语法。
  • g:全局替换(每行所有匹配,不加则每行仅替换第一个匹配)。

2.使用vim编辑器修改

进入命令模式,输入:%s/aaa/bbb/g,然后回车,保存并退出:wq!

  • %:全文范围(可改为行号如 1,10 表示第1-10行)。
  • s/aaa/bbb/g:与 sed 语法相同。

17.>和>>是干啥的,各有什么场景#

1.>:覆盖重定向

  • 将命令的输出 覆盖写入 到指定文件(若文件不存在则创建,若存在则清空原有内容后写入)。

    Terminal window
    echo "Hello World" > output.txt # 写入 "Hello World" 到 output.txt(覆盖原有内容)
    ls -l > file_list.txt # 将当前目录文件列表覆盖写入 file_list.txt

2.>>:追加重定向

  • 将命令的输出 追加到文件末尾(不修改原有内容)。

    Terminal window
    echo "New line" >> log.txt # 在 log.txt 末尾追加一行 "New line"
    date >> timestamp.log # 将当前时间追加到日志文件

18.如何在不打开文件的情况下,清空文件内容。#

Terminal window
> ymyw_group.md.bak

19.什么是文件描述符#

在 Linux/Unix 系统中,文件描述符(File Descriptor,简称 fd) 是操作系统用于 跟踪和管理打开文件或 I/O 资源 的整数标识符。它是进程与文件、管道、套接字等资源交互的底层接口。

1.文件描述符的本质

  • 内核级句柄

    • 每个进程启动时,内核会为其维护一张 文件描述符表,记录该进程打开的所有资源。

    • 文件描述符是此表中的 索引号(通常为 0、1、2、3…)。

  • 抽象接口

    • 对进程而言,文件描述符是访问文件、设备、网络套接字等的统一接口,无需关心底层实现细节。

2.文件描述符的分配规则

描述符值默认分配对象符号常量典型用途
0标准输入(stdin)STDIN_FILENO读取键盘输入或重定向输入。
1标准输出(stdout)STDOUT_FILENO输出到终端或重定向到文件。
2标准错误(stderr)STDERR_FILENO输出错误信息(默认到终端)。
3+其他打开的文件-用户打开的文件、管道、套接字等。

3.文件描述符的核心特性

  1. 进程私有性
    • 每个进程的文件描述符独立分配,相同数值在不同进程中可能指向不同文件。
  2. 继承性
    • 子进程会继承父进程的文件描述符(除非显式关闭或设置 CLOEXEC 标志)。
  3. 资源限制
    • 系统限制单个进程可打开的文件描述符数量(通过 ulimit -n 查看,默认通常为 1024)。

20.什么是标准输入,标准输出,错误输出#

标准输入(stdin)、标准输出(stdout)和标准错误(stderr) 是进程与外部环境交互的三种基本数据流,统称为 标准 I/O 流。它们是操作系统为每个进程自动创建的通信通道,默认关联终端设备,但可通过重定向修改其目标

名称文件描述符符号常量默认绑定典型用途
标准输入0STDIN_FILENO键盘(/dev/tty)读取用户输入或重定向的文件输入。
标准输出1STDOUT_FILENO终端屏幕输出程序正常结果。
标准错误2STDERR_FILENO终端屏幕输出错误消息(与正常输出分离)。

21.如何查看历史执行的命令并重新执行#

1.基础查看

Terminal window
history # 显示全部历史命令(带行号)
history 20 # 显示最近20条命令

2.搜索历史命令:history | grep "apt"

3.重新执行历史命令

  • 按行号执行:!1025,重新执行历史记录中编号为1025的命令

  • 交互式选择执行:

    Terminal window
    fc -l # 列出最近历史
    fc 1025 # 编辑编号1025的命令后执行(会打开编辑器)

22.什么是别名,如何设置别名,ll是哪个命令的别名#

1.别名

在 Linux/Unix 系统中,别名(Alias) 是用户为常用命令或复杂命令序列定义的快捷方式,可以显著提升命令行操作效率。它的作用是将一个自定义的短字符串映射到长命令或命令组合。

  • 仅对当前用户有效(除非全局配置)
  • 临时生效(会话结束后消失)或永久生效(需写入配置文件)

2.设置别名的方法

  • 临时设置:alias 别名='原始命令',例如alias update='sudo apt update && sudo apt upgrade'

  • 永久设置(对所有新会话生效):将别名定义写入 Shell 配置文件

    • Bash~/.bashrc~/.bash_profile

    • Zsh~/.zshrc

    • 操作:

      Terminal window
      echo "alias update='sudo apt update && sudo apt upgrade'" >> ~/.bashrc # 追加到配置文件
      source ~/.bashrc # 立即生效
  • 查看已定义的别名:alias列出所有别名,alias update查看update的具体定义

  • 删除别名:unalias update

3.经典别名 ll 的真相

默认定义ll 通常是 ls -alFls -l 的别名。

验证方法alias ll,输出为ll='ls -lh'

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