linux主机之间传输文件方法

在 Linux 系统之间传输文件有多种方法,具体选择取决于网络环境、安全性需求、文件大小和操作习惯等因素。以下是常见的 15+ 种方法及简要说明:


一、基于 SSH 协议的工具(加密传输)

  1. scp (Secure Copy)

    1
    2
    3
    4
    5
    6
    7
    8
    # 上传文件到远程主机
    scp local_file user@remote_host:/path/to/destination

    # 下载远程文件到本地
    scp user@remote_host:/remote/file /local/path

    # 递归传输目录(-r)
    scp -r local_dir user@remote_host:/remote/path

    特点:简单直接,但无增量传输功能。

  2. rsync (增量同步)

    1
    2
    3
    4
    5
    # 同步本地目录到远程(-a 归档模式,-v 显示进度,-z 压缩)
    rsync -avz /local/path user@remote_host:/remote/path

    # 从远程同步到本地
    rsync -avz user@remote_host:/remote/path /local/path

    特点:高效增量传输,适合大文件或频繁更新的场景。

  3. sftp (SSH File Transfer Protocol)

    1
    2
    3
    4
    5
    6
    sftp user@remote_host
    # 交互式命令:
    put local_file # 上传文件
    get remote_file # 下载文件
    lls # 查看本地文件
    ls # 查看远程文件

    特点:交互式操作,适合手动管理文件。

  4. sshfs (挂载远程目录)

    1
    2
    3
    4
    # 将远程目录挂载到本地
    sshfs user@remote_host:/remote/path /local/mountpoint
    # 卸载
    fusermount -u /local/mountpoint

    特点:像操作本地文件一样访问远程文件。


二、基于网络协议的直接传输

  1. nc (netcat) + tar

    1
    2
    3
    4
    5
    # 接收端监听端口并解压
    nc -l -p 1234 | tar xzvf -

    # 发送端打包并发送
    tar czvf - /local/path | nc remote_host 1234

    特点:无需 SSH,适合临时快速传输,但无加密。

  2. HTTP 服务器

    1
    2
    3
    4
    5
    # 在发送端启动临时 HTTP 服务器(Python3)
    python3 -m http.server 8000

    # 接收端使用 wget 或 curl 下载
    wget http://sender_ip:8000/file

    特点:快速共享文件,适合内网环境。

  3. curlwget 上传文件

    1
    2
    # 使用 curl 上传到 HTTP 服务器(需接收端有服务器支持)
    curl -F "file=@local_file" http://remote_host/upload

    特点:依赖接收端的服务支持。

  4. ncftplftp (FTP 客户端)

    1
    lftp -e "put local_file; quit" ftp://user:password@remote_host

    特点:需配置 FTP 服务,明文传输,不建议敏感数据。


三、共享文件系统

  1. NFS (Network File System)

    1
    2
    # 配置 NFS 服务器后,客户端挂载
    mount -t nfs remote_host:/shared/path /local/mountpoint

    特点:适合长期共享,需配置权限。

  2. Samba/CIFS

    1
    2
    # 挂载 Windows/Linux 共享目录
    mount -t cifs //remote_host/share /local/mountpoint -o user=username

    特点:跨平台兼容,适合混合环境。


四、其他工具与技巧

  1. tar 管道 + SSH

    1
    2
    # 压缩传输目录到远程并解压
    tar czf - /local/dir | ssh user@remote_host "tar xzf - -C /remote/path"

    特点:灵活处理大目录,无需临时存储。

  2. bbcp (高性能文件拷贝)

    1
    bbcp -v -s 10 local_file user@remote_host:/remote/path

    特点:高速传输大文件,需单独安装。

  3. 云存储中转(如 AWS S3、MinIO)

    1
    2
    3
    4
    # 上传到云存储
    aws s3 cp local_file s3://bucket/path
    # 从云存储下载
    aws s3 cp s3://bucket/path/remote_file .

    特点:依赖第三方服务,适合跨地域传输。

  4. 邮件附件

    1
    2
    # 使用 mutt 发送文件
    echo "Body" | mutt -a file_to_send -s "Subject" recipient@example.com

    特点:适合小文件,依赖邮件服务。


五、图形化工具

  1. FileZilla (SFTP 客户端)
    特点:可视化操作,支持拖拽上传。

  2. Syncthing (P2P 同步)
    特点:去中心化,自动同步多台设备。


选择建议

  • 安全性优先:使用 scp/rsync/sftp(基于 SSH)。
  • 大文件或增量同步:优先选择 rsync
  • 临时快速共享:HTTP 服务器或 nc
  • 长期共享:NFS/Samba。
  • 跨平台传输:Samba 或云存储。

linux中读取外部文件列表备份文件/目录并记入日志

脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/bin/bash
# 脚本功能:读取外部列表备份文件/目录,并记录详细日志

ip=$(hostname -I | awk '{print $1}')
LIST_FILE="backup_list.txt"
DEST_DIR="/home/backup/$ip/$(date +%Y%m%d)_bak"
LOG_DIR="/var/log/backuplogs"
LOG_FILE="${LOG_DIR}/backup_$(date +%Y%m%d).log"

#切换到脚本执行目录
cd /usr/local/bin

# 创建日志目录
mkdir -p "$LOG_DIR" "$DEST_DIR"

# 日志记录函数
log() {
local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo "[${timestamp}] $1" | tee -a "$LOG_FILE"
}

# 主备份逻辑
log "===== 开始备份任务 ====="
log "备份目标目录: $DEST_DIR"

