Linux 命令行界面 (CLI) 是与 Linux 系统交互的强大工具。通过在终端中输入命令,用户可以高效地执行从基本文件操作到复杂系统管理的各种任务。掌握常用命令是成为 Linux 高效使用者的第一步。

一个典型的 Linux 命令遵循以下结构:command [options] [arguments]

  • command: 要执行的程序或命令的名称 (如 ls, cp)。
  • options (或称 flags/switches): 修改命令行为的参数,通常以 - (短选项,如 -l) 或 -- (长选项,如 --list) 开头。
  • arguments: 命令操作的对象,通常是文件名、目录路径或字符串。

一、文件与目录管理

这是最基本也是最常用的一类命令,用于浏览和操作文件系统。

1.1 ls - 列出目录内容

作用:列出指定目录下的文件和子目录。

常用选项

  • -l: 使用长列表格式显示,包含权限、所有者、大小、修改日期等详细信息。
  • -a: 显示所有文件,包括以 . 开头的隐藏文件。
  • -h: 与 -l 结合使用,以人类可读的格式显示文件大小 (如 1K, 23M, 2G)。
  • -t: 按修改时间排序,最新的在前。
  • -r: 反向排序。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 列出当前目录的内容
ls

# 以长列表格式列出所有文件 (包括隐藏文件),并以人类可读方式显示大小
ls -lah

# 列出 /var/log 目录并按修改时间倒序排列
ls -ltr /var/log```

### 1.2 cd - 切换目录

**作用**:改变当前工作目录。

**常用参数**:
- `cd /path/to/directory`: 切换到指定的绝对或相对路径。
- `cd ..`: 切换到上一级目录。
- `cd ~` 或 `cd`: 切换到当前用户的主目录 (Home Directory)。
- `cd -`: 切换到上一次所在的目录。

**示例**:
```bash
# 进入 /etc 目录
cd /etc

# 返回上一级目录
cd ..

# 快速返回主目录
cd ~

1.3 pwd - 显示当前工作目录

作用:打印当前工作目录的绝对路径。

示例

1
2
pwd
# 输出: /home/username/documents

1.4 mkdir - 创建目录

作用:创建一个新的目录。

常用选项

  • -p: 创建多级目录。如果父目录不存在,会自动创建。

示例

1
2
3
4
5
# 在当前目录下创建一个名为 'backup' 的目录
mkdir backup

# 级联创建目录 a/b/c
mkdir -p a/b/c

1.5 rm - 删除文件或目录

作用:删除文件或目录。这是一个危险的命令,请谨慎使用,删除后通常无法恢复。

常用选项

  • -r-R: 递归删除目录及其下所有内容。
  • -f: 强制删除,不进行任何提示。
  • -i: 在删除前进行交互式提示。

示例

1
2
3
4
5
6
7
8
# 删除文件 test.txt
rm test.txt

# 强制递归删除 backup 目录及其所有内容
rm -rf backup

# 删除文件前提示确认
rm -i important_file.log

警告rm -rf / 是一个灾难性的命令,它会试图删除根目录下的所有文件。切勿尝试!

1.6 cp - 复制文件或目录

作用:将文件或目录复制到另一个位置。

常用选项

  • -r: 递归复制目录及其所有内容。
  • -v: 显示详细的复制过程。

示例

1
2
3
4
5
6
7
8
# 将文件 source.txt 复制为 destination.txt
cp source.txt destination.txt

# 将文件 config.ini 复制到 /etc/backup 目录
cp config.ini /etc/backup/

# 递归复制整个 project 目录到 /opt/projects
cp -r project /opt/projects

1.7 mv - 移动或重命名文件/目录

作用:移动文件/目录到另一个位置,或者对文件/目录进行重命名。

示例

1
2
3
4
5
6
7
8
# 将文件 old_name.txt 重命名为 new_name.txt
mv old_name.txt new_name.txt

# 将 report.pdf 文件移动到 /home/user/documents 目录
mv report.pdf /home/user/documents/

# 将目录 'archive' 移动并重命名为 'old_archive'
mv archive old_archive

1.8 touch - 创建空文件或更新时间戳

作用:创建一个空文件,或者更新一个已存在文件的时间戳 (访问和修改时间)。

示例

1
2
3
4
5
# 创建一个名为 new_file.txt 的空文件
touch new_file.txt

# 更新 existing_file.txt 的时间戳
touch existing_file.txt

二、文本处理与查看

2.1 cat - 查看和连接文件内容

作用:读取一个或多个文件的内容并将其打印到标准输出。

常用选项

  • -n: 显示行号。

示例

1
2
3
4
5
6
7
8
# 查看 file.txt 的内容
cat file.txt

# 同时查看 file1.txt 和 file2.txt 的内容,并合并输出
cat file1.txt file2.txt

# 将 file1.txt 和 file2.txt 的内容合并到 new_file.txt
cat file1.txt file2.txt > new_file.txt

2.2 less - 分页查看文件内容

作用:比 cat 更强大的文件查看器,特别适合查看大文件。它允许你向前和向后滚动。

