[Ubuntu系统] Ubuntu系统入门指南:常用命令详解

210 0
Honkers 2026-7-2 03:39:49 | 显示全部楼层 |阅读模式

1. 引言:为什么选择Ubuntu与命令行

Ubuntu是目前世界上最流行的Linux发行版之一,它以易用性、强大的社区支持和稳定的软件生态著称。对于初学者而言,Ubuntu是进入Linux世界的最佳入口。

而命令行(终端,Terminal)则是Linux系统的灵魂。图形界面虽然直观,但命令行具有以下不可替代的优势:

  • 高效性:许多复杂的操作,在图形界面下需要点击多次,在命令行中只需一条命令。

  • 自动化:命令可以轻松写入脚本,实现自动化运维。

  • 资源占用低:无需加载图形环境,适合服务器或低配置设备。

  • 精确控制:提供更细粒度的系统控制能力,尤其在排查故障时。

  • 通用性:无论是Ubuntu、CentOS还是Debian,核心命令几乎通用。

这份指南将带你系统地学习这些命令,不求死记硬背,而是理解其原理,学会查阅帮助文档。


2. 基础概念:开始之前

在正式输入命令之前,我们需要了解几个核心概念。

Linux文件系统结构

Linux的文件系统采用树形结构,从根目录/开始。与Windows不同,Linux没有C盘、D盘的概念,所有的硬件设备(硬盘、U盘、光驱)都被挂载到目录树下的某个位置。

关键目录说明:

目录作用
/根目录,整个文件系统的起点。
/bin存放基本系统命令(二进制文件),所有用户都可执行。
/sbin存放系统管理命令,通常只有root(管理员)可以执行。
/boot存放启动引导程序(如GRUB)和Linux内核文件。
/dev设备文件目录,硬盘、键盘、鼠标等都以文件形式存在于此。
/etc系统配置文件目录,几乎所有软件的配置都存放在此。
/home普通用户的家目录。例如用户john的家目录为/home/john,用~表示。
/lib系统库文件目录,类似于Windows的DLL文件。
/media系统自动挂载的移动设备(如U盘、光驱)挂载点。
/mnt临时挂载文件系统(如手动挂载硬盘)的常用位置。
/opt第三方应用软件安装目录。
/proc虚拟文件系统,反映系统运行时信息(进程、内存等),存在于内存中。
/root系统管理员(root)的家目录。
/run系统运行时产生的临时文件,重启后清空。
/srv服务启动后需要访问的数据目录。
/sys虚拟文件系统,提供内核设备信息。
/tmp临时文件目录,所有用户可读写,重启后通常清空。
/usr用户程序和数据目录,包含/usr/bin、/usr/local等,是最大的目录之一。
/var可变数据目录,如日志文件(/var/log)、缓存(/var/cache)、邮件(/var/mail)。

路径(绝对路径与相对路径)

  • 绝对路径:从根目录/开始的完整路径。

    • 例如:/home/john/Documents/file.txt

  • 相对路径:相对于当前工作目录的路径。

    • 例如:当前在/home/john,Documents/file.txt就是相对路径。

    • . 表示当前目录。

    • .. 表示上一级目录。

    • ~ 表示当前用户的家目录。

    • - 表示上一个工作目录。

通配符

通配符用于批量匹配文件名,极大提升效率。

通配符含义示例
*匹配任意长度(包括0)的任意字符*.txt 匹配所有以.txt结尾的文件
?匹配任意单个字符file?.log 匹配file1.log、fileA.log,但不匹配file10.log
[abc]匹配方括号内的任意一个字符file[123].txt 匹配file1.txt、file2.txt、file3.txt
[a-z]匹配范围内的任意一个字符img[a-z].jpg
[!abc]匹配不在括号内的任意一个字符file[!0-9].txt 匹配不包含数字的file
{a,b,c}花括号展开,匹配任意一个选项{hello,world}.txt 展开为hello.txt和world.txt

man 命令:最强大的帮助手册

几乎每个命令都有对应的帮助手册。学会使用man是Linux入门的第一步。

bash

  1. man ls # 查看 ls 命令的详细手册
  2. man -k keyword # 搜索包含keyword的命令(等同于 apropos)
  3. man 5 passwd # 查看第5章(配置文件格式)中的passwd文件说明
