软件工程师


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)

二、基础命令(按类别)

  1. 文件与目录操作
  • pwd:打印当前路径
BASH
1# bash 2pwd 3
  • ls:列出目录
BASH
1# bash 2ls -lah # 包含隐藏文件、显示人类可读大小 3ls -l /etc # 详细列出 /etc 4
  • cd:切换目录
BASH
1# bash 2cd /var/log 3cd - # 返回上一个目录 4
  • mkdir / rmdir:创建/删除空目录
BASH
1# bash 2mkdir -p projects/demo/src # 递归创建 3rmdir emptydir # 仅能删除空目录 4
  • cp / mv / rm:复制、移动/重命名、删除
BASH
1# bash 2cp -r docs docs_backup # 递归复制目录 3mv app.log app.log.1 # 重命名文件 4rm -i file.txt # 交互式删除(更安全) 5
  • touch / stat:创建或更新时间戳 / 查看文件详细信息
BASH
1# bash 2touch new.txt 3stat new.txt 4
  • ln:创建链接
BASH
1# bash 2ln file.txt file.hardlink # 硬链接 3ln -s /var/log logs_link # 软链接 4
  1. 查看与搜索
  • cat / tac / nl:打印文件,倒序打印,加行号
BASH
1# bash 2cat /etc/hosts 3nl -ba /etc/hosts # 所有行编号 4
  • less / more:分页查看大文件
BASH
1# bash 2less /var/log/syslog # 上下翻页、搜索:输入 /关键字 3
  • head / tail:查看开头/结尾
BASH
1# bash 2head -n 20 /etc/passwd 3tail -f /var/log/syslog # 实时跟踪 4
  • grep:文本匹配
BASH
1# bash 2grep -n "ERROR" app.log # 显示匹配行号 3grep -r --color "TODO" src/ # 递归目录,彩色高亮 4grep -E "foo|bar" file.txt # 扩展正则 5
  • find:按条件查找文件
BASH
1# bash 2find . -type f -name "*.log" -size +10M 3find /var -type f -mtime -1 # 最近一天修改 4
  • locate:按数据库快速查找(需先更新数据库)
BASH
1# bash 2sudo updatedb 3locate ssh_config 4
  1. 文本处理与管道
  • sort / uniq:排序与去重
BASH
1# bash 2sort names.txt | uniq # 去重 3uniq -c <(sort names.txt) | sort -nr # 统计频次并倒序 4
  • cut / paste / join:列裁剪、合并、按键合并
BASH
1# 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:字符转换
BASH
1# bash 2tr '[:lower:]' '[:upper:]' < words.txt # 转为大写 3tr -d '\r' < file.txt > file_unix.txt # 删除回车(DOS 转 UNIX) 4
  • awk:按列处理,支持脚本化
BASH
1# bash 2awk -F':' '{print $1, $3}' /etc/passwd # 以:为分隔,打印第1和3列 3awk '{sum+=$NF} END{print sum}' nums.txt # 累加最后一列 4
  • sed:流编辑,替换/删除/插入
BASH
1# bash 2sed -n '1,10p' file.txt # 打印1到10行 3sed 's/error/ERROR/g' app.log > app_upper.log # 全局替换 4
  • wc:统计
BASH
1# bash 2wc -l app.log # 行数 3wc -w app.log # 单词数 4
  • tee:边输出边写文件
BASH
1# bash 2echo "Hello" | tee hello.txt 3
  1. 权限、用户与组
  • chmod:修改权限
BASH
1# bash 2chmod 754 run.sh # 数字模式 3chmod u+x script.sh # 符号模式:给用户加执行 4
  • chown / chgrp:变更所有者/组
BASH
1# bash 2sudo chown root:root /var/myfile 3sudo chgrp developers project/ -R 4
  • umask:默认权限掩码
BASH
1# bash 2umask # 查看当前 umask 3umask 022 # 新文件默认去除组/其他写权限 4
  • id / whoami / groups:身份信息
BASH
1# bash 2id 3whoami 4groups 5
  1. 进程与作业控制
  • ps / top:进程列表与实时监控
