1. Linux文件与目录操作完全指南
作为一名长期使用Linux系统的开发者,我深知文件与目录操作是最基础也是最重要的技能。本文将系统性地介绍Linux下文件与目录的各类操作命令,包含大量实际工作中积累的经验技巧。
1.1 目录查看与导航
ls命令是Linux中使用频率最高的命令之一,但很多开发者只停留在基础用法。让我们深入探讨它的各种实用参数组合:
bash复制# 按文件大小排序(大文件在前)
ls -lS
# 按文件大小逆序排序(小文件在前)
ls -lSr
# 显示文件inode号(排查硬链接时很有用)
ls -li
# 递归列出子目录内容
ls -R
# 人性化显示文件大小(自动转换为KB/MB/GB)
ls -lh
经验之谈:在服务器维护时,我习惯使用
ls -lht组合命令,它能按修改时间倒序排列并显示人类可读的文件大小,快速定位最新修改的大文件。
pwd命令看似简单,但在脚本编写中非常有用。特别是在使用符号链接时,pwd -P可以显示物理路径而非符号链接路径:
bash复制# 创建测试目录和符号链接
mkdir -p /tmp/real_dir
ln -s /tmp/real_dir /tmp/link_dir
# 进入链接目录
cd /tmp/link_dir
# 普通pwd显示链接路径
pwd # 输出:/tmp/link_dir
# 加上-P参数显示实际物理路径
pwd -P # 输出:/tmp/real_dir
1.2 目录创建的艺术
mkdir命令的-p参数是创建目录结构的利器,但很多人不知道它还能与-v参数组合使用,显示详细的创建过程:
bash复制# 详细显示目录创建过程
mkdir -pv project/{src,dist,test}/{main,resources}
输出示例:
code复制mkdir: created directory 'project'
mkdir: created directory 'project/src'
mkdir: created directory 'project/src/main'
mkdir: created directory 'project/src/resources'
...
在自动化脚本中,我经常使用大括号扩展来批量创建复杂目录结构:
bash复制# 创建多级测试目录
mkdir -p test{1..3}/{unit,integration,performance}_{tests,results}
1.3 安全删除策略
rm命令威力巨大,误操作可能导致灾难性后果。我强烈建议设置以下别名来防止误删:
bash复制# 添加到~/.bashrc或~/.zshrc
alias rm='rm -i' # 删除前询问确认
alias rmdir='rmdir -i' # 删除空目录前询问
对于重要目录,可以先使用-n参数进行模拟删除,确认无误后再执行真实删除:
bash复制# 模拟删除(只显示会删除什么,不实际执行)
rm -rnv old_project/
血泪教训:曾经有位同事在生产环境误执行
rm -rf / path/to/dir(/后面有空格),导致系统被删。因此务必养成检查命令再执行的习惯。
1.4 高级移动技巧
mv命令除了基本的移动功能外,还有一些高级用法:
bash复制# 批量移动特定类型文件
mv src/*.{jpg,png,gif} images/
# 使用通配符移动时保留目录结构
mkdir -p backup/2023
find . -name "*.log" -exec mv --backup=numbered {} backup/2023/ \;
移动大量文件时,rsync可能是更好的选择,它支持断点续传和进度显示:
bash复制rsync -avh --progress source/ destination/
2. vi编辑器深度解析
vi是Linux系统自带的强大文本编辑器,掌握它能在任何环境下高效编辑文件。
2.1 vi工作模式详解
vi有三种主要模式:
- 普通模式(Normal mode):执行命令和导航
- 插入模式(Insert mode):编辑文本
- 命令行模式(Command-line mode):执行保存等操作
模式切换技巧:
i进入插入模式(当前光标前)a进入插入模式(当前光标后)o在当前行下方新建一行并进入插入模式O在当前行上方新建一行ESC返回普通模式:进入命令行模式
2.2 高效编辑技巧
光标移动(普通模式下):
h/j/k/l:左/下/上/右w/W:向前移动一个单词(W忽略标点)b/B:向后移动一个单词0:行首$:行尾gg:文件开头G:文件末尾:123:跳转到第123行
文本操作:
dd:删除当前行yy:复制当前行p:粘贴u:撤销Ctrl+r:重做:%s/old/new/g:全局替换
2.3 高级配置技巧
创建~/.vimrc文件可以持久化vi配置:
vim复制" 显示行号
set number
" 语法高亮
syntax on
" 自动缩进
set autoindent
" 显示命令
set showcmd
" 搜索高亮
set hlsearch
" Tab转换为4个空格
set tabstop=4
set shiftwidth=4
set expandtab
3. Docker基础命令实战
Docker已成为现代开发和部署的标准工具,以下是核心命令的深度解析。
3.1 镜像管理
bash复制# 搜索镜像
docker search nginx
# 拉取镜像(明确指定版本更安全)
docker pull nginx:1.23-alpine
# 列出镜像
docker images
docker image ls
# 删除镜像
docker rmi nginx:1.23-alpine
# 导出镜像
docker save -o nginx.tar nginx:1.23-alpine
# 导入镜像
docker load -i nginx.tar
最佳实践:始终使用特定版本标签而非latest,确保环境一致性。
3.2 容器操作
bash复制# 运行容器(-d后台运行,--name指定名称)
docker run -d --name my_nginx -p 8080:80 nginx:1.23-alpine
# 列出运行中的容器
docker ps
# 列出所有容器(包括停止的)
docker ps -a
# 停止容器
docker stop my_nginx
# 启动已停止的容器
docker start my_nginx
# 进入容器shell
docker exec -it my_nginx /bin/sh
# 查看容器日志
docker logs -f my_nginx
# 删除容器
docker rm my_nginx
3.3 数据持久化
bash复制# 创建数据卷
docker volume create mydata
# 使用数据卷
docker run -d -v mydata:/app/data myapp
# 挂载主机目录
docker run -d -v /host/path:/container/path myapp
# 查看数据卷
docker volume inspect mydata
4. 常见问题排查指南
4.1 权限问题
bash复制# 查看文件权限
ls -l
# 修改文件权限
chmod 755 script.sh
# 修改文件所有者
chown user:group file
# Docker容器内权限问题通常需要:
docker run -u $(id -u):$(id -g) ...
4.2 空间不足
bash复制# 查看磁盘使用情况
df -h
# 查看目录大小
du -sh *
# 清理Docker资源
docker system prune
4.3 网络问题
bash复制# 检查端口监听
netstat -tulnp
ss -tulnp
# Docker网络检查
docker network ls
docker network inspect bridge
5. 高效工作流建议
- 命令别名:在
~/.bashrc中添加常用命令的别名
bash复制alias dps='docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"'
-
命令历史:使用
history和Ctrl+r搜索历史命令 -
脚本自动化:将重复操作编写成shell脚本
-
文档习惯:使用
man和--help查看命令文档 -
版本控制:对重要配置文件使用git管理
掌握这些Linux和Docker的基础操作后,你会发现服务器管理和应用部署效率大幅提升。关键在于多实践,将命令肌肉记忆化。我在实际工作中发现,熟练使用这些命令的组合,能解决90%的日常运维问题。