Linux 常用命令教学指南
本教程涵盖 Linux 系统中最常用的命令,每个命令都配有模拟控制台输出,让你像在真实终端中操作一样直观理解。适合初学者快速上手。
目录
一、文件与目录操作
1. ls - 列出目录内容
ls 是 Linux 中使用频率最高的命令之一,用于列出目录中的文件和子目录。
基本用法:列出当前目录
ls$ ls
Desktop Documents Downloads Music Pictures Videos详细列表:显示权限、所有者、大小、时间
ls -l$ ls -l
total 32
drwxr-xr-x 2 user user 4096 May 12 09:30 Desktop
drwxr-xr-x 3 user user 4096 May 10 14:22 Documents
drwxr-xr-x 5 user user 4096 May 11 18:05 Downloads
drwxr-xr-x 2 user user 4096 Apr 28 10:00 Music
drwxr-xr-x 2 user user 4096 May 1 20:15 Pictures
drwxr-xr-x 2 user user 4096 Apr 15 08:30 Videos输出解读:drwxr-xr-x是权限信息,第一个d表示这是一个目录;user user分别是所有者和所属组;4096是大小(字节);后面的时间是最后修改时间。
显示隐藏文件
ls -a$ ls -a
. .bashrc .profile Desktop Downloads Pictures
.. .cache .ssh Documents Music Videos
.bash_history .config .vimrc .local输出解读:以.开头的文件是隐藏文件。.代表当前目录,..代表上一级目录。
人性化显示:文件大小以 KB/MB/GB 显示
ls -lh$ ls -lh
total 32K
drwxr-xr-x 2 user user 4.0K May 12 09:30 Desktop
drwxr-xr-x 3 user user 4.0K May 10 14:22 Documents
drwxr-xr-x 5 user user 4.0K May 11 18:05 Downloads
drwxr-xr-x 2 user user 4.0K Apr 28 10:00 Music
drwxr-xr-x 2 user user 4.0K May 1 20:15 Pictures
drwxr-xr-x 2 user user 4.0K Apr 15 08:30 Videos输出解读:加了-h参数后,文件大小从4096变成了4.0K,更易读。
按时间排序:最新的在前
ls -lt$ ls -lt
total 32
drwxr-xr-x 2 user user 4096 May 12 09:30 Desktop
drwxr-xr-x 5 user user 4096 May 11 18:05 Downloads
drwxr-xr-x 3 user user 4096 May 10 14:22 Documents
drwxr-xr-x 2 user user 4096 May 1 20:15 Pictures
drwxr-xr-x 2 user user 4096 Apr 28 10:00 Music
drwxr-xr-x 2 user user 4096 Apr 15 08:30 Videos输出解读:加了 -t 参数后,文件按修改时间从新到旧排列。组合使用:详细列表 + 隐藏文件 + 人性化大小
ls -lha$ ls -lha
total 88K
drwxr-xr-x 8 user user 4.0K May 12 09:30 .
drwxr-xr-x 3 root root 4.0K May 1 12:00 ..
-rw------- 1 user user 1.2K May 12 09:30 .bash_history
-rw-r--r-- 1 user user 220 May 1 12:00 .bashrc
drwxr-xr-x 2 user user 4.0K May 10 08:00 .cache
drwxr-xr-x 3 user user 4.0K May 5 16:30 .config
drwxr-xr-x 2 user user 4.0K May 8 11:00 .local
-rw-r--r-- 1 user user 807 May 1 12:00 .profile
drwxr-xr-x 2 user user 4.0K Apr 20 09:00 .ssh
-rw-r--r-- 1 user user 47 May 9 14:20 .vimrc
drwxr-xr-x 2 user user 4.0K May 12 09:30 Desktop
drwxr-xr-x 3 user user 4.0K May 10 14:22 Documents
drwxr-xr-x 5 user user 4.0K May 11 18:05 Downloads
drwxr-xr-x 2 user user 4096 Apr 28 10:00 Music
drwxr-xr-x 2 user user 4096 May 1 20:15 Pictures
drwxr-xr-x 2 user user 4096 Apr 15 08:30 Videos输出解读:-lha组合了详细信息 + 隐藏文件 + 人性化大小,是最常用的查看方式。注意.bash_history的权限是-rw-------,表示只有所有者可读写,其他人无权限。
2. cd - 切换目录
cd(Change Directory)用于在不同的目录之间切换。
进入指定目录
cd /home/user/documents$ pwd
/home/user
$ cd /home/user/documents
$ pwd
/home/user/documents返回上一级目录
cd ..$ pwd
/home/user/documents/projects
$ cd ..
$ pwd
/home/user/documents返回上两级目录
cd ../..$ pwd
/home/user/documents/projects/web/frontend
$ cd ../..
$ pwd
/home/user/documents/projects返回用户主目录
cd ~$ cd /tmp/some/deep/path
$ pwd
/tmp/some/deep/path
$ cd ~
$ pwd
/home/user返回上一次所在目录
cd -$ cd /var/log
$ pwd
/var/log
$ cd -
$ pwd
/home/user输出解读:cd - 会切换回上一次所在的目录,终端会打印出切换前的路径。3. pwd - 显示当前目录路径
pwd(Print Working Directory)显示你当前所在的完整路径。
基本用法
pwd$ cd /home/user/documents/projects
$ pwd
/home/user/documents/projects输出解读:直接输出当前目录的绝对路径。在脚本中经常用来获取当前路径。
4. mkdir - 创建目录
mkdir(Make Directory)用于创建新目录。
创建单个目录
mkdir myfolder$ ls
file.txt
$ mkdir myfolder
$ ls
file.txt myfolder创建多级目录
mkdir -p parent/child/grandchild$ mkdir -p parent/child/grandchild
$ ls -R parent/
parent/:
child
parent/child:
grandchild
parent/child/grandchild:输出解读:不加-p时,如果父目录不存在会报错。加了-p后会自动创建所有不存在的父目录。ls -R可以递归查看目录结构。
同时创建多个目录
mkdir dir1 dir2 dir3$ mkdir dir1 dir2 dir3
$ ls
dir1 dir2 dir3创建目录并设置权限
mkdir -m 755 myfolder$ mkdir -m 755 myfolder
$ ls -ld myfolder
drwxr-xr-x 2 user user 4096 May 12 10:00 myfolder输出解读:-m 755 在创建时就设定好了权限。5. rmdir - 删除空目录
rmdir(Remove Directory)只能删除空目录。
删除空目录
rmdir emptyfolder$ ls
emptyfolder myfolder
$ rmdir emptyfolder
$ ls
myfolder删除非空目录会报错
rmdir myfolder$ rmdir myfolder
rmdir: failed to remove 'myfolder': Directory not empty输出解读:如果目录不为空,rmdir会报错并拒绝删除。要删除非空目录需要用rm -r。
6. rm - 删除文件或目录
rm(Remove)用于删除文件或目录,是 Linux 中最需要谨慎使用的命令。
删除单个文件
rm file.txt$ ls
file.txt notes.md readme.md
$ rm file.txt
$ ls
notes.md readme.md显示删除过程
rm -v notes.md readme.md$ rm -v notes.md readme.md
removed 'notes.md'
removed 'readme.md'输出解读:加了 -v 会显示删除了哪些文件。交互式删除:删除前确认
rm -i important.txt$ rm -i important.txt
rm: remove regular file 'important.txt'? y输出解读:加了-i会在删除前询问确认,输入y确认删除,输入n取消。
递归删除目录
rm -r myfolder$ ls
myfolder/
myfolder/file1.txt myfolder/file2.txt myfolder/subdir/
$ rm -r myfolder
$ ls输出解读:
-r递归删除目录及其所有内容。⚠️ 警告:
rm -rf /或rm -rf /*会删除整个系统,切勿执行!
7. cp - 复制文件或目录
cp(Copy)用于复制文件或目录。
复制文件
cp source.txt destination.txt$ ls
source.txt
$ cp source.txt destination.txt
$ ls
destination.txt source.txt复制文件到目录
cp -v source.txt /home/user/documents/$ cp -v source.txt /home/user/documents/
'source.txt' -> '/home/user/documents/source.txt'输出解读:加了 -v 会显示复制过程。复制目录
cp -r sourcedir/ destdir/$ ls sourcedir/
file1.txt file2.txt subdir/
$ cp -r sourcedir/ destdir/
$ ls destdir/
file1.txt file2.txt subdir/输出解读:复制目录必须加 -r 参数。保持文件属性
cp -p source.txt destination.txt$ cp -p source.txt destination.txt
$ ls -l source.txt destination.txt
-rw-r--r-- 1 user user 256 May 10 09:00 source.txt
-rw-r--r-- 1 user user 256 May 10 09:00 destination.txt输出解读:加了 -p 后,复制出来的文件保留了原始的时间戳和权限信息。8. mv - 移动或重命名文件
mv(Move)用于移动文件到其他目录,或者给文件重命名。
重命名文件
mv oldname.txt newname.txt$ ls
oldname.txt
$ mv oldname.txt newname.txt
$ ls
newname.txt移动文件到目录
mv file.txt documents/$ ls
file.txt documents/
$ mv file.txt documents/
$ ls
documents/
$ ls documents/
file.txt显示移动过程
mv -v report.pdf /home/user/documents/$ mv -v report.pdf /home/user/documents/
'report.pdf' -> '/home/user/documents/report.pdf'输出解读:加了 -v 会显示移动过程。9. touch - 创建空文件或更新时间戳
touch 最常用于快速创建空文件。
创建空文件
touch newfile.txt$ ls
$ touch newfile.txt
$ ls
newfile.txt
$ cat newfile.txt输出解读:创建的空文件没有任何内容,cat 查看时输出为空。同时创建多个文件
touch file1.txt file2.txt file3.txt$ touch file1.txt file2.txt file3.txt
$ ls
file1.txt file2.txt file3.txt更新文件时间戳
touch report.txt$ ls -l report.txt
-rw-r--r-- 1 user user 1024 Apr 15 08:30 report.txt
$ touch report.txt
$ ls -l report.txt
-rw-r--r-- 1 user user 1024 May 12 10:15 report.txt输出解读:对已存在的文件使用 touch,不会修改文件内容,但会将修改时间更新为当前时间。10. find - 查找文件
find 是 Linux 中功能最强大的文件查找工具。
按名称查找
find /home/user -name "*.txt"$ find /home/user -name "*.txt"
/home/user/documents/report.txt
/home/user/notes.txt
/home/user/Desktop/todo.txt
/home/user/downloads/readme.txt按类型查找
find /home/user -type d -name "documents"$ find /home/user -type d -name "documents"
/home/user/documents输出解读:-type d限定只查找目录,-type f限定只查找文件。
按大小查找
find /home/user -size +100M$ find /home/user -size +100M
/home/user/downloads/ubuntu-22.04.iso
/home/user/videos/tutorial.mp4按时间查找
find /home/user -name "*.log" -mtime -7$ find /home/user -name "*.log" -mtime -7
/home/user/app/logs/error.log
/home/user/app/logs/access.log
/home/user/nginx/logs/error.log输出解读:-mtime -7 表示 7 天内修改过的文件。查找并删除
find /home/user -name "*.tmp" -delete$ find /home/user -name "*.tmp" -delete
$ echo $?
0输出解读:-delete直接删除找到的文件。echo $?返回0表示成功。
二、文件查看与编辑
1. cat - 查看文件内容
cat(Concatenate)用于查看文件全部内容,也用于合并文件。
基本用法
cat greeting.txt$ cat greeting.txt
Hello, Linux!
Welcome to the command line world.
This is a sample text file.显示行号
cat -n greeting.txt$ cat -n greeting.txt
1 Hello, Linux!
2 Welcome to the command line world.
3 This is a sample text file.输出解读:加了 -n 后,每行前面会显示行号。合并多个文件
cat file1.txt file2.txt > merged.txt$ cat file1.txt
AAA
BBB
$ cat file2.txt
CCC
DDD
$ cat file1.txt file2.txt > merged.txt
$ cat merged.txt
AAA
BBB
CCC
DDD输出解读:cat可以把多个文件的内容拼接在一起,通过>重定向到新文件。
2. less - 分页查看文件
less 用于分页查看大文件,不会一次性加载全部内容。
基本用法
less /var/log/syslog进入 less 后的界面模拟:
/var/log/syslog (lines 1-24 of 1523)
May 12 09:00:01 server systemd[1]: Started Session 42 of user root.
May 12 09:00:05 server sshd[1234]: Accepted publickey for user from 192.168.1.10
May 12 09:01:12 server kernel: [12345.678] eth0: Link is Up 1000Mbps
May 12 09:02:30 server nginx[5678]: GET /index.html 200
May 12 09:03:15 server cron[9012]: (root) CMD (/usr/bin/backup.sh)
May 12 09:04:00 server systemd[1]: daily.timer: Starting timer...
:less 常用快捷键
| 快捷键 | 功能 |
|---|---|
空格 | 向下翻页 |
b | 向上翻页 |
/关键词 | 向下搜索 |
?关键词 | 向上搜索 |
n | 下一个搜索结果 |
N | 上一个搜索结果 |
G | 跳到文件末尾 |
g | 跳到文件开头 |
q | 退出 |
3. head 和 tail - 查看文件开头/结尾
head:查看文件前 10 行(默认)
head server.log$ head server.log
[2026-05-12 08:00:01] INFO Server started on port 8080
[2026-05-12 08:00:05] INFO Database connection established
[2026-05-12 08:00:12] INFO User admin logged in
[2026-05-12 08:01:30] WARN Request timeout for /api/data
[2026-05-12 08:02:00] INFO Cache cleared successfully
[2026-05-12 08:03:15] ERROR Failed to send email: connection refused
[2026-05-12 08:04:00] INFO Scheduled task completed
[2026-05-12 08:05:22] INFO New user registered: john@example.com
[2026-05-12 08:06:10] INFO Backup started
[2026-05-12 08:07:00] INFO Backup completed (2.3 MB)head:指定行数
head -n 3 server.log$ head -n 3 server.log
[2026-05-12 08:00:01] INFO Server started on port 8080
[2026-05-12 08:00:05] INFO Database connection established
[2026-05-12 08:00:12] INFO User admin logged intail:查看文件后 5 行
tail -n 5 server.log$ tail -n 5 server.log
[2026-05-12 09:55:00] INFO Health check passed
[2026-05-12 09:56:30] WARN Memory usage at 85%
[2026-05-12 09:57:15] INFO GC completed, freed 120MB
[2026-05-12 09:58:00] ERROR Disk space low: /dev/sda1 at 92%
[2026-05-12 09:59:45] INFO Server still runningtail:实时追踪文件更新
tail -f server.log$ tail -f server.log
[2026-05-12 09:59:45] INFO Server still running
[2026-05-12 10:00:01] INFO New connection from 192.168.1.50
[2026-05-12 10:00:15] INFO Request processed in 45ms
[2026-05-12 10:00:30] WARN Slow query: SELECT * FROM orders (1.2s)
...输出解读:tail -f会实时追踪文件的新增内容,常用于监控日志。按Ctrl+C退出。
4. grep - 文本搜索
grep 是 Linux 中最常用的文本搜索工具。
基本搜索
grep "ERROR" server.log$ grep "ERROR" server.log
[2026-05-12 08:03:15] ERROR Failed to send email: connection refused
[2026-05-12 09:58:00] ERROR Disk space low: /dev/sda1 at 92%显示行号
grep -n "ERROR" server.log$ grep -n "ERROR" server.log
6:[2026-05-12 08:03:15] ERROR Failed to send email: connection refused
50:[2026-05-12 09:58:00] ERROR Disk space low: /dev/sda1 at 92%输出解读:加了 -n 后,每行前面显示了行号(第 6 行和第 50 行)。忽略大小写
grep -i "error" server.log$ grep -i "error" server.log
[2026-05-12 08:03:15] ERROR Failed to send email: connection refused
[2026-05-12 08:15:00] error retrying connection to database
[2026-05-12 09:58:00] ERROR Disk space low: /dev/sda1 at 92%输出解读:加了-i忽略大小写,所以小写的error也被匹配到了。
统计匹配行数
grep -c "ERROR" server.log$ grep -c "ERROR" server.log
2输出解读:-c 只输出匹配到的行数。显示匹配行的上下文
grep -C 2 "ERROR" server.log$ grep -C 2 "ERROR" server.log
[2026-05-12 08:02:00] INFO Cache cleared successfully
[2026-05-12 08:03:15] ERROR Failed to send email: connection refused
[2026-05-12 08:04:00] INFO Scheduled task completed
--
[2026-05-12 09:57:15] INFO GC completed, freed 120MB
[2026-05-12 09:58:00] ERROR Disk space low: /dev/sda1 at 92%
[2026-05-12 09:59:45] INFO Server still running输出解读:-C 2显示匹配行的前后各 2 行,--分隔了两组不连续的匹配结果。
反向匹配
grep -v "INFO" server.log$ grep -v "INFO" server.log
[2026-05-12 08:01:30] WARN Request timeout for /api/data
[2026-05-12 08:03:15] ERROR Failed to send email: connection refused
[2026-05-12 09:56:30] WARN Memory usage at 85%
[2026-05-12 09:58:00] ERROR Disk space low: /dev/sda1 at 92%输出解读:-v 反向匹配,只显示不包含 "INFO" 的行。5. nano - 简单文本编辑器
打开文件
nano myfile.txt进入 nano 后的界面模拟:
GNU nano 6.2 myfile.txt
Hello, this is my first file.
I am learning Linux commands.
This editor is very easy to use.
[ New File ]
^G Get Help ^O Write Out ^W Where Is ^K Cut Text ^T Execute
^X Exit ^R Read File ^Y Prev Page ^U Paste Text ^J Justifynano 常用快捷键
| 快捷键 | 功能 |
|---|---|
Ctrl+O | 保存文件 |
Ctrl+X | 退出编辑器 |
Ctrl+W | 搜索文本 |
Ctrl+K | 剪切整行 |
Ctrl+U | 粘贴 |
Ctrl+\ | 查找替换 |
6. vim - 高级文本编辑器
打开文件
vim config.yml进入 vim 后的界面模拟:
config.yml [New File]
server:
host: 127.0.0.1
port: 8080
debug: true
database:
host: localhost
port: 5432
name: myapp
~
~
~
-- INSERT -- 9,1 Allvim 基本操作流程
1. 打开文件:vim file.txt
2. 按 i 进入插入模式(左下角显示 --INSERT--)
3. 编辑内容...
4. 按 Esc 退出插入模式
5. 输入 :w 保存
6. 输入 :q 退出
7. 或者 :wq 保存并退出vim 常用命令
| 命令 | 功能 |
|---|---|
i | 进入插入模式 |
Esc | 退出插入模式 |
:w | 保存 |
:q | 退出 |
:wq | 保存并退出 |
:q! | 强制退出不保存 |
dd | 删除整行 |
yy | 复制整行 |
p | 粘贴 |
/关键词 | 搜索 |
:%s/old/new/g | 全局替换 |
三、权限管理
1. chmod - 修改文件权限
chmod(Change Mode)用于修改文件或目录的访问权限。
查看当前权限
ls -l script.sh$ ls -l script.sh
-rw-r--r-- 1 user user 256 May 12 10:00 script.sh输出解读:-rw-r--r-- 表示所有者可读写,组用户和其他人只读。这个脚本没有执行权限。数字方式设置权限
chmod 755 script.sh$ chmod 755 script.sh
$ ls -l script.sh
-rwxr-xr-x 1 user user 256 May 12 10:00 script.sh输出解读:755=rwx(7)r-x(5)r-x(5),现在所有人都可以执行这个脚本了。
符号方式:给所有者添加执行权限
chmod u+x script.sh$ chmod u+x script.sh
$ ls -l script.sh
-rwxr--r-- 1 user user 256 May 12 10:00 script.sh输出解读:u+x 表示给所有者(user)添加执行(execute)权限。递归修改目录权限
chmod -R 755 /var/www/html/输出解读:-R 递归修改,目录下所有文件和子目录都会被设置。权限数字对照表
| 数字 | 二进制 | 权限 | 说明 |
|---|---|---|---|
| 7 | 111 | rwx | 读取 + 写入 + 执行 |
| 6 | 110 | rw- | 读取 + 写入 |
| 5 | 101 | r-x | 读取 + 执行 |
| 4 | 100 | r-- | 只读 |
| 0 | 000 | --- | 无权限 |
2. chown - 修改文件所有者
chown(Change Owner)用于修改文件的所有者和所属组。
基本用法
sudo chown user:developers app.log$ ls -l app.log
-rw-r--r-- 1 root root 2048 May 12 10:00 app.log
$ sudo chown user:developers app.log
$ ls -l app.log
-rw-r--r-- 1 root developers 2048 May 12 10:00 app.log输出解读:文件所有者从root变为user,所属组从root变为developers。
递归修改
sudo chown -R user:developers /var/www/html/3. chgrp - 修改文件所属组
基本用法
sudo chgrp developers project/$ ls -l project/
drwxr-xr-x 2 user user 4096 May 12 10:00 project/
$ sudo chgrp developers project/
$ ls -l project/
drwxr-xr-x 2 user developers 4096 May 12 10:00 project/四、进程管理
1. ps - 查看进程
ps(Process Status)用于查看当前系统中运行的进程。
查看当前终端进程
ps$ ps
PID TTY TIME CMD
1234 pts/0 00:00:00 bash
5678 pts/0 00:00:00 ps输出解读:PID是进程ID,TTY是终端,TIME是累计CPU时间,CMD是命令名。
查看所有进程
ps aux$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 169936 13280 ? Ss May10 0:15 /sbin/init
root 234 0.0 0.2 35872 16896 ? Ss May10 0:08 /usr/sbin/sshd
root 456 0.0 0.1 18360 6120 ? Ss May10 0:00 /usr/sbin/cron
mysql 789 0.3 2.5 1256780 204800 ? Sl May10 5:30 /usr/sbin/mysqld
www-data 1011 0.1 0.5 58432 40960 ? S May10 2:15 nginx: worker process
user 1234 0.0 0.1 21468 5120 pts/0 Ss 10:00 0:00 -bash
user 5678 0.0 0.0 37368 3420 pts/0 R+ 10:05 0:00 ps aux输出解读:
USER:运行该进程的用户PID:进程ID(杀死进程时需要用到)%CPU/%MEM:CPU/内存使用率STAT:进程状态(S=休眠,R=运行,Z=僵尸)
查找特定进程
ps aux | grep nginx$ ps aux | grep nginx
root 1010 0.0 0.1 20560 8960 ? Ss May10 0:05 nginx: master process
www-data 1011 0.1 0.5 58432 40960 ? S May10 2:15 nginx: worker process
user 5679 0.0 0.0 37368 3420 pts/0 S+ 10:05 0:00 grep --color=auto nginx2. top - 实时进程监控
基本用法
top界面模拟:
top - 10:05:32 up 15 days, 3:22, 2 users, load average: 0.52, 0.58, 0.59
Tasks: 156 total, 1 running, 155 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.2 us, 1.1 sy, 0.0 ni, 95.5 id, 0.2 wa, 0.0 hi, 0.0 si
MiB Mem : 7892.5 total, 2341.2 free, 3456.8 used, 2094.5 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 4102.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
789 mysql 20 0 1256780 204800 12340 S 3.2 2.5 5:30.15 mysqld
1011 www-data 20 0 58432 40960 8760 S 1.1 0.5 2:15.30 nginx
2048 user 20 0 456789 98304 23450 S 0.5 1.2 1:05.42 python3
3001 user 20 0 123456 34560 12340 S 0.3 0.4 0:45.10 node
1 root 20 0 169936 13280 8560 S 0.0 0.2 0:15.23 systemd
234 root 20 0 35872 16896 9870 S 0.0 0.2 0:08.45 sshdtop 输出解读
| 区域 | 说明 |
|---|---|
| 第一行 | 系统时间、运行天数、用户数、负载均衡 |
| 第二行 | 总进程数、运行/休眠/停止/僵尸进程数 |
| 第三行 | CPU 使用率(us=用户,sy=内核,id=空闲) |
| 第四行 | 内存使用情况(总量/空闲/已用/缓存) |
| 进程列表 | 按 CPU 使用率排序 |
top 常用快捷键
| 快捷键 | 功能 |
|---|---|
P | 按 CPU 使用率排序 |
M | 按内存使用率排序 |
T | 按运行时间排序 |
k | 杀死进程(输入 PID) |
q | 退出 |
3. kill - 终止进程
基本终止
kill 1234$ kill 1234
$ echo $?
0输出解读:发送默认的 SIGTERM 信号(15),请求进程正常退出。$? 为 0 表示成功。强制终止
kill -9 1234$ kill -9 1234
$ echo $?
0输出解读:-9 发送 SIGKILL 信号,强制立即终止进程。查看所有可用信号
kill -l$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
...输出解读:常用的是9(SIGKILL)和15(SIGTERM)。
根据进程名终止
killall nginx输出解读:根据进程名终止所有匹配的进程,不需要 PID。
4. bg、fg、jobs - 后台任务管理
基本用法
python train.py
# 按 Ctrl+Z 暂停
bg
jobs
fg %1$ python train.py
^Z
[1]+ Stopped python train.py
$ jobs
[1]+ Stopped python train.py
$ bg
[1]+ python train.py &
$ jobs
[1]+ Running python train.py &
$ fg %1
python train.py输出解读:
Ctrl+Z暂停前台任务jobs查看后台任务状态bg让暂停的任务在后台继续运行fg %1把后台任务调到前台
五、磁盘与存储
1. df - 查看磁盘空间
df(Disk Free)用于查看文件系统的磁盘空间使用情况。
基本用法
df$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 524288000 209715200 314572800 41% /
/dev/sda2 104857600 52428800 52428800 50% /home
tmpfs 4096000 0 4096000 0% /dev/shm
/dev/sdb1 999999999 800000000 199999999 81% /data人性化显示
df -h$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 500G 200G 300G 41% /
/dev/sda2 100G 50G 50G 50% /home
tmpfs 4.0G 0 4.0G 0% /dev/shm
/dev/sdb1 954G 763G 191G 81% /data输出解读:加了-h后,大小从 KB 变成了 G。注意/data分区已使用 81%。
查看特定路径
df -h /home$ df -h /home
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 100G 50G 50G 50% /home2. du - 查看目录大小
du(Disk Usage)用于查看目录或文件的磁盘占用空间。
查看目录总大小
du -sh /home/user$ du -sh /home/user
12G /home/user输出解读:-s显示总计,-h人性化显示。用户主目录共占用 12GB。
查看子目录大小
du -h --max-depth=1 /home/user$ du -h --max-depth=1 /home/user
4.0K /home/user/Desktop
256M /home/user/Documents
5.2G /home/user/Downloads
128M /home/user/Music
2.1G /home/user/Pictures
4.3G /home/user/Videos
12G /home/user输出解读:--max-depth=1 只显示一级子目录的大小。按大小排序
du -h --max-depth=1 /home/user | sort -h$ du -h --max-depth=1 /home/user | sort -h
4.0K /home/user/Desktop
256M /home/user/Documents
128M /home/user/Music
2.1G /home/user/Pictures
4.3G /home/user/Videos
5.2G /home/user/Downloads
12G /home/user3. mount 和 umount - 挂载/卸载
查看已挂载的文件系统
mount$ mount
/dev/sda1 on / type ext4 (rw,relatime)
/dev/sda2 on /home type ext4 (rw,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
/dev/sdb1 on /data type ext4 (rw,relatime)挂载设备
sudo mount /dev/sdc1 /mnt/usb$ sudo mount /dev/sdc1 /mnt/usb
$ df -h /mnt/usb
Filesystem Size Used Avail Use% Mounted on
/dev/sdc1 32G 12G 20G 38% /mnt/usb卸载
sudo umount /mnt/usb$ sudo umount /mnt/usb
$ df -h /mnt/usb
df: /mnt/usb: not found六、网络相关
1. ping - 测试网络连通性
基本用法
ping -c 4 google.com$ ping -c 4 google.com
PING google.com (142.250.80.14) 56(84) bytes of data.
64 bytes from 142.250.80.14: icmp_seq=1 ttl=117 time=12.3 ms
64 bytes from 142.250.80.14: icmp_seq=2 ttl=117 time=11.8 ms
64 bytes from 142.250.80.14: icmp_seq=3 ttl=117 time=13.1 ms
64 bytes from 142.250.80.14: icmp_seq=4 ttl=117 time=12.0 ms
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 11.8/12.3/13.1/0.5 ms输出解读:
time=12.3 ms:往返延迟0% packet loss:丢包率,0% 表示网络良好rtt min/avg/max:最小/平均/最大延迟
2. curl 和 wget - 下载文件
wget 下载文件
wget https://example.com/file.zip$ wget https://example.com/file.zip
--2026-05-12 10:10:00-- https://example.com/file.zip
Resolving example.com... 93.184.216.34
Connecting to example.com... connected.
HTTP request sent, awaiting response... 200 OK
Length: 15728640 (15M) [application/zip]
Saving to: 'file.zip'
file.zip 100%[===================>] 15.00M 5.2MB/s in 2.9s
2026-05-12 10:10:03 (5.2 MB/s) - 'file.zip' saved [15728640/15728640]curl 查看 HTTP 头
curl -I https://example.com$ curl -I https://example.com
HTTP/2 200
content-type: text/html; charset=UTF-8
server: nginx/1.24.0
date: Mon, 12 May 2026 02:10:00 GMT
content-length: 1256
cache-control: max-age=3600输出解读:-I 只获取 HTTP 响应头,不下载内容。curl 发送 POST 请求
curl -X POST -d "name=test&age=25" https://example.com/api/user$ curl -X POST -d "name=test&age=25" https://example.com/api/user
{"status":"ok","message":"User created","id":12345}3. ss - 查看网络连接
查看监听端口
ss -tlnp$ ss -tlnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=234,fd=3))
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1010,fd=6))
LISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=1010,fd=7))
LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=789,fd=22))
LISTEN 0 128 0.0.0.0:5432 0.0.0.0:* users:(("postgres",pid=567,fd=3))输出解读:
LISTEN:正在监听的端口22= SSH,80= HTTP,443= HTTPS,3306= MySQLProcess:占用该端口的进程名和 PID
4. ssh - 远程连接
基本连接
ssh user@192.168.1.100$ ssh user@192.168.1.100
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ED25519 key fingerprint is SHA256:abc123def456ghi789jkl012mno345pqr678stu901.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.100' (ED25519) to the list of known hosts.
user@192.168.1.100's password:
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-generic x86_64)
Last login: Mon May 12 09:00:00 2026 from 192.168.1.1
user@server:~$输出解读:首次连接时会要求确认主机指纹。登录后提示符变为 user@server:~$。指定端口
ssh -p 2222 user@192.168.1.1005. scp - 远程复制文件
上传到远程
scp report.pdf user@192.168.1.100:/home/user/$ scp report.pdf user@192.168.1.100:/home/user/
user@192.168.1.100's password:
report.pdf 100% 512KB 2.1MB/s 00:00从远程下载
scp user@192.168.1.100:/home/user/backup.zip ./$ scp user@192.168.1.100:/home/user/backup.zip ./
user@192.168.1.100's password:
backup.zip 100% 50MB 8.5MB/s 00:05七、系统信息
1. uname - 查看系统信息
查看所有信息
uname -a$ uname -a
Linux server 6.8.0-40-generic #40-Ubuntu SMP x86_64 GNU/Linux输出解读:依次是:内核名称、主机名、内核版本、硬件架构。
查看内核版本
uname -r$ uname -r
6.8.0-40-generic查看硬件架构
uname -m$ uname -m
x86_642. free - 查看内存使用
基本用法
free -h$ free -h
total used free shared buff/cache available
Mem: 7.8Gi 3.4Gi 2.3Gi 256Mi 2.1Gi 4.0Gi
Swap: 2.0Gi 0.0Gi 2.0Gi输出解读:
total:总内存 7.8GBused:已使用 3.4GBfree:完全空闲 2.3GBavailable:实际可用 4.0GB(包含可释放的缓存)
3. uptime - 查看系统运行时间
基本用法
uptime$ uptime
10:30:45 up 15 days, 3:22, 2 users, load average: 0.52, 0.58, 0.59输出解读:
up 15 days, 3:22:已连续运行 15 天 3 小时 22 分钟2 users:当前有 2 个用户登录load average:1/5/15 分钟的平均负载,数值越低越空闲
4. hostname - 查看主机名
基本用法
hostname$ hostname
server
$ hostname -I
192.168.1.100 10.0.0.1输出解读:hostname -I 显示所有网络接口的 IP 地址。八、压缩与解压
1. tar - 打包与解包
tar 是 Linux 中最常用的打包压缩工具。
打包并压缩
tar -czvf backup.tar.gz documents/$ tar -czvf backup.tar.gz documents/
documents/
documents/report.pdf
documents/notes.txt
documents/images/
documents/images/photo1.jpg
documents/images/photo2.jpg输出解读:逐行列出打包的每个文件。
查看压缩包内容
tar -tvf backup.tar.gz$ tar -tvf backup.tar.gz
drwxr-xr-x user/user 0 2026-05-12 10:00 documents/
-rw-r--r-- user/user 5120 2026-05-10 09:30 documents/report.pdf
-rw-r--r-- user/user 1024 2026-05-11 14:20 documents/notes.txt
drwxr-xr-x user/user 0 2026-05-09 08:00 documents/images/
-rw-r--r-- user/user 204800 2026-05-09 08:15 documents/images/photo1.jpg
-rw-r--r-- user/user 153600 2026-05-09 08:20 documents/images/photo2.jpg解压到当前目录
tar -xzvf backup.tar.gz$ tar -xzvf backup.tar.gz
documents/
documents/report.pdf
documents/notes.txt
documents/images/
documents/images/photo1.jpg
documents/images/photo2.jpg解压到指定目录
tar -xzvf backup.tar.gz -C /tmp/restore/输出解读:-C /tmp/restore/ 指定解压目标目录。tar 参数说明
| 参数 | 功能 |
|---|---|
-c | 创建新归档 |
-x | 解包 |
-t | 查看内容 |
-v | 显示过程 |
-f | 指定文件名 |
-z | gzip 压缩/解压 |
-j | bzip2 压缩/解压 |
-C | 指定解压目录 |
2. zip 和 unzip
压缩目录
zip -r project.zip project/$ zip -r project.zip project/
adding: project/ (stored 0%)
adding: project/index.html (deflated 72%)
adding: project/style.css (deflated 65%)
adding: project/app.js (deflated 78%)
adding: project/images/ (stored 0%)
adding: project/images/logo.png (deflated 15%)输出解读:deflated 72% 表示该文件压缩后缩小了 72%。查看压缩包内容
unzip -l project.zip$ unzip -l project.zip
Archive: project.zip
Length Date Time Name
--------- ---------- ----- ----
0 05-12-2026 10:00 project/
4096 05-12-2026 10:00 project/index.html
2048 05-12-2026 10:00 project/style.css
8192 05-12-2026 10:00 project/app.js
0 05-12-2026 10:00 project/images/
51200 05-12-2026 10:00 project/images/logo.png
--------- -------
65536 6 files解压到指定目录
unzip project.zip -d /tmp/myproject/$ unzip project.zip -d /tmp/myproject/
Archive: project.zip
inflating: /tmp/myproject/project/index.html
inflating: /tmp/myproject/project/style.css
inflating: /tmp/myproject/project/app.js
inflating: /tmp/myproject/project/images/logo.png
extracting: /tmp/myproject/project/3. gzip 和 gunzip
压缩文件
gzip access.log$ ls -lh access.log
-rw-r--r-- 1 user user 15M May 12 10:00 access.log
$ gzip access.log
$ ls -lh access.log.gz
-rw-r--r-- 1 user user 1.2M May 12 10:00 access.log.gz输出解读:大小从 15MB 缩小到 1.2MB,压缩率非常高。
解压文件
gunzip access.log.gz$ gunzip access.log.gz
$ ls -lh access.log
-rw-r--r-- 1 user user 15M May 12 10:00 access.log九、用户管理
1. useradd 和 userdel - 添加/删除用户
添加用户
sudo useradd -m devuser$ sudo useradd -m devuser
$ ls -ld /home/devuser
drwxr-xr-x 2 devuser devuser 4096 May 12 10:00 /home/devuser输出解读:-m 自动创建主目录。设置密码
sudo passwd devuser$ sudo passwd devuser
New password:
Retype new password:
passwd: password updated successfully删除用户
sudo userdel -r devuser$ sudo userdel -r devuser
$ ls /home/
user输出解读:-r 同时删除用户主目录和邮件目录。2. usermod - 修改用户属性
添加用户到组
sudo usermod -aG sudo,developers devuser$ id devuser
uid=1001(devuser) gid=1001(devuser) groups=1001(devuser)
$ sudo usermod -aG sudo,developers devuser
$ id devuser
uid=1001(devuser) gid=1001(devuser) groups=1001(devuser),27(sudo),1002(developers)输出解读:-aG 将用户追加到指定组。3. su 和 sudo - 切换用户/提权
使用 sudo 执行命令
sudo whoami$ whoami
user
$ sudo whoami
[sudo] password for user:
root输出解读:sudo 以 root 权限执行命令,需要输入当前用户的密码。切换到 root 用户
su - root$ su - root
Password:
root@server:~#输出解读:提示符从$变成#,表示当前是 root 用户。
十、实用技巧
1. 管道与重定向
输出重定向(覆盖)
echo "Hello, World!" > hello.txt$ echo "Hello, World!" > hello.txt
$ cat hello.txt
Hello, World!输出重定向(追加)
echo "Second line" >> hello.txt$ echo "Second line" >> hello.txt
$ cat hello.txt
Hello, World!
Second line错误输出重定向
ls /nonexistent 2> error.log$ ls /nonexistent 2> error.log
$ cat error.log
ls: cannot access '/nonexistent': No such file or directory管道
ps aux | grep "nginx" | wc -l$ ps aux | grep "nginx" | wc -l
3输出解读:管道 | 将三个命令串联。2. 命令历史
查看历史
history$ history
1 cd /home/user
2 ls -la
3 cat config.yml
4 vim script.sh
5 python app.py
6 git commit -m "fix bug"
7 history执行第 N 条命令
!5$ !5
python app.py
Server started on http://localhost:8080执行最近以某词开头的命令
!git$ !git
git commit -m "fix bug"
[main abc1234] fix bug3. 别名设置
设置别名
alias ll='ls -la'$ alias ll='ls -la'
$ ll
total 32
drwxr-xr-x 8 user user 4096 May 12 10:00 .
drwxr-xr-x 3 root root 4096 May 1 12:00 ..
...查看所有别名
alias$ alias
alias ll='ls -la'
alias la='ls -A'
alias l='ls -CF'4. 常用快捷键
| 快捷键 | 功能 |
|---|---|
Ctrl + C | 终止当前命令 |
Ctrl + Z | 暂停当前命令 |
Ctrl + D | 退出当前 Shell |
Ctrl + L | 清屏 |
Ctrl + A | 光标移到行首 |
Ctrl + E | 光标移到行尾 |
Ctrl + U | 删除光标前所有内容 |
Ctrl + K | 删除光标后所有内容 |
Ctrl + R | 搜索历史命令 |
Tab | 自动补全 |
5. 实用组合命令
统计代码行数
find . -name "*.py" | xargs wc -l$ find . -name "*.py" | xargs wc -l
120 main.py
85 utils.py
256 models.py
42 config.py
503 total批量重命名
for f in *.txt; do mv "$f" "${f%.txt}.bak"; done$ for f in *.txt; do mv "$f" "${f%.txt}.bak"; done
$ ls
file1.bak file2.bak file3.bak readme.bak后台运行
nohup python app.py > output.log 2>&1 &$ nohup python app.py > output.log 2>&1 &
[1] 12345
$ jobs
[1]+ Running nohup python app.py > output.log 2>&1 &输出解读:nohup 让程序在后台持续运行。查看端口占用
lsof -i :80$ lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1010 root 6u IPv4 12345 0t0 TCP *:http (LISTEN)
nginx 1011 www-data 7u IPv4 12346 0t0 TCP *:http (LISTEN)附录:常用命令速查表
| 命令 | 功能 | 常用示例 |
|---|---|---|
ls | 列出目录 | ls -la |
cd | 切换目录 | cd /home |
pwd | 当前目录 | pwd |
mkdir | 创建目录 | mkdir -p a/b/c |
rm | 删除 | rm -rf folder |
cp | 复制 | cp -r src dst |
mv | 移动/重命名 | mv old new |
cat | 查看文件 | cat file.txt |
less | 分页查看 | less file.txt |
head | 查看开头 | head -n 20 file |
tail | 查看结尾 | tail -f file.log |
grep | 搜索文本 | grep -rn "text" . |
find | 查找文件 | find . -name "*.txt" |
chmod | 修改权限 | chmod 755 file |
chown | 修改所有者 | chown user:group file |
ps | 查看进程 | ps aux |
top | 进程监控 | top |
kill | 终止进程 | kill -9 PID |
df | 磁盘空间 | df -h |
du | 目录大小 | du -sh * |
tar | 打包压缩 | tar -czvf a.tar.gz dir/ |
ssh | 远程连接 | ssh user@host |
scp | 远程复制 | scp file user@host:/path |
wget | 下载文件 | wget URL |
curl | 请求网络 | curl -O URL |
free | 内存使用 | free -h |
uname | 系统信息 | uname -a |
uptime | 运行时间 | uptime |
📚 学习建议:
- 每天练习几个命令,逐步积累
- 使用
man 命令查看详细帮助文档(如man ls)- 使用
命令 --help查看快速帮助- 在虚拟机或 Docker 中练习,避免误操作影响生产环境
- 善用 Tab 自动补全,提高效率
本文档持续更新,欢迎收藏备用!