复制代码

man手册分为9章:

  1. 用户命令(可执行程序)

  2. 系统调用(内核提供的函数)

  3. 库调用(程序库中的函数)

  4. 特殊文件(设备文件)

  5. 文件格式与约定(配置文件)

  6. 游戏

  7. 杂项

  8. 系统管理命令(通常需要root)

  9. 内核例程(非标准)

在man页面内,可以使用方向键滚动,按q退出,按/搜索关键词。


3. 核心命令:文件与目录管理

这是最常用的一类命令,如同Windows中的文件资源管理器,但全部通过文本实现。

pwd:显示当前路径

全称:Print Working Directory

bash

  1. pwd
  2. # 输出示例:/home/username
复制代码

当你迷路在复杂的目录结构中时,pwd总能告诉你身在何方。

ls:列出目录内容

全称:List

bash

  1. ls # 列出当前目录内容(不显示隐藏文件)
  2. ls -l # 长格式显示,包含权限、链接数、所有者、大小、修改时间等
  3. ls -a # 显示所有文件,包括以 . 开头的隐藏文件
  4. ls -lh # 人类可读的格式(显示K、M、G等单位)
  5. ls -la # 最常用组合:显示所有文件的详细信息
  6. ls -ltr # 按修改时间排序(t)并反转(r),最新文件在最后
  7. ls -R # 递归列出子目录内容
  8. ls -d */ # 只列出目录
复制代码

ls -l输出示例解读:

text

  1. -rw-r--r-- 1 user group 4096 Apr 10 10:30 file.txt
复制代码
  • -rw-r--r--:文件类型和权限(第一位-表示普通文件,d表示目录,l表示链接)

  • 1:硬链接数

  • user:所有者

  • group:所属组

  • 4096:文件大小(字节)

  • Apr 10 10:30:最后修改时间

  • file.txt:文件名

cd:切换目录

全称:Change Directory

bash

  1. cd /var/log # 切换到绝对路径
  2. cd Documents # 切换到相对路径
  3. cd .. # 返回上级目录
  4. cd ../.. # 返回上两级目录
  5. cd ~ # 切换到当前用户的家目录
  6. cd # 无参数等同于 cd ~
  7. cd - # 切换到上次所在的目录
复制代码

mkdir:创建目录

全称:Make Directory

bash

  1. mkdir dirname # 创建单个目录
  2. mkdir dir1 dir2 dir3 # 创建多个目录
  3. mkdir -p path/to/new/dir # 递归创建(如果父目录不存在,一并创建)
  4. mkdir -m 755 newdir # 创建时指定权限
复制代码

rmdir与rm:删除目录与文件

  • rmdir只能删除空目录,实际使用较少。

  • rm(Remove)功能强大,但非常危险,一旦删除很难恢复。

bash

  1. rm file.txt # 删除文件
  2. rm -i file.txt # 删除前确认(安全习惯)
  3. rm -f file.txt # 强制删除,不提示(危险)
  4. rm -r dirname # 递归删除目录及其内容(删除非空目录必须加-r)
  5. rm -rf dirname # 递归强制删除,请再三确认路径!
复制代码

