每个实验都模拟了一个真实的场景,希望你不仅能敲命令,更能理解其背后的逻辑。请在你的Linux虚拟机或环境中逐一完成。
一、 文件与目录操作 (25题)
- 基础导航:在你的家目录下,创建一个名为
test_lab
的目录,并进入该目录。 - 绝对路径与相对路径:在
test_lab
目录下,使用绝对路径创建dir1/dir2/dir3
(使用-p
选项)。 - 创建文件:在
test_lab
目录下,使用touch
命令创建三个空文件:file1.txt
,file2.log
,data1.csv
。 - 列表查看:以“长格式”列出
test_lab
目录下的所有内容,包括隐藏文件,并按文件大小排序。 - 复制文件:将
file1.txt
复制到dir1/dir2/
目录下,并重命名为file1_backup.txt
。 - 移动文件:将
file2.log
移动到dir1/
目录下。 - 重命名文件:在
dir1/
目录下,将file2.log
重命名为application.log
(使用mv
命令)。 - 创建链接:为
test_lab/file1.txt
在当期目录下创建一个软链接(符号链接),名为soft_link_to_file1
。 - 删除文件:删除
data1.csv
文件,并在删除前要求确认。 - 删除目录:尝试删除
dir1
目录(会失败),然后使用递归删除命令成功删除整个dir1
目录结构。 - 查看文件类型:使用
file
命令查看/bin/bash
的文件类型。 - 查看整个文件:使用
cat
命令查看/etc/hosts
文件的内容。 - 分页查看文件:使用
less
或more
命令查看/etc/services
文件的内容。 - 查看文件头尾:使用
head
命令查看/etc/passwd
的前 5 行。 - 查看文件尾:使用
tail
命令查看/var/log/syslog
或/var/log/messages
的最后 10 行,并持续监视其更新(-f
选项)。 - 文件统计:使用
wc
命令统计/etc/passwd
的行数、单词数和字节数。 - 比较文件:创建两个文件
a.txt
(内容为 "hello world")和b.txt
(内容为 "hello linux"),使用diff
命令比较它们的差异。 - 生成序列:使用
seq
命令生成 1 到 10 的数字,并将其输出重定向到numbers.txt
文件。 - 备份与还原:使用
cp
命令备份/etc/passwd
到当前目录,并保留其所有原始属性(如时间戳、权限)。 - 创建特殊文件:使用
mkdir -p
创建project/{src,doc,bin,assets}
这样的级联目录结构。 - 树状展示:使用
tree
命令(如果未安装请先安装)以树状图列出project
目录的结构。 - 交互式复制:使用
cp -i
尝试复制一个已存在的文件,体验交互式提示。 - 详细操作:执行任意
cp
或mv
命令,并使用-v
选项查看详细过程。 - 空目录检查:删除一个空目录
empty_dir
。 - 通配符练习:在包含
file1.txt
,file2.log
,readme.md
的目录中,使用*.txt
和f*
等通配符一次性操作多个文件。
二、 文本处理 (15题)
- 搜索内容:在
/etc/passwd
文件中搜索包含你的用户名的那一行。 - 全局搜索:递归地在
/etc
目录下的所有文件中搜索包含"localhost"
字符串的行。 - 流编辑器:使用
sed
将file1.txt
中的所有 "old" 替换为 "new"(假设文件有内容),并将结果输出到屏幕。 - 流编辑器写入:使用
sed -i
直接原地修改file1.txt
,完成上述替换。 - 打印特定行:使用
sed -n '5,10p'
打印/etc/passwd
的第5到第10行。 - 文本分析:使用
awk
打印/etc/passwd
文件中以冒号分隔的第一列(用户名)和第三列(用户ID)。 - 高级awk:使用
awk
找出/etc/passwd
中UID大于1000的用户名。 - 排序:创建一个包含数字的文件
num.txt
,使用sort -n
对其进行数字排序。 - 去重:创建一个有重复行的文件
duplicates.txt
,使用uniq
命令前先排序,然后去除重复行。 - 裁剪文本:使用
cut -d':' -f1 /etc/passwd
裁剪出用户名。 - 转换字符:使用
tr
命令将file1.txt
中的所有小写字母转换为大写字母。 - 合并文件:使用
paste
命令将两个文件a.txt
和b.txt
按列合并。 - 查找差异:使用
comm
命令比较两个排序后的文件list1.txt
和list2.txt
。 - 编号输出:使用
nl
命令给file1.txt
的每一行加上行号并输出。 - 格式化输出:使用
column -t
将/etc/passwd
的内容以表格形式格式化输出。
三、 系统管理与信息查看 (15题)
- 查看系统信息:使用
uname -a
查看所有系统信息。 - 查看内核版本:使用
uname -r
只查看内核版本。 - 查看主机名:使用
hostname
命令查看当前主机名。 - 查看系统负载:使用
uptime
命令查看系统运行时间和平均负载。 - 查看内存使用:使用
free -h
以人类可读的方式查看内存和交换空间使用情况。 - 监控进程动态:使用
top
或htop
命令动态监控进程和系统性能。 - 查看磁盘空间:使用
df -h
查看文件系统磁盘空间使用情况。 - 查看目录大小:使用
du -sh /var/log
查看/var/log
目录的总大小。 - 查看环境变量:使用
printenv
或env
查看所有环境变量,并使用echo $PATH
查看特定环境变量。 - 设置别名:在你的
~/.bashrc
文件中添加一个别名ll='ls -alF'
,然后使其生效(source ~/.bashrc
)。 - 查看命令历史:使用
history
查看命令历史记录,并重新执行历史记录中的第100条命令(!100
)。 - 查看用户登录:使用
who
或w
命令查看当前有哪些用户登录在系统上。 - 查看自己是谁:使用
whoami
命令查看当前有效用户名。 - 查看用户信息:使用
id
命令查看当前用户的UID、GID等信息。 - 日历:使用
cal
查看当前月的日历,并查看2025年12月的日历。
四、 权限管理 (10题)
- 查看权限:使用
ls -l
详细查看/etc/passwd
文件的权限、所有者和组。 - 修改文件权限(数字):创建一个文件
secret.txt
,使用chmod
的数字模式将其权限设置为仅所有者可读可写 (600
)。 - 修改文件权限(符号):使用
chmod
的符号模式给secret.txt
的同组用户增加读权限。 - 修改文件所有者:使用
sudo chown
将secret.txt
的所有者改为root用户(需要sudo权限)。 - 修改文件所属组:使用
sudo chgrp
将secret.txt
的所属组改为root组。 - 默认权限:使用
umask
查看当前默认的权限掩码,并创建一个新文件和新目录,验证其初始权限。 - 特殊权限SUID:查找系统中具有SUID权限的命令(如
sudo chmod u+s /usr/bin/your_command
,但请勿随意设置)。 - 目录权限理解:创建一个目录
shared_dir
,设置权限为775
,使其组成员都可以在其中创建和删除文件。 - 粘滞位:在
/tmp
目录下创建一个文件,理解粘滞位(t
权限)的作用。ls -ld /tmp
查看。 - ACL扩展权限:使用
setfacl -m u:username:rwx file
为某个用户对某个文件设置扩展权限,并用getfacl
查看。
五、 进程管理 (10题)
- 查看进程:使用
ps aux
查看系统所有进程。 - 查看进程树:使用
pstree
以树状结构查看进程关系。 - 动态监控进程:使用
top
命令,然后在其中按P
(按CPU排序)和M
(按内存排序)。 - 终止进程:启动一个
sleep 1000
进程,然后使用kill
命令通过PID终止它。 - 强制终止进程:使用
kill -9
强制终止一个进程。 - 按名称终止进程:使用
pkill sleep
终止所有名为sleep的进程。 - 后台运行:使用
&
将一个命令(如sleep 500
)放到后台运行。 - 前后台切换:启动一个前台进程,使用
Ctrl+Z
将其暂停并放入后台,然后使用bg
命令让其继续在后台运行,使用fg
命令将其调回前台。 - 查看后台作业:使用
jobs
命令查看当前shell的后台作业。 - 使进程脱离终端:使用
nohup
命令运行一个脚本,即使终端关闭它也不会退出(nohup ./script.sh &
)。
六、 网络操作 (10题)
- 查看IP地址:使用
ip addr show
或ifconfig
查看网络接口信息。 - 测试连通性:使用
ping -c 4 8.8.8.8
测试与Google DNS的网络连通性,发送4个包后停止。 - 查看路由表:使用
ip route show
或route -n
查看系统路由表。 - 追踪路径:使用
traceroute
或tracepath
追踪到www.google.com
的网络路径。 - 查询域名:使用
nslookup
或dig
查询www.github.com
的IP地址。 - 查看端口监听:使用
ss -tulnp
或netstat -tulnp
查看系统监听的TCP和UDP端口。 - 下载文件:使用
wget
从网络上下载一个文件(如wget https://example.com/file.zip
)。 - 高级下载:使用
curl -O
下载文件,并尝试使用-I
选项只获取HTTP头信息。 - 扫描端口:使用
nmap localhost
扫描本机开放的端口(需安装nmap)。 - 网络统计:使用
ss -s
查看详细的网络套接字统计信息。
七、 压缩与打包 (5题)
- 压缩文件:使用
gzip
压缩file1.txt
,生成file1.txt.gz
。 - 解压缩文件:使用
gunzip
解压file1.txt.gz
。 - 打包与压缩:使用
tar -czvf archive.tar.gz dir1/
将dir1
目录打包并压缩为.tar.gz
文件。 - 解包与解压:使用
tar -xzvf archive.tar.gz
解压并解包刚才的文件。 - 其他格式:使用
tar -cjvf archive.tar.bz2 dir1/
创建.tar.bz2
格式的压缩包。
八、 搜索与查找 (5题)
- 查找文件:使用
find /home -name "*.txt"
在/home
目录下查找所有.txt
文件。 - 按类型查找:使用
find /var -type f -name "*.log"
查找/var
下的所有日志文件。 - 按时间查找:使用
find ~ -mtime -1
查找你家目录下最近1天内修改过的文件。 - 按大小查找:使用
find / -size +100M
查找系统中大于100MB的文件(可能需要sudo)。 - 命令查找:使用
which ls
查找ls
命令的完整路径。使用whereis ls
查找ls
命令的二进制程序、源代码和man手册页的位置。
九、 Shell编程与脚本基础 (3题)
- 变量操作:在Shell中定义一个变量
NAME=your_name
,然后使用echo "Hello, $NAME"
打印出来。 - 命令替换:使用反引号
`
或$()
将date
命令的输出结果赋值给一个变量,并打印出来。 - 编写简单脚本:创建一个脚本
hello.sh
,内容如下,然后赋予它执行权限 (chmod +x hello.sh
) 并运行它:#!/bin/bash echo "Hello, World!" echo "Today is $(date)"