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)。 |
路径(绝对路径与相对路径)
-
绝对路径:从根目录/开始的完整路径。
-
相对路径:相对于当前工作目录的路径。
通配符
通配符用于批量匹配文件名,极大提升效率。
| 通配符 | 含义 | 示例 |
|---|
| * | 匹配任意长度(包括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
- man ls # 查看 ls 命令的详细手册
- man -k keyword # 搜索包含keyword的命令(等同于 apropos)
- man 5 passwd # 查看第5章(配置文件格式)中的passwd文件说明
复制代码
man手册分为9章:
-
用户命令(可执行程序)
-
系统调用(内核提供的函数)
-
库调用(程序库中的函数)
-
特殊文件(设备文件)
-
文件格式与约定(配置文件)
-
游戏
-
杂项
-
系统管理命令(通常需要root)
-
内核例程(非标准)
在man页面内,可以使用方向键滚动,按q退出,按/搜索关键词。
3. 核心命令:文件与目录管理
这是最常用的一类命令,如同Windows中的文件资源管理器,但全部通过文本实现。
pwd:显示当前路径
全称:Print Working Directory
bash
当你迷路在复杂的目录结构中时,pwd总能告诉你身在何方。
ls:列出目录内容
全称:List
bash
- ls # 列出当前目录内容(不显示隐藏文件)
- ls -l # 长格式显示,包含权限、链接数、所有者、大小、修改时间等
- ls -a # 显示所有文件,包括以 . 开头的隐藏文件
- ls -lh # 人类可读的格式(显示K、M、G等单位)
- ls -la # 最常用组合:显示所有文件的详细信息
- ls -ltr # 按修改时间排序(t)并反转(r),最新文件在最后
- ls -R # 递归列出子目录内容
- ls -d */ # 只列出目录
复制代码
ls -l输出示例解读:
text
- -rw-r--r-- 1 user group 4096 Apr 10 10:30 file.txt
复制代码
cd:切换目录
全称:Change Directory
bash
- cd /var/log # 切换到绝对路径
- cd Documents # 切换到相对路径
- cd .. # 返回上级目录
- cd ../.. # 返回上两级目录
- cd ~ # 切换到当前用户的家目录
- cd # 无参数等同于 cd ~
- cd - # 切换到上次所在的目录
复制代码
mkdir:创建目录
全称:Make Directory
bash
- mkdir dirname # 创建单个目录
- mkdir dir1 dir2 dir3 # 创建多个目录
- mkdir -p path/to/new/dir # 递归创建(如果父目录不存在,一并创建)
- mkdir -m 755 newdir # 创建时指定权限
复制代码
rmdir与rm:删除目录与文件
bash
- rm file.txt # 删除文件
- rm -i file.txt # 删除前确认(安全习惯)
- rm -f file.txt # 强制删除,不提示(危险)
- rm -r dirname # 递归删除目录及其内容(删除非空目录必须加-r)
- rm -rf dirname # 递归强制删除,请再三确认路径!
复制代码
警告:rm -rf / 会尝试删除整个系统,千万不要尝试!rm -rf ./*也要谨慎。
touch:创建文件与更新时间戳
bash
- touch newfile.txt # 如果文件不存在,创建空文件;如果存在,更新其修改时间为当前
- touch -t 202401011200 file # 将文件时间戳设置为2024年1月1日12:00
复制代码
cp:复制文件与目录
全称:Copy
bash
- cp source.txt dest.txt # 复制文件
- cp -i source.txt dest.txt # 目标存在时提示覆盖
- cp -r source_dir dest_dir # 递归复制目录
- cp -a source_dir dest_dir # 保留所有属性(权限、时间戳等)的递归复制
- cp file1.txt file2.txt dest/ # 同时复制多个文件到目标目录
复制代码
mv:移动与重命名
全称:Move
bash
- mv oldname.txt newname.txt # 重命名文件
- mv file.txt /path/to/dir/ # 移动文件
- mv -i file.txt /path/ # 移动前确认
- mv dir1 dir2 # 如果dir2不存在,则重命名;存在则移动dir1到dir2内部
复制代码
ln:链接文件(硬链接与软链接)
链接是Linux文件系统的重要特性。
bash
- ln source.txt hardlink.txt # 创建硬链接
- ln -s target.txt softlink.txt # 创建软链接
复制代码
通过ls -li可以看到inode号,硬链接与源文件inode相同,软链接则不同。
file:查看文件类型
Linux中文件扩展名无强制意义,用file命令可以探测文件的真实类型。
bash
- file script.sh
- # 输出:script.sh: Bash script, ASCII text executable
- file image.jpg
- # 输出:image.jpg: JPEG image data, JFIF standard 1.01
复制代码
4. 文本处理与查看
Linux继承了Unix强大的文本处理哲学,许多配置和日志都以文本形式存在。
cat、tac:正向与反向显示
bash
- cat file.txt # 显示整个文件
- cat file1.txt file2.txt > combined.txt # 合并文件
- tac file.txt # 反向显示(最后一行先显示)
复制代码
less、more:分页查看器
more是早期的分页工具,功能简单。less更强大,支持前后滚动、搜索等。
bash
- less /var/log/syslog # 分页查看日志文件
复制代码
less常用快捷键:
-
Space 或 f:向下翻一页
-
b:向上翻一页
-
Enter:向下滚动一行
-
k:向上滚动一行
-
/keyword:向下搜索关键词
-
?keyword:向上搜索关键词
-
n:下一个匹配
-
N:上一个匹配
-
q:退出
head、tail:查看首尾部分
bash
- head -n 20 file.txt # 显示前20行(默认10行)
- tail -n 50 file.txt # 显示最后50行
- tail -f file.log # 实时跟踪文件增长(常用于查看日志)
- tail -f -n 100 app.log # 显示最后100行并实时跟踪
复制代码
grep:强大的文本搜索
全称:Global Regular Expression Print
bash
- grep "error" log.txt # 在文件中搜索包含error的行
- grep -i "error" log.txt # 忽略大小写
- grep -r "TODO" /home/project # 递归搜索目录中所有文件
- grep -v "info" log.txt # 反向匹配,显示不包含info的行
- grep -n "error" log.txt # 显示行号
- grep -c "error" log.txt # 统计匹配行数
- grep -E "error|warning" log.txt # 扩展正则表达式(等同于egrep)
- grep "error" *.log # 在多个文件中搜索
- ps aux | grep nginx # 管道配合,查找nginx进程
复制代码
grep支持正则表达式,是其强大之处。
sed:流编辑器基础
sed(Stream Editor)是非交互式文本编辑器,常用于批量替换、删除、插入文本。
bash
- sed 's/old/new/' file.txt # 替换每行第一个匹配的old为new
- sed 's/old/new/g' file.txt # 全局替换(一行内所有匹配)
- sed -i 's/old/new/g' file.txt # 直接修改文件(危险,建议先备份)
- sed -n '5,10p' file.txt # 显示5到10行
- sed '/pattern/d' file.txt # 删除匹配pattern的行
复制代码
sed功能极强,掌握基础替换即可应对大部分场景。
awk:文本处理语言入门
awk是一种数据处理语言,尤其擅长处理结构化文本(如CSV、日志)。
bash
- awk '{print $1}' file.txt # 打印每行的第一列(默认空白分隔)
- awk -F: '{print $1}' /etc/passwd # 以冒号为分隔符,打印第一列
- awk '$3 > 1000 {print $1}' /etc/passwd # 条件过滤
- awk '{sum+=$1} END {print sum}' numbers.txt # 计算第一列总和
复制代码
awk有完整的语法:变量、循环、数组等,是数据处理利器。
sort、uniq:排序与去重
bash
- sort file.txt # 按字典序排序
- sort -n file.txt # 按数值排序
- sort -r file.txt # 反向排序
- sort -k 2 -t: data.txt # 以冒号分隔,按第2列排序
- uniq file.txt # 去除相邻重复行(通常先排序)
- sort file.txt | uniq # 去重排序
- sort file.txt | uniq -c # 统计重复次数
- sort file.txt | uniq -d # 只显示重复行
复制代码
cut:裁剪文本列
bash
- cut -f 1,3 -d: /etc/passwd # 以冒号分隔,提取第1和第3字段
- cut -c 1-10 file.txt # 提取每行的前10个字符
复制代码
wc:统计行、词、字节数
全称:Word Count
bash
- wc file.txt # 输出 行数 单词数 字节数
- wc -l file.txt # 只统计行数
- wc -w file.txt # 统计单词数
- wc -c file.txt # 统计字节数
复制代码
diff:比较文件差异
bash
- diff file1.txt file2.txt # 显示两者差异
- diff -u file1.txt file2.txt # 统一格式输出(patch常用格式)
- diff -r dir1 dir2 # 递归比较目录
复制代码
5. 系统管理与信息查询
这部分命令让你掌握系统状态,进行软件安装、服务管理等操作。
sudo:超级用户权限
sudo允许授权用户以root身份执行命令,避免直接使用root账户带来的风险。
bash
- sudo apt update # 以root权限执行更新
- sudo -i # 切换到root shell(慎用)
- sudo -u www-data command # 以指定用户身份执行命令
复制代码
首次使用sudo时,需要输入当前用户密码。用户需在sudo组中才有权限。
apt:软件包管理(安装、更新、卸载)
apt(Advanced Package Tool)是Debian/Ubuntu系列的包管理前端,用于处理.deb软件包。
bash
- sudo apt update # 更新软件包列表(从源下载最新清单)
- sudo apt upgrade # 升级所有已安装的软件包
- sudo apt full-upgrade # 升级并处理依赖变更(可能删除旧包)
- sudo apt install package # 安装指定包
- sudo apt install -y package # 自动确认安装
- sudo apt remove package # 卸载包(保留配置文件)
- sudo apt purge package # 彻底卸载(删除配置文件)
- sudo apt autoremove # 自动删除不再需要的依赖包
- apt search keyword # 搜索软件包
- apt show package # 显示软件包详细信息
- apt list --installed # 列出已安装包
- apt list --upgradeable # 列出可升级包
复制代码
dpkg:底层包管理工具
dpkg直接操作.deb包,不自动处理依赖,一般由apt调用。
bash
- dpkg -i package.deb # 安装本地deb包
- dpkg -r package # 移除包
- dpkg -l | grep package # 列出已安装包并过滤
- dpkg -L package # 列出包安装的文件
复制代码
systemctl:管理系统服务
systemd是Ubuntu的初始化系统,systemctl是其管理工具。
bash
- systemctl status nginx # 查看服务状态
- systemctl start nginx # 启动服务
- systemctl stop nginx # 停止服务
- systemctl restart nginx # 重启服务
- systemctl enable nginx # 设置开机自启
- systemctl disable nginx # 取消开机自启
- systemctl list-units --type=service # 列出所有服务单元
- systemctl daemon-reload # 重新加载systemd配置(修改service文件后)
复制代码
ps、top、htop:查看进程
bash
- ps aux # 显示所有用户的所有进程(BSD风格)
- ps -ef # 显示所有进程(System V风格)
- ps aux | grep firefox # 查找特定进程
- ps -e --forest # 树状显示进程父子关系
复制代码
在top界面中,按M按内存排序,按P按CPU排序,按q退出。
kill、killall:终止进程
bash
- kill PID # 发送TERM信号,请求进程优雅终止
- kill -9 PID # 发送KILL信号,强制终止(无法捕获)
- kill -15 PID # 同默认TERM
- killall firefox # 按名称杀死所有firefox进程
- pkill -f "python script.py" # 按完整命令字符串杀进程
复制代码
df、du:查看磁盘使用情况
bash
- df -h # 人类可读显示
- df -i # 显示inode使用情况(inode满了也会报错)
- df -Th # 显示文件系统类型
复制代码
bash
- du -sh /home/user # 显示目录总大小
- du -h --max-depth=1 /var # 显示/var下一级各子目录大小
- du -ah # 列出所有文件大小
复制代码
free:查看内存使用
bash
- free -h # 人类可读显示内存和交换分区
- free -m # 以MB为单位
复制代码
输出解读:
uname:查看系统信息
bash
- uname -a # 显示所有信息(内核版本、主机名、架构等)
- uname -r # 显示内核版本
- lsb_release -a # 显示Ubuntu发行版信息
复制代码
who、w:查看登录用户
bash
- who # 显示当前登录用户
- w # 显示更详细信息(登录时间、运行的命令等)
- whoami # 显示当前用户名
- id # 显示用户ID、组ID等
复制代码
uptime:系统运行时间
bash
- uptime
- # 输出示例: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
- dmesg | tail # 显示最近的内核消息(硬件检测、驱动错误等)
- dmesg | grep -i error # 查找内核错误
- 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
- sudo useradd -m username # 创建用户并自动创建家目录
- sudo useradd -m -s /bin/bash username # 指定默认shell
- sudo passwd username # 设置或修改密码
- sudo userdel username # 删除用户(保留家目录)
- sudo userdel -r username # 删除用户并删除家目录及邮件池
- sudo usermod -aG sudo username # 将用户添加到sudo组(-a追加,-G指定组)
- sudo usermod -s /bin/zsh username # 修改用户的默认shell
复制代码
注意:useradd与adduser(一个交互式脚本)有区别,初学者可使用adduser更方便。
passwd:管理密码
bash
- passwd # 修改当前用户密码
- sudo passwd username # root修改其他用户密码
- passwd -l username # 锁定用户(禁止登录)
- passwd -u username # 解锁
复制代码
groupadd等:组管理
bash
- sudo groupadd groupname # 创建组
- sudo groupdel groupname # 删除组
- sudo gpasswd -a username groupname # 将用户添加到组
- sudo gpasswd -d username groupname # 从组中移除用户
- groups username # 查看用户所属组
复制代码
chmod:修改文件权限(数字与符号两种方式)
权限表示:rwx分别对应读、写、执行,数字权重:r=4, w=2, x=1。
bash
- chmod u+x file.sh # 给所有者添加执行权限
- chmod g-w file.txt # 移除所属组的写权限
- chmod o=r file.txt # 设置其他用户权限为只读
- chmod a+x script.sh # 给所有用户添加执行权限(a=all)
复制代码
bash
- chmod 755 script.sh # 所有者rwx,组r-x,其他人r-x
- chmod 644 file.txt # 所有者rw-,组r--,其他人r--
复制代码
常见权限组合:
chown:修改文件所有者
bash
- sudo chown username file.txt # 修改所有者
- sudo chown username:group file.txt # 同时修改所有者和所属组
- sudo chown -R username:group /path/dir # 递归修改目录下所有文件
复制代码
chgrp:修改文件所属组
bash
- chgrp groupname file.txt # 修改所属组(也可用chown实现)
复制代码
umask:默认权限掩码
umask决定了新建文件或目录时的默认权限。文件默认权限为666减去umask值,目录为777减去umask值。
bash
- umask # 查看当前umask(通常为0022)
- umask 002 # 设置umask为002,新文件为664,新目录为775
复制代码
su与sudo的深入对比
bash
- su - root # 切换到root,需要root密码(不推荐)
- sudo -i # 获得root环境,使用自己的密码
复制代码
通常更推荐使用sudo,因为它可以精细授权,且避免了root密码共享。
7. 网络相关命令
ip、ifconfig:网络接口配置
ifconfig是老工具(需net-tools包),ip是新一代网络配置命令(iproute2包)。
bash
- ip addr show # 查看所有网络接口的IP地址
- ip link set eth0 up # 启用接口
- ip route show # 查看路由表
- ifconfig # 查看接口信息(需安装)
复制代码
ping:网络连通性测试
bash
- ping google.com # 持续发送ICMP包,按Ctrl+C停止
- ping -c 4 8.8.8.8 # 发送4个包后自动停止
复制代码
netstat、ss:网络连接状态
netstat逐渐被ss取代,ss性能更好。
bash
- ss -tuln # 显示所有监听中的TCP/UDP端口(-t tcp, -u udp, -l 监听, -n 不解析名称)
- ss -tunap # 显示所有连接及对应进程
- netstat -tuln # 类似效果
复制代码
curl、wget:网络数据下载与传输
bash
- curl https://api.github.com # 获取网页内容
- curl -O https://example.com/file.zip # 下载文件,保持原名
- curl -L -o newname.zip http://example.com/redirect # 跟随重定向并指定输出名
- curl -I https://example.com # 只获取HTTP头
复制代码
bash
- wget https://example.com/file.zip # 下载
- wget -c https://example.com/file.zip # 断点续传
- wget -r -np https://example.com/dir/ # 递归下载但不进入上级目录
复制代码
ssh:远程安全登录
bash
- ssh user@remote_host # 以user身份登录远程主机
- ssh -p 2222 user@host # 指定端口
- ssh -i ~/.ssh/id_rsa user@host # 使用私钥认证
复制代码
配置免密登录:生成密钥对ssh-keygen,将公钥追加到远程主机的~/.ssh/authorized_keys。
scp:远程安全复制
bash
- scp local.txt user@remote:/path/ # 上传
- scp user@remote:/remote/file.txt . # 下载
- scp -r dir/ user@remote:/path/ # 递归复制目录
复制代码
rsync:高效文件同步
rsync比scp更高效,只传输差异部分,适合大文件或频繁同步。
bash
- rsync -avz local_dir/ user@remote:/remote_dir/ # 同步目录(注意斜杠含义)
- rsync -avz --delete local_dir/ user@remote:/remote_dir/ # 删除远端多余文件
- rsync -P largefile.zip user@remote:/dest/ # 显示进度并支持断点续传
复制代码
hostname:查看/设置主机名
bash
- hostname # 显示主机名
- hostnamectl set-hostname newname # 永久设置主机名(systemd方式)
复制代码
dig、nslookup:DNS查询工具
bash
- dig google.com # 详细DNS查询
- dig +short google.com # 简洁输出IP
- nslookup google.com # 交互式或单次查询
复制代码
8. 压缩与归档
tar:归档与解压
tar是磁带归档工具,常与压缩算法结合。
常见用法:
bash
- # 创建归档
- tar -cvf archive.tar file1 file2 dir/ # 创建未压缩的tar包
- tar -czvf archive.tar.gz file1 file2 # 创建gzip压缩的tar包
- tar -cjvf archive.tar.bz2 file1 file2 # 创建bzip2压缩
- tar -cJvf archive.tar.xz file1 file2 # 创建xz压缩(高压缩率)
- # 解压
- tar -xvf archive.tar # 解压tar包
- tar -xzvf archive.tar.gz # 解压gzip压缩包
- tar -xjvf archive.tar.bz2 # 解压bzip2
- tar -xJvf archive.tar.xz # 解压xz
- # 其他选项
- tar -tvf archive.tar # 查看内容列表,不解压
- tar -xzvf archive.tar.gz -C /target/dir # 解压到指定目录
复制代码
参数说明:
-
-c:创建归档
-
-x:解压归档
-
-v:详细输出
-
-f:指定文件名
-
-z:通过gzip处理
-
-j:通过bzip2处理
-
-J:通过xz处理
gzip、gunzip:压缩与解压
bash
- gzip file.txt # 压缩为file.txt.gz,原文件被替换
- gunzip file.txt.gz # 解压
- gzip -c file.txt > file.txt.gz # 保留原文件
- zcat file.txt.gz # 查看压缩文件内容
复制代码
zip、unzip:处理ZIP文件
bash
- zip archive.zip file1 file2 # 创建zip
- unzip archive.zip # 解压
- unzip -l archive.zip # 查看内容
- zip -r archive.zip dir/ # 递归压缩目录
复制代码
9. Shell技巧与效率提升
命令历史与搜索(history、Ctrl+R)
bash
- history # 显示命令历史
- history 20 # 显示最近20条
- !123 # 执行历史中第123条命令
- !! # 执行上一条命令
- !vim # 执行最近一次以vim开头的命令
复制代码
别名(alias)
为长命令创建简短别名。
bash
- alias ll='ls -alF'
- alias la='ls -A'
- alias ..='cd ..'
- alias grep='grep --color=auto'
复制代码
临时别名仅在当前shell有效,永久生效需写入~/.bashrc(或~/.zshrc)文件。
bash
- echo "alias ll='ls -alF'" >> ~/.bashrc
- source ~/.bashrc # 重新加载配置
复制代码
输入输出重定向(>、>>、<、2>、|)
-
标准输入(stdin):文件描述符0
-
标准输出(stdout):文件描述符1
-
标准错误(stderr):文件描述符2
bash
- command > output.txt # 覆盖写入标准输出
- command >> output.txt # 追加写入
- command 2> error.txt # 将标准错误重定向到文件
- command > all.txt 2>&1 # 将标准输出和标准错误合并重定向
- command &> all.txt # 简写(bash 4.0+)
- command < input.txt # 从文件读取输入
- command1 | command2 # 管道,将command1的标准输出作为command2的标准输入
复制代码
管道是Linux组合命令的核心,例如:
bash
- ps aux | grep python | wc -l # 统计Python进程数量
复制代码
命令替换(`command` 与 $(command))
bash
- echo "当前目录: $(pwd)" # 推荐使用$()
- echo "当前目录: `pwd`" # 旧式写法
复制代码
Tab键自动补全
-
输入命令或文件名的一部分,按Tab自动补全。
-
连续按两次Tab显示所有可能的补全选项。
后台运行与作业控制(&、jobs、fg、bg)
bash
- command & # 在后台运行命令
- jobs # 查看当前shell的后台作业
- fg %1 # 将作业1调到前台
- bg %1 # 将挂起的作业转为后台运行
- Ctrl+Z # 挂起当前前台进程
复制代码
nohup与screen/tmux:持久化运行
bash
- nohup long_running_command &
复制代码
bash
- screen -S mysession # 创建会话
- # 执行命令,然后按 Ctrl+A, D 脱离会话
- screen -ls # 列出会话
- screen -r mysession # 重新连接会话
复制代码
tmux功能更强大,是screen的现代替代品。
10. 系统维护与故障排查
系统日志查看(journalctl)
Ubuntu使用systemd-journald管理日志。
bash
- journalctl # 查看所有日志
- journalctl -u nginx # 查看特定服务的日志
- journalctl -f # 实时跟踪日志
- journalctl --since "2024-01-01 00:00:00" # 指定时间后
- journalctl -k # 仅内核日志
复制代码
硬盘故障检查(smartctl)
安装smartmontools包后,使用smartctl查看硬盘SMART数据。
bash
- sudo smartctl -a /dev/sda # 查看硬盘详细信息
- sudo smartctl -t short /dev/sda # 执行短测试
复制代码
内存测试(memtest86+)
系统启动时选择Memtest86+选项进行内存测试,或在系统中安装后重启进入。
网络抓包(tcpdump)
bash
- sudo tcpdump -i eth0 # 抓取eth0接口所有包
- sudo tcpdump -i any port 80 # 抓取80端口流量
- sudo tcpdump -w capture.pcap # 写入文件,可用Wireshark分析
复制代码
系统资源监控(vmstat、iostat)
bash
- vmstat 1 # 每秒输出系统进程、内存、CPU等信息
- iostat -x 1 # 查看磁盘I/O详细情况
复制代码
修复文件系统(fsck)
注意:修复前需要卸载目标分区(或进入单用户模式)。
bash
- sudo umount /dev/sda1
- sudo fsck -y /dev/sda1 # -y自动修复
复制代码
11. 常见问题与解决方案
忘记root密码
-
重启系统,在GRUB菜单出现时按Shift或Esc。
-
选择Advanced options,进入恢复模式。
-
选择root进入root shell。
-
以读写方式挂载根分区:mount -o rw,remount /
-
执行passwd username重置密码。
-
正常重启。
磁盘空间不足
-
使用df -h查看哪个分区满了。
-
使用du -sh /* 2>/dev/null | sort -h定位大目录。
-
清理/var/log下的旧日志(可借助logrotate)。
-
清理apt缓存:sudo apt clean。
-
删除不再使用的内核:sudo apt autoremove --purge。
无法获取软件包(apt源问题)
bash
- # 备份原有源
- sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
- # 编辑源文件,选择合适的国内镜像(如阿里云、清华源)
- sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
- sudo apt update
复制代码
无法解析域名(DNS配置)
检查/etc/resolv.conf,添加DNS服务器:
text
- nameserver 8.8.8.8
- nameserver 114.114.114.114
复制代码
如果使用systemd-resolved,可编辑/etc/systemd/resolved.conf设置DNS。
误删文件恢复思路
-
立即卸载分区(如果可能),避免数据覆盖。
-
使用testdisk或extundelete等工具尝试恢复。
-
对于重要文件,定期备份是最佳实践。
12. 结语:从命令到精通
这份指南涵盖了Ubuntu系统中最常用的命令及其应用场景。但请记住,Linux的学习不是靠死记硬背,而是靠实践和理解。
当你面对一个不熟悉的命令时:
-
查阅man手册。
-
使用command --help查看简要帮助。
-
在网上搜索“如何使用xxx命令”。