警告:rm -rf / 会尝试删除整个系统,千万不要尝试!rm -rf ./*也要谨慎。

touch:创建文件与更新时间戳

bash

  1. touch newfile.txt # 如果文件不存在,创建空文件;如果存在,更新其修改时间为当前
  2. touch -t 202401011200 file # 将文件时间戳设置为2024年1月1日12:00
复制代码

cp:复制文件与目录

全称:Copy

bash

  1. cp source.txt dest.txt # 复制文件
  2. cp -i source.txt dest.txt # 目标存在时提示覆盖
  3. cp -r source_dir dest_dir # 递归复制目录
  4. cp -a source_dir dest_dir # 保留所有属性(权限、时间戳等)的递归复制
  5. cp file1.txt file2.txt dest/ # 同时复制多个文件到目标目录
复制代码

mv:移动与重命名

全称:Move

bash

  1. mv oldname.txt newname.txt # 重命名文件
  2. mv file.txt /path/to/dir/ # 移动文件
  3. mv -i file.txt /path/ # 移动前确认
  4. mv dir1 dir2 # 如果dir2不存在,则重命名;存在则移动dir1到dir2内部
复制代码

ln:链接文件(硬链接与软链接)

链接是Linux文件系统的重要特性。

  • 硬链接(Hard Link):多个文件名指向同一个inode(数据块)。删除一个,其他仍有效。不能跨文件系统,不能链接目录。

  • 软链接(Symbolic Link):类似于Windows的快捷方式,指向另一个文件路径。可跨文件系统,可链接目录。

bash

  1. ln source.txt hardlink.txt # 创建硬链接
  2. ln -s target.txt softlink.txt # 创建软链接
复制代码

通过ls -li可以看到inode号,硬链接与源文件inode相同,软链接则不同。

file:查看文件类型

Linux中文件扩展名无强制意义,用file命令可以探测文件的真实类型。

bash

  1. file script.sh
  2. # 输出:script.sh: Bash script, ASCII text executable
  3. file image.jpg
  4. # 输出:image.jpg: JPEG image data, JFIF standard 1.01
复制代码

4. 文本处理与查看

Linux继承了Unix强大的文本处理哲学,许多配置和日志都以文本形式存在。

cat、tac:正向与反向显示

bash

  1. cat file.txt # 显示整个文件
  2. cat file1.txt file2.txt > combined.txt # 合并文件
  3. tac file.txt # 反向显示(最后一行先显示)
复制代码

less、more:分页查看器

more是早期的分页工具,功能简单。less更强大,支持前后滚动、搜索等。

bash

  1. less /var/log/syslog # 分页查看日志文件
复制代码

less常用快捷键:

  • Space 或 f:向下翻一页

  • b:向上翻一页

  • Enter:向下滚动一行

  • k:向上滚动一行

  • /keyword:向下搜索关键词

  • ?keyword:向上搜索关键词

  • n:下一个匹配

  • N:上一个匹配

  • q:退出

head、tail:查看首尾部分

bash

  1. head -n 20 file.txt # 显示前20行(默认10行)
  2. tail -n 50 file.txt # 显示最后50行
  3. tail -f file.log # 实时跟踪文件增长(常用于查看日志)
  4. tail -f -n 100 app.log # 显示最后100行并实时跟踪
复制代码

grep:强大的文本搜索

全称:Global Regular Expression Print

bash

  1. grep "error" log.txt # 在文件中搜索包含error的行
  2. grep -i "error" log.txt # 忽略大小写
  3. grep -r "TODO" /home/project # 递归搜索目录中所有文件
  4. grep -v "info" log.txt # 反向匹配,显示不包含info的行
  5. grep -n "error" log.txt # 显示行号
  6. grep -c "error" log.txt # 统计匹配行数
  7. grep -E "error|warning" log.txt # 扩展正则表达式(等同于egrep)
  8. grep "error" *.log # 在多个文件中搜索
  9. ps aux | grep nginx # 管道配合,查找nginx进程
复制代码

grep支持正则表达式,是其强大之处。

sed:流编辑器基础

sed(Stream Editor)是非交互式文本编辑器,常用于批量替换、删除、插入文本。

bash

  1. sed 's/old/new/' file.txt # 替换每行第一个匹配的old为new
  2. sed 's/old/new/g' file.txt # 全局替换(一行内所有匹配)
  3. sed -i 's/old/new/g' file.txt # 直接修改文件(危险,建议先备份)
  4. sed -n '5,10p' file.txt # 显示5到10行
  5. sed '/pattern/d' file.txt # 删除匹配pattern的行
复制代码

sed功能极强,掌握基础替换即可应对大部分场景。

awk:文本处理语言入门

awk是一种数据处理语言,尤其擅长处理结构化文本(如CSV、日志)。

bash

  1. awk '{print $1}' file.txt # 打印每行的第一列(默认空白分隔)
  2. awk -F: '{print $1}' /etc/passwd # 以冒号为分隔符,打印第一列
  3. awk '$3 > 1000 {print $1}' /etc/passwd # 条件过滤
  4. awk '{sum+=$1} END {print sum}' numbers.txt # 计算第一列总和
复制代码

awk有完整的语法:变量、循环、数组等,是数据处理利器。

sort、uniq:排序与去重

bash

  1. sort file.txt # 按字典序排序
  2. sort -n file.txt # 按数值排序
  3. sort -r file.txt # 反向排序
  4. sort -k 2 -t: data.txt # 以冒号分隔,按第2列排序
  5. uniq file.txt # 去除相邻重复行(通常先排序)
  6. sort file.txt | uniq # 去重排序
  7. sort file.txt | uniq -c # 统计重复次数
  8. sort file.txt | uniq -d # 只显示重复行
复制代码

cut:裁剪文本列

bash

  1. cut -f 1,3 -d: /etc/passwd # 以冒号分隔,提取第1和第3字段
  2. cut -c 1-10 file.txt # 提取每行的前10个字符
复制代码

wc:统计行、词、字节数

全称:Word Count

bash

  1. wc file.txt # 输出 行数 单词数 字节数
  2. wc -l file.txt # 只统计行数
  3. wc -w file.txt # 统计单词数
  4. wc -c file.txt # 统计字节数
复制代码

diff:比较文件差异

bash

  1. diff file1.txt file2.txt # 显示两者差异
  2. diff -u file1.txt file2.txt # 统一格式输出(patch常用格式)
  3. diff -r dir1 dir2 # 递归比较目录
复制代码

5. 系统管理与信息查询

这部分命令让你掌握系统状态,进行软件安装、服务管理等操作。

sudo:超级用户权限

sudo允许授权用户以root身份执行命令,避免直接使用root账户带来的风险。

bash

  1. sudo apt update # 以root权限执行更新
  2. sudo -i # 切换到root shell(慎用)
  3. sudo -u www-data command # 以指定用户身份执行命令
复制代码

首次使用sudo时,需要输入当前用户密码。用户需在sudo组中才有权限。

apt:软件包管理(安装、更新、卸载)

apt(Advanced Package Tool)是Debian/Ubuntu系列的包管理前端,用于处理.deb软件包。

bash

  1. sudo apt update # 更新软件包列表(从源下载最新清单)
  2. sudo apt upgrade # 升级所有已安装的软件包
  3. sudo apt full-upgrade # 升级并处理依赖变更(可能删除旧包)
  4. sudo apt install package # 安装指定包
  5. sudo apt install -y package # 自动确认安装
  6. sudo apt remove package # 卸载包(保留配置文件)
  7. sudo apt purge package # 彻底卸载(删除配置文件)
  8. sudo apt autoremove # 自动删除不再需要的依赖包
  9. apt search keyword # 搜索软件包
  10. apt show package # 显示软件包详细信息
  11. apt list --installed # 列出已安装包
  12. apt list --upgradeable # 列出可升级包
复制代码

dpkg:底层包管理工具

dpkg直接操作.deb包,不自动处理依赖,一般由apt调用。

bash

  1. dpkg -i package.deb # 安装本地deb包
  2. dpkg -r package # 移除包
  3. dpkg -l | grep package # 列出已安装包并过滤
  4. dpkg -L package # 列出包安装的文件
复制代码

systemctl:管理系统服务

systemd是Ubuntu的初始化系统,systemctl是其管理工具。

bash

  1. systemctl status nginx # 查看服务状态
  2. systemctl start nginx # 启动服务
  3. systemctl stop nginx # 停止服务
  4. systemctl restart nginx # 重启服务
  5. systemctl enable nginx # 设置开机自启
  6. systemctl disable nginx # 取消开机自启
  7. systemctl list-units --type=service # 列出所有服务单元
  8. systemctl daemon-reload # 重新加载systemd配置(修改service文件后)
复制代码

ps、top、htop:查看进程

  • ps:静态查看进程快照

bash

  1. ps aux # 显示所有用户的所有进程(BSD风格)
  2. ps -ef # 显示所有进程(System V风格)
  3. ps aux | grep firefox # 查找特定进程
  4. ps -e --forest # 树状显示进程父子关系
复制代码
  • top:动态实时查看进程资源占用

在top界面中,按M按内存排序,按P按CPU排序,按q退出。

  • htop:增强版top,需要安装(sudo apt install htop),界面更友好,支持鼠标操作。

kill、killall:终止进程

bash

  1. kill PID # 发送TERM信号,请求进程优雅终止
  2. kill -9 PID # 发送KILL信号,强制终止(无法捕获)
  3. kill -15 PID # 同默认TERM
  4. killall firefox # 按名称杀死所有firefox进程
  5. pkill -f "python script.py" # 按完整命令字符串杀进程
复制代码

df、du:查看磁盘使用情况

  • df(Disk Free):查看文件系统整体磁盘占用

bash

  1. df -h # 人类可读显示
  2. df -i # 显示inode使用情况(inode满了也会报错)
  3. df -Th # 显示文件系统类型
复制代码
  • du(Disk Usage):查看目录或文件占用空间

bash

  1. du -sh /home/user # 显示目录总大小
  2. du -h --max-depth=1 /var # 显示/var下一级各子目录大小
  3. du -ah # 列出所有文件大小
复制代码

free:查看内存使用

bash

  1. free -h # 人类可读显示内存和交换分区
  2. free -m # 以MB为单位
复制代码

输出解读:

  • total:总内存

  • used:已使用(包括缓存)

  • free:完全空闲

  • available:可用内存(包括可回收的缓存),这是真正可用的值。

uname:查看系统信息

bash

  1. uname -a # 显示所有信息(内核版本、主机名、架构等)
  2. uname -r # 显示内核版本
  3. lsb_release -a # 显示Ubuntu发行版信息
复制代码

who、w:查看登录用户

bash

  1. who # 显示当前登录用户
  2. w # 显示更详细信息(登录时间、运行的命令等)
  3. whoami # 显示当前用户名
  4. id # 显示用户ID、组ID等
复制代码

uptime:系统运行时间

bash

  1. uptime
  2. # 输出示例:10:30:01 up 5 days, 2:15, 3 users, load average: 0.08, 0.03, 0.01
复制代码

load average分别表示1分钟、5分钟、15分钟的平均负载。对于单核CPU,负载小于1表示资源充足。

dmesg:内核日志

bash

  1. dmesg | tail # 显示最近的内核消息(硬件检测、驱动错误等)
  2. dmesg | grep -i error # 查找内核错误
  3. dmesg -w # 实时跟踪内核日志
复制代码

6. 用户与权限管理

Linux是多用户系统,权限管理是其安全基石。

用户与用户组概念

  • 用户(User):每个用户有唯一的UID(User ID),root的UID为0。

  • 组(Group):每个组有唯一的GID,用户可属于多个组。

  • 权限:文件对所有者、所属组、其他人分别定义读(r)、写(w)、执行(x)权限。

用户信息存储在/etc/passwd(密码哈希在/etc/shadow),组信息在/etc/group。

useradd、userdel、usermod:用户管理

bash

  1. sudo useradd -m username # 创建用户并自动创建家目录
  2. sudo useradd -m -s /bin/bash username # 指定默认shell
  3. sudo passwd username # 设置或修改密码
  4. sudo userdel username # 删除用户(保留家目录)
  5. sudo userdel -r username # 删除用户并删除家目录及邮件池
  6. sudo usermod -aG sudo username # 将用户添加到sudo组(-a追加,-G指定组)
  7. sudo usermod -s /bin/zsh username # 修改用户的默认shell
复制代码

注意:useradd与adduser(一个交互式脚本)有区别,初学者可使用adduser更方便。

passwd:管理密码

bash

  1. passwd # 修改当前用户密码
  2. sudo passwd username # root修改其他用户密码
  3. passwd -l username # 锁定用户(禁止登录)
  4. passwd -u username # 解锁
复制代码

groupadd等:组管理

bash

  1. sudo groupadd groupname # 创建组
  2. sudo groupdel groupname # 删除组
  3. sudo gpasswd -a username groupname # 将用户添加到组
  4. sudo gpasswd -d username groupname # 从组中移除用户
  5. groups username # 查看用户所属组
复制代码

chmod:修改文件权限(数字与符号两种方式)

权限表示:rwx分别对应读、写、执行,数字权重:r=4, w=2, x=1。

  • 符号方式

bash

  1. chmod u+x file.sh # 给所有者添加执行权限
  2. chmod g-w file.txt # 移除所属组的写权限
  3. chmod o=r file.txt # 设置其他用户权限为只读
  4. chmod a+x script.sh # 给所有用户添加执行权限(a=all)
复制代码
  • 数字方式

bash

  1. chmod 755 script.sh # 所有者rwx,组r-x,其他人r-x
  2. chmod 644 file.txt # 所有者rw-,组r--,其他人r--
复制代码

常见权限组合:

  • 755:可执行文件(脚本、程序)的常规权限

  • 644:普通文件的常规权限

  • 700:仅所有者可读写执行(私密文件)

  • 777:所有人都可读写执行(极度危险,一般不使用)

chown:修改文件所有者

bash

  1. sudo chown username file.txt # 修改所有者
  2. sudo chown username:group file.txt # 同时修改所有者和所属组
  3. sudo chown -R username:group /path/dir # 递归修改目录下所有文件
复制代码

chgrp:修改文件所属组

bash

  1. chgrp groupname file.txt # 修改所属组(也可用chown实现)
复制代码

umask:默认权限掩码

umask决定了新建文件或目录时的默认权限。文件默认权限为666减去umask值,目录为777减去umask值。

bash

  1. umask # 查看当前umask(通常为0022)
  2. umask 002 # 设置umask为002,新文件为664,新目录为775
复制代码

su与sudo的深入对比

  • su(Switch User):切换到其他用户,需要目标用户的密码。su -会同时切换环境变量。

  • sudo:以其他用户(通常为root)执行单条命令,需要当前用户密码(在sudo组中)。

bash

  1. su - root # 切换到root,需要root密码(不推荐)
  2. sudo -i # 获得root环境,使用自己的密码
复制代码

通常更推荐使用sudo,因为它可以精细授权,且避免了root密码共享。


7. 网络相关命令

ip、ifconfig:网络接口配置

ifconfig是老工具(需net-tools包),ip是新一代网络配置命令(iproute2包)。

bash

  1. ip addr show # 查看所有网络接口的IP地址
  2. ip link set eth0 up # 启用接口
  3. ip route show # 查看路由表
  4. ifconfig # 查看接口信息(需安装)
复制代码

ping:网络连通性测试

bash

  1. ping google.com # 持续发送ICMP包,按Ctrl+C停止
  2. ping -c 4 8.8.8.8 # 发送4个包后自动停止
复制代码

netstat、ss:网络连接状态

netstat逐渐被ss取代,ss性能更好。

bash

  1. ss -tuln # 显示所有监听中的TCP/UDP端口(-t tcp, -u udp, -l 监听, -n 不解析名称)
  2. ss -tunap # 显示所有连接及对应进程
  3. netstat -tuln # 类似效果
复制代码

curl、wget:网络数据下载与传输

  • curl:功能强大的数据传输工具,支持HTTP、FTP、SCP等。

bash

  1. curl https://api.github.com # 获取网页内容
  2. curl -O https://example.com/file.zip # 下载文件,保持原名
  3. curl -L -o newname.zip http://example.com/redirect # 跟随重定向并指定输出名
  4. curl -I https://example.com # 只获取HTTP头
复制代码
  • wget:专注下载,支持断点续传。

bash

  1. wget https://example.com/file.zip # 下载
  2. wget -c https://example.com/file.zip # 断点续传
  3. wget -r -np https://example.com/dir/ # 递归下载但不进入上级目录
复制代码

ssh:远程安全登录

bash

  1. ssh user@remote_host # 以user身份登录远程主机
  2. ssh -p 2222 user@host # 指定端口
  3. ssh -i ~/.ssh/id_rsa user@host # 使用私钥认证
复制代码

配置免密登录:生成密钥对ssh-keygen,将公钥追加到远程主机的~/.ssh/authorized_keys。

scp:远程安全复制

bash

  1. scp local.txt user@remote:/path/ # 上传
  2. scp user@remote:/remote/file.txt . # 下载
  3. scp -r dir/ user@remote:/path/ # 递归复制目录
复制代码

rsync:高效文件同步

rsync比scp更高效,只传输差异部分,适合大文件或频繁同步。

bash

  1. rsync -avz local_dir/ user@remote:/remote_dir/ # 同步目录(注意斜杠含义)
  2. rsync -avz --delete local_dir/ user@remote:/remote_dir/ # 删除远端多余文件
  3. rsync -P largefile.zip user@remote:/dest/ # 显示进度并支持断点续传
复制代码

hostname:查看/设置主机名

bash

  1. hostname # 显示主机名
  2. hostnamectl set-hostname newname # 永久设置主机名(systemd方式)
复制代码

dig、nslookup:DNS查询工具

bash

  1. dig google.com # 详细DNS查询
  2. dig +short google.com # 简洁输出IP
  3. nslookup google.com # 交互式或单次查询
复制代码

8. 压缩与归档

tar:归档与解压

tar是磁带归档工具,常与压缩算法结合。

常见用法:

bash

  1. # 创建归档
  2. tar -cvf archive.tar file1 file2 dir/ # 创建未压缩的tar包
  3. tar -czvf archive.tar.gz file1 file2 # 创建gzip压缩的tar包
  4. tar -cjvf archive.tar.bz2 file1 file2 # 创建bzip2压缩
  5. tar -cJvf archive.tar.xz file1 file2 # 创建xz压缩(高压缩率)
  6. # 解压
  7. tar -xvf archive.tar # 解压tar包
  8. tar -xzvf archive.tar.gz # 解压gzip压缩包
  9. tar -xjvf archive.tar.bz2 # 解压bzip2
  10. tar -xJvf archive.tar.xz # 解压xz
  11. # 其他选项
  12. tar -tvf archive.tar # 查看内容列表,不解压
  13. tar -xzvf archive.tar.gz -C /target/dir # 解压到指定目录
复制代码

参数说明:

  • -c:创建归档

  • -x:解压归档

  • -v:详细输出

  • -f:指定文件名

  • -z:通过gzip处理

  • -j:通过bzip2处理

  • -J:通过xz处理

gzip、gunzip:压缩与解压

bash

  1. gzip file.txt # 压缩为file.txt.gz,原文件被替换
  2. gunzip file.txt.gz # 解压
  3. gzip -c file.txt > file.txt.gz # 保留原文件
  4. zcat file.txt.gz # 查看压缩文件内容
复制代码

zip、unzip:处理ZIP文件

bash

  1. zip archive.zip file1 file2 # 创建zip
  2. unzip archive.zip # 解压
  3. unzip -l archive.zip # 查看内容
  4. zip -r archive.zip dir/ # 递归压缩目录
复制代码

9. Shell技巧与效率提升

命令历史与搜索(history、Ctrl+R)

bash

  1. history # 显示命令历史
  2. history 20 # 显示最近20条
  3. !123 # 执行历史中第123条命令
  4. !! # 执行上一条命令
  5. !vim # 执行最近一次以vim开头的命令
复制代码
  • Ctrl + R:反向搜索历史命令,输入关键词,按Ctrl+R继续向前搜索。

  • Ctrl + G:退出搜索。

别名(alias)

为长命令创建简短别名。

bash

  1. alias ll='ls -alF'
  2. alias la='ls -A'
  3. alias ..='cd ..'
  4. alias grep='grep --color=auto'
复制代码

临时别名仅在当前shell有效,永久生效需写入~/.bashrc(或~/.zshrc)文件。

bash

  1. echo "alias ll='ls -alF'" >> ~/.bashrc
  2. source ~/.bashrc # 重新加载配置
复制代码

输入输出重定向(>、>>、<、2>、|)

  • 标准输入(stdin):文件描述符0

  • 标准输出(stdout):文件描述符1

  • 标准错误(stderr):文件描述符2

bash

  1. command > output.txt # 覆盖写入标准输出
  2. command >> output.txt # 追加写入
  3. command 2> error.txt # 将标准错误重定向到文件
  4. command > all.txt 2>&1 # 将标准输出和标准错误合并重定向
  5. command &> all.txt # 简写(bash 4.0+)
  6. command < input.txt # 从文件读取输入
  7. command1 | command2 # 管道,将command1的标准输出作为command2的标准输入
复制代码

管道是Linux组合命令的核心,例如:

bash

  1. ps aux | grep python | wc -l # 统计Python进程数量
复制代码

命令替换(`command` 与 $(command))

bash

  1. echo "当前目录: $(pwd)" # 推荐使用$()
  2. echo "当前目录: `pwd`" # 旧式写法
复制代码

Tab键自动补全

  • 输入命令或文件名的一部分,按Tab自动补全。

  • 连续按两次Tab显示所有可能的补全选项。

后台运行与作业控制(&、jobs、fg、bg)

bash

  1. command & # 在后台运行命令
  2. jobs # 查看当前shell的后台作业
  3. fg %1 # 将作业1调到前台
  4. bg %1 # 将挂起的作业转为后台运行
  5. Ctrl+Z # 挂起当前前台进程
复制代码

nohup与screen/tmux:持久化运行

  • nohup:使进程忽略挂断信号(HUP),退出终端后进程继续运行。

bash

  1. nohup long_running_command &
复制代码
  • screen 或 tmux:终端复用器,可以创建多个虚拟终端,会话在断开后依然保留。

bash

  1. screen -S mysession # 创建会话
  2. # 执行命令,然后按 Ctrl+A, D 脱离会话
  3. screen -ls # 列出会话
  4. screen -r mysession # 重新连接会话
复制代码

tmux功能更强大,是screen的现代替代品。


10. 系统维护与故障排查

系统日志查看(journalctl)

Ubuntu使用systemd-journald管理日志。

bash

  1. journalctl # 查看所有日志
  2. journalctl -u nginx # 查看特定服务的日志
  3. journalctl -f # 实时跟踪日志
  4. journalctl --since "2024-01-01 00:00:00" # 指定时间后
  5. journalctl -k # 仅内核日志
复制代码

硬盘故障检查(smartctl)

安装smartmontools包后,使用smartctl查看硬盘SMART数据。

bash

  1. sudo smartctl -a /dev/sda # 查看硬盘详细信息
  2. sudo smartctl -t short /dev/sda # 执行短测试
复制代码

内存测试(memtest86+)

系统启动时选择Memtest86+选项进行内存测试,或在系统中安装后重启进入。

网络抓包(tcpdump)

bash

  1. sudo tcpdump -i eth0 # 抓取eth0接口所有包
  2. sudo tcpdump -i any port 80 # 抓取80端口流量
  3. sudo tcpdump -w capture.pcap # 写入文件,可用Wireshark分析
复制代码

系统资源监控(vmstat、iostat)

bash

  1. vmstat 1 # 每秒输出系统进程、内存、CPU等信息
  2. iostat -x 1 # 查看磁盘I/O详细情况
复制代码

修复文件系统(fsck)

注意:修复前需要卸载目标分区(或进入单用户模式)。

bash

  1. sudo umount /dev/sda1
  2. sudo fsck -y /dev/sda1 # -y自动修复
复制代码

11. 常见问题与解决方案

忘记root密码

  1. 重启系统,在GRUB菜单出现时按Shift或Esc。

  2. 选择Advanced options,进入恢复模式。

  3. 选择root进入root shell。

  4. 以读写方式挂载根分区:mount -o rw,remount /

  5. 执行passwd username重置密码。

  6. 正常重启。

磁盘空间不足

  1. 使用df -h查看哪个分区满了。

  2. 使用du -sh /* 2>/dev/null | sort -h定位大目录。

  3. 清理/var/log下的旧日志(可借助logrotate)。

  4. 清理apt缓存:sudo apt clean。

  5. 删除不再使用的内核:sudo apt autoremove --purge。

无法获取软件包(apt源问题)

bash

  1. # 备份原有源
  2. sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
  3. # 编辑源文件,选择合适的国内镜像(如阿里云、清华源)
  4. sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
  5. sudo apt update
复制代码

无法解析域名(DNS配置)

检查/etc/resolv.conf,添加DNS服务器:

text

  1. nameserver 8.8.8.8
  2. nameserver 114.114.114.114
复制代码

如果使用systemd-resolved,可编辑/etc/systemd/resolved.conf设置DNS。

误删文件恢复思路

  1. 立即卸载分区(如果可能),避免数据覆盖。

  2. 使用testdisk或extundelete等工具尝试恢复。

  3. 对于重要文件,定期备份是最佳实践。


12. 结语:从命令到精通

这份指南涵盖了Ubuntu系统中最常用的命令及其应用场景。但请记住,Linux的学习不是靠死记硬背,而是靠实践和理解

当你面对一个不熟悉的命令时:

  1. 查阅man手册。

  2. 使用command --help查看简要帮助。

  3. 在网上搜索“如何使用xxx命令”。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行