Linux磁盘扩容三种方式

 

Hlroliu

于 2020-11-18 10:43:14 发布

7708
收藏 78
分类专栏: Linux磁盘扩容 磁盘扩容 文章标签: linux
版权

Linux磁盘扩容
同时被 2 个专栏收录
1 篇文章0 订阅
订阅专栏

磁盘扩容
1 篇文章0 订阅
订阅专栏
Linux在使用过程中由于数据量不断增大,导致磁盘空间不足,需要增加磁盘空间,主要有以下三种方式
1、直接给 / 分区(或者某一分区)扩容,直接在原有磁盘上增大空间
2、给虚拟机新增一块磁盘,为这块磁盘新建一个分区
3、给虚拟机新增一块磁盘,并把磁盘空间扩容到原有分区

1、给 / 分区扩容
查看磁盘空间大小,目前 / 分区大小为50G,并且只有一块磁盘

给/dev/vda 增加50G的空间,并把这50G扩容到 / 分区

/dev/vda 目前为100G,接下来对磁盘进行分区,创建物理卷,把新增的物理卷加到卷组里

对磁盘分区,使用fdisk /dev/vda ,输入n 新建分区,然后一直回车,最后输入 w 保存配置;创建完成之后,可输入 p 查看;/dev/vda3 即为新建的分区

输入partprobe 让系统识别新增的分区,然后创建物理卷,使用pvcreate /dev/vda3
扩展卷组,使用vgextend centos /dev/vda3命令,卷组信息可通过 vgdisplay 查看

扩展 / 的大小,增加50G,使用lvresize -L +30G /dev/mapper/centos-root命令,其中

重新识别 / 分区的大小,而ext4格式磁盘使用resize2fs /dev/mapper/centos-root

2、新增一块磁盘并划分独立分区,新增一块100G的磁盘,划分为/data

对磁盘 /dev/vdb 进行分区,格式化,挂载
磁盘分区

格式化

创建挂载点 /data,挂载分区

实现开机自动挂载(编辑 /etc/fstab 文件),保存退出后,执行 mount -a 无报错则配置成功

3、新增一块磁盘,并扩容到原有分区
新增一块磁盘 /dev/vdc 大小为50G,并把空间扩容至 / 分区

对 /dev/vdc 进行分区,并设置分区属性
t: 修改分区文件系统id,选择8e,LVM(与原有分区一致)
L:列出所有Hex代码

输入partprobe 让系统识别新增的分区,然后创建物理卷,使用pvcreate /dev/vdc1;pvdisplay查看

扩展卷组,扩展分区

查看磁盘大小

 

————————————————
版权声明:本文为CSDN博主「Hlroliu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Hlroliu/article/details/109764269

Linux下使用fdisk扩大分区容量(不丢失数据)

原创

sandshell博主文章分类:Linux©著作权

文章标签Linux使用fdisk扩大文章分类Linux系统/运维阅读数4.4万

环境:

模拟新加一块磁盘,并分区,挂载,永久挂载,然后写入数据,然后对分区扩容,测试扩容后分区里面的内容是否丢失。

查看所有分区:

[root@backup ~]# fdisk -l
Disk /dev/sda: 1073.7 GB, 1073741824000 bytes
255 heads, 63 sectors/track, 130541 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00040b96
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        1070     8388608   82  Linux swap / Solaris
/dev/sda3            1070       13055    96263168   83  Linux
Disk /dev/sdb: 1073.7 GB, 1073741824000 bytes
255 heads, 63 sectors/track, 130541 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.

开始分区:

[root@backup ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xc6e44e94.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): p            #p是打印当前磁盘所有分区

Disk /dev/sdb: 1073.7 GB, 1073741824000 bytes
255 heads, 63 sectors/track, 130541 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc6e44e94

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n            #n是新建分区
Command action
   e   extended
   p   primary partition (1-4)
p                                  #新建主分区
Partition number (1-4): 1          #给主分区编号为1,从1开始编号
First cylinder (1-130541, default 1):     #回车,默认从1开始,也可以手动输入1
Using default value 1                        #起始分区的位置
Last cylinder, +cylinders or +size{K,M,G} (1-130541, default 130541):     #直接回车,默认把磁盘所有空间分配到此分区。这里支持K,M,G,如果想给此分区分配100M空间,就输入+100M;如果要分配100G那么就输入+100G
Using default value 130541                    #结束分区的位置

Command (m for help): w                #w为写入分区信息并保存,然后退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
  • 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.

查看刚刚分区的信息:/dev/sdb1

[root@backup ~]# fdisk -l
Disk /dev/sda: 1073.7 GB, 1073741824000 bytes
255 heads, 63 sectors/track, 130541 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00040b96
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        1070     8388608   82  Linux swap / Solaris
/dev/sda3            1070       13055    96263168   83  Linux
Disk /dev/sdb: 1073.7 GB, 1073741824000 bytes
255 heads, 63 sectors/track, 130541 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc6e44e94
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1      130541  1048570551   83  Linux
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

格式化分区:mkfs.ext4 /dev/sdb1

