2026-09 补充:Linux 工具实战专题 把本文的基础命令与 18 个诊断、链接、传输工具串起来,含操作 GIF 和 Docker 实验。本文新增的基础与文本处理练习 保留原笔记地址,不另建重复命令大全。
实战补充:先确认命令与操作对象
以下例子面向 Ubuntu 的 Bash / GNU 工具。macOS 的 BSD sed、find、stat 等参数存在差异;可进入 Linux 教学容器 使用统一环境。这一节是工程练习说明,不把所有系统管理操作算作 18 组动画的实测结果。
type -a printf command -v grephelp read man 1 printf man 3 printf grep --version
type -a 帮你区分别名、函数、内建和可执行文件;command -v 查询当前命令解析结果。man 1 是命令手册,man 3 是库函数,两者不是同一个接口。Shell 内建优先查 help。容器为了减小体积可能不装 man 数据库,不能因此判断命令不存在。
操作前先问四件事:路径是否正确、目标属于谁、是否只读、失败后能否恢复。尤其不要拿教程里的磁盘设备名直接格式化自己的磁盘。
文件名不是按空格切开的文本
例如当前目录确实有 trial one.log 和 trial two.log,想统计行数:
find . -maxdepth 1 -type f -name 'trial*.log' -print find . -maxdepth 1 -type f -name 'trial*.log' -exec wc -l -- {} + find . -maxdepth 1 -type f -name 'trial*.log' -print0 | xargs -0 -r wc -l --
先预览命中的集合。-exec … {} + 直接传递文件参数;-print0 配 xargs -0 则用 NUL 而不是空白分隔。-r 是 GNU xargs 的无输入不运行选项,-- 结束选项解析。不要改成 for f in $(ls),带空格、换行或通配字符的名字会出问题。NUL 分隔能解决名字解析问题,不能消除查找后文件被替换的竞争条件。GNU Findutils:安全文件名处理
实战补充:把日志变成可以验证的统计
假设 events.log 只有下面六行,每行字段之间以空格分隔:
09:00 INFO camera 12 09:01 WARN camera 30 09:02 ERROR planner 80 09:03 INFO planner 10 09:04 ERROR camera 100 09:05 WARN camera 25
这里第 4 列是本例定义的耗时毫秒,不是任意真实日志都遵循的格式。先明确数据约定,再选工具。
grep 选择行,awk 选择字段并聚合
grep -nE ' (ERROR|WARN) ' events.log grep -nF 'ERROR planner' events.log awk '$2 == "ERROR" {sum[$3] += $4; count[$3]++} END {for (name in sum) print name, count[name], sum[name]/count[name]}' events.log | LC_ALL=C sort
第一条输出 4 条异常或警告行;第二条把模式当固定字符串。第三条结果应为 camera 1 100 和 planner 1 80。awk 的关联数组遍历顺序不稳定,末尾排序让结果适合比较。grep -w 的“单词”边界与日志字段边界也不是同一回事,字段判断交给 awk 更清楚。GNU Grep:匹配控制
普通空白分隔适合这个玩具日志;CSV 的引号、嵌入逗号、转义与多行字段,不应直接交给 awk -F, 假装完整解析。
sort / uniq / cut 不是随意换顺序的积木
awk '{print $2}' events.log | LC_ALL=C sort | uniq -c awk '$2 == "ERROR" {print $4, $3}' events.log | sort -nr cut -d ' ' -f 3 events.log
uniq 只合并相邻的相同行,所以计数前先排序;不加排序会把分散的相同级别分开计数。sort -n 比数字,否则字符串 100 可能排在 25 前;cut -d ' ' 只认一个字面空格,多空格日志会出现空字段,awk 默认的空白字段规则不同。
sed 先输出,再决定要不要写回
sed -n '2,4p' events.log sed 's/ WARN / WARNING /g' events.log
第一条只输出第 2–4 行;第二条输出替换后的内容,并不改变原文件。确认差异、备份策略和目标后再考虑写回。sed -i 的备份语法跨 GNU/BSD 有差异;也不要把“原地修改”理解为一定保持原 inode、硬链接关系和全部元数据。
管道的成功,不只看最后一个命令
set -o pipefailgrep -E ' ERROR ' events.log | awk '{print $3}' | sort pipeline_status=("${PIPESTATUS[@]} " ) printf '%s\n' "${pipeline_status[*]} "
必须紧接管道保存 PIPESTATUS;后续任何命令都可能覆盖它。Bash 的 pipefail 让上游失败影响整条管道状态,但 grep 返回 1 表示没找到匹配,不一定是故障;2 才是错误类状态。配合 set -e 时应显式处理“无结果”这种正常业务情况。
实战补充:网络排查按层走
ip -br address ip route ss -lnt getent ahosts localhost curl --max-time 5 -sS -o /dev/null \ -w 'status=%{http_code} connect=%{time_connect} first_byte=%{time_starttransfer} total=%{time_total}\n' \ http://127.0.0.1:4001/
最后一条只是服务地址模板:宿主机若有 Hexo 监听 4001 可以测;隔离教学容器中的 127.0.0.1 是容器自己,不是宿主机。不要把连接失败都叫作“DNS 问题”,也不要把 HTTP 500 当 TCP 无法连接。
ss -lnt 先确认监听地址和端口;是否能看到所属进程还受权限和 PID 命名空间影响。DNS 正常不代表路由可达,TCP 建连正常不代表应用及时响应。ICMP 被过滤时,ping 失败也不能单独证明 HTTP 服务不可用。
网页访问还有一个很容易忽视的边界:HTML 来自本机,不代表它引用的脚本、字体、图片也来自本机。用 HTTP 耗时确认服务器响应,再用浏览器资源面板分析真实的加载依赖,不能把两者混为一个时间。
实战补充:磁盘、身份与服务边界
df -h .df -i .du -sh .findmnt -T . id stat -c '%A %U:%G %n' .namei -l /work/out ps -p 1 -o pid,comm ,args
df 看文件系统,du 遍历当前目录树;硬链接、稀疏文件、挂载点、打开后删除的文件都可能让两个结果不同。df -i 用来发现 inode 耗尽:字节空间充足不等于还能创建小文件。定位删除后仍占用的文件,继续看 lsof 。
身份方面,UID/GID 决定文件访问身份。目录的 x 表示能否穿越路径,r 表示能否读取目录项;文件自身可读但父目录不可穿越,也会访问失败。namei -l 可以逐段检查。不要用 chmod -R 777 掩盖挂载或所有者问题。
服务方面,先看 PID 1 是谁。常规 Ubuntu 系统可以用 systemctl status 服务名、journalctl -u 服务名;普通 Docker 教学容器通常不运行 systemd,装了软件包也不表示其后台服务已启动。本文不自动新增用户、不调整主机服务、不修改磁盘和防火墙。
更多连续监控、System V IPC 与跨命名空间的区别,见完整工具索引 。下面保留原有笔记供对照。
前言
对长期使用的shell脚本产生了一丢丢的兴趣, 前来进行一些笔记来记录学习过程, 仅此而已;
查找文本
以grep程序查找文本(以UNIX的专业术语来说,是匹配文本(matching text)是相当方便的。在POSIX系统上,grep可以在两种正则表达式风格中选择一种,或是执行简单的字符串匹配。传统上,有三种程序,可以用来查找整个文本文件:
grep
最早的文本匹配程序。使用POSIX定义的基本正则表达式(Basic Regular Expression,BRE)。
egrep
egrep扩展式grep(Extended grep),这个程序使用扩展正则表达式(Extended Regular Expression,ERE)——这是一套功能更强大的正则表达式,使用它的代价就是会耗掉更多的运算资源。以现在的系统而言,在性能影响上几乎没有太大的差别。
fgrep
快速grep(Fast grep)。这个版本匹配固定字符串而非正则表达式,它使用优化的算法,能更有效地匹配固定字符串。最初的版本,也是唯一可以并行(in parallel)地匹配多个字符串的版本;也就是说,grep与egrep只能匹配单个正则表达式;而fgrep使用不同的算法,却能匹配多个字符串,有效地测试每个输入行里,是否有匹配的查找字符串。
这里重点说一下怎么用grep来查找或者输出关键信息的, 另外千万不要用下面这种方式来输出文件
grep "if" -r ./ >> res .txt
这种方式会导致同时匹配res.txt中的结果,会在短时间内导致res.txt文件特别大,如果两分钟不管的话,等着内存爆炸吧~, 下面说一下这个指令的使用, 其参数选项如下
- a --text - A <显示行数> --after-context=<显示行数> - b --byte-offset - B<显示行数> --before-context=<显示行数> - c --count - C<显示行数> --context=<显示行数>或-<显示行数> - d<进行动作> --directories=<动作> - e<范本样式> --regexp=<范本样式> - E --extended-regexp - f<范本文件> --file=<规则文件> - F --fixed-regexp - G --basic-regexp - h --no-filename - H --with-filename - i --ignore-case - l --file-with-matches - L --files-without-match - n --line-number - P --perl-regexp - q --quiet或--silent - R/-r --recursive - s --no-messages - v --revert-match - V --version - w --word-regexp - x --line-regexp - y - o - m <num> --max-count=<num>
常用的正则表达式如下
^ # 锚定行的开始 如:'^grep' 匹配所有以grep开头的行。 $ # 锚定行的结束 如:'grep$' 匹配所有以grep结尾的行。 . # 匹配一个非换行符的字符 如:'gr.p' 匹配gr后接一个任意字符,然后是p。 * # 匹配零个或多个先前字符 如:'*grep' 匹配所有一个或多个空格后紧跟grep的行。 .* # 一起用代表任意字符。 [] # 匹配一个指定范围内的字符,如'[Gg]rep' 匹配Grep和grep。 [^] # 匹配一个不在指定范围内的字符,如:'[^A-Z]rep' 匹配不包含 A-Z 中的字母开头,紧跟 rep 的行 \(..\) # 标记匹配字符,如'\(love\)' ,love被标记为1。 \< # 锚定单词的开始,如:'\<grep' 匹配包含以grep开头的单词的行。 \> # 锚定单词的结束,如'grep\>' 匹配包含以grep结尾的单词的行。 x\{m\} # 重复字符x,m次,如:'0\{5\}' 匹配包含5个o的行。 x\{m,\} # 重复字符x,至少m次,如:'o\{5,\}' 匹配至少有5个o的行。 x\{m,n\} # 重复字符x,至少m次,不多于n次,如:'o\{5,10\}' 匹配5--10个o的行。 \w # 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p' 匹配以G后跟零个或多个文字或数字字符,然后是p。 \W # \w的反置形式,匹配一个或多个非单词字符,如点号句号等。 \b # 单词锁定符,如: '\bgrep\b' 只匹配grep。
修改权限的用法
权限:1、r 2、W 3. X
比如rw的值为4+2=6
用法比较简单,比如 chmod 722 test.txt
系统服务管理
在现代Linux系统中,systemd是主流的服务管理系统,通过systemctl命令可以方便地管理各种系统服务和开机自启动项。
systemctl 服务管理
基本服务操作
sudo systemctl start <服务名>sudo systemctl stop <服务名>sudo systemctl restart <服务名>sudo systemctl reload <服务名>systemctl status <服务名> systemctl is-active <服务名> systemctl is-enabled <服务名>
开机自启动管理
sudo systemctl enable <服务名>sudo systemctl disable <服务名>sudo systemctl enable --now <服务名>sudo systemctl disable --now <服务名>systemctl list-unit-files --type =service --state=enabled systemctl --failed
查看系统服务
systemctl list-units --type =service systemctl list-units --type =service --state=running systemctl list-unit-files --type =service systemctl show <服务名> journalctl -u <服务名> journalctl -u <服务名> -f systemctl list-dependencies <服务名>
systemctl 常用参数
--user --system --all --failed --type =TYPE --state=STATE -l, --full -n, --lines=N -f, --follow --no-pager
常见系统服务示例
sudo systemctl restart NetworkManagersudo systemctl enable sshsudo systemctl start sshsudo systemctl status ufwsudo systemctl enable ufwsudo systemctl restart apache2sudo systemctl reload nginxsudo systemctl start mysqlsudo systemctl enable postgresqlsudo systemctl enable dockersudo systemctl start docker
进程管理
进程管理是Linux系统管理的重要组成部分,包括查看进程状态、终止进程、监控系统负载等操作。
进程查看命令
ps 命令详解
ps ps aux ps auxf ps -ef --forest ps -u username ps -p PID ps aux --sort =-%cpu ps aux --sort =-%mem ps -eo pid,ppid,cmd,%mem,%cpu --sort =-%mem ps aux | head -1; ps aux | tail -n +2 | sort -nr -k3
ps 常用参数组合
系统监控命令
top / htop 实时监控
top top -u username htop htop -t
top 交互式快捷键
进程终止命令
kill 命令详解
kill PIDkill -9 PIDkill -KILL PIDkill -TERM PID kill -HUP PID kill -INT PID kill -QUIT PID kill -TERM -PIDkillall process_name killall -9 process_name pkill process_name pkill -f "pattern" pkill -u username
常见信号类型
信号编号 信号名称 描述 1 SIGHUP 挂断信号,通常用于重新加载配置 2 SIGINT 中断信号(Ctrl+C) 3 SIGQUIT 退出信号(Ctrl+\) 9 SIGKILL 强制终止信号(无法被忽略) 15 SIGTERM 正常终止信号(默认) 18 SIGCONT 继续执行被暂停的进程 19 SIGSTOP 暂停进程 20 SIGTSTP 终端暂停信号(Ctrl+Z)
后台进程管理
command &jobs fg %jobidbg %jobidnohup command &screen -S session_name tmux new -s session_name
系统负载监控
uptime w free -h iostat 2 vmstat 2 sar -u 2 lsof -i :port_number netstat -tulpn | grep :port_number
文件系统操作
文件系统操作是日常Linux使用中最基础也最重要的技能,包括文件查找、复制移动、权限管理等。
文件列表和查看
ls 命令详解
ls ls -lls -als -lals -ltls -ltrls -lSls -lhls -Rls --color=autols -d */ls -1 | wc -l
ls 参数详解
-a, --all -l -h, --human-readable -t -r, --reverse -S -R, --recursive --color=auto -i, --inode -d, --directory -1 -F, --classify
文件查找命令
find 命令详解
find /path -name "filename" find /path -iname "filename" find /path -type f find /path -type d find /path -type l find /path -size +100M find /path -size -10k find /path -size 50M find /path -mtime -7 find /path -mtime +30 find /path -atime -1 find /path -perm 755 find /path -perm -644 find /path -name "*.log" -type f -size +1M find /path -name "*.tmp" -exec rm {} \; find /path -name "*.log" -exec ls -lh {} \; find /path -empty find /path -user username find /path -group groupname
locate 命令
locate filename locate -i filename locate -n 10 filename sudo updatedblocate -r "pattern"
文件操作命令
复制操作 (cp)
cp source destinationcp -r source_dir destination_dircp -p source destinationcp -f source destinationcp -i source destinationcp -l source destinationcp -s source destinationcp -v source destinationcp -rp source_dir destination_dir
移动/重命名操作 (mv)
mv source destinationmv -i source destinationmv -f source destinationmv -v source destinationfor file in *.txt; do mv "$file " "${file%.txt} .bak" ; done
删除操作 (rm)
rm filenamerm file1 file2 file3rm -i filenamerm -f filenamerm -r directoryrm -rf directoryrm -v filenametrash filename
文件权限管理
chmod 权限修改
chmod 755 filename chmod 644 filename chmod 600 filename chmod 777 filename chmod u+x filename chmod g-w filename chmod o+r filename chmod a+x filename chmod -R 755 directory
chown 所有者修改
chown username filenamechown username:groupname filenamechown :groupname filenamechown -R username:groupname directorychown -v username filename
文件链接
ln source_file hard_linkln -s source_file symbolic_linkln -s /path/to/directory link_nameln -sf source_file link_namels -l link_namereadlink link_name
网络管理
网络管理包括网络连接状态查看、网络配置、网络故障诊断以及网络共享等功能。
网络状态查看
netstat 网络连接查看
netstat -a netstat -t netstat -u netstat -l netstat -n netstat -p netstat -tulpn netstat -tulpn | grep :80 netstat -tulpn | grep :22 netstat -r
ss 命令(更现代的替代)
ss -a ss -t ss -l ss -p ss -tulpn ss -tulpn | grep :80 ss -s
网络接口管理
ip addr show ifconfig ip addr show eth0 ifconfig eth0 sudo ip link set eth0 upsudo ifconfig eth0 upsudo ip link set eth0 downsudo ifconfig eth0 downsudo ip addr add 192.168.1.100/24 dev eth0sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0sudo ip addr del 192.168.1.100/24 dev eth0
WiFi 网络管理
NetworkManager 命令行工具
nmcli radio wifi nmcli radio wifi on nmcli radio wifi off nmcli dev wifi nmcli dev wifi connect "SSID" password "password" nmcli dev wifi connect "SSID" password "password" hidden yes nmcli con show nmcli con delete "SSID" nmcli con show "SSID"
传统 WiFi 工具
sudo iwlist scaniwconfig sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
网络热点共享
通过本地笔记本共享WiFi网络
方法一:使用 hostapd 和 dnsmasq
sudo apt updatesudo apt install hostapd dnsmasqsudo tee /etc/hostapd/hostapd.conf << EOF interface=wlan0 driver=nl80211 ssid=MyHotspot hw_mode=g channel=7 wmm_enabled=0 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=YourPassword wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP EOF sudo tee /etc/dnsmasq.conf << EOF interface=wlan0 dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h EOF sudo ip addr add 192.168.4.1/24 dev wlan0sudo sysctl net.ipv4.ip_forward=1echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.confsudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEsudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPTsudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPTsudo systemctl start hostapdsudo systemctl start dnsmasq
方法二:使用 NetworkManager 创建热点
nmcli dev wifi hotspot ifname wlan0 ssid MyHotspot password "YourPassword" nmcli con add type wifi ifname wlan0 con-name MyHotspot autoconnect yes ssid MyHotspot nmcli con modify MyHotspot 802-11-wireless.mode ap 802-11-wireless.band bg ipv4.method shared nmcli con modify MyHotspot wifi-sec.key-mgmt wpa-psk nmcli con modify MyHotspot wifi-sec.psk "YourPassword" nmcli con up MyHotspot nmcli con down MyHotspot nmcli con delete MyHotspot
方法三:使用 create_ap 工具
git clone https://github.com/oblique/create_ap cd create_apsudo make installsudo create_ap wlan0 eth0 MyHotspot YourPasswordsudo create_ap -n wlan0 MyHotspot YourPasswordsudo create_ap --stop wlan0
网络诊断工具
连通性测试
ping -c 4 google.com ping -c 4 8.8.8.8 ping google.com ping6 google.com ping -I eth0 google.com
路由跟踪
traceroute google.com tracepath google.com traceroute6 google.com
域名解析
nslookup google.com dig google.com dig google.com A dig google.com AAAA dig google.com MX nslookup 8.8.8.8 dig -x 8.8.8.8
网络下载工具
wget https://example.com/file.zip wget -b https://example.com/file.zip wget -c https://example.com/file.zip curl -O https://example.com/file.zip curl -# -O https://example.com/file.zip curl -X POST -d "data=value" https://api.example.com curl -H "Content-Type: application/json" -d '{"key":"value"}' https://api.example.com
网络监控
iftop nethogs nload iftop -i eth0
系统信息查看
系统信息查看命令帮助了解系统硬件配置、运行状态、资源使用情况等关键信息。
系统基本信息
系统信息查看
uname -auname -suname -runame -muname -puname -iuname -ohostname uname -n
系统版本信息
cat /etc/os-releaselsb_release -a cat /etc/issuecat /etc/debian_version cat /etc/redhat-release cat /proc/version
硬件信息查看
CPU 信息
lscpu cat /proc/cpuinfonproc cat /proc/loadavgtop htop
内存信息
free free -h free -m free -g cat /proc/meminfovmstat vmstat 2
磁盘和存储信息
df df -hdf -Tdf -idu -h /path/to/directorydu -sh .du -h --max-depth=1du -h | sort -hrlsblk lsblk -T lsblk -f fdisk -l
PCI 和 USB 设备
lspci lspci -v lsusb lsusb -v lshw lshw -short
系统运行状态
系统运行时间和负载
进程和资源使用
ps aux ps aux --sort =-%cpu | head ps aux --sort =-%mem | head top htop sar -u 1 5 sar -r 1 5 sar -d 1 5
网络接口状态
ip addr show ifconfig cat /proc/net/devip route show route -n
环境变量和系统配置
环境变量
env printenv echo $PATH echo $HOME echo $USER export VAR_NAME=valueecho $SHELL echo $0
系统限制和配置
ulimit -aulimit -nulimit -usysctl -a sysctl kernel.version sysctl vm.swappiness mount cat /proc/mounts
系统服务和启动信息
启动信息
dmesg dmesg | tail dmesg -T journalctl -b cat /var/log/kern.logcat /var/log/messages
系统运行级别
runlevel systemctl get-default systemctl list-units --type =service --state=running systemctl list-unit-files --type =service --state=enabled
定时任务管理
定时任务允许系统在指定时间自动执行命令或脚本,是系统自动化管理的重要工具。
Cron 定时任务
crontab 基本操作
crontab -e crontab -l crontab -r sudo crontab -e -u usernamesudo crontab -l -u usernamecrontab filename systemctl status cron systemctl status crond
Cron 时间格式
常用 Cron 示例
* * * * * /path/to/command 0 * * * * /path/to/command 0 2 * * * /path/to/command 0 3 * * 1 /path/to/command 0 4 1 * * /path/to/command */5 * * * * /path/to/command 30 * * * * /path/to/command 0 9-17 * * * /path/to/command 0 9 * * 1-5 /path/to/command 0 9,17 * * 1-5 /path/to/command 0 0 1 1 * /path/to/command
特殊时间关键词
@reboot /path/to/command @yearly /path/to/command @monthly /path/to/command @weekly /path/to/command @daily /path/to/command @hourly /path/to/command
Cron 环境变量和输出
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin SHELL=/bin/bash HOME=/root MAILTO=user@example.com MAILTO="" 0 2 * * * /path/to/script.sh >> /var/log/script.log 2>&1 0 2 * * * /path/to/script.sh 2>> /var/log/script.error.log 0 2 * * * /path/to/script.sh > /dev/null 2>&1
At 命令 - 一次性定时任务
at 基本用法
at 14:30 at> /path/to/command at> <Ctrl+D> at 14:30 tomorrow at 14:30 monday at 14:30 2024-12-25 at now + 5 minutes at now + 1 hour at now + 2 days at 14:30 < script.sh atq at -l atrm job_number at -r job_number at -c job_number
batch 命令
batch batch> /path/to/command batch> <Ctrl+D> batch < script.sh
系统级定时任务
系统crontab文件
cat /etc/crontab0 2 * * * root /path/to/command ls /etc/cron.d/ ls /etc/cron.hourly/ ls /etc/cron.daily/ ls /etc/cron.weekly/ ls /etc/cron.monthly/
系统任务目录使用
sudo vim /etc/cron.daily/backup-scriptsudo chmod +x /etc/cron.daily/backup-scriptsudo vim /etc/cron.hourly/log-cleanupsudo chmod +x /etc/cron.hourly/log-cleanupsudo vim /etc/cron.d/custom-task
Systemd Timer
systemd timer 基本概念
systemctl list-timers systemctl list-timers --all sudo systemctl start timer-name.timersudo systemctl enable timer-name.timersudo systemctl stop timer-name.timersystemctl status timer-name.timer
创建自定义 systemd timer
[Unit] Description=My Custom Task Wants=my-task.timer [Service] Type=oneshot ExecStart=/path/to/my-script.sh [Install] WantedBy=multi-user.target [Unit] Description=Run my-task every 30 minutes Requires=my-task.service [Timer] OnCalendar=*:0/30 Persistent=true [Install] WantedBy=timers.target sudo systemctl daemon-reloadsudo systemctl enable my-task.timersudo systemctl start my-task.timer
Systemd timer 时间格式
OnCalendar=*-*-* 02:00:00 OnCalendar=Mon *-*-* 09:00:00 OnCalendar=*-01-01 00:00:00 OnCalendar=hourly OnCalendar=daily OnCalendar=weekly OnCalendar=monthly OnCalendar=*:0/15
定时任务调试和监控
查看cron日志
tail -f /var/log/crontail -f /var/log/syslog | grep cronsudo vim /etc/rsyslog.d/50-default.confsudo systemctl restart rsyslog
调试定时任务
sudo run-parts /etc/cron.daily/* * * * * /path/to/script.sh >> /var/log/myscript.log 2>&1 echo "$(date) : Starting task" >> /var/log/myscript.log
环境变量和包管理
环境变量管理和软件包管理是Linux系统管理中的核心技能,涉及系统配置和软件安装维护。
环境变量管理
查看和设置环境变量
env printenv echo $PATH echo $HOME echo $USER printenv PATHexport VAR_NAME="value" VAR_NAME="value" unset VAR_NAMEecho ${VAR_NAME:-"not set"}
PATH 环境变量管理
echo $PATH export PATH="/new/path:$PATH " export PATH="$PATH :/new/path" echo 'export PATH="$PATH:/new/path"' >> ~/.bashrcecho 'export PATH="$PATH:/new/path"' >> ~/.zshrcsource ~/.bashrcsource ~/.zshrcsudo vim /etc/environment
配置文件管理
~/.bashrc ~/.zshrc ~/.profile ~/.bash_profile ~/.bash_logout /etc/profile /etc/bash.bashrc /etc/environment vim ~/.bashrc source ~/.bashrc. ~/.bashrc echo $SHELL echo $0
常用环境变量
HOME USER SHELL PWD OLDPWD PATH LD_LIBRARY_PATH MANPATH EDITOR BROWSER LANG LC_ALL TZ export EDITOR=vimexport BROWSER=firefoxexport LANG=zh_CN.UTF-8
Debian/Ubuntu 包管理 (APT)
基本包管理操作
sudo apt updatesudo apt upgradesudo apt full-upgradesudo apt dist-upgradesudo apt install package_namesudo apt install package1 package2 package3sudo apt install package_name=versionsudo apt install --reinstall package_namesudo apt remove package_namesudo apt purge package_namesudo apt autoremovesudo apt autocleansudo apt clean
软件包查询
apt search keyword apt-cache search keyword apt show package_name apt-cache show package_name apt list --installed apt-cache depends package_name apt-cache rdepends package_name apt list --upgradable dpkg -L package_name dpkg -S /path/to/file apt-file search filename
APT 源管理
cat /etc/apt/sources.listls /etc/apt/sources.list.d/sudo add-apt-repository ppa:user/repositorysudo add-apt-repository --remove ppa:user/repositorywget -qO - https://example.com/key.gpg | sudo apt-key add - apt-key list
Red Hat/CentOS 包管理 (YUM/DNF)
YUM 基本操作
sudo yum check-updatesudo yum updatesudo yum install package_namesudo yum remove package_nameyum search keyword yum info package_name yum list installed sudo yum clean all
DNF 操作(Fedora/新版CentOS)
sudo dnf check-updatesudo dnf updatesudo dnf install package_namesudo dnf remove package_namednf search keyword dnf info package_name dnf list installed
Arch Linux 包管理 (Pacman)
sudo pacman -Syusudo pacman -S package_namesudo pacman -R package_namesudo pacman -Rs package_namepacman -Ss keyword pacman -Si package_name pacman -Q pacman -Qi package_name sudo pacman -Sc
通用软件安装方法
从源码编译安装
wget https://example.com/software.tar.gz tar -xzf software.tar.gz cd software/./configure --prefix=/usr/local make sudo make installsudo make uninstall
使用 Snap 包
sudo apt install snapdsnap find keyword sudo snap install package_namesnap list sudo snap refresh package_namesudo snap remove package_name
使用 Flatpak
sudo apt install flatpakflatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo flatpak search keyword flatpak install flathub app_id flatpak run app_id flatpak list flatpak update flatpak uninstall app_id
AppImage 应用
wget https://example.com/app.AppImage chmod +x app.AppImage./app.AppImage ./app.AppImage --appimage-extract
开发工具和语言包管理
Python 包管理
pip install package_name pip install --user package_name pip uninstall package_name pip list pip search keyword pip show package_name python -m venv venv_name source venv_name/bin/activatedeactivate pip freeze > requirements.txt pip install -r requirements.txt
Node.js 包管理
npm install package_name npm install -g package_name npm uninstall package_name npm list npm search keyword npm info package_name yarn add package_name yarn remove package_name yarn global add package_name yarn list
其他语言包管理
gem install package_name gem uninstall package_name gem list go get package_name go mod tidy cargo install package_name cargo uninstall package_name
日志查看和磁盘管理
系统日志和磁盘管理是Linux系统维护的重要组成部分,帮助监控系统运行状态和管理存储资源。
系统日志查看
journalctl - systemd 日志查看
journalctl journalctl -f journalctl --follow journalctl -u service_name journalctl -u ssh.service journalctl --since "2024-01-01" journalctl --since "2024-01-01 10:00:00" journalctl --since yesterday journalctl --since "1 hour ago" journalctl --since "2024-01-01" --until "2024-01-02" journalctl -b journalctl -b -1 journalctl -p err journalctl -p warning journalctl -p info journalctl -k journalctl -n 50 journalctl --lines=50 journalctl -o json journalctl --disk-usage sudo journalctl --rotatesudo journalctl --vacuum-time=2weekssudo journalctl --vacuum-size=500M
传统日志文件
/var/log/syslog /var/log/messages /var/log/kern.log /var/log/auth.log /var/log/secure /var/log/boot.log /var/log/cron.log /var/log/maillog /var/log/apache2/ /var/log/nginx/ tail -f /var/log/sysloghead -n 100 /var/log/auth.logless /var/log/messages grep "error" /var/log/syslog grep -i "failed" /var/log/auth.log tail -f /var/log/syslog /var/log/auth.logzcat /var/log/syslog.1.gz zgrep "error" /var/log/syslog.*.gz
日志分析工具
awk '/error/ {print $1, $2, $3, $NF}' /var/log/syslog grep -c "error" /var/log/syslog awk '$0 ~ /Jan 01/ {print}' /var/log/syslog awk '{print $1, $2, $3}' /var/log/auth.log sed -n '100,200p' /var/log/syslog
磁盘和文件系统管理
磁盘使用情况查看
df -hdf -h /homedf -Tdf -idu -h /path/to/directorydu -sh .du -h --max-depth=1du -h | sort -hrfind /path -type f -size +100M -ls find /path -type f -size +1G -exec ls -lh {} \; find /path -type f | wc -l find /path -type d | wc -l
磁盘分区管理
fdisk -l lsblk lsblk -f parted -l blkid sudo fdisk /dev/sdasudo parted /dev/sdasudo parted /dev/sda mklabel gptsudo parted /dev/sda mkpart primary ext4 1MiB 1GiBsudo parted /dev/sda rm 1sudo fdisk -l /dev/sda
文件系统操作
sudo mkfs.ext4 /dev/sda1sudo mkfs.xfs /dev/sda1sudo mkfs.btrfs /dev/sda1sudo fsck /dev/sda1sudo fsck.ext4 /dev/sda1sudo fsck -f /dev/sda1sudo fsck -y /dev/sda1sudo tune2fs -l /dev/sda1sudo dumpe2fs /dev/sda1 | head sudo tune2fs -c 30 /dev/sda1 sudo tune2fs -L "MyDisk" /dev/sda1
挂载和卸载
sudo mount /dev/sda1 /mnt/mydisksudo mount -t ext4 /dev/sda1 /mnt/mydisksudo mount -o ro /dev/sda1 /mnt/mydisksudo umount /dev/sda1sudo umount /mnt/mydisksudo umount -f /mnt/mydisksudo umount -l /mnt/mydisk mount df -hfindmnt findmnt /home
自动挂载配置
sudo vim /etc/fstab/dev/sda1 /home ext4 defaults 0 2 defaults ro rw noexec nosuid nodev auto noauto user nouser sudo mount -asudo mount -o remount,ro /home
压缩和归档
tar 归档工具
tar -cf archive.tar file1 file2 directory/ tar -czf archive.tar.gz file1 file2 directory/ tar -cjf archive.tar.bz2 file1 file2 directory/ tar -cJf archive.tar.xz file1 file2 directory/ tar -xf archive.tar tar -xzf archive.tar.gz tar -xjf archive.tar.bz2 tar -xJf archive.tar.xz tar -tf archive.tar tar -tzf archive.tar.gz tar -xf archive.tar -C /path/to/directory tar -rf archive.tar newfile tar -xvf archive.tar
其他压缩工具
gzip file.txt gunzip file.txt.gz zcat file.txt.gz zip archive.zip file1 file2 directory/ unzip archive.zip unzip -l archive.zip unzip archive.zip -d /path/to/directory 7z a archive.7z file1 file2 directory/ 7z x archive.7z 7z l archive.7z
存储设备管理
USB和移动设备
lsusb lsblk sudo fdisk -lsudo mount /dev/sdb1 /mnt/usbsudo umount /dev/sdb1sudo eject /dev/sdb1sudo blkid
RAID管理
cat /proc/mdstatsudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1sudo mdadm --detail /dev/md0sudo mdadm --stop /dev/md0sudo mdadm --monitor --scan
LVM管理
sudo pvssudo pvdisplaysudo vgssudo vgdisplaysudo lvssudo lvdisplaysudo pvcreate /dev/sda1sudo vgcreate myvg /dev/sda1sudo lvcreate -L 10G -n mylv myvgsudo lvextend -L +5G /dev/myvg/mylvsudo resize2fs /dev/myvg/mylv