while IFS= read -r source_path; do
# 跳过空行和注释行
[[ -z "$source_path" || "$source_path" == \#* ]] && continue

# 检查源路径是否存在
if [ ! -e "$source_path" ]; then
log "警告: 路径不存在 [跳过] -> $source_path"
continue
fi
# 生成目标路径
relative_path=$(realpath --relative-to="$(dirname "$source_path")" "$source_path")
target_path="${DEST_DIR}/${relative_path}"

# 执行复制操作
if cp -rv --preserve=all "$source_path" "$target_path" 2>&1 | tee -a "$LOG_FILE"; then
log "成功: 备份完成 -> $source_path"
else
log "错误: 备份失败 -> $source_path"
fi

done < "$LIST_FILE"

log "===== 备份任务结束 ====="
echo "操作日志已保存至: $LOG_FILE"

文件列表举例:

1
touch backup_list.txt

内容如下:

1
2
3
4
5
/etc

/home/www

/var/log

其中注释行不被读取

linux定时任务详细说明

Linux 系统提供了多种定时任务管理工具,最常用的是 Cronsystemd Timer。以下是详细用法指南:


一、Cron:经典定时任务工具

Cron 是 Linux 中用于周期性执行任务的守护进程,通过编辑 crontab 文件配置任务。

1. 基本用法

  • 编辑用户级定时任务
    1
    crontab -e  # 编辑当前用户的定时任务
  • 查看任务列表
    1
    crontab -l  # 列出当前用户的定时任务
  • 删除所有任务
    1
    crontab -r

2. Crontab 文件格式

1
2
# 格式:分钟 小时 日期 月份 星期 命令
* * * * * command-to-execute
  • 字段说明

    字段 取值范围 说明
    分钟 0-59 每小时的第几分钟执行
    小时 0-23 每天的第几小时执行
    日期 1-31 每月的第几天执行
    月份 1-12 每年的第几月执行
    星期 0-7 (0和7均为周日) 每周的周几执行
  • 特殊符号

    • *:匹配所有值。
    • ,:指定多个值(如 1,3,5)。
    • -:指定范围(如 1-5)。
    • /:间隔频率(如 */5 表示每5分钟)。

3. 示例

1
2
3
4
5
6
7
8
9
10
11
# 每天凌晨2点执行脚本
0 2 * * * /path/to/script.sh

# 每5分钟执行一次
*/5 * * * * /path/to/command

# 每周一至周五的上午10:30执行
30 10 * * 1-5 /path/to/job

# 使用环境变量和输出重定向
* * * * * PATH=/usr/local/bin:$PATH && /path/to/command > /var/log/cron.log 2>&1

4. 系统级定时任务

  • 文件位置
    • /etc/crontab:系统全局任务(需指定用户)。
    • /etc/cron.d/:存放自定义任务文件。
    • /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/:按周期执行的脚本目录。

5. 日志与调试

  • 查看 Cron 日志
    1
    2
    grep CRON /var/log/syslog      # Debian/Ubuntu
    grep CRON /var/log/cron # RedHat/CentOS

二、Anacron:适用于非24小时运行的系统

Anacron 用于在系统未持续运行时执行错过周期的任务(如笔记本电脑)。

1. 配置文件

  • 编辑 /etc/anacrontab
    1
    2
    # 格式:周期天数 延迟时间 任务名称 命令
    1 5 daily-job /path/to/daily-script.sh

2. 运行机制

  • 任务记录在 /var/spool/anacron/ 目录中。
  • 适合每日、每周等低频任务。

三、systemd Timer:替代 Cron 的现代方案

systemd Timer 通过 .timer.service 单元文件管理定时任务,适合复杂调度。

1. 创建 Service 文件

  • 编写服务单元 /etc/systemd/system/my-job.service
    1
    2
    3
    4
    5
    [Unit]
    Description=My Custom Job

    [Service]
    ExecStart=/path/to/script.sh

2. 创建 Timer 文件

  • 编写定时器单元 /etc/systemd/system/my-job.timer
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [Unit]
    Description=Run my job daily

    [Timer]
    OnCalendar=*-*-* 02:00:00 # 每天凌晨2点
    Persistent=true # 如果错过时间,开机后立即执行

    [Install]
    WantedBy=timers.target

3. 启用并启动 Timer

1
2
3
systemctl daemon-reload
systemctl enable my-job.timer
systemctl start my-job.timer

4. 常用命令

  • 查看 Timer 状态:
    1
    2
    systemctl list-timers
    systemctl status my-job.timer

5. 时间格式(OnCalendar)

  • 使用 OnCalendar 表达式:
    1
    2
    3
    OnCalendar=Mon,Fri *-*-* 10:30:00  # 每周一和周五10:30
    OnCalendar=*-*-* 00/3:00:00 # 每3小时
    OnCalendar=daily # 每天00:00:00

四、Cron 与 systemd Timer 对比

特性 Cron systemd Timer
依赖服务 cron 守护进程 systemd
配置方式 文本文件 (crontab) 单元文件 (.timer, .service)
灵活性 简单定时 支持复杂调度和依赖关系
日志管理 需手动处理输出 集成 Journal 日志
适用场景 简单周期性任务 复杂任务或需系统集成

五、常见问题

  1. 任务未执行

    • 检查命令路径是否完整(使用绝对路径)。
    • 检查权限(脚本是否可执行)。
    • 查看日志:journalctl -u my-job.service(systemd)或 /var/log/cron(Cron)。
  2. 环境变量问题

    • Cron 默认环境与用户环境不同,建议在脚本中设置 PATH 或使用完整路径。
  3. 输出处理

    • 重定向输出到文件:*/5 * * * * /path/to/command >> /var/log/command.log 2>&1
    • 禁用邮件通知:MAILTO=""

通过上述方法,您可以灵活管理 Linux 系统中的定时任务。对于简单任务推荐使用 Cron,复杂或需系统集成的任务可选用 systemd Timer。

linux零基础入门

【2025版】最新Linux入门教程(非常详细)从零基础入门到精通

转自CSDN程序员_大白

文章目录
  • 一、为什么要学linux

  • 二、目录介绍

  • 三、vi / vim编辑器

  • 四、网络配置

    • 4.1、修改 IP 地址
    • 4.2、配置主机名
      • 4.2.1、修改主机名称
      • 4.2.2、修改 hosts 映射文件
  • 五、系统配置

    • 5.1、service 服务管理
    • 5.2、systemctl
    • 5.3、防火墙
    • 5.4、关机重启命令
    • 5.5、查看系统内核与版本
  • 六、常用命令

    • 6.1、文件目录类
      • 1)pwd 显示当前工作目录的绝对路径
      • 2)ls 列出目录的内容
      • 3)cd 切换目录
      • 4)mkdir 创建一个新的目录 、 rmdir 删除一个空的目录
      • 5)touch 创建空文件
      • 6)cp 复制文件或目录
      • 7)rm 删除文件或目录
      • 8)mv 移动文件与目录或重命名
      • 9)cat 查看文件内容
      • 10)more 文件内容分屏查看器
      • 11)less 分屏显示文件内容
      • 12)echo输出内容到控制台
      • 14)tail 输出文件尾部内容
      • 15)> 输出重定向 和 >> 追加
      • 16)ln 软链接
      • 17)history 查看已经执行过历史命令
      • 18)时间日期类
    • 6.2、用户管理命令
      • 1)useradd 添加新用户
      • 2)passwd 设置用户密码
      • 3)id 查看用户是否存在
      • 4)cat /etc/passwd 查看创建了哪些用户
      • 5)su 切换用户
      • 6)userdel 删除用户
      • 7)sudo 设置普通用户具有 root 权限
      • 8)usermod 修改用户
      • 9)groupadd 新增组
      • 10)groupdel 删除组
      • 11)groupmod 修改组
      • 12)cat /etc/group 查看创建了哪些组
    • 6.3、文件权限类
      • 1)文件属性
      • 2)chmod 改变权限
      • 3)chown 改变所有者
      • 4)chgrp 改变所属组
    • 6.4、搜索查找类
      • 1)find 查找文件或者目录
      • 2)locate 快速定位文件路径
      • 3)grep 过滤查找及 | 管道符
    • 6.5、压缩和解压类
      • 1)gzip/gunzip 压缩
      • 2)zip/unzip 压缩
      • 3)tar 打包
    • 6.6、磁盘查看和分区类
      • 1)du 查看文件和目录占用的磁盘空间
      • 2)df 查看磁盘空间使用情况
      • 3)lsblk 查看设备挂载情况
      • 4)mount/umount 挂载/卸载
      • 5)fdisk分区
    • 6.7、进程管理类
      • 1)ps 查看当前系统进程状态
      • 2)kill 终止进程
      • 3)pstree 查看进程树
      • 4)top 实时监控系统进程状态
      • 5)netstat显示网络状态和端口占用信息
      • 6)crontab 定时任务设置
  • 七、软件包管理

    • 7.1、BPM
      • 1)RPM 安装命令(rpm -ivh)
      • 2)RPM 查询命令(rpm -qa)
      • 3)RPM 卸载命令(rpm -e)
    • 7.2、YUM 仓库配置
      • 1)YUM 的常用命令

一、为什么要学linux

因为我们要部署服务,Linux系统一直以其稳定性而闻名,它们可以连续运行多年而不发生任何重大问题。事实上,很多Linux用户都从未在自己的环境中遇到过系统崩溃的情况。相对windows而言,挂起和崩溃完全是一种常态。

Windows由于是商业产品,源代码封闭,我们无法知道微软在里面做了什么手脚。而Linux由于是源代码开放操作系统,不存在这个问题

二、目录介绍

