【Linux命令大全】001.文件管理(理论篇)
✨ 本文为Linux系统文件管理命令的全面汇总与深度优化,结合图标、结构化排版与实用技巧,专为高级用户和系统管理员打造。
(关注不迷路哈!!!)
文章目录
- 【Linux命令大全】001.文件管理(理论篇)
-
- [📄 cat 命令](#📄 cat 命令)
- [🔐 chattr 命令](#🔐 chattr 命令)
- [👥 chgrp 命令](#👥 chgrp 命令)
- [🔧 chmod 命令](#🔧 chmod 命令)
- [👤 chown 命令](#👤 chown 命令)
- [🔍 cksum 命令](#🔍 cksum 命令)
- [🔎 cmp 命令](#🔎 cmp 命令)
- [📂 cp 命令](#📂 cp 命令)
- [✂️ cut 命令](#✂️ cut 命令)
- [🔄 diff 命令](#🔄 diff 命令)
- [📊 diffstat 命令](#📊 diffstat 命令)
- [📄 file 命令](#📄 file 命令)
- [🔍 find 命令](#🔍 find 命令)
- [📦 git 命令](#📦 git 命令)
- [🖼️ gitview 命令](#🖼️ gitview 命令)
- [📐 indent 命令](#📐 indent 命令)
- [🔗 ln 命令](#🔗 ln 命令)
- [🔎 locate 命令](#🔎 locate 命令)
- [🔍 lsattr 命令](#🔍 lsattr 命令)
- [🛠️ mattrib 命令](#🛠️ mattrib 命令)
- [🖥️ mc 命令](#🖥️ mc 命令)
- [📥 mcopy 命令](#📥 mcopy 命令)
- [🗑️ mdel 命令](#🗑️ mdel 命令)
- [📁 mdir 命令](#📁 mdir 命令)
- [📁 mktemp 命令](#📁 mktemp 命令)
- [📁 mmove 命令](#📁 mmove 命令)
- [📁 mread 命令](#📁 mread 命令)
- [📝 mren 命令](#📝 mren 命令)
- [🔍 mshowfat 命令](#🔍 mshowfat 命令)
- [🛠️ mtools 命令](#🛠️ mtools 命令)
- [🧪 mtoolstest 命令](#🧪 mtoolstest 命令)
- [📁 mv 命令](#📁 mv 命令)
- [🔢 od 命令](#🔢 od 命令)
- [📊 paste 命令](#📊 paste 命令)
- [🛠️ patch 命令](#🛠️ patch 命令)
- [🌐 rcp 命令](#🌐 rcp 命令)
- [🔐 rhmask 命令](#🔐 rhmask 命令)
- [🗑️ rm 命令](#🗑️ rm 命令)
- [🔎 slocate 命令](#🔎 slocate 命令)
- [📁 split 命令](#📁 split 命令)
- [🔄 tee 命令](#🔄 tee 命令)
- [🧹 tmpwatch 命令](#🧹 tmpwatch 命令)
- [📄 touch 命令](#📄 touch 命令)
- [🔐 umask 命令](#🔐 umask 命令)
- [🔎 whereis 命令](#🔎 whereis 命令)
- [🔍 which 命令](#🔍 which 命令)
📄 cat 命令
功能与作用
将多个文件的内容连接并输出到标准输出或指定文件,常用于查看文件内容、合并日志等。
参数详解
| 参数 | 说明 |
|---|---|
-n |
对所有行编号(从1开始) |
-b |
类似 -n,但空白行不编号 |
-s |
将连续多个空白行替换为单行 |
-v |
显示非打印字符 |
-A |
等同于 -vET,显示所有控制字符 |
-E |
在每行末尾显示 $ |
-T |
将制表符显示为 ^I |
使用示例
bash
# 把textfile1的档案内容加上行号后输入textfile2这个档案里
cat -n textfile1 > textfile2
# 把textfile1和textfile2的档案内容加上行号(空白行不加)之后将内容附加到textfile3里
cat -b textfile1 textfile2 >> textfile3
# 查看文件内容并显示行号
cat -n config.txt
# 合并多个文件内容到一个新文件
cat file1.log file2.log file3.log > combined.log
# 查看文件内容(包括特殊字符)
cat -vET special_chars.txt
# 查看文件内容,并在每行末尾显示$符号
cat -E config.txt
# 显示制表符为^I
cat -T document.txt
# 显示所有控制字符(包括换行、制表符等)
cat -A script.sh
# 将多个文件内容合并并显示行号,同时保留原始文件
cat -n file1.txt file2.txt > merged_with_line_numbers.txt
# 使用管道将cat输出传递给其他命令
cat config.txt | grep "database" # 查找包含"database"的行
🔐 chattr 命令
功能与作用
设置文件的扩展属性(如不可修改、仅追加),增强文件安全性。
参数详解
| 参数 | 说明 |
|---|---|
-R |
递归处理目录 |
-v |
设置版本号 |
-V |
显示执行过程 |
+<属性> |
开启属性 |
-<属性> |
关闭属性 |
=<属性> |
设置为指定属性 |
支持的属性
| 属性 | 说明 |
|---|---|
a |
仅允许追加 |
i |
不可修改(immutable) |
s |
安全删除(覆盖写入) |
u |
可恢复删除(保留数据) |
d |
排除在备份之外 |
使用示例
bash
# 设置文件为不可修改(immutable)
sudo chattr +i important_config.conf
# 移除文件的不可修改属性
sudo chattr -i important_config.conf
# 设置目录下所有文件只能追加内容
sudo chattr -R +a /var/log/myapp/
# 设置文件在删除后可以恢复
sudo chattr +u important_document.txt
# 查看文件特殊属性
lsattr /etc/passwd
# 设置文件为只读且不可修改
sudo chattr +i +a secure_file.txt
# 检查是否成功设置了属性
lsattr secure_file.txt
# 临时禁用某个文件的不可修改属性进行编辑
sudo chattr -i secure_file.txt
vim secure_file.txt
sudo chattr +i secure_file.txt # 编辑完成后重新启用保护
👥 chgrp 命令
功能与作用
更改文件或目录的所属组,用于权限控制。
参数详解
| 参数 | 说明 |
|---|---|
-c |
仅当组变更成功时显示 |
-f |
不提示错误 |
-v |
显示详细信息 |
-R |
递归处理 |
-h |
仅修改符号链接本身 |
使用示例
bash
# 将文件所属组改为developers
sudo chgrp developers file.txt
# 递归修改目录及其内容所属组
sudo chgrp -R www-data /var/www/html
# 修改符号链接本身的组(而非目标文件)
chgrp -h symlink_file groupname
# 显示修改过程
chgrp -v users document.pdf
# 批量修改多个文件的组
chgrp -R developers *.txt *.log
# 验证组变更是否生效
ls -l file.txt
# 更改符号链接指向的文件的所有者而非链接本身
sudo chown -h newuser symlink
# 更改文件组为admin组
sudo chgrp admin myfile.txt
🔧 chmod 命令
功能与作用
修改文件或目录的读、写、执行权限。
权限表示法
- 符号法 :
u(所有者)、g(组)、o(其他)、a(全部) - 数字法 :
r=4,w=2,x=1
参数详解
| 参数 | 说明 |
|---|---|
-c |
仅显示变更 |
-f |
忽略错误 |
-v |
显示详细过程 |
-R |
递归处理 |
使用示例
bash
chmod u+x script.sh # 添加执行权限
chmod go-w data.txt # 移除组/其他写权限
chmod 644 readme.md # 所有者可读写,其他人只读
chmod -R 755 myapp/ # 递归设置目录权限
# 设置文件为所有人可读写
chmod a+rw shared_file.txt
# 移除所有人的执行权限
chmod a-x script.sh
# 仅允许所有者读写,组和其他人无权限
chmod 600 private_data.txt
# 递归设置目录权限,子目录755,文件644
find . -type d -exec chmod 755 {} \; && find . -type f -exec chmod 644 {} \;
# 查看文件当前权限
ls -l file.txt
👤 chown 命令
功能与作用
更改文件或目录的所有者和所属组。
参数详解
| 参数 | 说明 |
|---|---|
-c |
显示变更 |
-f |
忽略错误 |
-h |
仅修改符号链接 |
-R |
递归处理 |
-v |
显示详细信息 |
使用示例
bash
# 更改文件所有者
sudo chown root:admin config.ini
# 只更改文件所有者,保留原组
sudo chown newowner file.txt
# 递归更改目录及其内容的所有者和组
sudo chown -R www-data:www-data /var/www/myapp
# 更改符号链接指向的文件的所有者而非链接本身
sudo chown -h newuser symlink
# 更改文件组为admin组
sudo chgrp admin myfile.txt
# 批量更改多个文件的所有者
sudo chown -R user:group *.conf *.json
# 验证所有权变更
ls -l file.txt
# 更改文件所有者为root,组保持不变
sudo chown root file.txt
🔍 cksum 命令
功能与作用
计算文件的CRC校验和与字节数,用于验证文件完整性。
参数详解
| 参数 | 说明 |
|---|---|
| 无参数 | 输出校验和、字节数、行数 |
- |
从标准输入读取 |
使用示例
bash
# 查看文件的CRC校验和和大小
cksum data.bin
# 检查两个文件是否相同
cksum file1.txt file2.txt
# 通过管道检查数据
printf "hello" | cksum
# 比较两个文件的校验和是否一致
cksum file1.txt | awk '{print $1}' > checksum1.txt
cksum file2.txt | awk '{print $1}' > checksum2.txt
diff checksum1.txt checksum2.txt
# 生成文件校验和并保存到文件
cksum largefile.iso > checksum.txt
# 验证下载的文件是否完整
wget https://example.com/file.tar.gz
cksum file.tar.gz > downloaded_checksum.txt
# 与官方提供的校验和对比
diff downloaded_checksum.txt official_checksum.txt
🔎 cmp 命令
功能与作用
逐字节比较两个文件,输出第一个差异位置。
参数详解
| 参数 | 说明 |
|---|---|
-b |
显示不同字节(八进制) |
-l |
列出所有差异字节 |
-s |
静默模式(仅返回退出码) |
-i NUM |
忽略前NUM个字节 |
使用示例
bash
# 比较两文件,显示首个不同
cmp file1.txt file2.txt
# 列出所有不同字节及其内容
cmp -bl a.bin b.bin
# 静默比较,用于脚本判断
if cmp -s orig.cfg backup.cfg; then
echo "文件一致"
fi
# 忽略前100字节的比较
cmp -i 100 file1 file2
# 比较两个二进制文件的差异
cmp -l firmware_old.img firmware_new.img
# 在脚本中使用cmp进行文件一致性检查
check_files() {
local file1="$1"
local file2="$2"
if cmp -s "$file1" "$file2"; then
echo "✓ 文件一致"
else
echo "✗ 文件不一致"
cmp "$file1" "$file2"
fi
}
📂 cp 命令
功能与作用
复制文件或目录。
参数详解
| 参数 | 说明 |
|---|---|
-a |
保留所有属性(等价于 -dpR) |
-r / -R |
递归复制目录 |
-f |
强制覆盖 |
-i |
覆盖前询问 |
-n |
不覆盖已有文件 |
-p |
保留时间戳 |
-s |
创建符号链接 |
-v |
显示详细过程 |
使用示例
bash
# 复制文件
cp file1.txt file2.txt
# 递归复制目录
cp -r source_dir/ destination_dir/
# 复制时保留文件属性
cp -a config.ini /backup/
# 交互式复制(覆盖前询问)
cp -i file.txt dir/
# 不覆盖已存在的文件
cp -n file.txt dir/
# 复制时显示详细过程
cp -v file.txt dir/
# 创建符号链接而非复制文件
cp -s source_file link_name
# 复制多个文件到目录
cp file1.txt file2.txt file3.txt /backup/
# 递归复制并保留权限和时间戳
cp -a /etc/nginx /backup/nginx/
# 复制文件并重命名
cp config.txt config.bak
# 使用通配符复制多个文件
cp *.log /var/log/archive/
# 复制文件并设置特定权限
cp file.txt /tmp/ && chmod 600 /tmp/file.txt
✂️ cut 命令
功能与作用
从每行中提取指定字段或字符。
参数详解
| 参数 | 说明 |
|---|---|
-b |
按字节提取 |
-c |
按字符提取 |
-d DELIM |
自定义分隔符(默认为制表符) |
-f |
提取指定字段 |
--complement |
取反选择 |
--output-delimiter |
设置输出分隔符 |
使用示例
bash
# 提取每行的第3个字符
cut -c 3 filename
# 提取第1到第5个字符
cut -c 1-5 filename
# 提取第5个字符到结尾
cut -c 5- filename
# 以冒号作为分隔符,提取第1和第3字段
cut -d ':' -f 1,3 /etc/passwd
# 提取日志文件中以空格为分隔符的第4个字段
cut -d' ' -f4 access.log
# 提取逗号分隔文件中的第2和第4字段
cut -d',' -f2,4 data.csv
# 提取所有字段除了第2个
cut -d',' --complement -f2 data.csv
# 使用自定义分隔符提取字段
cut -d';' -f1,3 data.semicolon
# 提取字段并用逗号分隔输出
cut -d':' -f1,3 /etc/passwd --output-delimiter=','
# 提取文件名(假设路径用/分隔)
echo "/home/user/documents/file.txt" | cut -d'/' -f5
# 提取IP地址的最后一个段
echo "192.168.1.100" | cut -d'.' -f4
# 提取用户名(从/etc/passwd)
cut -d':' -f1 /etc/passwd
🔄 diff 命令
功能与作用
比较两个文件或目录的差异,输出补丁格式。
参数详解
| 参数 | 说明 |
|---|---|
-u |
统一格式输出(推荐) |
-r |
递归比较目录 |
-N |
缺失文件视为空 |
-i |
忽略大小写 |
-w |
忽略空白 |
-q |
仅报告是否不同 |
-y |
并排显示 |
使用示例
bash
# 比较两文件,显示统一格式差异
diff -u file1.txt file2.txt
# 递归比较目录
diff -rq dir1/ dir2/
# 忽略大小写比较
diff -i file1.txt file2.txt
# 比较并显示简洁差异
diff -q file1.txt file2.txt
# 并排显示差异
diff -y file1.txt file2.txt
# 忽略空白差异
diff -w file1.txt file2.txt
# 生成补丁文件
diff -u old_version.txt new_version.txt > patch.diff
# 应用补丁
patch < patch.diff
# 比较两个目录的差异
diff -r /old_project/ /new_project/
# 比较文件时忽略行尾空格
diff -B file1.txt file2.txt
# 比较文件时忽略空白行
diff -B file1.txt file2.txt
# 比较文件时忽略大小写和空白
diff -iw file1.txt file2.txt
📊 diffstat 命令
功能与作用
统计 diff 输出的变更情况,以柱状图展示。
参数详解
| 参数 | 说明 |
|---|---|
-p N |
剥离路径前N层 |
-w N |
设置宽度 |
-l |
仅显示文件名 |
-n N |
显示前N个结果 |
使用示例
bash
# 统计补丁影响
diff -u old/ new/ | diffstat
# 剥离一级路径并设置宽度
diff -ruN src-old src-new | diffstat -p1 -w 80
# 仅显示文件名
diff -u file1 file2 | diffstat -l
# 显示前10个变更最多的文件
diff -u old/ new/ | diffstat -n 10
# 显示变更统计并限制宽度
diff -u src/ dst/ | diffstat -w 100
# 生成详细的变更统计报告
diff -u before/ after/ | diffstat -p2 -w 120 > change_report.txt
# 统计代码提交的变更情况
git diff HEAD~1 HEAD | diffstat -p1 -w 100
📄 file 命令
功能与作用
识别文件类型(文本、二进制、压缩包、图片等)。
参数详解
| 参数 | 说明 |
|---|---|
-b |
仅输出类型 |
-L |
跟随符号链接 |
-z |
尝试解压查看 |
--mime |
显示MIME类型 |
--mime-type |
仅显示MIME类型 |
使用示例
bash
# 输出文件类型
file /bin/bash
# 查看图片类型
file photo.jpg
# 查看文本文件类型
file config.ini
# 查看压缩包类型
file archive.tar.gz
# 显示MIME类型
file --mime-type document.pdf
# 查看文件类型并显示MIME
file --mime /path/to/file
# 查看压缩文件内部内容
file -z compressed.tar.gz
# 查看符号链接的目标文件类型
file -L symlink_to_binary
# 批量检查多个文件类型
for file in *.txt *.jpg *.zip; do
echo "=== $file ==="
file "$file"
done
# 检查文件是否为可执行程序
file script.sh | grep "executable"
# 检查文件是否为PDF
file document.pdf | grep "PDF"
🔍 find 命令
功能与作用
在目录树中查找文件,支持多种条件过滤。
参数详解
| 参数 | 说明 |
|---|---|
-name |
按名称查找 |
-iname |
不区分大小写 |
-type f/d/l |
按类型查找 |
-size +N |
大于N单位 |
-mtime +N |
超过N天未修改 |
-user |
按所有者查找 |
-group |
按组查找 |
-perm |
按权限查找 |
-exec CMD {} \; |
执行命令 |
-ok CMD {} \; |
交互式执行 |
使用示例
bash
# 查找所有名为config.ini的文件
find . -name "*.txt"
# 查找/var/log目录中大于10MB的文件
find /var/log -size +10M
# 查找/home目录中30天内未被修改的文件
find /home -mtime +30
# 查找/etc目录中属于root用户的文件
find /etc -user root
# 查找/tmp目录中属于nobody组的文件
find /tmp -group nobody
# 查找/opt目录下所有权限为777的文件
find /opt -perm 777
# 查找当前目录中3天内被修改过的所有文件
find . -mtime -3
# 查找并删除30天前的日志文件
find /var/log -name "*.log" -mtime +30 -delete
# 查找并压缩30天未修改的配置文件
find /etc -name "*.conf" -mtime +30 -exec gzip {} \;
# 查找并显示文件详细信息
find . -type f -exec ls -l {} \;
# 查找所有php和html文件
find . \( -name "*.php" -o -name "*.html" \)
# 查找名称匹配正则表达式的文件
find . -regex ".*\.\(py\|sh\)$"
# 查找但不进入挂载点以外的其他文件系统
find . -mount -name "*.txt"
# 查找深度不超过3层的目录
find . -maxdepth 3 -type d
# 查找并统计文件数量
find . -type f | wc -l
# 查找所有隐藏文件
find . -name ".*"
# 查找所有符号链接
find . -type l
# 查找所有空文件
find . -type f -empty
# 查找所有大文件(>100MB)
find /var/log -type f -size +100M
# 查找所有可执行文件
find . -type f -executable
# 查找所有权限为644的文件
find . -type f -perm 644
# 查找并移动文件
find . -name "*.tmp" -exec mv {} /tmp/old/ \;
# 查找并删除文件(交互式)
find . -name "*.bak" -ok rm {} \;
📦 git 命令
功能与作用
分布式版本控制系统,用于代码管理。
常用子命令
| 子命令 | 说明 |
|---|---|
clone |
克隆仓库 |
init |
初始化仓库 |
add |
添加文件到暂存区 |
commit |
提交更改 |
status |
查看状态 |
diff |
查看差异 |
log |
查看提交历史 |
branch |
管理分支 |
checkout |
切换分支 |
pull |
拉取远程更新 |
push |
推送本地更改 |
merge |
合并分支 |
使用示例
bash
# 克隆远程仓库
git clone https://github.com/user/repo.git
# 初始化新仓库
git init
# 查看仓库状态
git status
# 添加所有文件到暂存区
git add .
# 提交更改
git commit -m "提交说明"
# 查看提交历史
git log --oneline --graph
# 创建并切换到新分支
git checkout -b feature-branch
# 推送到远程仓库
git push origin main
# 拉取远程更新
git pull origin main
# 查看文件差异
git diff
# 查看提交详情
git show HEAD
# 查看分支列表
git branch -a
# 切换到特定分支
git checkout develop
# 合并分支
git merge feature-branch
# 删除分支
git branch -d feature-branch
# 查看远程仓库信息
git remote -v
# 添加远程仓库
git remote add origin https://github.com/user/repo.git
# 查看提交历史的图形化视图
git log --graph --oneline --all
# 查看文件的修改历史
git log --follow file.txt
# 查看某个文件的差异
git diff HEAD~1 HEAD file.txt
# 查看某个文件的完整历史
git log --follow --oneline file.txt
# 查看某个文件的修改记录
git blame file.txt
# 查看某个文件的修改次数
git log --oneline --follow file.txt | wc -l
🖼️ gitview 命令
功能与作用
图形化查看Git仓库历史与分支。
使用示例
bash
gitview . # 打开当前仓库
gitview /path/to/repo # 打开指定仓库
💡 替代工具:
gitk,lazygit,tig
📐 indent 命令
功能与作用
格式化C/C++源代码,统一缩进风格。
参数详解
| 参数 | 说明 |
|---|---|
-kr |
K&R风格 |
-bsd |
BSD风格 |
-gnu |
GNU风格 |
-i N |
缩进N个空格 |
-ts N |
制表符宽度 |
-nut |
不使用Tab |
使用示例
bash
indent -kr -i4 -nut hello.c # K&R风格,4空格缩进
indent -gnu -l120 *.cpp # GNU风格,行宽120
# 格式化所有C文件
find . -name "*.c" -exec indent -kr -i4 {} \;
# 格式化所有C++文件
find . -name "*.cpp" -exec indent -gnu -l120 {} \;
# 格式化文件并保留原文件
indent -kr -i4 -o formatted_hello.c hello.c
# 格式化文件并显示进度
indent -kr -i4 -v hello.c
# 格式化文件并使用制表符
indent -kr -i8 -ts8 hello.c
# 格式化文件并设置行宽
indent -kr -i4 -l80 hello.c
🔗 ln 命令
功能与作用
创建硬链接或符号链接。
参数详解
| 参数 | 说明 |
|---|---|
-s |
创建软链接 |
-f |
强制覆盖 |
-i |
交互确认 |
-v |
显示过程 |
使用示例
bash
ln -s /opt/app/bin/cli /usr/local/bin/cli # 创建软链接
ln data.orig data.hard # 创建硬链接
ln -sf new.cfg config.ini # 强制更新软链接
# 创建软链接并验证
ln -s /etc/passwd ~/passwd_link
ls -l ~/passwd_link
# 创建硬链接并验证
ln file.txt file_hardlink
ls -i file.txt file_hardlink # 查看inode是否相同
# 创建软链接到目录
ln -s /var/log /home/user/logs
# 创建软链接并强制覆盖
ln -sf /new/location/config.conf /etc/config.conf
# 创建软链接并交互确认
ln -si /source/file /destination/link
# 查看链接目标
readlink /path/to/symlink
# 查看链接类型
ls -l /path/to/symlink
🔎 locate 命令
功能与作用
通过预先构建的数据库快速查找文件,速度比 find 快得多,但由于依赖数据库,可能无法找到最新创建的文件。
参数详解
| 参数 | 说明 |
|---|---|
-i |
忽略大小写 |
-n N |
显示前N条 |
-r |
正则表达式 |
-0 |
null分隔输出 |
-c |
仅显示数量 |
使用示例
bash
# 查找所有包含"passwd"的文件路径
locate passwd
# 忽略大小写查找所有.jpg文件
locate -i "*.jpg"
# 使用正则表达式查找/etc目录下的配置文件
locate -r "^/etc/.*\.conf$"
# 限制只显示前5个结果
locate -n 5 "httpd"
# 显示匹配项的数量而不是具体路径
locate -c "*.log"
# 使用null字符分隔输出(适用于包含空格的文件名)
locate -0 "*.txt" | xargs -0 ls -l
# 结合其他命令使用
locate "*.conf" | grep nginx
# 查找特定目录下的文件
locate /var/log/ | grep error
# 更新数据库后查找
sudo updatedb && locate newfile.txt
# 查找多个关键词
locate "config" | grep -E "(apache|nginx)"
# 查找并统计数量
locate "*.pdf" | wc -l
⚠️
locate命令依赖于updatedb命令维护的数据库,默认每天自动更新一次。如果需要查找刚创建的文件,应先运行sudo updatedb更新数据库。
🔍 lsattr 命令
功能与作用
查看文件的扩展属性(由 chattr 设置),用于显示文件的特殊保护标志。
参数详解
| 参数 | 说明 |
|---|---|
-a |
显示隐藏文件属性 |
-d |
仅显示目录自身属性 |
-R |
递归显示 |
-v |
显示版本 |
使用示例
bash
# 查看文件的扩展属性
lsattr /etc/passwd
# 显示家目录下所有文件的属性(包括隐藏文件)
lsattr -a ~
# 仅显示目录本身的属性,而不显示其内容的属性
lsattr -d /home/user
# 递归显示目录及其子目录下所有文件的属性
lsattr -R /var/log
# 显示文件的版本信息
lsattr -v /etc/hosts
# 查看多个文件的属性
lsattr file1.txt file2.txt
# 查看系统关键文件的属性
lsattr /etc/shadow /etc/group
# 结合grep筛选特定属性的文件
lsattr -aR /home 2>/dev/null | grep "\----i"
# 查看当前目录下所有文件的属性
lsattr *
# 查看符号链接文件的属性
lsattr -d symlink_file
🛠️ mattrib 命令
功能与作用
在MS-DOS文件系统(如FAT、VFAT)上设置或清除文件属性,如只读、隐藏、系统和归档属性。
参数详解
| 参数 | 说明 |
|---|---|
+r |
设置只读 |
+h |
设置隐藏 |
+s |
设置系统 |
+a |
设置归档 |
-r/-h/-s/-a |
清除对应属性 |
使用示例
bash
# 设置文件为只读属性
mattrib +r a:test.txt
# 设置文件为隐藏属性
mattrib +h a:hidden.dat
# 同时设置多个属性
mattrib +r +h a:protected.doc
# 清除文件的只读属性
mattrib -r a:writable.txt
# 查看文件当前属性
mattrib a:test.txt
# 设置文件为系统文件
mattrib +s a:system.sys
# 设置文件为归档属性
mattrib +a a:archive.zip
# 清除所有特殊属性
mattrib -r -h -s -a a:normal.file
# 批量设置多个文件属性
mattrib +r a:*.exe
# 查看磁盘根目录下所有文件的属性
mattrib a:*
⚠️ 此命令仅适用于MS-DOS兼容文件系统(如FAT16、FAT32、VFAT)。
🖥️ mc 命令
功能与作用
Midnight Commander,一个可视化的终端文件管理器,提供双面板界面,支持鼠标操作和内置编辑器/查看器。
参数详解
| 参数 | 说明 |
|---|---|
-c |
彩色模式 |
-d |
不使用鼠标 |
-v |
使用内部编辑器查看文件 |
-P |
退出时显示工作目录 |
-x |
使用xterm模式 |
使用示例
bash
# 启动Midnight Commander
mc
# 以彩色模式启动
mc -c
# 使用内部查看器打开指定文件
mc -v /etc/passwd
# 不使用鼠标支持启动
mc -d
# 退出时显示当前工作目录
mc -P
# 在xterm兼容模式下运行
mc -x
# 启动并打开两个指定目录
mc /home/user /var/log
# 以超级用户权限启动
sudo mc
# 启动并打开当前目录和上级目录
mc . ..
# 使用FISH协议连接远程服务器
mc sh://user@server/path/
# 启动并在左右面板分别打开不同目录
mc ~/Documents /tmp
💡 快捷键:
F1帮助,F2用户菜单,F3查看文件,F4编辑文件,F5复制,F6移动,F7创建目录,F8/Delete删除,F9主菜单,F10退出,Tab切换面板
📥 mcopy 命令
功能与作用
在MS-DOS文件系统和Unix/Linux文件系统之间复制文件。
使用示例
bash
# 从软盘复制文件到当前目录
mcopy a:document.txt .
# 将本地文件复制到软盘
mcopy report.doc a:
# 复制多个文件到软盘
mcopy file1.txt file2.txt a:
# 从软盘复制整个目录
mcopy -s a:project/* project/
# 递归复制目录内容
mcopy -s source/ a:backup
# 交互式复制(覆盖前询问)
mcopy -i a:data.zip .
# 复制并保持时间戳
mcopy -p a:important.dat .
# 复制时显示详细过程
mcopy -v a:manual.pdf docs/
# 强制覆盖已存在文件
mcopy -o config.sys a:
# 复制软盘上所有文件到当前目录
mcopy a:* .
🗑️ mdel 命令
功能与作用
删除MS-DOS文件系统上的文件。
使用示例
bash
# 删除软盘上的单个文件
mdel a:temp.txt
# 删除多个文件
mdel a:file1.tmp a:file2.tmp
# 使用通配符删除文件
mdel a:*.bak
# 交互式删除(删除前确认)
mdel -i a:important.dat
# 删除目录中的所有文件
mdel a:temp/*
# 强制删除只读文件
mdel -f a:readonly.txt
# 显示删除过程
mdel -v a:oldfiles/*
# 删除具有特定扩展名的文件
mdel a:*.log
# 删除隐藏文件
mdel a:hidden.*
📁 mdir 命令
功能与作用
显示MS-DOS文件系统中的目录内容。
使用示例
bash
# 显示软盘根目录内容
mdir a:
# 显示指定目录内容
mdir a:documents
# 宽屏显示(每行显示多个文件)
mdir -w a:
# 显示详细信息(类似ls -l)
mdir -l a:
# 同时显示多个目录
mdir a:docs a:images
# 显示所有文件(包括隐藏文件)
mdir -a a:
# 递归显示子目录内容
mdir -s a:project
# 显示文件大小和日期
mdir -l a:*.txt
# 以紧凑格式显示
mdir -c a:
# 显示目录并按扩展名分类
mdir -x a:
📁 mktemp 命令
功能与作用
安全地创建临时文件或目录,避免命名冲突和安全问题。
参数详解
| 参数 | 说明 |
|---|---|
-t |
使用模板生成名称 |
-d |
创建临时目录 |
-p DIR |
指定目录 |
--suffix=SUFFIX |
添加后缀 |
使用示例
bash
# 创建临时文件
tmpfile=$(mktemp)
# 创建临时目录
tmpdir=$(mktemp -d)
# 在指定目录创建临时文件
tmpfile=$(mktemp -p /tmp)
# 使用模板创建临时文件
tmpfile=$(mktemp testXXXXXX)
# 创建带特定后缀的临时文件
tmpfile=$(mktemp --suffix=.sh)
# 在/tmp目录下创建临时文件
tmpfile=$(mktemp /tmp/script.XXXXXX)
# 创建多个临时文件
tmp1=$(mktemp)
tmp2=$(mktemp)
# 创建临时文件并设置权限
tmpfile=$(mktemp)
chmod 600 "$tmpfile"
# 创建临时目录用于存放中间文件
workdir=$(mktemp -d)
# 使用完毕后清理
rm -rf "$workdir"
💡 建议使用完临时文件后及时删除,避免占用磁盘空间。
好的,以下是 mmove 命令及后续命令的详细说明和示例:
📁 mmove 命令
功能与作用
在MS-DOS与Unix之间移动文件。
参数详解
| 参数 | 说明 |
|---|---|
-o |
强制覆盖目标 |
使用示例
bash
# 将软盘上的文件移动到当前目录
mmove a:\readme.txt .
# 将本地文件移动到软盘
mmove source.file a:\dest.file
# 强制覆盖目标文件
mmove -o source.file dest.file
# 移动多个文件到软盘
mmove file1.txt file2.txt a:\
# 从软盘移动目录内容到本地
mmove -s a:\project\* ./project/
# 显示移动过程
mmove -v a:\document.doc ./
# 移动并重命名文件
mmove a:\original.txt renamed.txt
# 交互式移动(覆盖前确认)
mmove -i a:\important.dat ./
# 移动具有特定扩展名的文件
mmove a:\*.log /tmp/logs/
# 移动隐藏文件
mmove a:\hidden.* ./
📁 mread 命令
功能与作用
从MS-DOS文件系统读取文件到Unix。
使用示例
bash
# 读取软盘上的批处理文件并转换行尾
mread a:\autoexec.bat autoexec.txt
# 读取多个文件到当前目录
mread a:\file1.txt a:\file2.txt ./
# 读取目录下所有文件
mread a:\docs\* ./docs/
# 递归读取目录内容
mread -s a:\project\* ./project/
# 读取并保持原始时间戳
mread -p a:\data.dat data_copy.dat
# 显示读取过程
mread -v a:\report.doc ./
# 交互式读取(覆盖前确认)
mread -i a:\config.sys ./
# 读取具有特定扩展名的文件
mread a:\*.ini /etc/configs/
# 读取隐藏文件
mread a:\.config ./
📝 mren 命令
功能与作用
在MS-DOS文件系统上重命名文件。
使用示例
bash
# 重命名单个文件
mren a:\oldname.txt a:\newname.txt
# 批量重命名文件(需要多次调用)
mren a:\file1.tmp a:\file1.bak
mren a:\file2.tmp a:\file2.bak
# 重命名目录
mren a:\old_directory a:\new_directory
# 重命名具有特定扩展名的文件
mren a:\*.tmp a:\*.backup
# 使用通配符重命名部分文件
mren a:\document_*.txt a:\doc_*.txt
# 重命名隐藏文件
mren a:\.oldconfig a:\.newconfig
# 显示重命名过程
mren -v a:\tempfile a:\finalfile
# 交互式重命名(确认操作)
mren -i a:\important.a:\important.bak
# 重命名系统文件
mren a:\system.sys a:\system_backup.sys
🔍 mshowfat 命令
功能与作用
显示FAT文件系统的簇链,分析存储结构。
使用示例
bash
# 显示文件的簇链分布
mshowfat a:\data\image.jpg
# 显示多个文件的簇链
mshowfat a:\file1.txt a:\file2.txt
# 显示目录的簇链
mshowfat a:\documents
# 显示系统文件的簇链
mshowfat a:\io.sys
# 显示隐藏文件的簇链
mshowfat a:\.config
# 显示具有长文件名的文件簇链
mshowfat a:\very_long_filename.txt
# 显示根目录的簇链
mshowfat a:\
# 显示损坏文件的簇链(用于诊断)
mshowfat a:\corrupted.file
# 显示大文件的簇链分布
mshowfat a:\large_archive.zip
# 显示可执行文件的簇链
mshowfat a:\program.exe
🛠️ mtools 命令
功能与作用
MS-DOS文件系统工具集入口。
使用示例
bash
# 列出所有可用的mtools命令
mtools -l
# 显示mtools版本信息
mtools -V
# 显示mtools配置信息
mtools -c
# 设置mtools行为选项
mtools -D o # 设置默认驱动器为o
# 显示帮助信息
mtools -h
# 使用特定配置文件
mtools -C ~/.mtoolsrc
# 启用调试模式
mtools -d
# 设置默认设备
mtools -D a: -i /dev/fd0
# 显示当前环境变量设置
mtools -e
# 测试mtools配置是否正确
mtools -t
🧪 mtoolstest 命令
功能与作用
测试mtools配置是否正确。
使用示例
bash
# 显示当前mtools配置
mtoolstest
# 验证配置文件语法
mtoolstest
# 检查默认驱动器设置
mtoolstest
# 显示所有已定义的驱动器
mtoolstest
# 验证特定驱动器配置
mtoolstest
# 检查文件系统访问权限
mtoolstest
# 显示mtools编译时的选项
mtoolstest
# 测试与软盘驱动器的通信
mtoolstest
# 验证长文件名支持
mtoolstest
# 检查字符集转换设置
mtoolstest
📁 mv 命令
功能与作用
移动或重命名文件/目录。
参数详解
| 参数 | 说明 |
|---|---|
-b |
覆盖前备份 |
-f |
强制覆盖 |
-i |
交互确认 |
-u |
仅当源更新时移动 |
-v |
显示过程 |
-n |
不覆盖已存在文件 |
使用示例
bash
# 重命名文件
mv oldname.txt newname.txt
# 重命名目录
mv old_directory/ new_directory/
# 移动文件到另一个目录
mv file.txt /path/to/dir/
# 移动多个文件到目录
mv file1.txt file2.txt file3.txt /path/to/dir/
# 移动目录及其内容
mv source_dir/ destination_dir/
# 交互式移动(覆盖前询问)
mv -i file.txt dir/
# 强制覆盖目标文件
mv -f file.txt dir/
# 仅当源文件比目标文件新时才移动
mv -u newer_file.txt older_file.txt
# 移动时显示详细过程
mv -v file.txt dir/
# 移动时不覆盖已存在的文件
mv -n file.txt dir/
# 移动并备份已存在的目标文件
mv -b file.txt existing_file.txt
# 移动文件到上级目录
mv file.txt ../
# 移动文件到用户主目录
mv file.txt ~/
# 使用通配符移动多个文件
mv *.log /var/log/archive/
# 移动隐藏文件
mv .hidden_file.txt visible_file.txt
# 移动并重命名文件
mv /path/to/source.txt /new/path/destination.txt
# 移动目录到另一个目录中
mv project/ backup/projects/project_$(date +%Y%m%d)/
🔢 od 命令
功能与作用
以十六进制、八进制、ASCII等格式转储文件内容。
参数详解
| 参数 | 说明 |
|---|---|
-x |
十六进制双字节 |
-c |
ASCII字符 |
-b |
八进制单字节 |
-d |
十进制双字节 |
-A |
地址基数(o/d/x) |
-w N |
每行显示N字节 |
-v |
显示重复行 |
使用示例
bash
# 以十六进制格式查看二进制文件
od -x config.bin
# 以ASCII字符查看脚本文件
od -c script.sh
# 以八进制单字节查看文件
od -b datafile
# 以十进制双字节查看文件
od -d numbers.dat
# 指定每行显示16字节
od -x -w16 largefile.bin
# 以不同地址基数显示
od -A d -x file.txt # 十进制地址
od -A o -x file.txt # 八进制地址
od -A x -x file.txt # 十六进制地址
# 显示所有行,包括重复行
od -v -x file.txt
# 组合使用多种格式
od -x -c file.txt
# 只显示部分内容(跳过前100字节,显示接下来的50字节)
od -x -N 50 -j 100 file.txt
# 以短整型格式查看
od -t d2 file.txt
# 以浮点数格式查看
od -t f4 file.txt
# 查看文件头信息(前32字节)
od -x -N 32 header.bin
📊 paste 命令
功能与作用
将多个文件按列合并输出。
参数详解
| 参数 | 说明 |
|---|---|
-d DELIM |
指定分隔符 |
-s |
串行模式(每个文件一行) |
-z |
使用null分隔 |
使用示例
bash
# 按列合并两个文件
paste col1.txt col2.txt
# 使用逗号作为分隔符
paste -d',' col1.txt col2.txt
# 使用多个分隔符循环
paste -d',:' col1.txt col2.txt col3.txt
# 串行模式:每个文件占一行
paste -s file1.txt file2.txt
# 使用制表符作为分隔符(默认)
paste names.txt scores.txt
# 合并三个文件
paste file1.txt file2.txt file3.txt
# 使用空格作为分隔符
paste -d' ' file1.txt file2.txt
# 处理标准输入
cat list1.txt | paste - list2.txt
# 创建表格形式输出
paste -d'\t' headers.txt data1.txt data2.txt
# 使用换行符作为分隔符
paste -d$'\n' file1.txt file2.txt
# 合并文件并重定向到新文件
paste name.txt age.txt > people.txt
# 处理空文件
touch empty.txt
paste file1.txt empty.txt file2.txt
🛠️ patch 命令
功能与作用
应用补丁文件,实现自动化更新。
参数详解
| 参数 | 说明 |
|---|---|
-pN |
剥离路径前N层 |
-i FILE |
从文件读取补丁 |
-R |
反向打补丁 |
--dry-run |
模拟执行 |
-f |
强制应用 |
-E |
删除空文件 |
-b |
备份原文件 |
使用示例
bash
# 应用补丁(剥离一层路径)
patch -p1 < fix.patch
# 指定补丁文件
patch -i fix.patch source.c
# 反向打补丁(撤销补丁)
patch -R -p1 < fix.patch
# 模拟执行,不实际修改文件
patch --dry-run -p1 < fix.patch
# 强制应用补丁
patch -f -p1 < fix.patch
# 应用补丁并备份原文件
patch -b -p1 < fix.patch
# 删除补丁创建的空文件
patch -E -p1 < fix.patch
# 剥离两层路径
patch -p2 < ../patches/update.patch
# 从标准输入应用补丁
cat fix.patch | patch -p1
# 应用补丁到特定目录
patch -d /path/to/source -p1 < fix.patch
# 生成备份文件并指定后缀
patch -b -z .orig -p1 < fix.patch
# 忽略空白字符差异
patch -l -p1 < fix.patch
# 应用补丁并显示详细信息
patch -v -p1 < fix.patch
🌐 rcp 命令
功能与作用
远程复制文件(不加密,已过时,建议使用scp/sftp替代)。
参数详解
| 参数 | 说明 |
|---|---|
-r |
递归复制目录 |
-p |
保留修改时间等属性 |
-v |
显示详细过程 |
使用示例
bash
# 复制文件到远程主机
rcp file.txt user@remote:/tmp/
# 从远程主机复制文件
rcp user@remote:/path/to/file.txt ./
# 递归复制目录
rcp -r src/ user@remote:/dest/
# 保留文件属性
rcp -p file.txt user@remote:/tmp/
# 显示复制过程
rcp -v file.txt user@remote:/tmp/
# 复制多个文件
rcp file1.txt file2.txt user@remote:/tmp/
# 使用特定端口(需要配合.rhosts文件)
rcp -r local_dir/ user@remote:/remote_dir/
# 复制到用户主目录
rcp document.pdf user@remote:~
# 复制隐藏文件
rcp .config user@remote:/backup/
# 复制并重命名
rcp local.txt user@remote:/remote/new_name.txt
# 在同一台远程主机间复制
rcp user@remote1:/file.txt user@remote2:/dest/
⚠️ 不加密,存在安全隐患。
🔐 rhmask 命令
功能与作用
基于RC4流加密的简单文件加密/解密工具。
参数详解
| 参数 | 说明 |
|---|---|
-k |
密钥文件 |
-d |
解密模式 |
使用示例
bash
# 加密文件
rhmask -k secret.key data.txt
# 解密文件
rhmask -d -k secret.key data.txt.masked
# 使用密码短语作为密钥
echo "mypassword" > passphrase.key
rhmask -k passphrase.key document.txt
# 解密并输出到新文件
rhmask -d -k key.txt encrypted.doc masked.doc
# 加密多个文件
rhmask -k key.txt file1.txt file2.txt
# 使用二进制密钥文件
rhmask -k binary_key.dat data.bin
# 加密并重定向输出
rhmask -k key.txt input.txt > output.txt.masked
# 解密并检查结果
rhmask -d -k key.txt output.txt.masked > decrypted.txt
diff input.txt decrypted.txt
# 创建随机密钥
openssl rand -base64 32 > random.key
rhmask -k random.key sensitive.data
# 加密大文件
rhmask -k key.txt large_archive.tar.gz
💡 仅适合轻量级保护。
🗑️ rm 命令
功能与作用
删除文件或目录。
参数详解
| 参数 | 说明 |
|---|---|
-i |
交互确认 |
-f |
强制删除 |
-r / -R |
递归删除 |
-I |
多文件删除前询问一次 |
-v |
显示过程 |
-d |
删除空目录 |
使用示例
bash
# 删除单个文件
rm file.txt
# 交互式删除
rm -i *.tmp
# 强制删除(不询问)
rm -f temp_file.txt
# 递归删除目录及其内容
rm -rf dir/
# 删除多个文件
rm file1.txt file2.txt file3.txt
# 删除时显示详细过程
rm -v temp.log
# 删除大量文件前询问一次
rm -I *.bak
# 删除空目录
rm -d empty_directory/
# 删除隐藏文件
rm .temp_config
# 删除带有特殊字符的文件
rm -- "file name with spaces.txt"
# 删除目录中的所有内容但保留目录
rm -rf directory/*
# 删除并备份(需要先手动备份)
cp file.txt file.txt.backup && rm file.txt
# 安全删除(多次覆写)
shred -u sensitive_data.txt
# 清空文件内容但保留文件
> empty_me.txt
⚠️ 删除不可逆,建议使用
trash-cli替代。
🔎 slocate 命令
功能与作用
安全路径查找工具,基于预建数据库。
参数详解
| 参数 | 说明 |
|---|---|
-u |
更新数据库 |
-c |
仅显示匹配数量 |
-i |
忽略大小写 |
-r |
使用正则表达式 |
使用示例
bash
# 查找包含passwd关键字的文件路径
slocate passwd
# 忽略大小写查找jpg文件
slocate -i "*.jpg"
# 使用正则表达式查找配置文件
slocate -r "^/etc/.*\.conf$"
# 仅显示匹配项的数量
slocate -c "*.log"
# 更新slocate数据库
slocate -u
# 查找特定目录下的文件
slocate "/var/log/*.log"
# 查找多个关键词
slocate "config" | grep -E "(apache|nginx)"
# 查找并限制结果数量
slocate "error" | head -n 10
# 结合其他命令使用
slocate "*.conf" | xargs ls -l
# 查找最近创建的文件(需要先更新数据库)
sudo slocate -u && slocate "*.txt"
📁 split 命令
功能与作用
将大文件分割成多个小文件,常用于处理超大文件或便于传输。
参数详解
| 参数 | 说明 |
|---|---|
-l N |
按行数分割(每块 N 行) |
-b N |
按字节数分割(每块 N 字节) |
-d |
使用数字后缀(如 x00, x01) |
-a N |
设置后缀长度(如 -a 2 表示两位数字) |
使用示例
bash
# 每1000行分割一次access.log文件
split -l 1000 access.log part_
# 每1MB分割一次大文件
split -b 1M largefile.zip chunk_
# 使用数字后缀分割文件
split -d -b 500K data.bin piece_
# 设置后缀长度为3位
split -a 3 -l 500 bigfile.txt segment_
# 指定前缀名进行分割
split -l 1000 logfile.txt log_part_
# 按照文件大小分割并使用数字后缀
split -d -b 2M video.mp4 video_chunk_
# 分割并指定输出目录(需要配合其他命令)
mkdir splits && split -l 1000 data.txt splits/part_
# 显示分割过程
split -v -l 1000 file.txt
# 分割二进制文件
split -b 1024k binary_file.bin bin_part_
# 分割并保留原文件名的一部分作为前缀
cp large_file.txt temp.txt && split -l 500 temp.txt lf_
💡 分割后的文件默认前缀为
xaa,xab,xac... 若需自定义前缀,可指定输出名。
🔄 tee 命令
功能与作用
将标准输入同时输出到标准输出和一个或多个文件中,常用于管道中记录日志。
参数详解
| 参数 | 说明 |
|---|---|
-a |
追加到文件末尾(不覆盖) |
-i |
忽略中断信号 |
使用示例
bash
# 输出到终端并保存到文件
cat config.txt | tee log.txt
# 追加内容到文件而不覆盖
echo "new entry" | tee -a logfile.txt
# 同时写入多个文件
ls -la | tee file1.txt file2.txt
# 在管道中记录中间结果
ps aux | grep nginx | tee debug.txt | wc -l
# 忽略中断信号
command | tee -i output.txt
# 结合重定向使用
date | tee -a log.txt > /dev/null
# 多级tee使用
echo "test" | tee first.txt | tee second.txt | cat
# 使用tee进行调试
find /etc -name "*.conf" | tee found_files.txt | wc -l
# 清空文件并写入新内容
echo "header" | tee newfile.txt
✅ 实现"边看边存"的效果,适合调试和日志采集。
🧹 tmpwatch 命令
功能与作用
删除指定目录下超过指定时间未使用的文件,常用于清理临时文件。
参数详解
| 参数 | 说明 |
|---|---|
-f |
强制删除(忽略权限问题) |
-r |
递归删除子目录中的文件 |
-m |
时间单位为分钟 |
-h |
时间单位为小时 |
-d |
时间单位为天 |
使用示例
bash
# 删除/tmp目录中超过7天未访问的文件
tmpwatch 7d /tmp
# 强制递归删除/var/tmp中24小时以上的文件
tmpwatch -f -r 24h /var/tmp
# 删除/root/tmp中超过30分钟的文件
tmpwatch -m 30 /root/tmp
# 仅删除普通文件,不删除目录
tmpwatch 7d -f /tmp
# 删除/home/user/cache中超过2小时的文件
tmpwatch -h 2 /home/user/cache
# 显示将要删除的文件但不实际删除(测试模式)
tmpwatch -t 7d /tmp
# 删除特定用户拥有的旧文件
tmpwatch 7d --user username /tmp
# 删除空目录
tmpwatch -d 7 --folders /tmp
# 结合find命令使用更精确的条件
find /tmp -type f -mtime +7 -delete
# 清理系统缓存目录
tmpwatch 1d /var/cache
⚠️ 注意:该命令会直接删除文件,请谨慎使用。
📄 touch 命令
功能与作用
创建空文件或更新文件的时间戳(访问时间、修改时间)。
参数详解
| 参数 | 说明 |
|---|---|
-t YYYYMMDDhhmm[.ss] |
设置特定时间戳 |
-c |
不创建文件,仅更新时间戳 |
-a |
仅更新访问时间 |
-m |
仅更新修改时间 |
-r FILE |
使用参考文件的时间戳 |
使用示例
bash
# 创建一个新的空文件
touch newfile.txt
# 更新现有文件的时间戳为当前时间
touch existing.txt
# 设置特定时间戳
touch -t 202301011200 report.txt
# 仅更新访问时间
touch -a document.pdf
# 仅更新修改时间
touch -m script.sh
# 不创建文件(如果不存在)
touch -c possibly_missing_file.txt
# 使用参考文件的时间戳
touch -r reference.txt target.txt
# 同时创建多个文件
touch file1.txt file2.txt file3.txt
# 设置微秒级时间戳(如果有支持)
touch -t 202301011200.30 precise_time.txt
# 批量更新一组文件的时间戳
touch *.log
# 创建隐藏文件
touch .hidden_config
🔍 可用于模拟文件更新或触发某些基于时间的脚本逻辑。
🔐 umask 命令
功能与作用
设置用户创建文件或目录时的默认权限掩码,控制新文件的默认权限。
参数详解
| 参数 | 说明 |
|---|---|
000 |
全部权限(默认) |
022 |
所有者可读写,组和其他只读 |
077 |
仅所有者可读写(最安全) |
-p |
显示当前 umask 值 |
-S |
以符号形式显示umask值 |
使用示例
bash
# 查看当前umask值
umask
# 设置默认权限为755(目录)和644(文件)
umask 022
# 设置最严格的权限(仅所有者可读写)
umask 077
# 以符号形式显示umask
umask -S
# 临时改变umask值
umask 002 && touch testfile.txt
# 在脚本中使用umask
#!/bin/bash
umask 027
mkdir private_dir
touch private_file.txt
# 恢复默认umask
umask 022
# 显示并设置umask
umask -p 027
# 根据需要设置不同的umask值
umask 007 # 组内共享文件
umask 077 # 私人文件
# 查看umask对文件权限的影响
umask 022
touch demo.txt
ls -l demo.txt # 应该是-rw-r--r--
📌 新建文件默认权限 =
666 - umask,新建目录默认权限 =777 - umask。
🔎 whereis 命令
功能与作用
查找二进制文件、源代码文件和帮助文档的位置,基于系统数据库快速定位。
参数详解
| 参数 | 说明 |
|---|---|
-b |
仅搜索二进制文件 |
-m |
仅搜索手册页 |
-s |
仅搜索源代码文件 |
-u |
查找未安装的程序 |
-B |
指定二进制文件搜索目录 |
-M |
指定手册页搜索目录 |
-S |
指定源代码搜索目录 |
使用示例
bash
# 查找gcc的二进制文件、源代码和手册页位置
whereis gcc
# 仅查找二进制文件
whereis -b python
# 仅查找手册页
whereis -m vim
# 仅查找源代码文件
whereis -s bash
# 查找未安装的程序
whereis -u nonexistent_program
# 在指定目录中查找二进制文件
whereis -B /usr/local/bin -f custom_script
# 在指定目录中查找手册页
whereis -M /usr/share/man -f mycommand
# 在指定目录中查找源代码
whereis -S /usr/src -f myprogram
# 同时指定多个搜索目录
whereis -B /usr/bin -M /usr/share/man -S /usr/src -f program_name
# 查找多个程序的相关文件
whereis ls ps grep
# 显示详细信息
whereis -l
# 查找特定类型的文件并显示路径
whereis -b java | xargs ls -l
# 结合其他命令使用
whereis httpd | xargs file
# 查找程序但排除某些目录
whereis -B /bin -M /usr/man -f program_name
⚠️ 数据库由
makewhatis更新,建议定期刷新。
🔍 which 命令
功能与作用
查找可执行文件在 PATH 环境变量中的路径,通常用于定位命令的实际位置。
参数详解
| 参数 | 说明 |
|---|---|
-a |
列出所有匹配的路径 |
-V |
显示版本信息 |
-s |
静默模式,不输出结果 |
使用示例
bash
# 查找python的路径
which python
# 列出所有名为grep的命令路径
which -a grep
# 静默模式检查命令是否存在
if which curl > /dev/null 2>&1; then
echo "curl is installed"
else
echo "curl is not installed"
fi
# 查找多个命令的路径
which ls ps top
# 显示详细信息
which -V
# 检查命令是否存在并执行
if command=$(which node); then
echo "Node.js found at: $command"
$command --version
else
echo "Node.js not found"
fi
# 查找命令并验证其可执行性
cmd_path=$(which docker)
if [ -x "$cmd_path" ]; then
echo "Docker is executable at: $cmd_path"
else
echo "Docker is not executable or not found"
fi
# 查找并使用绝对路径执行命令
$(which python3) -c "print('Hello from Python')"
# 在脚本中使用which进行错误处理
EDITOR=$(which vim || which nano || which vi)
if [ -n "$EDITOR" ]; then
echo "Using editor: $EDITOR"
else
echo "No suitable editor found"
fi
# 查找命令并创建别名
GIT_PATH=$(which git)
if [ -n "$GIT_PATH" ]; then
alias git="$GIT_PATH"
echo "Git alias created"
fi
💡 若命令不在 PATH 中,
which返回空。
总结 :以上是Linux系统中最重要的文件管理命令的完整汇总,从基础的文件操作(cp、mv、rm)到高级的文件查找(find、locate)、权限管理(chmod、chown)、系统工具(tmpwatch、slocate)等,涵盖了日常系统管理和维护的各个方面。这些命令广泛应用于 Linux 文件管理、日志处理、权限控制等场景,建议结合实际操作练习掌握。