每个实验都模拟了一个真实的场景,希望你不仅能敲命令,更能理解其背后的逻辑。请在你的Linux虚拟机或环境中逐一完成。


一、 文件与目录操作 (25题)

  1. 基础导航:在你的家目录下,创建一个名为 test_lab 的目录,并进入该目录。
  2. 绝对路径与相对路径:在 test_lab 目录下,使用绝对路径创建 dir1/dir2/dir3(使用 -p 选项)。
  3. 创建文件:在 test_lab 目录下,使用 touch 命令创建三个空文件:file1.txt, file2.log, data1.csv
  4. 列表查看:以“长格式”列出 test_lab 目录下的所有内容,包括隐藏文件,并按文件大小排序。
  5. 复制文件:将 file1.txt 复制到 dir1/dir2/ 目录下,并重命名为 file1_backup.txt
  6. 移动文件:将 file2.log 移动到 dir1/ 目录下。
  7. 重命名文件:在 dir1/ 目录下,将 file2.log 重命名为 application.log(使用 mv 命令)。
  8. 创建链接:为 test_lab/file1.txt 在当期目录下创建一个软链接(符号链接),名为 soft_link_to_file1
  9. 删除文件:删除 data1.csv 文件,并在删除前要求确认。
  10. 删除目录:尝试删除 dir1 目录(会失败),然后使用递归删除命令成功删除整个 dir1 目录结构。
  11. 查看文件类型:使用 file 命令查看 /bin/bash 的文件类型。
  12. 查看整个文件:使用 cat 命令查看 /etc/hosts 文件的内容。
  13. 分页查看文件:使用 lessmore 命令查看 /etc/services 文件的内容。
  14. 查看文件头尾:使用 head 命令查看 /etc/passwd 的前 5 行。
  15. 查看文件尾:使用 tail 命令查看 /var/log/syslog/var/log/messages 的最后 10 行,并持续监视其更新(-f 选项)。
  16. 文件统计:使用 wc 命令统计 /etc/passwd 的行数、单词数和字节数。
  17. 比较文件:创建两个文件 a.txt(内容为 "hello world")和 b.txt(内容为 "hello linux"),使用 diff 命令比较它们的差异。
  18. 生成序列:使用 seq 命令生成 1 到 10 的数字,并将其输出重定向到 numbers.txt 文件。
  19. 备份与还原:使用 cp 命令备份 /etc/passwd 到当前目录,并保留其所有原始属性(如时间戳、权限)。
  20. 创建特殊文件:使用 mkdir -p 创建 project/{src,doc,bin,assets} 这样的级联目录结构。
  21. 树状展示:使用 tree 命令(如果未安装请先安装)以树状图列出 project 目录的结构。
  22. 交互式复制:使用 cp -i 尝试复制一个已存在的文件,体验交互式提示。
  23. 详细操作:执行任意 cpmv 命令,并使用 -v 选项查看详细过程。
  24. 空目录检查:删除一个空目录 empty_dir
  25. 通配符练习:在包含 file1.txt, file2.log, readme.md 的目录中,使用 *.txtf* 等通配符一次性操作多个文件。

二、 文本处理 (15题)

  1. 搜索内容:在 /etc/passwd 文件中搜索包含你的用户名的那一行。
  2. 全局搜索:递归地在 /etc 目录下的所有文件中搜索包含 "localhost" 字符串的行。
  3. 流编辑器:使用 sedfile1.txt 中的所有 "old" 替换为 "new"(假设文件有内容),并将结果输出到屏幕。
  4. 流编辑器写入:使用 sed -i 直接原地修改 file1.txt,完成上述替换。
  5. 打印特定行:使用 sed -n '5,10p' 打印 /etc/passwd 的第5到第10行。
  6. 文本分析:使用 awk 打印 /etc/passwd 文件中以冒号分隔的第一列(用户名)和第三列(用户ID)。
  7. 高级awk:使用 awk 找出 /etc/passwd 中UID大于1000的用户名。
  8. 排序:创建一个包含数字的文件 num.txt,使用 sort -n 对其进行数字排序。
  9. 去重:创建一个有重复行的文件 duplicates.txt,使用 uniq 命令前先排序,然后去除重复行。
  10. 裁剪文本:使用 cut -d':' -f1 /etc/passwd 裁剪出用户名。
  11. 转换字符:使用 tr 命令将 file1.txt 中的所有小写字母转换为大写字母。
  12. 合并文件:使用 paste 命令将两个文件 a.txtb.txt 按列合并。
  13. 查找差异:使用 comm 命令比较两个排序后的文件 list1.txtlist2.txt
  14. 编号输出:使用 nl 命令给 file1.txt 的每一行加上行号并输出。
  15. 格式化输出:使用 column -t/etc/passwd 的内容以表格形式格式化输出。

三、 系统管理与信息查看 (15题)

  1. 查看系统信息:使用 uname -a 查看所有系统信息。
  2. 查看内核版本:使用 uname -r 只查看内核版本。
  3. 查看主机名:使用 hostname 命令查看当前主机名。
  4. 查看系统负载:使用 uptime 命令查看系统运行时间和平均负载。
  5. 查看内存使用:使用 free -h 以人类可读的方式查看内存和交换空间使用情况。
  6. 监控进程动态:使用 tophtop 命令动态监控进程和系统性能。
  7. 查看磁盘空间:使用 df -h 查看文件系统磁盘空间使用情况。
  8. 查看目录大小:使用 du -sh /var/log 查看 /var/log 目录的总大小。
  9. 查看环境变量:使用 printenvenv 查看所有环境变量,并使用 echo $PATH 查看特定环境变量。
  10. 设置别名:在你的 ~/.bashrc 文件中添加一个别名 ll='ls -alF',然后使其生效(source ~/.bashrc)。
  11. 查看命令历史:使用 history 查看命令历史记录,并重新执行历史记录中的第100条命令(!100)。
  12. 查看用户登录:使用 whow 命令查看当前有哪些用户登录在系统上。
  13. 查看自己是谁:使用 whoami 命令查看当前有效用户名。
  14. 查看用户信息:使用 id 命令查看当前用户的UID、GID等信息。
  15. 日历:使用 cal 查看当前月的日历,并查看2025年12月的日历。