linux系统中一切皆文件

  • /bin
    是binary的缩写,这个目录存放着最经常使用的命令,通过上方桌面可以看到bin文件夹有个箭头,是链接到 /usr/bin下,相当于快捷方式,进入/bin和/usr/bin下是一模一样的
  • /sbin
    s就是super User的意思,这里存放的是系统管理员使用的系统管理程序。
  • /home
    存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一版该目录名是以用户的账号命名的。
  • /root
    该目录为系统管理员,也称为超级权限者的用户主目录。
  • /lib
    系统开机所需要最基本的动态连接共享库,其作用类似于windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
  • /etc
    所有的系统管理所需要的配置文件和子目录。
  • /usr
    这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program fies目录。
  • /boot
    这里存放的是启动linux时使用的一些核心文件,包括一些连接文件以及镜像文件,自己的安装别放这里。
  • /proc
    这个目录是一个虚拟目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
  • /srv
    service缩写,该目录存放一些服务启动之后需要提取的数据。
  • /sys
    这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs。
  • /tmp
    这个目录是用来存放一些临时文件的。
  • /dev
    类似于windows的设备管理器,把所有的硬件用文件的形式存储。管理着所有设备,例如CPU、硬盘等等
  • /media
    linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
    centos7迁移到/run/media
  • /mnt
    系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt上,然后进入该目录就可以查看里面的内容了。和media差不多
  • /opt
    这是给主机额外安装软件所摆放的目录。比如你安装一个mysql数据库则就可以放在这个目录下。默认是空的。
  • /var
    这个目录中存放着在不断扩充的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
  • /lost+found
    这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
  • /www
    /www目录可以用于存储Web应用程序或网站文件,/www目录没有特别的用途,它只是一个常规目录,可以根据需要进行使用和管理。

三、vi / vim编辑器

用户@主机名 组成, ~号代表当前目录位置,#号代表管理员用户,普通用户都是$号

VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器。VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性,方便程序设计。VIM 与 VI 编辑器完全兼容。

模式转换

进来默认一般模式,想要编辑文本就按i进入编辑模式

vim常用语法

一般模式

编辑模式

按『Esc』键 退出编辑模式,之后所在的模式为一般模式。

命令模式

四、网络配置

4.1、修改 IP 地址
1
2
3
4
5
6
vim /etc/sysconfig/network-scripts/ifcfg-ens33




12345

执行 service network restart 重启网络,使网络生效。

4.2、配置主机名
4.2.1、修改主机名称

1)、查看当前服务器主机名称

1
2
3
4
5
6
hostname




12345

2)、通过编辑/etc/hostname 文件修改主机名

1
2
3
4
5
6
vim /etc/hostname




12345

修改完重启后就生效了。

4.2.2、修改 hosts 映射文件
1
2
3
4
5
6
vim /etc/hosts




12345

添加映射,保存后,可以直接访问service,就可以访问到220.151 ip了

五、系统配置

5.1、service 服务管理

Linux 中的进程和服务
计算机中,一个正在执行的程序或命令,被叫做“进程”(process)。
启动之后一只存在、常驻内存的进程,一般被称作“服务”(service)。

1
2
3
4
5
6
service 服务名 start | stop |· restart | status




12345

查看服务的方法:/etc/init.d/服务名 ,发现只有两个服务保留在 service

chkconfig 设置后台服务的自启配置

2)、开启/关闭 network(网络)服务的自动启动

1
2
3
4
5
6
7
8
chkconfig network on

chkconfig network off




1234567

3)、开启/关闭 network 服务指定级别的自动启动

1
2
3
4
5
6
chkconfig --level 指定级别 network on




12345
5.2、systemctl

1)、基本语法

1
2
3
4
5
6
systemctl start | stop | restart | status 服务名




12345

2)、查看服务的方法:/usr/lib/systemd/system

1
2
3
4
5
6
cd /usr/lib/systemd/system




12345

ll 命令查看所有服务

systemctl 设置后台服务的自启配置

1、查看所有服务开机启动状态

1
2
3
4
5
6
systemctl list-unit-files




12345

2、关掉指定服务的自动启动

1
2
3
4
5
6
systemctl disable service_name




12345

3、开启指定服务的自动启动

1
2
3
4
5
6
systemctl enable service_name




12345
5.3、防火墙

1)、查看、更改防火墙状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
systemctl status firewalld  #查看防火墙状态

systemctl stop firewalld # 关闭防火墙

systemctl start firewalld # 开启防火墙

systemctl enable firewalld.service # 开机自启动防火墙

systemctl disable firewalld.service # 开机不自启动防火墙




12345678910111213

2)、防火墙开放、删除端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
firewall-cmd --list-ports                #查询所有开放的端口

firewall-cmd --query-port=8080/tcp #查询端口是否开放

firewall-cmd --add-port=8080/tcp --permanent #永久添加8080端口
firewall-cmd --add-port=65001-65010/tcp --permanent #永久增加65001-65010端口

firewall-cmd --remove-port=8800/tcp --permanent #永久删除8080端口

# 对某个ip开放某个端口
firewall-cmd --permanent --add-rich-rule=“rule family=“ipv4” source address=“192.168.142.166” port port=“5432” protocol=“tcp” accept”

# 删除对某个ip开放某个端口
firewall-cmd --permanent --remove-rich-rule=“rule family=“ipv4” source address=“192.168.142.166” port port=“5432” protocol=“tcp” accept”




123456789101112131415161718

命令解读

1
2
3
4
5
6
7
8
9
firwall-cmd:是Linux提供的操作firewall的一个工具(服务)命令
--zone #作用域
--add-port=8080/tcp #添加端口,格式为:端口/通讯协议 ;add表示添加,remove则对应移除
--permanent #永久生效,没有此参数重启后失效




12345678

3)、更新防火墙规则,更改配置后要执行重载配置

1
2
3
4
5
6
firewall-cmd --reload




12345
5.4、关机重启命令

0)、将数据由内存同步到硬盘中

1
2
3
4
5
6
sync




12345

1)、重启

1
2
3
4
5
6
7
8
reboot
# 两者作用一样
shutdown -r now




1234567

2)、关机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 立马关机
shutdown -h now

# 计算机将在1分钟后关机,并且会显示在登录用户的当前屏幕中
shutdown -h 1 ‘This server will shut down after 1 mins‘

# 指定时间关机
shutdown 15:28

# 取消关机操作
shutdown -c




123456789101112131415
5.5、查看系统内核与版本

1)、查看内核/操作系统/CPU信息

1
2
3
4
5
6
uname -a




12345

2)、查看centos具体版本

1
2
3
4
5
6
cat /etc/centos-release




12345

六、常用命令

6.1、文件目录类
1)、pwd 显示当前工作目录的绝对路径
1
2
3
4
5
6
pwd




12345
2)、ls 列出目录的内容
1
2
3
4
5
6
7
8
9
10
11
12
13
 ls:列出当前目录中的文件和子目录。
ls -l:以长格式列出当前目录中的文件和子目录,包括文件权限、所有者、文件大小、修改日期等详细信息。
ls -a:列出当前目录中的所有文件和子目录,包括隐藏文件和目录。
ls -h:以人类可读的格式列出文件大小,例如,使用KB、MB、GB等单位。
ls -t:按修改时间排序列出文件和子目录,最新修改的文件和目录将显示在最上面。
ls -r:反向排序列出文件和子目录,即从最后一个文件或目录开始列出。
ls -R:递归列出当前目录及其子目录中的所有文件和子目录。
ls -i:显示每个文件和目录的inode号码。




123456789101112

ls [选项] [目录或是文件]

可以多个参数组合如:ls -al

每行列出的信息依次是: 文件类型与权限,链接数,文件属主,文件属组,文件大小用byte来表示,建立或最近修改的时间,名字

3)、cd 切换目录
4)、mkdir 创建一个新的目录 、 rmdir 删除一个空的目录

mkdir [选项] 要创建的目录

1
2
3
4
5
6
7
mkdir xiyou
mkdir -p xiyou/dssz/meihouwang # -p 创建多层目录




123456

rmdir 要删除的空目录

1
2
3
4
5
6
rmdir xiyou/dssz/meihouwang




12345
5)、touch 创建空文件

touch 文件名称

1
2
3
4
5
6
touch xiyou/dssz/sunwukong.txt




12345
6)、cp 复制文件或目录

cp 源文件 目标文件

1)、复制文件

1
2
3
4
5
6
cp xiyou/dssz/suwukong.txt xiyou/mingjie/




12345

2)、递归复制整改文件夹
参数 : -r 递归复制整个文件夹

