linux-文件相关命令
在Linux操作系统中,文件是数据管理与系统运行的基础。掌握高效的文件操作命令,是进行系统管理、开发调试、安全分析及日常数据处理的必要技能。本文将系统性地介绍Linux中用于文件查看、查找、写入、压缩与解压的核心命令,并探讨相关特殊文件路径的系统意义与安全属性。
文件查看
file: 识别文件类型
在操作文件前,首先应确定其类型。file 命令通过检查文件内容、元数据和系统定义来识别文件类型。
语法: file [选项] 文件名...
# 识别可执行文件、配置文件和设备文件
file /bin/bash /etc/passwd /dev/sda
/bin/bash: ELF 64-bit LSB pie executable, x86-64, ...
/etc/passwd: ASCII text
/dev/sda: block specialstat: 查看文件元数据
stat 命令用于显示文件的详细元数据,包括inode信息、权限、所有权、大小以及三种时间戳(Access, Modify, Change)。
语法: stat 文件名...
# 查看sshd配置文件的元数据
stat /etc/ssh/sshd_config
# ...
# Access: 2022-10-27 10:00:00.000000000 +0000 (最近访问时间)
# Modify: 2022-10-25 08:30:00.000000000 +0000 (内容修改时间)
# Change: 2022-10-25 08:31:00.000000000 +0000 (元数据变更时间)cat, head, tail: 文本文件内容查看
cat: 连接并输出文件全部内容。head/tail: 显示文件头/尾部分。
示例:
# 显示文件内容并对所有行编号
cat -n /etc/passwd
# 显示非打印字符(^I, $)
cat -A script.sh
# 创建文件:
cat > file << 'EOF'
data
EOF
# 实时监控认证日志中的失败尝试 ;实时输出新增内容
tail -f /var/log/auth.log | grep "Failed password"
# 查看内核环形缓冲区最新的100条消息
dmesg | tail -n 100less, more: 高级分页查看器
less 是查看大文件的首选工具,支持交互式浏览和搜索,且启动时无需加载整个文件。more 是 less 的替代品,但功能更少。
less 核心操作键:
f/b: 前后翻页。/pattern: 向下搜索。?pattern: 向上搜索。g/G: 跳转至文件首/末行。&pattern: 仅显示匹配模式的行 (过滤模式)。q: 退出。
strings: 提取二进制文件中的可打印字符
strings 命令在二进制文件中扫描并提取连续的可打印字符序列。对于逆向工程和恶意软件分析至关重要。
语法: strings [选项] 文件名...
# 从二进制程序中提取可打印字符串,设置最小长度为8
strings -n 8 /usr/bin/cowsay
# 检查内存转储文件以查找URL或凭证痕迹
strings /proc/kcore | grep -i 'password\|http'od, hexdump: 查看二进制文件
od (octal dump) 和 hexdump 用于以八进制、十六进制或其他格式显示二进制文件内容。
语法:od [选项] 文件hexdump [选项] 文件
示例:
# 以十六进制和ASCII字符格式显示文件的前256字节
hexdump -C -n 256 /bin/ls
# 使用od查看文件的单字节十六进制表示
od -t x1 /dev/urandom | head无 cat 读取方法
Bash:
# $(<file) 读取文件内容
echo "$(</etc/passwd)"
# while read 循环:
while IFS= read -r line; do
printf '%s\n' "$line"
done < /etc/passwd Tcsh:
set i = 10
while ($i > 0)
set line = "$<"
echo "$line"
@ i--
end < target.txt 文件查找
find: 基于属性的文件搜索
find 在指定目录树中递归搜索文件,支持通过名称、类型、时间、大小、权限等多种属性过滤。
语法: find [路径...] [表达式] [动作]
实用示例:
# 查找系统中所有设置了SUID权限位的可执行文件
find / -type f -perm -4000 -ls 2>/dev/null
# 查找/var目录下所有者为www-data且在过去7天内被修改过的PHP文件
find /var -user www-data -name "*.php" -mtime -7 2>/dev/null
# 查找系统中所有用户均可写的目录
find / -type d -perm -0002 -print 2>/dev/null
# 查找所有大于100MB的日志文件并将其归档
find /var/log -type f -size +100M -exec tar -czvf /tmp/large_logs.tar.gz {} +grep: 文本内容模式搜索
grep 在文件内容中搜索匹配指定模式的文本行。
关键选项:
-i: 忽略大小写。-n: 显示行号。-v: 反向匹配。-r或-R: 递归搜索。-a: 强制解析二进制文件-E: 使用扩展正则表达式 (ERE)。-P: 使用Perl兼容正则表达式 (PCRE)。-o: 仅显示匹配的部分。
实用示例:
# 在所有Web日志中查找源IP为192.168.1.100的POST请求
grep -r "POST" /var/log/nginx/* | grep "192.168.1.100"
grep -ra "flag{" / 2>/dev/null
# 在所有PHP和ENV文件中搜索包含"flag{"的行
grep -ra "flag{" / --include="*.php" --include="*.env" 2>/dev/null
# 递归搜索包含"$db_password"的行
grep -r "\$db_password" /var/www 2>/dev/null
# 搜索所有非空行
grep -v "^\s*$" /etc/passwd
# 使用PCRE从配置文件中提取所有合法的IPv4地址
grep -oP '(\d{1,3}\.){3}\d{1,3}' /etc/hosts
# 在Web目录下查找可能存在漏洞的eval函数调用
grep -rP 'eval\s*\(\s*\$_' /var/www/html
# 递归搜索/etc下所有文件中包含"password"的行,并显示上下文各3行
grep -rinC 3 "password" /etc 2>/dev/nulllocate, which, whereis
locate: 通过预建的数据库快速查找文件,速度远快于find,但数据可能不是最新的。需updatedb更新数据库。which: 在用户的$PATH中查找命令的可执行文件路径。whereis: 查找命令的二进制文件、源代码和man手册页路径。
文件写入
> & >>: 输出重定向
>: 覆盖写入。>>: 追加写入。
示例:
# 将系统环境变量保存到文件,覆盖旧文件
env > /tmp/env_backup.txt
# 将一条新的防火墙规则追加到iptables脚本
echo "iptables -A INPUT -s 1.2.3.4 -j DROP" >> /etc/init.d/firewall_rulesdd: 低级块设备和文件复制
dd 命令用于以指定块大小复制数据,功能强大,常用于磁盘映像、数据销毁和创建大文件。
语法: dd if=源 of=目标 [选项]
示例:
# 为/dev/sda创建一个完整的磁盘映像,用于取证分析
dd if=/dev/sda of=/mnt/forensic_images/sda.img bs=4M status=progress
# 使用随机数据安全地覆盖一个文件
dd if=/dev/urandom of=/path/to/sensitive.file bs=1M
# 创建一个1GB大小的空文件用于测试
dd if=/dev/zero of=large_test_file.bin bs=1G count=1truncate: 调整文件大小
truncate 可用于将文件扩大或缩小到指定尺寸。
语法: truncate -s <尺寸> 文件名
# 将日志文件清空,但保留文件本身 (inode不变)
truncate -s 0 /var/log/app.log文件完整性与比较
diff: 比较文件内容
diff 逐行比较两个文本文件,并显示它们之间的差异。
语法: diff [选项] file1 file2
# 以统一格式比较两个配置文件,便于阅读和打补丁
diff -u /etc/nginx/nginx.conf.bak /etc/nginx/nginx.confmd5sum, sha256sum: 计算和校验哈希
这些命令用于生成文件的加密哈希值,以验证其完整性,确保文件未被篡改。
语法: sha256sum 文件...
# 生成文件的SHA256哈希值
sha256sum my_application.tar.gz > my_application.sha256
# 使用哈希文件校验下载的文件的完整性
sha256sum -c my_application.sha256
# my_application.tar.gz: OKcmp: 逐字节比较文件
cmp 比较两个文件,并在找到第一个差异时报告其字节和行号。适用于二进制文件。
语法: cmp [选项] file1 file2
# 比较两个二进制文件,报告第一个差异
cmp /bin/ls /bin/ls.bak特殊文件
用户配置文件与历史
.bash_history 命令历史
.bashrc 用户环境变量与别名
.profile 登录 shell 初始化脚本
.zshrc zsh 配置
.ssh/id_rsa SSH 私钥(权限 600)
.ssh/id_rsa.pub SSH 公钥
.ssh/authorized_keys 可登录公钥列表
.viminfo vim 操作记录(寄存器、搜索历史)
.screenrc screen 配置
.tmux.conf tmux 配置
.config/ 桌面应用配置(如 git, npm, aws)
.aws/credentials AWS 凭证 /etc:系统核心配置文件目录
/etc/passwd 用户名、UID、GID、家目录、shell,所有用户可读
/etc/shadow 密码哈希、过期策略,仅 root 可读
/etc/group 用户组信息
/etc/sudoers sudo 权限配置
/etc/hostname 主机名
/etc/hosts 本地域名映射(可能含内网 IP)
/etc/issue 登录前系统版本提示
/etc/environment 全局环境变量
/etc/crontab 系统级定时任务
/etc/cron.d/ 系统级定时任务扩展目录
/etc/apache2/ Debian Apache 配置
/etc/apache/ RHEL Apache 配置
/etc/httpd/conf/httpd.conf Apache 主配置
/etc/nginx/nginx.conf Nginx 主配置
/etc/mysql/my.cnf MySQL 配置
/etc/php/php.ini PHP 配置
/etc/redis/redis.conf Redis 配置
/etc/mongod.conf MongoDB 配置
/etc/postgresql/ PostgreSQL 配置目录
/etc/supervisor/supervisord.conf 进程管理配置
/etc/docker/daemon.json Docker 守护进程配置
/etc/ssh/sshd_config SSH 服务配置
/etc/ssh/ssh_config SSH 客户端配置
/etc/udev/rules.d/ 设备规则
/etc/modprobe.d/ 内核模块加载配置
/etc/default/grub GRUB 启动参数
/etc/fstab 文件系统挂载表
/etc/ld.so.conf 动态链接库路径
/etc/sysctl.conf 内核参数配置 /proc:进程与系统状态虚拟文件系统
/proc/$pid/ 进程虚拟目录
/proc/self/ 当前进程符号链接
cmdline 启动命令(\0 分隔)
cwd 当前工作目录符号链接
environ 环境变量(\0 分隔)
exe 可执行文件符号链接
fd/ 打开的文件描述符(符号链接)
task/ 线程信息目录
maps 内存映射(可查看加载的 so 文件)
status 进程状态(UID, GID, Capabilities)
/proc/net/arp ARP 表(内网主机发现)
/proc/net/route 路由表
/proc/net/tcp TCP 连接状态
/proc/mounts 挂载点列表
/proc/version 内核版本
/proc/cpuinfo CPU 信息
/proc/meminfo 内存使用
/proc/modules 加载的内核模块
/proc/sys/ 可调内核参数(如 net.ipv4.ip_forward) /sys:内核对象与设备模型
/sys 是一个虚拟文件系统,将内核的数据结构、属性和设备以文件形式暴露出来。
/sys/class/net/eth0/address MAC 地址
/sys/class/net/ 所有网卡
/sys/devices/ 物理设备树
/sys/module/ 加载的内核模块 /var:可变数据存储
log/ 系统与应用日志
www/html/ Web 服务默认根目录
lib/php/sessions/ PHP Session 存储
spool/cron/ CentOS 用户 crontab 目录
spool/cron/crontabs/ Debian 用户 crontab 目录
crontab 格式(系统):
分 时 日 月 周 用户 命令
用户 crontab 格式:
分 时 日 月 周 命令
示例:
*/5 * * * * /check.sh /dev:设备文件
/dev/sda 物理硬盘设备
/dev/nvme0n1 物理硬盘设备
/dev/null 空设备,写入它的任何数据都会被丢弃
/dev/zero 提供无限的空字符流
/dev/random 内核熵池,提供质量随机数
/dev/urandom 内核熵池,提供高质量随机数
/dev/shm 共享内存,实现为tmpfs压缩与解压
压缩
.tar:tar -cvf archive.tar /path/.tar.gz:tar -czvf archive.tar.gz /path/.tar.bz2:tar -cjvf archive.tar.bz2 /path/.zip:zip -r archive.zip /path/.7z:7z a archive.7z /path/
示例:
# 备份整个/etc目录,并排除/etc/resolv.conf
tar -czvf /opt/backups/etc_backup_$(date +%F).tar.gz --exclude='/etc/resolv.conf' /etc解压
.tar:tar -xvf archive.tar -C /target/.tar.gz:tar -xzvf archive.tar.gz -C /target/.tar.bz2:tar -xjvf archive.tar.bz2 -C /target/.zip:unzip archive.zip -d /target/.rar:unrar x archive.rar /target/.7z:7z x archive.7z -o/target/
示例:
# 将Web应用包解压到指定目录
tar -xzvf my_webapp_v1.2.tar.gz -C /var/www/tar 命令的命令执行特性
GNU tar 的 --checkpoint-action 选项允许在处理过程中执行外部命令,这可能构成安全风险。
语法: tar ... --checkpoint=N --checkpoint-action=exec="COMMAND"
安全考量:
若应用程序允许用户控制 tar 的参数而未进行充分过滤,攻击者可能通过此选项注入并执行任意命令。例如,在上传解压功能中,构造恶意的 tar 命令可能导致远程代码执行。