常用操作

  • 空格键 / f: 向下翻一页。
  • b: 向上翻一页。
  • 箭头键: 逐行滚动。
  • /text: 向下搜索 “text”。
  • ?text: 向上搜索 “text”。
  • n: 跳转到下一个搜索结果。
  • q: 退出。

示例

1
less /var/log/syslog

2.3 head / tail - 查看文件开头/结尾

作用:分别用于显示文件的开头或结尾部分。

常用选项

  • -n <行数>: 指定显示的行数 (默认为 10 行)。
  • -f: (仅用于 tail) 持续监控文件末尾的新增内容,常用于实时查看日志。

示例

1
2
3
4
5
6
7
8
# 查看 anaconda.log 的前 20 行
head -n 20 anaconda.log

# 查看 access.log 的最后 50 行
tail -n 50 access.log

# 实时监控 app.log 文件的新增内容
tail -f app.log

2.4 grep - 文本搜索

作用:在一个或多个文件中搜索包含指定模式的行,并打印出来。

常用选项

  • -i: 忽略大小写。
  • -r-R: 递归搜索目录下的所有文件。
  • -v: 反向匹配,打印不包含模式的行。
  • -n: 显示匹配行的行号。
  • -C <数字>: 显示匹配行及其上下文 (前后几行)。

示例

1
2
3
4
5
6
7
8
# 在 nginx.conf 文件中搜索包含 'server_name' 的行
grep 'server_name' /etc/nginx/nginx.conf

# 在当前目录下所有 .py 文件中递归搜索 'import requests' (忽略大小写)
grep -ir 'import requests' .

# 查找所有不包含 'DEBUG' 的日志行
grep -v 'DEBUG' application.log

三、系统信息与监控

3.1 ps - 查看进程状态

作用:报告当前系统的进程状态。

常用选项组合

  • ps aux: 显示系统中所有用户的所有进程的详细信息 (BSD 风格)。
  • ps -ef: 显示所有进程的完整格式信息 (System V 风格)。

示例

1
2
3
4
5
# 查看所有正在运行的进程
ps aux

# 结合 grep 查找名为 'nginx' 的进程
ps aux | grep nginx

3.2 top / htop - 实时进程监控

作用:动态实时地显示系统进程信息,包括 CPU、内存使用情况。htoptop 的增强版,提供更友好的界面和交互。

示例

1
2
3
4
5
# 启动 top
top

# (如果已安装) 启动 htop
htop

3.3 df - 查看磁盘空间使用情况

作用:显示文件系统的磁盘空间占用情况。

常用选项

  • -h: 以人类可读的格式显示 (例如, 1K 234M 2G)。
  • -T: 显示文件系统类型。

示例

1
df -h

3.4 du - 查看文件或目录的磁盘使用情况

作用:估算文件或目录占用的磁盘空间。

常用选项

  • -h: 以人类可读的格式显示。
  • -s: 只显示总计大小 (summary)。
  • --max-depth=N: 指定显示的目录深度。

示例

1
2
3
4
5
6
7
8
# 查看当前目录下所有文件和子目录的大小
du -h

# 查看 /var/log 目录的总大小
du -sh /var/log

# 查看当前目录下第一级子目录的大小
du -h --max-depth=1

3.5 uname - 显示系统信息

作用:打印系统内核和硬件架构信息。

常用选项

  • -a: 显示所有可用信息。

示例

1
2
uname -a
# 输出可能类似: Linux my-server 5.4.0-100-generic #113-Ubuntu SMP ... x86_64 x86_64 x86_64 GNU/Linux

3.6 free - 查看内存使用情况

作用:显示系统中的物理内存和交换空间的使用情况。

常用选项

  • -h: 以人类可读的格式显示。

示例

1
free -h

四、用户与权限管理

4.1 sudo - 以超级用户权限执行命令

作用:允许授权用户以其他用户(通常是 root 超级用户)的身份执行命令。

示例

1
2
3
4
5
# 以 root 权限安装 nginx
sudo apt-get install nginx

# 编辑一个需要 root 权限才能修改的文件
sudo nano /etc/hosts

4.2 chmod - 修改文件权限

作用:改变文件或目录的访问权限。

模式

  1. 数字模式: r (读) = 4, w (写) = 2, x (执行) = 1。将权限相加。
    • 7 = 4+2+1 (rwx)
    • 6 = 4+2 (rw-)
    • 5 = 4+1 (r-x)
  2. 符号模式: u (user), g (group), o (other), a (all)。+ (添加), - (移除), = (设置)。

示例

1
2
3
4
5
6
7
8
# 为 myfile.sh 添加所有者的执行权限
chmod u+x myfile.sh

# 将 myfile.sh 设置为所有者可读写执行,所属组可读执行,其他人可读执行 (755)
chmod 755 myfile.sh

# 递归地为 'data' 目录及其下所有文件设置权限
chmod -R 755 data/

4.3 chown - 修改文件所有者和组

作用:改变文件或目录的所有者和所属组。

常用选项

  • -R: 递归操作。

