news 2026/10/17 23:56:41

Linux 命令行入门踩坑记录:从 VMware 装系统到文件管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux 命令行入门踩坑记录:从 VMware 装系统到文件管理

Linux 命令行入门踩坑记录:从 VMware 装系统到文件管理

这学期开了 Linux 课,作业要求把 VMware 装系统的过程、还有命令行的基础知识整理成一篇博客。我本来想着"上机截几张图交差",结果真动手才发现坑不少,索性把过程完整记下来,也算是自己的一份复习笔记。

我用的环境是 VMware Workstation 17.6.4 + Red Hat Enterprise Linux 9.8,装在笔记本上。下面所有命令和输出,都是我在虚拟机里真跑出来的,没有编。


一、用 VMware 装一台 Linux

1.1 先说说选型

教材上一般用 CentOS 或者 Ubuntu,我们课程用的是 RHEL 9.8。企业版的好处是以后考 RHCSA 能直接对上,坏处是下载镜像得费点劲(我用的是课程发的 DVD 镜像rhel-9.8-x86_64-dvd.iso,14 GB 出头,比 Ubuntu 的大不少)。

VMware 个人用是免费的,装完在"帮助 → 关于"里能看到版本号。我装的是 17.6.4。

1.2 装 VMware

这一步基本无脑点下一步,只有两个地方值得留意:

  1. 安装路径建议改到 D 盘(或者空间大的盘)。VMware 本体不大,但虚拟机磁盘文件会越滚越大,跟系统盘挤在一起以后会很痛苦。
  2. 勾选"增强型键盘驱动程序",不然后面在虚拟机里按快捷键容易失灵。

装完需要重启一次,重启后系统里会多出几项 VMware 的网络服务(VMnetDHCP、VMware NAT Service 等),这些服务不要手动关,关了虚拟机上不了网。

1.3 新建虚拟机

打开 VMware,文件 → 新建虚拟机,配置类型选典型就行。几个关键选择:

  • 客户机操作系统:Linux,版本选 “Red Hat Enterprise Linux 9 64 位”。选错了影响不大,但 VMware 的推荐配置会不准。
  • 安装来源:我一开始想选"安装程序光盘映像文件",但那样 VMware 会尝试走"简易安装",自动帮你把分区、用户都配好——对学习没什么好处。所以我选了"稍后安装操作系统",这样能完整走一遍 Anaconda 安装器,看得清楚每一步到底在干什么。
  • 磁盘:给了 20 GB,拆分成多个文件。20 GB 对 RHEL 最小安装够用,装图形界面有点紧张,建议 25 GB 往上。

然后是自定义硬件,这块才是真正要上心的地方:

硬件我设的值为什么
内存4096 MB装图形界面的 RHEL 9,2 GB 会卡到怀疑人生
网络NAT开箱即用能上网,不用管宿主机网络怎么配的
CD/DVD指向那个 14 GB 的 ISO装完记得改成"自动检测",否则每次开机都从光盘引导
显示器勾选"加速 3D 图形"不勾的话 GNOME 界面会难受

1.4 装系统

按"开启此虚拟机"之后会进 Anaconda 安装器,流程大概是:

  1. 引导菜单选第一项,进安装界面
  2. 语言选中文(简体),键盘布局选 Chinese / English (US)
  3. 安装目的地:因为整块盘都是虚拟的,直接选"自动"分区就行,不用手动折腾
  4. 软件选择:默认是"最小安装",我选了"带 GUI 的服务器",不然装完只有黑屏命令行
  5. 设置 root 密码(一定要记住,后面sudo和很多操作都靠它)
  6. 等十几分钟,重启

重启之后设个普通用户,就进桌面了。

1.5 装完必做的两件事

第一件,装/确认 open-vm-tools。这个包决定了三件事:分辨率能不能跟着窗口自适应、能不能跟宿主机之间拖拽文件、复制粘贴能不能互通。没有它,虚拟机的分辨率会卡在 800×600,非常难受。

sudodnfinstall-yopen-vm-tools open-vm-tools-desktopsudoreboot

第二件,马上拍快照。虚拟机 → 快照 → 拍摄快照,命名"系统安装完成"。

