目录
文件和目录操作:
ll和ls
cd
pwd
cp
mv
rm
mkdir
rmdir
touch
clear
history
which/whereis
which 命令
whereis 命令
cat
less
head
tail
vi 或 vim
sz/rz
echo
tar
基本语法
常用选项
主要操作(必须选一个)
辅助选项
系统信息和管理:
su
uname
hostname
df
free
top
ps
grep
kill
chmod
网络操作:
ping
ifconfig 或 ip
netstat
curl
Linux 是一个开源的操作系统内核,广泛应用于服务器、桌面、嵌入式系统和超级计算机等领域。它由 Linus Torvalds 于 1991 年首次发布,并由全球开发者社区共同维护和开发。以下是一些关于 Linux 的常用命令。
文件和目录操作:
ll和ls
- ls # 简单列出当前目录内容
- ll # 详细列出(包括权限、所有者、大小等)
复制代码
cd
| 命令 | 作用 |
|---|
| cd <目录路径> | 切换到指定目录 |
| cd 或 cd ~ | 返回当前用户的家目录(如 /home/username) |
| cd .. | 切换到上级目录(父目录) |
| cd - | 返回上一次所在的目录(类似“后退”) |
| cd . | 进入当前目录(无实际作用,通常用于脚本占位) |
pwd
(print working directory)查看当前目录所在位置。
cp
复制文件或目录。
命令:cp [-r] 参数1 参数2
命令解释:
- -r选项, 可选,用于复制文件夹使用,表示递归
- 参数1,被复制的文件
- 参数2,复制去的地方
- 举例:cp -r a b
- 将源目录 a 及其所有内容(包括子目录和文件)复制到目标目录 b。
复制代码
mv
移动或重命名文件或目录。
- mv 参数1 参数2
- - 被移动的文件或文件夹
- - 移动去的地方路径
- 举例:mv a b
- 将源文件或目录 a 移动到目标文件或目录 b。
- 举例:mv /tmp/a.txt .
- 将 /tmp/a.txt 文件移动到当前所在的目录。
复制代码
rm
rm (remove) 是 Linux 系统中用于删除文件和目录的命令,功能强大但需要谨慎使用。
| 选项 | 描述 |
|---|
| -f | 强制删除,不提示确认 |
| -i | 交互式删除,删除前提示确认 |
| -r 或 -R | 递归删除目录及其内容 |
| -v | 显示删除过程的详细信息 |
| -I | 删除超过3个文件或递归删除时提示一次确认 |
- 删除单个文件
- rm file.txt
- 删除多个文件
- rm file1.txt file2.txt file3.txt
- 交互式删除(推荐新手使用)
- rm -i *.txt
- 强制删除(无确认提示)
- rm -f logfile.log
- 强制递归删除dist目录
- rm -rf dist
复制代码
mkdir
mkdir (make directory) 是 Linux 中用于创建目录的命令。
基本语法
- 创建单个目录
- mkdir new_folder
- 创建多个目录
- mkdir dir1 dir2 dir3
- 递归创建目录结构(推荐)
- mkdir -p project/{src,doc,test}/main
复制代码
rmdir
rmdir (remove directory) 是 Linux 中用于删除空目录的命令。
基本语法
- 删除单个空目录
- rmdir empty_dir
- 删除多个空目录
- rmdir dir1 dir2 dir3
- 递归删除空目录结构
- rmdir -p a/b/c
- 这会依次尝试删除:
- a/b/c
- a/b(如果变为空)
- a(如果变为空)
复制代码
与 rm -r 的区别
| 特性 | rmdir | rm -r |
|---|
| 删除非空目录 | ❌ 不能 | ✅ 可以 |
| 安全性 | 高(只删空目录) | 低(强制删除所有内容) |
| 递归删除 | 只删除空父目录 | 强制删除整个目录树 |
| 文件删除 | 不能删除文件 | 可以删除文件 |
touch
touch 是 Linux 中用于创建空文件和修改文件时间戳的命令。
基本语法
主要功能
-
创建新空文件(如果文件不存在)
-
更新文件时间戳(如果文件已存在)
| 选项 | 描述 |
|---|
| -a | 仅更改访问时间(access time) |
| -m | 仅更改修改时间(modify time) |
| -c | 不创建新文件(仅修改现有文件) |
| -d | 使用指定时间而非当前时间 |
| -t | 使用[[CC]YY]MMDDhhmm[.ss]格式的时间 |
| -r | 使用参考文件的时间 |
- 创建单个文件
- touch newfile.txt
- 创建多个文件
- touch file1.txt file2.txt file3.log
- 避免创建新文件(仅更新时间戳)
- touch -c existing_file
- 更改文件为特定时间
- touch -t 202312251830.00 file.txt # 设置为2023-12-25 18:30:00
- 使用参考文件的时间
- touch -r source.txt target.txt # 使target.txt时间与source.txt相同
复制代码
clear
clear 是 Linux/Unix 系统中用于清除终端屏幕显示内容的命令。
history
history 是 Linux 中用于查看和管理命令行历史记录的重要工具。
- 查看完整历史记录
- history
- 查看最近N条命令
- history 10 # 查看最近10条命令
- 执行历史命令
- !55 # 执行历史记录中第55条命令
- !! # 执行上一条命令
- !vim # 执行最近以"vim"开头的命令
- 搜索历史命令
- Ctrl+R # 反向搜索历史命令
- history | grep "apt" # 查找包含"apt"的命令
复制代码
which/whereis
这两个命令都用于查找命令的位置,但工作方式和查找范围有所不同。
which 命令
功能
查找可执行文件在 PATH 环境变量中的位置
- which命令 eg:which redis-server
- which -a ls
- -a:显示所有匹配的路径,而不仅仅是第一个匹配的路径。
- whereis命令 eg:whereis redis-server
复制代码
基本语法
which [选项] 命令名
特点
-
只搜索 PATH 环境变量指定的目录
-
只返回第一个找到的可执行文件路径
-
适用于查找 shell 执行的命令位置
常用选项
- which python
- # 输出示例: /usr/bin/python
- which -a python
- # 显示所有找到的python可执行文件路径
复制代码
whereis 命令
功能
查找命令的二进制文件、源代码和手册页位置
基本语法
whereis [选项] 命令名
特点
-
搜索标准 Linux 目录(包括/bin, /usr/bin, /usr/local/bin等)
-
可以同时显示二进制文件、源代码和手册页位置
-
查找范围比 which 更广
- whereis python
- # 示例输出:
- # python: /usr/bin/python /usr/lib/python2.7 /usr/include/python2.7 /usr/share/man/man1/python.1.gz
复制代码
主要区别
| 特性 | which | whereis |
|---|
| 搜索范围 | 只在PATH中查找 | 预定义的标准系统目录 |
| 查找内容 | 仅可执行文件 | 二进制文件、手册页、源代码 |
| 显示结果 | 第一个匹配项 | 所有匹配项 |
| 查找速度 | 较快 | 较慢(搜索范围更大) |
| 使用场景 | 确定shell实际执行的命令位置 | 查找命令的所有相关文件 |
cat
cat (concatenate) 是 Linux 中最常用的文件查看和操作命令之一。它最常用于快速查看较小文件的内容,或者将多个文件合并后输出。
基本语法
| 选项 | 描述 |
|---|
| -n | 显示行号(包括空行) |
| -b | 显示行号(忽略空行) |
| -s | 压缩连续空行为一行 |
| -A | 显示所有内容(包括特殊字符) |
| -E | 在每行末尾显示$符号 |
- 查看单个文件
- cat file.txt
- 查看多个文件
- cat file1.txt file2.txt
- 显示行号
- cat -n file.txt
- 创建新文件(Ctrl+D保存)
- cat > newfile.txt
- 追加内容到文件
- cat >> existing.txt
- 合并多个文件
- cat part1.txt part2.txt > combined.txt
- 显示文件内容并高亮特殊字符
- cat -A file.txt
复制代码
less
用于分页显示文件的内容。它允许你逐页浏览文件内容,而不是一次性显示所有内容。专门用于从容地查看大文件。
在 less 命令的界面中,你可以使用以下键盘快捷键来浏览文件内容:
- Space 或 f:向下滚动一页。
- b:向上滚动一页。
- Enter:向下滚动一行。
- q:退出 less 命令。
head
用于显示文件的前几行。默认情况下,它显示文件的前 10 行。
- head 文件名
- 你也可以指定显示的行数,例如显示前 5 行:
- head -n 5 example.txt
复制代码
tail
用于显示文件的后几行。默认情况下,它显示文件的后 10 行。
- tail 文件名
- 你也可以指定显示的行数,例如显示后 5 行:
- tail -n 5 example.txt
- 实时监控文件
- tail 命令还可以用于实时监控文件的变化。使用 -f 选项可以实时显示文件的新内容。
- tail -f 文件名
- 假设你有一个名为 logfile.txt 的日志文件,你可以使用以下命令来实时监控文件的变化:
- tail -f logfile.txt
- 这个命令会显示文件 filename 的最后 100 行,并实时监控文件的变化。
- tail -f -n 100 filename
复制代码
jps
jps 是 Java Virtual Machine Process Status Tool 的缩写,它是 JDK 自带的一个命令行工具,主要用于:
查看Java进程:列出当前系统中所有正在运行的 Java 虚拟机进程
显示进程信息:显示每个 Java 进程的进程 ID (PID) 和主类名
监控用途:帮助开发人员和系统管理员快速识别和管理 Java 应用程序
vi 或 vim
强大的文本编辑器,查看文件中的内容。
示例
假设你有一个名为 example.txt 的文件,你想使用 vim 编辑它。你可以使用以下命令:
- vim example.txt
- 编辑文件
- 进入插入模式:按 i 键。
- 输入文本:例如,输入 Hello, world!。
- 退出插入模式:按 Esc 键。
- 保存并退出:输入 :wq 并按 Enter 键。
- 搜索文本
- 进入命令模式:按 Esc 键。
- 输入 / 并键入要搜索的文本,例如 /world。
- 按 Enter 键开始搜索。
- 按 n 键跳转到下一个搜索结果。
- 按 N 键跳转到上一个搜索结果。
- 删除行
- 进入命令模式:按 Esc 键。
- 将光标移动到要删除的行。
- 输入 dd 删除当前行。
- 复制和粘贴
- 进入命令模式:按 Esc 键。
- 将光标移动到要复制的行。
- 输入 yy 复制当前行。
- 将光标移动到要粘贴的位置。
- 输入 p 粘贴复制的内容。
复制代码
sz/rz
sz 命令用于从 Unix/Linux 系统向 Windows 系统发送文件。
rz 命令用于从 Windows 系统向 Unix/Linux 系统接收文件。
上传和下载都是针对Unix/Linux来说的,这样就好记忆。(sz发送就是下载,rz接收就是上传。)
- 假设你有一个名为 example.txt 的文件,你想将其从 Unix/Linux 系统发送到 Windows 系统,可以使用以下命令:
- sz example.txt
- 假设你想从 Windows 系统接收一个文件,可以在 Unix/Linux 系统上运行以下命令:
- rz或rz -y
- -y表示如果名称重复直接进行覆盖。
复制代码
echo
echo 是一个用于在终端输出文本的命令。它可以显示字符串、变量的值、特殊字符等。
- 语法:echo 文本
- 输出简单文本
- 假设你想在终端输出文本 "Hello, world!",可以使用以下命令:
- echo Hello, world!
- 输出为:Hello, world!
复制代码
tar
tar (Tape Archive) 是 Linux 中最常用的归档工具,用于将多个文件打包成一个文件(归档),并可选择进行压缩。
基本语法
- tar [选项] [归档文件] [文件或目录...]
复制代码
常用选项
主要操作(必须选一个)
| 选项 | 描述 |
|---|
| -c | 创建新归档 |
| -x | 提取归档 |
| -t | 列出归档内容 |
| -r | 追加文件到归档 |
| -u | 只添加比归档中更新的文件 |
辅助选项
| 选项 | 描述 |
|---|
| -f | 指定归档文件名(必须) |
| -v | 显示详细过程 |
| -z | 通过gzip压缩/解压 |
| -j | 通过bzip2压缩/解压 |
| -J | 通过xz压缩/解压 |
| -C | 解压到指定目录 |
| -p | 保留文件权限 |
| --exclude | 排除特定文件 |
- 创建归档
- tar -cvf archive.tar file1 file2 dir1 # 不压缩
- tar -czvf archive.tar.gz file1 dir1 # gzip压缩
- tar -cjvf archive.tar.bz2 file1 dir1 # bzip2压缩
- tar -cJvf archive.tar.xz file1 dir1 # 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 -xvf archive.tar -C /target # 解压到指定目录
- 查看归档内容
- tar -tvf archive.tar # 查看普通tar包内容
- tar -tzvf archive.tar.gz # 查看gzip压缩包内容
- 添加/删除文件
- tar -rvf archive.tar newfile # 添加文件到归档
- tar --delete -f archive.tar file1 # 从归档删除文件
复制代码
系统信息和管理:
su
switch user,切换用户。eg:su root
uname
显示系统信息。
hostname
获取主机名,修改主机名
- hostname
- 获取主机名
- hostnamectl set-hostname 主机名
- 修改主机名(需root)
复制代码
df
显示文件系统的磁盘空间使用情况。
- df -h
- -h:以更加人性化的单位显示磁盘使用情况
复制代码
free
显示内存使用情况。
- free -m
- 用来显示内存使用情况,以MB为单位。
复制代码
它的输出格式通常是这样的:
total used free shared buffers cached
Mem: 7983 6509 1474 199 104 3707
-/+ buffers/cache: 2697 5286
Swap: 16383 972 15411其中:
● total表示系统当前总内存大小。
● used表示当前已经使用的内存大小。
● free表示当前未使用的内存大小。
● shared表示被共享使用的内存大小,通常是进程间通信时使用的内存。
● buffers表示被缓冲的内存大小,通常是文件系统操作时使用的内存。
● cached表示被缓存的内存大小,通常是为了提高系统性能而缓存的内存。
另外,在 -/+ buffers/cache 行下面的 used 表示实际使用的内存大小,free 表示当前可用的内存大小。free命令支持几个选项,例如-b表示显示字节为单位,-k表示显示KB为单位,-g表示显示GB为单位等。
top
是一个实时监控系统性能的命令行工具,用于显示系统中的进程、CPU 使用率、内存使用率、负载平均值等信息。
- python@ubuntu:~$ top
- top - 08:31:54 up 2 min, 1 user, load average: 0.25, 0.37, 0.17
- Tasks: 271 total, 1 running, 270 sleeping, 0 stopped, 0 zombie
- %Cpu(s): 0.2 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
- KiB Mem : 4028880 total, 3210104 free, 331668 used, 487108 buff/cache
- KiB Swap: 4192252 total, 4192252 free, 0 used. 3414856 avail Mem
- PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
- 4827 redis 20 0 47204 6632 2300 S 0.3 0.2 0:00.21 redis-ser+
- 6371 python 20 0 49000 3896 3176 R 0.3 0.1 0:00.12 top
- 1 root 20 0 119940 6112 4004 S 0.0 0.2 0:02.77 systemd
- 2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
- 3 root 20 0 0 0 0 S 0.0 0.0 0:00.11 ksoftirqd+
复制代码
1. 系统性能概览:
a. 第一行显示系统的基本信息,包括当前时间、系统运行时间、用户数量、负载平均值等。
b. 第二行显示进程的状态信息,包括总进程数、运行中的进程数、睡眠中的进程数、停止的进程数、僵尸进程数等。
c. 第三行显示 CPU 使用率信息,包括用户空间占用的 CPU 时间、系统空间占用的 CPU 时间、空闲 CPU 时间等。
d. 第四行和第五行显示内存和交换区的使用情况,包括总内存、已用内存、空闲内存、缓冲区、缓存等。
2. 进程列表:
a. 进程列表显示系统中的各个进程,包括进程 ID(PID)、用户名(USER)、优先级(PR)、虚拟内存(VIRT)、物理内存(RES)、共享内存(SHR)、状态(S)、CPU 使用率(%CPU)、内存使用率(%MEM)、运行时间(TIME+)、命令名称(COMMAND)等。
ps
查询当前进程。
- 查询java的进程:ps -ef | grep java
- grep:是一个用于搜索文本的命令。
- java:是搜索的关键字。
- |:管道符,将左边的输出结果当作右边的输入。
复制代码
grep
grep (Global Regular Expression Print) 是 Linux 中最强大的文本搜索工具,用于在文件中查找特定模式。
基本语法
grep [选项] "搜索模式" [文件...]
核心功能
-
文本搜索:在文件中查找指定内容
-
正则表达式支持:支持复杂模式匹配
-
多文件处理:可同时搜索多个文件
-
上下文显示:显示匹配行前后内容
- 基本搜索
- grep "error" logfile.txt
- 查看包含该 ID 的前后 20 行
- grep -C 20 "ea8862acb8264ccb975fd7e3443e3892" debug.log
- 查看最新出现"当前登录用户id"的地方
- grep "当前登录用户id" 日志文件名 | tail -1
- 最后一次出现 + 前后几行内容
- grep -20 "当前登录用户id" 日志文件名 | tail -40
- 多文件搜索
- grep "TODO" *.py
- 递归搜索目录
- grep -r "function" /path/to/project/
- 显示上下文
- grep -A2 -B2 "critical error" system.log
- 统计匹配次数
- grep -c "warning" *.log
- 使用正则表达式
- grep -E "^[A-Z]{3}" file.txt # 匹配以三个大写字母开头的行
复制代码
kill
终止进程。
- kill -15(优雅)/-9(强制) PID(进程的PID)
- kill -9 发送的是 SIGKILL 信号(信号编号为 9)。这个信号会立即终止进程,不允许进程进行任何清理操作。它是强制终止进程的方式,通常用于那些无法通过其他方式终止的进程
- kill -15 发送的是 SIGTERM 信号(信号编号为 15)。这个信号是一个终止信号,但它允许进程进行清理操作(如关闭文件、释放资源等)。它是一种优雅的终止方式,通常用于正常终止进程。
复制代码
chmod
是一个用于修改文件或目录权限的命令。chmod 是 "change mode" 的缩写,用于更改文件或目录的访问权限。
- chmod 777 文件
- chmod 777 是一个用于修改文件或目录权限的命令。chmod 是 "change mode" 的缩写,用于更改文件或目录的访问权限。777 是权限的数字表示形式。
- 权限的数字表示形式
- 在 Unix 和 Linux 系统中,文件和目录的权限分为三类:
- 1.用户(User):文件的所有者。
- 2.组(Group):文件所有者所属的组。
- 3.其他(Others):其他所有用户。
- 每类权限可以有以下三种权限:r w x
- ●读(Read):权限值为 4。
- ●写(Write):权限值为 2。
- ●执行(Execute):权限值为 1。
- 权限值是这三种权限的总和。例如:
- ●读和执行权限:4 + 1 = 5。
- ●读、写和执行权限:4 + 2 + 1 = 7。
- 777 的含义
- 777 表示所有用户(用户、组、其他)都有读、写和执行权限:
- ●用户:读、写、执行(7)。
- ●组:读、写、执行(7)。
- ●其他:读、写、执行(7)。
复制代码
网络操作:
ping
检查指定的网络是否可以联通。
ifconfig 或 ip
显示和配置网络接口。
netstat
显示网络连接和路由表。
- 常用选项
- -a:显示所有连接(包括监听的和未监听的)。
- netstat -a
- -t:显示 TCP 连接。
- netstat -t
- -u:显示 UDP 连接。
- netstat -u
- -n:以数字形式显示地址和端口号,而不是解析为主机名和服务名。
- netstat -n
- -p:显示进程 ID 和程序名。
- netstat -p
- -l:显示监听的连接。
- netstat -l
- -r:显示路由表。
- netstat -r
- -i:显示网络接口统计信息。
- netstat -i
- -s:显示网络协议统计信息。
- netstat -s
- 组合使用
- netstat命令查看端口是否被占用
- netstat -anp | grep 端口号 eg:netstat -anp | grep 8080 (没有打印就说明没有被占用)
- netstat -tpln 用于显示系统中的所有 TCP 连接及其详细信息。
- netstat -upln 用于显示系统中的所有 UDP 连接及其详细信息。
复制代码
curl
curl 是一个强大的命令行工具,用于从命令行传输数据。它支持多种协议,包括 HTTP、HTTPS、FTP、SFTP、SCP、TFTP 等。curl 常用于下载文件、上传文件、发送 HTTP 请求等。
- curl [选项] [URL]
- 常用选项
- -O:将文件保存到本地,使用远程文件的原始名称。
- curl -O http://example.com/file.txt
- -o:将文件保存到本地,使用指定的文件名。
- curl -o localfile.txt http://example.com/file.txt
- -L:跟随重定向。
- curl -L http://example.com/redirect
- -I:仅显示响应头信息。
- curl -I http://example.com
- -X:指定请求方法(GET、POST、PUT、DELETE 等)。
- curl -X POST http://example.com/api
- -d:发送 POST 数据。
- curl -X POST -d "param1=value1¶m2=value2" http://example.com/api
- -H:添加自定义请求头。
- curl -H "Content-Type: application/json" http://example.com/api
- -u:指定用户名和密码进行基本认证。
- curl -u username:password http://example.com/protected
- -k:忽略 SSL 证书验证。
- curl -k https://example.com
- -v:显示详细的请求和响应信息。
- curl -v http://example.com
- -s:静默模式,不显示进度条和错误信息。
- curl -s http://example.com
- -F:以表单数据的方式发送数据。
- curl -F "file=@/path/to/file" http://example.com/upload
- 示例
- 下载文件
- 假设你想从 http://example.com/file.txt 下载文件并保存为 localfile.txt,可以使用以下命令:
- curl -o localfile.txt http://example.com/file.txt
- 发送 POST 请求
- 假设你想向 http://example.com/api 发送一个 POST 请求,并包含一些表单数据,可以使用以下命令:
- curl -X POST -d "param1=value1¶m2=value2" http://example.com/api
- 发送 JSON 数据
- 假设你想向 http://example.com/api 发送一个 POST 请求,并包含 JSON 数据,可以使用以下命令:
- curl -X POST -H "Content-Type: application/json" -d '{"key1":"value1","key2":"value2"}' http://example.com/api
- 上传文件
- 假设你想将本地文件 /path/to/file 上传到 http://example.com/upload,可以使用以下命令:
- curl -F "file=@/path/to/file" http://example.com/upload
复制代码