说明:本文是记录一下方便自查的命令手册(博主平时遇到了这里没有的命令之后会动态更新)。这份手册旨在提供全面且实用的Linux命令参考,包含运维需要用到的所有命令以及平时所有常用的指令,分类进行展示便于查询。
Linux命令行介绍
Linux 命令行是与 Linux 操作系统交互的强大方式。通过命令行界面(CLI),用户可以执行各种操作,从简单的文件管理到复杂的系统配置。相比图形用户界面(GUI),命令行提供了更高的效率、灵活性和自动化能力。
要访问命令行,您可以使用终端应用程序。在大多数 Linux 发行版中,可以通过按 Ctrl+Alt+T
快速打开终端。
文件管理命令
ls(列出目录内容)
bash
ls # 列出当前目录内容
ls -l # 详细列表格式
ls -a # 显示隐藏文件
ls -h # 以人类可读的格式显示文件大小
ls -lh # 详细列表并人类可读格式
ls -ltr # 按时间排序(最新的在最后)
ls -R # 递归显示子目录内容
ls -i # 显示索引节点号
ls --color=auto # 彩色显示(大多数发行版默认启用)
cd(切换目录)
bash
cd /path/to/directory # 切换到指定目录
cd ~ # 切换到用户主目录
cd .. # 返回上一级目录
cd - # 返回上一个访问的目录
cd / # 切换到根目录
cd ../directory # 切换到上级目录下的其他目录
pwd(打印工作目录)
bash
pwd # 显示当前工作目录的完整路径
pwd -P # 显示物理路径(解析符号链接)
mkdir(创建目录)
bash
mkdir directory # 创建单个目录
mkdir -p dir1/dir2/dir3 # 递归创建多级目录
mkdir -m 755 directory # 创建并指定权限模式
mkdir dir1 dir2 dir3 # 一次创建多个目录
cp(复制文件和目录)
bash
cp file.txt destination/ # 复制文件到目标位置
cp -r directory/ destination/ # 递归复制整个目录
cp -a directory/ destination/ # 递归复制并保留所有属性
cp -u file.txt destination/ # 只有当源文件比目标文件新或不存在时才复制
cp -v file.txt destination/ # 显示复制过程详细信息
cp -i file.txt destination/ # 覆盖前询问确认
cp file.txt{,.bak} # 快速创建文件备份(创建file.txt.bak)
mv(移动或重命名文件和目录)
bash
mv file.txt newname.txt # 重命名文件
mv file.txt /path/to/destination/ # 移动文件
mv -i file.txt destination/ # 覆盖前询问确认
mv -v file.txt destination/ # 显示移动过程详细信息
mv -u file.txt destination/ # 只有当源文件比目标文件新时才移动
mv file1.txt file2.txt destination/ # 一次移动多个文件
mv directory/ newname/ # 重命名目录
rm(删除文件和目录)
bash
rm file.txt # 删除文件
rm -f file.txt # 强制删除(不询问)
rm -i file.txt # 删除前询问确认
rm -r directory/ # 递归删除目录及其内容
rm -rf directory/ # 强制递归删除目录
rm -v file.txt # 显示删除过程详细信息
rm -- -file-with-dash.txt # 删除以破折号开头的文件
rmdir(删除空目录)
bash
rmdir directory # 删除空目录
rmdir -p dir1/dir2/dir3 # 递归删除目录,如果变为空目录
touch(创建文件或更新时间戳)
bash
touch file.txt # 创建空文件或更新现有文件的时间戳
touch -a file.txt # 仅修改访问时间
touch -m file.txt # 仅修改修改时间
touch -t 202301011200 file.txt # 指定特定时间(年月日时分)
touch -r ref_file.txt file.txt # 使用参考文件的时间戳
ln(创建链接)
bash
ln -s /path/to/file link_name # 创建符号链接
ln /path/to/file link_name # 创建硬链接
ln -sf /path/to/file link_name # 强制创建符号链接,覆盖已存在的链接
ln -v /path/to/file link_name # 创建链接并显示详细信息
find(查找文件和目录)
bash
find /path -name "*.txt" # 按名称查找文件
find /path -type f # 只查找文件
find /path -type d # 只查找目录
find /path -size +10M # 查找大于10MB的文件
find /path -mtime -7 # 查找7天内修改过的文件
find /path -user username # 查找特定用户拥有的文件
find /path -perm 644 # 查找特定权限的文件
find /path -name "*.log" -delete # 查找并删除匹配的文件
find /path -exec command {} \; # 对查找结果执行命令
find /path -name "*.txt" -exec chmod 644 {} \; # 查找并修改权限
stat(显示文件或文件系统详细信息)
bash
stat file.txt # 显示文件的详细信息
stat -f /path # 显示文件系统信息
file(确定文件类型)
bash
file filename # 确定文件类型
file -i filename # 显示MIME类型
file -z compressed.gz # 查看压缩文件内容的类型
realpath(显示文件或目录的绝对路径)
bash
realpath file.txt # 显示文件的绝对路径
realpath -s symlink # 不解析符号链接
文件查看与编辑命令
cat(连接并显示文件内容)
bash
cat file.txt # 显示文件内容
cat -n file.txt # 显示行号
cat -A file.txt # 显示所有控制字符
cat file1.txt file2.txt # 连接并显示多个文件
cat > file.txt # 创建新文件(Ctrl+D结束)
cat >> file.txt # 追加内容到文件
less(分页查看文件内容)
bash
less file.txt # 分页查看文件内容
less -N file.txt # 显示行号
less -S file.txt # 不折行显示
less +100 file.txt # 从第100行开始显示
less +/pattern file.txt # 从匹配模式的地方开始显示
常用快捷键:空格(向下翻页),b(向上翻页),q(退出),/pattern(向下搜索),?pattern(向上搜索),n(下一个匹配),N(上一个匹配)
more(分页查看文件内容,比less功能少)
bash
more file.txt # 分页查看文件内容
more -num file.txt # 设置每屏行数
more +num file.txt # 从第num行开始显示
head(显示文件头部内容)
bash
head file.txt # 显示文件前10行
head -n 20 file.txt # 显示文件前20行
head -c 100 file.txt # 显示前100个字节
head -n -5 file.txt # 显示除最后5行外的所有内容
tail(显示文件尾部内容)
bash
tail file.txt # 显示文件最后10行
tail -n 20 file.txt # 显示文件最后20行
tail -c 100 file.txt # 显示最后100个字节
tail -f file.txt # 实时查看文件追加内容(常用于日志监控)
tail -F file.txt # 实时查看,即使文件被删除再创建也继续跟踪
tail -n +10 file.txt # 从第10行开始显示
grep(文本搜索)
bash
grep "pattern" file.txt # 在文件中查找匹配行
grep -i "pattern" file.txt # 忽略大小写查找
grep -r "pattern" directory/ # 递归查找目录中的匹配
grep -v "pattern" file.txt # 显示不匹配的行
grep -n "pattern" file.txt # 显示匹配行及行号
grep -w "word" file.txt # 只匹配整个单词
grep -A 3 "pattern" file.txt # 显示匹配行及后3行
grep -B 3 "pattern" file.txt # 显示匹配行及前3行
grep -C 3 "pattern" file.txt # 显示匹配行及前后各3行
grep -E "regex" file.txt # 使用扩展正则表达式
grep -l "pattern" *.txt # 只显示包含匹配的文件名
grep -c "pattern" file.txt # 计算匹配行数
grep "pattern" file.txt --color=auto # 高亮显示匹配部分
vi/vim(文本编辑器)
bash
vi file.txt # 打开文件进行编辑
vim file.txt # 打开文件进行编辑(增强版)
常用模式和命令:
- 插入模式:按'i'进入,用于输入文本
- 命令模式:按'Esc'进入,用于执行命令
- 命令行模式:在命令模式下输入':',用于执行底线命令
命令模式下的常用命令:
ruby
:w # 保存文件
:q # 退出
:wq # 保存并退出
:q! # 强制退出不保存
:set number # 显示行号
:set nonumber # 不显示行号
/pattern # 向下搜索
?pattern # 向上搜索
dd # 删除当前行
yy # 复制当前行
p # 粘贴复制的内容
u # 撤销操作
G # 跳到文件最后一行
gg # 跳到文件第一行
:n # 跳到第n行
nano(简单的文本编辑器)
bash
nano file.txt # 打开文件进行编辑
nano -m file.txt # 启用鼠标支持
nano -i file.txt # 自动缩进
nano -B file.txt # 自动备份
sed(流编辑器)
bash
sed 's/old/new/' file.txt # 替换文件中的第一个匹配项
sed 's/old/new/g' file.txt # 全局替换所有匹配项
sed -i 's/old/new/g' file.txt # 直接修改文件内容
sed '1,5s/old/new/g' file.txt # 只在第1-5行中替换
sed '/pattern/s/old/new/g' file.txt # 只在包含pattern的行中替换
sed '/pattern/d' file.txt # 删除包含pattern的行
sed '1,5d' file.txt # 删除第1-5行
sed '$d' file.txt # 删除最后一行
sed 'G' file.txt # 每行后添加空行
sed '/^$/d' file.txt # 删除空行
awk(文本处理语言)
bash
awk '{print $1}' file.txt # 打印第一列
awk '{print $1,$3}' file.txt # 打印第一列和第三列
awk -F: '{print $1,$3}' /etc/passwd # 使用:作为分隔符
awk 'NR==1,NR==5 {print}' file.txt # 打印第1-5行
awk '/pattern/ {print}' file.txt # 打印匹配pattern的行
awk '{sum+=$1} END {print sum}' file.txt # 计算第一列的总和
awk 'length > 80' file.txt # 打印长度超过80的行
awk '{ print NR, $0 }' file.txt # 添加行号
sort(排序)
bash
sort file.txt # 按字母顺序排序
sort -n file.txt # 按数字顺序排序
sort -r file.txt # 逆序排序
sort -k 2 file.txt # 按第二列排序
sort -t: -k 3 file.txt # 使用:作为分隔符,按第三列排序
sort -u file.txt # 排序并去重
sort -h file.txt # 按人类可读大小排序(如1K、2M、3G)
uniq(去除重复行)
bash
uniq file.txt # 删除连续的重复行
sort file.txt | uniq # 删除所有重复行(先排序)
uniq -c file.txt # 计算每行出现的次数
uniq -d file.txt # 只显示重复的行
uniq -u file.txt # 只显示不重复的行
cut(裁剪文件内容)
bash
cut -c 1-5 file.txt # 提取每行第1-5个字符
cut -d: -f1,3 /etc/passwd # 使用:分隔,提取第1、3列
cut -d' ' -f3- file.txt # 提取第3列及以后的列
tr(转换字符)
bash
cat file.txt | tr 'a-z' 'A-Z' # 小写转大写
cat file.txt | tr -d '\r' # 删除回车符
tr -s ' ' < file.txt # 压缩连续空格为单个空格
diff(比较文件差异)
bash
diff file1.txt file2.txt # 比较两个文件的差异
diff -u file1.txt file2.txt # 统一格式输出差异
diff -r dir1/ dir2/ # 递归比较两个目录
patch(应用diff补丁)
bash
diff -u old_file new_file > patch_file # 创建补丁
patch old_file < patch_file # 应用补丁
patch -R file < patch_file # 撤销补丁
tee(读取标准输入并写入文件和标准输出)
bash
command | tee file.txt # 输出到屏幕并保存到文件
command | tee -a file.txt # 追加到文件
wc(字数统计)
bash
wc file.txt # 显示行数、单词数和字节数
wc -l file.txt # 只显示行数
wc -w file.txt # 只显示单词数
wc -c file.txt # 只显示字节数
wc -m file.txt # 只显示字符数
权限管理命令
chmod(更改文件权限)
bash
chmod 755 file.txt # 使用数字设置权限
chmod u+x file.txt # 给文件所有者添加执行权限
chmod g+w file.txt # 给组添加写权限
chmod o-r file.txt # 移除其他用户读权限
chmod a+x file.txt # 给所有用户添加执行权限
chmod -R 755 directory/ # 递归设置目录及内容权限
chmod --reference=ref_file file.txt # 复制参考文件的权限
chown(更改文件所有者和组)
bash
chown user file.txt # 更改文件所有者
chown user:group file.txt # 同时更改所有者和组
chown :group file.txt # 只更改组
chown -R user:group directory/ # 递归更改目录及内容的所有者和组
chown --reference=ref_file file.txt # 复制参考文件的所有者和组
chgrp(更改文件组)
bash
chgrp group file.txt # 更改文件所属组
chgrp -R group directory/ # 递归更改目录及内容的组
chgrp --reference=ref_file file.txt # 复制参考文件的组
umask(设置默认权限掩码)
bash
umask # 显示当前umask值
umask 022 # 设置umask值(创建文件权限为644,目录为755)
umask -S # 以符号形式显示umask
getfacl/setfacl(访问控制列表)
bash
getfacl file.txt # 显示文件的ACL
setfacl -m u:user:rw- file.txt # 为用户设置ACL
setfacl -m g:group:r-- file.txt # 为组设置ACL
setfacl -x u:user file.txt # 删除用户的ACL
setfacl -b file.txt # 删除所有ACL
setfacl -R -m u:user:rwx dir/ # 递归设置目录ACL
系统管理命令
uname(显示系统信息)
bash
uname -a # 显示所有系统信息
uname -r # 显示内核版本
uname -m # 显示硬件架构
uname -n # 显示网络主机名
hostname(显示或设置主机名)
bash
hostname # 显示当前主机名
hostname newname # 临时设置主机名
hostnamectl set-hostname newname # 永久设置主机名(systemd系统)
uptime(显示系统运行时间和负载)
bash
uptime # 显示运行时间、用户数和负载平均值
date(显示或设置系统日期和时间)
bash
date # 显示当前日期和时间
date +"%Y-%m-%d %H:%M:%S" # 按指定格式显示
date -s "2023-01-01 12:00:00" # 设置系统日期和时间
date -u # 显示UTC时间
hwclock(硬件时钟控制)
bash
hwclock --show # 显示硬件时钟时间
hwclock --systohc # 系统时间复制到硬件时钟
hwclock --hctosys # 硬件时钟复制到系统时间
timedatectl(控制系统时间和日期)
bash
timedatectl # 显示时间和日期设置
timedatectl list-timezones # 列出可用时区
timedatectl set-timezone Asia/Shanghai # 设置时区
timedatectl set-time "2023-01-01 12:00:00" # 设置系统时间
timedatectl set-ntp true # 启用NTP同步
cal(显示日历)
bash
cal # 显示当月日历
cal -y # 显示当年日历
cal 12 2023 # 显示指定月份的日历
lsb_release(显示发行版信息)
bash
lsb_release -a # 显示所有发行版信息
lsb_release -d # 只显示描述信息
dmidecode(显示硬件信息)
bash
dmidecode # 显示DMI表内容
dmidecode -t system # 显示系统信息
dmidecode -t bios # 显示BIOS信息
dmidecode -t processor # 显示处理器信息
dmidecode -t memory # 显示内存信息
lshw(列出硬件信息)
bash
lshw # 列出详细硬件信息
lshw -short # 简洁输出
lshw -C network # 只显示网络硬件
lshw -C disk # 只显示磁盘信息
lscpu(显示CPU信息)
bash
lscpu # 显示CPU架构信息
lsmem(显示内存信息)
bash
lsmem # 显示内存范围和设备信息
lsmem --summary # 显示内存总结信息
free(显示内存使用情况)
bash
free # 显示内存使用情况
free -h # 以人类可读格式显示
free -s 5 # 每5秒更新一次
free -t # 显示总计行
vmstat(报告虚拟内存统计)
bash
vmstat # 显示虚拟内存统计
vmstat 5 # 每5秒更新一次
vmstat -s # 显示内存统计信息
last(显示用户登录历史)
bash
last # 显示所有用户的登录历史
last username # 显示特定用户的登录历史
last -n 10 # 显示最近10条登录记录
last reboot # 显示系统重启历史
who(显示当前登录用户)
bash
who # 显示当前登录的用户
who -a # 显示所有信息
whoami # 显示当前有效用户
w(显示登录用户及其活动)
bash
w # 显示登录用户及其活动
w username # 显示特定用户信息
id(显示用户ID和组ID)
bash
id # 显示当前用户的ID信息
id username # 显示指定用户的ID信息
dmesg(显示系统消息缓冲区)
bash
dmesg # 显示内核环形缓冲区的所有消息
dmesg | grep -i error # 只显示错误消息
dmesg -H # 人类可读格式显示
dmesg -w # 实时监控内核消息
dmesg -T # 显示人类可读时间戳
dmesg -l err,warn # 只显示错误和警告
lsof(列出打开的文件)
bash
lsof # 列出所有打开的文件
lsof -u username # 列出特定用户打开的文件
lsof -i :22 # 列出使用22端口的进程
lsof -p pid # 列出特定进程打开的文件
lsof /path/to/file # 列出访问特定文件的进程
lsof -c httpd # 列出特定命令打开的文件
lsof -i tcp # 列出所有TCP连接
lsof -i udp # 列出所有UDP连接
sysctl(配置内核参数)
bash
sysctl -a # 显示所有可用的内核参数
sysctl kernel.hostname # 显示单个参数值
sysctl -w kernel.hostname=newname # 临时设置内核参数
sysctl -p # 加载/etc/sysctl.conf中的设置
chroot(更改根目录)
bash
chroot /mnt/newroot /bin/bash # 更改根目录并在新环境中运行命令
shutdown(关机或重启系统)
bash
shutdown -h now # 立即关机
shutdown -r now # 立即重启
shutdown -h +10 # 10分钟后关机
shutdown -c # 取消计划的关机
reboot(重启系统)
bash
reboot # 重启系统
reboot -f # 强制重启,不会执行正常关机序列
poweroff(关闭系统)
bash
poweroff # 关闭系统
poweroff -f # 强制关机
halt(停止系统)
bash
halt # 停止系统
halt -f # 强制停止
进程管理命令
ps(进程状态)
bash
ps # 显示当前终端的进程
ps aux # 显示所有进程详情
ps -ef # 显示所有进程(完整格式)
ps aux --sort=-%cpu # 按CPU占用率降序排列
ps aux --sort=-%mem # 按内存占用降序排列
ps -o pid,user,%cpu,%mem,cmd # 自定义输出格式
ps -C nginx # 显示特定命令的进程
ps -p 1234 # 显示特定PID的进程
ps -t pts/0 # 显示特定终端的进程
ps -u username # 显示特定用户的进程
top(动态监控进程)
bash
top # 实时显示进程信息
top -n 5 # 只显示5次更新
top -u username # 只显示特定用户的进程
top -p 1234,5678 # 只监控特定PID的进程
交互命令:
- M:按内存使用排序
- P:按CPU使用排序
- k:杀死进程
- r:重新调整优先级
- h:帮助
- q:退出
htop(增强版top)
bash
htop # 启动htop
htop相比top提供了更友好的界面和更多功能:
- F2:设置
- F3:搜索
- F4:过滤
- F5:树状视图
- F6:排序
- F9:杀死进程
- F10:退出
kill(结束进程)
bash
kill PID # 向进程发送TERM信号
kill -9 PID # 强制终止进程(KILL信号)
kill -l # 列出所有可用信号
kill -HUP PID # 发送HUP信号(一般用于重载配置)
killall(按名称杀死进程)
bash
killall processname # 杀死所有匹配的进程
killall -9 processname # 强制杀死所有匹配的进程
killall -u username processname # 杀死特定用户的进程
killall -i processname # 交互式确认每个进程
pkill(按模式杀死进程)
bash
pkill processname # 按名称杀死进程
pkill -9 processname # 强制杀死进程
pkill -u username # 杀死特定用户的所有进程
pkill -t pts/0 # 杀死特定终端的所有进程
pgrep(按模式查找进程)
bash
pgrep processname # 列出进程PID
pgrep -u username # 列出特定用户的进程PID
pgrep -l processname # 列出进程PID和名称
pgrep -a processname # 列出进程PID和完整命令行
nice/renice(设置进程优先级)
bash
nice -n 10 command # 以较低优先级启动命令(值越大优先级越低)
nice -n -10 command # 以较高优先级启动命令(需要root权限)
renice 10 -p 1234 # 调整运行中进程的优先级
renice 10 -u username # 调整用户所有进程的优先级
nohup(忽略挂起信号)
bash
nohup command & # 在后台运行命令,忽略终端关闭
nohup command > output.log 2>&1 & # 后台运行并重定向输出
time(测量命令执行时间)
bash
time command # 显示命令执行时间
/usr/bin/time -v command # 显示详细的资源使用情况
watch(定期执行命令)
bash
watch command # 每2秒执行一次命令
watch -n 5 command # 每5秒执行一次命令
watch -d command # 高亮显示变化部分
bg/fg(后台/前台作业控制)
bash
command & # 在后台启动命令
Ctrl+Z # 暂停当前作业
bg # 继续执行最近的作业在后台
bg %2 # 将作业2移到后台
fg # 将最近的后台作业移到前台
fg %2 # 将作业2移到前台
jobs(列出作业)
bash
jobs # 显示当前shell中的所有作业
jobs -l # 包括PID信息
jobs -r # 只显示运行中的作业
jobs -s # 只显示已停止的作业
stress(系统压力测试)
bash
stress --cpu 4 # 生成4个CPU负载
stress --io 2 # 生成2个IO负载
stress --vm 1 --vm-bytes 1G # 生成1GB内存负载
stress --timeout 60s # 运行60秒后停止
strace(跟踪系统调用)
bash
strace command # 跟踪命令的系统调用
strace -p PID # 跟踪运行中进程的系统调用
strace -e open command # 只跟踪特定系统调用
strace -o output.log command # 将输出保存到文件
strace -c command # 统计系统调用计数和时间
ltrace(库调用跟踪)
bash
ltrace command # 跟踪命令的库调用
ltrace -p PID # 跟踪运行中进程的库调用
ltrace -o output.log command # 将输出保存到文件
磁盘与存储管理
df(报告文件系统磁盘空间使用情况)
bash
df # 显示所有文件系统磁盘使用情况
df -h # 以人类可读格式显示
df -T # 显示文件系统类型
df -i # 显示inode信息
df /path # 显示特定文件系统信息
du(估计文件空间使用量)
bash
du # 显示当前目录及子目录的磁盘使用量
du -h # 以人类可读格式显示
du -s # 只显示总计
du -a # 显示所有文件而不只是目录
du -h --max-depth=1 /path # 只显示一级子目录的使用量
du -h -c # 显示总计
du -h --apparent-size # 显示文件大小而不是磁盘使用量
fdisk(磁盘分区工具)
bash
fdisk -l # 列出所有分区
fdisk /dev/sda # 管理特定磁盘分区
fdisk交互式命令:
- m:显示帮助
- p:打印分区表
- n:创建新分区
- d:删除分区
- w:写入更改并退出
- q:不保存退出
- l:列出已知的分区类型
- t:更改分区类型
parted(磁盘分区工具)
bash
parted -l # 列出所有分区表
parted /dev/sda print # 显示特定磁盘的分区表
parted /dev/sda mkpart primary ext4 1MiB 100MiB # 创建新分区
gdisk(GPT分区工具)
bash
gdisk /dev/sda # 管理GPT分区表
gdisk -l /dev/sda # 显示分区信息
mount(挂载文件系统)
bash
mount # 显示所有挂载的文件系统
mount /dev/sda1 /mnt # 挂载分区到挂载点
mount -t ext4 /dev/sda1 /mnt # 指定文件系统类型
mount -o remount,rw / # 重新挂载根分区为读写
mount -a # 挂载/etc/fstab中的所有文件系统
umount(卸载文件系统)
bash
umount /mnt # 卸载挂载点
umount /dev/sda1 # 卸载设备
umount -l /mnt # 懒惰卸载(等待设备不再繁忙)
umount -f /mnt # 强制卸载
lsblk(列出块设备)
bash
lsblk # 以树形列出所有块设备
lsblk -f # 显示文件系统信息
lsblk -m # 显示设备权限信息
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT # 自定义输出列
blkid(显示块设备属性)
bash
blkid # 显示所有块设备的UUID和文件系统类型
blkid /dev/sda1 # 显示特定设备信息
mkfs(创建文件系统)
bash
mkfs.ext4 /dev/sda1 # 在分区上创建ext4文件系统
mkfs.xfs /dev/sda2 # 创建XFS文件系统
mkfs.ntfs /dev/sda3 # 创建NTFS文件系统(需要ntfs-3g包)
mkfs -t ext4 /dev/sda1 # 另一种语法创建ext4文件系统
fsck(检查和修复文件系统)
bash
fsck /dev/sda1 # 检查文件系统错误
fsck -f /dev/sda1 # 强制检查
fsck -y /dev/sda1 # 自动回答yes
fsck -t ext4 /dev/sda1 # 指定文件系统类型
badblocks(检查坏块)
bash
badblocks -v /dev/sda1 # 检查分区坏块
badblocks -w /dev/sda1 # 写入测试(破坏性)
tune2fs(调整ext文件系统参数)
bash
tune2fs -l /dev/sda1 # 列出超级块内容
tune2fs -c 30 /dev/sda1 # 设置挂载次数检查
tune2fs -i 1m /dev/sda1 # 设置时间检查间隔
tune2fs -L "LABEL" /dev/sda1 # 设置卷标
swapoff/swapon(管理交换空间)
bash
swapon --show # 显示交换信息
swapon /dev/sdb1 # 激活交换分区
swapoff /dev/sdb1 # 停用交换分区
swapon -a # 激活所有交换空间
mkswap(创建交换分区)
bash
mkswap /dev/sdb1 # 创建交换分区
sync(同步数据到磁盘)
bash
sync # 将所有缓冲区数据写入磁盘
hdparm(硬盘参数调整)
bash
hdparm -i /dev/sda # 显示硬盘信息
hdparm -t /dev/sda # 测试读取速度
hdparm -T /dev/sda # 测试缓存读取速度
hdparm -S 120 /dev/sda # 设置硬盘休眠时间
smartctl(监控磁盘健康状态)
bash
smartctl -a /dev/sda # 显示所有SMART信息
smartctl -H /dev/sda # 显示健康状态
smartctl -t short /dev/sda # 启动短自检
smartctl -t long /dev/sda # 启动长时间自检
LVM命令(逻辑卷管理)
bash
# 物理卷管理
pvcreate /dev/sdb1 # 创建物理卷
pvdisplay # 显示物理卷信息
pvs # 简洁显示物理卷信息
# 卷组管理
vgcreate vg_name /dev/sdb1 # 创建卷组
vgextend vg_name /dev/sdc1 # 扩展卷组
vgdisplay # 显示卷组信息
vgs # 简洁显示卷组信息
# 逻辑卷管理
lvcreate -L 10G -n lv_name vg_name # 创建10G逻辑卷
lvextend -L +5G /dev/vg_name/lv_name # 扩展逻辑卷大小
lvreduce -L -5G /dev/vg_name/lv_name # 减小逻辑卷大小
lvdisplay # 显示逻辑卷信息
lvs # 简洁显示逻辑卷信息
resize2fs /dev/vg_name/lv_name # 调整文件系统大小以匹配逻辑卷
dd(转换和复制文件)
bash
dd if=/dev/zero of=file.img bs=1M count=100 # 创建100MB的文件
dd if=/dev/sda of=/dev/sdb # 克隆整个磁盘
dd if=/dev/sda of=disk.img # 创建磁盘镜像
dd if=disk.img of=/dev/sda # 将镜像写回磁盘
dd if=/dev/urandom of=file bs=1M count=1 # 生成随机数据
dd if=/dev/zero of=/dev/sda bs=512 count=1 # 清除MBR
网络管理命令
ifconfig(配置网络接口)
bash
ifconfig # 显示所有活动接口的网络配置
ifconfig eth0 # 显示特定接口的配置
ifconfig eth0 192.168.1.2 netmask 255.255.255.0 # 配置IP地址和子网掩码
ifconfig eth0 up # 启用接口
ifconfig eth0 down # 禁用接口
ip(取代ifconfig的现代网络工具)
bash
ip addr show # 显示所有接口的地址信息
ip addr show dev eth0 # 显示特定接口的地址信息
ip addr add 192.168.1.2/24 dev eth0 # 添加IP地址
ip addr del 192.168.1.2/24 dev eth0 # 删除IP地址
ip link set eth0 up # 启用接口
ip link set eth0 down # 禁用接口
ip route show # 显示路由表
ip route add default via 192.168.1.1 # 添加默认网关
ip route add 10.0.0.0/8 via 192.168.1.1 # 添加静态路由
ip -s link # 显示接口统计信息
ping(测试网络连接)
bash
ping google.com # 持续测试到google.com的连接
ping -c 4 google.com # 只发送4个数据包
ping -i 0.5 google.com # 每0.5秒发送一个数据包
ping -s 1500 google.com # 使用1500字节的数据包
ping -f google.com # 洪水ping(需要root权限)
ping -I eth0 google.com # 使用指定接口发送ping
traceroute(显示到目标主机的路由路径)
bash
traceroute google.com # 跟踪到google.com的路由
traceroute -n google.com # 不解析IP到主机名
traceroute -m 30 google.com # 设置最大跳数
traceroute -w 2 google.com # 设置响应超时时间
mtr(组合了ping和traceroute功能)
bash
mtr google.com # 实时显示到google.com的网络路径和延迟
mtr -c 10 google.com # 发送10个数据包后退出
mtr -n google.com # 不解析主机名
mtr -r google.com # 报告模式,不进入交互界面
netstat(网络统计)
bash
netstat -a # 显示所有连接和监听端口
netstat -tulpn # 显示所有监听的TCP和UDP端口及程序
netstat -tn # 显示所有TCP连接(不解析主机名)
netstat -r # 显示路由表
netstat -s # 显示每个协议的统计信息
netstat -i # 显示网络接口统计信息
ss(Socket统计,netstat的替代)
bash
ss -a # 显示所有连接
ss -t # 只显示TCP连接
ss -u # 只显示UDP连接
ss -l # 只显示监听的套接字
ss -p # 显示使用套接字的进程
ss -s # 显示套接字统计信息
ss -tn state established # 显示已建立的TCP连接
nmap(网络扫描工具)
bash
nmap 192.168.1.1 # 扫描单个IP
nmap 192.168.1.0/24 # 扫描整个子网
nmap -p 80,443 192.168.1.1 # 扫描特定端口
nmap -p 1-65535 192.168.1.1 # 扫描所有端口
nmap -sV 192.168.1.1 # 服务版本检测
nmap -O 192.168.1.1 # 操作系统检测
nmap -A 192.168.1.1 # 全面扫描(启用操作系统检测、版本检测等)
route(显示和管理路由表)
bash
route # 显示路由表
route -n # 不解析主机名显示路由表
route add default gw 192.168.1.1 # 添加默认网关
route add -net 10.0.0.0/8 gw 192.168.1.1 # 添加静态路由
route del default # 删除默认网关
arp(地址解析协议)
bash
arp # 显示ARP缓存
arp -a # 显示所有条目
arp -d 192.168.1.1 # 删除特定条目
arp -s 192.168.1.100 00:11:22:33:44:55 # 添加静态ARP条目
dig(DNS查询工具)
bash
dig google.com # 查询A记录
dig google.com +short # 简洁输出
dig -t MX google.com # 查询MX记录
dig -t ANY google.com # 查询所有记录
dig @8.8.8.8 google.com # 使用指定的DNS服务器
dig -x 8.8.8.8 # 反向DNS查询
nslookup(DNS查询工具)
bash
nslookup google.com # 查询A记录
nslookup -type=MX google.com # 查询MX记录
nslookup -type=ANY google.com # 查询所有记录
nslookup google.com 8.8.8.8 # 使用指定的DNS服务器
nslookup 8.8.8.8 # 反向DNS查询
host(DNS查询工具)
bash
host google.com # 查询A记录
host -t MX google.com # 查询MX记录
host -a google.com # 查询所有记录
host google.com 8.8.8.8 # 使用指定的DNS服务器
host 8.8.8.8 # 反向DNS查询
whois(查询域名注册信息)
bash
whois google.com # 查询域名注册信息
ssh(安全Shell)
bash
ssh user@hostname # 连接到远程主机
ssh -p 2222 user@hostname # 使用指定端口连接
ssh -i key.pem user@hostname # 使用私钥连接
ssh -X user@hostname # 启用X11转发
ssh -L 8080:localhost:80 user@hostname # 本地端口转发
ssh -R 8080:localhost:80 user@hostname # 远程端口转发
ssh -D 8080 user@hostname # 动态端口转发(SOCKS代理)
ssh-copy-id user@hostname # 复制SSH公钥到远程主机
scp(安全复制)
bash
scp file.txt user@hostname:/path # 复制本地文件到远程主机
scp user@hostname:/path/file.txt . # 从远程主机复制文件到本地
scp -r directory/ user@hostname:/path # 递归复制目录
scp -P 2222 file.txt user@hostname:/path # 使用指定端口
rsync(高效文件同步)
bash
rsync -av directory/ user@hostname:/path # 同步本地目录到远程
rsync -av user@hostname:/path/ directory/ # 同步远程目录到本地
rsync -avz directory/ user@hostname:/path # 使用压缩传输
rsync -av --delete directory/ user@hostname:/path # 删除目标中不存在于源的文件
rsync -av --exclude="*.tmp" directory/ user@hostname:/path # 排除特定文件
iptables(防火墙管理)
bash
iptables -L # 列出所有规则
iptables -L -n # 不解析主机名
iptables -L -v # 详细输出
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许SSH
iptables -A INPUT -j DROP # 丢弃所有其他输入
iptables -F # 清除所有规则
iptables -t nat -L # 列出NAT表规则
iptables-save > rules.txt # 保存规则
iptables-restore < rules.txt # 恢复规则
firewalld(RHEL/CentOS防火墙管理)
bash
firewall-cmd --state # 查看防火墙状态
firewall-cmd --list-all # 列出所有配置
firewall-cmd --add-service=http # 允许HTTP
firewall-cmd --add-port=8080/tcp # 添加端口
firewall-cmd --permanent --add-port=8080/tcp # 永久添加规则
firewall-cmd --reload # 重载规则
ufw(Ubuntu防火墙管理)
bash
ufw status # 查看状态
ufw enable # 启用防火墙
ufw disable # 禁用防火墙
ufw allow 22 # 允许SSH端口
ufw allow ssh # 允许SSH服务
ufw deny 80 # 阻止端口
ufw delete allow 22 # 删除规则
wget(网络下载器)
bash
wget URL # 下载文件
wget -c URL # 断点续传
wget -b URL # 后台下载
wget -O filename URL # 指定保存的文件名
wget -q URL # 静默模式
wget --user=USER --password=PASS URL # 使用身份验证
wget -r URL # 递归下载
wget -r -np -k URL # 递归下载网站,不跟随父目录链接
curl(多协议数据传输工具)
bash
curl URL # 显示URL内容
curl -o filename URL # 保存到文件
curl -O URL # 使用远程文件名保存
curl -C - -O URL # 断点续传
curl -I URL # 仅获取HTTP头
curl -v URL # 显示详细信息
curl -X POST -d "data" URL # 发送POST请求
curl -H "Header: Value" URL # 添加自定义头
curl -u user:password URL # 使用身份验证
curl -F "file=@filename" URL # 上传文件
nc/netcat(网络工具)
bash
nc -l 1234 # 监听端口
nc hostname 1234 # 连接到主机和端口
nc -z hostname 22 # 检查端口是否开放
nc -v hostname 22 # 详细输出
nc -l 1234 > file.txt # 接收文件
nc hostname 1234 < file.txt # 发送文件
tcpdump(网络数据包分析)
bash
tcpdump -i eth0 # 捕获特定接口的数据包
tcpdump -n # 不解析主机名
tcpdump host 192.168.1.1 # 捕获特定主机的数据包
tcpdump port 80 # 捕获特定端口的数据包
tcpdump -w capture.pcap # 保存捕获到文件
tcpdump -r capture.pcap # 读取捕获文件
tcpdump 'tcp port 80 and not host 192.168.1.1' # 复杂过滤
ifup/ifdown(启用/禁用网络接口)
bash
ifup eth0 # 启用网络接口
ifdown eth0 # 禁用网络接口
dhclient(DHCP客户端)
bash
dhclient eth0 # 为接口请求IP地址
dhclient -r eth0 # 释放IP地址
hostnamectl(主机名管理)
bash
hostnamectl # 显示系统主机信息
hostnamectl set-hostname newname # 设置主机名
用户管理命令
useradd(添加用户)
bash
useradd username # 创建新用户
useradd -m username # 创建用户及其主目录
useradd -m -d /path/to/home username # 指定主目录路径
useradd -g group username # 指定主组
useradd -G group1,group2 username # 指定附加组
useradd -s /bin/bash username # 指定默认shell
useradd -e 2023-12-31 username # 设置账户过期日期
useradd -c "Full Name" username # 添加注释/全名
useradd -u 1500 username # 指定UID
usermod(修改用户账户)
bash
usermod -L username # 锁定用户账户
usermod -U username # 解锁用户账户
usermod -g group username # 修改用户的主组
usermod -aG group username # 向用户添加附加组
usermod -l newname oldname # 修改用户名
usermod -d /path/to/home -m username # 修改主目录并移动文件
usermod -s /bin/zsh username # 修改默认shell
usermod -c "New Comment" username # 修改注释/全名
usermod -e 2023-12-31 username # 设置账户过期日期
userdel(删除用户)
bash
userdel username # 删除用户
userdel -r username # 删除用户及其主目录
passwd(管理用户密码)
bash
passwd # 修改当前用户密码
passwd username # 修改指定用户密码
passwd -l username # 锁定用户密码
passwd -u username # 解锁用户密码
passwd -d username # 删除用户密码
passwd -e username # 强制用户下次登录时修改密码
passwd -S username # 显示密码状态
groupadd(添加用户组)
bash
groupadd groupname # 创建新组
groupadd -g 1500 groupname # 指定GID
groupmod(修改用户组)
bash
groupmod -n newname oldname # 修改组名
groupmod -g 1600 groupname # 修改GID
groupdel(删除用户组)
bash
groupdel groupname # 删除组
gpasswd(管理用户组)
bash
gpasswd -a user group # 添加用户到组
gpasswd -d user group # 从组中删除用户
gpasswd -A user group # 设置组管理员
groups(显示用户组成员关系)
bash
groups # 显示当前用户所属组
groups username # 显示指定用户所属组
chage(修改用户密码过期信息)
bash
chage -l username # 显示用户密码过期信息
chage -E 2023-12-31 username # 设置账户过期日期
chage -M 90 username # 设置密码最长有效期
chage -m 7 username # 设置密码最短有效期
chage -W 14 username # 设置密码过期前警告天数
chage -I 30 username # 设置密码过期后账户锁定天数
chage -d 0 username # 强制用户下次登录时修改密码
su(切换用户)
bash
su # 切换到root用户(需要密码)
su username # 切换到指定用户
su - # 切换到root用户并使用root的环境
su - username # 切换到指定用户并使用其环境
sudo(以其他用户身份执行命令)
bash
sudo command # 以root身份执行命令
sudo -u username command # 以指定用户身份执行命令
sudo -l # 列出当前用户可用的sudo命令
sudo -i # 切换到root用户环境
sudo su - # 另一种切换到root用户环境的方式
visudo(安全编辑sudoers文件)
bash
visudo # 编辑/etc/sudoers文件
id(显示用户和组ID信息)
bash
id # 显示当前用户的ID信息
id username # 显示指定用户的ID信息
id -u # 只显示UID
id -g # 只显示主GID
id -G # 显示所有GID
id -n # 显示名称而不是ID
last(显示最近登录信息)
bash
last # 显示最近登录的用户
last username # 显示特定用户的登录历史
last -n 10 # 只显示最近10条记录
last reboot # 显示系统重启历史
lastlog(显示所有用户最后登录信息)
bash
lastlog # 显示所有用户的最后登录信息
lastlog -u username # 显示特定用户的最后登录信息
getent(获取系统数据库条目)
bash
getent passwd # 显示所有用户信息
getent passwd username # 显示特定用户信息
getent group # 显示所有组信息
getent group groupname # 显示特定组信息
软件包管理命令
APT (Debian/Ubuntu)
bash
apt update # 更新软件包索引
apt upgrade # 升级所有可升级的软件包
apt full-upgrade # 升级软件包,可能会删除一些软件包
apt install package-name # 安装软件包
apt remove package-name # 移除软件包
apt purge package-name # 移除软件包及其配置文件
apt autoremove # 移除不再需要的依赖包
apt search keyword # 搜索软件包
apt show package-name # 显示软件包详细信息
apt list --installed # 列出所有已安装的软件包
apt list --upgradable # 列出可升级的软件包
apt-get update # apt的替代命令
apt-get install package-name # apt的替代命令
apt-cache search keyword # 搜索软件包(替代命令)
DPKG (Debian/Ubuntu底层包管理)
bash
dpkg -i package.deb # 安装.deb包
dpkg -r package-name # 移除软件包
dpkg -P package-name # 完全移除软件包及其配置
dpkg -l # 列出已安装的软件包
dpkg -l | grep keyword # 搜索已安装的软件包
dpkg -s package-name # 显示软件包状态
dpkg -L package-name # 列出软件包的所有文件
dpkg -S /path/to/file # 查找文件属于哪个软件包
dpkg-reconfigure package-name # 重新配置已安装的软件包
YUM/DNF (RHEL/CentOS/Fedora)
bash
yum update # 更新所有软件包
yum install package-name # 安装软件包
yum remove package-name # 移除软件包
yum search keyword # 搜索软件包
yum info package-name # 显示软件包信息
yum list installed # 列出已安装的软件包
yum list available # 列出可用的软件包
yum clean all # 清除缓存
yum repolist # 列出启用的仓库
yum history # 显示事务历史
DNF (YUM的新一代替代品)
bash
dnf check-update # 检查可用更新
dnf upgrade # 升级所有软件包
dnf install package-name # 安装软件包
dnf remove package-name # 移除软件包
dnf search keyword # 搜索软件包
dnf info package-name # 显示软件包信息
dnf list installed # 列出已安装的软件包
dnf clean all # 清除缓存
dnf repolist # 列出启用的仓库
dnf history # 显示事务历史
dnf module list # 列出可用模块
dnf module enable module:stream # 启用模块流
RPM (RHEL/CentOS/Fedora底层包管理)
bash
rpm -i package.rpm # 安装RPM包
rpm -U package.rpm # 升级RPM包
rpm -e package-name # 移除软件包
rpm -q package-name # 查询软件包
rpm -qa # 列出所有已安装的软件包
rpm -qf /path/to/file # 查找文件属于哪个软件包
rpm -ql package-name # 列出软件包的所有文件
rpm -qi package-name # 显示软件包信息
rpm -V package-name # 验证软件包
rpm --import key.asc # 导入GPG密钥
Pacman (Arch Linux)
bash
pacman -Syu # 同步数据库并更新系统
pacman -S package-name # 安装软件包
pacman -R package-name # 移除软件包
pacman -Rs package-name # 移除软件包及其依赖
pacman -Ss keyword # 搜索软件包
pacman -Si package-name # 显示远程软件包信息
pacman -Qi package-name # 显示本地软件包信息
pacman -Ql package-name # 列出软件包的所有文件
pacman -Qo /path/to/file # 查找文件属于哪个软件包
pacman -Qdt # 列出不再需要的软件包
Zypper (SUSE)
bash
zypper refresh # 刷新仓库
zypper update # 更新已安装的软件包
zypper install package-name # 安装软件包
zypper remove package-name # 移除软件包
zypper search keyword # 搜索软件包
zypper info package-name # 显示软件包信息
zypper list-updates # 列出可更新的软件包
zypper repos # 列出配置的仓库
zypper patch-check # 检查可用补丁
zypper patches # 列出所有补丁
Snap (跨Linux发行版的包管理)
bash
snap find keyword # 搜索软件包
snap info package-name # 显示软件包信息
snap install package-name # 安装软件包
snap refresh package-name # 更新软件包
snap remove package-name # 移除软件包
snap list # 列出已安装的软件包
snap refresh # 更新所有snap包
Flatpak (跨桌面Linux应用分发)
bash
flatpak search keyword # 搜索应用
flatpak install app-id # 安装应用
flatpak uninstall app-id # 卸载应用
flatpak update # 更新所有应用
flatpak update app-id # 更新特定应用
flatpak list # 列出已安装的应用
flatpak run app-id # 运行应用
压缩与归档命令
tar(归档工具)
bash
tar -cf archive.tar file1 file2 # 创建归档文件
tar -xf archive.tar # 解压归档文件
tar -tvf archive.tar # 列出归档文件内容
tar -czf archive.tar.gz directory/ # 创建gzip压缩归档
tar -xzf archive.tar.gz # 解压gzip压缩归档
tar -cjf archive.tar.bz2 directory/ # 创建bzip2压缩归档
tar -xjf archive.tar.bz2 # 解压bzip2压缩归档
tar -cJf archive.tar.xz directory/ # 创建xz压缩归档
tar -xJf archive.tar.xz # 解压xz压缩归档
tar --exclude='*.log' -czf archive.tar.gz directory/ # 排除特定文件
gzip/gunzip(GNU压缩工具)
bash
gzip file.txt # 压缩文件(创建file.txt.gz并删除原文件)
gzip -k file.txt # 压缩并保留原文件
gzip -9 file.txt # 最高压缩率
gzip -d file.txt.gz # 解压文件
gunzip file.txt.gz # 解压文件
bzip2/bunzip2(高压缩率工具)
bash
bzip2 file.txt # 压缩文件
bzip2 -k file.txt # 压缩并保留原文件
bzip2 -d file.txt.bz2 # 解压文件
bunzip2 file.txt.bz2 # 解压文件
xz(高压缩率工具)
bash
xz file.txt # 压缩文件
xz -k file.txt # 压缩并保留原文件
xz -d file.txt.xz # 解压文件
zip/unzip(兼容Windows的压缩工具)
bash
zip archive.zip file1 file2 # 创建zip归档
zip -r archive.zip directory/ # 递归压缩目录
unzip archive.zip # 解压zip归档
unzip -l archive.zip # 列出zip归档内容
unzip archive.zip -d /target/directory # 解压到指定目录
7z(高压缩率多格式工具)
bash
7z a archive.7z file1 file2 # 创建7z归档
7z a -r archive.7z directory/ # 递归压缩目录
7z x archive.7z # 解压7z归档
7z l archive.7z # 列出7z归档内容
7z x archive.7z -o/target/directory # 解压到指定目录
rar/unrar(RAR格式支持)
bash
rar a archive.rar file1 file2 # 创建rar归档
rar a -r archive.rar directory/ # 递归压缩目录
unrar x archive.rar # 解压rar归档
unrar l archive.rar # 列出rar归档内容
unrar x archive.rar /target/directory/ # 解压到指定目录
cpio(复制文件归档)
bash
find . -name "*.txt" | cpio -ov > archive.cpio # 创建cpio归档
cpio -idv < archive.cpio # 解压cpio归档
zstd(高压缩比和速度的压缩工具)
bash
zstd file.txt # 压缩文件
zstd -d file.txt.zst # 解压文件
zstd -19 file.txt # 最高压缩率
zstd --rm file.txt # 压缩后删除原文件
日志与监控命令
journalctl(systemd日志查询)
bash
journalctl # 显示所有日志
journalctl -f # 跟踪最新日志(类似tail -f)
journalctl -u service-name # 显示特定服务的日志
journalctl --since today # 显示今天的日志
journalctl --since "2023-01-01" --until "2023-01-31" # 指定时间范围
journalctl -p err # 只显示错误及更高级别的日志
journalctl -b # 显示本次启动的日志
journalctl -b -1 # 显示上次启动的日志
journalctl --disk-usage # 显示日志占用的磁盘空间
journalctl --vacuum-time=1w # 删除一周前的日志
dmesg(显示内核环形缓冲区消息)
bash
dmesg # 显示内核消息
dmesg -T # 显示带可读时间戳的消息
dmesg | grep -i error # 过滤显示错误消息
dmesg -w # 实时显示内核消息
dmesg -c # 显示并清除消息
tail(查看文件尾部)
bash
tail -f /var/log/syslog # 实时查看系统日志
tail -n 100 /var/log/syslog # 查看最后100行
tail -f -n 100 /var/log/syslog # 查看最后100行并实时跟踪
less(阅读日志文件)
bash
less /var/log/syslog # 分页查看系统日志
less +F /var/log/syslog # 类似tail -f的实时查看模式
zcat/zless/zgrep(查看压缩日志)
bash
zcat /var/log/syslog.1.gz # 查看压缩日志文件内容
zless /var/log/syslog.1.gz # 分页查看压缩日志
zgrep "error" /var/log/syslog.1.gz # 在压缩日志中搜索
logrotate(日志轮转配置)
bash
logrotate -d /etc/logrotate.conf # 调试模式,显示会做什么但不执行
logrotate -f /etc/logrotate.conf # 强制执行日志轮转
sar(系统活动报告)
bash
sar # 显示当天的CPU使用情况
sar -r # 显示内存使用情况
sar -b # 显示I/O和传输速率统计
sar -n DEV # 显示网络设备统计
sar -f /var/log/sa/sa20 # 查看特定日期的报告
sar -o output.file 5 10 # 每5秒收集一次,共收集10次
iostat(磁盘I/O统计)
bash
iostat # 显示CPU和磁盘I/O统计
iostat -d # 只显示磁盘统计
iostat -x # 显示扩展磁盘统计
iostat -y 2 10 # 每2秒收集一次,共10次,去掉第一次
mpstat(多处理器统计)
bash
mpstat # 显示所有CPU使用情况
mpstat -P ALL # 分别显示每个CPU的统计
mpstat 2 5 # 每2秒一次,共5次
vmstat(虚拟内存统计)
bash
vmstat # 显示虚拟内存统计
vmstat 2 5 # 每2秒一次,共5次
vmstat -s # 显示内存使用详情
vmstat -d # 显示磁盘统计
nmon(系统监控工具)
bash
nmon # 启动交互式监控工具
nmon -f -s 60 -c 60 # 每60秒收集一次,共60次,保存到文件
collectd(系统统计收集守护进程)
bash
systemctl status collectd # 查看collectd服务状态
systemctl start collectd # 启动collectd服务
systemctl stop collectd # 停止collectd服务
atop(高级系统和进程监控)
bash
atop # 启动交互式系统监控
atop -r /var/log/atop/atop_20230101 # 查看历史数据
htop(增强的进程查看器)
bash
htop # 启动交互式进程查看器
glances(跨平台系统监控工具)
bash
glances # 启动交互式监控
glances -w # 启动Web服务器模式
netdata(实时性能监控)
bash
systemctl status netdata # 查看netdata服务状态
systemctl start netdata # 启动netdata服务
服务管理命令
systemctl(systemd服务管理)
bash
systemctl status service-name # 检查服务状态
systemctl start service-name # 启动服务
systemctl stop service-name # 停止服务
systemctl restart service-name # 重启服务
systemctl reload service-name # 重新加载配置
systemctl enable service-name # 设置服务开机自启
systemctl disable service-name # 禁用服务开机自启
systemctl is-enabled service-name # 检查服务是否开机自启
systemctl mask service-name # 屏蔽服务(防止启动)
systemctl unmask service-name # 解除屏蔽
systemctl list-units --type=service # 列出所有活动服务单元
systemctl list-unit-files --type=service # 列出所有已安装的服务单元文件
systemctl daemon-reload # 重新加载systemd配置
service(传统服务管理,兼容SysV)
bash
service service-name status # 检查服务状态
service service-name start # 启动服务
service service-name stop # 停止服务
service service-name restart # 重启服务
service service-name reload # 重新加载配置
service --status-all # 显示所有服务状态
chkconfig(SysV服务配置)
bash
chkconfig --list # 列出所有服务及其运行级别配置
chkconfig service-name on # 启用服务自启动
chkconfig service-name off # 禁用服务自启动
chkconfig --level 35 service-name on # 设置特定运行级别的自启动
update-rc.d(Debian/Ubuntu SysV服务配置)
bash
update-rc.d service-name defaults # 添加默认启动脚本链接
update-rc.d service-name enable # 启用服务自启动
update-rc.d service-name disable # 禁用服务自启动
update-rc.d -f service-name remove # 删除启动脚本链接
systemd-analyze(分析systemd启动性能)
bash
systemd-analyze # 显示系统启动总时间
systemd-analyze blame # 按时间排序显示每个单元的启动时间
systemd-analyze critical-chain # 显示最慢的启动链
systemd-analyze plot > boot.svg # 创建启动过程可视化图表
initctl(Upstart服务控制)
bash
initctl list # 列出所有Upstart作业
initctl status service-name # 检查服务状态
initctl start service-name # 启动服务
initctl stop service-name # 停止服务
initctl restart service-name # 重启服务
rc-service/rc-update(OpenRC服务控制)
bash
rc-service service-name status # 检查服务状态
rc-service service-name start # 启动服务
rc-service service-name stop # 停止服务
rc-service service-name restart # 重启服务
rc-update show # 显示所有运行级别的服务
rc-update add service-name default # 添加服务到默认运行级别
rc-update del service-name default # 从默认运行级别删除服务
journalctl(查看服务日志)
bash
journalctl -u service-name # 查看特定服务的日志
journalctl -u service-name -f # 实时查看服务日志
journalctl -u service-name --since today # 查看今天的服务日志
Shell脚本相关命令
bash(Bourne Again Shell)
bash
bash script.sh # 运行bash脚本
bash -x script.sh # 调试模式运行脚本
bash -c "command" # 执行命令字符串
bash -n script.sh # 语法检查不执行
sh(POSIX shell)
bash
sh script.sh # 运行shell脚本
sh -x script.sh # 调试模式运行脚本
chmod(更改脚本权限)
bash
chmod +x script.sh # 添加执行权限
env(设置环境并执行命令)
bash
env VAR=value command # 设置环境变量并执行命令
env -i command # 清空环境并执行命令
env # 显示当前环境变量
export(设置环境变量)
bash
export VAR=value # 设置环境变量
export VAR # 导出已存在的变量到环境
export -p # 显示所有导出的变量
set(设置Shell选项)
bash
set -e # 遇到错误立即退出
set -x # 显示执行的命令
set -u # 使用未定义变量时报错
set -o pipefail # 管道中任何命令失败都报错
set +e # 关闭-e选项
readonly(声明只读变量)
bash
readonly VAR=value # 设置只读变量
readonly VAR # 将已存在的变量标记为只读
readonly -p # 显示所有只读变量
trap(捕获信号)
bash
trap "echo 'Caught signal'" SIGINT # 捕获SIGINT信号
trap - SIGINT # 恢复SIGINT的默认处理
trap "cleanup; exit" EXIT # 在脚本退出时执行清理函数
source/. (执行脚本在当前shell)
bash
source script.sh # 在当前shell中执行脚本
. script.sh # 与source相同
echo(显示消息)
bash
echo "Hello World" # 显示文本
echo -e "Hello\nWorld" # 解释转义序列
echo -n "No newline" # 不添加换行符
printf(格式化输出)
bash
printf "Name: %s, Age: %d\n" "John" 30 # 格式化输出
printf "%.2f\n" 3.1415926 # 保留小数点后两位
read(读取输入)
bash
read var # 从标准输入读取一行到变量
read -p "Enter name: " name # 显示提示并读取输入
read -s -p "Password: " password # 静默模式读取(不显示输入)
read -t 5 var # 设置超时(5秒)
read -a array # 读取到数组
read -r var # 原始模式(不解释反斜杠)
eval(执行参数作为命令)
bash
eval "ls -la" # 执行字符串作为命令
cmd="find . -name '*.txt'"
eval $cmd # 执行复杂命令
exec(执行命令并替换当前进程)
bash
exec ls # 执行ls并替换当前shell
exec 3> file.txt # 打开文件描述符用于写入
exec 4< file.txt # 打开文件描述符用于读取
exec 3>&- # 关闭文件描述符
ulimit(限制shell资源)
bash
ulimit -a # 显示所有限制
ulimit -f 1024 # 限制文件大小(块)
ulimit -n 1024 # 限制打开文件数
ulimit -u 100 # 限制用户进程数
test/[ ](条件测试)
bash
test -f file.txt # 测试文件是否存在且是普通文件
[ -d directory ] # 测试目录是否存在
[ string1 = string2 ] # 测试字符串是否相同
[ $num1 -eq $num2 ] # 测试数字是否相等
[ -n "$var" ] # 测试变量是否非空
[ -z "$var" ] # 测试变量是否为空
[ condition1 -a condition2 ] # 逻辑AND
[ condition1 -o condition2 ] # 逻辑OR
[[ ]](增强的条件测试)
bash
[[ -f file.txt ]] # 测试文件是否存在且是普通文件
[[ string1 == string2 ]] # 测试字符串是否相同
[[ string =~ regex ]] # 正则表达式匹配
[[ $num1 -eq $num2 ]] # 测试数字是否相等
[[ condition1 && condition2 ]] # 逻辑AND
[[ condition1 || condition2 ]] # 逻辑OR
for(循环)
bash
for i in 1 2 3; do echo $i; done # 基本for循环
for i in {1..10}; do echo $i; done # 范围循环
for i in $(seq 1 2 10); do echo $i; done # 步长为2的循环
for ((i=0; i<10; i++)); do echo $i; done # C风格循环
for file in *.txt; do echo $file; done # 遍历文件
while(条件循环)
bash
while [ $i -lt 10 ]; do # 当条件为真时循环
echo $i
i=$((i+1))
done
while read line; do # 按行读取文件
echo $line
done < file.txt
until(条件循环)
bash
until [ $i -ge 10 ]; do # 当条件为假时循环
echo $i
i=$((i+1))
done
case(分支选择)
bash
case $var in
pattern1)
commands;;
pattern2|pattern3)
commands;;
*)
default commands;;
esac
select(创建菜单)
bash
select option in "Option 1" "Option 2" "Quit"; do
case $option in
"Option 1")
echo "Selected Option 1";;
"Option 2")
echo "Selected Option 2";;
"Quit")
break;;
*)
echo "Invalid option";;
esac
done
function(函数定义)
bash
function myfunc() {
echo "Function argument: $1"
return 0
}
# 或
myfunc() {
echo "Function argument: $1"
return 0
}
# 调用函数
myfunc argument
declare(声明变量及属性)
bash
declare -i num=10 # 声明整数变量
declare -r var="readonly" # 声明只读变量
declare -a array # 声明数组
declare -A map # 声明关联数组
declare -p var # 显示变量信息
let(执行算术表达式)
bash
let "a = 5 + 3" # 执行算术运算
let "a++" # 增量
let "a += 2" # 加并赋值
expr(执行表达式)
bash
expr 5 + 3 # 计算并输出表达式
expr length "string" # 计算字符串长度
expr substr "string" 2 3 # 提取子字符串
expr index "string" "s" # 查找字符位置
bc(精确计算器)
bash
echo "5.5 + 3.2" | bc # 计算浮点数
echo "scale=2; 10/3" | bc # 设置小数精度
echo "obase=16; 255" | bc # 十进制转十六进制
安全相关命令
ssh-keygen(生成SSH密钥)
bash
ssh-keygen # 生成SSH密钥对
ssh-keygen -t rsa -b 4096 # 生成4096位RSA密钥
ssh-keygen -t ed25519 # 生成Ed25519密钥(更安全)
ssh-keygen -f keyfile # 指定密钥文件名
ssh-keygen -p -f keyfile # 修改密钥密码
ssh-copy-id(复制SSH公钥到远程主机)
bash
ssh-copy-id user@hostname # 复制默认公钥到远程主机
ssh-copy-id -i keyfile.pub user@hostname # 指定公钥文件
openssl(OpenSSL工具集)
bash
# 对称加密
openssl enc -aes-256-cbc -in file.txt -out file.enc # 加密文件
openssl enc -aes-256-cbc -d -in file.enc -out file.txt # 解密文件
# 生成哈希
openssl dgst -sha256 file.txt # 生成SHA256哈希
openssl dgst -md5 file.txt # 生成MD5哈希
# 生成随机数据
openssl rand -base64 32 # 生成Base64编码的随机数据
openssl rand -hex 16 # 生成十六进制编码的随机数据
# 证书管理
openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout key.pem # 生成自签名证书
openssl x509 -in cert.pem -text -noout # 查看证书内容
gpg(GNU Privacy Guard)
bash
gpg --gen-key # 生成新密钥对
gpg --encrypt --recipient user file.txt # 加密文件
gpg --decrypt file.txt.gpg # 解密文件
gpg --sign file.txt # 签名文件
gpg --verify file.txt.sig # 验证签名
gpg --list-keys # 列出公钥
gpg --list-secret-keys # 列出私钥
chage(修改用户密码有效期)
bash
chage -l username # 显示用户密码策略
chage -M 90 username # 设置密码最长有效期为90天
chage -m 7 username # 设置密码最短有效期为7天
chage -d 0 username # 强制用户下次登录修改密码
fail2ban-client(管理fail2ban服务)
bash
fail2ban-client status # 显示所有监狱状态
fail2ban-client status sshd # 显示SSH监狱状态
fail2ban-client set sshd banip 192.168.1.100 # 手动禁止IP
fail2ban-client set sshd unbanip 192.168.1.100 # 解除IP禁止
lastb(查看失败登录尝试)
bash
lastb # 显示登录失败记录
lastb -n 20 # 显示最近20条失败记录
ausearch(搜索审计日志)
bash
ausearch -m login # 搜索登录相关审计事件
ausearch -ua 1000 # 搜索特定用户ID的事件
ausearch -ts today # 搜索今天的事件
ausearch -f /etc/passwd # 搜索与特定文件相关的事件
auditctl(管理审计规则)
bash
auditctl -l # 列出当前审计规则
auditctl -w /etc/passwd -p war -k passwd_changes # 监控文件更改
auditctl -a always,exit -S unlink -S rmdir # 监控删除操作
getfacl/setfacl(管理文件访问控制列表)
bash
getfacl file # 显示文件ACL
setfacl -m u:user:rw file # 设置用户ACL权限
setfacl -m g:group:r file # 设置组ACL权限
setfacl -x u:user file # 删除用户ACL
setfacl -b file # 删除所有ACL
sestatus(SELinux状态)
bash
sestatus # 显示SELinux状态
setenforce(设置SELinux模式)
bash
setenforce 0 # 设置SELinux为允许模式
setenforce 1 # 设置SELinux为强制模式
restorecon(恢复SELinux上下文)
bash
restorecon -v file # 恢复文件的默认SELinux上下文
restorecon -R -v /path # 递归恢复目录及内容的SELinux上下文
chcon(更改SELinux安全上下文)
bash
chcon -t httpd_sys_content_t file # 更改文件的SELinux类型
chcon -R -t httpd_sys_content_t /path # 递归更改目录及内容
ufw(Ubuntu简化防火墙)
bash
ufw status # 查看状态
ufw enable # 启用防火墙
ufw disable # 禁用防火墙
ufw allow 22 # 允许SSH端口
ufw deny 23 # 拒绝端口
ufw allow from 192.168.1.0/24 # 允许特定网段
ufw delete allow 22 # 删除规则
firewall-cmd(FirewallD防火墙)
bash
firewall-cmd --state # 查看状态
firewall-cmd --list-all # 列出所有设置
firewall-cmd --add-service=http # 允许HTTP服务
firewall-cmd --add-port=8080/tcp # 允许特定端口
firewall-cmd --permanent --add-service=https # 永久允许HTTPS
firewall-cmd --reload # 重新加载配置
visudo(安全编辑sudoers文件)
bash
visudo # 编辑sudoers文件
lynis(安全审计工具)
bash
lynis audit system # 审计系统安全
lynis show commands # 显示可用命令
rkhunter(Rootkit检测器)
bash
rkhunter --check # 检查系统安全隐患
rkhunter --update # 更新特征数据库
实用技巧与快捷方式
命令行快捷键
css
Ctrl+C - 中断当前命令
Ctrl+Z - 挂起当前命令(使用fg恢复)
Ctrl+D - 发送EOF信号,通常用于退出当前shell或终止输入
Ctrl+L - 清屏(相当于clear命令)
Ctrl+A - 移动到行首
Ctrl+E - 移动到行尾
Ctrl+U - 删除光标前所有内容
Ctrl+K - 删除光标后所有内容
Ctrl+W - 删除光标前的一个单词
Alt+F - 向前移动一个单词
Alt+B - 向后移动一个单词
Ctrl+R - 搜索命令历史
Ctrl+G - 退出搜索模式
Ctrl+P/Up Arrow - 上一条命令
Ctrl+N/Down Arrow - 下一条命令
Tab - 自动补全命令或文件名
历史命令技巧
bash
!! # 重复上一条命令
!n # 重复历史中第n条命令
!-n # 重复倒数第n条命令
!string # 重复最近以string开头的命令
!?string # 重复最近包含string的命令
^string1^string2 # 将上一条命令中的string1替换为string2并执行
!!:gs/string1/string2/ # 将上一条命令中的所有string1替换为string2并执行
!$ 或 $_ # 引用上一条命令的最后一个参数
!* # 引用上一条命令的所有参数
!^ # 引用上一条命令的第一个参数
输入/输出重定向
bash
command > file # 将输出重定向到文件(覆盖)
command >> file # 将输出追加到文件
command < file # 从文件读取输入
command 2> file # 将错误输出重定向到文件
command &> file # 将标准输出和错误输出重定向到文件
command >&2 # 将标准输出重定向到标准错误
command 2>&1 # 将标准错误重定向到标准输出
command | tee file # 将输出发送到标准输出和文件
command |& tee file # 将标准输出和错误都发送到标准输出和文件
进程管理快捷键
bash
command & # 在后台运行命令
jobs # 列出后台作业
fg %n # 将作业号n切换到前台
bg %n # 将作业号n切换到后台继续运行
kill %n # 终止作业号n
disown %n # 使作业脱离shell控制
nohup command & # 使命令免疫挂起和终端关闭
别名与函数
bash
# 创建别名
alias ll='ls -alh'
alias ..='cd ..'
alias ...='cd ../..'
# 创建函数
mcd() {
mkdir -p "$1" && cd "$1"
}
extract() {
if [ -f $1 ]; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar e $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "'$1' cannot be extracted via extract()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
命令组合
bash
command1 && command2 # 只有command1成功时才执行command2
command1 || command2 # 只有command1失败时才执行command2
command1 ; command2 # 无论command1结果如何都执行command2
(command1 ; command2) # 在子shell中执行命令
{ command1 ; command2; } # 在当前shell中执行命令组
双引号与单引号
bash
echo "$HOME" # 变量会被解析,输出/home/user
echo '$HOME' # 变量不会被解析,输出$HOME
echo "The date is $(date)" # 命令替换会被解析
通配符和模式匹配
bash
ls *.txt # 匹配所有.txt文件
ls file[123].txt # 匹配file1.txt, file2.txt, file3.txt
ls file[1-5].txt # 匹配file1.txt到file5.txt
ls file[!1-5].txt # 匹配不在范围内的文件
ls file?.txt # 匹配file后跟任意单个字符
控制命令行操作
bash
set -e # 脚本中任何命令失败就退出
set -x # 显示执行的每条命令
set -u # 引用未定义变量时报错
set -o pipefail # 管道中任何命令失败都报错
参数展开技巧
bash
${var:-default} # 如果var未设置或为空,返回default
${var:=default} # 如果var未设置或为空,将default赋给var并返回
${var:+value} # 如果var已设置且非空,返回value,否则返回空
${var:?error} # 如果var未设置或为空,打印error并退出
${#var} # 返回var的长度
${var:offset:length} # 返回var的子字符串
${var#pattern} # 从头删除最短匹配pattern的部分
${var##pattern} # 从头删除最长匹配pattern的部分
${var%pattern} # 从尾删除最短匹配pattern的部分
${var%%pattern} # 从尾删除最长匹配pattern的部分
${var/pattern/replacement} # 替换第一个匹配
${var//pattern/replacement} # 替换所有匹配
推荐的Linux命令查询网站
以下是几个非常实用的Linux命令查询网站,可以帮助你快速查找和学习Linux命令:
-
Linux命令大全(手册) - 提供全面的Linux命令分类查询,包括文件管理、文档编辑、系统管理等多个分类的命令详解。
-
菜鸟教程 - Linux命令大全 - 提供详细的Linux命令使用说明和参数解释,适合初学者和有经验用户。
-
freeCodeCamp - Linux命令手册 - 提供详细解释和实用示例的Linux命令入门指南。
这些网站提供了丰富的命令参考资料和使用示例,无论是日常使用还是系统管理,都能找到需要的命令信息。当遇到不熟悉的命令或需要了解特定参数时,可以在这些网站上快速查询。