在 Linux 中有很多命令,这篇文章将介绍 Linux 文件相关的命令,如下图所示。
文件创建命令
touch
touch 命令用于创建新的文件,示例如下所示:
touch filename.txt # 创建空文件
touch file1 file2 file3 # 批量创建文件
touch "file with spaces.txt" # 创建包含空格的文件
效果如下图所示:
mkdir
mkdir 命令用于创建目录,示例如下所示:
mkdir dir1 # 创建单个目录
mkdir dir2 dir3 # 同时创建多个目录
mkdir -p nested/dir/structure # 递归创建多级目录
cp
cp 命令用于复制文件或目录。示例如下所示:
cp source.txt destination/ # 复制文件到目录
cp file.txt new_name.txt # 复制并重命名文件
cp -r src/ dest/ # 递归复制目录
cp -v source.txt destination/ # 显示复制过程,输出每个被复制文件的名称
cp -p important.conf /etc/backup/
# 目标文件将保持原文件的权限和修改时间
cp -a /var/log/ /backup/log_archive/ # 完整保留日志目录的结构和所有文件属性
文件删除命令
rmdir
rmdir 命令用于删除空目录(只能删除不含任何文件或子目录的目录)示例如下所示:
mkdir empty_dir
rmdir empty_dir # 删除空目录
mkdir -p a/b/c
rmdir -p a/b/c # 递归删除,最终a目录也被删除
rm
rm 作用是删除文件或目录(它的功能更强大,可删除非空目录)。rm 删除支持多个选项,常用选项有:
-r或-R:递归删除目录及其所有内容(危险!)-f:强制删除,不提示确认(结合-r可彻底删除目录树)-i:交互式删除,删除前询问确认
除此之外,rm 还支持删除的文件带上通配符。linux 支持的通配符如下所示:
*匹配任何字符串?匹配一个字符串[xyz]匹配xyz任意一个字符串[a-z]匹配一个范围[!xyz]或[^xyz]不匹配
示例如下所示:
rm file.txt # 删除单个文件
rm *.log # 删除所有.log文件
rm -r my_project/ # 递归删除项目目录
rm -rf temp/ # 强制递归删除(谨慎使用!)
使用 rm -i file* 删除之前touch创建的文件示例如下图所示:
文件修改命令
mv
mv 命令用于移动文件或目录,也可用于重命名操作。mv 支持多个选项,常见选项有:
-i交互式模式,覆盖已有文件前提示确认-f强制覆盖,不提示警告(谨慎使用)-v显示详细操作过程-n不覆盖已存在的文件
示例如下所示:
# 重命名文件
mv old_name.txt new_name.txt
# 重命名目录
mv mv_demo/dest mv_demo/new_dest
# 文件/目录移动
mv document.pdf /home/user/Documents/
# 批量移动
mv *.jpg images/
mv file1 file2 dir/
文件搜索命令
pwd 和 cd
pdw 命令的作用是显示当前工作目录的绝对路径;而 cd 命令的作用是切换当前工作目录。示例如下所示:
cd /usr/local/bin
pwd # 输出:/usr/local/bin
cd /path/to/directory # 绝对路径切换
cd ../ # 返回上级目录
cd ~ # 回到用户主目录
cd - # 返回上一个目录
ls
ls 会列出目录内容。ls 命令有很多选项,常见的选项有:
-a显示所有文件(包括隐藏文件)-l长格式显示(权限、所有者、大小等)文件的详细信息-lh长格式显示文件的详细信息,其中文件大小以k、M 等更容易理解的形式显示-t按修改时间排序-S根据文件大小排序
更多关于 ls 命令的可以看 Linux—目录文件属性和权限管理详解 和 Linux命令 ls - 显示目录内容列表
find
find 基于条件搜索文件或目录。find 支持多个选项,常用选项如下:
find /path -name "filename" # 按文件名查找
find . -type d # 查找目录
find . -type f -size +10M # 查找大于10MB的文件
find . -mtime -7 # 查找7天内修改的文件
find . -user username # 查找特定用户的文件
示例如下所示:
find . -name "*.txt" # 查找所有txt文件
find . -type d # 查找所有目录
find . -size +1k # 查找大于1KB的文件
find . -mtime -1 # 查找24小时内修改的文件
grep
grep 用于在文件中搜索匹配的文本。grep 支持多个选项,常用选项如下:
grep "pattern" file.txt # 基本搜索
grep -r "pattern" /path/ # 递归搜索目录
grep -i "pattern" file.txt # 忽略大小写
grep -n "pattern" file.txt # 显示行号
grep -v "pattern" file.txt # 反向匹配(不包含模式的行)
示例如下所示:
grep "error" logs/error.log # 在文件中搜索字符串
grep -r "system" . # 递归搜索当前目录
grep -i "failed" logs/* # 忽略大小写搜索
grep -n "running" logs/info.log # 显示行号
locate
locate 命令基于数据库快速查找文件。注意:locate 与 find 不同: find 是去硬盘找,locate 只在 /var/lib/slocate 资料库中找。
locate 的速度比 find 快,它并不是真的查找,而是查数据库,一般文件数据库在 /var/lib/slocate/slocate.db 中,所以 locate 的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护,也可以手工调用 updatedb 命令升级数据库。默认情况下 updatedb 每天执行一次。示例如下所示:
updatedb # 更新数据库(需root权限)
locate filename # 查找文件
locate -i *.jpg # 忽略大小写查找jpg文件
文件压缩命令
tar
tar 命令作用是创建或提取归档文件,常与压缩工具结合使用。示例如下所示:
tar -cvf archive.tar file*.txt # 创建tar包
tar -cvzf archive.tar.gz *.txt # 创建gzip压缩的tar包
tar -cvjf archive.tar.bz2 *.txt # 创建bzip2压缩的tar包
tar -tvf archive.tar # 查看tar包内容
tar -xvf archive.tar -C subdir/ # 解压到指定目录
zip 和 unzip
zip 命令作用是创建 ZIP 格式压缩包;而 unzip 命令的作用是解压 ZIP 文件。示例如下所示:
zip -r project.zip src/ docs/ # 压缩多个目录
zip -d project.zip "src/*.log" # 删除压缩包中的日志文件
unzip archive.zip # 解压到当前目录
unzip -d extracted/ archive.zip # 解压到extracted目录
文件权限命令
chmod
chmod (change mode) 是 Linux 系统中用于更改文件或目录权限的命令,它控制着文件所有者、所属组和其他用户对文件的访问权限。注意:只有文件所有者和超级用户可以修改文件或目录的权限。
比如,如果我们想要给文件添加执行权限,可以使用如下命令:
chmod u+x script.sh # 给所有者添加执行权限
其中 u 是用户类型,表示文件所有者;+ 表示添加权限,还有 - 表示减少权限,= 表示设置权限;x 是权限位符号,表示执行权限。
所有的用户类型有:
u:文件所有者(user)g:所属组(group)o:其他用户(others)a:所有用户(all)
所有的权限位有,这里也可以使用数字来表示,比如 7 表示 rwx,5表示-xr。
r:读权限(4)w:写权限(2)x:执行权限(1)
示例如下所示:
chmod o-r test_file.txt # 移除其他用户的读权限
chmod g-w,o-rwx file.txt # 移除组的写权限和其他用户的所有权限
chmod 644 config.ini # 设置为rw-r--r--(常用文件权限)
chmod 755 directory/ # 设置为rwxr-xr-x(常用目录权限)
chown
chown 命令作用是修改文件或目录的所有者和所属组。示例如下所示:
chown root:admin config.conf # 将文件所有者设为root,组设为admin
chown -R runoob:runoobgroup * # 将当前前目录下的所有文件与子目录的拥有者皆设为 runoob,群体的使用者 runoobgroup
chown user: file.txt # 仅变更所有者,保留原组
chown :group directory/ # 仅变更所属组
chgrp
chgrp 命令仅修改文件或目录的所属组。示例如下所示:
chgrp developers project/ # 将目录所属组设为developers
chgrp -R staff documents/ # 递归变更目录及所有文件的所属组
文件内容命令
stat
stat 命令作用是显示文件的详细属性。效果如下图所示:
cat
cat 命令用于显示文件内容,也可以用来合并文件。示例如下所示:
cat -n large_file.txt # 带行号显示大文件
cat file1.txt file2.txt > combined.txt # 合并多个文件
head/tail
head 命令用来显示文件的前N行(默认10行);tail 用于显示文件的后 N 行(默认10行)。示例如下所示:
head -n 5 /var/log/syslog # 查看系统日志前5行
head -c 100 data.csv # 显示CSV文件前100字节
tail -n 20 access.log # 查看访问日志最后20行
tail -f /var/log/messages # 实时监控系统消息
其他
which
which 命令用于查找并显示命令的可执行文件路径。示例如下所示:
which git # 输出:/usr/bin/git
which python # 输出:/usr/bin/python
df
df 命令显示文件系统的磁盘使用情况。示例如下所示:
df -h # 查看所有分区使用情况
df -h /dev/sda1 # 查看特定分区使用情况
du
du 命令用于统计文件或者目录的磁盘使用情况。示例如下所示:
du -sh ~/Documents # 显示Documents目录总大小
du -h --max-depth=1 /var # 显示/var下一级目录大小
wc
wc 命令用于统计文件中的行数、单词数和字节数。wc 有多个选项,常见的选项有:
-l:只统计行数-w:只统计单词数-c:只统计字节数
示例如下所示:
wc README.md # 输出:行数 单词数 字节数 README.md
wc subdir/file1.txt # 显示行数、单词数、字节数
wc -l subdir/*.txt # 只统计行数