[root@backup ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536000 inodes, 262142637 blocks
13107131 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
8000 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
        102400000, 214990848
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: 
done
This filesystem will be automatically checked every 26 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.

挂载分区:

[root@backup backup]# mkdir /backup
[root@backup backup]# mount /dev/sdb1 /backup/
[root@backup backup]# df -hT
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/sda3      ext4    91G  2.2G   84G   3% /
tmpfs          tmpfs  1.9G     0  1.9G   0% /dev/shm
/dev/sda1      ext4   190M   38M  142M  21% /boot
/dev/sdb1      ext4   985G   72M  935G   1% /backup
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

挂载磁盘:(永久挂载)

通过vi编辑器编辑/etc/fstab文件,内容如下,(最后一行是刚添加上去的):

 

[root@backup ~]# cat /etc/fstab 
#
# /etc/fstab
# Created by anaconda on Mon May 14 02:01:11 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=7d223255-1b77-4f58-bd72-262928547fcf /                       ext4    defaults        1 1
UUID=284d6b31-8723-497b-bc7b-3c12ede23ee6 /boot                   ext4    defaults        1 2
UUID=5d36c1b3-df6e-480d-80ca-72befc66f5e9 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/sdb1                   /backup                 ext4    defaults        0 0
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

 

第四列挂载参数:通过查看man mount 来查看

第五列是否要备份:(0为不备份,1为要备份,一般情况下不用做备份)

第六列自检程序  (0为不自检,1或2为要自检,如果是根分区要设置1,其它分区只能是2)

[root@backup ~]# echo backup >/backup/backup.txt
[root@backup ~]# cat /backup/backup.txt 
backup
  • 1.
  • 2.
  • 3.

此时机器不关机,用vmware vspere client扩容磁盘大小。

[root@backup ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 1073.7 GB, 1073741824000 bytes
255 heads, 63 sectors/track, 130541 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc6e44e94
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1      130541  1048570551   83  Linux
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

此时发现扩容的磁盘容量看不到,所以还是重启一下吧,建议关机时候再扩容。

[root@backup ~]# umount /dev/sdb1    #取消挂载
[root@backup ~]# fdisk /dev/sdb    
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').
Command (m for help): p
Disk /dev/sdb: 1181.1 GB, 1181116006400 bytes
255 heads, 63 sectors/track, 143595 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc6e44e94
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1      130541  1048570551   83  Linux
Command (m for help): d        #因为此磁盘只有一个分区sdb1,所以按d删除时候默认不会让选择要删除的分区,如果有多个分区会提示要删除的分区。
Selected partition 1
Command (m for help): p        #打印当前分区,发现分区已删除
Disk /dev/sdb: 1181.1 GB, 1181116006400 bytes
255 heads, 63 sectors/track, 143595 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc6e44e94
   Device Boot      Start         End      Blocks   Id  System
Command (m for help): n        #新建分区
Command action
   e   extended
   p   primary partition (1-4)
p                                #新建主分区
Partition number (1-4): 1        #和扩容前的分区标号必须一样
First cylinder (1-143595, default 1):     #默认是1,比如要和扩容前的分区其实点一样,扩容前的分区起始也是1,这个是扩容的重点地方。
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-143595, default 143595): #终止的位置是默认是硬盘柱体的尾部,即使最大值,这个是要扩容的点,回车。
Using default value 143595
Command (m for help): w                           #w报错,并退出。
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
  • 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.

3、调整分区

e2fsck -f /dev/sdb1 #检查分区信息

resize2fs /dev/sdb1 #调整分区大小

 

[root@backup ~]# e2fsck -f /dev/sdb1    #由于磁盘容量很大,数据多的情况下需要等待一段时间
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sdb1: 12/65536000 files (0.0% non-contiguous), 4164250/262142637 blocks
[root@backup ~]# resize2fs /dev/sdb1     #由于磁盘容量很大,数据多的情况下需要等待一段时间
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/sdb1 to 288356701 (4k) blocks.
The filesystem on /dev/sdb1 is now 288356701 blocks long.
[root@backup ~]# mount /dev/sdb1 /backup/
[root@backup ~]# cat /backup/
backup.txt  lost+found/ 
[root@backup ~]# cat /backup/backup.txt 
backup
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

发现扩容成功,扩容前的内容没有丢失。

参考内容:

https://blog.csdn.net/wuweilong/article/details/7538634

https://blog.csdn.net/jackyu651/article/details/53070607

https://blog.csdn.net/a746742897/article/details/52689285

shell脚本–设置定期自动备份日志文件

 

Hlroliu

每周五23:50自动备份/var/log下的所有日志文件到/root/Backup目录下 ,并以日期命名;

#vim backup.sh
[ -d /root/Backup ] && echo “Backup is ready” || mkdir /root/Backup > /dev/null

#先判断备份文件保存目录是否存在,不存在则创建
tar -czfP /root/Backup/log-`date +%Y%m%d`.tar.gz /var/log

## tar默认为相对路径,可以使用-P参数使用绝对路径
##保存并退出脚本,编写计划任务,以下命令在系统命令界面设置

#chmod +x /root/backup.sh #添加可执行权限
#crontab -e
30 23 * * 5 /root/backup.sh
每天备份前一天的日志,保留30天日志并定期清理30天前的备份日志

vim logbak.sh
#!/bin/bash
#获取备份的前一天时间
DAY=`TZ=”TAIST+16″ date +%Y-%m-%d`
#备份前一天的日志文件
tar cvf /u01/mics/log_archive/$DAY.tar /u01/mics/log/$DAY /u01/mics/log/*.log
gzip -r /u01/mics/log_archive/$DAY.tar
#清除备份目录下30天前的备份文件
find /u01/mics/log_archive/ -mtime +30 -exec rm -rf {} \;

#设定计划任务。每天00:30备份昨天的日志
crontab -e
30 00 * * * sh /u01/mics/baklog
————————————————
版权声明:本文为CSDN博主「Hlroliu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Hlroliu/article/details/102751788

Linux 定时执行shell 脚本

spearhead_cai

于 2019-12-30 13:30:00 发布

5965
收藏 29
版权
2019年第 85 篇文章,总第 109 篇文章

本文大约2000字,阅读大约需要6分钟

crontab 可以在指定的时间执行一个shell脚本以及执行一系列 Linux 命令。

定时执行shell 脚本
简单给出执行 shell 脚本的步骤。

首先是编写一个测试脚本–test.sh

# 创建脚本
$ vim test.sh
# 在脚本中做写入文件操作
date >> data.txt
修改脚本的权限,确保脚本有执行的权限

chmod 777 test.sh
设置 crontab 定时任务

# 打开定时任务配置文件
crontab -e
# 在配置文件中写入定时任务的操作, 这里就是指定每天12点定时执行脚本,并把执行脚本的日志写入文件 test.log
0 12 * * * sh test.sh > test.log
保存退出,也就是 :wq

如果有错,linux 会在执行的时候发送一份邮件给你

cat /var/spool/mail/root
注意:

crontab 是运行在系统默认环境里,如果运行的脚本是执行 python 代码,即脚本的内容可能是:

python test.py
这里的 python 会是系统默认的 python 版本,而如果你是运行在 conda 环境里,那么这里就需要采用当前环境里 python 版本的执行文件的绝对路径,即先用以下命令查找当前 python 版本的执行文件位置:

$ which python
# 假设输出的文件位置为:
/root/anaconda3/py3/bin/python
这里输出的路径,直接替换脚本里的 python:

/root/anaconda3/py3/bin/python test.py
这样才能保证运行不出错,否则可能因为版本问题出错;

crontab命令详解
常用命令
crontab –e //修改 crontab 文件,如果文件不存在会自动创建。
crontab –l //显示 crontab 文件。
crontab -r //删除 crontab 文件。
crontab -ir //删除 crontab 文件前提醒用户。

service crond status //查看crontab服务状态
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
所以如果需要取消某个定时任务,就是可以删除在配置文件中的对应命令,即 crontab -e 打开文件,然后删除对应哪行的命令即可

基本格式
*  *  *  *  *  command
分 时  日  月  周  命令
第1列表示分钟 00~59 每分钟用*或者 */1表示

第2列表示小时 00~23(0表示0点)

第3列表示日期 01~31

第4列表示月份 01~12

第5列标识号星期 0~6(0表示星期天)

第6列要运行的命令

此外每一列除了数字,还可以有这些符号,其含义如下所示:

* 代表任何时间,比如第一个 * 就代表一小时中的每分钟都执行
, 代表不连续的时间,比如 0 8,12,16 * * * 代表每天8,12,16点0分执行
– 代表连续的时间范围,比如0 5 * * 1-6 代表在周一到周六凌晨5点0分执行
*/n 代表每个多久执行一次,比如*/10 * * * *代表每隔10分钟执行一次
示例
1、在 凌晨00:10运行

10 0 * * * sh test.sh
2、每个工作日23:59都进行备份作业。

59 23 * * 1,2,3,4,5 sh test.sh
或者
59 23 * * 1-5 sh test.sh
3、每分钟运行一次命令

*/1 * * * * sh test.sh
4、每个月的1号 14:10 运行

10 14 1 * * sh test.sh
5、每10分钟定时请求一个地址

0 */10 * * * /usr/bin/curl http://www.aaa.com/index.php
注意,一般最好不要同时采用几号和每周几,可能会出现混淆;

正确、错误日志的输出是否写入到文件方法

1.不输出任何内容(建议使用方法一)

*/1 * * * * /root/XXXX.sh >/dev/null 2>&1

*/1 * * * * /root/XXXX.sh &>/dev/null //&表示任何内容
2.将正确和错误日志都输出到 /tmp/load.log

*/1 * * * * /root/XXXX.sh > /tmp/load.log 2>&1
3.只输出正确日志到 /tmp/load.log

*/1 * * * * /root/XXXX.sh > /tmp/load.log

*/1 * * * * /root/XXXX.sh 1> /tmp/load.log //1可以省略
4.只输出错误日志到 /tmp/load.log

*/1 * * * * /root/XXXX.sh 2> /tmp/load.log
部分解释:

/dev/null 代表空设备文件
> 代表重定向到哪里
1 表示stdout标准输出,系统默认值是1,所以”>/dev/null”等同于”1>/dev/null”
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1

————————————————
版权声明:本文为CSDN博主「spearhead_cai」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lc013/article/details/103775702

VMware下Linux根分区磁盘扩容

一、VMware虚拟机硬盘扩容
1、硬盘扩容
开启虚拟机前,打开VMware的虚拟机设置——硬盘——扩容——选择空间大小——确定。

sudo fdisk -l
1
可以看到新扩容的磁盘,但是使用下面命令看到磁盘是未分配状态

df -h
1
二、Linux分区挂载
1、分区
打开虚拟机,打开命令行,输入

sudo fdisk /dev/sda
1
命令(输入 m 获取帮助): m

添加新分区:n

此时,fdisk会让你选择添加为逻辑分区呢(编号从5开始)还是主分区(编号1到4)。 选择主分区,则键入p;选择逻辑分区键入l。

选择主分区:p

选择主分区的编号:enter(默认,如果有sda1,那就添加sda2,或sda3,sda4)

选择该分区的Start 值(start cylinder)和结束值;enter(默认全部使用)

保存所有并退出,分区划分完毕”:w

2、格式化分区
格式化指定的分区

mkfs -t ext3 /dev/sda3
1
或者

mkfs.ext3 /dev/sda3
1
3、挂载分区
手动挂载,则键入:

mount /dev/sda3 /home/work/
1
“表示将该新分区挂载到/home/user/up这个目录下面”

开机自动挂载,则修改/etc/fstab文件,在这个文件里面添加一行:

/dev/sda2 /home/user/up ext4 defaults 1 2
1
自动挂载方法二:

vim .bashrc

mount /dev/sda2 /home/user/up
或者(两者的区别未测试)
vim etc/profile
mount /dev/sda2 /home/user/up

reboot重启之后,你会发现有新的分区,但是需要将磁盘的权限打开即可:

sudo chmod 777 xxx
1
/etc/fstab是用来存放文件系统的静态信息的文件。位于/etc/目录下,可以用命令less /etc/fstab 来查看,如果要修改的话,则用命令 vi /etc/fstab 来修改。

当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。下面我来介绍如何在此文件下填写信息。

原文链接:https://blog.csdn.net/richerg85/article/details/17917129
————————————————
版权声明:本文为CSDN博主「WeSiGJ」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wesigj/article/details/115441326

linux扩展分区大小 centos7.6 (成功案例)

 1.先选中虚拟机,右击设置
VMware下Linux根分区磁盘扩容_虚拟机
2.选择添加->硬盘->下一步
VMware下Linux根分区磁盘扩容_卷组_02
3.一值点下一步,到设置容量大小,输入1,然后下一步,选择存储位置(一路下一步就搞定了)
4.最后确定,进入系统。df -h查看当前系统文件系统情况
VMware下Linux根分区磁盘扩容_扩容_03
5.使用fdisk -l查看硬盘情况,可以看见我新增的那块硬盘区间

VMware下Linux根分区磁盘扩容_PV_04
6.对新加的硬盘进行分区,格式化,因为我的磁盘名称是/dev/sdc,所以输入 fdisk /dev/sdc命令:

依次输入:m

n  添加新分区

p  创建为主分区,回车使用默认分区号

回车两次使用默认起始扇区和最后扇区
VMware下Linux根分区磁盘扩容_卷组_05
这里可以看见设置的类型是Linux类型,大小实际上不足1GB。但是我的根分区是Linux LVM类型的,所以还需要一次转换。
VMware下Linux根分区磁盘扩容_虚拟机_06
继续输入t,输入8e,回车。输入w,保存退出。
VMware下Linux根分区磁盘扩容_VG_07
这个时候再输入fdisk -l,就可以看见创建的分区了。
VMware下Linux根分区磁盘扩容_扩容_08
7.注意不要将新建的磁盘分区挂载到Linux的文件系统中,我们是要对/进行扩容,而不是添加一个区。顺便记录一下,挂载命令是mount /dev/sdc1 /指定位置空文件夹/。如果要开机自动挂载,需要修改/etc/fstab文件的内容,添加一行:/dev/sdc1 /挂载文件夹 ext4 defaults 0 0.挂载使用之前,需要将磁盘先格式化:mkfs.ext4 /dev/sdc1 格式化成ext4,同理ext3,2就是修改一下数字。
回归正题。

创建物理卷:pvcreate /dev/sdc1

查看当前卷组情况:vgdisplay
VMware下Linux根分区磁盘扩容_虚拟机_09
扩展卷组:CentOS:vgextend /dev/centos /dev/sdc1

再查看就会发现VG的大小增加了:
VMware下Linux根分区磁盘扩容_卷组_10
最后就是要扩展我们的根目录容量了:
VMware下Linux根分区磁盘扩容_虚拟机_11
根分区叫root,最后一级,centos是卷组名称,命令如下:

扩展逻辑卷centos-root的容量:lvextend -L +1024M /dev/centos/root
VMware下Linux根分区磁盘扩容_VG_12
可能会出现大小不够的情况,将1024稍微调小点就可以了。

重置根分区的容量:resize2fs /dev/centos/root.

注: 扩展卷组:CentOS:vgextend /dev/centos /dev/sdc1
之后发现VG size 增加后,扩容报错也可以使用下面自动扩展命令

xfs_growfs /dev/centos/root

 之后再df -h 查看已经扩容完成了。

Ubuntu 添加存储库

Ubuntu Add Repository

When installing packages using the Ubuntu Software Center or the command line utilities such as apt or apt-get the packages are downloaded from one or more apt software repositories. An APT repository is a network server or a local directory containing deb packages and metadata files that are readable by the APT tools.

While there are thousands of application available in the default Ubuntu repositories, sometimes you may need to install software from a 3rd party repository.

In this tutorial, we will show you two ways to add apt repository on Ubuntu and Debian systems. The first method is by using the add-apt-repository command and the second one is to manually add the repository using a text editor.

Apt Sources

On Ubuntu and all other Debian based distributions, the apt software repositories are defined in the /etc/apt/sources.list file or in separate files under the /etc/apt/sources.list.d/ directory.

The names of the repository files inside the /etc/apt/sources.list.d/ directory must end with .list.

The general syntax of the /etc/apt/sources.list file takes the following format:

deb http://repo.tld/ubuntu distro component...

  • The first entry in the line defines the type of the archive. The archive type can be either deb or deb-src. Deb implies that the repository contains .deb packages while deb-src implies source packages.
  • The second entry is the repository URL.
  • The third entry specifies the distribution code name, such as beaver, xenial and so on.
  • The last entries are the repository components or categories. The default Ubuntu repositories are split into four components – main, restricted, universe and multiverse. Generally, third-party repositories have only one category.

The format for the files under the /etc/apt/sources.list.d/ directory is the same as for the regular sources.list file.

Most repositories are providing a public key to authenticate downloaded packages which need to be downloaded and imported.

To be able to add or remove a repository you need to be logged in as either a user with sudo access or root.

Usually, the instructions about how to enable a certain repository are included in the software documentation.

Installing add-apt-repository (add-apt-repository command not found )

add-apt-repository is a Python script that allows you to add an APT repository to either /etc/apt/sources.list or to a separate file in the /etc/apt/sources.list.d directory. The command can also be used to remove an already existing repository.

If the add-apt-repository is not available on your system you will get an error message saying “add-apt-repository command not found”.

The add-apt-repository utility is included in the software-properties-common package. To install it run the following commands:

sudo apt updatesudo apt install software-properties-common

Adding Repositories with add-apt-repository

The basic syntax of the add-apt-repository command is as follows:

add-apt-repository [options] repository

Where repository can be either a regular repository entry that can be added to the sources.list file like deb http://repo.tld/ubuntu distro component or a PPA repository in the ppa:<user>/<ppa-name> format.

To see all available options of the add-apt-repository command type man add-apt-repository in your terminal.

By default, on ubuntu 18.04 and newer the add-apt-repository will also update the package index if the repository public key is imported.

The package index is a database that holds records of available packages from the repositories enabled in your system.

Let’s say you want to install MongoDB from their official repositories.

 

First import the repository public key:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4

Add the MongoDB repository using the command below.

sudo add-apt-repository 'deb [arch=amd64] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse'

The repository will be appended to sources.list file.

You can now install any of the packages from the newly enabled repository:

sudo apt install mongodb-org

If for any reasons you want to remove a previously enabled repository, use the --remove option:

sudo add-apt-repository --remove 'deb [arch=amd64] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse'

Adding PPA Repositories

Personal Package Archives (PPA) is a service that allows users to upload Ubuntu source packages that are built and published with Launchpad as an apt repository.

When adding a PPA repository the add-apt-repository command creates a new file under the /etc/apt/sources.list.d/ directory.

For example, to add the Jonathon F’s PPA which provides FFmpeg version 4.x you would run:

sudo add-apt-repository ppa:jonathonf/ffmpeg-4

When prompted press Enter an the repository will be enabled.

Press [ENTER] to continue or Ctrl-c to cancel adding it.

The PPA repository public key will be automatically downloaded and registered.

Once the PPA is added to your system you can install the repository packages:

sudo apt install ffmpeg

The apt command will install the package and all its dependencies.

Manually Adding Repositories

If you want to have more control over how your sources are organized you can manually edit the /etc/apt/sources.list file and add the apt repository line to the file.

For demonstration, we will enable the CouchDB repository and install the software. CouchDB is a free and open-source fault-tolerant NoSQL database maintained by the Apache Software Foundation.

To add the repository open the sources.list file with your text editor :

sudo nano /etc/apt/sources.list

Add the repository line to the end of the file:

/etc/apt/sources.list
deb https://apache.bintray.com/couchdb-deb bionic main

Instead of editing the file with a text editor you can use the following command to append the repository line to the sources.list file:

echo "deb https://apache.bintray.com/couchdb-deb $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list

$(lsb_release -cs) will print the Ubuntu codename. For example, if you have Ubuntu version 18.04 the command will print bionic.

Another option is to create a new the repository file under the /etc/apt/sources.list.d/ directory.

When manually configuring a repository you also need to manually import the public repository key to your system. To do that use either wget or curl :

curl -L https://couchdb.apache.org/repo/bintray-pubkey.asc | sudo apt-key add -

The command above should output OK which means that the GPG key has been successfully imported and packages from this repository will be considered trusted.

Before installing the packages from the newly added repository you must update the package index:

sudo apt update

Once the package index is updated you can install packages from the newly added repository:

sudo apt install couchdb

Conclusion

We have shown you how to add apt repositories in Ubuntu. The same instructions apply any Debian based distribution, including Kubuntu, Linux Mint and Elementary OS.

Feel free to leave a comment if you have any questions.

GOOGLE翻译
==========================================================================

使用 Ubuntu 软件中心或命令行实用程序(如 apt 或 apt-get)安装软件包时,软件包是从一个或多个 apt 软件存储库下载的。 APT 存储库是一个网络服务器或本地目录,其中包含可由 APT 工具读取的 deb 包和元数据文件。

虽然默认 Ubuntu 存储库中有数千个应用程序可用,但有时您可能需要从 3rd 方存储库安装软件。

在本教程中,我们将向您展示在 Ubuntu 和 Debian 系统上添加 apt 存储库的两种方法。第一种方法是使用 add-apt-repository 命令,第二种方法是使用文本编辑器手动添加存储库。

适当的来源
在 Ubuntu 和所有其他基于 Debian 的发行版上,apt 软件存储库在 /etc/apt/sources.list 文件或 /etc/apt/sources.list.d/ 目录下的单独文件中定义。

/etc/apt/sources.list.d/ 目录中的存储库文件的名称必须以 .list 结尾。

/etc/apt/sources.list 文件的一般语法采用以下格式:

deb http://repo.tld/ubuntu 发行版组件…
复制
行中的第一个条目定义存档的类型。归档类型可以是 deb 或 deb-src。 Deb 表示存储库包含 .deb 包,而 deb-src 表示源包。
第二个条目是存储库 URL。
第三个条目指定分发代码名称,例如beaver、xenial等。
最后的条目是存储库组件或类别。默认的 Ubuntu 存储库分为四个组件 – main、restricted、universe 和 multiverse。通常,第三方存储库只有一个类别。
/etc/apt/sources.list.d/ 目录下的文件格式与常规 sources.list 文件的格式相同。

大多数存储库都提供了一个公钥来验证需要下载和导入的下载包。

为了能够添加或删除存储库,您需要以具有 sudo 访问权限的用户或 root 用户身份登录。

通常,有关如何启用某个存储库的说明包含在软件文档中。

安装 add-apt-repository (add-apt-repository command not found )
add-apt-repository 是一个 Python 脚本,允许您将 APT 存储库添加到 /etc/apt/sources.list 或 /etc/apt/sources.list.d 目录中的单独文件。该命令还可用于删除已经存在的存储库。

如果您的系统上没有 add-apt-repository,您将收到一条错误消息,提示“找不到 add-apt-repository 命令”。

add-apt-repository 实用程序包含在 software-properties-common 包中。要安装它,请运行以下命令:

sudo apt 更新
sudo apt install software-properties-common
复制复制
使用 add-apt-repository 添加存储库
add-apt-repository 命令的基本语法如下:

add-apt-repository [选项] 存储库
复制
其中存储库可以是可以添加到 sources.list 文件(如 deb http://repo.tld/ubuntu 发行版组件)的常规存储库条目,也可以是 ppa:<user>/<ppa-name> 格式的 PPA 存储库.

要查看 add-apt-repository 命令的所有可用选项,请在终端中键入 man add-apt-repository。

默认情况下,在 ubuntu 18.04 和更新版本上,如果存储库公钥被导入,add-apt-repository 也会更新包索引。

包索引是一个数据库,它保存系统中启用的存储库中可用包的记录。

假设您想从他们的官方存储库安装 MongoDB。

首先导入存储库公钥:

sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv 9DA31620334BD75D9DCB49F368818C72E52529D4
复制
使用以下命令添加 MongoDB 存储库。

sudo add-apt-repository ‘deb [arch=amd64] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse’
复制
存储库将附加到 sources.list 文件。

您现在可以从新启用的存储库安装任何软件包:

sudo apt install mongodb-org
复制
如果出于任何原因要删除以前启用的存储库,请使用 –remove 选项:

sudo add-apt-repository –remove ‘deb [arch=amd64] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse’
复制
添加 PPA 存储库
Personal Package Archives (PPA) 是一项服务,允许用户上传使用 Launchpad 作为 apt 存储库构建和发布的 Ubuntu 源包。

添加 PPA 存储库时,add-apt-repository 命令会在 /etc/apt/sources.list.d/ 目录下创建一个新文件。

例如,要添加提供 FFmpeg 版本 4.x 的 Jonathon F 的 PPA,您将运行:

sudo add-apt-repository ppa:jonathonf/ffmpeg-4
复制
出现提示时按 Enter 将启用存储库。

按 [ENTER] 继续或 Ctrl-c 取消添加。
复制
PPA 存储库公钥将是自动的

mint和manjaro哪个稳定?

我感觉都好,两个我都用过,Debian系列很出名的两个系统就是Ubuntu和mint。Redhat系列很出名的两个系统是CentOS和Fedora。

然后就是Arch Linux系列了,优秀的archlinux衍生系统就要数Manjaro了,之前用过好一段时间的manjaro,manjaro有好多的桌面,有kde桌面,gnome桌面,xfce桌面等等,个人更喜欢kde。我还装过安装过程困难的Arch Linux。

我个人觉得Arch Linux比Redhat和Debian系列都好,有以下几点:第一,Arch的包管理,第二,Arch有用户社区(就是AUR)开发的很多东西,基本上你需要的,都有,第三,Arch和Manjaro,你可以用到最新的Linux内核,Linux内核目前都5.2了,而其他Linux一般都还是4.X的版本,有的甚至是3.X的版本,第四,Arch的官方文档(就是Archwiki)吊打其他所有Linux的文档。

Arch的缺点就是滚动更新,经常会滚挂,所以manjaro是一个很好的替代方案,基于Arch开发的manjaro很优秀,我建议你选manjaro。

这些图你好好研究研究吧,很有用的,图中介绍了整个操作系统的由来。

Google Drive网盘文件直链获取一键脚本

这篇文章主要向大家介绍Google Drive网盘文件直链获取一键脚本,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

 

说明:本脚本能够将Google Drive网盘的文件分享连接或者文件ID变成直链,方便咱们在不少状况下调用。只支持文件分享,不支持文件夹。文件分享ID2648位。nginx

使用

一、需求shell

wget、grep、cat、head  #系统通常都有,Centos 7可能要安装wget

二、下载脚本bash

wget --no-check-certificate -qO /usr/local/bin/gdlink 'https://www.moerats.com/usr/shell/gdlink.sh' && chmod a+x /usr/local/bin/gdlink 

三、使用方法
注意: 获取的分享连接权限为”知道连接的任何人“。app

#Work with share link/使用分享连接方式
gdlink 'https://drive.google.com/open?id=0B8SvBXZ3I5QMcUduTMJEanRkMzQ'

#Work with file id/使用文件ID方式
gdlink '0B8SvBXZ3I5QMcUduTMJEanRkMzQ'
 
#download with share link/使用分享连接方式直接使用wget下载连接
##可将其中./download改为本身须要的文件名或文件绝对路径
gdlink 'https://drive.google.com/open?id=0B8SvBXZ3I5QMcUduTMJEanRkMzQ' |xargs -n1 wget -c -O ./download

 

四、调用场景
好比该DD教程:Linux VPS无限制一键全自动DD安装Windows脚本。工具

先获取到谷歌网盘里的DD镜像连接google

https://drive.google.com/open?id=0B8SvBXZ3I5QMcUduTMJEanRkMzQ

调用该分享连接。(将文件ID替换为本身的便可)spa

#Work with share link/使用分享连接方式
bash DebianNET.sh -dd "$(echo "https://drive.google.com/open?id=0B8SvBXZ3I5QMcUduTMJEanRkMzQ" |xargs -n1 bash <(wget --no-check-certificate -qO- 'https://moeclub.org/attachment/LinuxShell/gdlink.sh'))"
 
#Work with file id/使用文件ID方式
bash DebianNET.sh -dd "$(echo "0B8SvBXZ3I5QMcUduTMJEanRkMzQ" |xargs -n1 bash <(wget --no-check-certificate -qO- 'https://moeclub.org/attachment/LinuxShell/gdlink.sh'))"

 

网盘直链获取工具也能够参考下面的网址3d

https://link.gimhoy.com/code

 
实例下载:

[root@iZj6c9ev4k7bawyw8s7nljZ ~]# wget https://link.gimhoy.com/googledrive/aHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2thZ2dsZS1kYXRhc2V0cy8xMzk2MzAvMzI5MDA2L2Zhc2hpb24tcHJvZHVjdC1pbWFnZXMtZGF0YXNldC56aXA/R29vZ2xlQWNjZXNzSWQ9d2ViLWRhdGFAa2FnZ2xlLTE2MTYwNy5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSZFeHBpcmVzPTE1NTk4MDExMzImU2lnbmF0dXJlPVpSY1psUmdCYmRCVWViMGU3dGJQYnFXYmt5azFIUGNIZ1NGSGNobGNlVTBmdlJqell6bnQyVGhQQ0xNbmgzSUJZdDdOQ2U0dUtrbUJuN1Y2YzJIdVFBMzFPZ2pyT3ZhSkM5VnlscHZOQ1VVV1ZYYkJFZ2RKVzFMVTBjQzFnS2JUSnFIMG1wbGEzRnkwYktwaEZVZnp4TGtGbGZST3o2JTJGMlVET0F3c2tyUWtVT2FhMlcwd0JCaDdvWDl6WWpZSU15Nnh4M0FvMDFoM3pnNEpQSDQ0UE4yazdPUEcwU1RMZDVEME5CZnpHOXpYVjk2OWwlMkJ4d28zQnBuN1NQdk5vVkNKZERWbG5rY2N3WThKQWVaM0dlZFpWYURMdjVMRnJ1bXRNM08lMkZGOXRZM2pGRFVidUU4VklZTXBIMXJMbnZBcWdWaFRmUHR3ZEx0cmpxWHlKOGxOS0NEZyUzRCUzRA==.zip -c -O ./dataset.zip




[root@iZj6c9ev4k7bawyw8s7nljZ ~]# wget --no-check-certificate -qO /usr/local/bin/gdlink 'https://www.moerats.com/usr/shell/gdlink.sh' && chmod a+x /usr/local
[root@iZj6c9ev4k7bawyw8s7nljZ ~]#  gdlink 'https://drive.google.com/open?id=1lQZOIkO-9L0QJuk_w1K8-tRuyno-KvLK' |xargs -n1 wget -c -O ./train.zip
Warning: wildcards not supported in HTTP.
--2019-06-03 14:18:02--  https://doc-0c-4o-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/me71dile70q5qah4h97fnk7otq9tsnto/1559541ad
Resolving doc-0c-4o-docs.googleusercontent.com (doc-0c-4o-docs.googleusercontent.com)... 216.58.220.193, 2404:6800:4005:80d::2001
Connecting to doc-0c-4o-docs.googleusercontent.com (doc-0c-4o-docs.googleusercontent.com)|216.58.220.193|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: ‘./train.zip’

    [                         <=>                                                                                    ] 10,633,411,064 12.2MB/s   in 13m 49s/s

2019-06-03 14:31:51 (12.2 MB/s) - ‘./train.zip’ saved [10633411064]

 

 

frp安装配置内网穿透最佳方案

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。GitHub地址

使用示例

根据对应的操作系统及架构,从 Release 页面下载最新版本的程序。

将 frps 及 frps.ini 放到具有公网 IP 的机器上。

将 frpc 及 frpc.ini 放到处于内网环境的机器上。

通过 ssh 访问公司内网机器

  1. 修改 frps.ini 文件,这里使用了最简化的配置:

 

# frps.ini
[common]
bind_port = 7000
  1. 启动 frps:

./frps -c ./frps.ini

  1. 修改 frpc.ini 文件,假设 frps 所在服务器的公网 IP 为 x.x.x.x;

 

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
  1. 启动 frpc:

./frpc -c ./frpc.ini

  1. 通过 ssh 访问内网机器,假设用户名为 test:

ssh -oPort=6000 test@x.x.x.x

通过自定义域名访问部署于内网的 web 服务

有时想要让其他人通过域名访问或者测试我们在本地搭建的 web 服务,但是由于本地机器没有公网 IP,无法将域名解析到本地的机器,通过 frp 就可以实现这一功能,以下示例为 http 服务,https 服务配置方法相同, vhost_http_port 替换为 vhost_https_port, type 设置为 https 即可。

  1. 修改 frps.ini 文件,设置 http 访问端口为 8080:

 

# frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080
  1. 启动 frps;

./frps -c ./frps.ini

  1. 修改 frpc.ini 文件,假设 frps 所在的服务器的 IP 为 x.x.x.x,local_port 为本地机器上 web 服务对应的端口, 绑定自定义域名 www.yourdomain.com:

 

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[web]
type = http
local_port = 80
custom_domains = www.yourdomain.com
  1. 启动 frpc:

./frpc -c ./frpc.ini

  1. 将 www.yourdomain.com 的域名 A 记录解析到 IP x.x.x.x,如果服务器已经有对应的域名,也可以将 CNAME 记录解析到服务器原先的域名。
  2. 通过浏览器访问 http://www.yourdomain.com:8080 即可访问到处于内网机器上的 web 服务。

转发 DNS 查询请求

DNS 查询请求通常使用 UDP 协议,frp 支持对内网 UDP 服务的穿透,配置方式和 TCP 基本一致。

  1. 修改 frps.ini 文件:

 

# frps.ini
[common]
bind_port = 7000
  1. 启动 frps:

./frps -c ./frps.ini

  1. 修改 frpc.ini 文件,设置 frps 所在服务器的 IP 为 x.x.x.x,转发到 Google 的 DNS 查询服务器 8.8.8.8 的 udp 53 端口:

 

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[dns]
type = udp
local_ip = 8.8.8.8
local_port = 53
remote_port = 6000
  1. 启动 frpc:

./frpc -c ./frpc.ini

  1. 通过 dig 测试 UDP 包转发是否成功,预期会返回 www.google.com 域名的解析结果:

dig @x.x.x.x -p 6000 www.google.com

转发 Unix域套接字

通过 tcp 端口访问内网的 unix域套接字(例如和 docker daemon 通信)。

frps 的部署步骤同上。

  1. 启动 frpc,启用 unix_domain_socket 插件,配置如下:

 

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[unix_domain_socket]
type = tcp
remote_port = 6000
plugin = unix_domain_socket
plugin_unix_path = /var/run/docker.sock
  1. 通过 curl 命令查看 docker 版本信息

curl http://x.x.x.x:6000/version

对外提供简单的文件访问服务

通过 static_file 插件可以对外提供一个简单的基于 HTTP 的文件访问服务。

frps 的部署步骤同上。

  1. 启动 frpc,启用 static_file 插件,配置如下:

 

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[test_static_file]
type = tcp
remote_port = 6000
plugin = static_file
# 要对外暴露的文件目录
plugin_local_path = /tmp/file
# 访问 url 中会被去除的前缀,保留的内容即为要访问的文件路径
plugin_strip_prefix = static
plugin_http_user = abc
plugin_http_passwd = abc
  1. 通过浏览器访问 http://x.x.x.x:6000/static/ 来查看位于 /tmp/file 目录下的文件,会要求输入已设置好的用户名和密码。

为本地 HTTP 服务启用 HTTPS

通过 https2http 插件可以让本地 HTTP 服务转换成 HTTPS 服务对外提供。

  1. 启用 frpc,启用 https2http 插件,配置如下:

 

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[test_htts2http]
type = https
custom_domains = test.yourdomain.com

plugin = https2http
plugin_local_addr = 127.0.0.1:80

# HTTPS 证书相关的配置
plugin_crt_path = ./server.crt
plugin_key_path = ./server.key
plugin_host_header_rewrite = 127.0.0.1
  1. 通过浏览器访问 https://test.yourdomain.com 即可。

安全地暴露内网服务

对于某些服务来说如果直接暴露于公网上将会存在安全隐患。

使用 stcp(secret tcp) 类型的代理可以避免让任何人都能访问到要穿透的服务,但是访问者也需要运行另外一个 frpc。

以下示例将会创建一个只有自己能访问到的 ssh 服务代理。

frps 的部署步骤同上。

  1. 启动 frpc,转发内网的 ssh 服务,配置如下,不需要指定远程端口:

 

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[secret_ssh]
type = stcp
# 只有 sk 一致的用户才能访问到此服务
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
  1. 在要访问这个服务的机器上启动另外一个 frpc,配置如下:

 

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[secret_ssh_visitor]
type = stcp
# stcp 的访问者
role = visitor
# 要访问的 stcp 代理的名字
server_name = secret_ssh
sk = abcdefg
# 绑定本地端口用于访问 ssh 服务
bind_addr = 127.0.0.1
bind_port = 6000
  1. 通过 ssh 访问内网机器,假设用户名为 test:

ssh -oPort=6000 test@127.0.0.1

点对点内网穿透

frp 提供了一种新的代理类型 xtcp 用于应对在希望传输大量数据且流量不经过服务器的场景。

使用方式同 stcp 类似,需要在两边都部署上 frpc 用于建立直接的连接。

目前处于开发的初级阶段,并不能穿透所有类型的 NAT 设备,所以穿透成功率较低。穿透失败时可以尝试 stcp 的方式。

  1. frps 除正常配置外需要额外配置一个 udp 端口用于支持该类型的客户端:

 

bind_udp_port = 7001
  1. 启动 frpc,转发内网的 ssh 服务,配置如下,不需要指定远程端口:

 

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[p2p_ssh]
type = xtcp
# 只有 sk 一致的用户才能访问到此服务
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
  1. 在要访问这个服务的机器上启动另外一个 frpc,配置如下:

 

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[p2p_ssh_visitor]
type = xtcp
# xtcp 的访问者
role = visitor
# 要访问的 xtcp 代理的名字
server_name = p2p_ssh
sk = abcdefg
# 绑定本地端口用于访问 ssh 服务
bind_addr = 127.0.0.1
bind_port = 6000
  1. 通过 ssh 访问内网机器,假设用户名为 test:

ssh -oPort=6000 test@127.0.0.1

功能说明

配置文件

由于 frp 目前支持的功能和配置项较多,未在文档中列出的功能可以从完整的示例配置文件中发现。

frps 完整配置文件

frpc 完整配置文件

配置文件模版渲染

配置文件支持使用系统环境变量进行模版渲染,模版格式采用 Go 的标准格式。

示例配置如下:

 

# frpc.ini
[common]
server_addr = {{ .Envs.FRP_SERVER_ADDR }}
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = {{ .Envs.FRP_SSH_REMOTE_PORT }}

启动 frpc 程序:

 

export FRP_SERVER_ADDR="x.x.x.x"
export FRP_SSH_REMOTE_PORT="6000"
./frpc -c ./frpc.ini

frpc 会自动使用环境变量渲染配置文件模版,所有环境变量需要以 .Envs 为前缀。

Dashboard

通过浏览器查看 frp 的状态以及代理统计信息展示。

注:Dashboard 尚未针对大量的 proxy 数据展示做优化,如果出现 Dashboard 访问较慢的情况,请不要启用此功能。

需要在 frps.ini 中指定 dashboard 服务使用的端口,即可开启此功能:

 

[common]
dashboard_port = 7500
# dashboard 用户名密码,默认都为 admin
dashboard_user = admin
dashboard_pwd = admin

打开浏览器通过 http://[server_addr]:7500 访问 dashboard 界面,用户名密码默认为 admin

[图片上传失败…(image-1164e2-1562577679203)]

Admin UI

Admin UI 可以帮助用户通过浏览器来查询和管理客户端的 proxy 状态和配置。

需要在 frpc.ini 中指定 admin 服务使用的端口,即可开启此功能:

 

[common]
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin

打开浏览器通过 http://127.0.0.1:7400 访问 Admin UI,用户名密码默认为 admin

如果想要在外网环境访问 Admin UI,将 7400 端口映射出去即可,但需要重视安全风险。

身份验证

服务端和客户端的 common 配置中的 token 参数一致则身份验证通过。

加密与压缩

这两个功能默认是不开启的,需要在 frpc.ini 中通过配置来为指定的代理启用加密与压缩的功能,压缩算法使用 snappy:

 

# frpc.ini
[ssh]
type = tcp
local_port = 22
remote_port = 6000
use_encryption = true
use_compression = true

如果公司内网防火墙对外网访问进行了流量识别与屏蔽,例如禁止了 ssh 协议等,通过设置 use_encryption = true,将 frpc 与 frps 之间的通信内容加密传输,将会有效防止流量被拦截。

如果传输的报文长度较长,通过设置 use_compression = true 对传输内容进行压缩,可以有效减小 frpc 与 frps 之间的网络流量,加快流量转发速度,但是会额外消耗一些 cpu 资源。

TLS

从 v0.25.0 版本开始 frpc 和 frps 之间支持通过 TLS 协议加密传输。通过在 frpc.ini 的 common 中配置 tls_enable = true 来启用此功能,安全性更高。

为了端口复用,frp 建立 TLS 连接的第一个字节为 0x17。

注意: 启用此功能后除 xtcp 外,不需要再设置 use_encryption。

客户端热加载配置文件

当修改了 frpc 中的代理配置,可以通过 frpc reload 命令来动态加载配置文件,通常会在 10 秒内完成代理的更新。

启用此功能需要在 frpc 中启用 admin 端口,用于提供 API 服务。配置如下:

 

# frpc.ini
[common]
admin_addr = 127.0.0.1
admin_port = 7400

之后执行重启命令:

frpc reload -c ./frpc.ini

等待一段时间后客户端会根据新的配置文件创建、更新、删除代理。

需要注意的是,[common] 中的参数除了 start 外目前无法被修改。

客户端查看代理状态

frpc 支持通过 frpc status -c ./frpc.ini 命令查看代理的状态信息,此功能需要在 frpc 中配置 admin 端口。

端口白名单

为了防止端口被滥用,可以手动指定允许哪些端口被使用,在 frps.ini 中通过 allow_ports 来指定:

 

# frps.ini
[common]
allow_ports = 2000-3000,3001,3003,4000-50000

allow_ports 可以配置允许使用的某个指定端口或者是一个范围内的所有端口,以 , 分隔,指定的范围以 - 分隔。

端口复用

目前 frps 中的 vhost_http_port 和 vhost_https_port 支持配置成和 bind_port 为同一个端口,frps 会对连接的协议进行分析,之后进行不同的处理。

例如在某些限制较严格的网络环境中,可以将 bind_port 和 vhost_https_port 都设置为 443。

后续会尝试允许多个 proxy 绑定同一个远端端口的不同协议。

TCP 多路复用

从 v0.10.0 版本开始,客户端和服务器端之间的连接支持多路复用,不再需要为每一个用户请求创建一个连接,使连接建立的延迟降低,并且避免了大量文件描述符的占用,使 frp 可以承载更高的并发数。

该功能默认启用,如需关闭,可以在 frps.ini 和 frpc.ini 中配置,该配置项在服务端和客户端必须一致:

 

# frps.ini 和 frpc.ini 中
[common]
tcp_mux = false

底层通信可选 kcp 协议

底层通信协议支持选择 kcp 协议,在弱网环境下传输效率提升明显,但是会有一些额外的流量消耗。

开启 kcp 协议支持:

  1. 在 frps.ini 中启用 kcp 协议支持,指定一个 udp 端口用于接收客户端请求:

 

# frps.ini
[common]
bind_port = 7000
# kcp 绑定的是 udp 端口,可以和 bind_port 一样
kcp_bind_port = 7000
  1. 在 frpc.ini 指定需要使用的协议类型,目前只支持 tcp 和 kcp。其他代理配置不需要变更:

 

# frpc.ini
[common]
server_addr = x.x.x.x
# server_port 指定为 frps 的 kcp_bind_port
server_port = 7000
protocol = kcp
  1. 像之前一样使用 frp,需要注意开放相关机器上的 udp 的端口的访问权限。

连接池

默认情况下,当用户请求建立连接后,frps 才会请求 frpc 主动与后端服务建立一个连接。当为指定的代理启用连接池后,frp 会预先和后端服务建立起指定数量的连接,每次接收到用户请求后,会从连接池中取出一个连接和用户连接关联起来,避免了等待与后端服务建立连接以及 frpc 和 frps 之间传递控制信息的时间。

这一功能比较适合有大量短连接请求时开启。

  1. 首先可以在 frps.ini 中设置每个代理可以创建的连接池上限,避免大量资源占用,客户端设置超过此配置后会被调整到当前值:

 

# frps.ini
[common]
max_pool_count = 5
  1. 在 frpc.ini 中为客户端启用连接池,指定预创建连接的数量:

 

# frpc.ini
[common]
pool_count = 1

负载均衡

可以将多个相同类型的 proxy 加入到同一个 group 中,从而实现负载均衡的功能。

目前只支持 tcp 类型的 proxy。

 

# frpc.ini
[test1]
type = tcp
local_port = 8080
remote_port = 80
group = web
group_key = 123

[test2]
type = tcp
local_port = 8081
remote_port = 80
group = web
group_key = 123

用户连接 frps 服务器的 80 端口,frps 会将接收到的用户连接随机分发给其中一个存活的 proxy。这样可以在一台 frpc 机器挂掉后仍然有其他节点能够提供服务。

要求 group_key 相同,做权限验证,且 remote_port 相同。

健康检查

通过给 proxy 加上健康检查的功能,可以在要反向代理的服务出现故障时,将这个服务从 frps 中摘除,搭配负载均衡的功能,可以用来实现高可用的架构,避免服务单点故障。

在每一个 proxy 的配置下加上 health_check_type = {type} 来启用健康检查功能。

type 目前可选 tcp 和 http。

tcp 只要能够建立连接则认为服务正常,http 会发送一个 http 请求,服务需要返回 2xx 的状态码才会被认为正常。

tcp 示例配置如下:

 

# frpc.ini
[test1]
type = tcp
local_port = 22
remote_port = 6000
# 启用健康检查,类型为 tcp
health_check_type = tcp
# 建立连接超时时间为 3 秒
health_check_timeout_s = 3
# 连续 3 次检查失败,此 proxy 会被摘除
health_check_max_failed = 3
# 每隔 10 秒进行一次健康检查
health_check_interval_s = 10

http 示例配置如下:

 

# frpc.ini
[web]
type = http
local_ip = 127.0.0.1
local_port = 80
custom_domains = test.yourdomain.com
# 启用健康检查,类型为 http
health_check_type = http
# 健康检查发送 http 请求的 url,后端服务需要返回 2xx 的 http 状态码
health_check_url = /status
health_check_interval_s = 10
health_check_max_failed = 3
health_check_timeout_s = 3

修改 Host Header

通常情况下 frp 不会修改转发的任何数据。但有一些后端服务会根据 http 请求 header 中的 host 字段来展现不同的网站,例如 nginx 的虚拟主机服务,启用 host-header 的修改功能可以动态修改 http 请求中的 host 字段。该功能仅限于 http 类型的代理。

 

# frpc.ini
[web]
type = http
local_port = 80
custom_domains = test.yourdomain.com
host_header_rewrite = dev.yourdomain.com

原来 http 请求中的 host 字段 test.yourdomain.com 转发到后端服务时会被替换为 dev.yourdomain.com

设置 HTTP 请求的 header

对于 type = http 的代理,可以设置在转发中动态添加的 header 参数。

 

# frpc.ini
[web]
type = http
local_port = 80
custom_domains = test.yourdomain.com
host_header_rewrite = dev.yourdomain.com
header_X-From-Where = frp

对于参数配置中所有以 header_ 开头的参数(支持同时配置多个),都会被添加到 http 请求的 header 中,根据如上的配置,会在请求的 header 中加上 X-From-Where: frp

获取用户真实 IP

HTTP X-Forwarded-For

目前只有 http 类型的代理支持这一功能,可以通过用户请求的 header 中的 X-Forwarded-For 来获取用户真实 IP,默认启用。

Proxy Protocol

frp 支持通过 Proxy Protocol 协议来传递经过 frp 代理的请求的真实 IP,此功能支持所有以 TCP 为底层协议的类型,不支持 UDP。

Proxy Protocol 功能启用后,frpc 在和本地服务建立连接后,会先发送一段 Proxy Protocol 的协议内容给本地服务,本地服务通过解析这一内容可以获得访问用户的真实 IP。所以不仅仅是 HTTP 服务,任何的 TCP 服务,只要支持这一协议,都可以获得用户的真实 IP 地址。

需要注意的是,在代理配置中如果要启用此功能,需要本地的服务能够支持 Proxy Protocol 这一协议,目前 nginx 和 haproxy 都能够很好的支持。

这里以 https 类型为例:

 

# frpc.ini
[web]
type = https
local_port = 443
custom_domains = test.yourdomain.com

# 目前支持 v1 和 v2 两个版本的 proxy protocol 协议。
proxy_protocol_version = v2

只需要在代理配置中增加一行 proxy_protocol_version = v2 即可开启此功能。

本地的 https 服务可以通过在 nginx 的配置中启用 Proxy Protocol 的解析并将结果设置在 X-Real-IP 这个 Header 中就可以在自己的 Web 服务中通过 X-Real-IP 获取到用户的真实 IP。

通过密码保护你的 web 服务

由于所有客户端共用一个 frps 的 http 服务端口,任何知道你的域名和 url 的人都能访问到你部署在内网的 web 服务,但是在某些场景下需要确保只有限定的用户才能访问。

frp 支持通过 HTTP Basic Auth 来保护你的 web 服务,使用户需要通过用户名和密码才能访问到你的服务。

该功能目前仅限于 http 类型的代理,需要在 frpc 的代理配置中添加用户名和密码的设置。

 

# frpc.ini
[web]
type = http
local_port = 80
custom_domains = test.yourdomain.com
http_user = abc
http_pwd = abc

通过浏览器访问 http://test.yourdomain.com,需要输入配置的用户名和密码才能访问。

自定义二级域名

在多人同时使用一个 frps 时,通过自定义二级域名的方式来使用会更加方便。

通过在 frps 的配置文件中配置 subdomain_host,就可以启用该特性。之后在 frpc 的 http、https 类型的代理中可以不配置 custom_domains,而是配置一个 subdomain 参数。

只需要将 *.{subdomain_host} 解析到 frps 所在服务器。之后用户可以通过 subdomain 自行指定自己的 web 服务所需要使用的二级域名,通过 {subdomain}.{subdomain_host} 来访问自己的 web 服务。

 

# frps.ini
[common]
subdomain_host = frps.com

将泛域名 *.frps.com 解析到 frps 所在服务器的 IP 地址。

 

# frpc.ini
[web]
type = http
local_port = 80
subdomain = test

frps 和 frpc 都启动成功后,通过 test.frps.com 就可以访问到内网的 web 服务。

注:如果 frps 配置了 subdomain_host,则 custom_domains 中不能是属于 subdomain_host 的子域名或者泛域名。

同一个 http 或 https 类型的代理中 custom_domains 和 subdomain 可以同时配置。

URL 路由

frp 支持根据请求的 URL 路径路由转发到不同的后端服务。

通过配置文件中的 locations 字段指定一个或多个 proxy 能够匹配的 URL 前缀(目前仅支持最大前缀匹配,之后会考虑正则匹配)。例如指定 locations = /news,则所有 URL 以 /news 开头的请求都会被转发到这个服务。

 

# frpc.ini
[web01]
type = http
local_port = 80
custom_domains = web.yourdomain.com
locations = /

[web02]
type = http
local_port = 81
custom_domains = web.yourdomain.com
locations = /news,/about

按照上述的示例配置后,web.yourdomain.com 这个域名下所有以 /news 以及 /about 作为前缀的 URL 请求都会被转发到 web02,其余的请求会被转发到 web01。

通过代理连接 frps

在只能通过代理访问外网的环境内,frpc 支持通过 HTTP PROXY 和 frps 进行通信。

可以通过设置 HTTP_PROXY 系统环境变量或者通过在 frpc 的配置文件中设置 http_proxy 参数来使用此功能。

仅在 protocol = tcp 时生效。

 

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
http_proxy = http://user:pwd@192.168.1.128:8080

范围端口映射

在 frpc 的配置文件中可以指定映射多个端口,目前只支持 tcp 和 udp 的类型。

这一功能通过 range: 段落标记来实现,客户端会解析这个标记中的配置,将其拆分成多个 proxy,每一个 proxy 以数字为后缀命名。

例如要映射本地 6000-6005, 6007 这6个端口,主要配置如下:

 

# frpc.ini
[range:test_tcp]
type = tcp
local_ip = 127.0.0.1
local_port = 6000-6006,6007
remote_port = 6000-6006,6007

实际连接成功后会创建 8 个 proxy,命名为 test_tcp_0, test_tcp_1 ... test_tcp_7

插件

默认情况下,frpc 只会转发请求到本地 tcp 或 udp 端口。

插件模式是为了在客户端提供更加丰富的功能,目前内置的插件有 unix_domain_sockethttp_proxysocks5static_file。具体使用方式请查看使用示例

通过 plugin 指定需要使用的插件,插件的配置参数都以 plugin_ 开头。使用插件后 local_ip 和 local_port 不再需要配置。

使用 http_proxy 插件的示例:

 

# frpc.ini
[http_proxy]
type = tcp
remote_port = 6000
plugin = http_proxy
plugin_http_user = abc
plugin_http_passwd = abc

plugin_http_user 和 plugin_http_passwd 即为 http_proxy 插件可选的配置参数。

frp安装配置之内网穿透最佳方案

补坑来了,上次写过cpolar实现免费的内网穿透,但是最大的问题在于免费版不能用自己的域名,毕竟是第三方提供的服务器,免费的都有限制,刚好自己有一台阿里云的云服务器,所以比较完美的方法是用开源的frp自己搭建一个内网穿透服务器,这样就可以用阿里云的公网ip绑定自己的域名了。
或许有人会问,既然已经有了公网服务器为啥还要内网穿透?毕竟公网服务器都比较贵啊,楼主的阿里云服务器一年将近700块,才2g内存,40g存储,如果把想要跑的服务都跑在上面,很快就熬不住了,不如就拿来做内网穿透服务器,就起个转发功能,自己家里买个树莓派,安装linux系统,就可以跑各种东西了,也不用担心存储的问题。Frp是一款流行的跨平台开源免费内网穿透反向代理应用,支持 Windows、macOS与 Linux,支持 TCP、UDP 协议,支持http 和 https 协议,在公网服务器安装一个server端,内网服务器安装一个客户端,起到一个中转转发的作用,从而实现内网暴露到外网,实际就是一个反向代理转发器。

服务器端安装配置 Frp

FRP 使用 Go 语言开发,可以支持 Windows、Linux、macOS、ARM 等多平台部署。FRP 安装非常容易,只需下载对应系统平台的软件包并解压就可用了。这里以 Linux 系统为例:

 

export FRP_VERSION=0.32.1
sudo mkdir -p /etc/frp
cd /etc/frp
sudo wget "https://github.com/fatedier/frp/releases/download/v${FRP_VERSION}/frp_${FRP_VERSION}_linux_amd64.tar.gz"
sudo tar xzvf frp_${FRP_VERSION}_linux_amd64.tar.gz
sudo mv frp_${FRP_VERSION}_linux_amd64/* /etc/frp

截止写这篇文章为止,github上的最新版本是0.32.1,如果以后出了更新的版本只要改一下上面的版本号就行了,可以去https://github.com/fatedier/frp/查看最新版本信息。

FRP 默认提供了 2 个服务端配置文件,一个是简化版的 frps.ini,另一个是完整版的 frps_full.ini。初学者只需用简版配置即可,在简版 frps.ini 配置文件里,默认设置了监听端口为 7000,可以按需修改它。

需要将服务器的系统防火墙安全组放行,设置 7000 或修改过的对应端口的「允许入站和出站」,否则会一直连接不上的哦!!!这个切记!!

启动 FRP 服务端(非后台启动,未配置开机自启的情况下)

 

./frps -c ./frps.ini

如服务器使用 Win 系统,假设解压到 c:\frp 文件夹,那么只需这样启动:

 

c:\frp\frps.exe -c c:\frp\frps.exe

当然,这样的启动一般测试可以,生产环境多数为后台启动,需要配置后台运行和开机自启

使用systemctl配置后台运行和开机自启

 

sudo vim /lib/systemd/system/frps.service

在frps.service里写入以下内容

 

[Unit]
Description=fraps service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
#启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/etc/frp/frps -c /etc/frp/frps.ini

[Install]
WantedBy=multi-user.target

启动frps

 

sudo systemctl start frps
#打开自启动
sudo systemctl enable frps

如果要重启应用,sudo systemctl restart frps
如果要停止应用,sudo systemctl stop frps
如果要查看应用的日志,sudo systemctl status frps

如果启动时7000端口被占用

 

#查看端口号 
netstat -anp|grep 7000

 

#查看端口号
lsof -i:7000

 

#查看程序进程 
ps -ef|grep frps

得到进程id(pid)之后,杀掉进程

 

kill -9 进程号

至此服务端安装完毕并已经启动

配置frp客户端(内网机器上)

可以将 Frp 客户端安装在内网的 Windows 电脑、Linux 设备 比如树莓派 或者 NAS,甚至部分路由器等设备上。Linux 客户端的安装和启动与服务器端没有太多区别,只是对应运行程序是 frpc 而不是 frps。

如果是linux设置,安装和设置重启过程这里就省略了,和上面一样的,如果是windows电脑,Frp 是绿色程序,下载软件包回来解压后,启动 frpc.exe 即可。

在启动前,我们需要先修改配置文件frpc.ini
比如服务器的公网ip是1.2.3.4.5

 

[common]
server_addr = 1.2.3.4.5
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 7001

[RDPDEEPIN]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7002

[RDPWINDOWS]
type = tcp
local_ip = 192.168.0.109
local_port = 3389
remote_port = 7004

[TOMCAT]
type = tcp
local_ip = 127.0.0.1
local_port = 8081
remote_port = 7003

如上,中括号里面的文字是标识,可以自定义,第一个server-port = 7000是服务器上的server端端口。
这里配置了四个应用,分别是
1.ssh远程登录22端口,映射公网的7001;
2.rdp协议的deepin桌面连接3389端口,映射公网的7002;
3.rdp协议的内网ip为192.168.0.109的windows3389端口,映射公网的7004;
4.tomcat应用,8081端口映射公网的7003

以上还可以配置更多端口,上面的7001到7004都要在服务器安全组放行

启动frp客户端

linux和上面写的服务端启动方法一样
windows假设已将 Frp 的客户端解压缩到 c:\frp 目录中,那么启动 Frp 客户端的命令就是:

 

c:\frp\frpc.exe -c c:\frp\frpc.ini

Linux 启动 Frp 客户端命令(非后台启动,未配置开机自启的情况下):

 

./frpc -c ./frpc.ini

启动之后看到 “start proxy success”字样就表示启动成功了。

远程访问

公网ip:7001就可以ssh连接到内网的deepin
公网ip:7002就可以rdp连接到内网的deepin桌面
公网ip:7004就可以rdp连接到内网的windows
公网ip或域名:7003就可以访问到内网的tomcat应用

这样真的就完美舒服了。

参考:https://www.iplaysoft.com/frp.html
https://blog.csdn.net/x7418520/article/details/81077652

Linux路由补完计划06 广告屏蔽就是这么简单——Pi-hole篇

前言


在上上期中我介绍了使用AdGuard Home来过滤广告的方法,今天我再推荐一款同样好用的本地DNS及广告过滤工具——Pi-hole,相比于AdGuard Home来说,Pi-hole诞生更早,一开始它是为树莓派开发的一款广告过滤工具,在许多开发者的努力下,它被发扬光大了,也正因为这款工具的诞生,让我在过去那段时间里能让自己的移动设备免受广告的侵扰,以至于至今我还把它当成主力的广告过滤工具在我的软路由上默默的为全家手机服务

视频说明


Pi-hole是什么


Pi-hole的核心组件pihole-FTL实际上就是一个dnsmasq的分支,它相比于原版的dnsmasq在功能上有专门针对广告过滤的优化,它只是将过去需要手动进行的广告过滤规则进行了自动化配置;原版的dnsmasq可以通过address=这样的配置进行广告屏蔽,如果广告域名较多的话,那配置起来简直让人抓狂,而Pi-hole作为一款好用的工具简化了广告过滤规则的配置过程,真乃懒人之福音

搭建过程


由于Pi-hole的本质就是dnsmasq,为了不影响其正常的安装,在安装之前需要卸载掉本机已经安装的dnsmasq,这也是为什么我在上期视频中没有附加广告过滤部分的原因

前期准备

  • 备份dnsmasq配置并将其卸载:

执行命令systemctl stop dnsmasq将dnsmasq服务停止,之后就是将上次编写的配置文件给备份(实际上并不需要备份,基本上会自动生成),此处我使用mv命令,直接将整个目录重命名了,这样有两点好处:

1.备份

2.防止安装Pi-hole之后因为配置冲突造成启动失败

此处实际上应该还要卸载,只是我忘记了,大家记得要执行下述命令来进行dnsmasq的卸载apt-get autoremove dnsmasq -y

  • 安装必要的下载工具curl

安装Pi-hole的一键脚本需要用到,那就装呗,apt-get install curl -y

  • 配置代理

感谢伟大的GFW,装个国外的软件真心好痛苦,还好咱有代理可以用,export命令走起

一键安装

想要安装Pi-hole还是很简单的(这是现在,过去可是很坑的,动不动依赖就会出问题,当然大部分原因都是有伟大的GFW),官方直接提供了一键脚本

根据官方给出的命令,执行就是了curl -sSL https://install.pi-hole.net | bash

如果不出意外的话,基本上都能顺利的进入配置界面

安装配置

  • 在安装部分依赖之后,系统会自动进入配置的界面,如下图所示:

Pi-hole的一些说明之后就是正式的安装配置了

  • 选择提供服务的网卡,此处是LAN口的ens224

  • 选择上游服务器,现在图省事我直接使用了Google的,然后直接确定进入下一步

  • 广告过滤的策略,先保持默认吧

  • 选择IP类型,IPv4 OR IPv6,现在IPv6还有很多问题,暂时就只用IPv4

  • 确认一下网络设置情况,保证能够正常上网

  • 之后系统会询问是否需要安装web界面,小白必备,自然是需要的

  • 开启查询记录,此处我选择了记录全部内容

之后Pi-hole就会基于刚刚的配置开始自动安装,这期间需要下载一些组件,如果网络不好的话就有可能会失败,所以代理还是很有必要的

接下来就进入最后的一部分配置,包括防火墙,登陆密码等

  • 配置防火墙(如果没有启用防火墙,这边可以随意),建议安装Pi-hole需要用到的防火墙规则,默认会打开其所需要用到的端口:53674711~472080

  • 完成安装及显示登录密码,之后可以通过显示的登陆地址和登陆密码进行后台管理

后台管理


登陆

登陆地址在安装完之后会自动显示,其实就是两个网卡所对应的地址,默认直接输入http://ip/admin即可进入界面,如果没有在IP后面加上/admin,那默认会进入如下界面:

直接点击Did you mean to go to the admin panel即可进入后台界面,之后看到的就是基本的状态界面,上面可以直观的看到请求数,被拦截的查询等

这个界面只是状态展示,如果要进行管理,需要登录进去,点击左侧的Login进行登录,密码在Pi-hole安装完之后已经显示在界面上了

如果嫌自动生成的密码太难记,直接可以使用pihole -a -p命令进行修改,执行命令后输入两次新密码即可

登陆之后所有功能都会在左侧显示,状态界面显示的内容也会更丰富

功能配置

Pi-hole的大部分功能配置都是在系统设置中调整的,点击左侧的Settings选项,出现系统配置的几个选项卡

  • 上游DNS调整

选择DNS选项卡,在安装过程中我使用了谷歌的DNS服务器,此时我依然打算使用DNSCrypt-Proxy作为主要的上游服务器,取消谷歌的服务器的勾选,在Custom 1(IPv4)中填入DNSCrypt-Proxy的监听地址及端口,此处是127.0.0.1#5353

点击右下角的SAVE之后即可生效,同时在/etc/dnsmasq.d/目录下的配置文件也会出现相应的修改,由于pihole-FTL就是一个dnsmasq的增强版本,所以dnsmasq上使用的语法在它身上依然可以使用,vi /etc/dnsmasq.d/01-pihole.conf

此处可以看到服务器部分已经是自定义的那个服务器地址了

  • 启用DHCP功能

选择DHCP选项卡,勾选DHCP server enabled,并配置好起始和结束的IP地址,当然,也不要忘记把网关地址设置正确,同样的,保存之后就可生效,相应的在/etc/dnsmasq.d目录下也会生成对应的配置文件

此时DHCP功能的配置文件名是02-pihole-dhcp.conf

  • 添加合理的广告过滤规则

点击Blocklists查看默认的广告过滤规则,这些广告过滤规则并不符合中国用户的使用习惯,此处我建议全部取消前面的勾选

此处我推荐一个广告过滤规则的Github项目:neohosts

项目提供的几种类型的规则地址,我主要推荐如下两个,这两个任选其一即可,具体的不同可以查看项目的说明

直接复制规则的地址,填入Blocklists选项卡的规则地址位置,点击Save and Update使其生效即可

此时添加的规则已经可以满足轻量级的广告过滤需求了,当然,如果想要更加强力点的广告过滤能力,建议移植Adblock plus中的Easylistchina等规则,由于Pi-hole并不兼容Adblock plus的规则语法,所以只能移植其中收集到的广告域名,虽然功能上受限制了,但是也是对原有广告过滤功能的增强

/opt目录下新建一个脚本文件adblock.sh,输入如下内容:

1
2
3
4
5
6
7
curl -s -L https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt https://easylist-downloads.adblockplus.org/malwaredomains_full.txt https://easylist-downloads.adblockplus.org/fanboy-social.txt > adblock.unsorted

sort -u adblock.unsorted | grep ^\|\|.*\^$ | grep -v \/ > adblock.sorted

sed 's/[\|^]//g' < adblock.sorted > adblock.hosts

rm adblock.unsorted adblock.sorted

保存并退出,然后执行bash ./adblock.sh,稍等片刻,之后就会生成一个包含大量域名的文件adblock.hosts

同样的在Blocklists中填写规则地址,由于adblock.hosts文件是本地文件,所以规则的地址需要变化一下,将http(s)://替换为file://,之后在后面跟上文件的完整路径即可,此处的规则地址是file:///opt/adblock.hosts

  • DNS查询分流

这个功能在上一期中已经介绍过,在/etc/dnsmasq.d目录下引入dnsmasq-china-list的配置文件即可,这里我依然使用软链接的方式进行添加,添加完成之后直接执行pihole restartdns即可重启Pi-hole服务

总结


至此Pi-hole算是搭建完成了,虽然广告过滤是使用了DNS解析过滤的方式,效果并不是特别好,但好处是不会影响网速,相比于浏览器插件而言,各有优缺点吧!

如果想要自定义一些域名的处理方式的话,在左侧的WhitelistBlacklist中可以手动进行调整,具体的就不展开了,大家有兴趣去自己尝试一下

Debian系统自带sshd解决不支持账号密码认证和自动断开问题

Debian10.2系统自带sshd解决不支持账号密码认证和自动断开问题

sed -i ‘s/PermitRootLogin no/PermitRootLogin yes/g’ /etc/ssh/sshd_config
sed -i ‘s/PasswordAuthentication no/PasswordAuthentication yes/g’ /etc/ssh/sshd_config
service ssh restart

Debian 10

或10.3
sed -i ‘s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g’ /etc/ssh/sshd_config
sed -i ‘s/#PasswordAuthentication yes/PasswordAuthentication yes/g’ /etc/ssh/sshd_config

 

service ssh restart #SSH重启
———————————————

debian10.2系统自带的ssh服务,在实际使用的时候,出现如下两个问题:

①账号密码方式不支持;

②客户端使用SecureCRT连接Debian的sshd后,无操作过一会会自己断开。

vim /etc/ssh/sshd_config
我修改如下几处内容:

PasswordAuthentication yes
TCPKeepAlive yes
ClientAliveCountMax 360
其中PasswordAuthentication是让sshd支持账号密码形式的认证。TCPKeepAlive是sshd和客户端有保活机制。ClientAliveCountMax指的是如果客户端这些次都没有相应,就关闭连接。
————————————————
版权声明:本文为CSDN博主「黑色之光_duan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/microsko/article/details/104270002

Linux ls 命令

Linux 命令大全 Linux 命令大全

Linux ls(英文全拼:list files)命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。

语法

 ls [-alrtAFR] [name...]

参数 :

  • -a 显示所有文件及目录 (. 开头的隐藏文件也会列出)
  • -l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
  • -r 将文件以相反次序显示(原定依英文字母次序)
  • -t 将文件依建立时间之先后次序列出
  • -A 同 -a ,但不列出 “.” (目前目录) 及 “..” (父目录)
  • -F 在列出的文件名称后加一符号;例如可执行档则加 “*”, 目录则加 “/”
  • -R 若目录下有文件,则以下之文件亦皆依序列出

实例

列出根目录(\)下的所有目录:

# ls /
bin               dev   lib         media  net   root     srv  upload  www
boot              etc   lib64       misc   opt   sbin     sys  usr
home  lost+found  mnt    proc  selinux  tmp  var

列出目前工作目录下所有名称是 s 开头的文件,越新的排越后面 :

ls -ltr s*

将 /bin 目录以下所有目录及文件详细资料列出 :

ls -lR /bin

列出目前工作目录下所有文件及目录;目录于名称后加 “/”, 可执行档于名称后加 “*” :

ls -AF

Linux 命令大全 Linux 命令大全

1 篇笔记写笔记

  1.    rapattern

      rap***ern@foxmail.com

      参考地址

    84

    [root@localhost ~]# ls -ahl

    total 28K

    dr-xr-x—.  2 root root  135 Dec 16 02:34 .

    dr-xr-xr-x. 17 root root  224 Dec 14 01:38 ..

    -rw——-.  1 root root 1.3K Dec 14 01:38 anaconda-ks.cfg

    -rw——-.  1 root root 1.2K Dec 16 02:34 .bash_history

    -rw-r–r–.  1 root root   18 Dec 28  2013 .bash_logout

    -rw-r–r–.  1 root root  176 Dec 28  2013 .bash_profile

    -rw-r–r–.  1 root root  176 Dec 28  2013 .bashrc

    -rw-r–r–.  1 root root  100 Dec 28  2013 .cshrc

    -rw-r–r–.  1 root root  129 Dec 28  2013 .tcshrc

    从上面可以看到,每一行都有7列,分别是:

    1. 第一列共10位,第1位表示文档类型,d表示目录,-表示文件,l表示链接文件,d表示可随机存取的设备,如U盘等,c表示一次性读取设备,如鼠标、键盘等。后9位,依次对应三种身份所拥有的权限,身份顺序为:owner、group、others,权限顺序为:readable、writable、excutable。如:-r-xr-x---的含义为当前文档是一个文件,拥有者可读、可执行,同一个群组下的用户,可读、可执行,其他人没有任何权限
    2. 第二列表示链接数,表示有多少个文件链接到inode号码。
    3. 第三列表示拥有者
    4. 第四列表示所属群组
    5. 第五列表示文档容量大小,单位字节
    6. 第六列表示文档最后修改时间,注意不是文档的创建时间哦
    7. 第七列表示文档名称。以点(.)开头的是隐藏文档
    rapattern

       rapattern

      rap***ern@foxmail.com

      参考地址

    12个月前 (01-14)