Linux 基本命令超详细解释第二期 | touch | cat | more | cp | mv | rm | which | find
一、touch
touch
用于创建空文件,或修改文件的时间戳
创建一个空文件
touch file.txt
如果文件已存在,touch
不会改内容,只会更新时间戳
ls -l test.txt
# -rw-r--r-- 1 user user 0 Sep 19 20:00 test.txttouch test.txt
ls -l test.txt
# -rw-r--r-- 1 user user 0 Sep 19 21:05 test.txt # 修改时间变了
同时创建多个文件
touch file1.txt file2.txt
touch 不仅能创建 .txt
文件,而是可以创建 任意扩展名的空文件。
示例
touch file.txt # 创建 txt 文件
touch file.md # 创建 Markdown 文件
touch script.sh # 创建 Shell 脚本文件
touch main.cpp # 创建 C++ 源文件
touch data.json # 创建 JSON 文件
touch myfile # 没有扩展名的文件
文件扩展名在 Linux 里并不是强制要求,Linux 判断文件类型主要看内容(比如用 file
命令),不是依赖扩展名
二、cat
cat
= concatenate(连接),cat
用于查看文件内容、合并文件,或通过重定向创建文件
查看文件内容
cat file.txt
合并多个文件,并写入新文件
cat file1.txt file2.txt > newfile.txt
创建文件并输入内容(Ctrl+D 结束输入)
cat > file.txt
三、more
more
用于分页查看长文件内容。
分页查看文件
more file.txt
查看时的常用操作
空格:下一页
Enter:下一行
b:上一页
q:退出
四、cp
cp
= copy,用于复制文件或目录。
复制文件
cp file1.txt file2.txt
👉 把 file1.txt
复制为 file2.txt
如果你在当前目录下执行:
file1.txt
必须在 当前目录 下存在;file2.txt
也会在 当前目录 下生成。
结果就是:在当前目录把 file1.txt
复制一份,命名为 file2.txt
在 Linux 里:
不写路径 → 默认就是 当前目录 (
.
)
复制文件到目录
cp file.txt /home/user/
👉 把 file.txt
复制到 /home/user/
目录下
递归复制目录(常用)
cp -r dir1 dir2
👉 把 dir1
整个目录复制为 dir2
常用选项
-r
:递归复制目录-i
:交互式复制(覆盖前提示)-v
:显示复制过程
五、mv
mv
= move,用于移动或重命名文件/目录
移动文件到目录
mv file.txt /home/user/
👉 把 file.txt
移动到 /home/user/
重命名文件
mv oldname.txt newname.txt
👉 给文件改名字
移动目录
mv dir1 dir2
👉 把 dir1
移动到 dir2内
这里有两种情况
1. 如果 dir2
已经存在,且是一个目录
dir1
会被移动到dir2
里面去,成为它的子目录
例子:
mkdir dir1
mkdir dir2
mv dir1 dir2
结果目录结构:
dir2/
└── dir1/
2. 如果 dir2
不存在
那么
dir1
会被重命名为dir2
六、rm
rm
= remove,用于删除文件或目录
删除文件
rm file.txt
👉 删除单个文件
删除多个文件
rm file1.txt file2.txt
删除目录(递归删除)
rm -r dir
rm -r /home/user/tempdir # 绝对路径
rm -r ./tempdir # 相对路径(当前目录下)
👉 删除整个目录及内容
强制删除
rm -rf dir
👉 不提示、递归删除目录,非常危险
常用选项
-r
:递归删除-f
:强制删除(不提示)-v
:显示删除过程
七、which
在 Linux 里,每一个命令实际上都是一个可执行文件:
比如
ls
命令,本质上是/bin/ls
这个二进制程序文件。当你在终端输入
ls
时,系统会去你的 PATH 环境变量 指定的目录里寻找这个可执行文件,然后运行它。
which
用于查找 命令所在路径
查找命令路径
which ls
输出:
/user/bin/ls
表示 ls 命令实际存放在 /user/bin/ls
查找多个命令
which ls cat rm
八、find
find 用于 在目录下查找文件或目录,可按名字、类型、时间、大小等条件搜索
按文件名查找
find /home/user -name "file.txt"
在 /home/user
目录下查找名为 file.txt
的文件(支持通配符,比如 *.txt
)
find要查找的文件带不带“”引号的作用
find /home/user -name "file.txt"
双引号(或单引号)可以 防止 shell 对特殊字符进行扩展
例如文件名里有空格、通配符
*
、?
、[]
等,带引号可以确保find
接收到的就是你指定的字符串
find /home/user -name file.txt
如果文件名是简单的字母、数字,没有空格或特殊字符,完全可以不带引号
shell 会把
file.txt
作为一个普通字符串传给find
,效果一样
举例:文件名中有空格
find /home/user -name "my file.txt"
不加引号会被 shell 拆成两个参数:
my
和file.txt
,会报错
按类型查找
find /tmp -type d
查找 /tmp
下所有 目录
-type f
→ 查找文件-type d
→ 查找目录
按修改时间查找
find /var/log -mtime -7
查找 /var/log
下最近 7天内修改过的文件
按文件大小查找
find <路径> -size <大小>
<路径>
:要搜索的目录<大小>
:要匹配的文件大小
符号 | 单位说明 |
---|---|
c | 字节 (byte) |
k | 千字节 (KB) |
M | 兆字节 (MB) |
G | 吉字节 (GB) |
示例:
-size 10M
→ 文件大小正好为 10MB
符号 | 含义 |
---|---|
+ | 大于指定大小 |
- | 小于指定大小 |
不写 | 正好等于指定大小 |
示例
查找大于 10MB 的文件:
find /home/user -size +10M
查找小于 100KB 的文件:
find /home/user -size -100k
查找正好 512 字节的文件:
find /home/user -size 512c