1
2
3
4
5
6
cp -r xiyou/dssz/ ./




12345
7)、rm 删除文件或目录

rm [选项] deleteFile (功能描述:递归删除目录中所有内容)

1
2
3
4
5
6
7
8
rm sunwukong.txt # 删除文件

rm -rf dssz/ # 递归删除目录中所有内容




1234567
8)、mv 移动文件与目录或重命名

mv 源文件 目标文件

(1)mv oldNameFile newNameFile (功能描述:重命名)

(2)mv /temp/movefile /targetFolder (功能描述:移动文件)

1
2
3
4
5
6
7
8
9
10
# 重命名
mv xiyou/dssz/suwukong.txt xiyou/dssz/houge.txt

# 移动文件
mv xiyou/dssz/houge.txt ./




123456789
9)、cat 查看文件内容

查看文件内容,从第一行开始显示。

一般查看比较小的文件,一屏幕能显示全的。

1
2
3
4
5
6
cat -n houge.txt  # -n参数显示行号




12345
10)、more 文件内容分屏查看器

more 要查看的文件

1
2
3
4
5
6
more nginx.conf 




12345
11)、less 分屏显示文件内容

less 指令用来分屏查看文件内容,它的功能与 more 指令类似,但是比 more 指令更加强大,支持各种显示终端。less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。

1
2
3
4
5
6
less nginx.conf 




12345
12)、echo输出内容到控制台

echo [选项] [输出内容]

可以用在写脚本的时候输出日志

-e: 支持反斜线控制的字符转换

1
2
3
4
5
6
7
8
echo “hello\tworld”

echo -e “hello\tworld” # -e支持反斜线控制的字符转换




1234567
14)、tail 输出文件尾部内容

tail 用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的后 10 行内容。

1
2
3
4
5
6
7
8
9
10
# 查看文件尾 1 行内容
tail -n 1 smartd.conf

# 实时追踪该档的所有更新
tail -f houge.txt




123456789

ctrl + s 暂停,按ctrl + q 继续

15)、> 输出重定向 和 >> 追加

(1)将 ls 查看信息写入到文件中

1
2
3
4
5
6
ls -l>houge.txt




12345

(2)将 ls 查看信息追加到文件中

1
2
3
4
5
6
ls -l>>houge.txt




12345

(3)采用 echo 将 hello 单词追加到文件中

1
2
3
4
5
6
echo hello>>houge.txt




12345
16)、ln 软链接

软链接也称为符号链接,类似于 windows 里的快捷方式,有自己的数据块,主要存放了链接其他文件的路径。

ln -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接)

1)、创建软连接

1
2
3
4
5
6
 ln -s /home/lnTest.txt ./lnTxt




12345

删除软链接: rm -rf 软链接名,而不是 rm -rf 软链接名/
如果使用 rm -rf 软链接名/ 删除,会把软链接对应的真实目录下内容删掉

1
2
3
4
5
6
rm -rf lnTxt




12345

查询:通过 ll 就可以查看,列表属性第 1 位是 l,尾部会有位置指向。

17)、history 查看已经执行过历史命令

(1)查看已经执行过的历史命令

1
2
3
4
5
6
history




12345

(2)清空历史记录

1
2
3
4
5
6
history -c




12345
18)、时间日期类

(1)显示当前时间信息

1
2
3
4
5
6
date




12345

(2)设置系统当前时间

1
2
3
4
5
6
date -s "2023-06-19 20:52:18"




12345
6.2、用户管理命令
1)、useradd 添加新用户

useradd 用户名 (功能描述:添加新用户)

useradd -g 组名 用户名 (功能描述:添加新用户到某个组)

(1)添加一个用户

1
2
3
4
5
6
useradd hmb




12345
2)、passwd 设置用户密码

passwd 用户名 (功能描述:设置用户密码)

(1)设置用户的密码

1
2
3
4
5
6
passwd hmb




12345
3)、id 查看用户是否存在

id 用户名

(1)查看用户是否存在

1
2
3
4
5
6
id hmb




12345
4)、cat /etc/passwd 查看创建了哪些用户

查看创建了哪些用户

1
2
3
4
5
6
cat /etc/passwd




12345
5)、su 切换用户

su 用户名称 (功能描述:切换用户,只能获得用户的执行权限,不能获得环境变量)

su - 用户名称 (功能描述:切换到用户并获得该用户的环境变量及执行权限)

(1)切换用户

1
2
3
4
5
6
7
8
su hmb

su - hmb




1234567
6)、userdel 删除用户

(1)userdel 用户名 (功能描述:删除用户但保存用户主目录)

(2)userdel -r 用户名 (功能描述:用户和用户主目录,都删除)

1
2
3
4
5
6
7
8
userdel hmb

userdel -r hmb




1234567
7)、sudo 设置普通用户具有 root 权限
1
2
3
4
5
6
sudo mkdir module




12345
8)、usermod 修改用户

usermod -g 用户组 用户名

(1)将用户加入到用户组

1
2
3
4
5
6
usermod -g root zhubajie




12345
9)、groupadd 新增组

groupadd 组名

(1)添加一个xitianqujing组

1
2
3
4
5
6
groupadd xitianqujing




12345
10)、groupdel 删除组

groupdel 组名

(1)删除xitianqujing组

1
2
3
4
5
6
groupdel xitianqujing




12345
11)、groupmod 修改组

groupmod -n 新组名 老组名

1
2
3
4
5
6
groupmod -n xitian xitianqujing




12345
12)、cat /etc/group 查看创建了哪些组
1
2
3
4
5
6
cat /etc/group




12345
6.3、文件权限类
1)、文件属性

使用llls -lh命令查看权限

如果没有权限,就会出现减号[ - ]而已。从左至右用0-9这些数字来表示:

  • 0 首位表示类型
    • 在Linux中第一个字符代表这个文件是目录、文件或链接文件等等
    • 代表文件
    • d 代表目录
    • l 链接文档(link file);
  • 第1-3位确定属主(该文件的所有者)拥有该文件的权限。—User
  • 第4-6位确定属组(所有者的同组用户)拥有该文件的权限,—Group
  • 第7-9位确定其他用户拥有该文件的权限 —Other

(1)、rwx 作用文件和目录的不同解释

  • (1)作用到文件:
    [ r ]代表可读(read): 可以读取,查看
    [ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前
    [ x ]代表可执行(execute):可以被系统执行
  • (2)作用到目录:
    [ r ]代表可读(read): 可以读取,ls查看目录内容
    [ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录
    [ x ]代表可执行(execute):可以进入该目录

ll命令查看解释

ls -lh 命令,文件大小会更清晰

(1)如果查看到是文件:链接数指的是硬链接个数。
(2)如果查看的是文件夹:链接数指的是子文件夹个数。

2)、chmod 改变权限

1)、第一种方式变更权限

chmod [{ugoa}{+ - =}{rwx}] 文件或目录

1
2
3
4
5
6
7
8
u:所有者(user)        g:所有组(group)           o:其他人(other)        a:所有人(u、g、o 的总和)

+号代表增加 -号代表取消 = 号代表直接赋予




1234567

(1)修改文件使其所属主用户具有执行权限

1
2
3
4
5
6
chmod u+x houge.txt




12345

(2)修改文件使其所属组用户具有执行权限

1
2
3
4
5
6
chmod g+x houge.txt




12345

(3)修改文件所属主用户执行权限,并使其他用户具有执行权限

1
2
3
4
5
6
chmod u-x,o+x houge.txt




12345

2)、第二种方式变更权限

chmod [mode=421 ] [文件或目录]

1
2
3
4
5
6
r=4         w=2        x=1       rwx=4+2+1=7




12345

(1)采用数字的方式,设置文件所有者、所属组、其他用户都具有可读可写可执行权限。

1
2
3
4
5
6
chmod 777 houge.txt




12345

(2)修改整个文件夹里面的所有文件的所有者、所属组、其他用户都具有可读可写可执行权限。

