1. 目录结构

/:所有文件和目录的根目录
/usr/bin:存放系统的可执行文件,可以在任何目录下执行
/usr/local/bin:存放用户自己安装的可执行文件,可以在任何目录下执行
/etc: 存放系统的配置文件,如:/etc/profile 是环境变量的配置文件。
/home: 每个用户的家目录,保存用户的私人数据,目录名默认和用户名相同。
/opt: 存放用户额外安装的软件,类似 Windows 中的 Program Files 目录。


2. 常用命令

文件 & 目录

  • 查看和切换目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
查看:
pwd # 显示当前目录路径
ls # 列出当前目录下文件和目录
ls -l 或 ll # 列出当前目录下文件和目录(详细信息)
切换目录:
cd /opt # 切换到 /opt 目录
cd .. # 返回上一级目录
cd bin # 切换到当前目录的 bin 目录下
创建目录:
mkdir -p data/mysql # 在当前目录下创建目录 data,并且在 data 下创建 mysql(递归创建多级目录)
mkdir /opt/data # 在 opt 目录下创建目录 data
复制文件(把文件 gateway.jar 复制为 gateway-bank-2024-06-11.jar 作为备份):
cp gateway.jar gateway-bank-2024-06-11.jar
查看文件内容:
  • 文件复制、移动与删除
1
2
3
4
cp source destination   # 复制文件
mv oldname newname # 移动或重命名文件
rm -r directory # 递归删除目录及其内容
rm -f filename # 强制删除文件
  • 查看与查找文件
1
2
3
4
5
cat a.txt            	# 查看 a.txt 文件内容,所有内容一次性显示出来
tail -f log.txt # 实时查看文件 log.txt 的末尾内容
grep "keyword" log.txt # 查看 log.txt 包含 keyword 内容
find / -name "file" # 从根目录查找名称为 file 的文件
find /opt *.java | grep user # 在特定目录 /opt 下搜索所有名称包含 user 的 .java 文件

查看系统信息

1
2
3
4
5
6
7
8
9
10
11
12
13
ifconfig                # IP 地址
top # 运行的进程和系统性能信息
free -h # 内存使用情况(human-readable)
free -m # 内存使用情况(megabytes)
df -h # 磁盘使用情况
du -sh directory # 查看目录大小
防火墙:
systemctl status firewalld # 查看防火墙状态
systemctl start firewalld # 启动防火墙
systemctl stop firewalld # 停止防火墙
firewall-cmd --permanent --zone=public --add-port=3306/tcp # 添加防火墙端口规则
firewall-cmd --reload # 重新加载防火墙规则
firewall-cmd --zone=public --list-all # 查看公共区域的防火墙规则

注意:部分服务器可能使用 iptables 而不是 firewalld,二者都用于管理网络防火墙规则。

常用系统服务管理

所有的系统服务都可以像上面这样用 systemctl 查看状态(status)、启动(start)、停止(stop)、重启(restart),后面加 [服务名]。

1
2
3
4
systemctl status service    # 查看服务状态
systemctl start service # 启动服务
systemctl stop service # 停止服务
systemctl restart service # 重启服务

进程管理

1
2
3
4
5
6
7
ps aux                     # 查看所有进程
ps -ef|grep mysql # 查找 MySQL 服务相关的进程
lsof -i :3306 # 查看端口 3306 的进程
jps # 查看当前运行的 Java 进程
top # 实时查看系统资源使用情况
htop # 类似 top,界面更友好(需要安装)
kill -9 PID # 终止指定进程

用户 & 权限

1
2
3
4
5
6
7
8
useradd username            # 添加新用户
(注:在 /home 目录下创建用户的根目录,目录名称默认与用户名相同
在linux中任何一个用户都至少属于一个组,新建用户时如果不指定组,则会新建一个组
添加用户的同时指定用户的根目录:useradd -d /home/myd haifan)
passwd username # 为用户设置密码
userdel username # 删除用户
id username # 查看用户信息
su username # 切换用户

注意:从权限高的用户切换到权限低的用户,不需要密码验证;从权限低的用户切换到权限高的用户,必须密码验证。

1
2
3
4
5
修改文件或目录的所有者:
chown travis a.txt # 修改 a.txt 文件的所有者为 travis
chown -R travis data # 修改 data 目录下的所有文件包括 data 目录的所有者为 travis
文件或目录的权限控制:
chmod 777 a.txt # 将文件a.txt的权限设置为777

