1.自己编辑一个文件,随便编辑或者复制一些内容,20行以上,作为以下任务的练习对象。
2.如何查看上面文件的大小、权限以及所属
❯ 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.md6(所有者:读写) =4(读) + 2(写)4(所属组:只读)4(其他用户:只读)
- 符号模式:
chmod u=rw,g=r,o=r ./ymyw_group.mdu:所有者(user)g:所属组(group)o:其他用户(others)=:精确设置权限rw/r:读写或只读
❯ chmod 644 ./ymyw_group.md❯ ls -l ymyw_group.md-rw-r--r-- 1 root ymyw 5431 Aug 16 15:43 ymyw_group.md2.更改文件所有者
将文件所有者改为dev:
❯ 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.md4.使用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:统计匹配行数。
❯ ls -l /etc | grep -c '^-' # 统计文件数量79❯ ls -l /etc | grep -c '^d' # 统计目录数量857.如何查看统计上面创建的文件有多少行
❯ wc -l ymyw_group.md89 ymyw_group.md❯ cat ymyw_group.md | wc -l898.如何只查看上面创建文件的前10行或者后10行
❯ head -n 10 ymyw_group.md # 显示前10行❯ tail -n 10 ymyw_group.md # 显示后10行9.如何实时查看一个文件内容的增加,比如/var/log/kern.log
1.使用tail -f
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 的实时监控模式
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.如何在一个文件中筛选某关键字,并且只展示有关键字的行。
grep "error" /var/log/kern.log15.如何在筛选后需要展示关键字的上下三行
grep -A 3 -B 3 "error" /var/log/kern.log# 或者grep -C 3 "error" /var/log/kern.log16.如何替换文件中的关键字,比如将文件中的aaa替换为bbb。
先备份原文件:cp ymyw_group.md ymyw_group.md.bak
1.使用sed命令修改
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.如何在不打开文件的情况下,清空文件内容。
> ymyw_group.md.bak19.什么是文件描述符
在 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.文件描述符的核心特性
- 进程私有性
- 每个进程的文件描述符独立分配,相同数值在不同进程中可能指向不同文件。
- 继承性
- 子进程会继承父进程的文件描述符(除非显式关闭或设置
CLOEXEC标志)。
- 子进程会继承父进程的文件描述符(除非显式关闭或设置
- 资源限制
- 系统限制单个进程可打开的文件描述符数量(通过
ulimit -n查看,默认通常为 1024)。
- 系统限制单个进程可打开的文件描述符数量(通过
20.什么是标准输入,标准输出,错误输出
标准输入(stdin)、标准输出(stdout)和标准错误(stderr) 是进程与外部环境交互的三种基本数据流,统称为 标准 I/O 流。它们是操作系统为每个进程自动创建的通信通道,默认关联终端设备,但可通过重定向修改其目标
| 名称 | 文件描述符 | 符号常量 | 默认绑定 | 典型用途 |
|---|---|---|---|---|
| 标准输入 | 0 | STDIN_FILENO | 键盘(/dev/tty) | 读取用户输入或重定向的文件输入。 |
| 标准输出 | 1 | STDOUT_FILENO | 终端屏幕 | 输出程序正常结果。 |
| 标准错误 | 2 | STDERR_FILENO | 终端屏幕 | 输出错误消息(与正常输出分离)。 |
21.如何查看历史执行的命令并重新执行
1.基础查看
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 -alF 或 ls -l 的别名。
验证方法:alias ll,输出为ll='ls -lh'