BASH
1# bash 2ps aux | grep nginx 3top # 交互式查看,按 k 可杀进程,h 查看帮助 4
  • pgrep / pkill / kill:按名查杀
BASH
1# bash 2pgrep -fl python 3pkill -9 node 4kill -TERM 12345 5
  • nice / renice:调整优先级
BASH
1# bash 2nice -n 10 long_job.sh 3sudo renice -n -5 -p 12345 4
  • jobs / fg / bg / nohup / disown:前后台控制
BASH
1# bash 2sleep 100 & # 放后台 3jobs 4fg %1 # 拉到前台 5nohup long_job.sh & # 忽略挂起信号 6disown %1 # 拆离作业 7
  1. 网络工具
  • ip / ifconfig:网络配置与查看
BASH
1# bash 2ip a 3ip r 4sudo ip link set eth0 up 5
  • ss:查看套接字与端口
BASH
1# bash 2ss -tulnp # 监听的 TCP/UDP 端口 3
  • ping / traceroute:连通性与路径
BASH
1# bash 2ping -c 4 example.com 3traceroute example.com # 若未安装:sudo apt install traceroute 4
  • nslookup / dig:DNS 查询
BASH
1# bash 2dig A example.com 3dig +short MX gmail.com 4
  • curl / wget:HTTP 请求与下载
BASH
1# 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:远程登录与文件同步
BASH
1# bash 2ssh user@host 3scp ./file.txt user@host:/tmp/ 4sftp user@host 5rsync -av --progress ./data/ user@host:/opt/data/ 6
  • nc (netcat):端口测试/简易服务器
BASH
1# bash 2nc -l 8080 3nc -vz host 22 # 探测端口 4
  1. 软件包管理(按发行版)
  • Debian/Ubuntu: apt
BASH
1# bash 2sudo apt update 3sudo apt install htop 4apt search redis 5sudo apt remove htop 6
  • CentOS/RHEL: yum/dnf
BASH
1# bash 2sudo dnf install htop 3sudo dnf remove htop 4
  • Arch: pacman
BASH
1# bash 2sudo pacman -Syu 3sudo pacman -S htop 4
  1. 系统信息与日志
  • uname / lsb_release / os-release:系统信息
BASH
1# bash 2uname -a 3cat /etc/os-release 4
  • df / du:磁盘占用
BASH
1# bash 2df -h 3du -sh /var/log/* 4
  • free / vmstat / iostat:内存与IO
BASH
1# bash 2free -h 3vmstat 1 5 4iostat -xz 1 3 # 需安装 sysstat 5
  • lsof / dmesg / journalctl:打开文件/内核消息/系统日志
BASH
1# bash 2sudo lsof -i :80 3dmesg | tail 4journalctl -xe # 最近错误 5
  • uptime / who / w / last:系统与登录
BASH
1# bash 2uptime 3who 4w 5last 6
  1. 文件系统与磁盘
  • lsblk / blkid:块设备与UUID
BASH
1# bash 2lsblk -f 3sudo blkid 4
  • mount / umount:挂载/卸载
BASH
1# bash 2sudo mount /dev/sdb1 /mnt 3sudo umount /mnt 4
  • fdisk / parted:分区管理(谨慎操作)
BASH
1# bash 2sudo fdisk /dev/sdb 3
  • mkfs / fsck:格式化与检查(谨慎操作)
BASH
1# bash 2sudo mkfs.ext4 /dev/sdb1 3sudo fsck -f /dev/sdb1 4
  1. 压缩与归档
  • tar:打包与解包
BASH
1# bash 2tar -czf site.tar.gz ./site # 压缩 3tar -xzf site.tar.gz # 解压到当前目录 4tar -tf site.tar.gz # 列表 5
  • gzip / bzip2 / xz / zip:
BASH
1# bash 2gzip file.txt # 生成 file.txt.gz 3gunzip file.txt.gz 4zip -r archive.zip ./docs 5unzip archive.zip 6
  1. 定时任务
  • crontab / systemd timer