这一步我是在吃了亏之后才养成习惯的——后面做实验改配置文件,改崩了系统起不来,有快照直接回滚,没快照就得重装。拍快照是虚拟机唯一比真机强的地方,别浪费。


二、内核、Shell、GNU 到底是什么关系

这一节是概念题,但真理解了后面全是加分项。我一开始也是糊的,查了不少资料才捋清楚。

2.1 内核(Kernel)

内核是操作系统里最核心的那个程序,它直接管硬件。

CPU 怎么分配时间片、内存怎么分页、硬盘上的文件怎么组织、网卡收到包给谁——全归它管。

关键点在于权限分层:内核跑在特权态,可以随便读写硬件;我们平时用的程序(浏览器、编辑器、shell)都跑在用户态,想碰硬件必须通过内核提供的"系统调用"这个接口。这层隔离既是安全机制,也是稳定机制——普通程序崩了不会把整个系统带崩。
Linux 内核是 1991 年 Linus Torvalds 发布的,GPL 协议开源。我们机器上看的版本:

[root@localhost ~]# uname -r5.14.0-687.5.3.el9_8.x86_64

那个el9_8就是 Red Hat Enterprise Linux 9.8 的意思,说明这是红帽在官方内核基础上打补丁后的版本。

2.2 Shell

Shell 是"壳",是内核和用户之间的翻译官。

你敲一行命令,Shell 负责解析它、找到对应的程序、启动它、再把结果展示给你。因为它本质上是个命令解释器,所以 Shell 不止 bash 一种:

Shell说明
sh最早的 Bourne Shell,几乎所有 Unix 都有
bashLinux 默认,功能最全,我们在用的就是它
zsh可定制性极强,macOS 现在默认用它
csh/ksh语法风格不同,商业 Unix 上见得多

想看系统里有哪些 Shell,可以直接读配置文件:

[root@localhost ~]# cat /etc/shells/bin/sh /bin/bash /usr/bin/sh /usr/bin/bash

2.3 GNU

这块我一开始最迷糊。GNU 是一个自由软件项目,1983 年由 Richard Stallman 发起,目标很理想主义:做一套完全自由、可以随便用随便改的类 Unix 系统,并且定了 GPL 许可证来保证这种自由能传下去。

GNU 项目写了一大堆东西,比如编译器gcc、调试器gdb、我们正在用的bash,还有ls、cp、rm、cat这些天天要用的命令。

但尴尬的是:GNU 缺一个能跑的内核。他们自己的内核(Hurd)一直没做完。

而 1991 年,Linux 内核出现了——有内核,但缺少外围工具。

于是两边一拍即合。所以严格讲,我们说的"Linux 系统"其实应该叫GNU/Linux。

在机器上能直接看到这些 GNU 工具:

[root@localhost ~]# ls -l /usr/bin/ls /usr/bin/cp /usr/bin/cat-rwxr-xr-x.1root root138424Mar182024/usr/bin/cat -rwxr-xr-x.1root root155104Mar182024/usr/bin/cp-rwxr-xr-x.1root root141264Mar182024/usr/bin/ls

(权限位-rwxr-xr-x说明这三个都是可执行程序,属主是 root。)

顺带一提,光/usr/bin下面就有 1500 多个可执行文件:

[root@localhost ~]# ls /usr/bin | wc -l1511

2.4 合起来看

层次大概是这样:

应用层 浏览器、vim、我们写的脚本 ↑ Shell 层 bash —— 命令解释器,人机交互的接口 ↑ 系统调用/库 glibc 等,给程序提供统一的接口 ↑ 内核层 Linux 内核 —— 管进程、内存、文件系统、设备 ↑ 硬件层 CPU / 内存 / 磁盘 / 网卡

一句话记:内核是心脏,Shell 是外壳,GNU 提供了五脏六腑,三个凑一起才是能用的系统。


三、Shell 怎么启动,提示符在说什么

3.1 怎么进 Shell

平时用得最多的就是图形界面里的终端,Ubuntu 下Ctrl+Alt+T就能开。RHEL 里我一般在活动概览里搜 Terminal。

