1. Linux文件操作实战:文本查看与编辑工具
1.1 简易文本编辑器:nano
在Linux系统中,nano是最容易上手的命令行文本编辑器之一。与vim等编辑器相比,nano的学习曲线平缓,特别适合新手快速开始文本编辑工作。
基本使用方法:
bash复制nano 文件名
这个命令会打开指定文件进行编辑。如果文件不存在,nano会自动创建一个新文件。进入编辑界面后,你可以直接使用键盘输入内容,就像在普通文本编辑器中一样。
界面底部快捷键提示:
- Ctrl+O:保存文件(Write Out)
- Ctrl+X:退出nano
- Ctrl+G:打开帮助文档
- Ctrl+K:剪切当前行
- Ctrl+U:粘贴剪贴板内容
保存与退出流程:
- 编辑完成后按Ctrl+X
- 系统会询问"Save modified buffer?"(是否保存修改)
- 按Y确认保存,N放弃保存,或Ctrl+C取消退出操作
- 如果选择保存,会提示确认文件名(默认使用原文件名)
- 按Enter确认文件名完成保存
提示:nano的界面底部始终显示常用快捷键,这对初学者特别友好。当你不确定下一步操作时,可以随时查看这些提示。
实际应用场景:
- 快速修改配置文件(如/etc/ssh/sshd_config)
- 编写简单的shell脚本
- 创建临时笔记或日志文件
- 编辑小型代码文件
注意事项:
- nano默认不会自动换行,长行会延伸到屏幕外。如果需要自动换行,可以在启动时添加-w参数或在编辑时按Alt+$开启换行模式。
- 在编辑系统重要文件时,建议先备份原文件。
- 使用sudo nano编辑需要root权限的文件时,要特别注意不要误操作。
1.2 按原样阅读:cat命令
cat(concatenate)命令是Linux中最基础的文件查看工具之一,它的主要功能是将文件内容连续显示在标准输出上。
基本语法:
bash复制cat [选项] 文件名
常用选项详解:
-n:显示所有行号(包括空行)-b:只显示非空行的行号-s:压缩连续空行为单行空行-A:显示所有控制字符(相当于-vET组合)
实际应用示例:
bash复制# 查看文件内容
cat /etc/hosts
# 显示行号(包括空行)
cat -n /etc/passwd
# 只对非空行编号
cat -b ~/.bashrc
# 压缩多行空行
cat -s logfile.txt
与重定向的区别:
cat 文件名:将文件内容输出到标准输出(屏幕)cat < 文件名:使用输入重定向,效果类似但处理方式不同cat 文件1 文件2:可以连接显示多个文件内容
适用场景:
- 查看小型配置文件(<100行)
- 快速检查脚本内容
- 合并多个文件内容(配合重定向)
- 作为管道的数据源
注意事项:
- 不要用cat查看大文件(>1MB),这会导致终端被大量输出淹没
- 二进制文件不要用cat查看,可能导致终端显示混乱
- 重要文件查看前建议先备份
- 选项可以组合使用,如
cat -ns file.txt
1.3 文件的倒序输出:tac命令
tac是cat的反向拼写,功能也正好相反——它按行倒序显示文件内容。
基本用法:
bash复制tac 文件名
工作原理:
tac将文件内容按行读取,然后从最后一行开始反向输出到第一行。与简单的cat file | rev不同,tac是保持每行内容不变,只改变行顺序。
使用示例:
bash复制# 原始文件内容
$ cat numbers.txt
1
2
3
4
# 使用tac倒序输出
$ tac numbers.txt
4
3
2
1
适用场景:
- 查看按时间倒序排列的日志文件
- 某些特定格式的数据处理
- 调试时查看最近的输出
注意事项:
- 和cat一样,tac不适合处理大文件
- 某些精简版Linux系统可能没有预装tac,需要额外安装
- 对于二进制文件同样不适用
1.4 分页查看大文件:more和less
1.4.1 more命令基础
more是早期Unix系统的分页查看工具,适合查看大文件内容。
基本语法:
bash复制more [选项] 文件名
常用选项:
-num:指定每屏显示的行数+num:从第num行开始显示+/pattern:从匹配pattern的第一行开始显示
交互命令:
- 空格:向下翻一屏
- Enter:向下翻一行
- =:显示当前行号
- /pattern:搜索字符串
- q:退出
使用示例:
bash复制# 查看系统日志
more /var/log/syslog
# 每屏显示20行
more -20 large_file.txt
# 从第100行开始显示
more +100 data.csv
局限性:
- 只能向前翻页,不能回退
- 搜索功能有限
- 加载整个文件到内存,不适合超大文件
1.4.2 less命令进阶
less是more的增强版,功能更强大,资源占用更少。
基本语法:
bash复制less [选项] 文件名
核心优势:
- 支持前后翻页
- 不会预加载整个文件
- 更强大的搜索功能
- 支持多种显示模式
常用选项:
-N:显示行号-i:忽略搜索大小写-S:截断长行(不换行)-F:如果内容少于一屏自动退出
交互命令:
- 空格/f:向前翻一屏
- b:向后翻一屏
- j:向下移动一行
- k:向上移动一行
- /pattern:向下搜索
- ?pattern:向上搜索
- n:重复上次搜索
- N:反向重复上次搜索
- g:跳到文件开头
- G:跳到文件末尾
- :n:查看下一个文件(多文件时)
- :p:查看上一个文件
使用示例:
bash复制# 查看日志文件并显示行号
less -N /var/log/auth.log
# 忽略大小写搜索
less -i /usr/share/dict/words
# 查看多个文件
less file1.txt file2.log
高级技巧:
- 使用
&pattern只显示匹配行 - 用
-X选项保持内容在退出后仍显示 - 结合管道使用:
dmesg | less - 使用
-m显示更详细的提示信息
注意事项:
- less不会修改原文件,是安全的只读查看器
- 二进制文件可能显示乱码,建议用专门的工具查看
- 某些特殊字符可能影响显示效果
1.5 查看文件开头与结尾:head和tail
1.5.1 head命令详解
head命令用于显示文件开头部分,默认显示前10行。
基本语法:
bash复制head [选项] 文件名
常用选项:
-n num:显示前num行-c num:显示前num字节-q:不显示文件名头(多文件时)-v:总是显示文件名头
使用示例:
bash复制# 查看前5行
head -n 5 /etc/passwd
# 查看前100字节
head -c 100 data.bin
# 查看多个文件的前3行
head -n 3 file1.txt file2.log
实用技巧:
- 省略n直接写行数:
head -20 file - 结合其他命令使用:
ps aux | head - 检查文件编码:
head -c 3 file可以查看BOM头
1.5.2 tail命令详解
tail命令用于显示文件末尾部分,默认显示最后10行。
基本语法:
bash复制tail [选项] 文件名
常用选项:
-n num:显示最后num行-c num:显示最后num字节-f:实时追踪文件变化(监控日志)-F:同-f,但会处理文件旋转(logrotate)-s sec:与-f合用,指定监控间隔秒数
使用示例:
bash复制# 查看最后20行
tail -n 20 /var/log/syslog
# 实时监控日志
tail -f /var/log/nginx/access.log
# 查看最后1KB数据
tail -c 1024 data.bin
高级应用:
- 监控多个日志文件:
tail -f /var/log/{syslog,auth.log} - 结合grep过滤:
tail -f logfile | grep "error" - 使用
-F选项处理日志轮转:tail -F /var/log/messages
注意事项:
-f是持续监控,需要按Ctrl+C退出- 使用
-F处理日志轮转更可靠 - 监控大量文件可能消耗较多资源
2. 高效文件搜索与处理技巧
2.1 使用grep进行文本搜索
grep是Linux中最强大的文本搜索工具,支持正则表达式匹配。
基本语法:
bash复制grep [选项] 模式 [文件...]
常用选项:
-i:忽略大小写-v:反向匹配(显示不匹配的行)-n:显示行号-c:统计匹配行数-r:递归目录搜索-l:只显示包含匹配项的文件名-E:扩展正则表达式(等同于egrep)-A num:显示匹配行及后面num行-B num:显示匹配行及前面num行-C num:显示匹配行及前后各num行
使用示例:
bash复制# 简单搜索
grep "error" /var/log/syslog
# 递归搜索目录
grep -r "function_name" /path/to/project/
# 使用正则表达式
grep -E "^[A-Z]" names.txt
# 统计匹配行数
grep -c "GET" access.log
# 显示匹配行及前后3行
grep -C 3 "exception" app.log
高级技巧:
- 使用
--color=auto高亮匹配文本(可加入alias) - 结合管道处理其他命令输出:
ps aux | grep "nginx" - 使用
-P选项启用Perl兼容正则(更强大) - 排除特定目录:
grep -r --exclude-dir={dir1,dir2} "pattern"
2.2 find命令:文件查找利器
find是Linux下最强大的文件查找工具,可以根据各种条件搜索文件。
基本语法:
bash复制find [路径...] [表达式]
常用查找条件:
-name:按文件名匹配(支持通配符)-iname:不区分大小写的文件名匹配-type:按文件类型(f文件,d目录,l链接等)-size:按文件大小(+大于,-小于)-mtime:按修改时间(天为单位)-user:按文件所有者-perm:按权限-exec:对找到的文件执行命令
使用示例:
bash复制# 按名称查找
find /etc -name "*.conf"
# 查找大于1MB的文件
find /var/log -size +1M
# 查找7天内修改过的文件
find /home -mtime -7
# 查找并删除临时文件
find /tmp -name "*.tmp" -exec rm {} \;
# 查找并统计文件数量
find /var/www -type f | wc -l
高级用法:
- 使用
-printf自定义输出格式 - 结合
xargs处理结果:find ... | xargs grep "pattern" - 使用
-maxdepth限制搜索深度 - 多个条件组合:
find . \( -name "*.c" -o -name "*.h" \)
2.3 文件压缩与解压技巧
Linux下常用的压缩工具有gzip、bzip2、xz和zip等。
2.3.1 gzip/gunzip
gzip是Linux系统最常用的压缩工具,压缩后文件扩展名为.gz。
常用命令:
bash复制# 压缩文件
gzip filename
# 解压文件
gunzip filename.gz
# 保持原文件压缩
gzip -c file > file.gz
# 查看压缩文件内容
zcat file.gz
# 指定压缩级别(1-9,9最高)
gzip -9 largefile
特点:
- 压缩速度较快
- 压缩率中等
- 不支持目录压缩(需先打包)
2.3.2 tar命令:打包与解包
tar本身不压缩,但常与压缩工具配合使用。
常用选项:
-c:创建归档-x:解压归档-v:显示详细过程-f:指定文件名-z:使用gzip压缩/解压-j:使用bzip2压缩/解压-J:使用xz压缩/解压-t:列出归档内容
使用示例:
bash复制# 创建gzip压缩包
tar -czvf archive.tar.gz /path/to/dir
# 解压gzip包
tar -xzvf archive.tar.gz
# 创建bz2压缩包
tar -cjvf archive.tar.bz2 /path/to/dir
# 列出压缩包内容
tar -tf archive.tar.gz
# 解压到指定目录
tar -xzvf archive.tar.gz -C /target/dir
注意事项:
- 选项前的
-可以省略(传统风格) - 压缩比:xz > bzip2 > gzip(但压缩时间相反)
- 大文件建议使用xz或bzip2获得更高压缩率
2.3.3 zip/unzip
zip格式在Windows和Linux间通用性更好。
常用命令:
bash复制# 压缩文件/目录
zip -r archive.zip /path/to/dir
# 解压zip文件
unzip archive.zip
# 查看zip文件内容
unzip -l archive.zip
# 解压到指定目录
unzip archive.zip -d /target/dir
特点:
- 兼容性好
- 支持密码保护(-P参数)
- 压缩率一般低于gzip/bzip2
3. 文件权限与系统管理
3.1 文件权限管理
Linux文件权限分为读(r)、写(w)、执行(x)三种,分别对应所有者(user)、所属组(group)和其他人(other)。
查看权限:
bash复制ls -l filename
输出示例:
code复制-rw-r--r-- 1 user group 1024 Jun 1 10:00 file.txt
第一个字符表示文件类型(-普通文件,d目录),接着是u/g/o的权限组合。
修改权限(chmod):
bash复制# 数字模式
chmod 755 script.sh # rwxr-xr-x
# 符号模式
chmod u+x,g-w,o=r file.txt
# 递归修改目录权限
chmod -R 755 /path/to/dir
修改所有者(chown):
bash复制# 修改文件所有者
chown user:group file.txt
# 递归修改目录所有者
chown -R user:group /path/to/dir
特殊权限:
- SUID(4):执行时以所有者身份运行
- SGID(2):目录下新建文件继承组ID
- Sticky(1):只有所有者能删除/重命名文件
设置方法:
bash复制chmod 4755 suid_program # 设置SUID
chmod 2775 shared_dir # 设置SGID
chmod 1777 /tmp # 设置Sticky
3.2 磁盘空间管理
查看磁盘使用情况(df):
bash复制df -h # 人类可读格式
df -i # 查看inode使用情况
查看目录大小(du):
bash复制du -sh /path/to/dir # 汇总大小
du -h --max-depth=1 / # 查看根目录下各目录大小
查找大文件:
bash复制find / -type f -size +100M -exec ls -lh {} \;
清理旧文件:
bash复制# 删除30天前的日志文件
find /var/log -name "*.log" -mtime +30 -delete
3.3 进程管理
查看进程(ps):
bash复制ps aux # 查看所有进程
ps -ef # 完整格式列表
ps -u username # 查看指定用户进程
实时监控(top/htop):
bash复制top # 基本进程监控
htop # 增强版(需安装)
进程控制:
bash复制kill PID # 终止进程
kill -9 PID # 强制终止
killall process_name # 终止所有同名进程
pkill -u username # 终止某用户的所有进程
后台作业管理:
bash复制command & # 后台运行
jobs # 查看后台作业
fg %n # 将作业n调到前台
bg %n # 在后台继续运行作业n
Ctrl+Z # 暂停当前前台作业
4. 系统监控与性能分析
4.1 资源监控工具
vmstat:系统整体状态
bash复制vmstat 1 # 每秒刷新一次
输出字段说明:
- r:运行队列中的进程数
- b:阻塞的进程数
- swpd:虚拟内存使用量
- free:空闲内存
- si/so:交换区换入/换出
- us/sy/id:CPU用户/系统/空闲时间
iostat:磁盘I/O统计
bash复制iostat -x 1 # 详细磁盘统计
netstat/ss:网络连接
bash复制netstat -tulnp # 查看监听端口
ss -s # 统计套接字信息
free:内存使用
bash复制free -h # 人类可读格式
4.2 日志分析技巧
常见日志文件:
- /var/log/messages:通用系统消息
- /var/log/syslog:系统日志
- /var/log/auth.log:认证日志
- /var/log/kern.log:内核日志
- /var/log/dmesg:启动消息
日志分析命令:
bash复制# 查看最新日志
tail -f /var/log/syslog
# 统计错误出现次数
grep -i "error" /var/log/syslog | wc -l
# 按时间筛选日志
sed -n '/Jun 1 10:00/,/Jun 1 11:00/p' /var/log/syslog
# 使用journalctl(systemd系统)
journalctl -u nginx --since "1 hour ago"
4.3 定时任务管理
crontab基本用法:
bash复制crontab -e # 编辑当前用户crontab
crontab -l # 列出当前用户crontab
crontab -r # 删除当前用户crontab
crontab时间格式:
code复制* * * * * command
| | | | |
| | | | +----- 星期 (0 - 6) (周日=0)
| | | +------- 月份 (1 - 12)
| | +--------- 日 (1 - 31)
| +----------- 小时 (0 - 23)
+------------- 分钟 (0 - 59)
系统级crontab:
编辑/etc/crontab或/etc/cron.d/下的文件,需要指定用户:
code复制* * * * * username command
注意事项:
- 环境变量可能与交互shell不同,建议使用绝对路径
- 命令输出最好重定向到文件或/dev/null
- 复杂的任务建议写成脚本再调用
- 使用
flock防止任务重复执行
5. 网络配置与管理
5.1 网络接口配置
查看网络接口:
bash复制ip addr show
ifconfig # 较老系统
临时配置IP:
bash复制ip addr add 192.168.1.100/24 dev eth0
ip link set eth0 up
永久配置(不同发行版):
- Debian/Ubuntu:/etc/network/interfaces
- RHEL/CentOS:/etc/sysconfig/network-scripts/ifcfg-eth0
路由管理:
bash复制ip route show # 查看路由表
ip route add default via 192.168.1.1 # 添加默认网关
5.2 网络诊断工具
ping:基本连通性测试
bash复制ping -c 4 google.com # 发送4个包
traceroute:路径追踪
bash复制traceroute google.com
tracepath google.com # 不需要root权限
netcat:网络瑞士军刀
bash复制nc -zv host port # 端口测试
nc -l 8080 # 简易监听
tcpdump:网络抓包
bash复制tcpdump -i eth0 port 80
tcpdump -w capture.pcap # 保存到文件
5.3 SSH高级用法
密钥认证设置:
bash复制# 生成密钥对
ssh-keygen -t rsa -b 4096
# 复制公钥到远程主机
ssh-copy-id user@remote_host
SSH配置优化:
编辑~/.ssh/config:
code复制Host myserver
HostName server.example.com
User username
Port 2222
IdentityFile ~/.ssh/id_rsa
Compression yes
SSH隧道:
bash复制# 本地端口转发(本地1234->远程主机:5678)
ssh -L 1234:remote_host:5678 user@gateway
# 动态SOCKS代理
ssh -D 1080 user@remote_host
SCP文件传输:
bash复制# 复制本地文件到远程
scp file.txt user@remote:/path/
# 从远程复制到本地
scp user@remote:/path/file.txt .
# 递归复制目录
scp -r dir user@remote:/path/
rsync高级同步:
bash复制rsync -avz --delete /local/dir/ user@remote:/remote/dir/
rsync -e "ssh -p 2222" file user@remote:/path/