文件操作

查找文件

# 按名称查找文件
find /path/to/search -name "filename"

# 按类型查找(f=文件,d=目录)
find /path/to/search -type f -name "*.txt"

# 查找并删除
find /path/to/search -name "*.log" -delete

# 使用 fd(更快的替代品)
fd "pattern" /path/to/search

批量重命名

# 批量添加前缀
for file in *.txt; do mv "$file" "prefix_$file"; done

# 批量替换扩展名
for file in *.txt; do mv "$file" "${file%.txt}.md"; done

# 使用 rename 命令
rename 's/old/new/' *.txt

文件权限

# 修改文件权限
chmod 755 script.sh

# 递归修改目录权限
chmod -R 644 /path/to/dir

# 修改所有者
chown user:group file.txt

文本处理

heredoc

https://linuxize.com/post/bash-heredoc/

heredoc用于直接在命令行输入多行文本,并将其输入给命令

# 一般形式
[COMMAND] <<[-] 'DELIMITER'
  HERE-DOCUMENT
DELIMITER

# 直接在终端将多行文本输出到文件
cat <<EOF > ~/kustomization.yaml
line 1
line 2
EOF

# 直接在终端将多行文本输出到文件(禁止变量替换,原样输出)
cat <<'EOF' > ~/kustomization.yaml
line 1
$HOME
line 3
EOF

# 使用 <<- 以忽略heredoc的tab缩进,便于在判断或者循环代码块中使用
if true; then
    cat <<- EOF
    Line with a leading tab.
    EOF
fi

grep 搜索

# 基本搜索
grep "pattern" file.txt

# 递归搜索目录
grep -r "pattern" /path/to/dir

# 忽略大小写
grep -i "pattern" file.txt

# 显示行号
grep -n "pattern" file.txt

# 反向匹配(不包含)
grep -v "pattern" file.txt

# 使用正则表达式
grep -E "pattern1|pattern2" file.txt

sed 文本替换

# 替换第一个匹配
sed 's/old/new/' file.txt

# 替换所有匹配
sed 's/old/new/g' file.txt

# 直接修改文件
sed -i 's/old/new/g' file.txt

# 删除包含特定模式的行
sed '/pattern/d' file.txt

# 在特定行后插入内容
sed '3a\new line' file.txt

awk 文本处理

# 打印特定列
awk '{print $1, $3}' file.txt

# 使用分隔符
awk -F',' '{print $1}' file.csv

# 条件过滤
awk '$3 > 100 {print $1}' file.txt

# 计算总和
awk '{sum += $1} END {print sum}' file.txt

系统管理

进程管理

# 查看进程
ps aux | grep process_name

# 实时监控进程
top
htop

# 杀死进程
kill PID
kill -9 PID  # 强制杀死

# 按名称杀死进程
pkill process_name
killall process_name

磁盘管理

# 查看磁盘使用情况
df -h

# 查看目录大小
du -sh /path/to/dir

# 查看当前目录下各子目录大小
du -h --max-depth=1

# 查找大文件
find / -type f -size +100M

网络操作

# 查看网络连接
netstat -tuln
ss -tuln

# 测试端口
nc -zv host port
telnet host port

# 下载文件
wget URL
curl -O URL

# 查看本机 IP
ip addr show
ifconfig

Git

压缩解压

tar

# 压缩
tar -czf archive.tar.gz /path/to/dir

# 解压
tar -xzf archive.tar.gz

# 查看压缩包内容
tar -tzf archive.tar.gz

# 解压到指定目录
tar -xzf archive.tar.gz -C /path/to/extract

zip

# 压缩文件
zip archive.zip file1 file2

# 压缩目录
zip -r archive.zip /path/to/dir

# 解压
unzip archive.zip

# 解压到指定目录
unzip archive.zip -d /path/to/extract

实用技巧

快捷键

# Ctrl+C: 终止当前命令
# Ctrl+Z: 暂停当前命令
# Ctrl+D: 退出当前 shell
# Ctrl+L: 清屏
# Ctrl+A: 光标移到行首
# Ctrl+E: 光标移到行尾
# Ctrl+U: 删除光标前的内容
# Ctrl+K: 删除光标后的内容
# Ctrl+R: 搜索历史命令

进程替换

进程替换允许你把一个命令的输出或输入当作文件来使用,语法如下:

<(command) # 把命令的输出当作一个只读文件
>(command) # 把命令的输入当作一个只写文件

有趣的例子:

# <(ls /etc) 会生成一个临时的伪文件,比如 /dev/fd/63;
# <(ls /bin) 会生成另一个,比如 /dev/fd/62;
# 然后 diff 命令读取这两个“文件”并进行比较。
# 这样 diff 就能比较两个命令的输出,而不需要先写入临时文件。
diff <(ls /etc) <(ls /bin)

# 将目录下所有日志文件的路径,保存到数组变量中
# 通过管道操作符会有问题,比如
# command | mapfile ARR
# 管道的右侧是一个新的shell进程,因此ARR存在于新进程中,命令结束后,ARR在本shell进程找不到
mapfile ARR < <(find -type f -name "*.log")

# 边下载边计算校验值
curl -L https://example.com/file.tar.gz | tee >(sha256sum > checksum.txt) > file.tar.gz

# 主输出同时写入:
# grep error → errors.txt,将error日志写入error.txt
# grep warn → warnings.txt,将warn日志写入warnings.txt
# 以及 all.txt,将所有日志写入all.txt
# 非常适合日志分流。
tee >(grep error > errors.txt) >(grep warn > warnings.txt) > all.txt

Docker 相关

容器管理

# 列出容器
docker ps
docker ps -a  # 包括已停止的

# 启动/停止容器
docker start container_id
docker stop container_id

# 删除容器
docker rm container_id

# 进入容器
docker exec -it container_id /bin/bash

# 查看日志
docker logs container_id

镜像管理

# 列出镜像
docker images

# 拉取镜像
docker pull image_name:tag

# 删除镜像
docker rmi image_id

# 构建镜像
docker build -t image_name:tag .

# 清理未使用的镜像
docker image prune

性能分析

系统监控

# CPU 使用率
top
htop

# 内存使用
free -h

# IO 监控
iostat
iotop

# 网络流量
iftop
nethogs

日志分析

# 实时查看日志
tail -f /var/log/syslog

# 查看最后 N 行
tail -n 100 /var/log/syslog

# 搜索日志中的错误
grep -i error /var/log/syslog

# 统计日志中的出现次数
grep "pattern" /var/log/syslog | wc -l