【Linux】#5 | 文件与目录基础操作命令

简介:Linux 文件与目录基础操作命令汇总,包含 touch、cat、more、cp、mv、rm、which、find,附带语法、示例、坑点,适合期末 / 面试复习。

前言

Linux 一切皆文件,目录本质也是特殊文件。 ls 查看文件类型小提示:

  • 以 d 开头:文件夹(目录 directory)
  • 以 - 开头:普通文件

补充:还有 l 软链接、b块设备、c字符设备等,本篇重点普通文件和目录。


1. touch:创建文件

作用

创建空白普通文件;如果文件已存在,会更新文件的访问 / 修改时间戳,不会覆盖原有内容。

语法

复制代码
touch Linux文件路径
  • 参数必填 :文件路径,支持相对路径、绝对路径、特殊路径符号 (. 当前目录,..上级目录,~家目录)
  • touch不能直接创建文件夹 ,创建文件夹用 mkdir

示例

复制代码
# 在当前目录创建 test.txt
touch test.txt
# 绝对路径创建
touch /home/xxx/demo.txt
# 相对路径,在上一级目录创建文件
touch ../readme.md

易错点:touch 是文件 ,不是文件夹,touch testdir 只会创建名为 testdir 的文件,不是目录。


2. cat:查看文件内容

作用

一次性完整输出文件全部内容到终端,适合小文件;大文件会直接刷屏,不方便阅读。

语法

复制代码
cat 文件路径

示例

复制代码
cat test.txt
# 查看多个文件,依次输出
cat test1.txt test2.txt

补充拓展:cat > test.txt 可以简单写入内容(Ctrl+D 结束输入)


3. more:分页查看文件

作用

分页查看文件内容,适合大文件,不会一次性全部打印。

和 cat 区别:cat 一次性全部输出;more 分页,支持翻页。

语法

复制代码
more 文件路径

操作交互

  • 空格:向下翻一页

  • 回车:向下滚动一行

  • q:退出查看

  • /关键词:在文件内搜索(可选拓展)

    more test.txt

拓展:日常也推荐 less,功能比 more 更强,支持上下箭头滚动。


4. cp:复制 文件 / 文件夹

cp = copy,复制文件或目录。

语法

复制代码
cp [-r] 源路径 目标路径
  • -r:可选参数,递归复制 ,复制文件夹必须加 -r;复制普通文件不需要
  • 参数 1:源(被复制的文件 / 文件夹)
  • 参数 2:目标(复制到哪里)

示例

复制代码
# 复制文件
cp test.txt /home/xxx/

# 复制文件夹,必须加 -r
cp -r itheima itcast

坑点:不加 -r 直接复制文件夹会报错!文件夹里面有多层子文件子目录,需要递归。


5. mv:移动 / 重命名 文件 / 文件夹

mv = move,两个核心能力:移动 、改名

语法

复制代码
mv 源路径 目标路径
  • 参数 1:源(要移动的文件 / 文件夹)
  • 参数 2:目标位置

规则:

  1. 如果目标路径已经存在:把源移动到目标目录里面
  2. 如果目标路径不存在 :对源文件 / 文件夹重命名

示例

复制代码
# 移动 test 文件夹到Desktop目录
mv test Desktop

# test2不存在 → 将test2重命名为test3
mv test2 test3

小技巧:mv 不需要 -r!移动文件夹直接写,不用递归参数,和 cp、rm 不一样。


6. rm:删除 文件 / 文件夹(高危命令!)

rm = remove,删除文件、目录,非常危险!

语法

复制代码
rm [-r -f] 路径1 路径2 ... 路径N
  • -r:递归删除,删除文件夹必须加 - r,删除普通文件不用
  • -f:force 强制删除,不弹出确认提示
  • 支持一次性删除多个文件 / 目录,空格分隔
  • 支持通配符 *
通配符规则
  • test*:匹配以 test 开头的所有内容
  • *test:匹配以 test 结尾的所有内容
  • *test*:匹配文件名包含 test的所有内容

示例

复制代码
# 删除普通文件
rm test3.txt

# 删除文件夹,加 -r
rm -r test2

# 一次性删除多个目录
rm -r test2 test3 test4 itheima

# 通配符:删除所有test开头的文件
touch test1 test2 test3
rm -r test*

