第2章:Linux基础命令——文件系统与文件操作
说实话,我见过不少刚入行的朋友,一上来就急着学进程、学网络编程。结果呢?连个文件都找不对地方,目录结构搞得一团糟。嗯,这就像盖房子不打地基——迟早要出问题。
今天这一章,咱们就把Linux文件系统这块地基夯实了。我会结合自己这些年踩过的坑,带你把这些基础命令真正吃透。
2.1 文件系统结构——你得先知道东西放哪
Linux的文件系统,说白了就是一棵倒着长的树。根是/,所有东西都从它开始。我刚开始学的时候,总觉得这结构很抽象,后来用多了才发现——这设计其实特别优雅。
核心目录速查表(我建议你背下来,真的有用)
| 目录 | 用途 | 我的经验 |
|---|---|---|
/bin |
普通用户可用的命令 | ls、cp这些命令都在这里 |
/sbin |
系统管理员用的命令 | 比如fdisk分区工具 |
/etc |
配置文件集中营 | 我曾经手抖删过这里的东西… |
/var |
经常变化的数据 | 日志文件、缓存都在这里 |
/tmp |
临时文件 | 重启后自动清空,别放重要东西 |
/home |
用户的家目录 | 每个用户一个文件夹 |
/root |
超级管理员的家 | 普通用户进不去 |
⚠️ 避坑指南:我曾经在/etc目录下直接编辑配置文件,结果把系统搞崩了。记住:改配置前先备份!用cp /etc/xxx.conf /etc/xxx.conf.bak,这是保命操作。
2.2 目录操作命令——你总得知道自己在哪
2.2.1 pwd——你在哪?
pwd(Print Working Directory)这命令,我一天能用几十次。特别是当你ssh到一台新服务器,第一件事就是敲pwd看看当前目录。
$ pwd
/home/yourname/projects
我个人习惯在写脚本时,开头先pwd一下,确认路径正确。这习惯救过我很多次。
2.2.2 cd——想去哪?
cd(Change Directory)是使用频率最高的命令之一。我总结了几种常用法:
cd /—— 回到根目录cd ~或cd—— 回用户家目录cd -—— 回到上一个目录(这个超好用!)cd ..—— 上一级目录cd ../..—— 上两级目录
💡 小技巧:我习惯用cd -在两个目录间快速切换。比如你在/etc/nginx和/var/log/nginx之间来回看日志,cd -比打完整路径快多了。
2.2.3 ls——看看都有啥
ls(List)这命令,参数多得能写本书。但常用的就这几个:
$ ls -l # 详细列表,显示权限、大小、时间
$ ls -a # 显示隐藏文件(以.开头的文件)
$ ls -lh # 人性化显示大小(K、M、G)
$ ls -lt # 按时间排序,最新的在最上面
$ ls -ltr # 按时间倒序,最旧的在上
我记得有一次排查磁盘空间问题,用ls -lhS(按大小排序)一下就找到了那个占了几十G的日志文件。嗯,有时候参数组合能救命。
2.2.4 mkdir——创建目录
mkdir(Make Directory)创建目录。最常用的参数是-p:
$ mkdir mydir # 创建单个目录
$ mkdir -p a/b/c/d # 递归创建多级目录
$ mkdir -p project/{src,doc,bin} # 一次创建多个子目录
重点:我强烈建议你养成用-p参数的习惯。它不会报错,即使目录已存在。这在脚本里特别安全。
2.2.5 rmdir——删除空目录
rmdir(Remove Directory)只能删除空目录。说实话,这命令我用得不多,因为更常用的是rm -rf。但要注意:
⚠️ 警告:rm -rf是双刃剑。我曾经在服务器上误执行rm -rf /(注意后面有个空格),差点把系统删了。记住:rm -rf前一定要再三确认路径!
2.3 文件操作命令——这才是日常
2.3.1 touch——创建空文件或更新时间戳
touch有两个用途:创建空文件,或者更新已有文件的时间戳。
$ touch newfile.txt # 创建空文件
$ touch -t 202301011200 file.txt # 把文件时间改成2023年1月1日12:00
我个人常用touch来创建临时测试文件,或者配合make命令调整编译时间。
2.3.2 cp——复制文件
cp(Copy)复制文件或目录。常用参数:
$ cp file1 file2 # 复制文件
$ cp -r dir1 dir2 # 递归复制目录
$ cp -i file1 file2 # 交互模式,覆盖前询问
$ cp -u file1 file2 # 只复制更新的文件
💡 我的习惯:我几乎总是用cp -i,防止不小心覆盖重要文件。虽然多了一步确认,但安全第一。
2.3.3 mv——移动或重命名
mv(Move)既可以移动文件,也可以重命名:
$ mv file1 file2 # 重命名
$ mv file1 /tmp/ # 移动到/tmp目录
$ mv -i file1 /tmp/ # 交互模式
你想想看,mv和cp的区别是什么?mv是剪切,原文件没了;cp是复制,原文件还在。这个区别在操作大文件时特别重要。
2.3.4 rm——删除文件
rm(Remove)删除文件或目录。常用参数:
$ rm file.txt # 删除文件
$ rm -r dir/ # 递归删除目录
$ rm -f file.txt # 强制删除,不询问
$ rm -rf dir/ # 递归强制删除(危险!)
⚠️ 血的教训:我曾经在脚本里用rm -rf $TMP_DIR/,结果$TMP_DIR变量没赋值,变成了rm -rf /。从那以后,我写脚本都会先echo一下路径,确认无误再执行删除。
2.3.5 cat——查看文件内容
cat(Concatenate)最常用的就是查看小文件:
$ cat file.txt # 显示全部内容
$ cat -n file.txt # 显示行号
$ cat file1 file2 > file3 # 合并文件
但要注意,cat不适合大文件。我曾经用cat看一个几百MB的日志文件,终端直接卡死了。嗯,这时候就该用less了。
2.3.6 more和less——分页查看
more和less都是分页查看工具。我个人更推荐less,因为它功能更强:
$ less largefile.log # 分页查看
# 常用快捷键:
# 空格键:下一页
# b键:上一页
# /关键词:搜索
# q键:退出
核心区别:more只能向下翻页,less可以上下翻页。说白了,less就是more的增强版。我几乎只用less。
2.4 知识体系总览
下面这张图,是我根据多年经验整理的Linux文件系统操作知识体系。你把它理解了,基础就算打牢了。
2.5 实战小贴士
最后,分享几个我日常工作中的小习惯:
- 多用Tab补全——敲几个字母按Tab,路径自动补全。既快又不容易出错。
- 善用历史命令——按上下键翻历史,或者
Ctrl+R搜索历史命令。 - 别名简化操作——在
~/.bashrc里加alias ll='ls -lh',省事不少。 - 先确认再执行——删除或覆盖前,先用
ls确认路径对不对。
这些命令看着简单,但真正用好需要时间积累。别急,慢慢来。等你用熟了,就会发现Linux的命令行操作其实特别顺手。