Docker-linux基础命令
本页由同名 OneNote 笔记转换而来,可直接在线阅读;原始笔记文件见「Go语言相关笔记」页的原始链接。
附件文档全文(Linux 命令详解)#
软件工程师

1. Linux命令详解
SYSTEM:
你是一个高级软件工程师,你需要帮我解答各种技术难题、设计技术方案以及编写代码。你编写的代码必须可以正常运行,而且没有任何 Bug 和其他问题。如果你的回答中用代码,请用 markdown 代码块,并且在代码块中标明使用的编程语言。
USER:
讲解Linux的基础命令。要求全面,详细,有实例,列表讲解,然后讲解进阶命令
ASSISTANT:
下面是一份系统化的 Linux 命令讲解,分为基础与进阶两大部分。每个命令都有说明与可运行的示例。为避免误操作,示例尽量在安全的目录或只读场景下进行;涉及系统改动的命令均用 sudo,确保你有相应权限。
一、基础概念
- 路径类型:
- 绝对路径:从根目录 / 开始,例如 /etc/hosts
- 相对路径:相对当前工作目录,例如 ./logs 或 ../tmp
- 通配符与扩展:
- 星号 * 匹配任意字符;问号 ? 匹配一个字符;方括号 [abc] 指定集合
- 大括号扩展:file{1..3}.txt → file1.txt file2.txt file3.txt
- 重定向与管道:
覆盖输出,>> 追加输出,2> 重定向标准错误,| 用上一个命令的输出作为下一个命令输入
- 权限位:
- rwx 表示读、写、执行,分属用户/组/其他;数字表示法如 754 → 用户 rwx(7)、组 r-x(5)、其他 r--(4)
二、基础命令(按类别)
- 文件与目录操作
- pwd:打印当前路径
BASH1# bash 2pwd 3
- ls:列出目录
BASH1# bash 2ls -lah # 包含隐藏文件、显示人类可读大小 3ls -l /etc # 详细列出 /etc 4
- cd:切换目录
BASH1# bash 2cd /var/log 3cd - # 返回上一个目录 4
- mkdir / rmdir:创建/删除空目录
BASH1# bash 2mkdir -p projects/demo/src # 递归创建 3rmdir emptydir # 仅能删除空目录 4
- cp / mv / rm:复制、移动/重命名、删除
BASH1# bash 2cp -r docs docs_backup # 递归复制目录 3mv app.log app.log.1 # 重命名文件 4rm -i file.txt # 交互式删除(更安全) 5
- touch / stat:创建或更新时间戳 / 查看文件详细信息
BASH1# bash 2touch new.txt 3stat new.txt 4
- ln:创建链接
BASH1# bash 2ln file.txt file.hardlink # 硬链接 3ln -s /var/log logs_link # 软链接 4
- 查看与搜索
- cat / tac / nl:打印文件,倒序打印,加行号
BASH1# bash 2cat /etc/hosts 3nl -ba /etc/hosts # 所有行编号 4
- less / more:分页查看大文件
BASH1# bash 2less /var/log/syslog # 上下翻页、搜索:输入 /关键字 3
- head / tail:查看开头/结尾
BASH1# bash 2head -n 20 /etc/passwd 3tail -f /var/log/syslog # 实时跟踪 4
- grep:文本匹配
BASH1# bash 2grep -n "ERROR" app.log # 显示匹配行号 3grep -r --color "TODO" src/ # 递归目录,彩色高亮 4grep -E "foo|bar" file.txt # 扩展正则 5
- find:按条件查找文件
BASH1# bash 2find . -type f -name "*.log" -size +10M 3find /var -type f -mtime -1 # 最近一天修改 4
- locate:按数据库快速查找(需先更新数据库)
BASH1# bash 2sudo updatedb 3locate ssh_config 4
- 文本处理与管道
- sort / uniq:排序与去重
BASH1# bash 2sort names.txt | uniq # 去重 3uniq -c <(sort names.txt) | sort -nr # 统计频次并倒序 4
- cut / paste / join:列裁剪、合并、按键合并
BASH1# bash 2cut -d':' -f1,3 /etc/passwd # 以冒号分隔,取第1和3列 3paste file1.txt file2.txt # 按行合并两文件 4join -t',' -1 1 -2 1 a.csv b.csv # 以第1列为键连接两CSV 5
- tr:字符转换
BASH1# bash 2tr '[:lower:]' '[:upper:]' < words.txt # 转为大写 3tr -d '\r' < file.txt > file_unix.txt # 删除回车(DOS 转 UNIX) 4
- awk:按列处理,支持脚本化
BASH1# bash 2awk -F':' '{print $1, $3}' /etc/passwd # 以:为分隔,打印第1和3列 3awk '{sum+=$NF} END{print sum}' nums.txt # 累加最后一列 4
- sed:流编辑,替换/删除/插入
BASH1# bash 2sed -n '1,10p' file.txt # 打印1到10行 3sed 's/error/ERROR/g' app.log > app_upper.log # 全局替换 4
- wc:统计
BASH1# bash 2wc -l app.log # 行数 3wc -w app.log # 单词数 4
- tee:边输出边写文件
BASH1# bash 2echo "Hello" | tee hello.txt 3
- 权限、用户与组
- chmod:修改权限
BASH1# bash 2chmod 754 run.sh # 数字模式 3chmod u+x script.sh # 符号模式:给用户加执行 4
- chown / chgrp:变更所有者/组
BASH1# bash 2sudo chown root:root /var/myfile 3sudo chgrp developers project/ -R 4
- umask:默认权限掩码
BASH1# bash 2umask # 查看当前 umask 3umask 022 # 新文件默认去除组/其他写权限 4
- id / whoami / groups:身份信息
BASH1# bash 2id 3whoami 4groups 5
- 进程与作业控制
- ps / top:进程列表与实时监控
BASH1# bash 2ps aux | grep nginx 3top # 交互式查看,按 k 可杀进程,h 查看帮助 4
- pgrep / pkill / kill:按名查杀
BASH1# bash 2pgrep -fl python 3pkill -9 node 4kill -TERM 12345 5
- nice / renice:调整优先级
BASH1# bash 2nice -n 10 long_job.sh 3sudo renice -n -5 -p 12345 4
- jobs / fg / bg / nohup / disown:前后台控制
BASH1# bash 2sleep 100 & # 放后台 3jobs 4fg %1 # 拉到前台 5nohup long_job.sh & # 忽略挂起信号 6disown %1 # 拆离作业 7
- 网络工具
- ip / ifconfig:网络配置与查看
BASH1# bash 2ip a 3ip r 4sudo ip link set eth0 up 5
- ss:查看套接字与端口
BASH1# bash 2ss -tulnp # 监听的 TCP/UDP 端口 3
- ping / traceroute:连通性与路径
BASH1# bash 2ping -c 4 example.com 3traceroute example.com # 若未安装:sudo apt install traceroute 4
- nslookup / dig:DNS 查询
BASH1# bash 2dig A example.com 3dig +short MX gmail.com 4
- curl / wget:HTTP 请求与下载
BASH1# bash 2curl -I https://example.com # 仅请求头 3curl -s https://api.github.com | jq '.' # 与 jq 配合(需安装) 4wget -O page.html https://example.com 5
- ssh / scp / sftp / rsync:远程登录与文件同步
BASH1# bash 2ssh user@host 3scp ./file.txt user@host:/tmp/ 4sftp user@host 5rsync -av --progress ./data/ user@host:/opt/data/ 6
- nc (netcat):端口测试/简易服务器
BASH1# bash 2nc -l 8080 3nc -vz host 22 # 探测端口 4
- 软件包管理(按发行版)
- Debian/Ubuntu: apt
BASH1# bash 2sudo apt update 3sudo apt install htop 4apt search redis 5sudo apt remove htop 6
- CentOS/RHEL: yum/dnf
BASH1# bash 2sudo dnf install htop 3sudo dnf remove htop 4
- Arch: pacman
BASH1# bash 2sudo pacman -Syu 3sudo pacman -S htop 4
- 系统信息与日志
- uname / lsb_release / os-release:系统信息
BASH1# bash 2uname -a 3cat /etc/os-release 4
- df / du:磁盘占用
BASH1# bash 2df -h 3du -sh /var/log/* 4
- free / vmstat / iostat:内存与IO
BASH1# bash 2free -h 3vmstat 1 5 4iostat -xz 1 3 # 需安装 sysstat 5
- lsof / dmesg / journalctl:打开文件/内核消息/系统日志
BASH1# bash 2sudo lsof -i :80 3dmesg | tail 4journalctl -xe # 最近错误 5
- uptime / who / w / last:系统与登录
BASH1# bash 2uptime 3who 4w 5last 6
- 文件系统与磁盘
- lsblk / blkid:块设备与UUID
BASH1# bash 2lsblk -f 3sudo blkid 4
- mount / umount:挂载/卸载
BASH1# bash 2sudo mount /dev/sdb1 /mnt 3sudo umount /mnt 4
- fdisk / parted:分区管理(谨慎操作)
BASH1# bash 2sudo fdisk /dev/sdb 3
- mkfs / fsck:格式化与检查(谨慎操作)
BASH1# bash 2sudo mkfs.ext4 /dev/sdb1 3sudo fsck -f /dev/sdb1 4
- 压缩与归档
- tar:打包与解包
BASH1# bash 2tar -czf site.tar.gz ./site # 压缩 3tar -xzf site.tar.gz # 解压到当前目录 4tar -tf site.tar.gz # 列表 5
- gzip / bzip2 / xz / zip:
BASH1# bash 2gzip file.txt # 生成 file.txt.gz 3gunzip file.txt.gz 4zip -r archive.zip ./docs 5unzip archive.zip 6
- 定时任务
- crontab / systemd timer
BASH1# bash 2crontab -e # 编辑当前用户的定时任务 3# 例如:每天1:30执行备份 4# 30 1 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1 5
- 编辑器入门
- nano / vim
BASH1# bash 2nano file.txt 3vim file.txt # 基本:i 插入,:w 保存,:q 退出,:wq 保存并退出 4
- 安全与提权
- sudo / su / visudo:
BASH1# bash 2sudo -v # 更新认证缓存 3sudo -l # 查看权限 4sudo visudo # 编辑 /etc/sudoers(安全校验) 5
- 防火墙 ufw(Ubuntu):
BASH1# bash 2sudo ufw status 3sudo ufw allow 22/tcp 4sudo ufw enable 5
三、实用组合示例(管道思维)
- 统计访问日志的 Top 10 IP
BASH1# bash 2awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10 3
- 查找大于 100MB 的日志并压缩
BASH1# bash 2find /var/log -type f -name "*.log" -size +100M -print0 | xargs -0 -I{} gzip "{}" 3
- 监控某进程打开的文件变化
BASH1# bash 2watch -n 1 "lsof -p $(pgrep -n myservice) | wc -l" 3
四、进阶命令与主题
- awk 进阶
- 条件、格式化与内置变量
BASH1# bash 2# 过滤第5列大于100的行,并自定义输出格式 3awk 'BEGIN{FS=OFS=","} $5>100 {printf "user=%s, score=%d\n", $1, $5}' data.csv 4 5# 使用内置变量 NR(行号) 与 NF(列数) 6awk '{print NR, NF, $NF}' file.txt 7
- sed 进阶
BASH1# bash 2# 仅在匹配行进行替换 3sed '/ERROR/s/debug/DEBUG/g' app.log 4 5# 多点编辑:删除空行并去掉行首空格 6sed -e '/^$/d' -e 's/^[[:space:]]\+//' file.txt 7
- find + -exec 与 xargs
BASH1# bash 2# 对查到的文件执行命令,{} 代表当前文件 3find . -type f -name "*.tmp" -exec rm -v {} \; 4 5# 使用 -print0 与 xargs -0 安全处理空格 6find . -type f -name "*.jpg" -print0 | xargs -0 -I{} convert "{}" -resize 50% "{}" 7
- Bash 脚本与健壮性
BASH1# bash 2#!/usr/bin/env bash 3set -euo pipefail 4IFS=$'\n\t' 5 6log() { echo "[$(date +'%F %T')] $*"; } 7 8usage() { echo "Usage: $0 -f file -n number"; } 9 10# 参数解析 11while getopts ":f:n:" opt; do 12 case "$opt" in 13 f) FILE="$OPTARG" ;; 14 n) NUM="$OPTARG" ;; 15 *) usage; exit 1 ;; 16 esac 17done 18 19: "${FILE:?required}"; : "${NUM:?required}" 20 21log "Processing $FILE with NUM=$NUM" 22awk -v num="$NUM" 'NR<=num {print}' "$FILE" | tee output.txt 23
- 进程/系统调试
- strace:系统调用跟踪
BASH1# bash 2sudo strace -p $(pgrep -n nginx) -o /tmp/nginx.strace 3
- ltrace:库调用跟踪
BASH1# bash 2sudo ltrace -p $(pgrep -n nginx) -o /tmp/nginx.ltrace 3
- perf / valgrind / gdb(需安装)
BASH1# bash 2sudo perf top 3valgrind --leak-check=full ./app 4gdb -q ./app -ex "run" -ex "bt" # 运行并打印堆栈 5
- systemd 深入
- 管理服务与日志过滤
BASH1# bash 2sudo systemctl status nginx 3sudo systemctl enable nginx --now 4journalctl -u nginx -f # 仅查看某服务日志,跟随 5journalctl --since "1 hour ago" # 时间过滤 6
- 自定义 unit 示例
BASH1# bash 2# /etc/systemd/system/myjob.service 3# [Unit] 4# Description=My Job 5# 6# [Service] 7# Type=simple 8# ExecStart=/usr/local/bin/myjob.sh 9# Restart=on-failure 10# 11# [Install] 12# WantedBy=multi-user.target 13 14sudo systemctl daemon-reload 15sudo systemctl start myjob 16sudo systemctl enable myjob 17
- 网络排查进阶
- tcpdump(需 sudo)
BASH1# bash 2sudo tcpdump -i any -nn port 80 -c 20 3
- ss 高级过滤
BASH1# bash 2ss -p state established '( sport = :80 or dport = :80 )' 3
- Git 与构建工具
BASH1# bash 2git log --oneline --graph --decorate --all 3git rebase -i HEAD~5 4git bisect start ; git bisect bad ; git bisect good v1.2.3 5 6make -j$(nproc) 7cmake -S . -B build && cmake --build build 8
- 容器与编排(基础)
BASH1# bash 2docker run --rm -it alpine:latest sh 3docker ps -a 4docker logs -f mycontainer 5docker exec -it mycontainer sh 6
- 安全与防护进阶
- SELinux(RHEL/CentOS)
BASH1# bash 2getenforce 3sudo semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?" 4sudo restorecon -Rv /srv/www 5
- iptables/ufw 简述(按发行版使用 ufw 或 firewall-cmd 更易)
- 命令行生产力技巧
- 快捷历史与别名
BASH1# bash 2history | tail 3alias ll='ls -lah' 4!! # 上一条命令 5!$ # 上一条命令最后一个参数 6
- 进程替换与子进程
BASH1# bash 2diff <(sort a.txt) <(sort b.txt) 3
- 常见排错范式
- CPU/内存/IO/网络/日志五要素
BASH1# bash 2top | head -n 20 3free -h 4iostat -xz 1 3 5ss -tulnp 6journalctl -p err -n 100 7
五、学习与使用建议
- 将命令按任务组合,熟悉标准输入输出与管道。
- 优先使用安全选项:例如 rm -i,find 配合 -print0 与 xargs -0。
- 脚本中设置 set -euo pipefail,减少隐性错误。
- 区分发行版包管理器与服务管理器(systemd vs SysV)。
如果你使用的是特定发行版(如 Ubuntu、CentOS、Arch 等),或有具体场景(开发、运维、数据处理),告诉我,我可以按你的环境定制更贴近实际的命令清单与脚本模板。
<hr />
<a href="https://chatboxai.app" target="_blank">
<img src='https://chatboxai.app/icon.png'>
<b style='font-size:30px'>Chatbox AI</b>
</a>
<p><a a href="https://chatboxai.app" target="_blank">https://chatboxai.app</a></p>
</div>