1. Linux目录与文件操作基础概念
在Linux系统中,一切皆文件的设计哲学决定了目录和文件操作的重要性。与Windows系统不同,Linux采用树状目录结构,所有文件和设备都以文件形式存在于这个单一目录树中。理解这个基础概念是掌握Linux操作的前提。
Linux文件系统遵循FHS(Filesystem Hierarchy Standard)标准,这意味着无论哪个发行版,核心目录结构都保持高度一致。例如/bin存放基本命令,/etc存放配置文件,/home是用户主目录等。这种标准化设计让用户在不同发行版间切换时能快速适应。
提示:Linux中区分大小写,Document.txt和document.txt是两个不同的文件,这与Windows系统有本质区别。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心目录操作命令详解
2.1 目录导航与查看
pwd(Print Working Directory)是最基础也最常用的命令之一,它显示当前所在目录的完整路径。在复杂的目录结构中,这个命令能帮你快速定位自己的位置。
ls命令可能是使用频率最高的Linux命令。不带参数时,它显示当前目录下的非隐藏文件。但它的真正威力在于各种参数组合:
ls -l:以长格式显示,包含权限、所有者、大小等详细信息ls -a:显示所有文件,包括隐藏文件(以.开头的文件)ls -lh:人类可读的文件大小显示(如1K、234M等)ls -t:按修改时间排序ls -R:递归显示子目录内容
cd命令用于切换目录,有几个特殊用法值得记住:
cd ~或cd:返回当前用户主目录cd -:返回上一个工作目录cd ..:进入上级目录cd /:进入根目录
2.2 目录创建与删除
mkdir命令创建新目录,常用参数:
mkdir dir1:创建单个目录mkdir -p dir1/dir2/dir3:递归创建多级目录mkdir -m 755 dir1:创建目录时直接设置权限
rmdir删除空目录,而rm -r可以递归删除非空目录及其内容。使用时务必小心,Linux没有回收站机制,删除的文件很难恢复。
警告:
rm -rf /这样的命令会强制删除系统所有文件,绝对不要尝试!即使是rm -rf *在当前目录执行也可能造成灾难性后果。
3. 核心文件操作命令解析
3.1 文件查看与编辑
cat是最简单的文件查看命令,适合小文件:
cat file.txt:显示文件内容cat file1.txt file2.txt:合并显示多个文件cat > newfile.txt:从标准输入创建新文件(Ctrl+D结束)
less和more适合查看大文件,支持翻页和搜索:
less file.txt:可上下翻页,支持搜索(/关键词)more file.txt:只能向下翻页
head和tail查看文件开头或结尾:
head -n 20 file.txt:显示前20行tail -f logfile.log:实时追踪日志文件变化
3.2 文件复制、移动与删除
cp命令复制文件或目录:
cp file1.txt file2.txt:复制文件cp -r dir1 dir2:递归复制目录cp -i:覆盖前提示确认cp -u:只复制更新的文件
mv命令移动或重命名文件:
mv oldname.txt newname.txt:重命名mv file.txt /target/dir/:移动文件
rm删除文件:
rm file.txt:删除文件rm -i:删除前确认rm -f:强制删除,不提示
4. 文件权限与属性管理
4.1 权限基础
Linux文件权限分为读(r)、写(w)、执行(x)三种,分别对应所有者(user)、所属组(group)和其他人(other)。使用ls -l可以看到类似-rwxr-xr--的权限表示。
chmod修改文件权限:
chmod 755 file.sh:数字模式设置权限chmod u+x,g-w,o=r file.txt:符号模式修改权限
chown改变文件所有者:
chown user:group file.txt:修改所有者和组chown -R user:group dir/:递归修改
4.2 特殊权限与属性
除了基本rwx权限外,Linux还有特殊权限位:
- SUID(4):执行时以所有者身份运行
- SGID(2):执行时以所属组身份运行
- Sticky bit(1):目录下只有所有者能删除文件
设置方法:
chmod 4755 file:设置SUIDchmod 2755 dir:设置SGIDchmod 1777 /tmp:设置Sticky bit(/tmp目录的典型设置)
chattr和lsattr管理文件扩展属性:
chattr +i file.txt:设置不可修改(连root也不能修改)chattr +a file.log:只能追加内容,不能修改已有内容
5. 文件查找与内容搜索
5.1 文件查找命令
find是最强大的文件查找工具:
bash复制find /home -name "*.txt" # 按名称查找
find / -type f -size +10M # 查找大于10M的文件
find /var/log -mtime -7 # 查找7天内修改过的文件
find . -perm 644 # 查找权限为644的文件
find /tmp -empty -delete # 查找并删除空文件
locate基于数据库快速查找:
bash复制updatedb # 先更新数据库(需要root权限)
locate passwd # 快速查找包含passwd的文件路径
5.2 文件内容搜索
grep是文本搜索的瑞士军刀:
bash复制grep "error" logfile.log # 基本搜索
grep -i "warning" *.log # 忽略大小写
grep -r "function" /project/src/ # 递归搜索
grep -v "debug" output.txt # 反向搜索(不包含debug的行)
grep -A 3 -B 2 "exception" trace.log # 显示匹配行前后内容
ack和ag(The Silver Searcher)是更现代的替代品,速度更快:
bash复制ack "pattern" # 默认递归搜索
ag -i "keyword" # 忽略大小写快速搜索
6. 文件压缩与归档
6.1 常见压缩工具
gzip和gunzip:
bash复制gzip file.txt # 压缩为file.txt.gz
gunzip file.txt.gz # 解压
zcat file.txt.gz # 查看压缩文件内容
bzip2和bunzip2:
bash复制bzip2 file.txt # 压缩为file.txt.bz2(压缩率更高)
bzcat file.txt.bz2 # 查看压缩内容
xz提供更高的压缩率:
bash复制xz file.txt # 压缩为file.txt.xz
unxz file.txt.xz # 解压
xzcat file.txt.xz # 查看
6.2 归档命令tar
tar是最常用的归档工具,可以结合各种压缩算法:
bash复制tar -cvf archive.tar dir/ # 创建归档(不压缩)
tar -xvf archive.tar # 解压归档
tar -czvf archive.tar.gz dir/ # 使用gzip压缩
tar -xzvf archive.tar.gz # 解压gzip压缩的归档
tar -cjvf archive.tar.bz2 dir/ # 使用bzip2压缩
tar -xjvf archive.tar.bz2 # 解压bzip2压缩的归档
tar -cJvf archive.tar.xz dir/ # 使用xz压缩
tar -xJvf archive.tar.xz # 解压xz压缩的归档
7. 文件比较与校验
7.1 文件比较
diff比较文件差异:
bash复制diff file1.txt file2.txt # 基本比较
diff -u file1.txt file2.txt > patch.diff # 生成补丁文件
diff -r dir1/ dir2/ # 递归比较目录
vimdiff提供可视化比较:
bash复制vimdiff file1.txt file2.txt # 在vim中并排比较
cmp逐字节比较二进制文件:
bash复制cmp file1.bin file2.bin # 比较二进制文件
7.2 文件校验
md5sum、sha1sum等生成校验和:
bash复制md5sum file.iso # 计算MD5校验和
sha256sum file.iso # 计算SHA256校验和
cksum计算CRC校验:
bash复制cksum file.txt # 计算CRC校验和
8. 高级文件操作技巧
8.1 文件链接
Linux支持两种链接:
- 硬链接:
ln file.txt hardlink(共享inode,不能跨文件系统) - 软链接:
ln -s file.txt symlink(类似Windows快捷方式)
查看链接信息:
bash复制ls -l # 第二列显示硬链接数,软链接会有->指向源文件
stat file.txt # 查看inode等信息
8.2 文件描述符与重定向
Linux中每个进程都有三个标准文件描述符:
- 0:标准输入(stdin)
- 1:标准输出(stdout)
- 2:标准错误(stderr)
重定向操作:
bash复制command > output.txt # 标准输出重定向到文件(覆盖)
command >> output.txt # 追加到文件
command 2> error.log # 错误输出重定向
command &> all.log # 所有输出重定向
command < input.txt # 从文件读取输入
8.3 文件系统信息
查看磁盘使用情况:
bash复制df -h # 显示磁盘空间(人类可读格式)
du -sh dir/ # 显示目录大小
du -h --max-depth=1 / # 查看根目录下各目录大小
文件类型检测:
bash复制file unknownfile # 检测文件类型
9. 实战应用场景
9.1 日志文件分析
组合使用grep、awk、sort等工具分析日志:
bash复制grep "ERROR" app.log | awk '{print $4}' | sort | uniq -c | sort -nr
这条命令会统计不同错误类型的出现频率并按降序排列。
9.2 批量文件操作
使用find结合xargs进行批量操作:
bash复制find . -name "*.tmp" -print0 | xargs -0 rm # 安全删除所有.tmp文件
find /var/log -name "*.log" -size +1G -exec gzip {} \; # 压缩大于1G的日志
9.3 文件监控
inotifywait监控文件变化:
bash复制inotifywait -m -r -e modify,create,delete /path/to/watch
watch定期执行命令:
bash复制watch -n 1 'ls -l | grep important' # 每秒监控一次
10. 安全注意事项
-
谨慎使用通配符:
rm *可能删除比你预期更多的文件,特别是在根目录执行时。 -
备份重要文件:在执行大规模文件操作前,考虑先备份重要数据。
-
理解命令再执行:特别是涉及
rm -rf、dd、chmod -R等可能造成系统损坏的命令。 -
使用
-i交互模式:对于危险操作,添加-i参数让系统在执行前确认。 -
限制root使用:日常操作尽量使用普通用户,减少误操作风险。
-
检查命令拼写:特别是相似命令如
rm和rm -rf,一个字符差别可能导致完全不同结果。 -
使用
trash-cli替代rm:安装trash-cli后可以使用trash-put命令将文件移到"回收站"而不是直接删除。