但 Shell 不只这一种进法:

  • 虚拟控制台 TTY:Ctrl+Alt+F1到F6,纯字符界面,没有图形。图形界面卡死的时候,切到 TTY 救急特别好用。
  • 远程登录:ssh 用户名@IP,服务器场景基本都是这么用的
  • 脚本里指定解释器:脚本第一行的#!/bin/bash就是在告诉系统用哪个 Shell 跑它
  • 手动起子 Shell:直接敲bash,会开一个新的 Shell,exit退出。判断当前是不是子 Shell,一个技巧是看exit之后有没有回到上一层

3.2 提示符的每一段都有意思

连着敲了几个命令,画面大概长这样:

[root@localhost ~]# echo $PS1[\u@\h\W]\$

提示符[root@localhost ~]#拆开是四段:

部分含义
root当前登录的用户名
localhost主机名
#权限标识:#是 root,$是普通用户

最后那个符号一定要盯着看。它是 root 的话,你随便敲错一条命令,可能就是整个系统起不来了;普通用户的话,最多是操作被拒绝,不会有大事。

目录那一段会跟着cd变,这个特别直观:

[root@localhost ~]# cd /etc[root@localhost etc]# pwd/etc[root@localhost etc]# cd ~[root@localhost ~]# pwd/root

注意看提示符从~变成了etc,再变回来。

至于格式本身,是由环境变量PS1控制的,上面echo $PS1打出的[\u@\h \W]\$就是它的定义:

转义符意思
\u用户名
\h主机名(短)
\H主机名(带域名)
\w当前完整路径
\W只显示最后一级目录名
\$权限符号,root 显示#,普通用户显示$
\t24 小时制时间

知道这个之后就能自己改了,比如想让提示符带上时间,PS1='[\t \u@\h \W]\$ '就行。不过临时改只在当前会话有效,想永久生效得写进~/.bashrc。


四、命令是怎么执行的

4.1 基本格式

命令名 [选项] [参数]
  • 命令名:要跑哪个程序,比如ls
  • 选项:控制行为,一般以-开头。短的可以合并写,ls -la等于ls -l -a;长的用--,比如--help
  • 参数:操作对象,文件名、目录名之类的

三者之间必须用空格隔开,这个看着像废话,但手快打漏了就是报错。

敲完回车就执行,几个例子:

ls# 单命令ls-l# 加选项ls-l/etc/passwd# 选项 + 参数ls-lh/boot# 两个短选项合并

4.2 敲下去之后发生了什么

  1. Shell 按空格把这一行拆成命令名和参数
  2. 拿命令名去PATH环境变量列出来的那些目录里挨个找
  3. 找到就 fork 一个子进程跑它,把参数传过去
  4. 程序把结果输出到终端
  5. 返回提示符,等你下一条

第 2 步是关键,这解释了为什么有些命令能直接敲,有些必须加路径。看一下 PATH 里到底有哪些目录:

[root@localhost ~]# echo $PATH/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

which能看出一个命令最终落在哪:

[root@localhost ~]# which lsaliasls='ls --color=auto'/usr/bin/ls

有意思的是它输出两行——因为系统给ls设了别名,先解别名再找真身。

type则能区分一个命令到底是外部程序还是 Shell 自带的:

[root@localhost ~]# type cdcdis a shellbuiltin

cd是内置命令(builtin),因为它要改的是当前 Shell 自己的工作目录,让外部程序来干是没用的——子进程改了目录,退出来就没了。

4.3 几个容易踩的地方

① 严格区分大小写。ls能用,LS就是command not found。这一点和 Windows 完全不一样,文件名也是。

② 一行可以写多条命令,用分号隔开:

[root@localhost ~]# cd /tmp ; pwd ; cd ~/tmp

③ 跑当前目录下的程序必须加./。因为系统只在 PATH 列出的目录里找,不会找当前目录(这是出于安全考虑)。

./myscript.sh# 对myscript.sh# 错:command not found

④ 重定向和管道。>是覆盖写入,>>是追加,|是把上一条的输出当输入:

ls>list.txt# 覆盖ls>>list.txt# 追加ls|wc-l# 数一下有几个文件

这里我踩过一次:想追加结果用了>,把原文件内容直接冲掉了,而且 Linux 下没有回收站,找不回来。


五、命令行快捷键