1
2
3
4
5
6
chmod -R 777 xiyou/




12345
3)、chown 改变所有者

chown [选项] [最终用户] [文件或目录] (功能描述:改变文件或者目录的所有者)

(1)修改文件所有者

1
2
3
4
5
6
chown hmb houge.txt




12345

(2)递归改变文件所有者和所有组

1
2
3
4
5
6
chown -R hmb:hmb xiyou/




12345
4)、chgrp 改变所属组

chgrp [最终用户组] [文件或目录] (功能描述:改变文件或者目录的所属组)

(1)修改文件的所属组

1
2
3
4
5
6
chgrp root houge.txt




12345
6.4、搜索查找类
1)、find 查找文件或者目录

find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端。

(1)按文件名:根据名称查找/目录下的filename.txt文件。

1
2
3
4
5
6
7
8
find -name "ln*.txt"  

find xiyou/ -name "*.txt"




1234567

(2)按拥有者:查找/opt目录下,用户名称为-user的文件

1
2
3
4
5
6
find opt/ -user hmb




12345

(3)按文件大小:在/home目录下查找大于200m的文件(+n 大于 -n小于 n等于)

1
2
3
4
5
6
find /home -size +204800




12345
2)、locate 快速定位文件路径

locate 指令利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给定的文件。Locate 指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新 locate 时刻。

基本语法:locate 搜索文件

1
2
3
4
5
6
由于 locate 指令基于数据库进行查询,所以第一次运行前,必须使用 updatedb 指令创建 locate 数据库。




12345

(1)查询文件夹

1
2
3
4
5
6
7
8
updatedb

locate tmp




1234567
3)、grep 过滤查找及 | 管道符

管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理,可以前面查出来的东西传给管道符后端的处理,例如 ls | grep -n test

grep是Linux系统中常用的文本搜索工具,可以在文件中查找指定的字符串或者正则表达式,并将匹配的行输出到终端或者文件中。

(1)、在文件中查找字符

1
2
3
4
5
6
7
8
9
10
11
12
13
# 单个文件中查找
grep "string" filename

# 多个文件中查找字符
grep "string" file1 file2 file3

# 忽略大小写查找指定字符串
grep -i "string" filename




123456789101112

(2)、在目录中递归查找指定字符串

1
2
3
4
5
6
grep -r "string" directory




12345

(3)、显示匹配行的行号

1
2
3
4
5
6
grep -n "string" filename




12345

(4)、反向查找不包含指定字符串的行

1
2
3
4
5
6
grep -v "string" filename




12345

(5)、将匹配的行输出到文件中

1
2
3
4
5
6
grep "string" filename > output.txt




12345
6.5、压缩和解压类
1)、gzip/gunzip 压缩

注意:

(1)只能压缩文件不能压缩目录
(2)不保留原来的文件
(3)同时多个文件会产生多个压缩包

(1)、gzip压缩

1
2
3
4
5
6
7
8
gzip 文件

gzip lnTest.txt




1234567

(2)、gunzip解压缩文件

1
2
3
4
5
6
gunzip lnTest.txt.gz




12345
2)、zip/unzip 压缩

zip 压缩命令在windows/linux都通用,可以压缩目录且保留源文件。

(1)、zip压缩

1
2
3
4
5
6
7
8
9
10
11
12
zip 压缩文件名.zip  源文件

# 压缩文件
zip lnTest.zip lnTest.txt

# -r 压缩文件夹
zip -r nginx1.zip nginx-1.21.6




1234567891011

(2)、unzip解压

1
2
3
4
5
6
7
8
9
unzip lnTest.zip

# -d 指定解压后文件的存放目录
unzip lnTest.zip -d /opt




12345678
3)、tar 打包

tar [选项] XXX.tar.gz 将要打包进去的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)

(1)、压缩文件

1
2
3
4
5
6
7
8
9
10
11
12
tar -zcvf 打包的文件名.tar.gz [源文件]

# 多个文件打包
tar -zcvf houma.tar.gz houge.txt bailongma.txt

# 打包文件夹
tar -zcvf xiyou.tar.gz xiyou/




1234567891011

(2)、解压

1
2
3
4
5
6
7
8
9
# 解压到当前目录
tar -zxvf houma.tar.gz
# -C 解压到某个目录下
tar -zxvf xiyou.tar.gz -C /opt




12345678
6.6、磁盘查看和分区类
1)、du 查看文件和目录占用的磁盘空间

du 目录/文件 (功能描述:显示目录下每个子目录的磁盘使用情况)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 查看当前文件总占用
du -sh

# 当前目录下所有文件磁盘占用
du -sh *

# 某文件夹下所有文件的磁盘占用
du -sh /home/*

# -c 显示总和
du -csh /home/*




123456789101112131415
2)、df 查看磁盘空间使用情况

df 选项 (功能描述:列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况)

(1)查看磁盘使用情况

1
2
3
4
5
6
df -h




12345
3)、lsblk 查看设备挂载情况
1
2
3
4
5
6
7
8
9
lsblk

# 查看详细的设备挂载情况,显示文件系统信息
lsblk -f




12345678
4)、mount/umount 挂载/卸载

对于Linux用户来讲,不论有几个分区,分别分给哪一个目录使用,它总归就是一个根目录、一个独立且唯一的文件结构。

Linux中每个分区都是用来组成整个文件系统的一部分,它在用一种叫做“挂载”的处理方法,它整个文件系统中包含了一整套的文件和目录,并将一个分区和一个目录联系起来,要载入的那个分区将使它的存储空间在这个目录下获得。

语法:mount [-t vfstype] [-o options] device dir (功能描述:挂载设备)

(1)挂载光盘镜像文件

1
2
3
4
5
6
7
8
9
10
# 建立挂载点
mkdir /mnt/cdrom/

# 设备/dev/cdrom 挂载到 挂载点 : /mnt/cdrom 中
mount -t iso9660 /dev/cdrom /mnt/cdrom/




123456789

(2)卸载光盘镜像文件

1
2
3
4
5
6
umount /mnt/cdrom




12345

(3)设置开机自动挂载

1
2
3
4
5
6
vi /etc/fstab




12345

添加下面那句后保存退出

5)、fdisk分区

注意:该命令必须在 root 用户下才能使用

基本语法:

fdisk -l (功能描述:查看磁盘分区详情)

fdisk 硬盘设备名 (功能描述:对新增硬盘进行分区操作)

1)、功能说明

  • Linux 分区
    Device:分区序列
    Boot:引导
    Start:从X磁柱开始
    End:到Y磁柱结束
    Blocks:容量
    Id:分区类型ID
    System:分区类型
  • 分区操作按键说明
    m:显示命令列表
    p:显示当前磁盘分区
    n:新增分区
    w:写入分区信息并退出
    q:不保存分区信息直接退出
6.7、进程管理类

进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。

1)、ps 查看当前系统进程状态

ps -ef:列出所有进程的详细信息,包括进程的PID、PPID、CPU占用率、内存占用率等。

ps aux:与ps -ef类似,但是显示的是所有用户的进程信息。

1
2
3
4
5
6
7
8
ps aux

ps -ef




1234567
  1. ps aux 显示信息说明:
    USER:该进程是由哪个用户产生的
    PID:进程的 ID 号
    %CPU:该进程占用 CPU 资源的百分比,占用越高,进程越耗费资源;
    %MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源;
    VSZ:该进程占用虚拟内存的大小,单位 KB;
    RSS:该进程占用实际物理内存的大小,单位 KB;
    TTY:该进程是在哪个终端中运行的。对于 CentOS 来说,tty1 是图形化终端,
    tty2-tty6 是本地的字符界面终端。pts/0-255 代表虚拟终端。
    STAT:进程状态。常见的状态有:R:运行状态、S:睡眠状态、T:暂停状态、
    Z:僵尸状态、s:包含子进程、l:多线程、+:前台显示
    START:该进程的启动时间
    TIME:该进程占用 CPU 的运算时间,注意不是系统时间
    COMMAND:产生此进程的命令名
  2. ps -ef 显示信息说明:
    UID:用户 ID
    PID:进程 ID
    PPID:父进程 ID
    C:CPU 用于计算执行优先级的因子。数值越大,表明进程是 CPU 密集型运算,
    执行优先级会降低;数值越小,表明进程是 I/O 密集型运算,执行优先级会提高
    STIME:进程启动的时间
    TTY:完整的终端名称
    TIME:CPU 时间
    CMD:启动进程所用的命令和参数

(1)配合grep 查询java进程,查出PID后,就可以杀掉进程了

1
2
3
4
5
6
7
8
9
ps -ef | grep java
ps aux | grep java

ps -ef | grep java服务名




12345678
2)、kill 终止进程

(1)通过pid终止进程

1
2
3
4
5
6
7
# -9 表示强迫进程立即停止
kill -9 5102




123456

(2)通过进程名称杀死进程

1
2
3
4
5
6
killall firefox




12345

window杀死进程:

1
2
3
4
5
6
taskkill /f /pid  进程ID




12345
3)、pstree 查看进程树
1
2
3
4
5
6
7
8
9
# 显示进程的 PID
pstree -p
# 显示进程的所属用户
pstree -u




12345678
4)、top 实时监控系统进程状态

参数选项:

1
2
3
4
5
6
top




12345
  1. 第一行信息为任务队列信息
  2. 第二行为进程信息
  3. 第三行为 CPU 信息
  4. 第四行为物理内存信息
  5. 第五行为交换分区(swap)信息
5)、netstat显示网络状态和端口占用信息

使用netstat 通常用来查看端口是否被占用

1
2
3
4
5
6
7
netstat -anp | grep  进程号或端口号
netstat –nlp | grep 端口号




123456

window查看:

1
2
3
4
5
6
netstat -ano | findstr 端口号




12345
6)、crontab 定时任务设置
1
2
3
4
5
6
crontab -e




12345

(1)、重新启动 crond 服务

1
2
3
4
5
6
systemctl restart crond




12345

(2)、每隔 1 分钟,向/root/bailongma.txt 文件中添加一个 11 的数字

1
2
3
4
5
6
*/1 * * * * /bin/echo ”11” >> /root/bailongma.txt