BASH
1# bash 2crontab -e # 编辑当前用户的定时任务 3# 例如:每天1:30执行备份 4# 30 1 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1 5
  1. 编辑器入门
  • nano / vim
BASH
1# bash 2nano file.txt 3vim file.txt # 基本:i 插入,:w 保存,:q 退出,:wq 保存并退出 4
  1. 安全与提权
  • sudo / su / visudo:
BASH
1# bash 2sudo -v # 更新认证缓存 3sudo -l # 查看权限 4sudo visudo # 编辑 /etc/sudoers(安全校验) 5
  • 防火墙 ufw(Ubuntu):
BASH
1# bash 2sudo ufw status 3sudo ufw allow 22/tcp 4sudo ufw enable 5

三、实用组合示例(管道思维)

  • 统计访问日志的 Top 10 IP
BASH
1# bash 2awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10 3
  • 查找大于 100MB 的日志并压缩
BASH
1# bash 2find /var/log -type f -name "*.log" -size +100M -print0 | xargs -0 -I{} gzip "{}" 3
  • 监控某进程打开的文件变化
BASH
1# bash 2watch -n 1 "lsof -p $(pgrep -n myservice) | wc -l" 3

四、进阶命令与主题

  1. awk 进阶
  • 条件、格式化与内置变量
BASH
1# 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
  1. sed 进阶
BASH
1# bash 2# 仅在匹配行进行替换 3sed '/ERROR/s/debug/DEBUG/g' app.log 4 5# 多点编辑:删除空行并去掉行首空格 6sed -e '/^$/d' -e 's/^[[:space:]]\+//' file.txt 7
  1. find + -exec 与 xargs
BASH
1# 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
  1. Bash 脚本与健壮性
BASH
1# 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
  1. 进程/系统调试
  • strace:系统调用跟踪
BASH
1# bash 2sudo strace -p $(pgrep -n nginx) -o /tmp/nginx.strace 3
  • ltrace:库调用跟踪
BASH
1# bash 2sudo ltrace -p $(pgrep -n nginx) -o /tmp/nginx.ltrace 3
  • perf / valgrind / gdb(需安装)
BASH
1# bash 2sudo perf top 3valgrind --leak-check=full ./app 4gdb -q ./app -ex "run" -ex "bt" # 运行并打印堆栈 5
  1. systemd 深入
  • 管理服务与日志过滤
BASH
1# bash 2sudo systemctl status nginx 3sudo systemctl enable nginx --now 4journalctl -u nginx -f # 仅查看某服务日志,跟随 5journalctl --since "1 hour ago" # 时间过滤 6
  • 自定义 unit 示例
BASH
1# 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
  1. 网络排查进阶
  • tcpdump(需 sudo)
BASH
1# bash 2sudo tcpdump -i any -nn port 80 -c 20 3
  • ss 高级过滤
BASH
1# bash 2ss -p state established '( sport = :80 or dport = :80 )' 3
  1. Git 与构建工具
BASH
1# 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
  1. 容器与编排(基础)
BASH
1# bash 2docker run --rm -it alpine:latest sh 3docker ps -a 4docker logs -f mycontainer 5docker exec -it mycontainer sh 6
  1. 安全与防护进阶
  • SELinux(RHEL/CentOS)
BASH
1# bash 2getenforce 3sudo semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?" 4sudo restorecon -Rv /srv/www 5
  • iptables/ufw 简述(按发行版使用 ufw 或 firewall-cmd 更易)
  1. 命令行生产力技巧
  • 快捷历史与别名
BASH
1# bash 2history | tail 3alias ll='ls -lah' 4!! # 上一条命令 5!$ # 上一条命令最后一个参数 6
  • 进程替换与子进程
BASH
1# bash 2diff <(sort a.txt) <(sort b.txt) 3
  1. 常见排错范式
  • CPU/内存/IO/网络/日志五要素
BASH
1# 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 等),或有具体场景(开发、运维、数据处理),告诉我,我可以按你的环境定制更贴近实际的命令清单与脚本模板。



Chatbox AI

https://chatboxai.app