四、 权限管理 (10题)

  1. 查看权限:使用 ls -l 详细查看 /etc/passwd 文件的权限、所有者和组。
  2. 修改文件权限(数字):创建一个文件 secret.txt,使用 chmod 的数字模式将其权限设置为仅所有者可读可写 (600)。
  3. 修改文件权限(符号):使用 chmod 的符号模式给 secret.txt 的同组用户增加读权限。
  4. 修改文件所有者:使用 sudo chownsecret.txt 的所有者改为root用户(需要sudo权限)。
  5. 修改文件所属组:使用 sudo chgrpsecret.txt 的所属组改为root组。
  6. 默认权限:使用 umask 查看当前默认的权限掩码,并创建一个新文件和新目录,验证其初始权限。
  7. 特殊权限SUID:查找系统中具有SUID权限的命令(如 sudo chmod u+s /usr/bin/your_command,但请勿随意设置)。
  8. 目录权限理解:创建一个目录 shared_dir,设置权限为 775,使其组成员都可以在其中创建和删除文件。
  9. 粘滞位:在 /tmp 目录下创建一个文件,理解粘滞位(t 权限)的作用。ls -ld /tmp 查看。
  10. ACL扩展权限:使用 setfacl -m u:username:rwx file 为某个用户对某个文件设置扩展权限,并用 getfacl 查看。

五、 进程管理 (10题)

  1. 查看进程:使用 ps aux 查看系统所有进程。
  2. 查看进程树:使用 pstree 以树状结构查看进程关系。
  3. 动态监控进程:使用 top 命令,然后在其中按 P(按CPU排序)和 M(按内存排序)。
  4. 终止进程:启动一个 sleep 1000 进程,然后使用 kill 命令通过PID终止它。
  5. 强制终止进程:使用 kill -9 强制终止一个进程。
  6. 按名称终止进程:使用 pkill sleep 终止所有名为sleep的进程。
  7. 后台运行:使用 & 将一个命令(如 sleep 500)放到后台运行。
  8. 前后台切换:启动一个前台进程,使用 Ctrl+Z 将其暂停并放入后台,然后使用 bg 命令让其继续在后台运行,使用 fg 命令将其调回前台。
  9. 查看后台作业:使用 jobs 命令查看当前shell的后台作业。
  10. 使进程脱离终端:使用 nohup 命令运行一个脚本,即使终端关闭它也不会退出(nohup ./script.sh &)。

六、 网络操作 (10题)

  1. 查看IP地址:使用 ip addr showifconfig 查看网络接口信息。
  2. 测试连通性:使用 ping -c 4 8.8.8.8 测试与Google DNS的网络连通性,发送4个包后停止。
  3. 查看路由表:使用 ip route showroute -n 查看系统路由表。
  4. 追踪路径:使用 traceroutetracepath 追踪到 www.google.com 的网络路径。
  5. 查询域名:使用 nslookupdig 查询 www.github.com 的IP地址。
  6. 查看端口监听:使用 ss -tulnpnetstat -tulnp 查看系统监听的TCP和UDP端口。
  7. 下载文件:使用 wget 从网络上下载一个文件(如 wget https://example.com/file.zip)。
  8. 高级下载:使用 curl -O 下载文件,并尝试使用 -I 选项只获取HTTP头信息。
  9. 扫描端口:使用 nmap localhost 扫描本机开放的端口(需安装nmap)。
  10. 网络统计:使用 ss -s 查看详细的网络套接字统计信息。

七、 压缩与打包 (5题)

  1. 压缩文件:使用 gzip 压缩 file1.txt,生成 file1.txt.gz
  2. 解压缩文件:使用 gunzip 解压 file1.txt.gz
  3. 打包与压缩:使用 tar -czvf archive.tar.gz dir1/dir1 目录打包并压缩为 .tar.gz 文件。
  4. 解包与解压:使用 tar -xzvf archive.tar.gz 解压并解包刚才的文件。
  5. 其他格式:使用 tar -cjvf archive.tar.bz2 dir1/ 创建 .tar.bz2 格式的压缩包。

八、 搜索与查找 (5题)

  1. 查找文件:使用 find /home -name "*.txt"/home 目录下查找所有 .txt 文件。
  2. 按类型查找:使用 find /var -type f -name "*.log" 查找 /var 下的所有日志文件。
  3. 按时间查找:使用 find ~ -mtime -1 查找你家目录下最近1天内修改过的文件。
  4. 按大小查找:使用 find / -size +100M 查找系统中大于100MB的文件(可能需要sudo)。
  5. 命令查找:使用 which ls 查找 ls 命令的完整路径。使用 whereis ls 查找 ls 命令的二进制程序、源代码和man手册页的位置。

九、 Shell编程与脚本基础 (3题)

  1. 变量操作:在Shell中定义一个变量 NAME=your_name,然后使用 echo "Hello, $NAME" 打印出来。
  2. 命令替换:使用反引号 `$()date 命令的输出结果赋值给一个变量,并打印出来。
  3. 编写简单脚本:创建一个脚本 hello.sh,内容如下,然后赋予它执行权限 (chmod +x hello.sh) 并运行它:
    #!/bin/bash
    echo "Hello, World!"
    echo "Today is $(date)"