Linux 命令行入门学习资料 day_2
Linux 支线学习资料文件操作三剑客cp、mv、rm以及编译器参数-c与-o一、为什么学这组命令之前你已经学会在命令行里“看”ls、“走”cd、“建”mkdir、“编译运行”gcc./a.out。现在要继续往你的“命令武器库”里添加三个极其常用的文件操作工具复制、移动/重命名、删除。同时我们还要深入gcc的两个选项让你理解编译的内部阶段。二、文件操作命令精讲1.cp—— 复制文件或目录它干什么cp是copy的缩写用于复制文件或整个目录产生一个副本。基本用法cp源文件 目标路径源文件是你要复制的那个东西目标路径可以是一个新文件名也可以是一个目录就把文件原样复制进去。常用选项-rrecursive递归复制用于复制整个目录时必须加否则会报错。-iinteractive如果目标文件已存在会询问你是否覆盖防止误覆盖。-vverbose显示详细的复制过程让你知道它在干什么。实例演示$cphello.c hello_backup.c# 将 hello.c 复制一份命名为 hello_backup.c$cphello.c project/# 将 hello.c 复制到 project 目录下文件名不变$cp-rmy_folder new_folder# 复制整个 my_folder 目录及其内部所有内容到 new_folder$cp-ia.txt b.txt# 如果 b.txt 已存在会提示是否覆盖易错提醒复制目录时必须加-r否则cp: -r not specified; omitting directory。如果目标是一个已存在的目录文件会被复制到目录里面而不是把目录替换掉。举个例子cp file dir会把file放进dir里变成dir/file。如果你想把目录本身替换掉需要用cp -r source_dir target_dir并且target_dir要么不存在要么就要合并内容。2.mv—— 移动文件或重命名它干什么mv是move的缩写有两个作用移动文件或目录到另一个位置重命名文件或目录其实移动到一个不存在的名字就是重命名。基本用法mv源 目标如果目标是一个已存在的目录源会被移动到这个目录里面。如果目标是一个不存在的名字源就会被重命名为目标。常用选项-i覆盖前询问。-v显示移动过程。实例演示$mvhello.c src/# 把 hello.c 移动到 src 目录下src 必须存在$mva.out hello# 将 a.out 重命名为 hello相当于改名$mvold_name.txt new_name.txt# 重命名文件$mvdir1 dir2# 如果 dir2 不存在则重命名若存在则把 dir1 移入 dir2 内易错提醒mv移动或重命名时如果目标文件已存在会直接覆盖不加-i时不警告所以使用时要小心。建议养成加-i的习惯或者在重要操作前先ls看看有没有重名。3.rm—— 删除文件或目录⚠️ 这个命令极其危险删除后无法恢复一定要谨慎它干什么rm是remove的缩写用来删除文件或目录。基本用法rm文件rm目录...需要选项必须掌握的选项-i删除前逐一询问确认安全。-r递归删除目录及其所有内容删除目录必须加这个。-f强制删除不问确认就算文件不存在也不报错危险慎用。-rf强制递归删除极其危险不要轻易使用尤其不要带*或/。实例演示$rmold_file.txt# 删除一个文件$rm-itest.c# 删除前会问 “rm: remove regular file test.c?” 回答 y 才删$rm-rold_project# 删除整个 old_project 目录及其所有子文件/子目录$rm-rfdangerous_dir# 强制删除目录不问任何话危险黄金法则删除前先用ls确认要删的东西。尽量使用-i给自己一次反悔的机会。永远不要执行sudo rm -rf /会删掉整个系统。如果只是想清空一个目录可以用rm -r 目录/*但也要再三确认路径。三、深入gcc的参数-c与-o之前我们用gcc hello.c会直接生成可执行文件但其实编译过程分四步预处理 → 编译 → 汇编 → 链接。-c和-o就是控制这些阶段的利器。man gcc里的官方解释已经帮你翻译成人话-cCompile or assemble the source files, but do not link.意思是编译或汇编源文件但不进行链接。通俗讲只把.c变成.o目标文件不生成最终可执行程序。-o filePlace output in file file. This applies to whatever sort of output is being produced.意思是把输出放到指定文件无论输出的是什么类型的文件可执行文件、目标文件、汇编文件等。gcc -c详解只编译不链接当你的项目有多个源文件时例如main.c和func.c你不能一次性直接生成可执行程序因为每个.c文件需要先单独编译成.o目标文件最后再把这些.o文件链接成一个完整的程序。工作流程gcc-cmain.c# 生成 main.o里面是机器码但还不完整gcc-cfunc.c# 生成 func.ogcc main.o func.o-omyprogram# 链接两个 .o 文件生成可执行文件 myprogram./myprogram关键理解.o文件是二进制代码但不能直接执行因为它缺少启动代码和其他函数的地址链接。不加-c的gcc会自动帮你做完编译和链接两步一键生成最终程序。但大型项目必须分步编译因为修改一个文件时只需重新编译那个文件即可。gcc -o详解自定义输出文件名-o可以搭配任何阶段的输出来改名。示例gcc hello.c-ohello# 可执行文件命名为 hellogcc-chello.c-ohi.o# 目标文件命名为 hi.o而不是默认的 hello.ogcc hi.o-ohello# 把 hi.o 链接成 hello如果不加-o默认输出名称是只编译时源文件名.o直接链接时a.out四、✅ 已掌握命令清单更新版以下清单包含之前掌握的核心五命令加上今天新掌握的三个文件操作命令和两个编译器参数。命令 / 参数用途关键写法或选项备注ls列出目录内容ls -l,ls -a大小写敏感cd切换目录cd ..,cd ~,cd -回家的多种姿势mkdir创建目录mkdir -p a/b/c父目录自动创建gcc编译C程序gcc file.c -o name默认生成 a.out./程序名运行当前目录程序./a.out必须加./cp复制文件/目录cp -r 源目录 目标,cp -i复制目录必须-rmv移动/重命名mv 源 目标,mv -i小心覆盖已有文件rm删除文件/目录rm -r 目录,rm -i极其危险操作前确认gcc -c只编译不链接gcc -c file.c生成 .o 目标文件gcc -o自定义输出名gcc -o 输出名适用于任何阶段五、综合练习边学边练形成肌肉记忆请在终端中一步步完成以下任务不要跳步每步都观察ls输出。在家目录下创建文件夹file_practice并进入。创建三个文件a.txt、b.txt、c.txt用touch命令快速创建空文件如touch a.txt。如果没有touch就用nano a.txt随便写点东西保存。将a.txt复制为a_backup.txt。将b.txt重命名为b_new.txt用mv。创建一个子目录subdir把c.txt移入其中。复制整个subdir目录及其内容到subdir_copy注意用-r。删除a_backup.txt文件建议加-i体验确认过程。删除subdir_copy整个目录用rm -r不加-f先确认。在file_practice目录下创建一个calc.c内容如下intadd(inta,intb){returnab;}这是一个没有 main 函数的源文件单独不能生成可执行程序。用gcc -c calc.c -o calc.o生成目标文件并观察ls -l calc.o。再创建一个main.c内容如下#includestdio.hintadd(int,int);intmain(){printf(10 20 %d\n,add(10,20));return0;}用gcc -c main.c生成main.o。用gcc main.o calc.o -o calculator链接生成可执行文件。运行./calculator检查输出。最后用cd ..回到家目录并删除整个file_practice目录rm -r file_practice要求输入y确认。六、答案与关键点解析mkdir file_practice cd file_practicetouch a.txt b.txt c.txt若没有 touch可用nano a.txt保存空文件cp a.txt a_backup.txtmv b.txt b_new.txtmkdir subdir mv c.txt subdir/cp -r subdir subdir_copy一定要加-rrm -i a_backup.txt提示时按yrm -r subdir_copy提示时会问是否进入目录、是否删除文件按y确认创建calc.c只含add函数无main。gcc -c calc.c -o calc.ols -l可见calc.o权限为-rw-r--r--没有执行权限。创建main.c包含头文件、声明和main。gcc -c main.c生成main.o。gcc main.o calc.o -o calculator两个.o链接成一个可执行文件calculator。./calculator输出10 20 30。cd ..然后rm -r file_practice遇到提示按y确认。关键理解第9-14步刻意让你体验了“分离编译”calc.o和main.o单独生成最后链接。这就是gcc -c的典型使用场景。rm -r删除目录时必须加-r系统会询问你是否进入目录、是否删除文件这是安全机制如果加了-f则不会问。七、学习检查清单复制一个目录到另一个地方命令怎么写最容易忘记的选项是什么mv file1 file2如果file2已经存在会怎样如何让它询问你是否覆盖删除一个非空目录data必须用哪个选项为什么建议先加-igcc -c hello.c生成了什么文件能直接运行吗如何把编译出的目标文件命名为myobj.o简述从多个.c文件到一个可执行程序的完整编译链接步骤。如果这些问题你都能流畅回答出来恭喜你这一支线的所有内容已经被你内化。接下来可以在真实项目里多用cp、mv、rm管理文件用gcc -c体验多文件编译命令行能力会越来越强。继续加油