12345

七、软件包管理

7.1、BPM

RPM(RedHat Package Manager),RedHat软件包管理工具,类似windows里面的setup.exe是Linux这系列操作系统里面的打包安装工具,它虽然是RedHat的标志,但理念是通用的。

RPM包的名称格式
Apache-1.3.23-11.i386.rpm

  • “apache” 软件名称
  • “1.3.23-11”软件的版本号,主版本和此版本
  • “i386”是软件所运行的硬件平台,Intel 32位处理器的统称
  • “rpm”文件扩展名,代表RPM包
1)、RPM 安装命令(rpm -ivh)
1
2
3
4
5
6
rpm -ivh 包名.rpm




12345
2)、RPM 查询命令(rpm -qa)

语法:rpm -qa (功能描述:查询所安装的所有 rpm 软件包)

由于软件包比较多,一般都会采取过滤。rpm -qa | grep rpm软件包
例如:查询firefox软件安装情况

1
2
3
4
5
6
rpm -qa |grep firefox




12345
3)、RPM 卸载命令(rpm -e)
1
2
3
4
5
6
7
8
9
rpm -e RPM软件包

# 卸载软件时,不检查依赖。这样的话,那些使用该软件包的软件在此之后可能就不能正常工作了。
rpm -e --nodeps 软件包




12345678
7.2、YUM 仓库配置

YUM(全称为 Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 CentOS中的 Shell 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装

1)、YUM 的常用命令

语法:yum [选项] [参数]

选项:

参数:

(1)、采用 yum 方式安装 firefox

-END-

linux入门

以下是为零基础学习者设计的Linux系统入门到精通的教程大纲,包含实用案例和渐进式学习路径:


第一阶段:Linux基础入门(1-2周)

1. Linux系统概述

  • 什么是Linux?与Windows/Mac的区别
  • 主流发行版介绍(Ubuntu/CentOS/Debian)
  • 实验:通过VirtualBox安装Ubuntu虚拟机

2. 终端基础操作

  • 终端打开方式与基本结构

  • 20个必学命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    pwd          # 显示当前路径
    ls -l # 详细文件列表
    cd ~/Documents # 切换目录
    mkdir project # 创建目录
    touch file.txt # 创建空文件
    cp file.txt backup/ # 复制文件
    rm -r old_dir # 删除目录
    cat file.txt # 查看文件内容
    grep "error" log.txt # 文本搜索
    sudo apt update # 更新软件列表
  • 实例:创建/home/user/project目录,在其中创建3个测试文件并备份

3. 文件权限管理

  • 理解rwx权限
  • chmod 755 script.sh(设置可执行权限)
  • chown user:group file(修改所有者)
  • 案例:创建共享目录,设置组用户可读写权限

第二阶段:系统管理实战(2-3周)

1. 用户与组管理

  • 创建用户并设置密码:
    1
    2
    sudo adduser alice
    sudo passwd alice
  • 用户组管理:
    1
    2
    sudo groupadd developers
    sudo usermod -aG developers alice

2. 软件包管理

  • APT/DNF实战:
    1
    2
    3
    sudo apt install nginx      # 安装Web服务器
    sudo apt remove --purge nano # 完全卸载
    sudo apt search python3 # 搜索软件包

3. 进程与系统监控

  • 查看进程树:pstree
  • 终止进程:kill -9 1234
  • 系统监控命令:
    1
    2
    3
    top                # 动态监控
    free -h # 内存使用
    df -Th # 磁盘空间

4. 定时任务(Cron)

  • 编辑crontab:crontab -e
  • 示例:每天凌晨备份
    1
    0 3 * * * tar -czf /backup/home_$(date +\%F).tar.gz /home

第三阶段:Shell脚本编程(2周)

1. 基础脚本开发

  • 第一个脚本hello.sh
    1
    2
    #!/bin/bash
    echo "Hello, $USER! Today is $(date)"
  • 执行:chmod +x hello.sh && ./hello.sh

2. 条件与循环

  • 文件存在检查:
    1
    2
    3
    4
    5
    if [ -f "lockfile" ]; then
    echo "系统正在维护中..."
    else
    echo "系统正常运行"
    fi
  • 批量重命名脚本:
    1
    2
    3
    for file in *.log; do
    mv "$file" "archive/$(date +%Y%m%d)_$file"
    done

3. 实用脚本案例

  • 自动备份脚本:
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
    BACKUP_DIR="/backup"
    SOURCE_DIR="/var/www"
    FILENAME="backup_$(date +%Y%m%d).tar.gz"

    tar -czf $BACKUP_DIR/$FILENAME $SOURCE_DIR
    echo "备份完成于 $(date)" >> $BACKUP_DIR/backup.log

第四阶段:网络与安全管理(1周)

1. 网络配置

  • 查看IP:ip addr show
  • 设置静态IP(Ubuntu示例):
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # /etc/netplan/01-netcfg.yaml
    network:
    version: 2
    ethernets:
    eth0:
    dhcp4: no
    addresses: [192.168.1.100/24]
    gateway4: 192.168.1.1
    nameservers:
    addresses: [8.8.8.8, 8.8.4.4]

2. 防火墙管理

  • 开放SSH端口:
    1
    2
    sudo ufw allow 22/tcp
    sudo ufw enable

3. SSH远程管理

  • 密钥认证配置:
    1
    2
    ssh-keygen -t rsa
    ssh-copy-id user@remote-server

第五阶段:开发环境搭建(1周)

1. Python环境配置

  • 安装Python虚拟环境:
    1
    2
    3
    sudo apt install python3-venv
    python3 -m venv myenv
    source myenv/bin/activate

