Linux命令
第一部分:Linux 命令行的基石
在开始学习具体命令之前,理解几个核心概念至关重要。
1. 什么是 Shell?
你输入的命令并不是由 Linux 内核直接处理的。你是在和一个叫做 Shell 的程序交互。Shell 是一个命令解释器,它接收你输入的命令,解释它们,然后请求操作系统(Linux 内核)来执行。
- 常见的 Shell:
bash(Bourne Again SHell):绝大多数 Linux 发行版的默认 Shell。zsh(Z Shell):功能更强大,配置更灵活,是很多开发者的最爱。fish(Friendly Interactive SHell):开箱即用,有很好的自动补全和语法高亮功能。
本介绍将以最常见的 bash 为例。
2. 命令的基本结构
一个典型的 Linux 命令遵循以下结构:
1 | command [options] [arguments] |
command(命令):你要执行的程序的名称,例如ls,cp,mkdir。options(选项/标志):用来修改命令的行为。通常以一个或两个破折号 (-或--) 开头。- 短选项:一个破折号后跟一个字母,例如
-l,-a。可以合并,如-la。 - 长选项:两个破折号后跟一个单词,例如
--list,--all。
- 短选项:一个破折号后跟一个字母,例如
arguments(参数):命令作用的对象,通常是文件名、目录路径、URL 等。
示例:ls -l /home/user
ls是命令。-l是选项(长格式列出)。/home/user是参数(要列出的目录)。
3. 关键概念
- 当前工作目录 (Current Working Directory):你当前所在的目录位置。可以使用
pwd(Print Working Directory) 命令查看。 - 路径 (Path):文件或目录在文件系统中的位置。
- 绝对路径:从根目录
/开始的完整路径,例如/home/user/documents/report.txt。 - 相对路径:从当前目录开始的路径。
.代表当前目录。..代表上一级目录。- 例如,如果你在
/home/user,那么documents/report.txt就是一个相对路径。
- 绝对路径:从根目录
第二部分:按功能分类的核心命令
下面我们将命令按照它们的常见用途进行分类介绍。
类别一:文件和目录管理
这是最基础也是最常用的一类命令。
ls(List):列出目录中的文件和子目录。ls:列出当前目录内容。ls -l:长格式显示,包含权限、所有者、大小、修改日期等详细信息。ls -a:显示所有文件,包括以.开头的隐藏文件。ls -h:与-l结合使用 (ls -lh),以人类可读的格式显示文件大小 (K, M, G)。ls -t:按修改时间排序。- 组合使用:
ls -lath是一个非常常用的组合。
cd(Change Directory):切换目录。cd /path/to/directory:切换到指定目录。cd ~或cd:切换到当前用户的家目录。cd ..:切换到上一级目录。cd -:切换到上一次所在的目录。
pwd(Print Working Directory):显示当前工作目录的绝对路径。mkdir(Make Directory):创建新目录。mkdir new_folder:在当前位置创建名为new_folder的目录。mkdir -p project/src/main:-p选项可以递归创建多层目录。
rmdir(Remove Directory):删除 空 目录。touch(Touch):创建一个空文件,或更新已有文件的时间戳。touch new_file.txt
cp(Copy):复制文件或目录。cp source_file destination_file:复制文件。cp source_file destination_folder/:将文件复制到指定目录。cp -r source_folder destination_folder:-r(recursive) 选项用于复制整个目录及其内容。
mv(Move):移动或重命名文件/目录。mv old_name.txt new_name.txt:重命名文件。mv file.txt /path/to/destination/:移动文件到另一个位置。
rm(Remove):删除文件或目录。这是一个非常危险的命令,删除后通常无法恢复!rm file.txt:删除文件。rm -r folder_name:-r(recursive) 递归删除整个目录及其所有内容。rm -f:-f(force) 强制删除,不进行任何提示。rm -rf /是 Linux 中最臭名昭著的命令,会删除整个系统,请永远不要尝试!
类别二:文本处理
在 Linux 中,一切皆文件。处理文本是核心技能。
cat(Concatenate):查看、合并文件内容。cat file.txt:在终端显示file.txt的全部内容。cat file1.txt file2.txt > new_file.txt:将两个文件合并成一个新文件。
less/more:分页查看文件内容。less功能更强,允许前后翻页。less large_log_file.log- 在
less中,使用箭头键或PageUp/PageDown翻页,按/进行搜索,按q退出。
head/tail:查看文件的开头或结尾部分。head -n 20 file.txt:查看文件的前 20 行(默认是 10 行)。tail -n 20 file.txt:查看文件的后 20 行。tail -f /var/log/syslog:-f(follow) 选项可以实时监控文件的追加内容,常用于查看日志。
grep(Global Regular Expression Print):在文本中搜索匹配的行。grep "error" log.txt:在log.txt中查找包含 “error” 的行。grep -i "error" log.txt:-i(ignore case) 忽略大小写。grep -r "keyword" /path/to/dir:-r(recursive) 递归在目录中所有文件中搜索。grep -v "debug":-v(invert match) 显示不匹配的行。
wc(Word Count):统计文件的行数、单词数、字节数。wc -l file.txt:只统计行数。wc -w file.txt:只统计单词数。wc -c file.txt:只统计字节数。
类别三:系统信息与管理
uname: 显示系统信息。uname -a:显示所有详细信息(内核名称、版本、主机名等)。
df(Disk Free):查看磁盘空间使用情况。df -h:-h(human-readable) 以更易读的格式显示。
du(Disk Usage):查看文件或目录占用的磁盘空间。du -sh /path/to/dir:-s(summary) 只显示总大小,-h以易读格式显示。
free: 查看内存和交换空间使用情况。free -h:以易读格式显示。
top/htop: 实时显示系统进程和资源占用情况。htop是一个更强大、更友好的版本,通常需要单独安装。date: 显示或设置系统时间。history: 显示当前用户执行过的历史命令。
类别四:进程管理
ps(Process Status):列出当前运行的进程。ps aux:显示所有用户的所有进程(BSD 风格)。ps -ef:显示所有进程的完整格式(System V 风格)。- 通常两者结合
grep使用,如ps aux | grep nginx来查找 nginx 进程。
kill: 向进程发送信号(通常是终止)。kill PID:终止指定 PID (Process ID) 的进程(发送 TERM 信号)。kill -9 PID:强制杀死进程(发送 KILL 信号),这是一种最后的手段。
killall: 按进程名称杀死进程。killall firefox
jobs,fg,bg: 作业控制。- 在一个命令后按
Ctrl+Z可以将其暂停并放到后台。 jobs:查看后台作业。bg:让一个暂停的作业在后台继续运行。fg %N:将第 N 个作业切换到前台运行。
- 在一个命令后按
类别五:权限和所有权
chmod(Change Mode):修改文件或目录的权限。- 权限分为读(r=4)、写(w=2)、执行(x=1)三种。
- 对象分为所有者(u)、所属组(g)、其他用户(o)。
- 数字模式:
chmod 755 script.sh- 7 = 4+2+1 (rwx) -> 所有者有读、写、执行权限。
- 5 = 4+0+1 (r-x) -> 所属组有读、执行权限。
- 5 = 4+0+1 (r-x) -> 其他用户有读、执行权限。
- 符号模式:
chmod u+x file.txt:为所有者(u)增加(+)执行(x)权限。chmod g-w file.txt:为所属组(g)移除(-)写(w)权限。chmod o=r file.txt:将其他用户(o)的权限设置为(=)只读(r)。
chmod -R 755 /path/to/dir:递归修改目录及内部所有内容的权限。
chown(Change Owner):修改文件或目录的所有者和所属组。chown user:group file.txtchown -R user:group /path/to/dir:递归修改。
sudo(Superuser Do):以超级用户(root)的权限执行命令。sudo apt update:需要 root 权限才能更新软件包列表。
类别六:网络
ping: 测试与另一台主机的网络连通性。ping google.com
ip/ifconfig: 查看和配置网络接口。ip是现代 Linux 系统中推荐的命令。ip addr show或ifconfig:显示所有网络接口的 IP 地址等信息。
ssh(Secure Shell):安全地远程登录到另一台主机。ssh user@hostname
scp(Secure Copy):通过 SSH 安全地在本地和远程主机之间复制文件。scp local_file.txt user@remote:/path/:本地复制到远程。scp user@remote:/path/remote_file.txt .:远程复制到本地当前目录。
rsync: 一个功能更强大的文件同步工具,支持增量同步。wget/curl: 从网络上下载文件。curl功能更强大,常用于 API 测试。wget https://example.com/file.zipcurl -O https://example.com/file.zip
netstat/ss: 显示网络连接、路由表等信息。ss是netstat的现代替代品,速度更快。ss -tunlp:显示所有监听中的 TCP/UDP 端口及对应的程序。
类别七:搜索
find: 在文件系统中按条件搜索文件。find /path/to/search -name "*.log":按文件名搜索。find . -type f -mtime -7:在当前目录(.)下查找类型为文件(-type f)且在过去7天内被修改过(-mtime -7)的文件。find . -size +100M:查找大于 100MB 的文件。
locate: 使用一个预先建立的数据库来快速查找文件,速度比find快,但可能不是最新的。sudo updatedb:更新数据库。locate my_file.conf
类别八:归档和压缩
tar(Tape Archive):将多个文件或目录打包成一个.tar文件,也可以结合压缩工具使用。tar -cvf archive.tar /path/to/dir:c(reate) 创建,v(erbose) 显示过程,f(ile) 指定文件名。tar -xvf archive.tar:x(extract) 解包。tar -tvf archive.tar:t(est) 查看包内文件列表。- 结合 gzip 压缩 (
.tar.gz或.tgz):- 压缩:
tar -czvf archive.tar.gz /path/to/dir - 解压:
tar -xzvf archive.tar.gz
- 压缩:
- 结合 bzip2 压缩 (
.tar.bz2): 使用-j选项。 - 结合 xz 压缩 (
.tar.xz): 使用-J选项。
zip/unzip: 用于处理 Windows 中常见的.zip格式。zip -r archive.zip /path/to/dirunzip archive.zip
类别九:软件包管理
不同的 Linux 发行版使用不同的包管理器。
Debian/Ubuntu (使用 APT)
sudo apt update:刷新可用软件包列表。sudo apt upgrade:升级所有已安装的软件包。sudo apt install package_name:安装一个新包。sudo apt remove package_name:卸载一个包。apt search keyword:搜索软件包。
Red Hat/CentOS/Fedora (使用 DNF/YUM)
sudo dnf check-updatesudo dnf upgradesudo dnf install package_namesudo dnf remove package_namednf search keyword
第三部分:命令的组合与重定向
单个命令功能有限,但将它们组合起来,威力无穷。
1. I/O 重定向
>(输出重定向):将命令的 标准输出 (stdout) 重定向到一个文件(会覆盖文件原有内容)。ls -l > file_list.txt:将ls -l的结果写入file_list.txt。
>>(追加重定向):将标准输出追加到文件末尾。echo "New log entry" >> app.log
<(输入重定向):将文件的内容作为命令的 标准输入 (stdin)。wc -l < file_list.txt:统计file_list.txt的行数。
2>(错误重定向):将命令的 标准错误 (stderr) 重定向到一个文件。command_that_fails 2> error.log
&>或2>&1: 将标准输出和标准错误都重定向到同一个地方。./run_script.sh > script.log 2>&1
2. 管道 (Pipe |)
管道是 Linux 中最强大的功能之一。它将前一个命令的 标准输出 直接作为后一个命令的 标准输入,形成一个处理流水线。
经典示例:
统计当前目录下的文件数量:
1
ls -l | grep "^-" | wc -l
ls -l:列出详细信息。grep "^-":筛选出以-开头的行(这些是文件,目录以d开头)。wc -l:统计最终结果的行数。
查找占用 CPU 最多的 5 个进程:
1
ps aux --sort=-%cpu | head -n 6
ps aux --sort=-%cpu:列出所有进程,并按 CPU 使用率降序排序。head -n 6:取前 6 行(包括标题行)。
第四部分:如何获取帮助?
你不可能记住所有命令和选项。学会如何查找帮助至关重要。
man(Manual):查看命令的官方手册页。这是最权威的帮助来源。man ls:查看ls的手册。在man页面中,按q退出。
command --help: 大多数命令都支持--help选项,可以快速显示其用法和选项列表。ls --help
info: 提供比man更详细的 GNU 文档。info coreutils
apropos或man -k: 根据关键词搜索相关的man页面。apropos "copy files"