注意:在Linux中,任何一个文件或目录都有三部分权限:【所有者权限】、【同组用户权限】、【其他组用户权限】。
第一部分权限【所有者权限】:文件或目录的【所有者】对该文件所拥有的权限
第二部分权限【同组用户权限】:文件或目录的【同组用户】对该文件拥有的权限
第三部分权限【其他组用户权限】:文件或目录的【其他组用户】对该文件拥有的权限
每个权限可以用一个数字表示,r、w、x分别对应4、2、1,每个文件或目录都有三部分权限,每一部分权限都可以用一组数据之和来表示。

文本编辑器:vi 和 vim

1
2
3
4
5
6
7
8
9
10
11
12
vi filename             # 使用 vi 编辑文件
vim filename # 使用 vim 编辑文件
# 在 vi/vim 中的操作模式:
i/a # 一般模式 -> 编辑模式
Esc # 编辑模式 -> 一般模式
shift+: # 一般模式 -> 命令行模式
命令行模式下:
:wq # 保存并退出
:q # 退出(未修改)
:q! # 强制退出(不保存)
/关键词 # 搜索关键词
n 或 N # n:向下搜索,N:向上搜索

软件包管理

  • Debian 系列(Ubuntu)
    apt:
    1
    2
    3
    apt update                # 更新软件包列表
    apt install packagename # 安装软件包
    apt remove packagename # 卸载软件包
  • RedHat 系列(CentOS)
    yum:
    1
    2
    3
    4
    yum update                		# 更新软件包
    yum install firefox # 安装软件包
    yum remove firefox.x86_64 # 卸载软件包
    yum list installed|grep firefox # 当前系统中使用yum已经安装的安装包
    rpm:
    1
    2
    3
    rpm -ivh a.rpm		  	# i:安装 v:提示 h:进度条
    rpm -ivh --force a.rpm # 强制安装
    rpm -e a.rpm # 卸载软件包

压缩 & 解压

  • 单文件压缩与解压
1
2
gzip a.txt				# 压缩单个文件,生成一个 .gz 的压缩包,并且会把原来的文件删除
gunzip a.txt.gz # 解压 gz 压缩包,并且会把原来的 .gz 压缩包删除
  • 多文件/目录压缩与解压
1
2
3
4
zip a.zip a1.txt a2.txt a3.txt	# 把 a1.txt, a2.txt, a3.txt 压缩为 a.zip
unzip a.zip -d dir_name # 把 a.zip 解压到 dir_name 目录下
tar -zcvf a.tar.gz a1 a2 a3 # 打包并压缩目录
tar -zxvf a.tar.gz -c /dir_name # 解压并指定目录

网络相关

1
2
3
4
5
ping hostname               # 测试网络连通性
netstat -tuln # 查看当前监听的端口和服务
traceroute hostname # 跟踪数据包路径
nslookup domain # 查询域名的 DNS 信息
scp localfile remote:/path # 通过 SSH 复制文件到远程主机

Shell 脚本(基础)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
echo "wow demxntia" # 输出内容
name="demxntia" # 定义变量
echo "I love $name" # 使用变量

# 条件判断
if [ $name == "Linux" ]; then
echo "wow"
fi

# 循环
for i in {1..5}; do
echo "Number: $i"
done

创建脚本文件后,赋予执行权限并运行:

1
2
chmod +x script.sh
./script.sh

Docker

1
2
3
4
5
6
7
8
docker -v                    	# 查看 Docker 版本
docker images # 列出本地主机上所有的 Docker 镜像
docker ps # 列出当前正在运行的 Docker 容器
docker ps -a # 列出当前所有的 Docker 容器
docker start <容器id 或 容器名称> # 启动已经停止的 Docker 容器
docker stop <容器id 或 容器名称> # 停止正在运行的 Docker 容器
docker rm <容器ID或容器名称> # 删除已经停止的 Docker 容器
docker logs <容器id 或 容器名称> # 查看 Docker 容器日志

文件上传与下载

1
2
rz -y							# 从本地上传文件到 Linux 服务器(需要 lrzsz 工具)
sz 文件名 # 下载 Linux 服务器文件到本地

注:如果使用时显示没有该命令,可以使用命令进行安装:yum install lrzsz