当前位置: 首页 > article >正文

Linux常用命令学习


目录

  1. Linux基础概述
    1.1 什么是Linux?
    1.2 Linux的优点
  2. 基本命令与文件操作
    2.1 文件和目录管理
    2.2 查看文件内容
    2.3 文本编辑器
    2.4 查找文件和内容
  3. 用户和权限管理
    3.1 用户和组管理
    3.2 文件权限
  4. 软件包管理
    4.1 Debian/Ubuntu系统
    4.2 Red Hat/CentOS系统
  5. 网络管理
    5.1 查看网络配置
    5.2 网络工具
    5.3 SSH管理
  6. 进程管理
    6.1 查看进程
    6.2 管理进程
  7. Shell脚本与自动化
    7.1 编写Shell脚本
    7.2 使用Cron作业
  8. 日志管理
    8.1 查看和管理日志文件
    8.2 使用日志工具
  9. Docker与容器管理
    9.1 安装Docker
    9.2 基本Docker命令
    9.3 管理容器和镜像
  10. 版本控制与Git
    10.1 在Linux上使用Git
    10.2 Git常用命令
  11. 安全管理
    11.1 使用防火墙
    11.2 安全更新与升级
  12. 环境变量与配置管理
    12.1 设置环境变量
    12.2 配置文件管理
  13. 性能监控与优化
    13.1 使用性能监控工具
    13.2 优化系统性能
  14. 文件传输与备份
    14.1 使用rsync
  15. 其他有用的工具
    15.1 tmux与screen
    15.2 SSH密钥管理
  16. 远程管理与部署
    16.1 使用Ansible
    16.2 部署应用
  17. 常见问题与解决方法
    17.1 如何回滚到之前的状态?
    17.2 如何撤销未提交的更改?
    17.3 如何解决磁盘空间不足?
  18. 总结

1. Linux基础概述

1.1 什么是Linux?

Linux是一种开源的类Unix操作系统内核,广泛应用于服务器、嵌入式系统、桌面计算机等各种设备。Linux以其稳定性、高效性和安全性著称,是后端开发和运维的首选操作系统之一。

关键特性

  • 开源:源代码公开,任何人都可以查看、修改和分发。
  • 多用户、多任务:支持多个用户同时操作,并能同时运行多个任务。
  • 高度可定制:用户可以根据需求定制内核和系统组件。
  • 广泛支持:支持多种硬件架构和软件应用。

1.2 Linux的优点

  • 稳定性高:适合长时间运行的服务器环境,崩溃和重启频率低。
  • 安全性强:内置的权限管理和安全机制,减少潜在的安全威胁。
  • 性能优越:高效的资源管理和调度,适合高负载应用。
  • 社区支持:庞大的开源社区提供丰富的资源和支持。
  • 成本低:免费使用和分发,减少企业成本。

2. 基本命令与文件操作

掌握基本的Linux命令是进行后端开发和运维的基础。以下内容涵盖文件和目录管理、查看文件内容、文本编辑器以及查找文件和内容等常用操作。

2.1 文件和目录管理

ls:列出目录内容

基本用法

ls

常用选项

  • -l:以长格式显示,包含权限、所有者、大小、修改时间等信息。
  • -a:显示所有文件,包括隐藏文件(以.开头)。
  • -h:以人类可读的格式显示文件大小(如KB、MB)。

示例

ls -lah
cd:改变当前工作目录

基本用法

cd <目录路径>

示例

cd /var/www/html

返回上一级目录

cd ..

返回主目录

cd ~
cp:复制文件或目录

基本用法

cp <源文件> <目标文件>

复制目录

cp -r <源目录> <目标目录>

示例

cp app.py app_backup.py
cp -r src/ src_backup/
mv:移动或重命名文件或目录

基本用法

mv <源文件> <目标文件>

移动目录

mv <源目录> <目标目录>

示例

mv app.py /var/www/html/
mv old_name.py new_name.py
rm:删除文件或目录

基本用法

rm <文件>

删除目录

rm -r <目录>

强制删除(不提示):

rm -rf <目录>

示例

rm app_backup.py
rm -rf src_backup/
mkdirrmdir:创建和删除目录

创建目录

mkdir <目录名>

创建多级目录

mkdir -p /path/to/directory

删除空目录

rmdir <目录名>

示例

mkdir logs
mkdir -p /var/www/html/project
rmdir empty_directory

2.2 查看文件内容

cat:连接并显示文件内容

基本用法

cat <文件>

示例

cat README.md
lessmore:分页查看文件内容

使用less

less <文件>
  • 支持向前和向后浏览。
  • 使用q退出。

使用more

more <文件>
  • 仅支持向前浏览。
  • 使用q退出。

示例