# 删除所有文件名包含test的
touch 1test2 2test2 3test2
rm -r *test*
-f 强制删除演示
复制代码
# 切换root用户(需要密码)
su - root
# 创建测试文件
touch test.txt
# 普通删除,部分系统会提示确认
rm test.txt
# 强制删除,无任何确认提示,直接删掉
rm -f test.txt
# 退出root,回到普通用户
exit

⚠️ 重要警告

  1. rm 没有回收站!删除之后很难恢复!
  2. root 用户下执行 rm -rf / 会直接摧毁整个系统,绝对不要执行
  3. 使用通配符前,建议先用 ls 匹配规则 先看一下会匹配哪些文件,确认无误再 rm,例如 ls test*

7. which:查看命令本体程序位置

原理

Linux 的命令本质就是二进制可执行程序 ,类似 Windows .exe。 which 用来查找这条命令对应的程序存放路径。

语法

复制代码
which 命令名

示例

复制代码
which cd
which pwd
which touch
which mkdir
which cp
which mv

补充:部分内置 shell 命令(如 cd)which 可能找不到,因为它不是独立外部程序,属于 shell 内建命令。


8. find:文件查找命令

find 可以按文件名 、文件大小搜索文件,功能强大。

① 按文件名查找

语法:

复制代码
find 起始搜索路径 -name "被查找文件名"
  • 从【起始路径】向下递归搜索
  • -name 按文件名匹配,名称建议加引号,支持通配符
  • 切换 root 用户后,才有权限全盘搜索(从根目录/搜索)

示例:

复制代码
# 从根目录全盘搜索名字叫test的文件
find / -name "test"

# 通配符搜索
find / -name "test*"    # test开头
find / -name "*test"    # test结尾
find / -name "*test*"   # 文件名包含test

② 按文件大小查找

语法:

复制代码
find 起始路径 -size +|-n[kMG]
  • +:大于;-:小于
  • n:数字
  • 单位:k KB,M MB,G GB

示例:

复制代码
# 查找小于10KB的文件
find / -size -10k

# 查找大于100MB的文件
find / -size +100M

# 查找大于1GB的文件
find / -size +1G

辅助查看文件大小:

复制代码
ls -lh locale-archive

ls -lh:人性化单位展示文件大小,方便核对。


命令速查表(复习用,可直接复制)

表格

命令 作用 常用参数
touch 创建空白文件 无
cat 一次性查看文件 无
more 分页查看文件 空格翻页,q 退出
cp 复制 -r 递归复制文件夹
mv 移动 / 重命名 无需 - r
rm 删除 -r删目录,-f强制删除
which 查找命令程序位置 无
find 搜索文件 -name按名,-size按大小

复习要点总结

  1. 操作文件夹:cp/rm 需要 -r,mv不需要
  2. rm 高危,无回收站,root 下慎用;用通配符先 ls 预览
  3. 通配符 *:匹配任意字符
  4. find 支持文件名 + 文件大小两种搜索方式
  5. which 查看外部命令的二进制程序路径,shell 内置命令查不到
相关推荐
逐梦之程1 小时前
EXCEL与DBC格式互转软件
运维·服务器·网络
字节跳动的猫1 小时前
LikeShop 搜索功能优化二开:中文分词、商品权重排序与搜索热词管理
android·java·中文分词
计算机毕设定制辅导-无忧学长1 小时前
《基于微信小程序的校园文化活动报名与管理系统》
java·spring boot·微信小程序·uniapp·校园文化活动报名与管理小程序
yychen_java1 小时前
第十二篇:完整项目实战——构建可验证的能源智能运维 Agent 中枢
运维·人工智能·能源
靠沿1 小时前
MySQL数据库基础——索引的使用&alter、explain关键字
java·数据库·mysql
9624561 小时前
餐饮 SaaS 优惠券系统架构演进(七)营销定价引擎设计:活动、会员价、优惠券、买赠如何在同一 PriceQuote 中可解释地组合
java·运维·算法
码匠许师傅1 小时前
【C++三方组件】redis-plus-plus:现代 Redis C++ 客户端
java·c++·redis
ab1237681 小时前
MQTT笔记
java·笔记·mqtt·学习
二宝哥1 小时前
【问题】代理转发到后端使用request.getRequestURL()地址没有端口
java