示例

1
2
3
4
5
6
7
8
# 将 file.txt 的所有者改为 'john'
sudo chown john file.txt

# 将 file.txt 的所有者改为 'john',所属组改为 'developers'
sudo chown john:developers file.txt

# 递归地改变 'project' 目录的所有权
sudo chown -R www-data:www-data /var/www/project

五、网络命令

5.1 ping - 测试网络连通性

作用:向目标主机发送 ICMP ECHO_REQUEST 数据包,以测试网络连接。

示例

1
ping google.com

5.2 ip / ifconfig - 查看和配置网络接口

作用ip 是现代 Linux 系统中推荐的命令,用于替代旧的 ifconfig

示例

1
2
3
4
5
# 显示所有网络接口的 IP 地址信息
ip addr show

# (旧方法)
ifconfig

5.3 curl / wget - 数据传输工具

作用:用于从网络服务器下载或上传数据。

  • curl: 功能强大,支持多种协议,常用于 API 测试,默认将内容输出到标准输出。
  • wget: 主要用于从 Web 下载文件,默认将内容保存到文件。

示例

1
2
3
4
5
6
7
8
# 使用 curl 查看网页的 HTTP 头部信息
curl -I https://www.example.com

# 使用 wget 下载一个文件
wget https://releases.ubuntu.com/22.04.1/ubuntu-22.04.1-desktop-amd64.iso

# 使用 curl 下载文件并指定输出文件名
curl -o ubuntu.iso https://releases.ubuntu.com/22.04.1/ubuntu-22.04.1-desktop-amd64.iso

六、归档与压缩

6.1 tar - 打包和解包文件

作用:将多个文件或目录打包成一个 .tar 文件,通常会结合压缩工具 (如 gzip, bzip2) 使用。

常用选项

  • -c: 创建一个新的归档文件 (create)。
  • -x: 从归档文件中提取文件 (extract)。
  • -v: 显示详细过程 (verbose)。
  • -f: 指定归档文件名 (file)。
  • -z: 使用 gzip 进行压缩/解压缩 (.tar.gz.tgz)。
  • -j: 使用 bzip2 进行压缩/解压缩 (.tar.bz2)。

示例:

1
2
3
4
5
6
7
8
# 将 'mydocs' 目录打包并用 gzip 压缩为 mydocs.tar.gz
tar -czvf mydocs.tar.gz mydocs/

# 从 mydocs.tar.gz 中解压文件到当前目录
tar -xzvf mydocs.tar.gz

# 查看 mydocs.tar.gz 文件内容,但不解压
tar -tzvf mydocs.tar.gz

6.2 zip / unzip - .zip 格式压缩与解压

作用:处理 .zip 格式的压缩文件。

示例

1
2
3
4
5
# 将 'images' 目录压缩为 images.zip
zip -r images.zip images/

# 解压 images.zip 文件
unzip images.zip

七、搜索命令

7.1 find - 在文件系统中查找文件

作用:根据各种条件(如名称、大小、修改时间、权限等)在目录树中搜索文件。

常用表达式

  • -name "pattern": 按文件名查找。
  • -type [f|d|l]: 按文件类型查找 (f: 文件, d: 目录, l: 符号链接)。
  • -mtime n: 查找 n 天前修改过的文件。
  • -exec command {} \;: 对找到的每个文件执行一个命令。

示例

1
2
3
4
5
6
7
8
# 在当前目录及其子目录下查找所有 .log 文件
find . -name "*.log"

# 在 /etc 目录下查找所有目录
find /etc -type d

# 查找 /var/log 下所有大于 100M 的 .log 文件并删除
find /var/log -name "*.log" -size +100M -exec rm -f {} \;

八、包管理命令

这取决于你的 Linux 发行版。

  • Debian/Ubuntu (使用 APT)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 更新软件包列表
    sudo apt update

    # 升级所有已安装的软件包
    sudo apt upgrade

    # 安装一个新软件包 (例如 nginx)
    sudo apt install nginx

    # 卸载一个软件包
    sudo apt remove nginx
  • CentOS/RHEL/Fedora (使用 YUM/DNF) dnf 是新一代的包管理器。

    1
    2
    3
    4
    5
    6
    7
    8
    # 更新所有软件包
    sudo dnf update

    # 安装一个新软件包 (例如 httpd)
    sudo dnf install httpd

    # 卸载一个软件包
    sudo dnf remove httpd

九、总结与技巧

  • 获取帮助: 使用 man <command> (例如 man ls) 查看命令的详细手册页,或使用 <command> --help 查看简要帮助。
  • Tab 自动补全: 在输入命令或路径时,按 Tab 键可以自动补全,大大提高效率。
  • 管道 (|): 将一个命令的输出作为另一个命令的输入。例如 ps aux | grep code
  • 重定向 (>>>):
    • >: 将命令输出覆盖写入文件。
    • >>: 将命令输出追加到文件末尾。
    • 2>: 重定向标准错误。

掌握这些常用命令将极大地提升您在 Linux 环境下的工作效率。