less /var/log/syslog
more /var/log/syslog
headtail:查看文件的开头和结尾部分

查看文件开头的10行

head <文件>

查看文件开头的指定行数

head -n 20 <文件>

查看文件结尾的10行

tail <文件>

查看文件结尾的指定行数

tail -n 20 <文件>

实时查看文件新增内容(适用于日志文件):

tail -f <文件>

示例

head -n 5 /etc/passwd
tail -f /var/log/nginx/access.log

2.3 文本编辑器

vim:高级文本编辑器

基本用法

vim <文件>

基本操作

  • 进入编辑模式:按i键。
  • 保存并退出:按Esc键,然后输入:wq并回车。
  • 不保存退出:按Esc键,然后输入:q!并回车。

示例

vim app.py
nano:简单易用的文本编辑器

基本用法

nano <文件>

基本操作

  • 编辑文本:直接开始输入。
  • 保存文件:按Ctrl + O,然后回车。
  • 退出编辑器:按Ctrl + X

示例

nano README.md

2.4 查找文件和内容

find:查找文件和目录

基本用法

find <起始目录> -name <文件名>

按类型查找

find <起始目录> -type <类型>
  • f:文件
  • d:目录

按大小查找

find <起始目录> -size +100M

示例

find /var/www -name "*.log"
find . -type d -name "src"
find / -size +500M
grep:在文件中搜索文本

基本用法

grep "<搜索模式>" <文件>

常用选项

  • -i:忽略大小写。
  • -r:递归搜索目录。
  • -n:显示匹配行的行号。
  • -v:反向匹配,显示不匹配的行。
  • -A-B:显示匹配行前后指定行数的内容。

示例

grep "ERROR" /var/log/syslog
grep -i "warning" *.log
grep -r "TODO" ./src
grep -n "main" app.py
locate:快速查找文件

安装locate(如果未安装):

sudo apt-get install mlocate  # Debian/Ubuntu
sudo yum install mlocate      # Red Hat/CentOS

更新数据库

sudo updatedb

使用locate查找文件

locate <文件名>

示例

locate app.py

注意locate依赖预先构建的文件数据库,可能不会立即反映最新的文件变化。


3. 用户和权限管理

在团队协作中,合理管理用户和权限至关重要,确保系统的安全性和资源的合理使用。

3.1 用户和组管理

添加新用户

命令

sudo adduser <用户名>

示例

sudo adduser john
修改用户信息

修改用户组

sudo usermod -aG <组名> <用户名>

示例

sudo usermod -aG sudo john
添加新组

命令

sudo groupadd <组名>

示例

sudo groupadd developers
删除用户

命令

sudo deluser <用户名>

示例

sudo deluser john
删除组

命令

sudo groupdel <组名>

示例

sudo groupdel developers

3.2 文件权限

查看文件权限

命令

ls -l <文件>

示例

ls -l app.py

输出示例

-rw-r--r-- 1 john developers 2048 Apr 10 12:34 app.py

解释

  • -rw-r--r--:文件权限
  • 1:硬链接数
  • john:所有者
  • developers:所属组
  • 2048:文件大小(字节)
  • Apr 10 12:34:修改时间
  • app.py:文件名
修改文件权限

使用chmod命令

chmod <权限> <文件>

