第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文件系统操作知识体系。你把它理解了,基础就算打牢了。

Linux文件系统操作知识体系 文件系统结构 目录操作命令 文件操作命令 pwd cd ls mkdir rmdir touch cp / mv rm cat more / less 核心思想:一切皆文件,路径即身份 熟练使用这些命令,是Linux系统编程的第一步

2.5 实战小贴士

最后,分享几个我日常工作中的小习惯:

  1. 多用Tab补全——敲几个字母按Tab,路径自动补全。既快又不容易出错。
  2. 善用历史命令——按上下键翻历史,或者Ctrl+R搜索历史命令。
  3. 别名简化操作——在~/.bashrc里加alias ll='ls -lh',省事不少。
  4. 先确认再执行——删除或覆盖前,先用ls确认路径对不对。

这些命令看着简单,但真正用好需要时间积累。别急,慢慢来。等你用熟了,就会发现Linux的命令行操作其实特别顺手。

可可精品资料库