1. 文件查看命令
ls - 列出目录内容
列出指定目录下的文件和子目录。
语法 :ls [选项] [文件或目录]
| 常用选项 | 说明 |
|---|---|
-l |
长格式显示,包含权限、链接数、所有者、大小、修改时间 |
-a |
显示所有文件,包括隐藏文件(以.开头) |
-h |
以人类可读方式显示文件大小(如K、M) |
-R |
递归显示子目录内容 |
-t |
按修改时间排序(最新的在前) |
-S |
按文件大小排序 |
示例:
ls -l # 显示当前目录详细信息
ls -la /home # 显示/home下所有文件(包括隐藏)的详细信息
ls -lh # 显示当前目录文件大小,以KB/MB/GB表示
ls -lt # 按修改时间排序显示
ls -R /etc # 递归显示/etc及其子目录所有文件
cat - 连接文件并输出
用于查看小文件内容、合并文件或创建文件。
语法 :cat [选项] 文件...
| 常用选项 | 说明 |
|---|---|
-n |
显示行号 |
-b |
显示行号,但空白行不编号 |
-s |
压缩连续的空行为一行 |
示例:
cat file.txt # 显示file.txt内容
cat -n file.txt # 显示带行号的内容
cat file1.txt file2.txt > merged.txt # 合并两个文件
cat > newfile.txt # 创建新文件,输入内容,Ctrl+D结束
less / more - 分页查看文件
less 比 more 更强大,支持前后翻页、搜索等。
示例:
less longfile.log # 分页查看日志,按空格向下翻页,b向上翻页,q退出
more shortfile.txt # 简单分页查看
在 less 中,可以按 / 搜索,按 n 跳转到下一个匹配。
head - 显示文件开头部分
默认显示前10行。
语法 :head [选项] 文件
| 常用选项 | 说明 |
|---|---|
-n 行数 |
指定显示行数 |
-c 字节数 |
指定显示字节数 |
示例:
head file.txt # 显示前10行
head -n 20 file.txt # 显示前20行
head -c 100 file.txt # 显示前100个字节
tail - 显示文件结尾部分
默认显示后10行,常用于查看日志更新。
语法 :tail [选项] 文件
| 常用选项 | 说明 |
|---|---|
-n 行数 |
指定显示行数 |
-f |
实时跟踪文件新增内容(常用于查看日志) |
-F |
类似 -f,但文件被轮转时仍可继续跟踪 |
示例:
tail file.txt # 显示最后10行
tail -n 30 file.txt # 显示最后30行
tail -f /var/log/syslog # 实时监控系统日志
file - 识别文件类型
根据文件内容判断其类型(文本、二进制、目录等),不依赖扩展名。
语法 :file [选项] 文件...
示例:
file /bin/ls # 输出:/bin/ls: ELF 64-bit LSB executable, x86-64...
file document.pdf # 输出:PDF document, version 1.4
file unknown.txt # 可能输出:ASCII text 或 UTF-8 Unicode text
stat - 显示文件状态信息
显示文件的详细信息,包括inode、权限、大小、访问/修改/改变时间等。
语法 :stat [选项] 文件...
示例:
stat file.txt
# 输出示例:
# File: file.txt
# Size: 1024 Blocks: 8 IO Block: 4096 regular file
# Device: 801h/2049d Inode: 3670025 Links: 1
# Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
# Access: 2025-03-15 10:30:25.123456789 +0800
# Modify: 2025-03-15 09:20:10.987654321 +0800
# Change: 2025-03-15 09:20:10.987654321 +0800
2. 文件创建与编辑
touch - 创建空文件或更新文件时间戳
如果文件不存在,则创建空文件;如果存在,则更新其访问和修改时间为当前时间。
语法 :touch [选项] 文件...
| 常用选项 | 说明 |
|---|---|
-t 时间戳 |
使用指定时间戳(格式 [[CC]YY]MMDDhhmm[.ss]) |
-r 参考文件 |
将文件时间戳设为与参考文件相同 |
示例:
touch newfile.txt # 创建空文件(若不存在)
touch -t 202503151030 file.txt # 设置文件时间为 2025-03-15 10:30
touch -r ref.txt file.txt # 将file.txt的时间改为与ref.txt相同
mkdir - 创建目录
创建新目录。
语法 :mkdir [选项] 目录名...
| 常用选项 | 说明 |
|---|---|
-p |
递归创建父目录(如果父目录不存在) |
-m 模式 |
设置权限模式(如755) |
示例:
mkdir mydir # 创建单个目录
mkdir -p dir1/dir2/dir3 # 递归创建多层目录
mkdir -m 755 newdir # 创建目录并设置权限为rwxr-xr-x
rmdir - 删除空目录
只能删除空目录,若目录非空则需使用 rm -r。
语法 :rmdir [选项] 目录...
| 常用选项 | 说明 |
|---|---|
-p |
递归删除父目录(如果父目录也空) |
示例:
rmdir emptydir # 删除空目录
rmdir -p a/b/c # 删除c,若c删除后b为空则继续删除b,以此类推
文本编辑器(如gedit、 nano、vi)
用于编辑文件内容。简单示例:
nano file.txt # 用nano编辑(界面友好)
vi file.txt # 用vi编辑(功能强大,需学习模式)
gedit 是 GNOME 桌面环境 的官方文本编辑器,也是许多 Linux 发行版(如 Ubuntu、Fedora 等)默认安装的轻量级图形化文本编辑工具。
bash
gedit # 打开空白窗口
gedit file.txt # 打开指定文件
gedit *.log # 打开当前目录所有 .log 文件
gedit 支持多种命令行参数,方便与终端结合:
| 选项 | 说明 |
|---|---|
--new-window |
在新窗口打开文件(而非新标签) |
--encoding=编码 |
指定文件编码打开,如 --encoding=UTF-8 |
--list-encodings |
列出所有可用的编码名称 |
--display=显示名 |
指定 X 显示(通常用于远程) |
--version |
显示版本信息 |
--help |
显示帮助信息 |
3. 文件操作
cp - 复制文件或目录
语法 :cp [选项] 源 目标
| 常用选项 | 说明 |
|---|---|
-r 或 -R |
递归复制目录 |
-i |
交互式,覆盖前提示 |
-u |
只在源文件比目标新或目标不存在时复制 |
-p |
保留文件属性(权限、时间戳等) |
-a |
归档模式,相当于 -dR --preserve=all,常用于备份 |
-v |
显示详细过程 |
示例:
cp file1.txt file2.txt # 复制文件
cp -i file.txt /backup/ # 复制到目录,若存在则提示
cp -r docs/ /backup/ # 递归复制目录
cp -a source/ dest/ # 完整复制目录,保留所有属性
mv - 移动或重命名文件/目录
语法 :mv [选项] 源 目标
| 常用选项 | 说明 |
|---|---|
-i |
交互式,覆盖前提示 |
-u |
只在源文件比目标新或目标不存在时移动 |
-v |
显示详细过程 |
-n |
不覆盖已有文件 |
示例:
mv oldname.txt newname.txt # 重命名文件
mv file.txt /tmp/ # 移动文件到/tmp目录
mv -i dir1/* dir2/ # 移动dir1下所有文件到dir2,若有重名则提示
mv -v *.log logs/ # 移动所有.log文件到logs/并显示过程
rm - 删除文件或目录
删除后通常无法恢复,请谨慎使用。
语法 :rm [选项] 文件...
| 常用选项 | 说明 |
|---|---|
-r 或 -R |
递归删除目录及其内容 |
-f |
强制删除,忽略不存在的文件,不提示 |
-i |
交互式,删除前确认 |
-v |
显示详细过程 |
示例:
rm file.txt # 删除文件
rm -r olddir/ # 删除目录及其所有内容
rm -f *.tmp # 强制删除所有.tmp文件,不提示
rm -iv important/ # 递归删除目录,每个文件都询问
4. 文件权限与所有权
chmod - 更改文件权限
可以使用符号模式或数字模式。
语法 :chmod [选项] 模式 文件...
数字模式:权限用三位八进制数表示,每位对应所有者、组、其他。
-
读(r)=4,写(w)=2,执行(x)=1。
-
例如 755 = 所有者(7=4+2+1) rwx,组(5=4+1) r-x,其他(5) r-x。
符号模式 :[ugoa][+-=][rwx]
-
u=所有者,g=组,o=其他,a=所有。
-
+添加权限,-移除权限,=设置精确权限。
| 常用选项 | 说明 |
|---|---|
-R |
递归更改目录及内部文件权限 |
-v |
显示详细过程 |
示例:
chmod 755 script.sh # 所有者rwx,组r-x,其他r-x
chmod +x file.sh # 给所有用户添加执行权限
chmod u-w file.txt # 移除所有者的写权限
chmod go=rx file # 设置组和其他为r-x
chmod -R 644 docs/ # 递归设置docs下所有文件为644
chown - 更改文件所有者和组
需要超级用户权限。
语法 :chown [选项] 用户[:组] 文件...
| 常用选项 | 说明 |
|---|---|
-R |
递归更改 |
-v |
显示详细过程 |
--reference=参考文件 |
将文件所有者/组设为与参考文件相同 |
示例:
chown alice file.txt # 将文件所有者改为alice(组不变)
chown alice:staff file.txt # 所有者和组同时改为alice:staff
chown :staff file.txt # 仅更改组为staff
chown -R alice:staff docs/ # 递归更改docs下所有文件
chgrp - 更改文件组所有权
chown 可以完成同样功能,但 chgrp 专门用于改组。
语法 :chgrp [选项] 组 文件...
示例:
chgrp staff file.txt # 将文件的组改为staff
chgrp -R staff docs/ # 递归更改组
umask - 设置默认权限掩码
umask 决定新建文件和目录的默认权限。它是权限的补码。
语法 :umask [掩码]
-
文件默认最大权限666,目录777。
-
实际权限 = 最大权限 & (~umask)。
-
例如 umask 022 则文件权限 666 & ~022 = 644,目录权限 777 & ~022 = 755。
示例:
umask # 显示当前掩码(如0022)
umask 027 # 设置掩码为027,新文件权限640,新目录750
5. 文件查找
find - 在目录树中查找文件
功能强大,可根据文件名、类型、大小、时间、权限等条件查找。
语法 :find [路径...] [表达式]
常用测试条件:
| 选项 | 说明 |
|---|---|
-name 模式 |
按文件名(可使用通配符) |
-iname 模式 |
忽略大小写的文件名 |
-type f/d/l |
文件类型(f普通文件,d目录,l链接) |
-size +10M |
大小大于10MB(可用c字节,k,M,G) |
-mtime +7 |
修改时间在7天前(+表示超过,-表示以内) |
-user 用户名 |
属于某用户 |
-perm 644 |
权限精确匹配 |
-exec 命令 {} \; |
对找到的文件执行命令,{} 代表文件名,以 \; 结束 |
示例:
find /home -name "*.txt" # 查找/home下所有.txt文件
find /var -type f -size +10M # 查找/var下大于10MB的普通文件
find . -mtime -1 # 查找当前目录下24小时内修改过的文件
find / -user alice -type d # 查找alice拥有的目录
find . -name "*.log" -exec rm {} \; # 删除所有.log文件
find . -perm 644 -exec ls -l {} \; # 列出权限为644的文件
locate - 快速查找文件
基于预先生成的数据库,速度极快,但可能不是最新。需定期更新数据库(updatedb)。
语法 :locate [选项] 模式
示例:
locate myfile.txt # 查找包含myfile.txt的文件路径
locate -i "*.conf" # 忽略大小写查找所有.conf文件
which - 查找命令的可执行文件路径
在 PATH 环境变量指定的目录中查找。
示例:
which ls # 输出:/bin/ls
which python3 # 输出:/usr/bin/python3
whereis - 查找命令的二进制、源代码和手册页
示例:
whereis ls # 输出:ls: /bin/ls /usr/share/man/man1/ls.1.gz
6. 链接文件
ln - 创建硬链接或符号链接
语法 :ln [选项] 目标 链接名
| 常用选项 | 说明 |
|---|---|
-s |
创建符号链接(软链接) |
-f |
强制创建,覆盖已存在的链接 |
-v |
显示详细过程 |
硬链接:多个文件名指向同一个inode,删除原文件不影响链接;不能跨文件系统,不能链接目录。
符号链接:类似于快捷方式,指向另一个文件的路径;可跨文件系统,可指向目录。
示例:
ln file.txt hardlink.txt # 创建硬链接
ln -s /usr/bin/python3 python # 创建符号链接python指向python3
ln -sf /new/path/file symlink # 强制更新符号链接
查看链接信息:ls -l 可看到符号链接指向的目标。
7. 文件内容处理
grep - 搜索文本
在文件中查找匹配模式的行。
语法 :grep [选项] 模式 [文件...]
| 常用选项 | 说明 |
|---|---|
-i |
忽略大小写 |
-r 或 -R |
递归搜索目录 |
-n |
显示匹配行的行号 |
-v |
反向匹配,显示不包含模式的行 |
-l |
只显示包含匹配模式的文件名 |
-c |
显示匹配的行数 |
-w |
精确匹配整个单词 |
-E |
使用扩展正则表达式(同 egrep) |
示例:
grep "error" logfile.txt # 在文件中查找error
grep -r "main" /src/ # 递归搜索/src下所有文件
grep -i "warning" *.log # 忽略大小写搜索
grep -v "^#" config.conf # 显示不以#开头的行(过滤注释)
ps aux | grep python # 结合管道,查找包含python的进程
sort - 排序文件内容
语法 :sort [选项] 文件...
| 常用选项 | 说明 |
|---|---|
-r |
逆序排序 |
-n |
按数值排序 |
-k 字段 |
按指定字段排序 |
-t 分隔符 |
指定字段分隔符 |
-u |
去重(仅保留唯一行) |
示例:
sort names.txt # 按字母排序
sort -n numbers.txt # 按数值排序
sort -t: -k3 /etc/passwd # 以:为分隔符,按第三个字段(UID)排序
sort -u file.txt # 排序并去重
uniq - 报告或忽略重复行
通常与 sort 结合使用,因为它只能处理连续重复的行。
语法 :uniq [选项] [输入文件 [输出文件]]
| 常用选项 | 说明 |
|---|---|
-c |
统计重复次数 |
-d |
只显示重复的行 |
-u |
只显示不重复的行 |
示例:
sort file.txt | uniq # 去重
sort file.txt | uniq -c # 统计每行出现次数
sort file.txt | uniq -d # 只显示重复行
wc - 统计行数、单词数、字符数
语法 :wc [选项] 文件...
| 常用选项 | 说明 |
|---|---|
-l |
统计行数 |
-w |
统计单词数 |
-c |
统计字节数 |
-m |
统计字符数 |
示例:
wc -l file.txt # 显示行数
wc -w file.txt # 显示单词数
wc -c file.txt # 显示字节数
wc file.txt # 显示三者(行、单词、字节)
cut - 提取文件中的列
语法 :cut [选项] 文件...
| 常用选项 | 说明 |
|---|---|
-f 字段 |
指定字段(列),从1开始 |
-d 分隔符 |
指定字段分隔符(默认制表符) |
-c 字符范围 |
按字符位置提取 |
示例:
cut -d: -f1,3 /etc/passwd # 以:分隔,提取第1和第3列(用户名和UID)
cut -c1-5 file.txt # 提取每行前5个字符
echo "a,b,c" | cut -d, -f2 # 输出:b
diff - 比较文件差异
语法 :diff [选项] 文件1 文件2
| 常用选项 | 说明 |
|---|---|
-u |
统一格式输出(更易读) |
-c |
上下文格式输出 |
-i |
忽略大小写 |
-r |
递归比较目录 |
-q |
只报告文件是否不同 |
示例:
diff file1.txt file2.txt # 显示差异
diff -u old.txt new.txt # 统一格式输出(常用于补丁)
diff -r dir1 dir2 # 比较两个目录
8. 文件压缩与归档
tar - 打包和解包文件
tar 本身不压缩,但可以结合压缩程序(如gzip、bzip2)生成压缩包。
语法 :tar [选项] [归档文件] [文件/目录...]
常用选项组合:
| 选项 | 说明 |
|---|---|
-c |
创建归档 |
-x |
解包 |
-t |
查看包内文件列表 |
-v |
详细显示处理文件 |
-f 文件 |
指定归档文件名 |
-z |
通过gzip压缩/解压(.tar.gz) |
-j |
通过bzip2压缩/解压(.tar.bz2) |
-J |
通过xz压缩/解压(.tar.xz) |
-C 目录 |
解包到指定目录 |
示例:
tar -cvf archive.tar dir1/ # 打包目录为tar
tar -czvf archive.tar.gz dir1/ # 打包并用gzip压缩
tar -xzvf archive.tar.gz # 解压.tar.gz
tar -xjvf archive.tar.bz2 -C /tmp # 解压.tar.bz2到/tmp
tar -tf archive.tar # 查看tar包内容
gzip / gunzip - 压缩/解压单个文件
gzip 将文件压缩为 .gz 格式,并删除原文件(除非使用 -c 保留)。
语法 :gzip [选项] 文件...
| 常用选项 | 说明 |
|---|---|
-d |
解压(同 gunzip) |
-c |
输出到标准输出,保留原文件 |
-r |
递归压缩目录下文件 |
-l |
列出压缩文件信息 |
-1 到 -9 |
压缩级别,1最快,9最佳压缩 |
示例:
gzip file.txt # 压缩为file.txt.gz,删除原文件
gunzip file.txt.gz # 解压恢复file.txt
gzip -c file.txt > file.txt.gz # 压缩但保留原文件
zcat file.txt.gz # 查看压缩文件内容(相当于gunzip -c)
zip / unzip - 处理zip格式
跨平台常用。
语法:
zip [选项] 压缩包名 文件...
unzip [选项] 压缩包名 [-d 目录]
示例:
zip archive.zip file1.txt file2.txt # 创建zip包
zip -r archive.zip dir/ # 递归压缩目录
unzip archive.zip # 解压到当前目录
unzip archive.zip -d /target/ # 解压到指定目录
unzip -l archive.zip # 列出zip包内容
9. 其他有用命令
du - 统计磁盘使用情况
估算文件或目录占用的磁盘空间。
语法 :du [选项] [文件/目录...]
| 常用选项 | 说明 |
|---|---|
-h |
人类可读格式 |
-s |
只显示总计(汇总) |
-a |
显示所有文件(不只是目录) |
-c |
最后加上总计 |
--max-depth=N |
限制递归深度 |
示例:
du -h # 显示当前目录下每个子目录大小
du -sh /home # 显示/home总大小
du -h --max-depth=1 /var # 显示/var下第一级目录大小
df - 报告文件系统磁盘空间使用情况
显示挂载分区的总容量、已用、可用等。
语法 :df [选项] [文件或挂载点...]
| 常用选项 | 说明 |
|---|---|
-h |
人类可读格式 |
-T |
显示文件系统类型 |
-i |
显示inode信息而非块使用 |
-a |
包含虚拟文件系统(如/proc) |
示例:
df -h # 显示所有分区使用情况
df -hT /home # 显示/home所在分区的详情,包括类型
ln(已介绍)
readlink - 显示符号链接指向的目标
示例:
readlink /usr/bin/python # 输出目标路径
basename / dirname - 路径操作
basename 从路径中提取文件名,dirname 提取目录部分。
示例:
basename /home/user/file.txt # 输出:file.txt
dirname /home/user/file.txt # 输出:/home/user