我原来一直是"方向键 + 退格键"硬敲,直到看别人用命令行行云流水,才知道有这些东西。熟练之后效率真的不一样。

5.1 光标和编辑

快捷键作用
Ctrl+A光标跳到行首
Ctrl+E光标跳到行尾
Ctrl+U删掉光标前面的所有内容
Ctrl+K删掉光标后面的所有内容
Ctrl+W删掉前面一个单词
Ctrl+Y把刚才删掉的粘回来
Ctrl+T交换光标处和前一个字符
Ctrl+L清屏(等于clear)
Ctrl+_撤销上一次编辑

最有用的场景:命令打了一半发现前缀错了,Ctrl+U一键清空重来,不用按着退格键等半天。

5.2 控制类

快捷键作用
Tab补齐(下一节细说)
Ctrl+C中断正在跑的命令
Ctrl+Z把当前命令挂起到后台,fg恢复
Ctrl+D结束输入 / 退出当前 Shell
Ctrl+S/Ctrl+Q暂停 / 恢复屏幕输出
Ctrl+R反向搜索历史命令

Ctrl+C用得太频繁了。比如敲了ping忘了加-c次数,画面一直刷,或者cat后面忘了跟文件名,光标干在那儿等你输入——都是Ctrl+C解决。

注意:终端里Ctrl+C是中断,Ctrl+V是特殊字符输入,所以复制粘贴要用Ctrl+Shift+C/Ctrl+Shift+V。这个我刚开始老按错,按了Ctrl+C结果啥也没复制,还挺懵。

5.3 从系统里直接看键绑定

stty -a会打印当前终端驱动的所有特殊字符设置:

[root@localhost ~]# stty -aspeed38400baud;rows26;columns127;line=0;intr=^C;quit=^\;erase=^?;kill=^U;eof=^D;eol=<undef>;...

几个重点:

  • intr = ^C—— 中断键就是 Ctrl+C
  • eof = ^D—— Ctrl+D 表示输入结束
  • kill = ^U—— Ctrl+U 一次删到行首
  • erase = ^?—— 退格键

readline 层面的绑定可以用bind -P看:

[root@localhost ~]# bind -P | grep -E 'beginning-of-line|end-of-line|unix-line-discard|clear-screen' | sortbeginning-of-line can be found on"\C-a".clear-screen can be found on"\C-l".end-of-line can be found on"\C-e".unix-line-discard can be found on"\C-u".

这比背表格可靠——想知道某个键到底绑了什么功能,查自己机器最准。

5.4 实测一下 Ctrl+C

敲个会长期阻塞的命令,然后按 Ctrl+C:

[root@localhost ~]# echo '=== Ctrl+C : interrupt a running command ==='===Ctrl+C:interrupt a runningcommand===[root@localhost ~]# sleep 300^C[root@localhost ~]# echo 'interrupted - back to the prompt'interrupted - back to the prompt

注意sleep 300那行下面的^C,那是终端把中断信号回显出来了,然后立刻回到提示符。

Ctrl+A/Ctrl+E的效果也可以这样验证:先敲ls -l /etc/hosts,按Ctrl+A把光标移到行首,再输入echo,这行就变成了:

[root@localhost ~]# echo ls -l /etc/hostsls-l/etc/hosts

echo出现在了你原本输入内容的前面,说明光标确实跳到了行首。



六、历史命令

Shell 会自动记下你敲过的命令,家目录下的.bash_history就是干这个的(当前会话的先在内存里,退出时才写文件)。我用得最多的功能之一。

6.1 查看和管理

history# 列出全部历史,带编号history10# 最近 10 条history-c# 清空当前会话的历史history-w# 把当前历史写进 .bash_history

数量受两个环境变量控制:

  • HISTSIZE—— 内存里保留多少条
  • HISTFILESIZE—— 文件里保存多少条

一个小提醒:如果命令里带密码(比如mysql -p密码),可以在命令前面加一个空格再敲,前提是HISTCONTROL里有ignorespace,这样它不会进历史记录。

6.2 怎么调用

写法作用
↑/↓上下翻
!!重跑上一条
!n跑历史里编号 n的那条
!-n跑倒数第 n 条
!字符串跑最近一条以该字符串开头的
!$取上一条命令的最后一个参数
^旧^新把上一条里的旧字符串换成新的再跑
Ctrl+R反向搜索(最好用)

