命令行基础
对于初次接触 Linux 的用户来说,命令行(Command Line)可能看起来很陌生,甚至有些”可怕”。但实际上,命令行是 Linux 系统中最强大、最灵活的工具。掌握基本的命令行操作,不仅能让你更高效地管理系统,还能帮助你理解 Linux 的工作原理。
本文将从零开始,带你了解终端和 Shell 的概念,掌握最常用的命令,学会文件路径、管道、权限等核心知识。
什么是终端和 Shell
终端(Terminal)
终端是一个应用程序,它提供了一个窗口,让你可以通过键盘输入文字命令来与计算机交互。在 Ubuntu 桌面环境中,终端就是你看到的那个黑色(或深色)背景的窗口。
Ubuntu 26.04 默认的终端应用是 Ptyxis,它取代了传统的 GNOME Terminal,并提供更好的容器集成。你仍然可以按需安装经典的 GNOME Terminal。
如果你想尝试更现代的 GPU 加速终端,Ghostty 已作为 26.04 universe 仓库中的预览包提供:
sudo apt install ghosttyGhostty 不是默认终端;在 OpenGL 4.3 不可用的设备上,它可能需要软件渲染回退。
Shell
Shell 是终端背后实际处理命令的程序。当你在终端中输入命令时,Shell 会解析这些命令并执行。Ubuntu 默认的 Shell 是 Bash(Bourne Again Shell)。
常见的 Shell 有:
| Shell | 说明 |
|---|---|
| Bash | Ubuntu 默认 Shell,功能丰富,兼容性好 |
| Zsh | 更现代的 Shell,提供更好的自动补全和主题 |
| Fish | 用户友好型 Shell,开箱即用的语法高亮 |
| Dash | 轻量级 Shell,Ubuntu 用于系统脚本 |
你可以通过以下命令查看当前使用的 Shell:
echo $SHELL打开终端的方式
在 Ubuntu 26.04 中,有多种方式可以打开终端:
方式一:键盘快捷键
最快的方式是按下 Ctrl + Alt + T,这会直接打开终端窗口。
方式二:从应用菜单打开
- 点击屏幕左上角的 活动 按钮(或按 Super 键)
- 在搜索栏中输入 “Terminal” 或 “终端”
- 点击终端图标打开
方式三:在文件管理器中打开
在 GNOME 文件管理器(Nautilus)中,你可以右键点击空白区域,选择 “在终端中打开”,这样终端会自动进入当前目录。
方式四:TTY 虚拟终端
按下 Ctrl + Alt + F3(F3 到 F6)可以切换到纯文字的虚拟终端。按 Ctrl + Alt + F2 可以切换回图形界面。这在图形界面出问题时特别有用。
基本命令
pwd - 显示当前目录
pwd(Print Working Directory)显示你当前所在的目录路径:
pwd
# 输出示例:/home/usernamels - 列出目录内容
ls(List)是最常用的命令之一,用于查看目录中的文件和文件夹:
# 列出当前目录内容
ls
# 显示详细信息(权限、大小、修改时间等)
ls -l
# 显示隐藏文件(以 . 开头的文件)
ls -a
# 组合使用:详细信息 + 隐藏文件 + 人类可读的文件大小
ls -lah
# 列出指定目录的内容
ls /etc
# 按修改时间排序(最新的在前)
ls -ltcd - 切换目录
cd(Change Directory)用于在目录之间切换:
# 进入指定目录
cd /var/log
# 返回上一级目录
cd ..
# 返回用户主目录
cd ~
# 或者直接输入
cd
# 返回上一次所在的目录
cd -
# 进入多层目录
cd /usr/share/docmkdir - 创建目录
# 创建单个目录
mkdir myproject
# 创建多层嵌套目录(-p 自动创建父目录)
mkdir -p projects/web/frontend
# 一次创建多个目录
mkdir dir1 dir2 dir3cp - 复制文件和目录
# 复制文件
cp file.txt backup.txt
# 复制文件到指定目录
cp file.txt /home/username/Documents/
# 复制整个目录(需要 -r 递归复制)
cp -r myproject myproject-backup
# 复制时保留文件属性(权限、时间戳等)
cp -a source/ destination/mv - 移动或重命名
# 重命名文件
mv oldname.txt newname.txt
# 移动文件到另一个目录
mv file.txt /home/username/Documents/
# 移动并重命名
mv file.txt /home/username/Documents/newname.txt
# 移动整个目录
mv myproject /opt/rm - 删除文件和目录
# 删除文件
rm file.txt
# 删除目录及其内容(递归删除)
rm -r myproject
# 强制删除(不提示确认)
rm -f file.txt
# 删除前逐一确认
rm -i *.txtrm 命令删除的文件不会进入回收站,而是直接永久删除!特别是 rm -rf / 这样的命令会毁掉整个系统。在使用 rm 之前,请务必确认你要删除的是正确的文件。建议新手先用 ls 查看匹配的文件,确认无误后再删除。
cat - 查看文件内容
# 查看文件完整内容
cat file.txt
# 显示行号
cat -n file.txt
# 合并多个文件输出
cat file1.txt file2.txt
# 创建新文件(Ctrl+D 结束输入)
cat > newfile.txtless - 分页查看
当文件内容很长时,less 比 cat 更适合:
less /var/log/syslogless 中的常用操作:
- 空格键:下一页
- b:上一页
- g:跳到文件开头
- G:跳到文件末尾
- /关键词:搜索
- n:下一个搜索结果
- q:退出
head 和 tail - 查看文件头尾
# 查看文件前 10 行(默认)
head file.txt
# 查看文件前 20 行
head -n 20 file.txt
# 查看文件最后 10 行
tail file.txt
# 查看文件最后 50 行
tail -n 50 file.txt
# 实时追踪文件变化(常用于查看日志)
tail -f /var/log/syslog文件路径
理解文件路径是使用命令行的基础。Linux 的文件系统以 /(根目录)为起点,所有文件和目录都组织在这棵树中。
绝对路径 vs 相对路径
绝对路径从根目录 / 开始,给出文件的完整位置:
# 绝对路径示例
/home/username/Documents/file.txt
/etc/nginx/nginx.conf
/var/log/syslog相对路径从当前目录开始计算:
# 假设当前在 /home/username
# 以下两种方式等价:
cat /home/username/Documents/file.txt # 绝对路径
cat Documents/file.txt # 相对路径特殊路径符号
| 符号 | 含义 | 示例 |
|---|---|---|
/ | 根目录 | cd / |
~ | 当前用户的主目录 | cd ~ 等于 cd /home/username |
. | 当前目录 | ./script.sh 运行当前目录下的脚本 |
.. | 上一级目录 | cd ../.. 向上两级 |
- | 上一次所在的目录(仅用于 cd) | cd - |
# 实际使用示例
# 从任何位置回到主目录
cd ~
# 查看上级目录的内容
ls ..
# 运行当前目录下的脚本
./my-script.sh
# 复制上两级目录的文件到当前目录
cp ../../config.txt .管道和重定向
管道和重定向是命令行中极其强大的特性,它们让你可以将多个简单命令组合起来完成复杂任务。
管道(|)
管道将一个命令的输出传递给另一个命令作为输入:
# 查看所有进程,并搜索包含 "nginx" 的行
ps aux | grep nginx
# 列出目录内容并分页显示
ls -la /etc | less
# 统计当前目录下的文件数量
ls | wc -l
# 查看磁盘使用情况,按大小排序
du -sh * | sort -h
# 多级管道:查找日志中的错误,去重,排序
cat /var/log/syslog | grep "error" | sort | uniq -c | sort -rn输出重定向(> 和 >>)
# 将命令输出写入文件(覆盖原内容)
echo "Hello, Ubuntu!" > hello.txt
# 将命令输出追加到文件末尾
echo "Another line" >> hello.txt
# 将命令列表保存到文件
ls -la > filelist.txt
# 将错误输出重定向到文件
command 2> errors.log
# 将标准输出和错误输出都重定向
command > output.log 2>&1
# 或者更简洁的写法
command &> output.log输入重定向 <
# 从文件读取输入
wc -l < file.txt
# 常见用法:将 SQL 文件导入数据库
mysql -u root -p database_name < backup.sql权限基础
Linux 是一个多用户系统,权限管理确保了系统的安全性。
sudo - 以管理员身份执行
sudo(Super User Do)允许普通用户以管理员(root)权限执行命令:
# 安装软件
sudo apt install vim
# 编辑系统配置文件
sudo nano /etc/hosts
# 以 root 身份打开一个 Shell(谨慎使用)
sudo -i
# 查看 sudo 权限
sudo -l首次使用 sudo 时会要求输入你自己的用户密码(不是 root 密码),密码在一段时间内会被记住。
chmod - 修改文件权限
Linux 文件权限分为三组:所有者(u)、所属组(g)、其他人(o),每组有读(r=4)、写(w=2)、执行(x=1) 三种权限。
# 查看文件权限
ls -l file.txt
# 输出示例:-rw-r--r-- 1 user group 1024 Jan 1 12:00 file.txt
# 给文件添加执行权限
chmod +x script.sh
# 设置精确权限(所有者读写执行,组读执行,其他人读执行)
chmod 755 script.sh
# 常用权限组合
chmod 644 file.txt # 所有者读写,其他人只读
chmod 600 secret.key # 仅所有者读写
chmod 777 shared.txt # 所有人完全权限(不推荐)
# 递归修改目录权限
chmod -R 755 /var/www/html常用快捷键
熟练使用快捷键可以大幅提升命令行效率:
| 快捷键 | 功能 |
|---|---|
| Tab | 自动补全命令、文件名、目录名 |
| Tab Tab | 显示所有可能的补全选项 |
| Ctrl + C | 中断当前正在运行的命令 |
| Ctrl + D | 退出当前 Shell(等同于输入 exit) |
| Ctrl + R | 反向搜索历史命令 |
| Ctrl + L | 清屏(等同于 clear 命令) |
| Ctrl + A | 光标移到行首 |
| Ctrl + E | 光标移到行尾 |
| Ctrl + W | 删除光标前的一个单词 |
| Ctrl + U | 删除光标到行首的内容 |
| Ctrl + K | 删除光标到行尾的内容 |
| 上/下箭头 | 浏览历史命令 |
| !! | 重复执行上一条命令 |
| !$ | 引用上一条命令的最后一个参数 |
# Tab 补全示例
cd /etc/ng[Tab] # 自动补全为 cd /etc/nginx/
# 使用 !! 的典型场景:忘记加 sudo
apt install vim
# 报权限错误,然后:
sudo !!
# 等同于 sudo apt install vim
# Ctrl+R 搜索历史
# 按 Ctrl+R,输入 "docker",会显示最近包含 "docker" 的命令获取帮助
在 Linux 中,获取帮助的方式有很多:
man - 手册页
man(Manual)是最权威的命令文档:
# 查看 ls 命令的手册
man ls
# 搜索手册(按关键词)
man -k "copy file"
# 查看手册的特定章节
man 5 crontab # 查看 crontab 文件格式(第 5 节)—help 参数
大多数命令都支持 --help 参数,显示简明的用法说明:
ls --help
cp --help
systemctl --helptldr - 简化版手册
tldr(Too Long; Didn’t Read)提供简洁实用的命令示例,非常适合新手:
# 安装 tldr
sudo apt install tldr
# 更新数据库
tldr --update
# 查看命令用法
tldr tar
tldr rsync
tldr systemctl其他帮助资源
# 查看命令的简要说明
whatis ls
# 查找命令所在的路径
which python3
whereis nginx
# 查看命令类型(内置命令、外部命令、别名等)
type cd
type ls新手必备命令速查表
以下是新手最常用的 20 个命令速查表,建议收藏备用!不需要一次记住所有命令,用到的时候查一查,慢慢就会形成肌肉记忆。
| 命令 | 用途 | 常用示例 |
|---|---|---|
pwd | 显示当前目录 | pwd |
ls | 列出目录内容 | ls -lah |
cd | 切换目录 | cd /var/log |
mkdir | 创建目录 | mkdir -p a/b/c |
cp | 复制文件/目录 | cp -r src/ dst/ |
mv | 移动/重命名 | mv old.txt new.txt |
rm | 删除文件/目录 | rm -r dirname |
cat | 查看文件内容 | cat file.txt |
less | 分页查看文件 | less /var/log/syslog |
head/tail | 查看文件头/尾 | tail -f log.txt |
grep | 搜索文本 | grep "error" log.txt |
find | 查找文件 | find / -name "*.conf" |
sudo | 管理员权限执行 | sudo apt update |
apt | 包管理器 | sudo apt install vim |
chmod | 修改权限 | chmod +x script.sh |
nano/vim | 文本编辑器 | nano file.txt |
df | 查看磁盘使用 | df -h |
top/htop | 查看进程 | htop |
systemctl | 管理系统服务 | systemctl status nginx |
history | 查看历史命令 | history | grep ssh |
进阶小技巧
命令别名
你可以为常用命令创建简短的别名:
# 临时别名(仅当前会话有效)
alias ll='ls -lah'
alias gs='git status'
# 永久别名(写入 ~/.bashrc)
echo "alias ll='ls -lah'" >> ~/.bashrc
echo "alias update='sudo apt update && sudo apt upgrade -y'" >> ~/.bashrc
# 使别名立即生效
source ~/.bashrc命令历史
# 查看历史命令
history
# 搜索历史命令
history | grep "apt install"
# 执行历史记录中的第 42 条命令
!42
# 清除历史记录
history -c通配符
# * 匹配任意字符
ls *.txt # 所有 .txt 文件
cp *.jpg photos/ # 复制所有 .jpg 文件
# ? 匹配单个字符
ls file?.txt # 匹配 file1.txt, fileA.txt 等
# [] 匹配指定范围
ls file[1-3].txt # 匹配 file1.txt, file2.txt, file3.txt学完这些基础知识后,你已经可以在 Ubuntu 命令行中完成大部分日常操作了。接下来可以继续学习更高级的话题,比如 Shell 脚本编写、系统管理、网络配置等。记住,熟能生巧——多动手实践才是掌握命令行的最佳方式。