2. Git版本控制

  • 基础工作流:
    1
    2
    3
    4
    5
    git clone https://github.com/user/repo.git
    git checkout -b feature-branch
    git add .
    git commit -m "添加新功能"
    git push origin feature-branch

第六阶段:高级实战(持续学习)

1. 容器技术入门

  • Docker快速部署Nginx:
    1
    docker run -d -p 80:80 --name webserver nginx

2. 脚本调试技巧

  • 调试模式运行:
    1
    bash -x script.sh

学习资源推荐


通过这个系统化的学习路径,配合每天1-2小时的实践操作,零基础学习者可在2-3个月内掌握Linux系统的基础运维和自动化脚本编写能力。关键是多在真实环境中操作,遇到问题善用man手册和网络搜索。

Linux-shell编程从入门到提高

Linux Shell 编程:从入门到提高


一、Shell 编程基础

  1. 什么是 Shell?

    • Shell 是用户与 Linux 内核交互的命令行解释器。
    • 常见的 Shell:Bash(默认)、ZshFish等。
    • Shell 脚本:以 .sh 结尾的文本文件,包含一系列命令。
  2. 第一个 Shell 脚本

    1
    2
    #!/bin/bash
    echo "Hello, World!"
    • #!/bin/bash(Shebang):指定脚本解释器。
    • echo:输出内容到终端。
  3. 变量与输入输出

    • 变量定义变量名=值(注意等号两边不能有空格)。
      1
      2
      name="Alice"
      echo $name # 使用变量需加$
    • 输入命令read
      1
      2
      3
      echo "Enter your name:"
      read name
      echo "Hello, $name!"
  4. 条件判断(if语句)

    1
    2
    3
    4
    5
    6
    7
    if [ 条件 ]; then
    命令
    elif [ 其他条件 ]; then
    命令
    else
    命令
    fi
    • 示例
      1
      2
      3
      4
      num=10
      if [ $num -gt 5 ]; then
      echo "$num 大于 5"
      fi
  5. 循环

    • for循环
      1
      2
      3
      for i in 1 2 3; do
      echo "数字: $i"
      done
    • while循环
      1
      2
      3
      4
      5
      count=0
      while [ $count -lt 3 ]; do
      echo "计数: $count"
      ((count++))
      done

二、Shell 提高技巧

  1. 函数定义与调用

    1
    2
    3
    4
    function greet() {
    echo "Hello, $1!" # $1 表示第一个参数
    }
    greet "Bob" # 输出 "Hello, Bob!"
  2. 参数处理

    • $0:脚本名称。
    • $1, $2...:第1、2个参数。
    • $#:参数总数。
    • $@:所有参数列表。
    1
    2
    3
    echo "脚本名称: $0"
    echo "第一个参数: $1"
    echo "参数总数: $#"
  3. 字符串操作

    • 拼接
      1
      2
      3
      str1="Hello"
      str2="World"
      result="$str1 $str2"
    • 截取
      1
      2
      str="abcdef"
      echo ${str:0:3} # 输出 "abc"
  4. 数组

    1
    2
    3
    4
    arr=("apple" "banana" "cherry")
    echo ${arr[1]} # 输出 "banana"
    echo ${arr[@]} # 输出所有元素
    echo ${#arr[@]} # 输出数组长度
  5. 文件操作

    • 检查文件是否存在
      1
      2
      3
      if [ -f "file.txt" ]; then
      echo "文件存在"
      fi
    • 逐行读取文件
      1
      2
      3
      while read line; do
      echo "行内容: $line"
      done < file.txt
  6. 正则表达式(grep/sed

    1
    2
    3
    4
    5
    # 使用 grep 匹配文本
    echo "abc123" | grep -E "[a-z]+[0-9]+"

    # 使用 sed 替换文本
    echo "hello world" | sed 's/world/Linux/'
  7. 调试脚本

    • -x 参数:显示执行过程。
      1
      bash -x script.sh

三、实例演练

  1. 备份文件

    1
    2
    3
    4
    5
    #!/bin/bash
    backup_dir="/backup"
    source_dir="/home/user/docs"
    timestamp=$(date +%Y%m%d)
    tar -czf $backup_dir/backup_$timestamp.tar.gz $source_dir
  2. 监控 CPU 使用率

    1
    2
    3
    4
    5
    6
    #!/bin/bash
    cpu_threshold=80
    current_cpu=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}')
    if (( $(echo "$current_cpu > $cpu_threshold" | bc -l) )); then
    echo "CPU 使用率过高: $current_cpu%"
    fi
  3. 批量重命名文件

    1
    2
    3
    4
    #!/bin/bash
    for file in *.txt; do
    mv "$file" "new_${file}"
    done
  4. 自动安装软件

    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
    if ! command -v nginx &> /dev/null; then
    sudo apt-get update
    sudo apt-get install -y nginx
    else
    echo "Nginx 已安装"
    fi
  5. 日志分析(提取错误日志)

    1
    2
    #!/bin/bash
    grep -i "error" /var/log/syslog > errors.log

四、常见问题

  1. 权限问题:脚本需有执行权限。

    1
    2
    chmod +x script.sh
    ./script.sh
  2. 变量作用域:默认全局,函数内使用 local 定义局部变量。

  3. 语法错误:注意空格(如 [ $a -eq $b ] 方括号内必须有空格)。


五、学习资源


通过以上内容,你可以逐步掌握 Shell 编程的核心功能。多实践是提高的关键!

debian自动备份脚本及恢复测试方案

以下是一个用于Debian系统的自动备份脚本及恢复测试的详细方案,包含脚本说明和操作指南:


一、自动备份脚本 backup_script.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash

# 配置部分
BACKUP_DIRS="/etc /home" # 需要备份的目录
DEST_DIR="/backups" # 备份文件存储目录
RETENTION_DAYS=7 # 备份保留天数
LOG_FILE="/var/log/backup.log" # 日志文件路径

# 创建备份目录和日志文件
mkdir -p "$DEST_DIR"
touch "$LOG_FILE"

# 生成备份文件名
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
BACKUP_FILE="$DEST_DIR/backup-$TIMESTAMP.tar.gz"

# 执行备份
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] 开始备份..." | tee -a "$LOG_FILE"
tar -czf "$BACKUP_FILE" $BACKUP_DIRS 2>> "$LOG_FILE"

# 检查备份结果
if [ $? -eq 0 ]; then
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] 备份成功:$BACKUP_FILE" | tee -a "$LOG_FILE"
else
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] 备份失败!请检查日志!" | tee -a "$LOG_FILE"
exit 1
fi

# 清理旧备份
find "$DEST_DIR" -name "backup-*.tar.gz" -type f -mtime +$RETENTION_DAYS -delete
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] 已清理超过${RETENTION_DAYS}天的旧备份" | tee -a "$LOG_FILE"

二、恢复脚本 restore_script.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash

# 配置部分
DEST_DIR="/backups" # 备份文件存储目录

# 列出可用备份
echo "可用的备份文件:"
ls -lh $DEST_DIR/backup-*.tar.gz | awk '{print NR ") " $NF}'

# 选择备份文件
read -p "请输入要恢复的备份编号: " NUM
BACKUP_FILES=($DEST_DIR/backup-*.tar.gz)
SELECTED_FILE=${BACKUP_FILES[$((NUM-1))]}

# 确认恢复
read -p "即将恢复 $SELECTED_FILE 到原始位置,确认吗?[y/N] " CONFIRM
if [[ $CONFIRM =~ [yY] ]]; then
tar -xzf "$SELECTED_FILE" -C /
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] 恢复完成:$SELECTED_FILE"
else
echo "操作已取消"
fi

三、部署与使用说明

1. 安装脚本

1
2
3
4
5
6
7
# 创建脚本文件
sudo nano /usr/local/bin/backup_script.sh
sudo nano /usr/local/bin/restore_script.sh

# 赋予执行权限
sudo chmod +x /usr/local/bin/backup_script.sh
sudo chmod +x /usr/local/bin/restore_script.sh

