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 special

stat: 查看文件元数据

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 100

lessmore: 高级分页查看器

less 是查看大文件的首选工具,支持交互式浏览和搜索,且启动时无需加载整个文件。
moreless 的替代品,但功能更少。

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/null

locate, 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_rules

dd: 低级块设备和文件复制

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=1

truncate: 调整文件大小

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.conf

md5sum, sha256sum: 计算和校验哈希

这些命令用于生成文件的加密哈希值,以验证其完整性,确保文件未被篡改。

语法: sha256sum 文件...

# 生成文件的SHA256哈希值
sha256sum my_application.tar.gz > my_application.sha256

# 使用哈希文件校验下载的文件的完整性
sha256sum -c my_application.sha256
# my_application.tar.gz: OK

cmp: 逐字节比较文件

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 命令可能导致远程代码执行。


linux-文件相关命令
https://k3ppf0r.pages.dev/2021/06/23/杂项配置/linux-文件相关命令/
作者
k3ppf0r
发布于
2021年6月23日
许可协议