实测几条:

[root@localhost ~]# echo '### 1) history lists the commands you typed'### 1) history lists the commands you typed[root@localhost ~]# history | tail -9...[root@localhost ~]# echo '### 2) !-2 re-runs the command two steps back'### 2) !-2 re-runs the command two steps back[root@localhost ~]# history | tail -9...

注意看:敲!-2之后,Shell 把要执行的完整命令回显了出来(history | tail -9),然后再跑。这个回显特别有用,能让你确认自己到底调用了哪条,别稀里糊涂跑了一条危险的命令。

!$也值得单独说。比如:

ls-l/etc/passwdvim!$# 等价于 vim /etc/passwd

省得再敲一遍长路径。

6.3 Ctrl+R:真正改变体验的功能

按Ctrl+R之后提示符会变成这样:

(reverse-i-search)`uname': uname -r

此时你输入关键字,Shell 会实时匹配最近一条包含该关键字的命令,再按Ctrl+R继续往前找更早的匹配。

找到目标后:

  • 按→或Esc把命令放到命令行上编辑
  • 直接回车执行
  • Ctrl+G取消搜索

以前我都是按几十下上箭头找一条命令,学会Ctrl+R之后基本没再这么干过。


七、Tab 补齐

这个功能用顺手之后会上瘾,而且它还有个副作用——大幅减少拼写错误。

7.1 能补什么

场景例子结果
命令名敲mkdi按 Tab补成mkdir
路径敲cat /etc/hostn按 Tab补成cat /etc/hostname
文件名敲ls rep按 Tab补成ls report_202
变量敲echo $HO按 Tab补成$HOME
用户名敲cd ~ma按 Tab补成对应用户家目录
命令选项敲ls --co按 Tab补成--color(要装 bash-completion)

7.2 两种行为

唯一匹配:直接补全,不提示。

多个匹配:第一次按 Tab 先补到公共前缀,再按一次才把所有候选列出来。实测:

[root@localhost lab]# ls reportreport_2024.txt report_2025.txt report_2026.txt[root@localhost lab]# ls report_202

我一开始按一次没反应,以为是卡了,其实是只按一次默认不列候选。按两次就出来了,上面的候选列表就是这么来的。

(如果你希望按一次就列出来,可以在~/.inputrc里加上set show-all-if-ambiguous on。)

7.3 注意点

  • 区分大小写,Report补不到report_2024.txt
  • 候选太多时会问Display all 123 possibilities? (y or n),按y才显示
  • 想让命令的选项也能智能补齐,得装bash-completion:
sudodnfinstall-ybash-completion


八、忘了命令怎么办:三种查法

命令太多,记不住是正常的。关键是知道去哪儿查,而不是硬背。

8.1 whatis —— 先知道它是干嘛的

[root@localhost ~]# whatis lsls(1)- list directory contents[root@localhost ~]# whatis passwdpasswd(1)- update a user's authentication tokens(s)passwd(5)- passwordfile

一句话说明。注意passwd出来两行——同一个名字在不同手册章节里是两个东西:(1)是说passwd这个命令,(5)是说/etc/passwd这个文件格式。

如果提示nothing appropriate,说明手册数据库没建,跑一下mandb就好。

8.2 --help —— 快速看用法

几乎所有 GNU 命令都支持:

[root@localhost ~]# ls --help | head -14Usage:ls[OPTION]...[FILE]... List information about the FILEs(the current directory by default).Sort entries alphabeticallyifnone of-cftuvSUXnor--sortis specified....

优点是不翻页、直接打印,扫一眼就够了。输出里几个符号的意思:

符号含义
[]方括号里的是可选的
...可以重复多次
-a, --all短选项和长选项的对应写法
大写字母占位符,要换成实际的值

8.3 man —— 最权威

要看完整文档就man:

manls

会进入一个分页界面(其实底层就是less),常用操作:

按键作用
↑↓或jk上下滚
空格/b下翻一页 / 上翻一页
/关键字往下搜
n/N下一个 / 上一个匹配
g/G跳到开头 / 结尾
q退出手册

q是新手最容易卡住的地方——我一开始翻到一半不知道咋退,只能Ctrl+C。其实按q就干净退出了。

8.4 手册的 9 个章节

man手册分 9 个章节,知道这个才能在重名的时候查对地方:

章节内容
1用户命令
2系统调用
3库函数
4特殊文件(/dev 下的设备)
5文件格式(如 /etc/passwd)
6游戏
7杂项
8系统管理命令
9内核例程

所以查/etc/passwd这个文件的格式,要写man 5 passwd;不加章节号的话,默认从第 1 章开始找,会给你命令的说明。

8.5 其他顺手的方法

命令用途
man -k 关键字按功能描述搜(等于apropos),忘命令名时好用
info 命令GNU 官方超文本文档,比 man 更详细
命令 --version看版本
type/which/whereis看这命令是什么、在哪
help 内置命令查 bash 自己的内置命令,比如help cd

我平时的顺序是:先whatis扫一眼它是啥 → 不确定选项就--help→ 要详细就man。



九、文件管理:增删复制

这块是实操重点,我把新建、删除、复制都过了一遍。先建个工作目录:

[root@localhost ~]# mkdir -p /root/lab[root@localhost ~]# cd /root/lab[root@localhost lab]# pwd/root/lab

9.1 新建文件

方法命令
建空文件touch file1.txt
带内容echo "Hello Linux" > hello.txt
进编辑器vim b.txt/nano b.txt
键盘输入cat > c.txt,输完按Ctrl+D

touch是最常用的。它有个细节:文件已存在时不报错,只更新一下时间戳。

[root@localhost lab]# touch file1.txt[root@localhost lab]# ls -ltotal0-rw-r--r--.1root root0Oct906:49 file1.txt

9.2 新建目录

[root@localhost lab]# mkdir dir1[root@localhost lab]# ls -ltotal0drwxr-xr-x.2root root6Oct906:49 dir1 -rw-r--r--.1root root0Oct906:49 file1.txt

注意dir1那一行的第一个字符是d,表示它是目录;file1.txt是-,表示普通文件。

-p这个选项一定要会。想一次建多级目录:

mkdir-pa/b/c# 对mkdira/b/c# 错:no such file or directory

不加-p时父目录必须已经存在,否则报错。另外-p还有个好处:目录已存在时不报错。

9.3 删除文件

rmfile1.txt# 删单个rma.txt b.txt# 删多个rm-ihello.txt# 删前询问(更安全)rm-fhello.txt# 强制删,不询问rm*.tmp# 通配符批量删

这里必须重点强调:Linux 的rm不进回收站。

删了就真没了,没有任何恢复手段(除非你有备份或者用专业数据恢复工具)。我现在的习惯是给rm加个别名,让它每次问一下:

aliasrm='rm -i'

写进~/.bashrc就永久生效。

9.4 删除目录

两个命令,分工不同:

rmdirdir1# 只能删【空目录】rm-rdir1# 递归删,目录和里面的内容一起rm-rfdir1# 递归 + 强制,不询问

rmdir遇到非空目录会直接报错:

[root@localhost lab]# rmdir dir1rmdir: failed to remove'dir1':Directory not empty

这个报错其实是安全设计——它在提醒你"这里还有东西,确定要删吗"。确认要删就换rm -r。

⚠️rm -rf的危险程度怎么强调都不过分。尤其注意这几种写法:

rm-rf/# 直接摧毁系统rm-rf/*# 同上rm-rf$VAR/# 如果变量是空的,就变成 rm -rf / 了

最后一条最阴险。所以在脚本里用变量做删除路径时,一定要先判断变量非空。

9.5 复制文件

cphello.txt hello_bak.txt# 复制并改名cphello.txt /tmp/# 复制到目录cp-ia.txt b.txt# 覆盖前询问cp-pa.txt b.txt# 保留权限、属主、时间戳cp-asrc dst# 归档模式,保留全部属性(备份首选)cp -b a.txt b.txt # 覆盖前先备份原文件

常用选项:

选项作用
-i覆盖前询问
-f强制覆盖
-r/-R递归(复制目录必须加)
-p保留权限、属主、时间戳
-a归档模式,等于-dpr打包
-v显示复制过程
-b覆盖前备份

9.6 复制目录

复制目录必须加-r,这是初学者最容易漏的。不加的话:

[root@localhost lab]# cp dir1 dir2cp:-rnot specified;omitting directory'dir1'

加上就正常了:

[root@localhost lab]# cp -r dir1 dir1_bak[root@localhost lab]# ls -l

做备份的话我更推荐cp -a,因为它会把原文件的权限、属主、时间戳全保留下来。用普通cp复制,属主可能变成当前用户、时间戳变成现在——有时候这会影响程序运行。

还有个小坑:如果目标目录已经存在,cp -r dir1 dir2的行为是把它复制成dir2/dir1,而不是覆盖dir2。这个和很多人的直觉不一样。

9.7 通配符

配合文件管理用,效率翻倍:

通配符含义例子
*任意多个字符rm *.log
?恰好一个字符ls file?.txt
[abc]括号内任一字符ls file[123].txt
[a-z]范围内任一字符ls file[a-z].txt
{a,b}花括号扩展touch {a,b,c}.txt生成三个文件



十、最后总结几个坑

这轮实操下来,我记下这几条:
1.rm没有回收站。这是和 Windows 最大的思维差异。删除前多看一眼,给rm加-i别名。

2. 复制目录必须-r。忘了就报错,不复杂但很常犯。

3. 看到#提示符要紧张起来。那意味着你是 root,一条错命令可能让系统起不来。在虚拟机里练,并且提前拍快照,是唯一安全的学习方式。

4. 别背命令,学会查。whatis扫一眼 →--help看用法 →man看细节,配合Tab补齐和Ctrl+R搜历史,效率比死记硬背高太多。

5. 虚拟机的快照是真香。做实验前拍一个,改崩了 10 秒回滚,比重装系统快无数倍。


参考

  1. 《鸟哥的 Linux 私房菜(基础学习篇)》
  2. Red Hat Enterprise Linux 9 官方文档
  3. GNU 项目官网 https://www.gnu.org/
  4. man 手册(系统自带,man man)

本文是课程作业整理,环境为 VMware Workstation 17.6.4 + RHEL 9.8,文中的命令和输出均来自实际运行结果。有写得不对的地方欢迎指正。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/17 8:16:51

基于PJ85718DM与STM32F413RH的多点温度监测系统设计与实现

1. 项目背景与核心需求拆解温度监测这件事&#xff0c;看起来简单&#xff0c;真要做到"本地准、远程稳、长期不飘"&#xff0c;里面的门道比想象中多得多。我这次做的项目&#xff0c;核心就是用一颗PJ85718DM温度传感芯片配合STM32F413RH主控&#xff0c;搭一套能同…

作者头像 李华
网站建设 2026/10/15 11:41:53

第58章 兑•兑悦 喜悦

退休的申请是在2042年秋天递交的&#xff0c;审批流程走了大约四个月。悦儿在收到确认函的那天&#xff0c;坐在办公室里看了一会儿窗外&#xff0c;没有特别的感觉&#xff0c;只是确认了时间线上的那个标记已经移位到了一个新的位置。她把确认函收进了办公桌最下面的抽屉里&a…

作者头像 李华
网站建设 2026/10/16 15:54:34

ECDIS远程软件更新工程实战:海事网关、DMZ与多链路架构设计

摘要&#xff1a; ECDIS远程软件更新表面上是一个文件分发问题&#xff0c;实际同时涉及WAN可用性、加密船岸通信、网络分区、船端文件存储和软件生命周期管理。合理的海事网关架构&#xff0c;应尽量让外部网络故障停留在通信层&#xff0c;而不是直接进入ECDIS的软件维护过程…

作者头像 李华
网站建设 2026/10/17 23:34:19

绿色建筑场景下的机器人梯控设计:任务调度与运行优化方法

摘要&#xff1a; 机器人进入写字楼、园区、酒店等建筑后&#xff0c;跨楼层任务会直接占用电梯资源。对于关注长期运营效率的建筑项目来说&#xff0c;机器人梯控设计不能只解决“能不能坐电梯”&#xff0c;还需要考虑机器人请求是否重复、多台机器人是否无序竞争、电梯资源是…

作者头像 李华