2. 配置定时任务(每日凌晨2点执行)

1
2
3
sudo crontab -e
# 添加以下内容:
0 2 * * * /usr/local/bin/backup_script.sh

3. 测试备份

1
2
3
4
5
sudo /usr/local/bin/backup_script.sh
# 检查备份文件
ls -lh /backups/
# 查看日志
tail -f /var/log/backup.log

4. 恢复测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1. 创建测试文件
sudo touch /etc/test-file.txt

# 2. 执行备份
sudo backup_script.sh

# 3. 删除测试文件
sudo rm /etc/test-file.txt

# 4. 执行恢复
sudo restore_script.sh
# 按提示选择备份编号并确认

# 5. 验证恢复结果
ls -l /etc/test-file.txt

四、关键功能说明

  1. 备份策略

    • 使用tar进行压缩打包
    • 自动清理旧备份(默认保留7天)
    • 详细日志记录在/var/log/backup.log
  2. 恢复机制

    • 交互式选择备份文件
    • 恢复前二次确认
    • 直接覆盖原始路径设计
  3. 安全建议

    • 建议将DEST_DIR设置为独立分区
    • 如需远程备份,可挂载NFS或使用rsync
    • 敏感数据建议加密备份(可添加-j选项使用bzip2压缩)
  4. 错误排查

    • 检查/var/log/backup.log错误信息
    • 确认脚本有执行权限
    • 确保存储目录有足够空间

五、扩展建议

  1. 邮件通知
    可在脚本中添加mail命令,在失败时发送报警邮件

  2. 远程备份
    添加以下命令到备份脚本末尾:

    1
    rsync -avz $DEST_DIR/backup-*.tar.gz user@remote:/remote/backup/
  3. 完整性检查
    在恢复前添加验证步骤:

    1
    tar -tzf $SELECTED_FILE > /dev/null && echo "备份文件有效"

这个方案提供了从备份到验证的完整闭环,建议首次部署后通过模拟故障恢复进行全流程测试。

Kylin-Linux-Advanced-Server备份与恢复

在Kylin Linux Advanced Server V10上,可以通过以下步骤实现按月自动备份关键文件到本机指定位置,并测试数据恢复。我们将使用cron来调度备份任务,并使用tar命令进行文件打包和压缩。

1. 备份原理

  • 备份:使用tar命令将关键文件打包并压缩,保存到指定目录。
  • 自动化:使用cron设置每月定时任务,自动执行备份脚本。
  • 恢复测试:从备份文件中解压数据,验证文件完整性和可恢复性。

2. 具体步骤

2.1 创建备份脚本

创建一个备份脚本,例如backup.sh,并将其放在/usr/local/bin/目录下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

# 定义备份目录和文件名
BACKUP_DIR="/backup"
BACKUP_NAME="backup_$(date +%Y%m).tar.gz"
SOURCE_DIRS=("/etc" "/home" "/var/www") # 需要备份的目录

# 创建备份目录
mkdir -p $BACKUP_DIR

# 打包并压缩文件
tar -czf $BACKUP_DIR/$BACKUP_NAME ${SOURCE_DIRS[@]}

# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "备份成功: $BACKUP_DIR/$BACKUP_NAME"
else
echo "备份失败"
exit 1
fi

2.2 设置脚本权限

确保脚本具有可执行权限:

1
chmod +x /usr/local/bin/backup.sh

2.3 配置Cron任务

使用crontab -e编辑当前用户的cron任务,添加每月执行备份脚本的任务。

1
0 0 1 * * /usr/local/bin/backup.sh

解释:

  • 0 0 1 * *:表示每月1日的午夜0点执行。
  • /usr/local/bin/backup.sh:要执行的备份脚本。

2.4 测试数据恢复

为了测试数据恢复,可以从备份文件中解压数据到临时目录,并验证文件完整性。

1
2
3
4
5
6
7
8
# 创建临时目录
mkdir -p /tmp/restore_test

# 解压备份文件
tar -xzf /backup/backup_202310.tar.gz -C /tmp/restore_test

# 验证文件
ls -l /tmp/restore_test

3. 完整脚本示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

# 定义备份目录和文件名
BACKUP_DIR="/backup"
BACKUP_NAME="backup_$(date +%Y%m).tar.gz"
SOURCE_DIRS=("/etc" "/home" "/var/www") # 需要备份的目录

# 创建备份目录
mkdir -p $BACKUP_DIR

# 打包并压缩文件
tar -czf $BACKUP_DIR/$BACKUP_NAME ${SOURCE_DIRS[@]}

# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "备份成功: $BACKUP_DIR/$BACKUP_NAME"
else
echo "备份失败"
exit 1
fi

4. 总结

  • 备份:通过tar命令打包和压缩关键文件,并保存到指定目录。
  • 自动化:使用cron设置每月定时任务,自动执行备份脚本。
  • 恢复测试:从备份文件中解压数据,验证文件完整性和可恢复性。

通过以上步骤,你可以实现按月自动备份关键文件,并确保数据可恢复。

hexo搭建

以下是使用 GitHub Pages 搭建 Hexo 博客的详细步骤:


1. 准备工作

  1. 安装 Node.js
    访问 Node.js 官网 下载并安装最新 LTS 版本。

  2. 安装 Git
    访问 Git 官网 下载并安装 Git。

  3. 注册 GitHub 账号
    如果没有账号,请先注册 GitHub


2. 安装 Hexo

  1. 打开终端(或命令行工具),执行以下命令安装 Hexo CLI:

    1
    npm install -g hexo-cli
  2. 初始化 Hexo 项目:

    1
    2
    3
    hexo init my-blog  # 创建名为 "my-blog" 的文件夹
    cd my-blog # 进入项目目录
    npm install # 安装依赖

3. 本地预览博客

  1. 生成静态文件并启动本地服务器:

    1
    2
    hexo generate  # 或简写 hexo g
    hexo server # 或简写 hexo s
  2. 浏览器访问 http://localhost:4000,即可预览博客。


4. 配置 GitHub Pages

  1. 创建 GitHub 仓库
    登录 GitHub,新建一个仓库,仓库名必须为 <你的用户名>.github.io(例如 john.github.io)。

  2. 配置 Hexo 部署设置
    在 Hexo 项目根目录中,编辑 _config.yml 文件,找到 deploy 部分,修改为:

    1
    2
    3
    4
    deploy:
    type: git
    repo: https://github.com/你的用户名/你的用户名.github.io.git # 替换为你的仓库地址
    branch: main # GitHub 默认分支为 main
  3. 安装部署插件
    在终端中执行:

    1
    npm install hexo-deployer-git --save

5. 部署到 GitHub Pages

  1. 生成静态文件并部署:

    1
    2
    3
    hexo clean     # 清除缓存
    hexo generate # 生成静态文件
    hexo deploy # 或简写 hexo d
  2. 访问 https://你的用户名.github.io,即可看到你的博客。


6. 更新博客内容

  1. 新建文章

    1
    hexo new "文章标题"

    文章 Markdown 文件会生成在 source/_posts 目录下,编辑后重新部署即可。

  2. 更换主题

    • Hexo 主题库 选择主题,按主题文档安装。
    • 修改 _config.yml 中的 theme 字段为所选主题名。

常见问题

  1. 页面无法加载(404)

    • 确认仓库名是否为 <用户名>.github.io
    • 检查 GitHub Pages 设置:仓库 → Settings → Pages → 分支是否设为 main/master
  2. 部署后无变化

    • 执行 hexo clean 清除缓存再重新部署。
  3. 自定义域名

    • 在博客根目录的 source 文件夹下新建 CNAME 文件,写入你的域名(如 example.com)。
    • 在域名服务商处添加 DNS 解析到 GitHub Pages。

按照以上步骤操作,即可快速搭建并部署 Hexo 博客到 GitHub Pages。遇到问题可参考 Hexo 文档 或 GitHub 社区讨论。