权限表示

  • 数字表示法(如755

    • 7:读、写、执行(4+2+1)
    • 5:读、执行(4+1)
    • 0:无权限
  • 符号表示法(如u+x

示例

chmod 755 script.sh
chmod u+x script.sh
修改文件所有者和所属组

使用chown命令

sudo chown <所有者>:<所属组> <文件>

示例

sudo chown john:developers app.py

仅修改所有者

sudo chown john app.py

仅修改所属组

sudo chown :developers app.py
修改目录及其内容的权限

使用-R选项递归修改

chmod -R <权限> <目录>
sudo chown -R <所有者>:<所属组> <目录>

示例

chmod -R 755 /var/www/html
sudo chown -R john:developers /var/www/html

注意:递归修改权限和所有者时需谨慎,避免错误地更改系统关键目录的权限。


4. 软件包管理

在Linux系统中,软件包管理器用于安装、更新和删除软件包。不同的Linux发行版使用不同的包管理器。

4.1 Debian/Ubuntu系统

使用aptapt-get

更新软件包列表

sudo apt update

升级已安装的软件包

sudo apt upgrade

安装新软件包

sudo apt install <软件包名>

卸载软件包

sudo apt remove <软件包名>

示例

sudo apt update
sudo apt upgrade
sudo apt install nginx
sudo apt remove apache2

清理未使用的包

sudo apt autoremove

4.2 Red Hat/CentOS系统

使用yumdnf

更新软件包列表

sudo yum check-update    # CentOS 7及以前
sudo dnf check-update    # CentOS 8及以后

升级已安装的软件包

sudo yum update          # CentOS 7及以前
sudo dnf upgrade         # CentOS 8及以后

安装新软件包

sudo yum install <软件包名>   # CentOS 7及以前
sudo dnf install <软件包名>   # CentOS 8及以后

卸载软件包

sudo yum remove <软件包名>    # CentOS 7及以前
sudo dnf remove <软件包名>    # CentOS 8及以后

示例

sudo yum check-update
sudo yum update
sudo yum install httpd
sudo yum remove nginx

清理未使用的包

sudo yum autoremove    # CentOS 7及以前
sudo dnf autoremove    # CentOS 8及以后

5. 网络管理

网络管理是后端开发中不可或缺的一部分,包括查看网络配置、使用网络工具以及SSH管理等。

5.1 查看网络配置

ifconfigip 命令

使用ifconfig(需要安装net-tools):

ifconfig

使用ip命令(推荐):

ip addr show

示例

ip addr show eth0
查看路由表

使用route命令(需要安装net-tools):

route -n

使用ip命令

ip route show

示例

ip route show

5.2 网络工具

ping:测试网络连接

基本用法

ping <主机名或IP>

示例

ping google.com
ping 8.8.8.8

停止ping:按Ctrl + C

netstatss:查看网络连接

使用netstat(需要安装net-tools):

netstat -tuln

使用ss命令(推荐):

ss -tuln

解释

  • -t:TCP连接
  • -u:UDP连接
  • -l:监听状态
  • -n:以数字形式显示端口

示例

ss -tuln
traceroute:追踪路由

安装traceroute

sudo apt install traceroute    # Debian/Ubuntu
sudo yum install traceroute    # Red Hat/CentOS

基本用法

traceroute <主机名或IP>

示例

traceroute github.com
curlwget:下载和测试HTTP请求

使用curl

curl <URL>

常用选项

  • -I:仅获取HTTP头部。
  • -X:指定HTTP方法(如GETPOST)。
  • -d:发送数据(用于POST请求)。

示例

curl -I https://www.google.com
curl -X POST -d "username=john&password=secret" https://example.com/login

使用wget

wget <URL>

常用选项

  • -O <文件名>:指定下载文件的名称。
  • -c:断点续传。

示例

wget -O example.html https://www.example.com
wget -c https://www.example.com/largefile.zip

5.3 SSH管理

ssh:远程登录

基本用法

ssh <用户名>@<主机名或IP>

示例

ssh john@192.168.1.100

使用特定端口

ssh -p 2222 john@192.168.1.100
scp:安全复制文件

基本用法

scp <源文件> <用户名>@<主机名或IP>:<目标路径>

示例

scp app.py john@192.168.1.100:/var/www/html/
scp -P 2222 app.py john@192.168.1.100:/var/www/html/

从远程复制到本地

scp john@192.168.1.100:/var/www/html/app.py ./app.py
sftp:安全文件传输

基本用法

sftp <用户名>@<主机名或IP>

示例

sftp john@192.168.1.100

常用命令

  • ls:列出远程目录内容。
  • cd:切换远程目录。
  • get <文件>:下载文件。
  • put <文件>:上传文件。
  • exit:退出SFTP会话。

示例

sftp john@192.168.1.100
sftp> ls
sftp> get app.py
sftp> put config.yml
sftp> exit

6. 进程管理

管理系统进程是后端开发和运维的重要任务,涉及查看、监控和控制运行中的进程。

6.1 查看进程

ps:显示当前进程

基本用法

ps

常用选项

  • -e:显示所有进程。
  • -f:全格式显示,包括PPID、UID等信息。
  • -u <用户>:显示指定用户的进程。

示例

ps -ef
ps -u john
tophtop:实时监控进程

使用top

top

使用htop(需要安装):

sudo apt install htop    # Debian/Ubuntu
sudo yum install htop    # Red Hat/CentOS
htop

特点

  • top:内置于大多数Linux发行版,显示实时的进程信息。
  • htop:更友好的界面,支持交互式操作,如杀死进程、排序等。

示例

htop

6.2 管理进程

kill:发送信号到进程

基本用法

kill <PID>

发送特定信号

kill -SIGTERM <PID>    # 终止进程(默认信号)
kill -SIGKILL <PID>    # 强制杀死进程

示例

kill 12345
kill -9 12345
pkillkillall:通过名称杀死进程

使用pkill

pkill <进程名>

示例

pkill nginx

使用killall

killall <进程名>

示例

killall httpd
nicerenice:调整进程优先级

启动进程时设置优先级

nice -n <优先级> <命令>

调整已运行进程的优先级

renice <优先级> -p <PID>

示例

nice -n 10 python script.py
renice -5 -p 12345

解释

  • nice的优先级范围通常是-20(最高优先级)到19(最低优先级)。
  • 正数表示降低优先级,负数表示提高优先级。

7. Shell脚本与自动化

Shell脚本是Linux系统中进行任务自动化的重要工具,通过编写脚本,可以简化重复性操作,提高效率。

7.1 编写Shell脚本

基本结构
#!/bin/bash

# 注释
echo "Hello, World!"

# 变量
NAME="John"
echo "Hello, $NAME!"

# 条件判断
if [ -f "app.py" ]; then
    echo "app.py存在"
else
    echo "app.py不存在"
fi

# 循环
for i in {1..5}
do
    echo "循环第 $i 次"
done

# 函数
function greet() {
    echo "Hello, $1!"
}

greet "Alice"
保存与执行
  1. 保存脚本:将脚本保存为script.sh

  2. 赋予执行权限

    chmod +x script.sh
    
  3. 执行脚本

    ./script.sh
    

7.2 使用Cron作业

cron是Linux中用于定期执行任务的工具,适用于自动化备份、定时运行脚本等场景。

编辑Cron任务

使用crontab命令编辑当前用户的Cron任务:

crontab -e
Cron任务格式
* * * * * /path/to/command
│ │ │ │ │
│ │ │ │ │
│ │ │ │ └───── 星期几 (0 - 7) (周日为0或7)
│ │ │ └──────── 月份 (1 - 12)
│ │ └──────────── 日 (1 - 31)
│ └──────────────── 小时 (0 - 23)
└──────────────────── 分钟 (0 - 59)
示例

每天凌晨2点运行备份脚本

0 2 * * * /home/john/backup.sh

每5分钟检查系统状态

*/5 * * * * /home/john/check_status.sh

解释

  • 0 2 * * *:表示每天凌晨2点0分执行。
  • */5 * * * *:表示每5分钟执行一次。

8. 日志管理

日志管理是后端开发和运维中的重要环节,帮助监控系统状态、排查问题和进行性能分析。

8.1 查看和管理日志文件

常见日志文件路径
  • 系统日志
    • /var/log/syslog/var/log/messages:系统消息和错误日志。
    • /var/log/auth.log/var/log/secure:认证和授权相关日志。
  • 应用日志
    • /var/log/nginx/:Nginx服务器日志。
    • /var/log/apache2/:Apache服务器日志。
    • /var/log/mysql/:MySQL数据库日志。
查看日志文件

使用tail命令实时查看日志

tail -f /var/log/nginx/access.log

使用less命令浏览日志

less /var/log/syslog
管理日志文件

清空日志文件

sudo truncate -s 0 /var/log/nginx/access.log

轮转日志文件(使用logrotate):

  • 配置logrotate
    编辑/etc/logrotate.conf或在/etc/logrotate.d/中创建配置文件。

    示例

    /var/log/nginx/*.log {
        daily
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
        create 0640 www-data adm
        sharedscripts
        postrotate
            [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
        endscript
    }
    
  • 手动执行logrotate

    sudo logrotate -f /etc/logrotate.conf
    

解释

  • logrotate自动轮转、压缩和删除旧的日志文件,避免日志占用过多磁盘空间。

8.2 使用日志工具

grep:过滤日志内容

基本用法

grep "ERROR" /var/log/syslog

结合tail实时过滤

tail -f /var/log/nginx/error.log | grep "404"
awksed:高级日志处理

使用awk提取特定字段

awk '{print $1, $2, $3}' /var/log/syslog

使用sed替换文本

sed 's/ERROR/警告/g' /var/log/syslog
使用日志分析工具
  • GoAccess:实时日志分析工具,适用于Web服务器日志。

    sudo apt install goaccess
    goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED
    
  • ELK Stack(Elasticsearch, Logstash, Kibana):强大的日志收集和分析平台。


9. Docker与容器管理

容器化技术在后端开发中越来越普及,Docker是其中最流行的容器平台之一,帮助开发者构建、部署和运行应用程序。

9.1 安装Docker

Debian/Ubuntu系统
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
Red Hat/CentOS系统
sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

9.2 基本Docker命令

查看Docker版本
docker --version
拉取镜像
docker pull <镜像名>

示例

docker pull nginx:latest
查看本地镜像
docker images
运行容器
docker run -d --name <容器名> -p <主机端口>:<容器端口> <镜像名>

示例

docker run -d --name my-nginx -p 80:80 nginx:latest
查看运行中的容器
docker ps
停止容器
docker stop <容器名或PID>

示例

docker stop my-nginx
删除容器
docker rm <容器名或PID>

示例

docker rm my-nginx
删除镜像
docker rmi <镜像名>

示例

docker rmi nginx:latest

9.3 管理容器和镜像

查看容器日志
docker logs <容器名>

示例

docker logs my-nginx
进入运行中的容器
docker exec -it <容器名> /bin/bash

示例

docker exec -it my-nginx /bin/bash
列出所有容器(包括停止的容器)
docker ps -a
清理未使用的镜像和容器
docker system prune

注意:该命令会删除所有未使用的容器、网络、镜像等,请谨慎使用。


10. 版本控制与Git

Git是现代后端开发中不可或缺的版本控制工具,帮助团队成员协同开发、追踪代码变更和管理项目历史。

10.1 在Linux上使用Git

安装Git

Debian/Ubuntu系统

sudo apt update
sudo apt install git

Red Hat/CentOS系统

sudo yum install git
配置Git

设置全局用户名和邮箱:

git config --global user.name "John Doe"
git config --global user.email "john.doe@example.com"

查看配置:

git config --list

10.2 Git常用命令

初始化仓库

新建Git仓库

git init

克隆远程仓库

git clone <仓库URL>
基本操作

查看状态

git status

添加更改到暂存区

git add <文件名>
git add .      # 添加所有更改

提交更改

git commit -m "提交信息"

推送到远程仓库

git push origin <分支名>

拉取远程更改

git pull origin <分支名>
分支管理

创建新分支

git branch <分支名>

切换分支

git checkout <分支名>
# 或者使用
git switch <分支名>

合并分支

git merge <分支名>

删除分支

git branch -d <分支名>
标签管理

创建标签

git tag <标签名>
git tag -a <标签名> -m "标签描述"

推送标签

git push origin <标签名>
git push origin --tags    # 推送所有标签
查看历史

查看提交历史

git log

简洁格式查看

git log --oneline

查看特定文件的历史

git log -- <文件名>
解决冲突

在合并或拉取时遇到冲突,需要手动解决后提交。

查看冲突文件

git status

标记冲突已解决

git add <冲突文件>

完成合并

git commit -m "解决合并冲突"

11. Git的协作最佳实践

在团队协作中,遵循Git的最佳实践可以提高效率,减少冲突,确保代码质量。

11.1 频繁提交

  • 理由:小而频繁的提交便于追踪更改,减少合并冲突的风险。
  • 实践
    • 每完成一个功能或修复一个问题后立即提交。
    • 避免一次性提交大量更改。

示例

git add feature-login.py
git commit -m "实现用户登录功能"

11.2 撰写清晰的提交信息

  • 理由:清晰的提交信息有助于团队成员理解更改内容和目的。
  • 实践
    • 使用简洁明了的标题。
    • 描述更改的具体内容和原因。

示例

git commit -m "修复登录页面的表单验证错误"

11.3 使用分支策略

  • 理由:合理的分支策略可以组织开发流程,避免不同功能的更改相互干扰。
  • 实践
    • 为每个新功能或修复创建独立分支。
    • 定期合并主分支的更改到功能分支,保持同步。

示例

git checkout -b feature-signup

11.4 代码审查

  • 理由:代码审查可以提高代码质量,发现潜在的问题,促进团队知识共享。
  • 实践
    • 在合并Pull Request前进行审查。
    • 提供建设性的反馈,确保代码符合团队标准。

步骤

  1. 创建Pull Request
    • 开发者提交更改并创建Pull Request。
  2. 审查代码
    • 团队成员检查代码,提出改进建议。
  3. 合并Pull Request
    • 审查通过后,合并到主分支。

12. Docker与容器管理

容器化技术在后端开发中越来越普及,Docker是其中最流行的容器平台之一,帮助开发者构建、部署和运行应用程序。

12.1 安装Docker

Debian/Ubuntu系统
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
Red Hat/CentOS系统
sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

12.2 基本Docker命令

查看Docker版本
docker --version
拉取镜像
docker pull <镜像名>

示例

docker pull nginx:latest
查看本地镜像
docker images
运行容器
docker run -d --name <容器名> -p <主机端口>:<容器端口> <镜像名>

示例

docker run -d --name my-nginx -p 80:80 nginx:latest
查看运行中的容器
docker ps
停止容器
docker stop <容器名或PID>

示例

docker stop my-nginx
删除容器
docker rm <容器名或PID>

示例

docker rm my-nginx
删除镜像
docker rmi <镜像名>

示例

docker rmi nginx:latest

12.3 管理容器和镜像

查看容器日志
docker logs <容器名>

示例

docker logs my-nginx
进入运行中的容器
docker exec -it <容器名> /bin/bash

示例

docker exec -it my-nginx /bin/bash
列出所有容器(包括停止的容器)
docker ps -a
清理未使用的镜像和容器
docker system prune

注意:该命令会删除所有未使用的容器、网络、镜像等,请谨慎使用。


13. 安全管理

确保系统和应用的安全是后端开发和运维的重要职责。以下内容涵盖防火墙配置、安全更新与升级等方面。

13.1 使用防火墙

ufw:Uncomplicated Firewall(适用于Debian/Ubuntu)

启用防火墙

sudo ufw enable

查看状态

sudo ufw status verbose

允许端口

sudo ufw allow 22/tcp    # SSH
sudo ufw allow 80/tcp    # HTTP
sudo ufw allow 443/tcp   # HTTPS

拒绝端口

sudo ufw deny 23/tcp

示例

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw enable
sudo ufw status
firewalld:适用于Red Hat/CentOS

启动防火墙

sudo systemctl start firewalld
sudo systemctl enable firewalld

查看状态

sudo firewall-cmd --state

允许端口

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload

拒绝端口

sudo firewall-cmd --permanent --remove-service=telnet
sudo firewall-cmd --reload

示例

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

13.2 安全更新与升级

Debian/Ubuntu系统

更新软件包列表

sudo apt update

升级已安装的软件包

sudo apt upgrade

升级发行版

sudo apt dist-upgrade
sudo do-release-upgrade
Red Hat/CentOS系统

更新软件包

sudo yum update          # CentOS 7及以前
sudo dnf upgrade         # CentOS 8及以后

自动安装安全更新(使用yum-crondnf-automatic):

  • 安装yum-cron(CentOS 7):

    sudo yum install yum-cron
    sudo systemctl enable yum-cron
    sudo systemctl start yum-cron
    
  • 安装dnf-automatic(CentOS 8):

    sudo dnf install dnf-automatic
    sudo systemctl enable --now dnf-automatic.timer
    

示例

sudo yum update
sudo dnf upgrade

解释

  • 定期更新系统和软件包,修补安全漏洞,确保系统安全。

14. 文件传输与备份

数据备份和文件传输是后端开发和运维中的重要任务,确保数据的安全和高效传输。

14.1 使用rsync

rsync是一个功能强大的文件同步和传输工具,支持增量传输、压缩和远程同步。

基本用法

同步本地目录到远程服务器

rsync -avz /path/to/local/dir/ user@remote_host:/path/to/remote/dir/

从远程服务器同步目录到本地

rsync -avz user@remote_host:/path/to/remote/dir/ /path/to/local/dir/

仅同步新文件和更改的文件

rsync -avzu /path/to/local/dir/ user@remote_host:/path/to/remote/dir/

删除目标目录中源目录不存在的文件

rsync -avz --delete /path/to/local/dir/ user@remote_host:/path/to/remote/dir/
常用选项
  • -a:归档模式,保留符号链接、权限、时间戳等。
  • -v:详细输出。
  • -z:压缩数据传输。
  • -u:仅更新已更改的文件。
  • --delete:删除目标中源不存在的文件。
  • -P:显示进度,部分传输文件可断点续传。

示例

rsync -avzP /var/www/html/ user@192.168.1.100:/var/www/html_backup/

解释

  • rsync通过比较源和目标目录,智能传输文件,节省带宽和时间。
  • 使用SSH协议进行安全传输。

15. 其他有用的工具

在后端开发和运维中,掌握一些辅助工具可以显著提升效率和工作体验。

15.1 tmux与screen

tmuxscreen是终端多路复用器,允许在单一终端会话中运行多个窗口和会话,支持会话分离和恢复。

安装tmux

Debian/Ubuntu系统

sudo apt install tmux

Red Hat/CentOS系统

sudo yum install tmux
基本使用

启动tmux会话

tmux

创建新窗口
Ctrl + B,然后按C

切换窗口
Ctrl + B,然后按窗口编号(如1, 2

分割窗口
Ctrl + B,然后按%(垂直分割)或"(水平分割)

分离会话
Ctrl + B,然后按D

恢复会话

tmux attach

示例

tmux new -s mysession
# 在会话中创建多个窗口和面板
tmux attach -t mysession

解释

  • tmux允许在断开连接后恢复会话,适合远程管理和长期运行的任务。

15.2 SSH密钥管理

使用SSH密钥进行认证,提高安全性和便利性,避免频繁输入密码。

生成SSH密钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

步骤

  1. 运行命令

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    
  2. 设置密钥保存路径(默认~/.ssh/id_rsa)。

  3. 设置密码短语(可选,提高安全性)。

添加SSH密钥到SSH-Agent
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
将SSH公钥添加到远程服务器

复制公钥

ssh-copy-id user@remote_host

手动添加

  1. 显示公钥内容

    cat ~/.ssh/id_rsa.pub
    
  2. 在远程服务器上编辑~/.ssh/authorized_keys文件,将公钥内容粘贴进去。

示例

ssh-copy-id john@192.168.1.100

解释

  • 使用SSH密钥可以实现免密码登录,提高安全性和效率。
  • 建议为每个设备生成独立的SSH密钥,并妥善保管私钥。

16. 远程管理与部署

远程管理和自动化部署是后端开发和运维中的核心任务,确保应用程序能够高效、可靠地运行在生产环境中。

16.1 使用Ansible

Ansible是一个开源的自动化工具,用于配置管理、应用部署和任务自动化,适合大规模服务器管理。

安装Ansible

Debian/Ubuntu系统

sudo apt update
sudo apt install ansible

Red Hat/CentOS系统

sudo yum install epel-release
sudo yum install ansible
基本概念
  • Inventory:定义管理的主机列表。
  • Playbook:定义任务和配置的YAML文件。
  • Modules:Ansible提供的预定义任务模块,如apt, yum, copy等。
示例

Inventory文件hosts.ini):

[webservers]
192.168.1.101
192.168.1.102

[dbservers]
192.168.1.201

Playbook文件deploy.yml):

---
- name: 部署Web服务器
  hosts: webservers
  become: yes
  tasks:
    - name: 更新APT缓存
      apt:
        update_cache: yes

    - name: 安装Nginx
      apt:
        name: nginx
        state: present

    - name: 启动并启用Nginx服务
      systemd:
        name: nginx
        state: started
        enabled: yes

运行Playbook

ansible-playbook -i hosts.ini deploy.yml

解释

  • Ansible通过Playbook自动化执行任务,减少手动操作,提高部署效率和一致性。
  • 使用become: yes提升权限,执行需要管理员权限的任务。

16.2 部署应用

部署应用是将开发好的应用程序发布到生产环境,使其能够被用户访问和使用。以下介绍常用的部署方法。

使用Git Hooks进行自动部署

步骤

  1. 在服务器上创建部署脚本(如deploy.sh):

    #!/bin/bash
    cd /var/www/html/repository
    git pull origin master
    systemctl restart nginx
    
  2. 设置post-receive Hook

    • 在服务器的Git仓库中,编辑hooks/post-receive文件。
    #!/bin/bash
    git --work-tree=/var/www/html/repository --git-dir=/path/to/repo.git checkout -f
    /path/to/deploy.sh
    
    • 赋予执行权限:
    chmod +x hooks/post-receive
    
  3. 配置本地仓库的远程地址

    git remote add production ssh://user@server_ip:/path/to/repo.git
    
  4. 推送代码到生产服务器

    git push production master
    

解释

  • 使用Git Hooks实现代码推送后自动部署,简化部署流程,减少人为错误。
使用CI/CD工具

使用持续集成/持续部署(CI/CD)工具(如Jenkins, GitLab CI, GitHub Actions)可以实现更复杂和自动化的部署流程。

示例

  • Jenkins

    1. 安装Jenkins
    2. 配置Jenkins任务,拉取代码、运行测试、构建应用、部署到服务器。
  • GitLab CI

    1. 在项目根目录创建.gitlab-ci.yml文件
    stages:
      - build
      - test
      - deploy
    
    build_job:
      stage: build
      script:
        - make build
    
    test_job:
      stage: test
      script:
        - make test
    
    deploy_job:
      stage: deploy
      script:
        - ./deploy.sh
      only:
        - master
    
    1. GitLab Runner执行CI/CD流程。

解释

  • CI/CD工具通过自动化脚本,实现代码的持续集成和自动部署,提高开发效率和部署一致性。

17. 常见问题与解决方法

在使用Linux进行后端开发和运维过程中,可能会遇到各种问题。以下是一些常见问题及其解决方法。

17.1 如何回滚到之前的状态?

问题描述
需要撤销最近的更改,恢复到之前的系统或应用状态。

解决方法

使用git reset回滚代码

软重置:保留工作目录和暂存区的更改。

git reset --soft <提交哈希>

混合重置(默认):保留工作目录的更改,重置暂存区。

git reset <提交哈希>

硬重置:重置工作目录和暂存区,丢弃所有更改。

git reset --hard <提交哈希>

示例

git reset --hard HEAD~1

注意:硬重置会丢弃未提交的更改,需谨慎使用。

使用rsync进行文件系统回滚

示例

rsync -avz /backup/dir/ /var/www/html/

解释

  • 将备份目录的内容同步到目标目录,覆盖现有文件,恢复到备份时的状态。

17.2 如何撤销未提交的更改?

问题描述
在修改文件后,发现更改有误,需要撤销未提交的更改。

解决方法

使用git checkout恢复文件

命令

git checkout -- <文件名>

示例

git checkout -- app.py

解释

  • 将指定文件恢复到最近一次提交的状态,丢弃工作目录中的更改。
使用git restore命令

命令

git restore <文件名>

示例

git restore app.py

解释

  • git restore是Git 2.23引入的更直观的命令,用于恢复文件或撤销更改。

17.3 如何解决磁盘空间不足?

问题描述
服务器或开发环境中的磁盘空间不足,影响系统和应用的正常运行。

解决方法

查找占用空间较大的文件和目录

使用du命令

du -h --max-depth=1 /path/to/directory

示例

du -h --max-depth=1 /var/www
清理不必要的文件

删除旧的日志文件

sudo rm /var/log/nginx/*.log.old

清理包缓存(Debian/Ubuntu):

sudo apt clean

清理包缓存(Red Hat/CentOS):

sudo yum clean all
使用ncdu进行交互式磁盘使用分析

安装ncdu

sudo apt install ncdu    # Debian/Ubuntu
sudo yum install ncdu    # Red Hat/CentOS

使用ncdu

ncdu /var/www

解释

  • ncdu提供交互式界面,帮助快速定位和删除占用大量空间的文件和目录。

18. 总结

Linux是后端开发和运维中的重要工具,掌握常用的Linux操作能够显著提升工作效率和系统管理能力。通过本文的学习,您应该能够:

  • 熟练使用基本的文件和目录管理命令。
  • 有效管理用户和权限,确保系统安全。
  • 掌握软件包管理,安装和更新所需的软件。
  • 使用网络工具进行网络配置和故障排查。
  • 管理系统进程,优化系统性能。
  • 编写Shell脚本,实现任务自动化。
  • 进行日志管理,监控系统和应用状态。
  • 使用Docker进行容器化管理,简化部署流程。
  • 利用Git进行版本控制,促进团队协作。
  • 进行系统安全管理,保护系统免受威胁。
  • 实现文件传输与备份,确保数据安全。
  • 解决常见问题,保持系统稳定运行。

关键点总结

  • 基础操作:熟悉Linux的基本命令和文件操作,是进行后端开发和运维的基础。
  • 用户和权限管理:合理管理用户和权限,确保系统的安全性和资源的合理使用。
  • 软件包管理:掌握不同Linux发行版的软件包管理工具,保持系统和应用的最新状态。
  • 网络管理:有效管理网络配置和使用网络工具,确保应用的网络连接和性能。
  • 进程管理:监控和控制系统进程,优化系统资源的使用。
  • 自动化与脚本:通过Shell脚本和自动化工具,提高工作效率,减少重复性劳动。
  • 日志管理:定期查看和管理日志文件,及时发现和解决系统和应用问题。
  • 容器化管理:使用Docker等容器化技术,简化应用的部署和管理。
  • 版本控制:利用Git进行代码版本控制,促进团队协作和代码质量。
  • 安全管理:实施有效的安全策略,保护系统和数据的安全。
  • 文件传输与备份:确保数据的安全传输和备份,防止数据丢失。

http://www.kler.cn/a/402006.html

相关文章:

  • Android WMS概览
  • Linux system-timesyncd同步机制梳理
  • 语义分割(semantic segmentation)
  • Vscode 远程切换Python虚拟环境
  • 14. 乘法口诀挑战赛
  • 【插件】重复执行 pytest-repeat
  • DataOps for LLM 的数据工程技术架构实践
  • <Sqlite><websocket>使用Sqlite与websocket,实现网页端对数据库的【读写增删】操作
  • mysql8.4+mysql router读写分离
  • 矩阵论在图像算法中的应用
  • 理论力学基础:讲义与笔记(2)
  • UniApp在Vue3的setup语法糖下自定义组件插槽详解
  • 力扣.223 矩形面积 rectangle-area
  • Github 2024-11-19 Python开源项目日报 Top9
  • Ubuntu Linux使用前准备动作 配置SSH
  • SQL 语句基础与实用技巧(DDL DML)
  • CH03_反射
  • 基于信号量与共享内存实现客户与服务器进程通信
  • Efficient One-stage Video Object Detection byExploiting Temporal Consistency
  • 数据结构——AVL树
  • python: generator IDAL and DAL using sql server 2019
  • 时间类的实现
  • 【Flutter 问题系列第 84 篇】如何清除指定网络图片的缓存
  • sql数据库-权限控制-DCL
  • 第二十四章 TCP 客户端 服务器通信 - 当前 TCP 设备
  • 大公司如何实现打印机共享的?如何对打印机进行管控或者工号登录后进行打印?异地打印机共享的如何实现可以帮助用户在不同地理位置使用同一台打印机完成打印任务?